From 49b652c8df08b83e00d2c927dd0049cef38cfce9 Mon Sep 17 00:00:00 2001 From: Jack Hayward Date: Tue, 28 Jan 2025 12:53:39 -0700 Subject: [PATCH 001/435] My first commit to the GUI-Redesign Branch (for Real) --- CONTRIBUTORS | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 3a63f6e57..1afdd5b81 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -30,3 +30,4 @@ Tomàs Margalef Hannah Gedlaman Nicholas Kim Rui Zhang +Jack Hayward From b42ac13acacf1b393bd3d360eacf45fae7c12687 Mon Sep 17 00:00:00 2001 From: Codymm03 Date: Tue, 28 Jan 2025 18:56:08 -0700 Subject: [PATCH 002/435] QT6 Files --- src/gui/qt6/.gitignore | 73 +++++++ src/gui/qt6/CMakeLists.txt | 45 +++++ src/gui/qt6/CMakeLists.txt.user | 346 ++++++++++++++++++++++++++++++++ src/gui/qt6/main.cpp | 11 + src/gui/qt6/mainwindow.cpp | 15 ++ src/gui/qt6/mainwindow.h | 21 ++ src/gui/qt6/mainwindow.ui | 22 ++ 7 files changed, 533 insertions(+) create mode 100644 src/gui/qt6/.gitignore create mode 100644 src/gui/qt6/CMakeLists.txt create mode 100644 src/gui/qt6/CMakeLists.txt.user create mode 100644 src/gui/qt6/main.cpp create mode 100644 src/gui/qt6/mainwindow.cpp create mode 100644 src/gui/qt6/mainwindow.h create mode 100644 src/gui/qt6/mainwindow.ui diff --git a/src/gui/qt6/.gitignore b/src/gui/qt6/.gitignore new file mode 100644 index 000000000..fab7372d7 --- /dev/null +++ b/src/gui/qt6/.gitignore @@ -0,0 +1,73 @@ +# This file is used to ignore files which are generated +# ---------------------------------------------------------------------------- + +*~ +*.autosave +*.a +*.core +*.moc +*.o +*.obj +*.orig +*.rej +*.so +*.so.* +*_pch.h.cpp +*_resource.rc +*.qm +.#* +*.*# +core +!core/ +tags +.DS_Store +.directory +*.debug +Makefile* +*.prl +*.app +moc_*.cpp +ui_*.h +qrc_*.cpp +Thumbs.db +*.res +*.rc +/.qmake.cache +/.qmake.stash + +# qtcreator generated files +*.pro.user* + +# xemacs temporary files +*.flc + +# Vim temporary files +.*.swp + +# Visual Studio generated files +*.ib_pdb_index +*.idb +*.ilk +*.pdb +*.sln +*.suo +*.vcproj +*vcproj.*.*.user +*.ncb +*.sdf +*.opensdf +*.vcxproj +*vcxproj.* + +# MinGW generated files +*.Debug +*.Release + +# Python byte code +*.pyc + +# Binaries +# -------- +*.dll +*.exe + diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt new file mode 100644 index 000000000..8ea621eb5 --- /dev/null +++ b/src/gui/qt6/CMakeLists.txt @@ -0,0 +1,45 @@ +cmake_minimum_required(VERSION 3.5) + +project(QT6 LANGUAGES CXX) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# QtCreator supports the following variables for Android, which are identical to qmake Android variables. +# Check http://doc.qt.io/qt-5/deployment-android.html for more information. +# They need to be set before the find_package(Qt5 ...) call. + +#if(ANDROID) +# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") +# if (ANDROID_ABI STREQUAL "armeabi-v7a") +# set(ANDROID_EXTRA_LIBS +# ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so +# ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so) +# endif() +#endif() + +find_package(Qt5 COMPONENTS Widgets REQUIRED) + +if(ANDROID) + add_library(QT6 SHARED + main.cpp + mainwindow.cpp + mainwindow.h + mainwindow.ui + ) +else() + add_executable(QT6 + main.cpp + mainwindow.cpp + mainwindow.h + mainwindow.ui + ) +endif() + +target_link_libraries(QT6 PRIVATE Qt5::Widgets) diff --git a/src/gui/qt6/CMakeLists.txt.user b/src/gui/qt6/CMakeLists.txt.user new file mode 100644 index 000000000..a992a29eb --- /dev/null +++ b/src/gui/qt6/CMakeLists.txt.user @@ -0,0 +1,346 @@ + + + + + + EnvironmentId + {ffebe718-7e6c-496a-80e5-5cb3ef92867b} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + true + + + + ProjectExplorer.Project.Target.0 + + QT6 + QT6 + {410b4c54-95c1-4d21-bd01-659bbf2c80f8} + 0 + 0 + 0 + + + CMAKE_BUILD_TYPE:STRING=Debug + CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + + /home/cody/WindNinja/windninja/src/gui/qt6/build-QT6-QT6-Debug + + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + CMakeProjectManager.CMakeBuildConfiguration + + + + CMAKE_BUILD_TYPE:STRING=Release + CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + + /home/cody/WindNinja/windninja/src/gui/qt6/build-QT6-QT6-Release + + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + CMakeProjectManager.CMakeBuildConfiguration + + + + CMAKE_BUILD_TYPE:STRING=RelWithDebInfo + CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + + /home/cody/WindNinja/windninja/src/gui/qt6/build-QT6-QT6-RelWithDebInfo + + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release with Debug Information + CMakeProjectManager.CMakeBuildConfiguration + + + + CMAKE_BUILD_TYPE:STRING=MinSizeRel + CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + + /home/cody/WindNinja/windninja/src/gui/qt6/build-QT6-QT6-MinSizeRel + + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Minimum Size Release + CMakeProjectManager.CMakeBuildConfiguration + + 4 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + QT6 + CMakeProjectManager.CMakeRunConfiguration.QT6 + QT6 + + false + + false + true + true + false + false + true + + /tmp/QtCreator-uOWCgm/qtc-cmake-lqVeEbxH + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/src/gui/qt6/main.cpp b/src/gui/qt6/main.cpp new file mode 100644 index 000000000..fd3e53341 --- /dev/null +++ b/src/gui/qt6/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + return a.exec(); +} diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp new file mode 100644 index 000000000..a06fc8e39 --- /dev/null +++ b/src/gui/qt6/mainwindow.cpp @@ -0,0 +1,15 @@ +#include "mainwindow.h" +#include "./ui_mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , ui(new Ui::MainWindow) +{ + ui->setupUi(this); +} + +MainWindow::~MainWindow() +{ + delete ui; +} + diff --git a/src/gui/qt6/mainwindow.h b/src/gui/qt6/mainwindow.h new file mode 100644 index 000000000..4643e322a --- /dev/null +++ b/src/gui/qt6/mainwindow.h @@ -0,0 +1,21 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +QT_BEGIN_NAMESPACE +namespace Ui { class MainWindow; } +QT_END_NAMESPACE + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +private: + Ui::MainWindow *ui; +}; +#endif // MAINWINDOW_H diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui new file mode 100644 index 000000000..b232854ba --- /dev/null +++ b/src/gui/qt6/mainwindow.ui @@ -0,0 +1,22 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + + + From de538763eaf8f1b95bf4b462b57c388ca0544456 Mon Sep 17 00:00:00 2001 From: Austen Harrell Date: Tue, 28 Jan 2025 19:02:59 -0700 Subject: [PATCH 003/435] test --- test.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test.txt diff --git a/test.txt b/test.txt new file mode 100644 index 000000000..e69de29bb From f81b56cde017b7ed9c655eff37a833aaa0a77d63 Mon Sep 17 00:00:00 2001 From: Codymm03 Date: Tue, 28 Jan 2025 19:11:19 -0700 Subject: [PATCH 004/435] Testing in my fork. --- test.file | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test.file diff --git a/test.file b/test.file new file mode 100644 index 000000000..e69de29bb From 2f77618ef89a3014ba1ba377ed45a07ee4e4bc8e Mon Sep 17 00:00:00 2001 From: Codymm03 Date: Tue, 28 Jan 2025 19:15:51 -0700 Subject: [PATCH 005/435] CMakeFile --- src/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6a1a58d80..2e7a67cc0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -22,6 +22,9 @@ add_subdirectory(ninja) if(NINJA_QTGUI) add_subdirectory(gui) endif(NINJA_QTGUI) +if(NINJA_QT6GUI) + add_subdirectory(gui/qt6) +endif(NINJA_QT6GUI) if(NINJA_CLI) add_subdirectory(cli) endif(NINJA_CLI) From 2c66b3ac084fa58b027561c9f61d00551d2b470c Mon Sep 17 00:00:00 2001 From: Codymm03 Date: Tue, 28 Jan 2025 19:27:26 -0700 Subject: [PATCH 006/435] CMakeBuild --- CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c9ce1bb3..d21f09df8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -125,6 +125,12 @@ if(NINJA_QT5GUI) add_subdirectory(src/gui/ui) endif(NINJA_QT5GUI) +option(NINJA_QT6GUI "build Qt6 experimental GUI" ON) +if(NINJA_QT6GUI) + message("building qt6 gui") + add_subdirectory(src/gui/qt6) +endif(NINJA_QT6GUI) + if(WIN32) if(NOT NETCDF_INCLUDES-NOTFOUND AND GIS_INTERNALS_HOME) set(NETCDF_INCLUDES ${GIS_INTERNALS_HOME}/include CACHE TYPE PATH FORCE) From 66063d2e39684057e35d86f0651c4a2877f33cad Mon Sep 17 00:00:00 2001 From: Austen Harrell Date: Tue, 28 Jan 2025 19:54:03 -0700 Subject: [PATCH 007/435] new qt project seed files --- CMakeLists.txt.user | 420 +++++++ .../.cmake/api/v1/query/cache-v2 | 0 .../.cmake/api/v1/query/cmakeFiles-v1 | 0 .../.cmake/api/v1/query/codemodel-v2 | 0 .../.qtc/package-manager/LICENSE.conan | 21 + .../.qtc/package-manager/auto-setup.cmake | 272 +++++ .../.qtc/package-manager/conan.cmake | 1026 +++++++++++++++++ .../.qtc/package-manager/conan_provider.cmake | 655 +++++++++++ build/Desktop_Qt_6_8_0-Debug/CMakeCache.txt | 445 +++++++ .../CMakeFiles/3.29.3/CMakeCCompiler.cmake | 80 ++ .../CMakeFiles/3.29.3/CMakeCXXCompiler.cmake | 92 ++ .../3.29.3/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 15968 bytes .../3.29.3/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 15992 bytes .../CMakeFiles/3.29.3/CMakeSystem.cmake | 15 + .../3.29.3/CompilerIdC/CMakeCCompilerId.c | 895 ++++++++++++++ .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 878 ++++++++++++++ .../CMakeFiles/CMakeConfigureLog.yaml | 556 +++++++++ .../CMakeFiles/cmake.check_cache | 1 + build/Desktop_Qt_6_8_0-Debug/ninja_version.h | 39 + .../Desktop_Qt_6_8_0-Debug/qtcsettings.cmake | 10 + .../.cmake/api/v1/query/cache-v2 | 0 .../.cmake/api/v1/query/cmakeFiles-v1 | 0 .../.cmake/api/v1/query/codemodel-v2 | 0 .../.qtc/package-manager/LICENSE.conan | 21 + .../.qtc/package-manager/auto-setup.cmake | 272 +++++ .../.qtc/package-manager/conan.cmake | 1026 +++++++++++++++++ .../.qtc/package-manager/conan_provider.cmake | 655 +++++++++++ build/Desktop_Qt_6_8_0-Release/CMakeCache.txt | 445 +++++++ .../CMakeFiles/3.29.3/CMakeCCompiler.cmake | 80 ++ .../CMakeFiles/3.29.3/CMakeCXXCompiler.cmake | 92 ++ .../3.29.3/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 15968 bytes .../3.29.3/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 15992 bytes .../CMakeFiles/3.29.3/CMakeSystem.cmake | 15 + .../3.29.3/CompilerIdC/CMakeCCompilerId.c | 895 ++++++++++++++ .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 878 ++++++++++++++ .../CMakeFiles/CMakeConfigureLog.yaml | 556 +++++++++ .../CMakeFiles/cmake.check_cache | 1 + .../Desktop_Qt_6_8_0-Release/ninja_version.h | 39 + .../qtcsettings.cmake | 10 + src/gui/qt6/CMakeLists.txt | 91 +- src/gui/qt6/CMakeLists.txt.user | 319 ++--- .../qt6/CMakeLists.txt.user:Zone.Identifier | 0 src/gui/qt6/CMakeLists.txt:Zone.Identifier | 0 src/gui/qt6/main.cpp | 11 +- src/gui/qt6/main.cpp:Zone.Identifier | 0 src/gui/qt6/mainwindow.cpp | 12 +- src/gui/qt6/mainwindow.cpp:Zone.Identifier | 0 src/gui/qt6/mainwindow.h | 15 +- src/gui/qt6/mainwindow.h:Zone.Identifier | 0 src/gui/qt6/mainwindow.ui | 11 +- src/gui/qt6/mainwindow.ui:Zone.Identifier | 0 51 files changed, 10655 insertions(+), 194 deletions(-) create mode 100644 CMakeLists.txt.user create mode 100644 build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cache-v2 create mode 100644 build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cmakeFiles-v1 create mode 100644 build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/codemodel-v2 create mode 100644 build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/LICENSE.conan create mode 100644 build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake create mode 100644 build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan.cmake create mode 100644 build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan_provider.cmake create mode 100644 build/Desktop_Qt_6_8_0-Debug/CMakeCache.txt create mode 100644 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCCompiler.cmake create mode 100644 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake create mode 100755 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_C.bin create mode 100755 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_CXX.bin create mode 100644 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeSystem.cmake create mode 100644 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdC/CMakeCCompilerId.c create mode 100644 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100644 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeConfigureLog.yaml create mode 100644 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/cmake.check_cache create mode 100644 build/Desktop_Qt_6_8_0-Debug/ninja_version.h create mode 100644 build/Desktop_Qt_6_8_0-Debug/qtcsettings.cmake create mode 100644 build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/cache-v2 create mode 100644 build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/cmakeFiles-v1 create mode 100644 build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/codemodel-v2 create mode 100644 build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/LICENSE.conan create mode 100644 build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/auto-setup.cmake create mode 100644 build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/conan.cmake create mode 100644 build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/conan_provider.cmake create mode 100644 build/Desktop_Qt_6_8_0-Release/CMakeCache.txt create mode 100644 build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeCCompiler.cmake create mode 100644 build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake create mode 100755 build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_C.bin create mode 100755 build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_CXX.bin create mode 100644 build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeSystem.cmake create mode 100644 build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CompilerIdC/CMakeCCompilerId.c create mode 100644 build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100644 build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeConfigureLog.yaml create mode 100644 build/Desktop_Qt_6_8_0-Release/CMakeFiles/cmake.check_cache create mode 100644 build/Desktop_Qt_6_8_0-Release/ninja_version.h create mode 100644 build/Desktop_Qt_6_8_0-Release/qtcsettings.cmake create mode 100644 src/gui/qt6/CMakeLists.txt.user:Zone.Identifier create mode 100644 src/gui/qt6/CMakeLists.txt:Zone.Identifier create mode 100644 src/gui/qt6/main.cpp:Zone.Identifier create mode 100644 src/gui/qt6/mainwindow.cpp:Zone.Identifier create mode 100644 src/gui/qt6/mainwindow.h:Zone.Identifier create mode 100644 src/gui/qt6/mainwindow.ui:Zone.Identifier diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user new file mode 100644 index 000000000..52bc0871d --- /dev/null +++ b/CMakeLists.txt.user @@ -0,0 +1,420 @@ + + + + + + EnvironmentId + {f3a83e8a-49e6-4193-9c60-1e85ac4bd4eb} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + 0 + false + true + false + 2 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + false + + + 0 + true + + true + true + Builtin.DefaultTidyAndClazy + 14 + true + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop Qt 6.8.0 + Desktop Qt 6.8.0 + qt.qt6.680.linux_gcc_64_kit + 0 + 0 + 0 + + Debug + 2 + false + + -DCMAKE_GENERATOR:STRING=Ninja +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_BUILD_TYPE:STRING=Debug +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} + 0 + /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug + + + + + all + + false + + true + Build + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + Build + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + CMakeProjectManager.CMakeBuildConfiguration + + + Release + 2 + false + + -DCMAKE_GENERATOR:STRING=Ninja +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_BUILD_TYPE:STRING=Release +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} + /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release + + + + + all + + false + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release + CMakeProjectManager.CMakeBuildConfiguration + + + RelWithDebInfo + 2 + false + + -DCMAKE_GENERATOR:STRING=Ninja +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} + /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-RelWithDebInfo + + + + + all + + false + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release with Debug Information + CMakeProjectManager.CMakeBuildConfiguration + + + RelWithDebInfo + 2 + false + + -DCMAKE_GENERATOR:STRING=Ninja +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} + 0 + /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Profile + + + + + all + + false + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Profile + CMakeProjectManager.CMakeBuildConfiguration + + + MinSizeRel + 2 + false + + -DCMAKE_GENERATOR:STRING=Ninja +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_BUILD_TYPE:STRING=MinSizeRel +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} + /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-MinSizeRel + + + + + all + + false + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Minimum Size Release + CMakeProjectManager.CMakeBuildConfiguration + + 5 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph dwarf,4096 -F 250 + + ProjectExplorer.CustomExecutableRunConfiguration + + false + true + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cache-v2 b/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cache-v2 new file mode 100644 index 000000000..e69de29bb diff --git a/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cmakeFiles-v1 b/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cmakeFiles-v1 new file mode 100644 index 000000000..e69de29bb diff --git a/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/codemodel-v2 b/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/codemodel-v2 new file mode 100644 index 000000000..e69de29bb diff --git a/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/LICENSE.conan b/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/LICENSE.conan new file mode 100644 index 000000000..541f5a3a6 --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/LICENSE.conan @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2019 JFrog + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake b/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake new file mode 100644 index 000000000..c797138f6 --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake @@ -0,0 +1,272 @@ +# +# Internal Qt Creator variable reference +# +foreach(qtcreator_var + QT_QMAKE_EXECUTABLE CMAKE_PREFIX_PATH CMAKE_C_COMPILER CMAKE_CXX_COMPILER + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELWITHDEBINFO) + set(__just_reference_${qtcreator_var} ${${qtcreator_var}}) +endforeach() + +if (EXISTS "${CMAKE_SOURCE_DIR}/QtCreatorPackageManager.cmake") + include("${CMAKE_SOURCE_DIR}/QtCreatorPackageManager.cmake") +endif() + +if (QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP) + return() +endif() +option(QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP "Skip Qt Creator's package manager auto-setup" OFF) + +# Store the C/C++ object output extension +if (CMAKE_VERSION GREATER_EQUAL "3.19") + cmake_language(DEFER CALL set CMAKE_C_OUTPUT_EXTENSION "${CMAKE_C_OUTPUT_EXTENSION}" CACHE STRING "" FORCE) + cmake_language(DEFER CALL set CMAKE_CXX_OUTPUT_EXTENSION "${CMAKE_CXX_OUTPUT_EXTENSION}" CACHE STRING "" FORCE) +endif() + +macro(qtc_auto_setup_compiler_standard toolchainFile) + foreach(lang_var C CXX CUDA OBJC OBJCXX) + foreach(prop_var STANDARD STANDARD_REQUIRED EXTENSIONS) + if (CMAKE_${lang_var}_${prop_var}) + file(APPEND "${toolchainFile}" + "set(CMAKE_${lang_var}_${prop_var} ${CMAKE_${lang_var}_${prop_var}})\n") + endif() + endforeach() + endforeach() + + # Forward important CMake variables to the package manager in the toolchain file + foreach(fwd_var CMAKE_MSVC_RUNTIME_LIBRARY CMAKE_SYSROOT CMAKE_OSX_SYSROOT CMAKE_OSX_ARCHITECTURES) + if (${fwd_var}) + file(APPEND "${toolchainFile}" + "set(${fwd_var} ${${fwd_var}})\n") + endif() + endforeach() +endmacro() + +# +# conan +# +macro(qtc_auto_setup_conan) + foreach(file conanfile.txt conanfile.py) + if (EXISTS "${CMAKE_SOURCE_DIR}/${file}") + set(conanfile_txt "${CMAKE_SOURCE_DIR}/${file}") + break() + endif() + endforeach() + + if (conanfile_txt AND NOT QT_CREATOR_SKIP_CONAN_SETUP) + option(QT_CREATOR_SKIP_CONAN_SETUP "Skip Qt Creator's conan package manager auto-setup" OFF) + set(QT_CREATOR_CONAN_BUILD_POLICY "missing" CACHE STRING "Qt Creator's conan package manager auto-setup build policy. This is used for the BUILD property of cmake_conan_run") + + find_program(conan_program conan) + if (NOT conan_program) + message(WARNING "Qt Creator: conan executable not found. " + "Package manager auto-setup will be skipped. " + "To disable this warning set QT_CREATOR_SKIP_CONAN_SETUP to ON.") + return() + endif() + execute_process(COMMAND ${conan_program} --version + RESULT_VARIABLE result_code + OUTPUT_VARIABLE conan_version_output + ERROR_VARIABLE conan_version_output) + if (NOT result_code EQUAL 0) + message(FATAL_ERROR "conan --version failed='${result_code}: ${conan_version_output}") + endif() + + string(REGEX REPLACE ".*Conan version ([0-9].[0-9]).*" "\\1" conan_version "${conan_version_output}") + + set(conanfile_timestamp_file "${CMAKE_BINARY_DIR}/conan-dependencies/conanfile.timestamp") + file(TIMESTAMP "${conanfile_txt}" conanfile_timestamp) + + set(do_conan_installation ON) + if (EXISTS "${conanfile_timestamp_file}") + file(READ "${conanfile_timestamp_file}" old_conanfile_timestamp) + if ("${conanfile_timestamp}" STREQUAL "${old_conanfile_timestamp}") + set(do_conan_installation OFF) + endif() + endif() + + set(conanfile_build_policy_file "${CMAKE_BINARY_DIR}/conan-dependencies/conanfile.buildpolicy") + if (EXISTS "${conanfile_build_policy_file}") + file(READ "${conanfile_build_policy_file}" build_policy) + if (NOT "${build_policy}" STREQUAL "${QT_CREATOR_CONAN_BUILD_POLICY}") + set(do_conan_installation ON) + endif() + endif() + + if (do_conan_installation) + message(STATUS "Qt Creator: conan package manager auto-setup. " + "Skip this step by setting QT_CREATOR_SKIP_CONAN_SETUP to ON.") + + file(COPY "${conanfile_txt}" DESTINATION "${CMAKE_BINARY_DIR}/conan-dependencies/") + + file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" " + set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\") + set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\") + ") + qtc_auto_setup_compiler_standard("${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake") + + if (CMAKE_TOOLCHAIN_FILE) + file(APPEND "${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" + "include(\"${CMAKE_TOOLCHAIN_FILE}\")\n") + endif() + + file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/CMakeLists.txt" " + cmake_minimum_required(VERSION 3.15) + + unset(CMAKE_PROJECT_INCLUDE_BEFORE CACHE) + project(conan-setup) + + if (${conan_version} VERSION_GREATER_EQUAL 2.0) + set(CONAN_COMMAND \"${conan_program}\") + include(\"${CMAKE_CURRENT_LIST_DIR}/conan_provider.cmake\") + conan_profile_detect_default() + detect_host_profile(\"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\") + + set(build_types \${CMAKE_BUILD_TYPE}) + if (CMAKE_CONFIGURATION_TYPES) + set(build_types \${CMAKE_CONFIGURATION_TYPES}) + endif() + + foreach(type \${build_types}) + conan_install( + -pr \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\" + --build=${QT_CREATOR_CONAN_BUILD_POLICY} + -s build_type=\${type} + -g CMakeDeps) + endforeach() + + get_property(CONAN_INSTALL_SUCCESS GLOBAL PROPERTY CONAN_INSTALL_SUCCESS) + if (CONAN_INSTALL_SUCCESS) + get_property(CONAN_GENERATORS_FOLDER GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) + file(TO_CMAKE_PATH \"\${CONAN_GENERATORS_FOLDER}\" CONAN_GENERATORS_FOLDER) + file(WRITE \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake\" \" + list(PREPEND CMAKE_PREFIX_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") + list(PREPEND CMAKE_MODULE_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") + list(PREPEND CMAKE_FIND_ROOT_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") + list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH) + list(REMOVE_DUPLICATES CMAKE_MODULE_PATH) + list(REMOVE_DUPLICATES CMAKE_FIND_ROOT_PATH) + set(CMAKE_PREFIX_PATH \\\"\\\${CMAKE_PREFIX_PATH}\\\" CACHE STRING \\\"\\\" FORCE) + set(CMAKE_MODULE_PATH \\\"\\\${CMAKE_MODULE_PATH}\\\" CACHE STRING \\\"\\\" FORCE) + set(CMAKE_FIND_ROOT_PATH \\\"\\\${CMAKE_FIND_ROOT_PATH}\\\" CACHE STRING \\\"\\\" FORCE) + \") + endif() + else() + include(\"${CMAKE_CURRENT_LIST_DIR}/conan.cmake\") + conan_cmake_run( + CONANFILE \"${conanfile_txt}\" + INSTALL_FOLDER \"${CMAKE_BINARY_DIR}/conan-dependencies\" + GENERATORS cmake_paths cmake_find_package json + BUILD ${QT_CREATOR_CONAN_BUILD_POLICY} + ENV CONAN_CMAKE_TOOLCHAIN_FILE=\"${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake\" + ) + endif() + ") + + if (NOT DEFINED CMAKE_BUILD_TYPE AND NOT DEFINED CMAKE_CONFIGURATION_TYPES) + set(CMAKE_CONFIGURATION_TYPES "Debug;Release") + endif() + + execute_process(COMMAND ${CMAKE_COMMAND} + -S "${CMAKE_BINARY_DIR}/conan-dependencies/" + -B "${CMAKE_BINARY_DIR}/conan-dependencies/build" + -C "${CMAKE_BINARY_DIR}/qtcsettings.cmake" + -D "CMAKE_TOOLCHAIN_FILE=${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" + -G ${CMAKE_GENERATOR} + -D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -D "CMAKE_CONFIGURATION_TYPES=${CMAKE_CONFIGURATION_TYPES}" + RESULT_VARIABLE result + ) + if (result EQUAL 0) + file(WRITE "${conanfile_timestamp_file}" "${conanfile_timestamp}") + file(WRITE "${conanfile_build_policy_file}" ${QT_CREATOR_CONAN_BUILD_POLICY}) + else() + message(WARNING "Qt Creator's conan package manager auto-setup failed. Consider setting " + "QT_CREATOR_SKIP_CONAN_SETUP to ON and reconfigure to skip this step.") + return() + endif() + endif() + + include("${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake") + endif() + unset(conanfile_txt) +endmacro() +qtc_auto_setup_conan() + +# +# vcpkg +# +macro(qtc_auto_setup_vcpkg) + if (EXISTS "${CMAKE_SOURCE_DIR}/vcpkg.json" AND NOT QT_CREATOR_SKIP_VCPKG_SETUP) + option(QT_CREATOR_SKIP_VCPKG_SETUP "Skip Qt Creator's vcpkg package manager auto-setup" OFF) + + find_program(vcpkg_program vcpkg + PATHS $ENV{VCPKG_ROOT} ${CMAKE_SOURCE_DIR}/vcpkg + NO_DEFAULT_PATH + ) + if (NOT vcpkg_program) + message(WARNING "Qt Creator: vcpkg executable not found. " + "Package manager auto-setup will be skipped. " + "To disable this warning set QT_CREATOR_SKIP_VCPKG_SETUP to ON.") + return() + endif() + execute_process(COMMAND ${vcpkg_program} version + RESULT_VARIABLE result_code + OUTPUT_VARIABLE vcpkg_version_output + ERROR_VARIABLE vcpkg_version_output) + if (NOT result_code EQUAL 0) + message(FATAL_ERROR "vcpkg version failed='${result_code}: ${vcpkg_version_output}") + endif() + + # Resolve any symlinks + get_filename_component(vpkg_program_real_path ${vcpkg_program} REALPATH) + get_filename_component(vpkg_root ${vpkg_program_real_path} DIRECTORY) + + if (NOT EXISTS "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") + message(STATUS "Qt Creator: vcpkg package manager auto-setup. " + "Skip this step by setting QT_CREATOR_SKIP_VCPKG_SETUP to ON.") + + file(WRITE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" " + set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\") + set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\") + ") + qtc_auto_setup_compiler_standard("${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") + + if (CMAKE_TOOLCHAIN_FILE AND NOT + CMAKE_TOOLCHAIN_FILE STREQUAL "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") + file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" + "include(\"${CMAKE_TOOLCHAIN_FILE}\")\n") + endif() + + if (VCPKG_TARGET_TRIPLET) + set(vcpkg_triplet ${VCPKG_TARGET_TRIPLET}) + else() + if (WIN32) + set(vcpkg_triplet x64-mingw-static) + if (CMAKE_CXX_COMPILER MATCHES ".*/(.*)/cl.exe") + set(vcpkg_triplet ${CMAKE_MATCH_1}-windows) + endif() + elseif(APPLE) + set(vcpkg_triplet x64-osx) + else() + set(vcpkg_triplet x64-linux) + endif() + endif() + + file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" " + set(VCPKG_TARGET_TRIPLET ${vcpkg_triplet}) + include(\"${vpkg_root}/scripts/buildsystems/vcpkg.cmake\") + ") + endif() + + set(CMAKE_TOOLCHAIN_FILE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" CACHE PATH "" FORCE) + + # Save CMAKE_PREFIX_PATH and CMAKE_MODULE_PATH as cache variables + if (CMAKE_VERSION GREATER_EQUAL "3.19") + cmake_language(DEFER CALL list REMOVE_DUPLICATES CMAKE_PREFIX_PATH) + cmake_language(DEFER CALL list REMOVE_DUPLICATES CMAKE_MODULE_PATH) + cmake_language(DEFER CALL set CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH}" CACHE STRING "" FORCE) + cmake_language(DEFER CALL set CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" CACHE STRING "" FORCE) + endif() + endif() +endmacro() +qtc_auto_setup_vcpkg() diff --git a/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan.cmake b/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan.cmake new file mode 100644 index 000000000..4f5f67e74 --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan.cmake @@ -0,0 +1,1026 @@ +# The MIT License (MIT) + +# Copyright (c) 2018 JFrog + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + + + +# This file comes from: https://github.com/conan-io/cmake-conan. Please refer +# to this repository for issues and documentation. + +# Its purpose is to wrap and launch Conan C/C++ Package Manager when cmake is called. +# It will take CMake current settings (os, compiler, compiler version, architecture) +# and translate them to conan settings for installing and retrieving dependencies. + +# It is intended to facilitate developers building projects that have conan dependencies, +# but it is only necessary on the end-user side. It is not necessary to create conan +# packages, in fact it shouldn't be use for that. Check the project documentation. + +# version: 0.18.1 + +include(CMakeParseArguments) + +function(_get_msvc_ide_version result) + set(${result} "" PARENT_SCOPE) + if(NOT MSVC_VERSION VERSION_LESS 1400 AND MSVC_VERSION VERSION_LESS 1500) + set(${result} 8 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1500 AND MSVC_VERSION VERSION_LESS 1600) + set(${result} 9 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1600 AND MSVC_VERSION VERSION_LESS 1700) + set(${result} 10 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1700 AND MSVC_VERSION VERSION_LESS 1800) + set(${result} 11 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1800 AND MSVC_VERSION VERSION_LESS 1900) + set(${result} 12 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1900 AND MSVC_VERSION VERSION_LESS 1910) + set(${result} 14 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1910 AND MSVC_VERSION VERSION_LESS 1920) + set(${result} 15 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1920 AND MSVC_VERSION VERSION_LESS 1930) + set(${result} 16 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1930 AND MSVC_VERSION VERSION_LESS 1940) + set(${result} 17 PARENT_SCOPE) + else() + message(FATAL_ERROR "Conan: Unknown MSVC compiler version [${MSVC_VERSION}]") + endif() +endfunction() + +macro(_conan_detect_build_type) + conan_parse_arguments(${ARGV}) + + if(ARGUMENTS_BUILD_TYPE) + set(_CONAN_SETTING_BUILD_TYPE ${ARGUMENTS_BUILD_TYPE}) + elseif(CMAKE_BUILD_TYPE) + set(_CONAN_SETTING_BUILD_TYPE ${CMAKE_BUILD_TYPE}) + else() + message(FATAL_ERROR "Please specify in command line CMAKE_BUILD_TYPE (-DCMAKE_BUILD_TYPE=Release)") + endif() + + string(TOUPPER ${_CONAN_SETTING_BUILD_TYPE} _CONAN_SETTING_BUILD_TYPE_UPPER) + if (_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "DEBUG") + set(_CONAN_SETTING_BUILD_TYPE "Debug") + elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "RELEASE") + set(_CONAN_SETTING_BUILD_TYPE "Release") + elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "RELWITHDEBINFO") + set(_CONAN_SETTING_BUILD_TYPE "RelWithDebInfo") + elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "MINSIZEREL") + set(_CONAN_SETTING_BUILD_TYPE "MinSizeRel") + endif() +endmacro() + +macro(_conan_check_system_name) + #handle -s os setting + if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") + #use default conan os setting if CMAKE_SYSTEM_NAME is not defined + set(CONAN_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}) + if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") + set(CONAN_SYSTEM_NAME Macos) + endif() + if(${CMAKE_SYSTEM_NAME} STREQUAL "QNX") + set(CONAN_SYSTEM_NAME Neutrino) + endif() + set(CONAN_SUPPORTED_PLATFORMS Windows Linux Macos Android iOS FreeBSD WindowsStore WindowsCE watchOS tvOS FreeBSD SunOS AIX Arduino Emscripten Neutrino) + list (FIND CONAN_SUPPORTED_PLATFORMS "${CONAN_SYSTEM_NAME}" _index) + if (${_index} GREATER -1) + #check if the cmake system is a conan supported one + set(_CONAN_SETTING_OS ${CONAN_SYSTEM_NAME}) + else() + message(FATAL_ERROR "cmake system ${CONAN_SYSTEM_NAME} is not supported by conan. Use one of ${CONAN_SUPPORTED_PLATFORMS}") + endif() + endif() +endmacro() + +macro(_conan_check_language) + get_property(_languages GLOBAL PROPERTY ENABLED_LANGUAGES) + if (";${_languages};" MATCHES ";CXX;") + set(LANGUAGE CXX) + set(USING_CXX 1) + elseif (";${_languages};" MATCHES ";C;") + set(LANGUAGE C) + set(USING_CXX 0) + else () + message(FATAL_ERROR "Conan: Neither C or C++ was detected as a language for the project. Unabled to detect compiler version.") + endif() +endmacro() + +macro(_conan_detect_compiler) + + conan_parse_arguments(${ARGV}) + + if(ARGUMENTS_ARCH) + set(_CONAN_SETTING_ARCH ${ARGUMENTS_ARCH}) + endif() + + if(USING_CXX) + set(_CONAN_SETTING_COMPILER_CPPSTD ${CMAKE_CXX_STANDARD}) + endif() + + if (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL GNU) + # using GCC + # TODO: Handle other params + string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + set(COMPILER_VERSION ${MAJOR}.${MINOR}) + if(${MAJOR} GREATER 4) + set(COMPILER_VERSION ${MAJOR}) + endif() + set(_CONAN_SETTING_COMPILER gcc) + set(_CONAN_SETTING_COMPILER_VERSION ${COMPILER_VERSION}) + if (USING_CXX) + conan_cmake_detect_unix_libcxx(_LIBCXX) + set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) + endif () + elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Intel) + string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + set(COMPILER_VERSION ${MAJOR}.${MINOR}) + set(_CONAN_SETTING_COMPILER intel) + set(_CONAN_SETTING_COMPILER_VERSION ${COMPILER_VERSION}) + if (USING_CXX) + conan_cmake_detect_unix_libcxx(_LIBCXX) + set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) + endif () + elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL AppleClang) + # using AppleClang + string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + set(_CONAN_SETTING_COMPILER apple-clang) + set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}.${MINOR}) + if (USING_CXX) + conan_cmake_detect_unix_libcxx(_LIBCXX) + set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) + endif () + elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Clang + AND NOT "${CMAKE_${LANGUAGE}_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC" + AND NOT "${CMAKE_${LANGUAGE}_SIMULATE_ID}" STREQUAL "MSVC") + + string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + set(_CONAN_SETTING_COMPILER clang) + set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}.${MINOR}) + if(APPLE) + cmake_policy(GET CMP0025 APPLE_CLANG_POLICY) + if(NOT APPLE_CLANG_POLICY STREQUAL NEW) + message(STATUS "Conan: APPLE and Clang detected. Assuming apple-clang compiler. Set CMP0025 to avoid it") + set(_CONAN_SETTING_COMPILER apple-clang) + endif() + endif() + if(${_CONAN_SETTING_COMPILER} STREQUAL clang AND ${MAJOR} GREATER 7) + set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}) + endif() + if (USING_CXX) + conan_cmake_detect_unix_libcxx(_LIBCXX) + set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) + endif () + elseif(${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL MSVC + OR (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Clang + AND "${CMAKE_${LANGUAGE}_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC" + AND "${CMAKE_${LANGUAGE}_SIMULATE_ID}" STREQUAL "MSVC")) + + set(_VISUAL "Visual Studio") + _get_msvc_ide_version(_VISUAL_VERSION) + if("${_VISUAL_VERSION}" STREQUAL "") + message(FATAL_ERROR "Conan: Visual Studio not recognized") + else() + set(_CONAN_SETTING_COMPILER ${_VISUAL}) + set(_CONAN_SETTING_COMPILER_VERSION ${_VISUAL_VERSION}) + endif() + + if(NOT _CONAN_SETTING_ARCH) + if (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "64") + set(_CONAN_SETTING_ARCH x86_64) + elseif (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "^ARM") + message(STATUS "Conan: Using default ARM architecture from MSVC") + set(_CONAN_SETTING_ARCH armv6) + elseif (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "86") + set(_CONAN_SETTING_ARCH x86) + else () + message(FATAL_ERROR "Conan: Unknown MSVC architecture [${MSVC_${LANGUAGE}_ARCHITECTURE_ID}]") + endif() + endif() + + conan_cmake_detect_vs_runtime(_vs_runtime ${ARGV}) + message(STATUS "Conan: Detected VS runtime: ${_vs_runtime}") + set(_CONAN_SETTING_COMPILER_RUNTIME ${_vs_runtime}) + + if (CMAKE_GENERATOR_TOOLSET) + set(_CONAN_SETTING_COMPILER_TOOLSET ${CMAKE_VS_PLATFORM_TOOLSET}) + elseif(CMAKE_VS_PLATFORM_TOOLSET AND (CMAKE_GENERATOR STREQUAL "Ninja")) + set(_CONAN_SETTING_COMPILER_TOOLSET ${CMAKE_VS_PLATFORM_TOOLSET}) + endif() + else() + message(FATAL_ERROR "Conan: compiler setup not recognized") + endif() + +endmacro() + +function(conan_cmake_settings result) + #message(STATUS "COMPILER " ${CMAKE_CXX_COMPILER}) + #message(STATUS "COMPILER " ${CMAKE_CXX_COMPILER_ID}) + #message(STATUS "VERSION " ${CMAKE_CXX_COMPILER_VERSION}) + #message(STATUS "FLAGS " ${CMAKE_LANG_FLAGS}) + #message(STATUS "LIB ARCH " ${CMAKE_CXX_LIBRARY_ARCHITECTURE}) + #message(STATUS "BUILD TYPE " ${CMAKE_BUILD_TYPE}) + #message(STATUS "GENERATOR " ${CMAKE_GENERATOR}) + #message(STATUS "GENERATOR WIN64 " ${CMAKE_CL_64}) + + message(STATUS "Conan: Automatic detection of conan settings from cmake") + + conan_parse_arguments(${ARGV}) + + _conan_detect_build_type(${ARGV}) + + _conan_check_system_name() + + _conan_check_language() + + _conan_detect_compiler(${ARGV}) + + # If profile is defined it is used + if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARGUMENTS_DEBUG_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_DEBUG_PROFILE}) + elseif(CMAKE_BUILD_TYPE STREQUAL "Release" AND ARGUMENTS_RELEASE_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_RELEASE_PROFILE}) + elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" AND ARGUMENTS_RELWITHDEBINFO_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_RELWITHDEBINFO_PROFILE}) + elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" AND ARGUMENTS_MINSIZEREL_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_MINSIZEREL_PROFILE}) + elseif(ARGUMENTS_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_PROFILE}) + endif() + + foreach(ARG ${_APPLIED_PROFILES}) + set(_SETTINGS ${_SETTINGS} -pr=${ARG}) + endforeach() + foreach(ARG ${ARGUMENTS_PROFILE_BUILD}) + conan_check(VERSION 1.24.0 REQUIRED DETECT_QUIET) + set(_SETTINGS ${_SETTINGS} -pr:b=${ARG}) + endforeach() + + if(NOT _SETTINGS OR ARGUMENTS_PROFILE_AUTO STREQUAL "ALL") + set(ARGUMENTS_PROFILE_AUTO arch build_type compiler compiler.version + compiler.runtime compiler.libcxx compiler.toolset) + endif() + + # remove any manually specified settings from the autodetected settings + foreach(ARG ${ARGUMENTS_SETTINGS}) + string(REGEX MATCH "[^=]*" MANUAL_SETTING "${ARG}") + message(STATUS "Conan: ${MANUAL_SETTING} was added as an argument. Not using the autodetected one.") + list(REMOVE_ITEM ARGUMENTS_PROFILE_AUTO "${MANUAL_SETTING}") + endforeach() + + # Automatic from CMake + foreach(ARG ${ARGUMENTS_PROFILE_AUTO}) + string(TOUPPER ${ARG} _arg_name) + string(REPLACE "." "_" _arg_name ${_arg_name}) + if(_CONAN_SETTING_${_arg_name}) + set(_SETTINGS ${_SETTINGS} -s ${ARG}=${_CONAN_SETTING_${_arg_name}}) + endif() + endforeach() + + foreach(ARG ${ARGUMENTS_SETTINGS}) + set(_SETTINGS ${_SETTINGS} -s ${ARG}) + endforeach() + + message(STATUS "Conan: Settings= ${_SETTINGS}") + + set(${result} ${_SETTINGS} PARENT_SCOPE) +endfunction() + + +function(conan_cmake_detect_unix_libcxx result) + # Take into account any -stdlib in compile options + get_directory_property(compile_options DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMPILE_OPTIONS) + string(GENEX_STRIP "${compile_options}" compile_options) + + # Take into account any _GLIBCXX_USE_CXX11_ABI in compile definitions + get_directory_property(defines DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMPILE_DEFINITIONS) + string(GENEX_STRIP "${defines}" defines) + + foreach(define ${defines}) + if(define MATCHES "_GLIBCXX_USE_CXX11_ABI") + if(define MATCHES "^-D") + set(compile_options ${compile_options} "${define}") + else() + set(compile_options ${compile_options} "-D${define}") + endif() + endif() + endforeach() + + # add additional compiler options ala cmRulePlaceholderExpander::ExpandRuleVariable + set(EXPAND_CXX_COMPILER ${CMAKE_CXX_COMPILER}) + if(CMAKE_CXX_COMPILER_ARG1) + # CMake splits CXX="foo bar baz" into CMAKE_CXX_COMPILER="foo", CMAKE_CXX_COMPILER_ARG1="bar baz" + # without this, ccache, winegcc, or other wrappers might lose all their arguments + separate_arguments(SPLIT_CXX_COMPILER_ARG1 NATIVE_COMMAND ${CMAKE_CXX_COMPILER_ARG1}) + list(APPEND EXPAND_CXX_COMPILER ${SPLIT_CXX_COMPILER_ARG1}) + endif() + + if(CMAKE_CXX_COMPILE_OPTIONS_TARGET AND CMAKE_CXX_COMPILER_TARGET) + # without --target= we may be calling the wrong underlying GCC + list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_TARGET}${CMAKE_CXX_COMPILER_TARGET}") + endif() + + if(CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN AND CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN) + list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN}") + endif() + + if(CMAKE_CXX_COMPILE_OPTIONS_SYSROOT) + # without --sysroot= we may find the wrong #include + if(CMAKE_SYSROOT_COMPILE) + list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT_COMPILE}") + elseif(CMAKE_SYSROOT) + list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT}") + endif() + endif() + + separate_arguments(SPLIT_CXX_FLAGS NATIVE_COMMAND ${CMAKE_CXX_FLAGS}) + + if(CMAKE_OSX_SYSROOT) + set(xcode_sysroot_option "--sysroot=${CMAKE_OSX_SYSROOT}") + endif() + + execute_process( + COMMAND ${CMAKE_COMMAND} -E echo "#include " + COMMAND ${EXPAND_CXX_COMPILER} ${SPLIT_CXX_FLAGS} -x c++ ${xcode_sysroot_option} ${compile_options} -E -dM - + OUTPUT_VARIABLE string_defines + ) + + if(string_defines MATCHES "#define __GLIBCXX__") + # Allow -D_GLIBCXX_USE_CXX11_ABI=ON/OFF as argument to cmake + if(DEFINED _GLIBCXX_USE_CXX11_ABI) + if(_GLIBCXX_USE_CXX11_ABI) + set(${result} libstdc++11 PARENT_SCOPE) + return() + else() + set(${result} libstdc++ PARENT_SCOPE) + return() + endif() + endif() + + if(string_defines MATCHES "#define _GLIBCXX_USE_CXX11_ABI 1\n") + set(${result} libstdc++11 PARENT_SCOPE) + else() + # Either the compiler is missing the define because it is old, and so + # it can't use the new abi, or the compiler was configured to use the + # old abi by the user or distro (e.g. devtoolset on RHEL/CentOS) + set(${result} libstdc++ PARENT_SCOPE) + endif() + else() + set(${result} libc++ PARENT_SCOPE) + endif() +endfunction() + +function(conan_cmake_detect_vs_runtime result) + + conan_parse_arguments(${ARGV}) + if(ARGUMENTS_BUILD_TYPE) + set(build_type "${ARGUMENTS_BUILD_TYPE}") + elseif(CMAKE_BUILD_TYPE) + set(build_type "${CMAKE_BUILD_TYPE}") + else() + message(FATAL_ERROR "Please specify in command line CMAKE_BUILD_TYPE (-DCMAKE_BUILD_TYPE=Release)") + endif() + + if(build_type) + string(TOUPPER "${build_type}" build_type) + endif() + set(variables CMAKE_CXX_FLAGS_${build_type} CMAKE_C_FLAGS_${build_type} CMAKE_CXX_FLAGS CMAKE_C_FLAGS) + foreach(variable ${variables}) + if(NOT "${${variable}}" STREQUAL "") + string(REPLACE " " ";" flags "${${variable}}") + foreach (flag ${flags}) + if("${flag}" STREQUAL "/MD" OR "${flag}" STREQUAL "/MDd" OR "${flag}" STREQUAL "/MT" OR "${flag}" STREQUAL "/MTd") + string(SUBSTRING "${flag}" 1 -1 runtime) + set(${result} "${runtime}" PARENT_SCOPE) + return() + endif() + endforeach() + endif() + endforeach() + if("${build_type}" STREQUAL "DEBUG") + set(${result} "MDd" PARENT_SCOPE) + else() + set(${result} "MD" PARENT_SCOPE) + endif() +endfunction() + +function(_collect_settings result) + set(ARGUMENTS_PROFILE_AUTO arch build_type compiler compiler.version + compiler.runtime compiler.libcxx compiler.toolset + compiler.cppstd) + foreach(ARG ${ARGUMENTS_PROFILE_AUTO}) + string(TOUPPER ${ARG} _arg_name) + string(REPLACE "." "_" _arg_name ${_arg_name}) + if(_CONAN_SETTING_${_arg_name}) + set(detected_setings ${detected_setings} ${ARG}=${_CONAN_SETTING_${_arg_name}}) + endif() + endforeach() + set(${result} ${detected_setings} PARENT_SCOPE) +endfunction() + +function(conan_cmake_autodetect detected_settings) + _conan_detect_build_type(${ARGV}) + _conan_check_system_name() + _conan_check_language() + _conan_detect_compiler(${ARGV}) + _collect_settings(collected_settings) + set(${detected_settings} ${collected_settings} PARENT_SCOPE) +endfunction() + +macro(conan_parse_arguments) + set(options BASIC_SETUP CMAKE_TARGETS UPDATE KEEP_RPATHS NO_LOAD NO_OUTPUT_DIRS OUTPUT_QUIET NO_IMPORTS SKIP_STD) + set(oneValueArgs CONANFILE ARCH BUILD_TYPE INSTALL_FOLDER OUTPUT_FOLDER CONAN_COMMAND) + set(multiValueArgs DEBUG_PROFILE RELEASE_PROFILE RELWITHDEBINFO_PROFILE MINSIZEREL_PROFILE + PROFILE REQUIRES OPTIONS IMPORTS SETTINGS BUILD ENV GENERATORS PROFILE_AUTO + INSTALL_ARGS CONFIGURATION_TYPES PROFILE_BUILD BUILD_REQUIRES) + cmake_parse_arguments(ARGUMENTS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) +endmacro() + +function(old_conan_cmake_install) + # Calls "conan install" + # Argument BUILD is equivalant to --build={missing, PkgName,...} or + # --build when argument is 'BUILD all' (which builds all packages from source) + # Argument CONAN_COMMAND, to specify the conan path, e.g. in case of running from source + # cmake does not identify conan as command, even if it is +x and it is in the path + conan_parse_arguments(${ARGV}) + + if(CONAN_CMAKE_MULTI) + set(ARGUMENTS_GENERATORS ${ARGUMENTS_GENERATORS} cmake_multi) + else() + set(ARGUMENTS_GENERATORS ${ARGUMENTS_GENERATORS} cmake) + endif() + + set(CONAN_BUILD_POLICY "") + foreach(ARG ${ARGUMENTS_BUILD}) + if(${ARG} STREQUAL "all") + set(CONAN_BUILD_POLICY ${CONAN_BUILD_POLICY} --build) + break() + else() + set(CONAN_BUILD_POLICY ${CONAN_BUILD_POLICY} --build=${ARG}) + endif() + endforeach() + if(ARGUMENTS_CONAN_COMMAND) + set(CONAN_CMD ${ARGUMENTS_CONAN_COMMAND}) + else() + conan_check(REQUIRED) + endif() + set(CONAN_OPTIONS "") + if(ARGUMENTS_CONANFILE) + if(IS_ABSOLUTE ${ARGUMENTS_CONANFILE}) + set(CONANFILE ${ARGUMENTS_CONANFILE}) + else() + set(CONANFILE ${CMAKE_CURRENT_SOURCE_DIR}/${ARGUMENTS_CONANFILE}) + endif() + else() + set(CONANFILE ".") + endif() + foreach(ARG ${ARGUMENTS_OPTIONS}) + set(CONAN_OPTIONS ${CONAN_OPTIONS} -o=${ARG}) + endforeach() + if(ARGUMENTS_UPDATE) + set(CONAN_INSTALL_UPDATE --update) + endif() + if(ARGUMENTS_NO_IMPORTS) + set(CONAN_INSTALL_NO_IMPORTS --no-imports) + endif() + set(CONAN_INSTALL_FOLDER "") + if(ARGUMENTS_INSTALL_FOLDER) + set(CONAN_INSTALL_FOLDER -if=${ARGUMENTS_INSTALL_FOLDER}) + endif() + set(CONAN_OUTPUT_FOLDER "") + if(ARGUMENTS_OUTPUT_FOLDER) + set(CONAN_OUTPUT_FOLDER -of=${ARGUMENTS_OUTPUT_FOLDER}) + endif() + foreach(ARG ${ARGUMENTS_GENERATORS}) + set(CONAN_GENERATORS ${CONAN_GENERATORS} -g=${ARG}) + endforeach() + foreach(ARG ${ARGUMENTS_ENV}) + set(CONAN_ENV_VARS ${CONAN_ENV_VARS} -e=${ARG}) + endforeach() + set(conan_args install ${CONANFILE} ${settings} ${CONAN_ENV_VARS} ${CONAN_GENERATORS} ${CONAN_BUILD_POLICY} ${CONAN_INSTALL_UPDATE} ${CONAN_INSTALL_NO_IMPORTS} ${CONAN_OPTIONS} ${CONAN_INSTALL_FOLDER} ${ARGUMENTS_INSTALL_ARGS}) + + string (REPLACE ";" " " _conan_args "${conan_args}") + message(STATUS "Conan executing: ${CONAN_CMD} ${_conan_args}") + + if(ARGUMENTS_OUTPUT_QUIET) + execute_process(COMMAND ${CONAN_CMD} ${conan_args} + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_output + ERROR_VARIABLE conan_output + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + else() + execute_process(COMMAND ${CONAN_CMD} ${conan_args} + RESULT_VARIABLE return_code + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + endif() + + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan install failed='${return_code}'") + endif() + +endfunction() + +function(conan_cmake_install) + if(DEFINED CONAN_COMMAND) + set(CONAN_CMD ${CONAN_COMMAND}) + else() + conan_check(REQUIRED) + endif() + + set(installOptions UPDATE NO_IMPORTS OUTPUT_QUIET ERROR_QUIET) + set(installOneValueArgs PATH_OR_REFERENCE REFERENCE REMOTE LOCKFILE LOCKFILE_OUT LOCKFILE_NODE_ID INSTALL_FOLDER OUTPUT_FOLDER) + set(installMultiValueArgs GENERATOR BUILD ENV ENV_HOST ENV_BUILD OPTIONS_HOST OPTIONS OPTIONS_BUILD PROFILE + PROFILE_HOST PROFILE_BUILD SETTINGS SETTINGS_HOST SETTINGS_BUILD) + cmake_parse_arguments(ARGS "${installOptions}" "${installOneValueArgs}" "${installMultiValueArgs}" ${ARGN}) + foreach(arg ${installOptions}) + if(ARGS_${arg}) + set(${arg} ${${arg}} ${ARGS_${arg}}) + endif() + endforeach() + foreach(arg ${installOneValueArgs}) + if(DEFINED ARGS_${arg}) + if("${arg}" STREQUAL "REMOTE") + set(flag "--remote") + elseif("${arg}" STREQUAL "LOCKFILE") + set(flag "--lockfile") + elseif("${arg}" STREQUAL "LOCKFILE_OUT") + set(flag "--lockfile-out") + elseif("${arg}" STREQUAL "LOCKFILE_NODE_ID") + set(flag "--lockfile-node-id") + elseif("${arg}" STREQUAL "INSTALL_FOLDER") + set(flag "--install-folder") + elseif("${arg}" STREQUAL "OUTPUT_FOLDER") + set(flag "--output-folder") + endif() + set(${arg} ${${arg}} ${flag} ${ARGS_${arg}}) + endif() + endforeach() + foreach(arg ${installMultiValueArgs}) + if(DEFINED ARGS_${arg}) + if("${arg}" STREQUAL "GENERATOR") + set(flag "--generator") + elseif("${arg}" STREQUAL "BUILD") + set(flag "--build") + elseif("${arg}" STREQUAL "ENV") + set(flag "--env") + elseif("${arg}" STREQUAL "ENV_HOST") + set(flag "--env:host") + elseif("${arg}" STREQUAL "ENV_BUILD") + set(flag "--env:build") + elseif("${arg}" STREQUAL "OPTIONS") + set(flag "--options") + elseif("${arg}" STREQUAL "OPTIONS_HOST") + set(flag "--options:host") + elseif("${arg}" STREQUAL "OPTIONS_BUILD") + set(flag "--options:build") + elseif("${arg}" STREQUAL "PROFILE") + set(flag "--profile") + elseif("${arg}" STREQUAL "PROFILE_HOST") + set(flag "--profile:host") + elseif("${arg}" STREQUAL "PROFILE_BUILD") + set(flag "--profile:build") + elseif("${arg}" STREQUAL "SETTINGS") + set(flag "--settings") + elseif("${arg}" STREQUAL "SETTINGS_HOST") + set(flag "--settings:host") + elseif("${arg}" STREQUAL "SETTINGS_BUILD") + set(flag "--settings:build") + endif() + list(LENGTH ARGS_${arg} numargs) + foreach(item ${ARGS_${arg}}) + if(${item} STREQUAL "all" AND ${arg} STREQUAL "BUILD") + set(${arg} "--build") + break() + endif() + set(${arg} ${${arg}} ${flag} ${item}) + endforeach() + endif() + endforeach() + if(DEFINED UPDATE) + set(UPDATE --update) + endif() + if(DEFINED NO_IMPORTS) + set(NO_IMPORTS --no-imports) + endif() + set(install_args install ${PATH_OR_REFERENCE} ${REFERENCE} ${UPDATE} ${NO_IMPORTS} ${REMOTE} ${LOCKFILE} ${LOCKFILE_OUT} ${LOCKFILE_NODE_ID} ${INSTALL_FOLDER} ${OUTPUT_FOLDER} + ${GENERATOR} ${BUILD} ${ENV} ${ENV_HOST} ${ENV_BUILD} ${OPTIONS} ${OPTIONS_HOST} ${OPTIONS_BUILD} + ${PROFILE} ${PROFILE_HOST} ${PROFILE_BUILD} ${SETTINGS} ${SETTINGS_HOST} ${SETTINGS_BUILD}) + + string(REPLACE ";" " " _install_args "${install_args}") + message(STATUS "Conan executing: ${CONAN_CMD} ${_install_args}") + + if(ARGS_OUTPUT_QUIET) + set(OUTPUT_OPT OUTPUT_QUIET) + endif() + if(ARGS_ERROR_QUIET) + set(ERROR_OPT ERROR_QUIET) + endif() + + execute_process(COMMAND ${CONAN_CMD} ${install_args} + RESULT_VARIABLE return_code + ${OUTPUT_OPT} + ${ERROR_OPT} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + + if(NOT "${return_code}" STREQUAL "0") + if (ARGS_ERROR_QUIET) + message(WARNING "Conan install failed='${return_code}'") + else() + message(FATAL_ERROR "Conan install failed='${return_code}'") + endif() + endif() + +endfunction() + +function(conan_cmake_lock_create) + if(DEFINED CONAN_COMMAND) + set(CONAN_CMD ${CONAN_COMMAND}) + else() + conan_check(REQUIRED) + endif() + + set(lockCreateOptions UPDATE BASE OUTPUT_QUIET ERROR_QUIET) + set(lockCreateOneValueArgs PATH REFERENCE REMOTE LOCKFILE LOCKFILE_OUT) + set(lockCreateMultiValueArgs BUILD ENV ENV_HOST ENV_BUILD OPTIONS_HOST OPTIONS OPTIONS_BUILD PROFILE + PROFILE_HOST PROFILE_BUILD SETTINGS SETTINGS_HOST SETTINGS_BUILD) + cmake_parse_arguments(ARGS "${lockCreateOptions}" "${lockCreateOneValueArgs}" "${lockCreateMultiValueArgs}" ${ARGN}) + foreach(arg ${lockCreateOptions}) + if(ARGS_${arg}) + set(${arg} ${${arg}} ${ARGS_${arg}}) + endif() + endforeach() + foreach(arg ${lockCreateOneValueArgs}) + if(DEFINED ARGS_${arg}) + if("${arg}" STREQUAL "REMOTE") + set(flag "--remote") + elseif("${arg}" STREQUAL "LOCKFILE") + set(flag "--lockfile") + elseif("${arg}" STREQUAL "LOCKFILE_OUT") + set(flag "--lockfile-out") + endif() + set(${arg} ${${arg}} ${flag} ${ARGS_${arg}}) + endif() + endforeach() + foreach(arg ${lockCreateMultiValueArgs}) + if(DEFINED ARGS_${arg}) + if("${arg}" STREQUAL "BUILD") + set(flag "--build") + elseif("${arg}" STREQUAL "ENV") + set(flag "--env") + elseif("${arg}" STREQUAL "ENV_HOST") + set(flag "--env:host") + elseif("${arg}" STREQUAL "ENV_BUILD") + set(flag "--env:build") + elseif("${arg}" STREQUAL "OPTIONS") + set(flag "--options") + elseif("${arg}" STREQUAL "OPTIONS_HOST") + set(flag "--options:host") + elseif("${arg}" STREQUAL "OPTIONS_BUILD") + set(flag "--options:build") + elseif("${arg}" STREQUAL "PROFILE") + set(flag "--profile") + elseif("${arg}" STREQUAL "PROFILE_HOST") + set(flag "--profile:host") + elseif("${arg}" STREQUAL "PROFILE_BUILD") + set(flag "--profile:build") + elseif("${arg}" STREQUAL "SETTINGS") + set(flag "--settings") + elseif("${arg}" STREQUAL "SETTINGS_HOST") + set(flag "--settings:host") + elseif("${arg}" STREQUAL "SETTINGS_BUILD") + set(flag "--settings:build") + endif() + list(LENGTH ARGS_${arg} numargs) + foreach(item ${ARGS_${arg}}) + if(${item} STREQUAL "all" AND ${arg} STREQUAL "BUILD") + set(${arg} "--build") + break() + endif() + set(${arg} ${${arg}} ${flag} ${item}) + endforeach() + endif() + endforeach() + if(DEFINED UPDATE) + set(UPDATE --update) + endif() + if(DEFINED BASE) + set(BASE --base) + endif() + set(lock_create_Args lock create ${PATH} ${REFERENCE} ${UPDATE} ${BASE} ${REMOTE} ${LOCKFILE} ${LOCKFILE_OUT} ${LOCKFILE_NODE_ID} ${INSTALL_FOLDER} + ${GENERATOR} ${BUILD} ${ENV} ${ENV_HOST} ${ENV_BUILD} ${OPTIONS} ${OPTIONS_HOST} ${OPTIONS_BUILD} + ${PROFILE} ${PROFILE_HOST} ${PROFILE_BUILD} ${SETTINGS} ${SETTINGS_HOST} ${SETTINGS_BUILD}) + + string(REPLACE ";" " " _lock_create_Args "${lock_create_Args}") + message(STATUS "Conan executing: ${CONAN_CMD} ${_lock_create_Args}") + + if(ARGS_OUTPUT_QUIET) + set(OUTPUT_OPT OUTPUT_QUIET) + endif() + if(ARGS_ERROR_QUIET) + set(ERROR_OPT ERROR_QUIET) + endif() + + execute_process(COMMAND ${CONAN_CMD} ${lock_create_Args} + RESULT_VARIABLE return_code + ${OUTPUT_OPT} + ${ERROR_OPT} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + + if(NOT "${return_code}" STREQUAL "0") + if (ARGS_ERROR_QUIET) + message(WARNING "Conan lock create failed='${return_code}'") + else() + message(FATAL_ERROR "Conan lock create failed='${return_code}'") + endif() + endif() +endfunction() + +function(conan_cmake_setup_conanfile) + conan_parse_arguments(${ARGV}) + if(ARGUMENTS_CONANFILE) + get_filename_component(_CONANFILE_NAME ${ARGUMENTS_CONANFILE} NAME) + # configure_file will make sure cmake re-runs when conanfile is updated + configure_file(${ARGUMENTS_CONANFILE} ${CMAKE_CURRENT_BINARY_DIR}/${_CONANFILE_NAME}.junk COPYONLY) + file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/${_CONANFILE_NAME}.junk) + else() + conan_cmake_generate_conanfile(ON ${ARGV}) + endif() +endfunction() + +function(conan_cmake_configure) + conan_cmake_generate_conanfile(OFF ${ARGV}) +endfunction() + +# Generate, writing in disk a conanfile.txt with the requires, options, and imports +# specified as arguments +# This will be considered as temporary file, generated in CMAKE_CURRENT_BINARY_DIR) +function(conan_cmake_generate_conanfile DEFAULT_GENERATOR) + + conan_parse_arguments(${ARGV}) + + set(_FN "${CMAKE_CURRENT_BINARY_DIR}/conanfile.txt") + file(WRITE ${_FN} "") + + if(DEFINED ARGUMENTS_REQUIRES) + file(APPEND ${_FN} "[requires]\n") + foreach(REQUIRE ${ARGUMENTS_REQUIRES}) + file(APPEND ${_FN} ${REQUIRE} "\n") + endforeach() + endif() + + if (DEFAULT_GENERATOR OR DEFINED ARGUMENTS_GENERATORS) + file(APPEND ${_FN} "[generators]\n") + if (DEFAULT_GENERATOR) + file(APPEND ${_FN} "cmake\n") + endif() + if (DEFINED ARGUMENTS_GENERATORS) + foreach(GENERATOR ${ARGUMENTS_GENERATORS}) + file(APPEND ${_FN} ${GENERATOR} "\n") + endforeach() + endif() + endif() + + if(DEFINED ARGUMENTS_BUILD_REQUIRES) + file(APPEND ${_FN} "[build_requires]\n") + foreach(BUILD_REQUIRE ${ARGUMENTS_BUILD_REQUIRES}) + file(APPEND ${_FN} ${BUILD_REQUIRE} "\n") + endforeach() + endif() + + if(DEFINED ARGUMENTS_IMPORTS) + file(APPEND ${_FN} "[imports]\n") + foreach(IMPORTS ${ARGUMENTS_IMPORTS}) + file(APPEND ${_FN} ${IMPORTS} "\n") + endforeach() + endif() + + if(DEFINED ARGUMENTS_OPTIONS) + file(APPEND ${_FN} "[options]\n") + foreach(OPTION ${ARGUMENTS_OPTIONS}) + file(APPEND ${_FN} ${OPTION} "\n") + endforeach() + endif() + +endfunction() + + +macro(conan_load_buildinfo) + if(CONAN_CMAKE_MULTI) + set(_CONANBUILDINFO conanbuildinfo_multi.cmake) + else() + set(_CONANBUILDINFO conanbuildinfo.cmake) + endif() + if(ARGUMENTS_INSTALL_FOLDER) + set(_CONANBUILDINFOFOLDER ${ARGUMENTS_INSTALL_FOLDER}) + else() + set(_CONANBUILDINFOFOLDER ${CMAKE_CURRENT_BINARY_DIR}) + endif() + # Checks for the existence of conanbuildinfo.cmake, and loads it + # important that it is macro, so variables defined at parent scope + if(EXISTS "${_CONANBUILDINFOFOLDER}/${_CONANBUILDINFO}") + message(STATUS "Conan: Loading ${_CONANBUILDINFO}") + include(${_CONANBUILDINFOFOLDER}/${_CONANBUILDINFO}) + else() + message(FATAL_ERROR "${_CONANBUILDINFO} doesn't exist in ${CMAKE_CURRENT_BINARY_DIR}") + endif() +endmacro() + + +macro(conan_cmake_run) + conan_parse_arguments(${ARGV}) + + if(ARGUMENTS_CONFIGURATION_TYPES AND NOT CMAKE_CONFIGURATION_TYPES) + message(WARNING "CONFIGURATION_TYPES should only be specified for multi-configuration generators") + elseif(ARGUMENTS_CONFIGURATION_TYPES AND ARGUMENTS_BUILD_TYPE) + message(WARNING "CONFIGURATION_TYPES and BUILD_TYPE arguments should not be defined at the same time.") + endif() + + if(CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE AND NOT CONAN_EXPORTED + AND NOT ARGUMENTS_BUILD_TYPE) + set(CONAN_CMAKE_MULTI ON) + if (NOT ARGUMENTS_CONFIGURATION_TYPES) + set(ARGUMENTS_CONFIGURATION_TYPES "Release;Debug") + endif() + message(STATUS "Conan: Using cmake-multi generator") + else() + set(CONAN_CMAKE_MULTI OFF) + endif() + + if(NOT CONAN_EXPORTED) + conan_cmake_setup_conanfile(${ARGV}) + if(CONAN_CMAKE_MULTI) + foreach(CMAKE_BUILD_TYPE ${ARGUMENTS_CONFIGURATION_TYPES}) + set(ENV{CONAN_IMPORT_PATH} ${CMAKE_BUILD_TYPE}) + conan_cmake_settings(settings ${ARGV}) + old_conan_cmake_install(SETTINGS ${settings} ${ARGV}) + endforeach() + set(CMAKE_BUILD_TYPE) + else() + conan_cmake_settings(settings ${ARGV}) + old_conan_cmake_install(SETTINGS ${settings} ${ARGV}) + endif() + endif() + + if (NOT ARGUMENTS_NO_LOAD) + conan_load_buildinfo() + endif() + + if(ARGUMENTS_BASIC_SETUP) + foreach(_option CMAKE_TARGETS KEEP_RPATHS NO_OUTPUT_DIRS SKIP_STD) + if(ARGUMENTS_${_option}) + if(${_option} STREQUAL "CMAKE_TARGETS") + list(APPEND _setup_options "TARGETS") + else() + list(APPEND _setup_options ${_option}) + endif() + endif() + endforeach() + conan_basic_setup(${_setup_options}) + endif() +endmacro() + +macro(conan_check) + # Checks conan availability in PATH + # Arguments REQUIRED, DETECT_QUIET and VERSION are optional + # Example usage: + # conan_check(VERSION 1.0.0 REQUIRED) + set(options REQUIRED DETECT_QUIET) + set(oneValueArgs VERSION) + cmake_parse_arguments(CONAN "${options}" "${oneValueArgs}" "" ${ARGN}) + if(NOT CONAN_DETECT_QUIET) + message(STATUS "Conan: checking conan executable") + endif() + + find_program(CONAN_CMD conan) + if(NOT CONAN_CMD AND CONAN_REQUIRED) + message(FATAL_ERROR "Conan executable not found! Please install conan.") + endif() + if(NOT CONAN_DETECT_QUIET) + message(STATUS "Conan: Found program ${CONAN_CMD}") + endif() + execute_process(COMMAND ${CONAN_CMD} --version + RESULT_VARIABLE return_code + OUTPUT_VARIABLE CONAN_VERSION_OUTPUT + ERROR_VARIABLE CONAN_VERSION_OUTPUT) + + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan --version failed='${return_code}'") + endif() + + if(NOT CONAN_DETECT_QUIET) + string(STRIP "${CONAN_VERSION_OUTPUT}" _CONAN_VERSION_OUTPUT) + message(STATUS "Conan: Version found ${_CONAN_VERSION_OUTPUT}") + endif() + + if(DEFINED CONAN_VERSION) + string(REGEX MATCH ".*Conan version ([0-9]+\\.[0-9]+\\.[0-9]+)" FOO + "${CONAN_VERSION_OUTPUT}") + if(${CMAKE_MATCH_1} VERSION_LESS ${CONAN_VERSION}) + message(FATAL_ERROR "Conan outdated. Installed: ${CMAKE_MATCH_1}, \ + required: ${CONAN_VERSION}. Consider updating via 'pip \ + install conan==${CONAN_VERSION}'.") + endif() + endif() +endmacro() + +function(conan_add_remote) + # Adds a remote + # Arguments URL and NAME are required, INDEX, COMMAND and VERIFY_SSL are optional + # Example usage: + # conan_add_remote(NAME bincrafters INDEX 1 + # URL https://api.bintray.com/conan/bincrafters/public-conan + # VERIFY_SSL True) + set(oneValueArgs URL NAME INDEX COMMAND VERIFY_SSL) + cmake_parse_arguments(CONAN "" "${oneValueArgs}" "" ${ARGN}) + + if(DEFINED CONAN_INDEX) + set(CONAN_INDEX_ARG "-i ${CONAN_INDEX}") + endif() + if(DEFINED CONAN_COMMAND) + set(CONAN_CMD ${CONAN_COMMAND}) + else() + conan_check(REQUIRED DETECT_QUIET) + endif() + set(CONAN_VERIFY_SSL_ARG "True") + if(DEFINED CONAN_VERIFY_SSL) + set(CONAN_VERIFY_SSL_ARG ${CONAN_VERIFY_SSL}) + endif() + message(STATUS "Conan: Adding ${CONAN_NAME} remote repository (${CONAN_URL}) verify ssl (${CONAN_VERIFY_SSL_ARG})") + execute_process(COMMAND ${CONAN_CMD} remote add ${CONAN_NAME} ${CONAN_INDEX_ARG} -f ${CONAN_URL} ${CONAN_VERIFY_SSL_ARG} + RESULT_VARIABLE return_code) + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan remote failed='${return_code}'") + endif() +endfunction() + +macro(conan_config_install) + # install a full configuration from a local or remote zip file + # Argument ITEM is required, arguments TYPE, SOURCE, TARGET and VERIFY_SSL are optional + # Example usage: + # conan_config_install(ITEM https://github.com/conan-io/cmake-conan.git + # TYPE git SOURCE source-folder TARGET target-folder VERIFY_SSL false) + set(oneValueArgs ITEM TYPE SOURCE TARGET VERIFY_SSL) + set(multiValueArgs ARGS) + cmake_parse_arguments(CONAN "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(DEFINED CONAN_COMMAND) + set(CONAN_CMD ${CONAN_COMMAND}) + else() + conan_check(REQUIRED) + endif() + + if(DEFINED CONAN_VERIFY_SSL) + set(CONAN_VERIFY_SSL_ARG "--verify-ssl=${CONAN_VERIFY_SSL}") + endif() + + if(DEFINED CONAN_TYPE) + set(CONAN_TYPE_ARG "--type=${CONAN_TYPE}") + endif() + + if(DEFINED CONAN_ARGS) + set(CONAN_ARGS_ARGS "--args=\"${CONAN_ARGS}\"") + endif() + + if(DEFINED CONAN_SOURCE) + set(CONAN_SOURCE_ARGS "--source-folder=${CONAN_SOURCE}") + endif() + + if(DEFINED CONAN_TARGET) + set(CONAN_TARGET_ARGS "--target-folder=${CONAN_TARGET}") + endif() + + set (CONAN_CONFIG_INSTALL_ARGS ${CONAN_VERIFY_SSL_ARG} + ${CONAN_TYPE_ARG} + ${CONAN_ARGS_ARGS} + ${CONAN_SOURCE_ARGS} + ${CONAN_TARGET_ARGS}) + + message(STATUS "Conan: Installing config from ${CONAN_ITEM}") + execute_process(COMMAND ${CONAN_CMD} config install ${CONAN_ITEM} ${CONAN_CONFIG_INSTALL_ARGS} + RESULT_VARIABLE return_code) + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan config failed='${return_code}'") + endif() +endmacro() diff --git a/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan_provider.cmake b/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan_provider.cmake new file mode 100644 index 000000000..e5fa9cec1 --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan_provider.cmake @@ -0,0 +1,655 @@ +# https://github.com/conan-io/cmake-conan/blob/develop2/conan_provider.cmake +# commit: f6464d1e13ef7a47c569f5061f9607ea63339d39 +# +# The MIT License (MIT) +# +# Copyright (c) 2019 JFrog +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +set(CONAN_MINIMUM_VERSION 2.0.5) + + +function(detect_os OS OS_API_LEVEL OS_SDK OS_SUBSYSTEM OS_VERSION) + # it could be cross compilation + message(STATUS "CMake-Conan: cmake_system_name=${CMAKE_SYSTEM_NAME}") + if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") + if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(${OS} Macos PARENT_SCOPE) + elseif(CMAKE_SYSTEM_NAME STREQUAL "QNX") + set(${OS} Neutrino PARENT_SCOPE) + elseif(CMAKE_SYSTEM_NAME STREQUAL "CYGWIN") + set(${OS} Windows PARENT_SCOPE) + set(${OS_SUBSYSTEM} cygwin PARENT_SCOPE) + elseif(CMAKE_SYSTEM_NAME MATCHES "^MSYS") + set(${OS} Windows PARENT_SCOPE) + set(${OS_SUBSYSTEM} msys2 PARENT_SCOPE) + else() + set(${OS} ${CMAKE_SYSTEM_NAME} PARENT_SCOPE) + endif() + if(CMAKE_SYSTEM_NAME STREQUAL "Android") + if(DEFINED ANDROID_PLATFORM) + string(REGEX MATCH "[0-9]+" _OS_API_LEVEL ${ANDROID_PLATFORM}) + elseif(DEFINED CMAKE_SYSTEM_VERSION) + set(_OS_API_LEVEL ${CMAKE_SYSTEM_VERSION}) + endif() + message(STATUS "CMake-Conan: android api level=${_OS_API_LEVEL}") + set(${OS_API_LEVEL} ${_OS_API_LEVEL} PARENT_SCOPE) + endif() + if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS") + # CMAKE_OSX_SYSROOT contains the full path to the SDK for MakeFile/Ninja + # generators, but just has the original input string for Xcode. + if(NOT IS_DIRECTORY ${CMAKE_OSX_SYSROOT}) + set(_OS_SDK ${CMAKE_OSX_SYSROOT}) + else() + if(CMAKE_OSX_SYSROOT MATCHES Simulator) + set(apple_platform_suffix simulator) + else() + set(apple_platform_suffix os) + endif() + if(CMAKE_OSX_SYSROOT MATCHES AppleTV) + set(_OS_SDK "appletv${apple_platform_suffix}") + elseif(CMAKE_OSX_SYSROOT MATCHES iPhone) + set(_OS_SDK "iphone${apple_platform_suffix}") + elseif(CMAKE_OSX_SYSROOT MATCHES Watch) + set(_OS_SDK "watch${apple_platform_suffix}") + endif() + endif() + if(DEFINED _OS_SDK) + message(STATUS "CMake-Conan: cmake_osx_sysroot=${CMAKE_OSX_SYSROOT}") + set(${OS_SDK} ${_OS_SDK} PARENT_SCOPE) + endif() + if(DEFINED CMAKE_OSX_DEPLOYMENT_TARGET) + message(STATUS "CMake-Conan: cmake_osx_deployment_target=${CMAKE_OSX_DEPLOYMENT_TARGET}") + set(${OS_VERSION} ${CMAKE_OSX_DEPLOYMENT_TARGET} PARENT_SCOPE) + endif() + endif() + endif() +endfunction() + + +function(detect_arch ARCH) + # CMAKE_OSX_ARCHITECTURES can contain multiple architectures, but Conan only supports one. + # Therefore this code only finds one. If the recipes support multiple architectures, the + # build will work. Otherwise, there will be a linker error for the missing architecture(s). + if(DEFINED CMAKE_OSX_ARCHITECTURES) + string(REPLACE " " ";" apple_arch_list "${CMAKE_OSX_ARCHITECTURES}") + list(LENGTH apple_arch_list apple_arch_count) + if(apple_arch_count GREATER 1) + message(WARNING "CMake-Conan: Multiple architectures detected, this will only work if Conan recipe(s) produce fat binaries.") + endif() + endif() + if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS" AND NOT CMAKE_OSX_ARCHITECTURES STREQUAL "") + set(host_arch ${CMAKE_OSX_ARCHITECTURES}) + elseif(MSVC) + set(host_arch ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}) + else() + set(host_arch ${CMAKE_SYSTEM_PROCESSOR}) + endif() + if(host_arch MATCHES "aarch64|arm64|ARM64") + set(_ARCH armv8) + elseif(host_arch MATCHES "armv7|armv7-a|armv7l|ARMV7") + set(_ARCH armv7) + elseif(host_arch MATCHES armv7s) + set(_ARCH armv7s) + elseif(host_arch MATCHES "i686|i386|X86") + set(_ARCH x86) + elseif(host_arch MATCHES "AMD64|amd64|x86_64|x64") + set(_ARCH x86_64) + endif() + message(STATUS "CMake-Conan: cmake_system_processor=${_ARCH}") + set(${ARCH} ${_ARCH} PARENT_SCOPE) +endfunction() + + +function(detect_cxx_standard CXX_STANDARD) + set(${CXX_STANDARD} ${CMAKE_CXX_STANDARD} PARENT_SCOPE) + if(CMAKE_CXX_EXTENSIONS) + set(${CXX_STANDARD} "gnu${CMAKE_CXX_STANDARD}" PARENT_SCOPE) + endif() +endfunction() + + +macro(detect_gnu_libstdcxx) + # _CONAN_IS_GNU_LIBSTDCXX true if GNU libstdc++ + check_cxx_source_compiles(" + #include + #if !defined(__GLIBCXX__) && !defined(__GLIBCPP__) + static_assert(false); + #endif + int main(){}" _CONAN_IS_GNU_LIBSTDCXX) + + # _CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI true if C++11 ABI + check_cxx_source_compiles(" + #include + static_assert(sizeof(std::string) != sizeof(void*), \"using libstdc++\"); + int main () {}" _CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) + + set(_CONAN_GNU_LIBSTDCXX_SUFFIX "") + if(_CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) + set(_CONAN_GNU_LIBSTDCXX_SUFFIX "11") + endif() + unset (_CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) +endmacro() + + +macro(detect_libcxx) + # _CONAN_IS_LIBCXX true if LLVM libc++ + check_cxx_source_compiles(" + #include + #if !defined(_LIBCPP_VERSION) + static_assert(false); + #endif + int main(){}" _CONAN_IS_LIBCXX) +endmacro() + + +function(detect_lib_cxx LIB_CXX) + if(CMAKE_SYSTEM_NAME STREQUAL "Android") + message(STATUS "CMake-Conan: android_stl=${CMAKE_ANDROID_STL_TYPE}") + set(${LIB_CXX} ${CMAKE_ANDROID_STL_TYPE} PARENT_SCOPE) + return() + endif() + + include(CheckCXXSourceCompiles) + + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") + detect_gnu_libstdcxx() + set(${LIB_CXX} "libstdc++${_CONAN_GNU_LIBSTDCXX_SUFFIX}" PARENT_SCOPE) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") + set(${LIB_CXX} "libc++" PARENT_SCOPE) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT CMAKE_SYSTEM_NAME MATCHES "Windows") + # Check for libc++ + detect_libcxx() + if(_CONAN_IS_LIBCXX) + set(${LIB_CXX} "libc++" PARENT_SCOPE) + return() + endif() + + # Check for libstdc++ + detect_gnu_libstdcxx() + if(_CONAN_IS_GNU_LIBSTDCXX) + set(${LIB_CXX} "libstdc++${_CONAN_GNU_LIBSTDCXX_SUFFIX}" PARENT_SCOPE) + return() + endif() + + # TODO: it would be an error if we reach this point + elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + # Do nothing - compiler.runtime and compiler.runtime_type + # should be handled separately: https://github.com/conan-io/cmake-conan/pull/516 + return() + else() + # TODO: unable to determine, ask user to provide a full profile file instead + endif() +endfunction() + + +function(detect_compiler COMPILER COMPILER_VERSION COMPILER_RUNTIME COMPILER_RUNTIME_TYPE) + if(DEFINED CMAKE_CXX_COMPILER_ID) + set(_COMPILER ${CMAKE_CXX_COMPILER_ID}) + set(_COMPILER_VERSION ${CMAKE_CXX_COMPILER_VERSION}) + else() + if(NOT DEFINED CMAKE_C_COMPILER_ID) + message(FATAL_ERROR "C or C++ compiler not defined") + endif() + set(_COMPILER ${CMAKE_C_COMPILER_ID}) + set(_COMPILER_VERSION ${CMAKE_C_COMPILER_VERSION}) + endif() + + message(STATUS "CMake-Conan: CMake compiler=${_COMPILER}") + message(STATUS "CMake-Conan: CMake compiler version=${_COMPILER_VERSION}") + + if(_COMPILER MATCHES MSVC) + set(_COMPILER "msvc") + string(SUBSTRING ${MSVC_VERSION} 0 3 _COMPILER_VERSION) + # Configure compiler.runtime and compiler.runtime_type settings for MSVC + if(CMAKE_MSVC_RUNTIME_LIBRARY) + set(_msvc_runtime_library ${CMAKE_MSVC_RUNTIME_LIBRARY}) + else() + set(_msvc_runtime_library MultiThreaded$<$:Debug>DLL) # default value documented by CMake + endif() + + set(_KNOWN_MSVC_RUNTIME_VALUES "") + list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded MultiThreadedDLL) + list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreadedDebug MultiThreadedDebugDLL) + list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded$<$:Debug> MultiThreaded$<$:Debug>DLL) + + # only accept the 6 possible values, otherwise we don't don't know to map this + if(NOT _msvc_runtime_library IN_LIST _KNOWN_MSVC_RUNTIME_VALUES) + message(FATAL_ERROR "CMake-Conan: unable to map MSVC runtime: ${_msvc_runtime_library} to Conan settings") + endif() + + # Runtime is "dynamic" in all cases if it ends in DLL + if(_msvc_runtime_library MATCHES ".*DLL$") + set(_COMPILER_RUNTIME "dynamic") + else() + set(_COMPILER_RUNTIME "static") + endif() + message(STATUS "CMake-Conan: CMake compiler.runtime=${_COMPILER_RUNTIME}") + + # Only define compiler.runtime_type when explicitly requested + # If a generator expression is used, let Conan handle it conditional on build_type + if(NOT _msvc_runtime_library MATCHES ":Debug>") + if(_msvc_runtime_library MATCHES "Debug") + set(_COMPILER_RUNTIME_TYPE "Debug") + else() + set(_COMPILER_RUNTIME_TYPE "Release") + endif() + message(STATUS "CMake-Conan: CMake compiler.runtime_type=${_COMPILER_RUNTIME_TYPE}") + endif() + + unset(_KNOWN_MSVC_RUNTIME_VALUES) + + elseif(_COMPILER MATCHES AppleClang) + set(_COMPILER "apple-clang") + string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) + list(GET VERSION_LIST 0 _COMPILER_VERSION) + elseif(_COMPILER MATCHES Clang) + set(_COMPILER "clang") + string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) + list(GET VERSION_LIST 0 _COMPILER_VERSION) + elseif(_COMPILER MATCHES GNU) + set(_COMPILER "gcc") + string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) + list(GET VERSION_LIST 0 _COMPILER_VERSION) + endif() + + message(STATUS "CMake-Conan: [settings] compiler=${_COMPILER}") + message(STATUS "CMake-Conan: [settings] compiler.version=${_COMPILER_VERSION}") + if (_COMPILER_RUNTIME) + message(STATUS "CMake-Conan: [settings] compiler.runtime=${_COMPILER_RUNTIME}") + endif() + if (_COMPILER_RUNTIME_TYPE) + message(STATUS "CMake-Conan: [settings] compiler.runtime_type=${_COMPILER_RUNTIME_TYPE}") + endif() + + set(${COMPILER} ${_COMPILER} PARENT_SCOPE) + set(${COMPILER_VERSION} ${_COMPILER_VERSION} PARENT_SCOPE) + set(${COMPILER_RUNTIME} ${_COMPILER_RUNTIME} PARENT_SCOPE) + set(${COMPILER_RUNTIME_TYPE} ${_COMPILER_RUNTIME_TYPE} PARENT_SCOPE) +endfunction() + + +function(detect_build_type BUILD_TYPE) + get_property(_MULTICONFIG_GENERATOR GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + if(NOT _MULTICONFIG_GENERATOR) + # Only set when we know we are in a single-configuration generator + # Note: we may want to fail early if `CMAKE_BUILD_TYPE` is not defined + set(${BUILD_TYPE} ${CMAKE_BUILD_TYPE} PARENT_SCOPE) + endif() +endfunction() + +macro(set_conan_compiler_if_appleclang lang command output_variable) + if(CMAKE_${lang}_COMPILER_ID STREQUAL "AppleClang") + execute_process(COMMAND xcrun --find ${command} + OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE) + cmake_path(GET _xcrun_out PARENT_PATH _xcrun_toolchain_path) + cmake_path(GET CMAKE_${lang}_COMPILER PARENT_PATH _compiler_parent_path) + if ("${_xcrun_toolchain_path}" STREQUAL "${_compiler_parent_path}") + set(${output_variable} "") + endif() + unset(_xcrun_out) + unset(_xcrun_toolchain_path) + unset(_compiler_parent_path) + endif() +endmacro() + + +macro(append_compiler_executables_configuration) + set(_conan_c_compiler "") + set(_conan_cpp_compiler "") + if(CMAKE_C_COMPILER) + set(_conan_c_compiler "\"c\":\"${CMAKE_C_COMPILER}\",") + set_conan_compiler_if_appleclang(C cc _conan_c_compiler) + else() + message(WARNING "CMake-Conan: The C compiler is not defined. " + "Please define CMAKE_C_COMPILER or enable the C language.") + endif() + if(CMAKE_CXX_COMPILER) + set(_conan_cpp_compiler "\"cpp\":\"${CMAKE_CXX_COMPILER}\"") + set_conan_compiler_if_appleclang(CXX c++ _conan_cpp_compiler) + else() + message(WARNING "CMake-Conan: The C++ compiler is not defined. " + "Please define CMAKE_CXX_COMPILER or enable the C++ language.") + endif() + + if(NOT "x${_conan_c_compiler}${_conan_cpp_compiler}" STREQUAL "x") + string(APPEND PROFILE "tools.build:compiler_executables={${_conan_c_compiler}${_conan_cpp_compiler}}\n") + endif() + unset(_conan_c_compiler) + unset(_conan_cpp_compiler) +endmacro() + + +function(detect_host_profile output_file) + detect_os(MYOS MYOS_API_LEVEL MYOS_SDK MYOS_SUBSYSTEM MYOS_VERSION) + detect_arch(MYARCH) + detect_compiler(MYCOMPILER MYCOMPILER_VERSION MYCOMPILER_RUNTIME MYCOMPILER_RUNTIME_TYPE) + detect_cxx_standard(MYCXX_STANDARD) + detect_lib_cxx(MYLIB_CXX) + detect_build_type(MYBUILD_TYPE) + + set(PROFILE "") + string(APPEND PROFILE "[settings]\n") + if(MYARCH) + string(APPEND PROFILE arch=${MYARCH} "\n") + endif() + if(MYOS) + string(APPEND PROFILE os=${MYOS} "\n") + endif() + if(MYOS_API_LEVEL) + string(APPEND PROFILE os.api_level=${MYOS_API_LEVEL} "\n") + endif() + if(MYOS_VERSION) + string(APPEND PROFILE os.version=${MYOS_VERSION} "\n") + endif() + if(MYOS_SDK) + string(APPEND PROFILE os.sdk=${MYOS_SDK} "\n") + endif() + if(MYOS_SUBSYSTEM) + string(APPEND PROFILE os.subsystem=${MYOS_SUBSYSTEM} "\n") + endif() + if(MYCOMPILER) + string(APPEND PROFILE compiler=${MYCOMPILER} "\n") + endif() + if(MYCOMPILER_VERSION) + string(APPEND PROFILE compiler.version=${MYCOMPILER_VERSION} "\n") + endif() + if(MYCOMPILER_RUNTIME) + string(APPEND PROFILE compiler.runtime=${MYCOMPILER_RUNTIME} "\n") + endif() + if(MYCOMPILER_RUNTIME_TYPE) + string(APPEND PROFILE compiler.runtime_type=${MYCOMPILER_RUNTIME_TYPE} "\n") + endif() + if(MYCXX_STANDARD) + string(APPEND PROFILE compiler.cppstd=${MYCXX_STANDARD} "\n") + endif() + if(MYLIB_CXX) + string(APPEND PROFILE compiler.libcxx=${MYLIB_CXX} "\n") + endif() + if(MYBUILD_TYPE) + string(APPEND PROFILE "build_type=${MYBUILD_TYPE}\n") + endif() + + if(NOT DEFINED output_file) + set(_FN "${CMAKE_BINARY_DIR}/profile") + else() + set(_FN ${output_file}) + endif() + + string(APPEND PROFILE "[conf]\n") + string(APPEND PROFILE "tools.cmake.cmaketoolchain:generator=${CMAKE_GENERATOR}\n") + + # propagate compilers via profile + append_compiler_executables_configuration() + + if(MYOS STREQUAL "Android") + string(APPEND PROFILE "tools.android:ndk_path=${CMAKE_ANDROID_NDK}\n") + endif() + + message(STATUS "CMake-Conan: Creating profile ${_FN}") + file(WRITE ${_FN} ${PROFILE}) + message(STATUS "CMake-Conan: Profile: \n${PROFILE}") +endfunction() + + +function(conan_profile_detect_default) + message(STATUS "CMake-Conan: Checking if a default profile exists") + execute_process(COMMAND ${CONAN_COMMAND} profile path default + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + ECHO_OUTPUT_VARIABLE + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + if(NOT ${return_code} EQUAL "0") + message(STATUS "CMake-Conan: The default profile doesn't exist, detecting it.") + execute_process(COMMAND ${CONAN_COMMAND} profile detect + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + ECHO_OUTPUT_VARIABLE + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + endif() +endfunction() + + +function(conan_install) + cmake_parse_arguments(ARGS CONAN_ARGS ${ARGN}) + set(CONAN_OUTPUT_FOLDER ${CMAKE_BINARY_DIR}/conan) + # Invoke "conan install" with the provided arguments + set(CONAN_ARGS ${CONAN_ARGS} -of=${CONAN_OUTPUT_FOLDER}) + message(STATUS "CMake-Conan: conan install ${CMAKE_SOURCE_DIR} ${CONAN_ARGS} ${ARGN}") + + + # In case there was not a valid cmake executable in the PATH, we inject the + # same we used to invoke the provider to the PATH + if(DEFINED PATH_TO_CMAKE_BIN) + set(_OLD_PATH $ENV{PATH}) + set(ENV{PATH} "$ENV{PATH}:${PATH_TO_CMAKE_BIN}") + endif() + + execute_process(COMMAND ${CONAN_COMMAND} install ${CMAKE_SOURCE_DIR} ${CONAN_ARGS} ${ARGN} --format=json + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + + if(DEFINED PATH_TO_CMAKE_BIN) + set(ENV{PATH} "${_OLD_PATH}") + endif() + + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan install failed='${return_code}'") + else() + # the files are generated in a folder that depends on the layout used, if + # one is specified, but we don't know a priori where this is. + # TODO: this can be made more robust if Conan can provide this in the json output + string(JSON CONAN_GENERATORS_FOLDER GET ${conan_stdout} graph nodes 0 generators_folder) + cmake_path(CONVERT ${CONAN_GENERATORS_FOLDER} TO_CMAKE_PATH_LIST CONAN_GENERATORS_FOLDER) + # message("conan stdout: ${conan_stdout}") + message(STATUS "CMake-Conan: CONAN_GENERATORS_FOLDER=${CONAN_GENERATORS_FOLDER}") + set_property(GLOBAL PROPERTY CONAN_GENERATORS_FOLDER "${CONAN_GENERATORS_FOLDER}") + # reconfigure on conanfile changes + string(JSON CONANFILE GET ${conan_stdout} graph nodes 0 label) + message(STATUS "CMake-Conan: CONANFILE=${CMAKE_SOURCE_DIR}/${CONANFILE}") + set_property(DIRECTORY ${CMAKE_SOURCE_DIR} APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/${CONANFILE}") + # success + set_property(GLOBAL PROPERTY CONAN_INSTALL_SUCCESS TRUE) + endif() +endfunction() + + +function(conan_get_version conan_command conan_current_version) + execute_process( + COMMAND ${conan_command} --version + OUTPUT_VARIABLE conan_output + RESULT_VARIABLE conan_result + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(conan_result) + message(FATAL_ERROR "CMake-Conan: Error when trying to run Conan") + endif() + + string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" conan_version ${conan_output}) + set(${conan_current_version} ${conan_version} PARENT_SCOPE) +endfunction() + + +function(conan_version_check) + set(options ) + set(oneValueArgs MINIMUM CURRENT) + set(multiValueArgs ) + cmake_parse_arguments(CONAN_VERSION_CHECK + "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(NOT CONAN_VERSION_CHECK_MINIMUM) + message(FATAL_ERROR "CMake-Conan: Required parameter MINIMUM not set!") + endif() + if(NOT CONAN_VERSION_CHECK_CURRENT) + message(FATAL_ERROR "CMake-Conan: Required parameter CURRENT not set!") + endif() + + if(CONAN_VERSION_CHECK_CURRENT VERSION_LESS CONAN_VERSION_CHECK_MINIMUM) + message(FATAL_ERROR "CMake-Conan: Conan version must be ${CONAN_VERSION_CHECK_MINIMUM} or later") + endif() +endfunction() + + +macro(construct_profile_argument argument_variable profile_list) + set(${argument_variable} "") + if("${profile_list}" STREQUAL "CONAN_HOST_PROFILE") + set(_arg_flag "--profile:host=") + elseif("${profile_list}" STREQUAL "CONAN_BUILD_PROFILE") + set(_arg_flag "--profile:build=") + endif() + + set(_profile_list "${${profile_list}}") + list(TRANSFORM _profile_list REPLACE "auto-cmake" "${CMAKE_BINARY_DIR}/conan_host_profile") + list(TRANSFORM _profile_list PREPEND ${_arg_flag}) + set(${argument_variable} ${_profile_list}) + + unset(_arg_flag) + unset(_profile_list) +endmacro() + + +macro(conan_provide_dependency method package_name) + set_property(GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED TRUE) + get_property(_conan_install_success GLOBAL PROPERTY CONAN_INSTALL_SUCCESS) + if(NOT _conan_install_success) + find_program(CONAN_COMMAND "conan" REQUIRED) + conan_get_version(${CONAN_COMMAND} CONAN_CURRENT_VERSION) + conan_version_check(MINIMUM ${CONAN_MINIMUM_VERSION} CURRENT ${CONAN_CURRENT_VERSION}) + message(STATUS "CMake-Conan: first find_package() found. Installing dependencies with Conan") + if("default" IN_LIST CONAN_HOST_PROFILE OR "default" IN_LIST CONAN_BUILD_PROFILE) + conan_profile_detect_default() + endif() + if("auto-cmake" IN_LIST CONAN_HOST_PROFILE) + detect_host_profile(${CMAKE_BINARY_DIR}/conan_host_profile) + endif() + construct_profile_argument(_host_profile_flags CONAN_HOST_PROFILE) + construct_profile_argument(_build_profile_flags CONAN_BUILD_PROFILE) + if(EXISTS "${CMAKE_SOURCE_DIR}/conanfile.py") + file(READ "${CMAKE_SOURCE_DIR}/conanfile.py" outfile) + if(NOT "${outfile}" MATCHES ".*CMakeDeps.*") + message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile") + endif() + set(generator "") + elseif (EXISTS "${CMAKE_SOURCE_DIR}/conanfile.txt") + file(READ "${CMAKE_SOURCE_DIR}/conanfile.txt" outfile) + if(NOT "${outfile}" MATCHES ".*CMakeDeps.*") + message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile. " + "Please define the generator as it will be mandatory in the future") + endif() + set(generator "-g;CMakeDeps") + endif() + get_property(_multiconfig_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + if(NOT _multiconfig_generator) + message(STATUS "CMake-Conan: Installing single configuration ${CMAKE_BUILD_TYPE}") + conan_install(${_host_profile_flags} ${_build_profile_flags} ${CONAN_INSTALL_ARGS} ${generator}) + else() + message(STATUS "CMake-Conan: Installing both Debug and Release") + conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Release ${CONAN_INSTALL_ARGS} ${generator}) + conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Debug ${CONAN_INSTALL_ARGS} ${generator}) + endif() + unset(_host_profile_flags) + unset(_build_profile_flags) + unset(_multiconfig_generator) + unset(_conan_install_success) + else() + message(STATUS "CMake-Conan: find_package(${ARGV1}) found, 'conan install' already ran") + unset(_conan_install_success) + endif() + + get_property(_conan_generators_folder GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) + + # Ensure that we consider Conan-provided packages ahead of any other, + # irrespective of other settings that modify the search order or search paths + # This follows the guidelines from the find_package documentation + # (https://cmake.org/cmake/help/latest/command/find_package.html): + # find_package ( PATHS paths... NO_DEFAULT_PATH) + # find_package () + + # Filter out `REQUIRED` from the argument list, as the first call may fail + set(_find_args_${package_name} "${ARGN}") + list(REMOVE_ITEM _find_args_${package_name} "REQUIRED") + if(NOT "MODULE" IN_LIST _find_args_${package_name}) + find_package(${package_name} ${_find_args_${package_name}} BYPASS_PROVIDER PATHS "${_conan_generators_folder}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + unset(_find_args_${package_name}) + endif() + + # Invoke find_package a second time - if the first call succeeded, + # this will simply reuse the result. If not, fall back to CMake default search + # behaviour, also allowing modules to be searched. + if(NOT ${package_name}_FOUND) + list(FIND CMAKE_MODULE_PATH "${_conan_generators_folder}" _index) + if(_index EQUAL -1) + list(PREPEND CMAKE_MODULE_PATH "${_conan_generators_folder}") + endif() + unset(_index) + find_package(${package_name} ${ARGN} BYPASS_PROVIDER) + list(REMOVE_ITEM CMAKE_MODULE_PATH "${_conan_generators_folder}") + endif() +endmacro() + +#[=[ not needed by Qt Creator, and if not commented it would break the auto-setup feature + +cmake_language( + SET_DEPENDENCY_PROVIDER conan_provide_dependency + SUPPORTED_METHODS FIND_PACKAGE +) + + +macro(conan_provide_dependency_check) + set(_CONAN_PROVIDE_DEPENDENCY_INVOKED FALSE) + get_property(_CONAN_PROVIDE_DEPENDENCY_INVOKED GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED) + if(NOT _CONAN_PROVIDE_DEPENDENCY_INVOKED) + message(WARNING "Conan is correctly configured as dependency provider, " + "but Conan has not been invoked. Please add at least one " + "call to `find_package()`.") + if(DEFINED CONAN_COMMAND) + # supress warning in case `CONAN_COMMAND` was specified but unused. + set(_CONAN_COMMAND ${CONAN_COMMAND}) + unset(_CONAN_COMMAND) + endif() + endif() + unset(_CONAN_PROVIDE_DEPENDENCY_INVOKED) +endmacro() + + +# Add a deferred call at the end of processing the top-level directory +# to check if the dependency provider was invoked at all. +cmake_language(DEFER DIRECTORY "${CMAKE_SOURCE_DIR}" CALL conan_provide_dependency_check) + +]=] + +# Configurable variables for Conan profiles +set(CONAN_HOST_PROFILE "default;auto-cmake" CACHE STRING "Conan host profile") +set(CONAN_BUILD_PROFILE "default" CACHE STRING "Conan build profile") +set(CONAN_INSTALL_ARGS "--build=missing" CACHE STRING "Command line arguments for conan install") + +find_program(_cmake_program NAMES cmake NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_CMAKE_FIND_ROOT_PATH) +if(NOT _cmake_program) + get_filename_component(PATH_TO_CMAKE_BIN "${CMAKE_COMMAND}" DIRECTORY) + set(PATH_TO_CMAKE_BIN "${PATH_TO_CMAKE_BIN}" CACHE INTERNAL "Path where the CMake executable is") +endif() + diff --git a/build/Desktop_Qt_6_8_0-Debug/CMakeCache.txt b/build/Desktop_Qt_6_8_0-Debug/CMakeCache.txt new file mode 100644 index 000000000..56f50b7f7 --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Debug/CMakeCache.txt @@ -0,0 +1,445 @@ +# This is the CMakeCache file. +# For build in directory: /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug +# It was generated by CMake: /home/austenharrell/Qt/Tools/CMake/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Boost date_time library (debug) +Boost_DATE_TIME_LIBRARY_DEBUG:FILEPATH=Boost_DATE_TIME_LIBRARY_DEBUG-NOTFOUND + +//Boost date_time library (release) +Boost_DATE_TIME_LIBRARY_RELEASE:FILEPATH=Boost_DATE_TIME_LIBRARY_RELEASE-NOTFOUND + +//The directory containing a CMake configuration file for Boost. +Boost_DIR:PATH=Boost_DIR-NOTFOUND + +//Path to a file. +Boost_INCLUDE_DIR:PATH=Boost_INCLUDE_DIR-NOTFOUND + +//Boost program_options library (debug) +Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG:FILEPATH=Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG-NOTFOUND + +//Boost program_options library (release) +Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE:FILEPATH=Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE-NOTFOUND + +//Boost unit_test_framework library (debug) +Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG:FILEPATH=Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG-NOTFOUND + +//Boost unit_test_framework library (release) +Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE:FILEPATH=Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE-NOTFOUND + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//No help, variable specified on the command line. +CMAKE_BUILD_TYPE:STRING=Debug + +//Enable colored diagnostics throughout. +CMAKE_COLOR_DIAGNOSTICS:BOOL=1 + +//CXX compiler +CMAKE_CXX_COMPILER:STRING=/usr/bin/x86_64-linux-gnu-g++-11 + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/x86_64-linux-gnu-gcc-ar-11 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/x86_64-linux-gnu-gcc-ranlib-11 + +//Flags used by the CXX compiler during all build types. +CMAKE_CXX_FLAGS:STRING=-DQT_QML_DEBUG + +//Flags used by the CXX compiler during DEBUG builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//No help, variable specified on the command line. +CMAKE_CXX_FLAGS_INIT:STRING=-DQT_QML_DEBUG + +//Flags used by the CXX compiler during MINSIZEREL builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the CXX compiler during RELEASE builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the CXX compiler during RELWITHDEBINFO builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//C compiler +CMAKE_C_COMPILER:STRING=/usr/bin/gcc-11 + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-11 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-11 + +//Flags used by the C compiler during all build types. +CMAKE_C_FLAGS:STRING= + +//Flags used by the C compiler during DEBUG builds. +CMAKE_C_FLAGS_DEBUG:STRING=-g + +//Flags used by the C compiler during MINSIZEREL builds. +CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the C compiler during RELEASE builds. +CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the C compiler during RELWITHDEBINFO builds. +CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND + +//Flags used by the linker during all build types. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL= + +//Value Computed by CMake. +CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/pkgRedirects + +//No help, variable specified on the command line. +CMAKE_GENERATOR:STRING=Ninja + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Program used to build from build.ninja files. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/ninja + +//Flags used by the linker during the creation of modules during +// all build types. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//No help, variable specified on the command line. +CMAKE_PREFIX_PATH:PATH=/home/austenharrell/Qt/6.8.0/gcc_64 + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//No help, variable specified on the command line. +CMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=WindNinja + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Path to a program. +CMAKE_READELF:FILEPATH=/usr/bin/readelf + +//Flags used by the linker during the creation of shared libraries +// during all build types. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//Path to a program. +CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Build a windows installer with dlls from the firelab machine +FIRELAB_PACKAGE:BOOL=OFF + +//Skip Qt Creator's package manager auto-setup +QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP:BOOL=OFF + +//No help, variable specified on the command line. +QT_QMAKE_EXECUTABLE:FILEPATH=/home/austenharrell/Qt/6.8.0/gcc_64/bin/qmake + +//Value Computed by CMake +WindNinja_BINARY_DIR:STATIC=/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug + +//Value Computed by CMake +WindNinja_IS_TOP_LEVEL:STATIC=ON + +//Value Computed by CMake +WindNinja_SOURCE_DIR:STATIC=/home/austenharrell/school/2025_Spring/windninja + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: Boost_DATE_TIME_LIBRARY_DEBUG +Boost_DATE_TIME_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_DATE_TIME_LIBRARY_RELEASE +Boost_DATE_TIME_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_DIR +Boost_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_INCLUDE_DIR +Boost_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG +Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE +Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG +Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE +Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=29 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=3 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/home/austenharrell/Qt/Tools/CMake/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/home/austenharrell/Qt/Tools/CMake/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/home/austenharrell/Qt/Tools/CMake/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR +CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB +CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER +CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_AR +CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB +CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS +CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO +CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Path to cache edit program executable. +CMAKE_EDIT_COMMAND:INTERNAL=/home/austenharrell/Qt/Tools/CMake/bin/ccmake +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/austenharrell/school/2025_Spring/windninja +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_TAPI +CMAKE_TAPI-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/usr/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: FIRELAB_PACKAGE +FIRELAB_PACKAGE-ADVANCED:INTERNAL=1 +//Components requested for this build tree. +_Boost_COMPONENTS_SEARCHED:INTERNAL= +//Last used Boost_INCLUDE_DIR value. +_Boost_INCLUDE_DIR_LAST:INTERNAL=Boost_INCLUDE_DIR-NOTFOUND +//Last used Boost_NAMESPACE value. +_Boost_NAMESPACE_LAST:INTERNAL=boost +//Last used Boost_USE_MULTITHREADED value. +_Boost_USE_MULTITHREADED_LAST:INTERNAL=TRUE +//linker supports push/pop state +_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE + diff --git a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCCompiler.cmake b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCCompiler.cmake new file mode 100644 index 000000000..2bbc9eb34 --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCCompiler.cmake @@ -0,0 +1,80 @@ +set(CMAKE_C_COMPILER "/usr/bin/gcc-11") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "GNU") +set(CMAKE_C_COMPILER_VERSION "11.4.0") +set(CMAKE_C_COMPILER_VERSION_INTERNAL "") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17;c_std_23") +set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") +set(CMAKE_C17_COMPILE_FEATURES "c_std_17") +set(CMAKE_C23_COMPILE_FEATURES "c_std_23") + +set(CMAKE_C_PLATFORM_ID "Linux") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_C_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar-11") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib-11") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_LINKER_LINK "") +set(CMAKE_LINKER_LLD "") +set(CMAKE_C_COMPILER_LINKER "/usr/bin/ld") +set(CMAKE_C_COMPILER_LINKER_ID "GNU") +set(CMAKE_C_COMPILER_LINKER_VERSION 2.38) +set(CMAKE_C_COMPILER_LINKER_FRONTEND_VARIANT GNU) +set(CMAKE_MT "") +set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") +set(CMAKE_COMPILER_IS_GNUCC 1) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) +set(CMAKE_C_LINKER_DEPFILE_SUPPORTED FALSE) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "8") +set(CMAKE_C_COMPILER_ABI "ELF") +set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake new file mode 100644 index 000000000..bfe6256d5 --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake @@ -0,0 +1,92 @@ +set(CMAKE_CXX_COMPILER "/usr/bin/x86_64-linux-gnu-g++-11") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "11.4.0") +set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") +set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") +set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_CXX_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_CXX_COMPILER_AR "/usr/bin/x86_64-linux-gnu-gcc-ar-11") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/x86_64-linux-gnu-gcc-ranlib-11") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_LINKER_LINK "") +set(CMAKE_LINKER_LLD "") +set(CMAKE_CXX_COMPILER_LINKER "/usr/bin/ld") +set(CMAKE_CXX_COMPILER_LINKER_ID "GNU") +set(CMAKE_CXX_COMPILER_LINKER_VERSION 2.38) +set(CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT GNU) +set(CMAKE_MT "") +set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") +set(CMAKE_COMPILER_IS_GNUCXX 1) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) + +foreach (lang IN ITEMS C OBJC OBJCXX) + if (CMAKE_${lang}_COMPILER_ID_RUN) + foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) + list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) + endforeach() + endif() +endforeach() + +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) +set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED FALSE) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/11;/usr/include/x86_64-linux-gnu/c++/11;/usr/include/c++/11/backward;/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") +set(CMAKE_CXX_COMPILER_CLANG_RESOURCE_DIR "") diff --git a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_C.bin b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_C.bin new file mode 100755 index 0000000000000000000000000000000000000000..59672f58544a0d3fa118329bec892cc5d8608ac8 GIT binary patch literal 15968 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 Z0>QaorNy;#ZU061!veG*;1CeSKLPgAN{|2m literal 0 HcmV?d00001 diff --git a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_CXX.bin b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 0000000000000000000000000000000000000000..cfa527b53452d63fe64b6a8e2d060ddc5e29a3a6 GIT binary patch literal 15992 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 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__BCC__) +# define COMPILER_ID "Bruce" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) && defined(__ti__) +# define COMPILER_ID "TIClang" + # define COMPILER_VERSION_MAJOR DEC(__ti_major__) + # define COMPILER_VERSION_MINOR DEC(__ti_minor__) + # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) +# define COMPILER_VERSION_INTERNAL DEC(__ti_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + +#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) +# define COMPILER_ID "SDCC" +# if defined(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) +# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) +# else + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__clang__) && defined(__ti__) +# if defined(__ARM_ARCH) +# define ARCHITECTURE_ID "Arm" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if !defined(__STDC__) && !defined(__clang__) +# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__) +# define C_VERSION "90" +# else +# define C_VERSION +# endif +#elif __STDC_VERSION__ > 201710L +# define C_VERSION "23" +#elif __STDC_VERSION__ >= 201710L +# define C_VERSION "17" +#elif __STDC_VERSION__ >= 201000L +# define C_VERSION "11" +#elif __STDC_VERSION__ >= 199901L +# define C_VERSION "99" +#else +# define C_VERSION "90" +#endif +const char* info_language_standard_default = + "INFO" ":" "standard_default[" C_VERSION "]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else +int main(int argc, char* argv[]) +# endif +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 000000000..9a5e8f8ce --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,878 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + +#if !defined(__has_include) +/* If the compiler does not have __has_include, pretend the answer is + always no. */ +# define __has_include(x) 0 +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a version is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) && defined(__ti__) +# define COMPILER_ID "TIClang" + # define COMPILER_VERSION_MAJOR DEC(__ti_major__) + # define COMPILER_VERSION_MINOR DEC(__ti_minor__) + # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) +# define COMPILER_VERSION_INTERNAL DEC(__ti_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__clang__) && defined(__ti__) +# if defined(__ARM_ARCH) +# define ARCHITECTURE_ID "Arm" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L +# if defined(__INTEL_CXX11_MODE__) +# if defined(__cpp_aggregate_nsdmi) +# define CXX_STD 201402L +# else +# define CXX_STD 201103L +# endif +# else +# define CXX_STD 199711L +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# define CXX_STD _MSVC_LANG +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_standard_default = "INFO" ":" "standard_default[" +#if CXX_STD > 202002L + "23" +#elif CXX_STD > 201703L + "20" +#elif CXX_STD >= 201703L + "17" +#elif CXX_STD >= 201402L + "14" +#elif CXX_STD >= 201103L + "11" +#else + "98" +#endif +"]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} diff --git a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeConfigureLog.yaml b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeConfigureLog.yaml new file mode 100644 index 000000000..e9c74d9da --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeConfigureLog.yaml @@ -0,0 +1,556 @@ + +--- +events: + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake:205 (message)" + - "CMakeLists.txt:20 (project)" + message: | + The system is: Linux - 5.15.133.1-microsoft-standard-WSL2 - x86_64 + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCCompiler.cmake:123 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:20 (project)" + message: | + Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. + Compiler: /usr/bin/gcc-11 + Build flags: + Id flags: + + The output was: + 0 + + + Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" + + The C compiler identification is GNU, found in: + /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdC/a.out + + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:20 (project)" + message: | + Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. + Compiler: /usr/bin/x86_64-linux-gnu-g++-11 + Build flags: -DQT_QML_DEBUG + Id flags: + + The output was: + 0 + + + Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + + The CXX compiler identification is GNU, found in: + /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/a.out + + - + kind: "try_compile-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:67 (try_compile)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:20 (project)" + checks: + - "Detecting C compiler ABI info" + directories: + source: "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-iDn76p" + binary: "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-iDn76p" + cmakeVariables: + CMAKE_C_FLAGS: "" + buildResult: + variable: "CMAKE_C_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-iDn76p' + + Run Build Command(s): /usr/bin/ninja -v cmTC_25987 + [1/2] /usr/bin/gcc-11 -fdiagnostics-color=always -v -o CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCCompilerABI.c + Using built-in specs. + COLLECT_GCC=/usr/bin/gcc-11 + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) + COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_25987.dir/' + /usr/lib/gcc/x86_64-linux-gnu/11/cc1 -quiet -v -imultiarch x86_64-linux-gnu /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_25987.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccC1mAN8.s + GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) + compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include" + #include "..." search starts here: + #include <...> search starts here: + /usr/lib/gcc/x86_64-linux-gnu/11/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include + End of search list. + GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) + compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + Compiler executable checksum: 50eaa2331df977b8016186198deb2d18 + COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_25987.dir/' + as -v --64 -o CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o /tmp/ccC1mAN8.s + GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38 + COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.' + [2/2] : && /usr/bin/gcc-11 -v -Wl,-v -rdynamic CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o -o cmTC_25987 && : + Using built-in specs. + COLLECT_GCC=/usr/bin/gcc-11 + COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) + COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_25987' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_25987.' + /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccD2IQXF.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_25987 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o + collect2 version 11.4.0 + /usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccD2IQXF.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_25987 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o + GNU ld (GNU Binutils for Ubuntu) 2.38 + COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_25987' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_25987.' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:137 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:20 (project)" + message: | + Parsed C implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/usr/lib/gcc/x86_64-linux-gnu/11/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/11/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/11/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:173 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:20 (project)" + message: | + Parsed C implicit link information: + link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)] + ignore line: [Change Dir: '/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-iDn76p'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/ninja -v cmTC_25987] + ignore line: [[1/2] /usr/bin/gcc-11 -fdiagnostics-color=always -v -o CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCCompilerABI.c] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/gcc-11] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] + ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_25987.dir/'] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/cc1 -quiet -v -imultiarch x86_64-linux-gnu /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_25987.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccC1mAN8.s] + ignore line: [GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [Compiler executable checksum: 50eaa2331df977b8016186198deb2d18] + ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_25987.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o /tmp/ccC1mAN8.s] + ignore line: [GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.'] + ignore line: [[2/2] : && /usr/bin/gcc-11 -v -Wl -v -rdynamic CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o -o cmTC_25987 && :] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/gcc-11] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_25987' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_25987.'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccD2IQXF.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_25987 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccD2IQXF.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_25987] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] + arg [-v] ==> ignore + arg [CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + ignore line: [collect2 version 11.4.0] + ignore line: [/usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccD2IQXF.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_25987 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + linker tool for 'C': /usr/bin/ld + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11] ==> [/usr/lib/gcc/x86_64-linux-gnu/11] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> [/usr/lib] + implicit libs: [gcc;gcc_s;c;gcc;gcc_s] + implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:210 (cmake_determine_linker_id)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:20 (project)" + message: | + Running the C compiler's linker: "/usr/bin/ld" "-v" + GNU ld (GNU Binutils for Ubuntu) 2.38 + - + kind: "try_compile-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:67 (try_compile)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:20 (project)" + checks: + - "Detecting CXX compiler ABI info" + directories: + source: "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-juwRnY" + binary: "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-juwRnY" + cmakeVariables: + CMAKE_CXX_FLAGS: "-DQT_QML_DEBUG" + CMAKE_CXX_SCAN_FOR_MODULES: "OFF" + buildResult: + variable: "CMAKE_CXX_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-juwRnY' + + Run Build Command(s): /usr/bin/ninja -v cmTC_b8bbd + [1/2] /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG -fdiagnostics-color=always -v -o CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp + Using built-in specs. + COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11 + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) + COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b8bbd.dir/' + /usr/lib/gcc/x86_64-linux-gnu/11/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D QT_QML_DEBUG /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_b8bbd.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccP7OMR6.s + GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) + compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/11" + ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include" + #include "..." search starts here: + #include <...> search starts here: + /usr/include/c++/11 + /usr/include/x86_64-linux-gnu/c++/11 + /usr/include/c++/11/backward + /usr/lib/gcc/x86_64-linux-gnu/11/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include + End of search list. + GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) + compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + Compiler executable checksum: d591828bb4d392ae8b7b160e5bb0b95f + COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b8bbd.dir/' + as -v --64 -o CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccP7OMR6.s + GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38 + COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.' + [2/2] : && /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG -v -Wl,-v -rdynamic CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_b8bbd && : + Using built-in specs. + COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11 + COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) + COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-D' 'QT_QML_DEBUG' '-v' '-rdynamic' '-o' 'cmTC_b8bbd' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_b8bbd.' + /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccQOxcTP.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_b8bbd /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o + collect2 version 11.4.0 + /usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccQOxcTP.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_b8bbd /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o + GNU ld (GNU Binutils for Ubuntu) 2.38 + COLLECT_GCC_OPTIONS='-D' 'QT_QML_DEBUG' '-v' '-rdynamic' '-o' 'cmTC_b8bbd' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_b8bbd.' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:137 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:20 (project)" + message: | + Parsed CXX implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/usr/include/c++/11] + add: [/usr/include/x86_64-linux-gnu/c++/11] + add: [/usr/include/c++/11/backward] + add: [/usr/lib/gcc/x86_64-linux-gnu/11/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/include/c++/11] ==> [/usr/include/c++/11] + collapse include dir [/usr/include/x86_64-linux-gnu/c++/11] ==> [/usr/include/x86_64-linux-gnu/c++/11] + collapse include dir [/usr/include/c++/11/backward] ==> [/usr/include/c++/11/backward] + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/11/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/11/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/include/c++/11;/usr/include/x86_64-linux-gnu/c++/11;/usr/include/c++/11/backward;/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:173 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:20 (project)" + message: | + Parsed CXX implicit link information: + link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)] + ignore line: [Change Dir: '/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-juwRnY'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/ninja -v cmTC_b8bbd] + ignore line: [[1/2] /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG -fdiagnostics-color=always -v -o CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] + ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b8bbd.dir/'] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D QT_QML_DEBUG /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_b8bbd.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccP7OMR6.s] + ignore line: [GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/11"] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/include/c++/11] + ignore line: [ /usr/include/x86_64-linux-gnu/c++/11] + ignore line: [ /usr/include/c++/11/backward] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [Compiler executable checksum: d591828bb4d392ae8b7b160e5bb0b95f] + ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b8bbd.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccP7OMR6.s] + ignore line: [GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.'] + ignore line: [[2/2] : && /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG -v -Wl -v -rdynamic CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_b8bbd && :] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-D' 'QT_QML_DEBUG' '-v' '-rdynamic' '-o' 'cmTC_b8bbd' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_b8bbd.'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccQOxcTP.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_b8bbd /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccQOxcTP.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_b8bbd] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] + arg [-v] ==> ignore + arg [CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + ignore line: [collect2 version 11.4.0] + ignore line: [/usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccQOxcTP.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_b8bbd /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + linker tool for 'CXX': /usr/bin/ld + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11] ==> [/usr/lib/gcc/x86_64-linux-gnu/11] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] + implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:210 (cmake_determine_linker_id)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:20 (project)" + message: | + Running the CXX compiler's linker: "/usr/bin/ld" "-v" + GNU ld (GNU Binutils for Ubuntu) 2.38 +... diff --git a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/cmake.check_cache b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/cmake.check_cache new file mode 100644 index 000000000..3dccd7317 --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/build/Desktop_Qt_6_8_0-Debug/ninja_version.h b/build/Desktop_Qt_6_8_0-Debug/ninja_version.h new file mode 100644 index 000000000..367f13b7c --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Debug/ninja_version.h @@ -0,0 +1,39 @@ +/****************************************************************************** + * + * Project: WindNinja + * Purpose: general disclaimer for windninja + * Author: Kyle Shannon + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + +#ifndef NINJA_VERSION_H_ +#define NINJA_VERSION_H_ + +#define NINJA_VERSION_MAJOR 3 +#define NINJA_VERSION_MINOR 11 +#define NINJA_VERSION_PATCH 0 +#define NINJA_VERSION_STRING "3.11.0" +#define NINJA_SCM_VERSION "6a8269d2034eabbb8a28bee5e6b77c628838dbd1" +#define NINJA_RELEASE_DATE "2025/01/28" + +#endif /* NINJA_VERSION_H_ */ + diff --git a/build/Desktop_Qt_6_8_0-Debug/qtcsettings.cmake b/build/Desktop_Qt_6_8_0-Debug/qtcsettings.cmake new file mode 100644 index 000000000..e0cd091bf --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Debug/qtcsettings.cmake @@ -0,0 +1,10 @@ +# This file is managed by Qt Creator, do not edit! + +set("CMAKE_GENERATOR" "Ninja" CACHE "STRING" "" FORCE) +set("QT_QMAKE_EXECUTABLE" "/home/austenharrell/Qt/6.8.0/gcc_64/bin/qmake" CACHE "FILEPATH" "" FORCE) +set("CMAKE_CXX_FLAGS_INIT" "-DQT_QML_DEBUG" CACHE "STRING" "" FORCE) +set("CMAKE_PROJECT_INCLUDE_BEFORE" "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake" CACHE "FILEPATH" "" FORCE) +set("CMAKE_CXX_COMPILER" "/usr/bin/x86_64-linux-gnu-g++-11" CACHE "FILEPATH" "" FORCE) +set("CMAKE_C_COMPILER" "/usr/bin/gcc-11" CACHE "FILEPATH" "" FORCE) +set("CMAKE_BUILD_TYPE" "Debug" CACHE "STRING" "" FORCE) +set("CMAKE_PREFIX_PATH" "/home/austenharrell/Qt/6.8.0/gcc_64" CACHE "PATH" "" FORCE) \ No newline at end of file diff --git a/build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/cache-v2 b/build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/cache-v2 new file mode 100644 index 000000000..e69de29bb diff --git a/build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/cmakeFiles-v1 b/build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/cmakeFiles-v1 new file mode 100644 index 000000000..e69de29bb diff --git a/build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/codemodel-v2 b/build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/codemodel-v2 new file mode 100644 index 000000000..e69de29bb diff --git a/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/LICENSE.conan b/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/LICENSE.conan new file mode 100644 index 000000000..541f5a3a6 --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/LICENSE.conan @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2019 JFrog + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/auto-setup.cmake b/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/auto-setup.cmake new file mode 100644 index 000000000..c797138f6 --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/auto-setup.cmake @@ -0,0 +1,272 @@ +# +# Internal Qt Creator variable reference +# +foreach(qtcreator_var + QT_QMAKE_EXECUTABLE CMAKE_PREFIX_PATH CMAKE_C_COMPILER CMAKE_CXX_COMPILER + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELWITHDEBINFO) + set(__just_reference_${qtcreator_var} ${${qtcreator_var}}) +endforeach() + +if (EXISTS "${CMAKE_SOURCE_DIR}/QtCreatorPackageManager.cmake") + include("${CMAKE_SOURCE_DIR}/QtCreatorPackageManager.cmake") +endif() + +if (QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP) + return() +endif() +option(QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP "Skip Qt Creator's package manager auto-setup" OFF) + +# Store the C/C++ object output extension +if (CMAKE_VERSION GREATER_EQUAL "3.19") + cmake_language(DEFER CALL set CMAKE_C_OUTPUT_EXTENSION "${CMAKE_C_OUTPUT_EXTENSION}" CACHE STRING "" FORCE) + cmake_language(DEFER CALL set CMAKE_CXX_OUTPUT_EXTENSION "${CMAKE_CXX_OUTPUT_EXTENSION}" CACHE STRING "" FORCE) +endif() + +macro(qtc_auto_setup_compiler_standard toolchainFile) + foreach(lang_var C CXX CUDA OBJC OBJCXX) + foreach(prop_var STANDARD STANDARD_REQUIRED EXTENSIONS) + if (CMAKE_${lang_var}_${prop_var}) + file(APPEND "${toolchainFile}" + "set(CMAKE_${lang_var}_${prop_var} ${CMAKE_${lang_var}_${prop_var}})\n") + endif() + endforeach() + endforeach() + + # Forward important CMake variables to the package manager in the toolchain file + foreach(fwd_var CMAKE_MSVC_RUNTIME_LIBRARY CMAKE_SYSROOT CMAKE_OSX_SYSROOT CMAKE_OSX_ARCHITECTURES) + if (${fwd_var}) + file(APPEND "${toolchainFile}" + "set(${fwd_var} ${${fwd_var}})\n") + endif() + endforeach() +endmacro() + +# +# conan +# +macro(qtc_auto_setup_conan) + foreach(file conanfile.txt conanfile.py) + if (EXISTS "${CMAKE_SOURCE_DIR}/${file}") + set(conanfile_txt "${CMAKE_SOURCE_DIR}/${file}") + break() + endif() + endforeach() + + if (conanfile_txt AND NOT QT_CREATOR_SKIP_CONAN_SETUP) + option(QT_CREATOR_SKIP_CONAN_SETUP "Skip Qt Creator's conan package manager auto-setup" OFF) + set(QT_CREATOR_CONAN_BUILD_POLICY "missing" CACHE STRING "Qt Creator's conan package manager auto-setup build policy. This is used for the BUILD property of cmake_conan_run") + + find_program(conan_program conan) + if (NOT conan_program) + message(WARNING "Qt Creator: conan executable not found. " + "Package manager auto-setup will be skipped. " + "To disable this warning set QT_CREATOR_SKIP_CONAN_SETUP to ON.") + return() + endif() + execute_process(COMMAND ${conan_program} --version + RESULT_VARIABLE result_code + OUTPUT_VARIABLE conan_version_output + ERROR_VARIABLE conan_version_output) + if (NOT result_code EQUAL 0) + message(FATAL_ERROR "conan --version failed='${result_code}: ${conan_version_output}") + endif() + + string(REGEX REPLACE ".*Conan version ([0-9].[0-9]).*" "\\1" conan_version "${conan_version_output}") + + set(conanfile_timestamp_file "${CMAKE_BINARY_DIR}/conan-dependencies/conanfile.timestamp") + file(TIMESTAMP "${conanfile_txt}" conanfile_timestamp) + + set(do_conan_installation ON) + if (EXISTS "${conanfile_timestamp_file}") + file(READ "${conanfile_timestamp_file}" old_conanfile_timestamp) + if ("${conanfile_timestamp}" STREQUAL "${old_conanfile_timestamp}") + set(do_conan_installation OFF) + endif() + endif() + + set(conanfile_build_policy_file "${CMAKE_BINARY_DIR}/conan-dependencies/conanfile.buildpolicy") + if (EXISTS "${conanfile_build_policy_file}") + file(READ "${conanfile_build_policy_file}" build_policy) + if (NOT "${build_policy}" STREQUAL "${QT_CREATOR_CONAN_BUILD_POLICY}") + set(do_conan_installation ON) + endif() + endif() + + if (do_conan_installation) + message(STATUS "Qt Creator: conan package manager auto-setup. " + "Skip this step by setting QT_CREATOR_SKIP_CONAN_SETUP to ON.") + + file(COPY "${conanfile_txt}" DESTINATION "${CMAKE_BINARY_DIR}/conan-dependencies/") + + file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" " + set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\") + set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\") + ") + qtc_auto_setup_compiler_standard("${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake") + + if (CMAKE_TOOLCHAIN_FILE) + file(APPEND "${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" + "include(\"${CMAKE_TOOLCHAIN_FILE}\")\n") + endif() + + file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/CMakeLists.txt" " + cmake_minimum_required(VERSION 3.15) + + unset(CMAKE_PROJECT_INCLUDE_BEFORE CACHE) + project(conan-setup) + + if (${conan_version} VERSION_GREATER_EQUAL 2.0) + set(CONAN_COMMAND \"${conan_program}\") + include(\"${CMAKE_CURRENT_LIST_DIR}/conan_provider.cmake\") + conan_profile_detect_default() + detect_host_profile(\"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\") + + set(build_types \${CMAKE_BUILD_TYPE}) + if (CMAKE_CONFIGURATION_TYPES) + set(build_types \${CMAKE_CONFIGURATION_TYPES}) + endif() + + foreach(type \${build_types}) + conan_install( + -pr \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\" + --build=${QT_CREATOR_CONAN_BUILD_POLICY} + -s build_type=\${type} + -g CMakeDeps) + endforeach() + + get_property(CONAN_INSTALL_SUCCESS GLOBAL PROPERTY CONAN_INSTALL_SUCCESS) + if (CONAN_INSTALL_SUCCESS) + get_property(CONAN_GENERATORS_FOLDER GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) + file(TO_CMAKE_PATH \"\${CONAN_GENERATORS_FOLDER}\" CONAN_GENERATORS_FOLDER) + file(WRITE \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake\" \" + list(PREPEND CMAKE_PREFIX_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") + list(PREPEND CMAKE_MODULE_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") + list(PREPEND CMAKE_FIND_ROOT_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") + list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH) + list(REMOVE_DUPLICATES CMAKE_MODULE_PATH) + list(REMOVE_DUPLICATES CMAKE_FIND_ROOT_PATH) + set(CMAKE_PREFIX_PATH \\\"\\\${CMAKE_PREFIX_PATH}\\\" CACHE STRING \\\"\\\" FORCE) + set(CMAKE_MODULE_PATH \\\"\\\${CMAKE_MODULE_PATH}\\\" CACHE STRING \\\"\\\" FORCE) + set(CMAKE_FIND_ROOT_PATH \\\"\\\${CMAKE_FIND_ROOT_PATH}\\\" CACHE STRING \\\"\\\" FORCE) + \") + endif() + else() + include(\"${CMAKE_CURRENT_LIST_DIR}/conan.cmake\") + conan_cmake_run( + CONANFILE \"${conanfile_txt}\" + INSTALL_FOLDER \"${CMAKE_BINARY_DIR}/conan-dependencies\" + GENERATORS cmake_paths cmake_find_package json + BUILD ${QT_CREATOR_CONAN_BUILD_POLICY} + ENV CONAN_CMAKE_TOOLCHAIN_FILE=\"${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake\" + ) + endif() + ") + + if (NOT DEFINED CMAKE_BUILD_TYPE AND NOT DEFINED CMAKE_CONFIGURATION_TYPES) + set(CMAKE_CONFIGURATION_TYPES "Debug;Release") + endif() + + execute_process(COMMAND ${CMAKE_COMMAND} + -S "${CMAKE_BINARY_DIR}/conan-dependencies/" + -B "${CMAKE_BINARY_DIR}/conan-dependencies/build" + -C "${CMAKE_BINARY_DIR}/qtcsettings.cmake" + -D "CMAKE_TOOLCHAIN_FILE=${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" + -G ${CMAKE_GENERATOR} + -D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -D "CMAKE_CONFIGURATION_TYPES=${CMAKE_CONFIGURATION_TYPES}" + RESULT_VARIABLE result + ) + if (result EQUAL 0) + file(WRITE "${conanfile_timestamp_file}" "${conanfile_timestamp}") + file(WRITE "${conanfile_build_policy_file}" ${QT_CREATOR_CONAN_BUILD_POLICY}) + else() + message(WARNING "Qt Creator's conan package manager auto-setup failed. Consider setting " + "QT_CREATOR_SKIP_CONAN_SETUP to ON and reconfigure to skip this step.") + return() + endif() + endif() + + include("${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake") + endif() + unset(conanfile_txt) +endmacro() +qtc_auto_setup_conan() + +# +# vcpkg +# +macro(qtc_auto_setup_vcpkg) + if (EXISTS "${CMAKE_SOURCE_DIR}/vcpkg.json" AND NOT QT_CREATOR_SKIP_VCPKG_SETUP) + option(QT_CREATOR_SKIP_VCPKG_SETUP "Skip Qt Creator's vcpkg package manager auto-setup" OFF) + + find_program(vcpkg_program vcpkg + PATHS $ENV{VCPKG_ROOT} ${CMAKE_SOURCE_DIR}/vcpkg + NO_DEFAULT_PATH + ) + if (NOT vcpkg_program) + message(WARNING "Qt Creator: vcpkg executable not found. " + "Package manager auto-setup will be skipped. " + "To disable this warning set QT_CREATOR_SKIP_VCPKG_SETUP to ON.") + return() + endif() + execute_process(COMMAND ${vcpkg_program} version + RESULT_VARIABLE result_code + OUTPUT_VARIABLE vcpkg_version_output + ERROR_VARIABLE vcpkg_version_output) + if (NOT result_code EQUAL 0) + message(FATAL_ERROR "vcpkg version failed='${result_code}: ${vcpkg_version_output}") + endif() + + # Resolve any symlinks + get_filename_component(vpkg_program_real_path ${vcpkg_program} REALPATH) + get_filename_component(vpkg_root ${vpkg_program_real_path} DIRECTORY) + + if (NOT EXISTS "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") + message(STATUS "Qt Creator: vcpkg package manager auto-setup. " + "Skip this step by setting QT_CREATOR_SKIP_VCPKG_SETUP to ON.") + + file(WRITE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" " + set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\") + set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\") + ") + qtc_auto_setup_compiler_standard("${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") + + if (CMAKE_TOOLCHAIN_FILE AND NOT + CMAKE_TOOLCHAIN_FILE STREQUAL "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") + file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" + "include(\"${CMAKE_TOOLCHAIN_FILE}\")\n") + endif() + + if (VCPKG_TARGET_TRIPLET) + set(vcpkg_triplet ${VCPKG_TARGET_TRIPLET}) + else() + if (WIN32) + set(vcpkg_triplet x64-mingw-static) + if (CMAKE_CXX_COMPILER MATCHES ".*/(.*)/cl.exe") + set(vcpkg_triplet ${CMAKE_MATCH_1}-windows) + endif() + elseif(APPLE) + set(vcpkg_triplet x64-osx) + else() + set(vcpkg_triplet x64-linux) + endif() + endif() + + file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" " + set(VCPKG_TARGET_TRIPLET ${vcpkg_triplet}) + include(\"${vpkg_root}/scripts/buildsystems/vcpkg.cmake\") + ") + endif() + + set(CMAKE_TOOLCHAIN_FILE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" CACHE PATH "" FORCE) + + # Save CMAKE_PREFIX_PATH and CMAKE_MODULE_PATH as cache variables + if (CMAKE_VERSION GREATER_EQUAL "3.19") + cmake_language(DEFER CALL list REMOVE_DUPLICATES CMAKE_PREFIX_PATH) + cmake_language(DEFER CALL list REMOVE_DUPLICATES CMAKE_MODULE_PATH) + cmake_language(DEFER CALL set CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH}" CACHE STRING "" FORCE) + cmake_language(DEFER CALL set CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" CACHE STRING "" FORCE) + endif() + endif() +endmacro() +qtc_auto_setup_vcpkg() diff --git a/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/conan.cmake b/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/conan.cmake new file mode 100644 index 000000000..4f5f67e74 --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/conan.cmake @@ -0,0 +1,1026 @@ +# The MIT License (MIT) + +# Copyright (c) 2018 JFrog + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + + + +# This file comes from: https://github.com/conan-io/cmake-conan. Please refer +# to this repository for issues and documentation. + +# Its purpose is to wrap and launch Conan C/C++ Package Manager when cmake is called. +# It will take CMake current settings (os, compiler, compiler version, architecture) +# and translate them to conan settings for installing and retrieving dependencies. + +# It is intended to facilitate developers building projects that have conan dependencies, +# but it is only necessary on the end-user side. It is not necessary to create conan +# packages, in fact it shouldn't be use for that. Check the project documentation. + +# version: 0.18.1 + +include(CMakeParseArguments) + +function(_get_msvc_ide_version result) + set(${result} "" PARENT_SCOPE) + if(NOT MSVC_VERSION VERSION_LESS 1400 AND MSVC_VERSION VERSION_LESS 1500) + set(${result} 8 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1500 AND MSVC_VERSION VERSION_LESS 1600) + set(${result} 9 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1600 AND MSVC_VERSION VERSION_LESS 1700) + set(${result} 10 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1700 AND MSVC_VERSION VERSION_LESS 1800) + set(${result} 11 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1800 AND MSVC_VERSION VERSION_LESS 1900) + set(${result} 12 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1900 AND MSVC_VERSION VERSION_LESS 1910) + set(${result} 14 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1910 AND MSVC_VERSION VERSION_LESS 1920) + set(${result} 15 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1920 AND MSVC_VERSION VERSION_LESS 1930) + set(${result} 16 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1930 AND MSVC_VERSION VERSION_LESS 1940) + set(${result} 17 PARENT_SCOPE) + else() + message(FATAL_ERROR "Conan: Unknown MSVC compiler version [${MSVC_VERSION}]") + endif() +endfunction() + +macro(_conan_detect_build_type) + conan_parse_arguments(${ARGV}) + + if(ARGUMENTS_BUILD_TYPE) + set(_CONAN_SETTING_BUILD_TYPE ${ARGUMENTS_BUILD_TYPE}) + elseif(CMAKE_BUILD_TYPE) + set(_CONAN_SETTING_BUILD_TYPE ${CMAKE_BUILD_TYPE}) + else() + message(FATAL_ERROR "Please specify in command line CMAKE_BUILD_TYPE (-DCMAKE_BUILD_TYPE=Release)") + endif() + + string(TOUPPER ${_CONAN_SETTING_BUILD_TYPE} _CONAN_SETTING_BUILD_TYPE_UPPER) + if (_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "DEBUG") + set(_CONAN_SETTING_BUILD_TYPE "Debug") + elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "RELEASE") + set(_CONAN_SETTING_BUILD_TYPE "Release") + elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "RELWITHDEBINFO") + set(_CONAN_SETTING_BUILD_TYPE "RelWithDebInfo") + elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "MINSIZEREL") + set(_CONAN_SETTING_BUILD_TYPE "MinSizeRel") + endif() +endmacro() + +macro(_conan_check_system_name) + #handle -s os setting + if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") + #use default conan os setting if CMAKE_SYSTEM_NAME is not defined + set(CONAN_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}) + if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") + set(CONAN_SYSTEM_NAME Macos) + endif() + if(${CMAKE_SYSTEM_NAME} STREQUAL "QNX") + set(CONAN_SYSTEM_NAME Neutrino) + endif() + set(CONAN_SUPPORTED_PLATFORMS Windows Linux Macos Android iOS FreeBSD WindowsStore WindowsCE watchOS tvOS FreeBSD SunOS AIX Arduino Emscripten Neutrino) + list (FIND CONAN_SUPPORTED_PLATFORMS "${CONAN_SYSTEM_NAME}" _index) + if (${_index} GREATER -1) + #check if the cmake system is a conan supported one + set(_CONAN_SETTING_OS ${CONAN_SYSTEM_NAME}) + else() + message(FATAL_ERROR "cmake system ${CONAN_SYSTEM_NAME} is not supported by conan. Use one of ${CONAN_SUPPORTED_PLATFORMS}") + endif() + endif() +endmacro() + +macro(_conan_check_language) + get_property(_languages GLOBAL PROPERTY ENABLED_LANGUAGES) + if (";${_languages};" MATCHES ";CXX;") + set(LANGUAGE CXX) + set(USING_CXX 1) + elseif (";${_languages};" MATCHES ";C;") + set(LANGUAGE C) + set(USING_CXX 0) + else () + message(FATAL_ERROR "Conan: Neither C or C++ was detected as a language for the project. Unabled to detect compiler version.") + endif() +endmacro() + +macro(_conan_detect_compiler) + + conan_parse_arguments(${ARGV}) + + if(ARGUMENTS_ARCH) + set(_CONAN_SETTING_ARCH ${ARGUMENTS_ARCH}) + endif() + + if(USING_CXX) + set(_CONAN_SETTING_COMPILER_CPPSTD ${CMAKE_CXX_STANDARD}) + endif() + + if (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL GNU) + # using GCC + # TODO: Handle other params + string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + set(COMPILER_VERSION ${MAJOR}.${MINOR}) + if(${MAJOR} GREATER 4) + set(COMPILER_VERSION ${MAJOR}) + endif() + set(_CONAN_SETTING_COMPILER gcc) + set(_CONAN_SETTING_COMPILER_VERSION ${COMPILER_VERSION}) + if (USING_CXX) + conan_cmake_detect_unix_libcxx(_LIBCXX) + set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) + endif () + elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Intel) + string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + set(COMPILER_VERSION ${MAJOR}.${MINOR}) + set(_CONAN_SETTING_COMPILER intel) + set(_CONAN_SETTING_COMPILER_VERSION ${COMPILER_VERSION}) + if (USING_CXX) + conan_cmake_detect_unix_libcxx(_LIBCXX) + set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) + endif () + elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL AppleClang) + # using AppleClang + string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + set(_CONAN_SETTING_COMPILER apple-clang) + set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}.${MINOR}) + if (USING_CXX) + conan_cmake_detect_unix_libcxx(_LIBCXX) + set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) + endif () + elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Clang + AND NOT "${CMAKE_${LANGUAGE}_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC" + AND NOT "${CMAKE_${LANGUAGE}_SIMULATE_ID}" STREQUAL "MSVC") + + string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + set(_CONAN_SETTING_COMPILER clang) + set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}.${MINOR}) + if(APPLE) + cmake_policy(GET CMP0025 APPLE_CLANG_POLICY) + if(NOT APPLE_CLANG_POLICY STREQUAL NEW) + message(STATUS "Conan: APPLE and Clang detected. Assuming apple-clang compiler. Set CMP0025 to avoid it") + set(_CONAN_SETTING_COMPILER apple-clang) + endif() + endif() + if(${_CONAN_SETTING_COMPILER} STREQUAL clang AND ${MAJOR} GREATER 7) + set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}) + endif() + if (USING_CXX) + conan_cmake_detect_unix_libcxx(_LIBCXX) + set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) + endif () + elseif(${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL MSVC + OR (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Clang + AND "${CMAKE_${LANGUAGE}_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC" + AND "${CMAKE_${LANGUAGE}_SIMULATE_ID}" STREQUAL "MSVC")) + + set(_VISUAL "Visual Studio") + _get_msvc_ide_version(_VISUAL_VERSION) + if("${_VISUAL_VERSION}" STREQUAL "") + message(FATAL_ERROR "Conan: Visual Studio not recognized") + else() + set(_CONAN_SETTING_COMPILER ${_VISUAL}) + set(_CONAN_SETTING_COMPILER_VERSION ${_VISUAL_VERSION}) + endif() + + if(NOT _CONAN_SETTING_ARCH) + if (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "64") + set(_CONAN_SETTING_ARCH x86_64) + elseif (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "^ARM") + message(STATUS "Conan: Using default ARM architecture from MSVC") + set(_CONAN_SETTING_ARCH armv6) + elseif (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "86") + set(_CONAN_SETTING_ARCH x86) + else () + message(FATAL_ERROR "Conan: Unknown MSVC architecture [${MSVC_${LANGUAGE}_ARCHITECTURE_ID}]") + endif() + endif() + + conan_cmake_detect_vs_runtime(_vs_runtime ${ARGV}) + message(STATUS "Conan: Detected VS runtime: ${_vs_runtime}") + set(_CONAN_SETTING_COMPILER_RUNTIME ${_vs_runtime}) + + if (CMAKE_GENERATOR_TOOLSET) + set(_CONAN_SETTING_COMPILER_TOOLSET ${CMAKE_VS_PLATFORM_TOOLSET}) + elseif(CMAKE_VS_PLATFORM_TOOLSET AND (CMAKE_GENERATOR STREQUAL "Ninja")) + set(_CONAN_SETTING_COMPILER_TOOLSET ${CMAKE_VS_PLATFORM_TOOLSET}) + endif() + else() + message(FATAL_ERROR "Conan: compiler setup not recognized") + endif() + +endmacro() + +function(conan_cmake_settings result) + #message(STATUS "COMPILER " ${CMAKE_CXX_COMPILER}) + #message(STATUS "COMPILER " ${CMAKE_CXX_COMPILER_ID}) + #message(STATUS "VERSION " ${CMAKE_CXX_COMPILER_VERSION}) + #message(STATUS "FLAGS " ${CMAKE_LANG_FLAGS}) + #message(STATUS "LIB ARCH " ${CMAKE_CXX_LIBRARY_ARCHITECTURE}) + #message(STATUS "BUILD TYPE " ${CMAKE_BUILD_TYPE}) + #message(STATUS "GENERATOR " ${CMAKE_GENERATOR}) + #message(STATUS "GENERATOR WIN64 " ${CMAKE_CL_64}) + + message(STATUS "Conan: Automatic detection of conan settings from cmake") + + conan_parse_arguments(${ARGV}) + + _conan_detect_build_type(${ARGV}) + + _conan_check_system_name() + + _conan_check_language() + + _conan_detect_compiler(${ARGV}) + + # If profile is defined it is used + if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARGUMENTS_DEBUG_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_DEBUG_PROFILE}) + elseif(CMAKE_BUILD_TYPE STREQUAL "Release" AND ARGUMENTS_RELEASE_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_RELEASE_PROFILE}) + elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" AND ARGUMENTS_RELWITHDEBINFO_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_RELWITHDEBINFO_PROFILE}) + elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" AND ARGUMENTS_MINSIZEREL_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_MINSIZEREL_PROFILE}) + elseif(ARGUMENTS_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_PROFILE}) + endif() + + foreach(ARG ${_APPLIED_PROFILES}) + set(_SETTINGS ${_SETTINGS} -pr=${ARG}) + endforeach() + foreach(ARG ${ARGUMENTS_PROFILE_BUILD}) + conan_check(VERSION 1.24.0 REQUIRED DETECT_QUIET) + set(_SETTINGS ${_SETTINGS} -pr:b=${ARG}) + endforeach() + + if(NOT _SETTINGS OR ARGUMENTS_PROFILE_AUTO STREQUAL "ALL") + set(ARGUMENTS_PROFILE_AUTO arch build_type compiler compiler.version + compiler.runtime compiler.libcxx compiler.toolset) + endif() + + # remove any manually specified settings from the autodetected settings + foreach(ARG ${ARGUMENTS_SETTINGS}) + string(REGEX MATCH "[^=]*" MANUAL_SETTING "${ARG}") + message(STATUS "Conan: ${MANUAL_SETTING} was added as an argument. Not using the autodetected one.") + list(REMOVE_ITEM ARGUMENTS_PROFILE_AUTO "${MANUAL_SETTING}") + endforeach() + + # Automatic from CMake + foreach(ARG ${ARGUMENTS_PROFILE_AUTO}) + string(TOUPPER ${ARG} _arg_name) + string(REPLACE "." "_" _arg_name ${_arg_name}) + if(_CONAN_SETTING_${_arg_name}) + set(_SETTINGS ${_SETTINGS} -s ${ARG}=${_CONAN_SETTING_${_arg_name}}) + endif() + endforeach() + + foreach(ARG ${ARGUMENTS_SETTINGS}) + set(_SETTINGS ${_SETTINGS} -s ${ARG}) + endforeach() + + message(STATUS "Conan: Settings= ${_SETTINGS}") + + set(${result} ${_SETTINGS} PARENT_SCOPE) +endfunction() + + +function(conan_cmake_detect_unix_libcxx result) + # Take into account any -stdlib in compile options + get_directory_property(compile_options DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMPILE_OPTIONS) + string(GENEX_STRIP "${compile_options}" compile_options) + + # Take into account any _GLIBCXX_USE_CXX11_ABI in compile definitions + get_directory_property(defines DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMPILE_DEFINITIONS) + string(GENEX_STRIP "${defines}" defines) + + foreach(define ${defines}) + if(define MATCHES "_GLIBCXX_USE_CXX11_ABI") + if(define MATCHES "^-D") + set(compile_options ${compile_options} "${define}") + else() + set(compile_options ${compile_options} "-D${define}") + endif() + endif() + endforeach() + + # add additional compiler options ala cmRulePlaceholderExpander::ExpandRuleVariable + set(EXPAND_CXX_COMPILER ${CMAKE_CXX_COMPILER}) + if(CMAKE_CXX_COMPILER_ARG1) + # CMake splits CXX="foo bar baz" into CMAKE_CXX_COMPILER="foo", CMAKE_CXX_COMPILER_ARG1="bar baz" + # without this, ccache, winegcc, or other wrappers might lose all their arguments + separate_arguments(SPLIT_CXX_COMPILER_ARG1 NATIVE_COMMAND ${CMAKE_CXX_COMPILER_ARG1}) + list(APPEND EXPAND_CXX_COMPILER ${SPLIT_CXX_COMPILER_ARG1}) + endif() + + if(CMAKE_CXX_COMPILE_OPTIONS_TARGET AND CMAKE_CXX_COMPILER_TARGET) + # without --target= we may be calling the wrong underlying GCC + list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_TARGET}${CMAKE_CXX_COMPILER_TARGET}") + endif() + + if(CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN AND CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN) + list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN}") + endif() + + if(CMAKE_CXX_COMPILE_OPTIONS_SYSROOT) + # without --sysroot= we may find the wrong #include + if(CMAKE_SYSROOT_COMPILE) + list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT_COMPILE}") + elseif(CMAKE_SYSROOT) + list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT}") + endif() + endif() + + separate_arguments(SPLIT_CXX_FLAGS NATIVE_COMMAND ${CMAKE_CXX_FLAGS}) + + if(CMAKE_OSX_SYSROOT) + set(xcode_sysroot_option "--sysroot=${CMAKE_OSX_SYSROOT}") + endif() + + execute_process( + COMMAND ${CMAKE_COMMAND} -E echo "#include " + COMMAND ${EXPAND_CXX_COMPILER} ${SPLIT_CXX_FLAGS} -x c++ ${xcode_sysroot_option} ${compile_options} -E -dM - + OUTPUT_VARIABLE string_defines + ) + + if(string_defines MATCHES "#define __GLIBCXX__") + # Allow -D_GLIBCXX_USE_CXX11_ABI=ON/OFF as argument to cmake + if(DEFINED _GLIBCXX_USE_CXX11_ABI) + if(_GLIBCXX_USE_CXX11_ABI) + set(${result} libstdc++11 PARENT_SCOPE) + return() + else() + set(${result} libstdc++ PARENT_SCOPE) + return() + endif() + endif() + + if(string_defines MATCHES "#define _GLIBCXX_USE_CXX11_ABI 1\n") + set(${result} libstdc++11 PARENT_SCOPE) + else() + # Either the compiler is missing the define because it is old, and so + # it can't use the new abi, or the compiler was configured to use the + # old abi by the user or distro (e.g. devtoolset on RHEL/CentOS) + set(${result} libstdc++ PARENT_SCOPE) + endif() + else() + set(${result} libc++ PARENT_SCOPE) + endif() +endfunction() + +function(conan_cmake_detect_vs_runtime result) + + conan_parse_arguments(${ARGV}) + if(ARGUMENTS_BUILD_TYPE) + set(build_type "${ARGUMENTS_BUILD_TYPE}") + elseif(CMAKE_BUILD_TYPE) + set(build_type "${CMAKE_BUILD_TYPE}") + else() + message(FATAL_ERROR "Please specify in command line CMAKE_BUILD_TYPE (-DCMAKE_BUILD_TYPE=Release)") + endif() + + if(build_type) + string(TOUPPER "${build_type}" build_type) + endif() + set(variables CMAKE_CXX_FLAGS_${build_type} CMAKE_C_FLAGS_${build_type} CMAKE_CXX_FLAGS CMAKE_C_FLAGS) + foreach(variable ${variables}) + if(NOT "${${variable}}" STREQUAL "") + string(REPLACE " " ";" flags "${${variable}}") + foreach (flag ${flags}) + if("${flag}" STREQUAL "/MD" OR "${flag}" STREQUAL "/MDd" OR "${flag}" STREQUAL "/MT" OR "${flag}" STREQUAL "/MTd") + string(SUBSTRING "${flag}" 1 -1 runtime) + set(${result} "${runtime}" PARENT_SCOPE) + return() + endif() + endforeach() + endif() + endforeach() + if("${build_type}" STREQUAL "DEBUG") + set(${result} "MDd" PARENT_SCOPE) + else() + set(${result} "MD" PARENT_SCOPE) + endif() +endfunction() + +function(_collect_settings result) + set(ARGUMENTS_PROFILE_AUTO arch build_type compiler compiler.version + compiler.runtime compiler.libcxx compiler.toolset + compiler.cppstd) + foreach(ARG ${ARGUMENTS_PROFILE_AUTO}) + string(TOUPPER ${ARG} _arg_name) + string(REPLACE "." "_" _arg_name ${_arg_name}) + if(_CONAN_SETTING_${_arg_name}) + set(detected_setings ${detected_setings} ${ARG}=${_CONAN_SETTING_${_arg_name}}) + endif() + endforeach() + set(${result} ${detected_setings} PARENT_SCOPE) +endfunction() + +function(conan_cmake_autodetect detected_settings) + _conan_detect_build_type(${ARGV}) + _conan_check_system_name() + _conan_check_language() + _conan_detect_compiler(${ARGV}) + _collect_settings(collected_settings) + set(${detected_settings} ${collected_settings} PARENT_SCOPE) +endfunction() + +macro(conan_parse_arguments) + set(options BASIC_SETUP CMAKE_TARGETS UPDATE KEEP_RPATHS NO_LOAD NO_OUTPUT_DIRS OUTPUT_QUIET NO_IMPORTS SKIP_STD) + set(oneValueArgs CONANFILE ARCH BUILD_TYPE INSTALL_FOLDER OUTPUT_FOLDER CONAN_COMMAND) + set(multiValueArgs DEBUG_PROFILE RELEASE_PROFILE RELWITHDEBINFO_PROFILE MINSIZEREL_PROFILE + PROFILE REQUIRES OPTIONS IMPORTS SETTINGS BUILD ENV GENERATORS PROFILE_AUTO + INSTALL_ARGS CONFIGURATION_TYPES PROFILE_BUILD BUILD_REQUIRES) + cmake_parse_arguments(ARGUMENTS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) +endmacro() + +function(old_conan_cmake_install) + # Calls "conan install" + # Argument BUILD is equivalant to --build={missing, PkgName,...} or + # --build when argument is 'BUILD all' (which builds all packages from source) + # Argument CONAN_COMMAND, to specify the conan path, e.g. in case of running from source + # cmake does not identify conan as command, even if it is +x and it is in the path + conan_parse_arguments(${ARGV}) + + if(CONAN_CMAKE_MULTI) + set(ARGUMENTS_GENERATORS ${ARGUMENTS_GENERATORS} cmake_multi) + else() + set(ARGUMENTS_GENERATORS ${ARGUMENTS_GENERATORS} cmake) + endif() + + set(CONAN_BUILD_POLICY "") + foreach(ARG ${ARGUMENTS_BUILD}) + if(${ARG} STREQUAL "all") + set(CONAN_BUILD_POLICY ${CONAN_BUILD_POLICY} --build) + break() + else() + set(CONAN_BUILD_POLICY ${CONAN_BUILD_POLICY} --build=${ARG}) + endif() + endforeach() + if(ARGUMENTS_CONAN_COMMAND) + set(CONAN_CMD ${ARGUMENTS_CONAN_COMMAND}) + else() + conan_check(REQUIRED) + endif() + set(CONAN_OPTIONS "") + if(ARGUMENTS_CONANFILE) + if(IS_ABSOLUTE ${ARGUMENTS_CONANFILE}) + set(CONANFILE ${ARGUMENTS_CONANFILE}) + else() + set(CONANFILE ${CMAKE_CURRENT_SOURCE_DIR}/${ARGUMENTS_CONANFILE}) + endif() + else() + set(CONANFILE ".") + endif() + foreach(ARG ${ARGUMENTS_OPTIONS}) + set(CONAN_OPTIONS ${CONAN_OPTIONS} -o=${ARG}) + endforeach() + if(ARGUMENTS_UPDATE) + set(CONAN_INSTALL_UPDATE --update) + endif() + if(ARGUMENTS_NO_IMPORTS) + set(CONAN_INSTALL_NO_IMPORTS --no-imports) + endif() + set(CONAN_INSTALL_FOLDER "") + if(ARGUMENTS_INSTALL_FOLDER) + set(CONAN_INSTALL_FOLDER -if=${ARGUMENTS_INSTALL_FOLDER}) + endif() + set(CONAN_OUTPUT_FOLDER "") + if(ARGUMENTS_OUTPUT_FOLDER) + set(CONAN_OUTPUT_FOLDER -of=${ARGUMENTS_OUTPUT_FOLDER}) + endif() + foreach(ARG ${ARGUMENTS_GENERATORS}) + set(CONAN_GENERATORS ${CONAN_GENERATORS} -g=${ARG}) + endforeach() + foreach(ARG ${ARGUMENTS_ENV}) + set(CONAN_ENV_VARS ${CONAN_ENV_VARS} -e=${ARG}) + endforeach() + set(conan_args install ${CONANFILE} ${settings} ${CONAN_ENV_VARS} ${CONAN_GENERATORS} ${CONAN_BUILD_POLICY} ${CONAN_INSTALL_UPDATE} ${CONAN_INSTALL_NO_IMPORTS} ${CONAN_OPTIONS} ${CONAN_INSTALL_FOLDER} ${ARGUMENTS_INSTALL_ARGS}) + + string (REPLACE ";" " " _conan_args "${conan_args}") + message(STATUS "Conan executing: ${CONAN_CMD} ${_conan_args}") + + if(ARGUMENTS_OUTPUT_QUIET) + execute_process(COMMAND ${CONAN_CMD} ${conan_args} + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_output + ERROR_VARIABLE conan_output + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + else() + execute_process(COMMAND ${CONAN_CMD} ${conan_args} + RESULT_VARIABLE return_code + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + endif() + + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan install failed='${return_code}'") + endif() + +endfunction() + +function(conan_cmake_install) + if(DEFINED CONAN_COMMAND) + set(CONAN_CMD ${CONAN_COMMAND}) + else() + conan_check(REQUIRED) + endif() + + set(installOptions UPDATE NO_IMPORTS OUTPUT_QUIET ERROR_QUIET) + set(installOneValueArgs PATH_OR_REFERENCE REFERENCE REMOTE LOCKFILE LOCKFILE_OUT LOCKFILE_NODE_ID INSTALL_FOLDER OUTPUT_FOLDER) + set(installMultiValueArgs GENERATOR BUILD ENV ENV_HOST ENV_BUILD OPTIONS_HOST OPTIONS OPTIONS_BUILD PROFILE + PROFILE_HOST PROFILE_BUILD SETTINGS SETTINGS_HOST SETTINGS_BUILD) + cmake_parse_arguments(ARGS "${installOptions}" "${installOneValueArgs}" "${installMultiValueArgs}" ${ARGN}) + foreach(arg ${installOptions}) + if(ARGS_${arg}) + set(${arg} ${${arg}} ${ARGS_${arg}}) + endif() + endforeach() + foreach(arg ${installOneValueArgs}) + if(DEFINED ARGS_${arg}) + if("${arg}" STREQUAL "REMOTE") + set(flag "--remote") + elseif("${arg}" STREQUAL "LOCKFILE") + set(flag "--lockfile") + elseif("${arg}" STREQUAL "LOCKFILE_OUT") + set(flag "--lockfile-out") + elseif("${arg}" STREQUAL "LOCKFILE_NODE_ID") + set(flag "--lockfile-node-id") + elseif("${arg}" STREQUAL "INSTALL_FOLDER") + set(flag "--install-folder") + elseif("${arg}" STREQUAL "OUTPUT_FOLDER") + set(flag "--output-folder") + endif() + set(${arg} ${${arg}} ${flag} ${ARGS_${arg}}) + endif() + endforeach() + foreach(arg ${installMultiValueArgs}) + if(DEFINED ARGS_${arg}) + if("${arg}" STREQUAL "GENERATOR") + set(flag "--generator") + elseif("${arg}" STREQUAL "BUILD") + set(flag "--build") + elseif("${arg}" STREQUAL "ENV") + set(flag "--env") + elseif("${arg}" STREQUAL "ENV_HOST") + set(flag "--env:host") + elseif("${arg}" STREQUAL "ENV_BUILD") + set(flag "--env:build") + elseif("${arg}" STREQUAL "OPTIONS") + set(flag "--options") + elseif("${arg}" STREQUAL "OPTIONS_HOST") + set(flag "--options:host") + elseif("${arg}" STREQUAL "OPTIONS_BUILD") + set(flag "--options:build") + elseif("${arg}" STREQUAL "PROFILE") + set(flag "--profile") + elseif("${arg}" STREQUAL "PROFILE_HOST") + set(flag "--profile:host") + elseif("${arg}" STREQUAL "PROFILE_BUILD") + set(flag "--profile:build") + elseif("${arg}" STREQUAL "SETTINGS") + set(flag "--settings") + elseif("${arg}" STREQUAL "SETTINGS_HOST") + set(flag "--settings:host") + elseif("${arg}" STREQUAL "SETTINGS_BUILD") + set(flag "--settings:build") + endif() + list(LENGTH ARGS_${arg} numargs) + foreach(item ${ARGS_${arg}}) + if(${item} STREQUAL "all" AND ${arg} STREQUAL "BUILD") + set(${arg} "--build") + break() + endif() + set(${arg} ${${arg}} ${flag} ${item}) + endforeach() + endif() + endforeach() + if(DEFINED UPDATE) + set(UPDATE --update) + endif() + if(DEFINED NO_IMPORTS) + set(NO_IMPORTS --no-imports) + endif() + set(install_args install ${PATH_OR_REFERENCE} ${REFERENCE} ${UPDATE} ${NO_IMPORTS} ${REMOTE} ${LOCKFILE} ${LOCKFILE_OUT} ${LOCKFILE_NODE_ID} ${INSTALL_FOLDER} ${OUTPUT_FOLDER} + ${GENERATOR} ${BUILD} ${ENV} ${ENV_HOST} ${ENV_BUILD} ${OPTIONS} ${OPTIONS_HOST} ${OPTIONS_BUILD} + ${PROFILE} ${PROFILE_HOST} ${PROFILE_BUILD} ${SETTINGS} ${SETTINGS_HOST} ${SETTINGS_BUILD}) + + string(REPLACE ";" " " _install_args "${install_args}") + message(STATUS "Conan executing: ${CONAN_CMD} ${_install_args}") + + if(ARGS_OUTPUT_QUIET) + set(OUTPUT_OPT OUTPUT_QUIET) + endif() + if(ARGS_ERROR_QUIET) + set(ERROR_OPT ERROR_QUIET) + endif() + + execute_process(COMMAND ${CONAN_CMD} ${install_args} + RESULT_VARIABLE return_code + ${OUTPUT_OPT} + ${ERROR_OPT} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + + if(NOT "${return_code}" STREQUAL "0") + if (ARGS_ERROR_QUIET) + message(WARNING "Conan install failed='${return_code}'") + else() + message(FATAL_ERROR "Conan install failed='${return_code}'") + endif() + endif() + +endfunction() + +function(conan_cmake_lock_create) + if(DEFINED CONAN_COMMAND) + set(CONAN_CMD ${CONAN_COMMAND}) + else() + conan_check(REQUIRED) + endif() + + set(lockCreateOptions UPDATE BASE OUTPUT_QUIET ERROR_QUIET) + set(lockCreateOneValueArgs PATH REFERENCE REMOTE LOCKFILE LOCKFILE_OUT) + set(lockCreateMultiValueArgs BUILD ENV ENV_HOST ENV_BUILD OPTIONS_HOST OPTIONS OPTIONS_BUILD PROFILE + PROFILE_HOST PROFILE_BUILD SETTINGS SETTINGS_HOST SETTINGS_BUILD) + cmake_parse_arguments(ARGS "${lockCreateOptions}" "${lockCreateOneValueArgs}" "${lockCreateMultiValueArgs}" ${ARGN}) + foreach(arg ${lockCreateOptions}) + if(ARGS_${arg}) + set(${arg} ${${arg}} ${ARGS_${arg}}) + endif() + endforeach() + foreach(arg ${lockCreateOneValueArgs}) + if(DEFINED ARGS_${arg}) + if("${arg}" STREQUAL "REMOTE") + set(flag "--remote") + elseif("${arg}" STREQUAL "LOCKFILE") + set(flag "--lockfile") + elseif("${arg}" STREQUAL "LOCKFILE_OUT") + set(flag "--lockfile-out") + endif() + set(${arg} ${${arg}} ${flag} ${ARGS_${arg}}) + endif() + endforeach() + foreach(arg ${lockCreateMultiValueArgs}) + if(DEFINED ARGS_${arg}) + if("${arg}" STREQUAL "BUILD") + set(flag "--build") + elseif("${arg}" STREQUAL "ENV") + set(flag "--env") + elseif("${arg}" STREQUAL "ENV_HOST") + set(flag "--env:host") + elseif("${arg}" STREQUAL "ENV_BUILD") + set(flag "--env:build") + elseif("${arg}" STREQUAL "OPTIONS") + set(flag "--options") + elseif("${arg}" STREQUAL "OPTIONS_HOST") + set(flag "--options:host") + elseif("${arg}" STREQUAL "OPTIONS_BUILD") + set(flag "--options:build") + elseif("${arg}" STREQUAL "PROFILE") + set(flag "--profile") + elseif("${arg}" STREQUAL "PROFILE_HOST") + set(flag "--profile:host") + elseif("${arg}" STREQUAL "PROFILE_BUILD") + set(flag "--profile:build") + elseif("${arg}" STREQUAL "SETTINGS") + set(flag "--settings") + elseif("${arg}" STREQUAL "SETTINGS_HOST") + set(flag "--settings:host") + elseif("${arg}" STREQUAL "SETTINGS_BUILD") + set(flag "--settings:build") + endif() + list(LENGTH ARGS_${arg} numargs) + foreach(item ${ARGS_${arg}}) + if(${item} STREQUAL "all" AND ${arg} STREQUAL "BUILD") + set(${arg} "--build") + break() + endif() + set(${arg} ${${arg}} ${flag} ${item}) + endforeach() + endif() + endforeach() + if(DEFINED UPDATE) + set(UPDATE --update) + endif() + if(DEFINED BASE) + set(BASE --base) + endif() + set(lock_create_Args lock create ${PATH} ${REFERENCE} ${UPDATE} ${BASE} ${REMOTE} ${LOCKFILE} ${LOCKFILE_OUT} ${LOCKFILE_NODE_ID} ${INSTALL_FOLDER} + ${GENERATOR} ${BUILD} ${ENV} ${ENV_HOST} ${ENV_BUILD} ${OPTIONS} ${OPTIONS_HOST} ${OPTIONS_BUILD} + ${PROFILE} ${PROFILE_HOST} ${PROFILE_BUILD} ${SETTINGS} ${SETTINGS_HOST} ${SETTINGS_BUILD}) + + string(REPLACE ";" " " _lock_create_Args "${lock_create_Args}") + message(STATUS "Conan executing: ${CONAN_CMD} ${_lock_create_Args}") + + if(ARGS_OUTPUT_QUIET) + set(OUTPUT_OPT OUTPUT_QUIET) + endif() + if(ARGS_ERROR_QUIET) + set(ERROR_OPT ERROR_QUIET) + endif() + + execute_process(COMMAND ${CONAN_CMD} ${lock_create_Args} + RESULT_VARIABLE return_code + ${OUTPUT_OPT} + ${ERROR_OPT} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + + if(NOT "${return_code}" STREQUAL "0") + if (ARGS_ERROR_QUIET) + message(WARNING "Conan lock create failed='${return_code}'") + else() + message(FATAL_ERROR "Conan lock create failed='${return_code}'") + endif() + endif() +endfunction() + +function(conan_cmake_setup_conanfile) + conan_parse_arguments(${ARGV}) + if(ARGUMENTS_CONANFILE) + get_filename_component(_CONANFILE_NAME ${ARGUMENTS_CONANFILE} NAME) + # configure_file will make sure cmake re-runs when conanfile is updated + configure_file(${ARGUMENTS_CONANFILE} ${CMAKE_CURRENT_BINARY_DIR}/${_CONANFILE_NAME}.junk COPYONLY) + file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/${_CONANFILE_NAME}.junk) + else() + conan_cmake_generate_conanfile(ON ${ARGV}) + endif() +endfunction() + +function(conan_cmake_configure) + conan_cmake_generate_conanfile(OFF ${ARGV}) +endfunction() + +# Generate, writing in disk a conanfile.txt with the requires, options, and imports +# specified as arguments +# This will be considered as temporary file, generated in CMAKE_CURRENT_BINARY_DIR) +function(conan_cmake_generate_conanfile DEFAULT_GENERATOR) + + conan_parse_arguments(${ARGV}) + + set(_FN "${CMAKE_CURRENT_BINARY_DIR}/conanfile.txt") + file(WRITE ${_FN} "") + + if(DEFINED ARGUMENTS_REQUIRES) + file(APPEND ${_FN} "[requires]\n") + foreach(REQUIRE ${ARGUMENTS_REQUIRES}) + file(APPEND ${_FN} ${REQUIRE} "\n") + endforeach() + endif() + + if (DEFAULT_GENERATOR OR DEFINED ARGUMENTS_GENERATORS) + file(APPEND ${_FN} "[generators]\n") + if (DEFAULT_GENERATOR) + file(APPEND ${_FN} "cmake\n") + endif() + if (DEFINED ARGUMENTS_GENERATORS) + foreach(GENERATOR ${ARGUMENTS_GENERATORS}) + file(APPEND ${_FN} ${GENERATOR} "\n") + endforeach() + endif() + endif() + + if(DEFINED ARGUMENTS_BUILD_REQUIRES) + file(APPEND ${_FN} "[build_requires]\n") + foreach(BUILD_REQUIRE ${ARGUMENTS_BUILD_REQUIRES}) + file(APPEND ${_FN} ${BUILD_REQUIRE} "\n") + endforeach() + endif() + + if(DEFINED ARGUMENTS_IMPORTS) + file(APPEND ${_FN} "[imports]\n") + foreach(IMPORTS ${ARGUMENTS_IMPORTS}) + file(APPEND ${_FN} ${IMPORTS} "\n") + endforeach() + endif() + + if(DEFINED ARGUMENTS_OPTIONS) + file(APPEND ${_FN} "[options]\n") + foreach(OPTION ${ARGUMENTS_OPTIONS}) + file(APPEND ${_FN} ${OPTION} "\n") + endforeach() + endif() + +endfunction() + + +macro(conan_load_buildinfo) + if(CONAN_CMAKE_MULTI) + set(_CONANBUILDINFO conanbuildinfo_multi.cmake) + else() + set(_CONANBUILDINFO conanbuildinfo.cmake) + endif() + if(ARGUMENTS_INSTALL_FOLDER) + set(_CONANBUILDINFOFOLDER ${ARGUMENTS_INSTALL_FOLDER}) + else() + set(_CONANBUILDINFOFOLDER ${CMAKE_CURRENT_BINARY_DIR}) + endif() + # Checks for the existence of conanbuildinfo.cmake, and loads it + # important that it is macro, so variables defined at parent scope + if(EXISTS "${_CONANBUILDINFOFOLDER}/${_CONANBUILDINFO}") + message(STATUS "Conan: Loading ${_CONANBUILDINFO}") + include(${_CONANBUILDINFOFOLDER}/${_CONANBUILDINFO}) + else() + message(FATAL_ERROR "${_CONANBUILDINFO} doesn't exist in ${CMAKE_CURRENT_BINARY_DIR}") + endif() +endmacro() + + +macro(conan_cmake_run) + conan_parse_arguments(${ARGV}) + + if(ARGUMENTS_CONFIGURATION_TYPES AND NOT CMAKE_CONFIGURATION_TYPES) + message(WARNING "CONFIGURATION_TYPES should only be specified for multi-configuration generators") + elseif(ARGUMENTS_CONFIGURATION_TYPES AND ARGUMENTS_BUILD_TYPE) + message(WARNING "CONFIGURATION_TYPES and BUILD_TYPE arguments should not be defined at the same time.") + endif() + + if(CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE AND NOT CONAN_EXPORTED + AND NOT ARGUMENTS_BUILD_TYPE) + set(CONAN_CMAKE_MULTI ON) + if (NOT ARGUMENTS_CONFIGURATION_TYPES) + set(ARGUMENTS_CONFIGURATION_TYPES "Release;Debug") + endif() + message(STATUS "Conan: Using cmake-multi generator") + else() + set(CONAN_CMAKE_MULTI OFF) + endif() + + if(NOT CONAN_EXPORTED) + conan_cmake_setup_conanfile(${ARGV}) + if(CONAN_CMAKE_MULTI) + foreach(CMAKE_BUILD_TYPE ${ARGUMENTS_CONFIGURATION_TYPES}) + set(ENV{CONAN_IMPORT_PATH} ${CMAKE_BUILD_TYPE}) + conan_cmake_settings(settings ${ARGV}) + old_conan_cmake_install(SETTINGS ${settings} ${ARGV}) + endforeach() + set(CMAKE_BUILD_TYPE) + else() + conan_cmake_settings(settings ${ARGV}) + old_conan_cmake_install(SETTINGS ${settings} ${ARGV}) + endif() + endif() + + if (NOT ARGUMENTS_NO_LOAD) + conan_load_buildinfo() + endif() + + if(ARGUMENTS_BASIC_SETUP) + foreach(_option CMAKE_TARGETS KEEP_RPATHS NO_OUTPUT_DIRS SKIP_STD) + if(ARGUMENTS_${_option}) + if(${_option} STREQUAL "CMAKE_TARGETS") + list(APPEND _setup_options "TARGETS") + else() + list(APPEND _setup_options ${_option}) + endif() + endif() + endforeach() + conan_basic_setup(${_setup_options}) + endif() +endmacro() + +macro(conan_check) + # Checks conan availability in PATH + # Arguments REQUIRED, DETECT_QUIET and VERSION are optional + # Example usage: + # conan_check(VERSION 1.0.0 REQUIRED) + set(options REQUIRED DETECT_QUIET) + set(oneValueArgs VERSION) + cmake_parse_arguments(CONAN "${options}" "${oneValueArgs}" "" ${ARGN}) + if(NOT CONAN_DETECT_QUIET) + message(STATUS "Conan: checking conan executable") + endif() + + find_program(CONAN_CMD conan) + if(NOT CONAN_CMD AND CONAN_REQUIRED) + message(FATAL_ERROR "Conan executable not found! Please install conan.") + endif() + if(NOT CONAN_DETECT_QUIET) + message(STATUS "Conan: Found program ${CONAN_CMD}") + endif() + execute_process(COMMAND ${CONAN_CMD} --version + RESULT_VARIABLE return_code + OUTPUT_VARIABLE CONAN_VERSION_OUTPUT + ERROR_VARIABLE CONAN_VERSION_OUTPUT) + + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan --version failed='${return_code}'") + endif() + + if(NOT CONAN_DETECT_QUIET) + string(STRIP "${CONAN_VERSION_OUTPUT}" _CONAN_VERSION_OUTPUT) + message(STATUS "Conan: Version found ${_CONAN_VERSION_OUTPUT}") + endif() + + if(DEFINED CONAN_VERSION) + string(REGEX MATCH ".*Conan version ([0-9]+\\.[0-9]+\\.[0-9]+)" FOO + "${CONAN_VERSION_OUTPUT}") + if(${CMAKE_MATCH_1} VERSION_LESS ${CONAN_VERSION}) + message(FATAL_ERROR "Conan outdated. Installed: ${CMAKE_MATCH_1}, \ + required: ${CONAN_VERSION}. Consider updating via 'pip \ + install conan==${CONAN_VERSION}'.") + endif() + endif() +endmacro() + +function(conan_add_remote) + # Adds a remote + # Arguments URL and NAME are required, INDEX, COMMAND and VERIFY_SSL are optional + # Example usage: + # conan_add_remote(NAME bincrafters INDEX 1 + # URL https://api.bintray.com/conan/bincrafters/public-conan + # VERIFY_SSL True) + set(oneValueArgs URL NAME INDEX COMMAND VERIFY_SSL) + cmake_parse_arguments(CONAN "" "${oneValueArgs}" "" ${ARGN}) + + if(DEFINED CONAN_INDEX) + set(CONAN_INDEX_ARG "-i ${CONAN_INDEX}") + endif() + if(DEFINED CONAN_COMMAND) + set(CONAN_CMD ${CONAN_COMMAND}) + else() + conan_check(REQUIRED DETECT_QUIET) + endif() + set(CONAN_VERIFY_SSL_ARG "True") + if(DEFINED CONAN_VERIFY_SSL) + set(CONAN_VERIFY_SSL_ARG ${CONAN_VERIFY_SSL}) + endif() + message(STATUS "Conan: Adding ${CONAN_NAME} remote repository (${CONAN_URL}) verify ssl (${CONAN_VERIFY_SSL_ARG})") + execute_process(COMMAND ${CONAN_CMD} remote add ${CONAN_NAME} ${CONAN_INDEX_ARG} -f ${CONAN_URL} ${CONAN_VERIFY_SSL_ARG} + RESULT_VARIABLE return_code) + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan remote failed='${return_code}'") + endif() +endfunction() + +macro(conan_config_install) + # install a full configuration from a local or remote zip file + # Argument ITEM is required, arguments TYPE, SOURCE, TARGET and VERIFY_SSL are optional + # Example usage: + # conan_config_install(ITEM https://github.com/conan-io/cmake-conan.git + # TYPE git SOURCE source-folder TARGET target-folder VERIFY_SSL false) + set(oneValueArgs ITEM TYPE SOURCE TARGET VERIFY_SSL) + set(multiValueArgs ARGS) + cmake_parse_arguments(CONAN "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(DEFINED CONAN_COMMAND) + set(CONAN_CMD ${CONAN_COMMAND}) + else() + conan_check(REQUIRED) + endif() + + if(DEFINED CONAN_VERIFY_SSL) + set(CONAN_VERIFY_SSL_ARG "--verify-ssl=${CONAN_VERIFY_SSL}") + endif() + + if(DEFINED CONAN_TYPE) + set(CONAN_TYPE_ARG "--type=${CONAN_TYPE}") + endif() + + if(DEFINED CONAN_ARGS) + set(CONAN_ARGS_ARGS "--args=\"${CONAN_ARGS}\"") + endif() + + if(DEFINED CONAN_SOURCE) + set(CONAN_SOURCE_ARGS "--source-folder=${CONAN_SOURCE}") + endif() + + if(DEFINED CONAN_TARGET) + set(CONAN_TARGET_ARGS "--target-folder=${CONAN_TARGET}") + endif() + + set (CONAN_CONFIG_INSTALL_ARGS ${CONAN_VERIFY_SSL_ARG} + ${CONAN_TYPE_ARG} + ${CONAN_ARGS_ARGS} + ${CONAN_SOURCE_ARGS} + ${CONAN_TARGET_ARGS}) + + message(STATUS "Conan: Installing config from ${CONAN_ITEM}") + execute_process(COMMAND ${CONAN_CMD} config install ${CONAN_ITEM} ${CONAN_CONFIG_INSTALL_ARGS} + RESULT_VARIABLE return_code) + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan config failed='${return_code}'") + endif() +endmacro() diff --git a/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/conan_provider.cmake b/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/conan_provider.cmake new file mode 100644 index 000000000..e5fa9cec1 --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/conan_provider.cmake @@ -0,0 +1,655 @@ +# https://github.com/conan-io/cmake-conan/blob/develop2/conan_provider.cmake +# commit: f6464d1e13ef7a47c569f5061f9607ea63339d39 +# +# The MIT License (MIT) +# +# Copyright (c) 2019 JFrog +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +set(CONAN_MINIMUM_VERSION 2.0.5) + + +function(detect_os OS OS_API_LEVEL OS_SDK OS_SUBSYSTEM OS_VERSION) + # it could be cross compilation + message(STATUS "CMake-Conan: cmake_system_name=${CMAKE_SYSTEM_NAME}") + if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") + if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(${OS} Macos PARENT_SCOPE) + elseif(CMAKE_SYSTEM_NAME STREQUAL "QNX") + set(${OS} Neutrino PARENT_SCOPE) + elseif(CMAKE_SYSTEM_NAME STREQUAL "CYGWIN") + set(${OS} Windows PARENT_SCOPE) + set(${OS_SUBSYSTEM} cygwin PARENT_SCOPE) + elseif(CMAKE_SYSTEM_NAME MATCHES "^MSYS") + set(${OS} Windows PARENT_SCOPE) + set(${OS_SUBSYSTEM} msys2 PARENT_SCOPE) + else() + set(${OS} ${CMAKE_SYSTEM_NAME} PARENT_SCOPE) + endif() + if(CMAKE_SYSTEM_NAME STREQUAL "Android") + if(DEFINED ANDROID_PLATFORM) + string(REGEX MATCH "[0-9]+" _OS_API_LEVEL ${ANDROID_PLATFORM}) + elseif(DEFINED CMAKE_SYSTEM_VERSION) + set(_OS_API_LEVEL ${CMAKE_SYSTEM_VERSION}) + endif() + message(STATUS "CMake-Conan: android api level=${_OS_API_LEVEL}") + set(${OS_API_LEVEL} ${_OS_API_LEVEL} PARENT_SCOPE) + endif() + if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS") + # CMAKE_OSX_SYSROOT contains the full path to the SDK for MakeFile/Ninja + # generators, but just has the original input string for Xcode. + if(NOT IS_DIRECTORY ${CMAKE_OSX_SYSROOT}) + set(_OS_SDK ${CMAKE_OSX_SYSROOT}) + else() + if(CMAKE_OSX_SYSROOT MATCHES Simulator) + set(apple_platform_suffix simulator) + else() + set(apple_platform_suffix os) + endif() + if(CMAKE_OSX_SYSROOT MATCHES AppleTV) + set(_OS_SDK "appletv${apple_platform_suffix}") + elseif(CMAKE_OSX_SYSROOT MATCHES iPhone) + set(_OS_SDK "iphone${apple_platform_suffix}") + elseif(CMAKE_OSX_SYSROOT MATCHES Watch) + set(_OS_SDK "watch${apple_platform_suffix}") + endif() + endif() + if(DEFINED _OS_SDK) + message(STATUS "CMake-Conan: cmake_osx_sysroot=${CMAKE_OSX_SYSROOT}") + set(${OS_SDK} ${_OS_SDK} PARENT_SCOPE) + endif() + if(DEFINED CMAKE_OSX_DEPLOYMENT_TARGET) + message(STATUS "CMake-Conan: cmake_osx_deployment_target=${CMAKE_OSX_DEPLOYMENT_TARGET}") + set(${OS_VERSION} ${CMAKE_OSX_DEPLOYMENT_TARGET} PARENT_SCOPE) + endif() + endif() + endif() +endfunction() + + +function(detect_arch ARCH) + # CMAKE_OSX_ARCHITECTURES can contain multiple architectures, but Conan only supports one. + # Therefore this code only finds one. If the recipes support multiple architectures, the + # build will work. Otherwise, there will be a linker error for the missing architecture(s). + if(DEFINED CMAKE_OSX_ARCHITECTURES) + string(REPLACE " " ";" apple_arch_list "${CMAKE_OSX_ARCHITECTURES}") + list(LENGTH apple_arch_list apple_arch_count) + if(apple_arch_count GREATER 1) + message(WARNING "CMake-Conan: Multiple architectures detected, this will only work if Conan recipe(s) produce fat binaries.") + endif() + endif() + if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS" AND NOT CMAKE_OSX_ARCHITECTURES STREQUAL "") + set(host_arch ${CMAKE_OSX_ARCHITECTURES}) + elseif(MSVC) + set(host_arch ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}) + else() + set(host_arch ${CMAKE_SYSTEM_PROCESSOR}) + endif() + if(host_arch MATCHES "aarch64|arm64|ARM64") + set(_ARCH armv8) + elseif(host_arch MATCHES "armv7|armv7-a|armv7l|ARMV7") + set(_ARCH armv7) + elseif(host_arch MATCHES armv7s) + set(_ARCH armv7s) + elseif(host_arch MATCHES "i686|i386|X86") + set(_ARCH x86) + elseif(host_arch MATCHES "AMD64|amd64|x86_64|x64") + set(_ARCH x86_64) + endif() + message(STATUS "CMake-Conan: cmake_system_processor=${_ARCH}") + set(${ARCH} ${_ARCH} PARENT_SCOPE) +endfunction() + + +function(detect_cxx_standard CXX_STANDARD) + set(${CXX_STANDARD} ${CMAKE_CXX_STANDARD} PARENT_SCOPE) + if(CMAKE_CXX_EXTENSIONS) + set(${CXX_STANDARD} "gnu${CMAKE_CXX_STANDARD}" PARENT_SCOPE) + endif() +endfunction() + + +macro(detect_gnu_libstdcxx) + # _CONAN_IS_GNU_LIBSTDCXX true if GNU libstdc++ + check_cxx_source_compiles(" + #include + #if !defined(__GLIBCXX__) && !defined(__GLIBCPP__) + static_assert(false); + #endif + int main(){}" _CONAN_IS_GNU_LIBSTDCXX) + + # _CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI true if C++11 ABI + check_cxx_source_compiles(" + #include + static_assert(sizeof(std::string) != sizeof(void*), \"using libstdc++\"); + int main () {}" _CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) + + set(_CONAN_GNU_LIBSTDCXX_SUFFIX "") + if(_CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) + set(_CONAN_GNU_LIBSTDCXX_SUFFIX "11") + endif() + unset (_CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) +endmacro() + + +macro(detect_libcxx) + # _CONAN_IS_LIBCXX true if LLVM libc++ + check_cxx_source_compiles(" + #include + #if !defined(_LIBCPP_VERSION) + static_assert(false); + #endif + int main(){}" _CONAN_IS_LIBCXX) +endmacro() + + +function(detect_lib_cxx LIB_CXX) + if(CMAKE_SYSTEM_NAME STREQUAL "Android") + message(STATUS "CMake-Conan: android_stl=${CMAKE_ANDROID_STL_TYPE}") + set(${LIB_CXX} ${CMAKE_ANDROID_STL_TYPE} PARENT_SCOPE) + return() + endif() + + include(CheckCXXSourceCompiles) + + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") + detect_gnu_libstdcxx() + set(${LIB_CXX} "libstdc++${_CONAN_GNU_LIBSTDCXX_SUFFIX}" PARENT_SCOPE) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") + set(${LIB_CXX} "libc++" PARENT_SCOPE) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT CMAKE_SYSTEM_NAME MATCHES "Windows") + # Check for libc++ + detect_libcxx() + if(_CONAN_IS_LIBCXX) + set(${LIB_CXX} "libc++" PARENT_SCOPE) + return() + endif() + + # Check for libstdc++ + detect_gnu_libstdcxx() + if(_CONAN_IS_GNU_LIBSTDCXX) + set(${LIB_CXX} "libstdc++${_CONAN_GNU_LIBSTDCXX_SUFFIX}" PARENT_SCOPE) + return() + endif() + + # TODO: it would be an error if we reach this point + elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + # Do nothing - compiler.runtime and compiler.runtime_type + # should be handled separately: https://github.com/conan-io/cmake-conan/pull/516 + return() + else() + # TODO: unable to determine, ask user to provide a full profile file instead + endif() +endfunction() + + +function(detect_compiler COMPILER COMPILER_VERSION COMPILER_RUNTIME COMPILER_RUNTIME_TYPE) + if(DEFINED CMAKE_CXX_COMPILER_ID) + set(_COMPILER ${CMAKE_CXX_COMPILER_ID}) + set(_COMPILER_VERSION ${CMAKE_CXX_COMPILER_VERSION}) + else() + if(NOT DEFINED CMAKE_C_COMPILER_ID) + message(FATAL_ERROR "C or C++ compiler not defined") + endif() + set(_COMPILER ${CMAKE_C_COMPILER_ID}) + set(_COMPILER_VERSION ${CMAKE_C_COMPILER_VERSION}) + endif() + + message(STATUS "CMake-Conan: CMake compiler=${_COMPILER}") + message(STATUS "CMake-Conan: CMake compiler version=${_COMPILER_VERSION}") + + if(_COMPILER MATCHES MSVC) + set(_COMPILER "msvc") + string(SUBSTRING ${MSVC_VERSION} 0 3 _COMPILER_VERSION) + # Configure compiler.runtime and compiler.runtime_type settings for MSVC + if(CMAKE_MSVC_RUNTIME_LIBRARY) + set(_msvc_runtime_library ${CMAKE_MSVC_RUNTIME_LIBRARY}) + else() + set(_msvc_runtime_library MultiThreaded$<$:Debug>DLL) # default value documented by CMake + endif() + + set(_KNOWN_MSVC_RUNTIME_VALUES "") + list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded MultiThreadedDLL) + list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreadedDebug MultiThreadedDebugDLL) + list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded$<$:Debug> MultiThreaded$<$:Debug>DLL) + + # only accept the 6 possible values, otherwise we don't don't know to map this + if(NOT _msvc_runtime_library IN_LIST _KNOWN_MSVC_RUNTIME_VALUES) + message(FATAL_ERROR "CMake-Conan: unable to map MSVC runtime: ${_msvc_runtime_library} to Conan settings") + endif() + + # Runtime is "dynamic" in all cases if it ends in DLL + if(_msvc_runtime_library MATCHES ".*DLL$") + set(_COMPILER_RUNTIME "dynamic") + else() + set(_COMPILER_RUNTIME "static") + endif() + message(STATUS "CMake-Conan: CMake compiler.runtime=${_COMPILER_RUNTIME}") + + # Only define compiler.runtime_type when explicitly requested + # If a generator expression is used, let Conan handle it conditional on build_type + if(NOT _msvc_runtime_library MATCHES ":Debug>") + if(_msvc_runtime_library MATCHES "Debug") + set(_COMPILER_RUNTIME_TYPE "Debug") + else() + set(_COMPILER_RUNTIME_TYPE "Release") + endif() + message(STATUS "CMake-Conan: CMake compiler.runtime_type=${_COMPILER_RUNTIME_TYPE}") + endif() + + unset(_KNOWN_MSVC_RUNTIME_VALUES) + + elseif(_COMPILER MATCHES AppleClang) + set(_COMPILER "apple-clang") + string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) + list(GET VERSION_LIST 0 _COMPILER_VERSION) + elseif(_COMPILER MATCHES Clang) + set(_COMPILER "clang") + string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) + list(GET VERSION_LIST 0 _COMPILER_VERSION) + elseif(_COMPILER MATCHES GNU) + set(_COMPILER "gcc") + string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) + list(GET VERSION_LIST 0 _COMPILER_VERSION) + endif() + + message(STATUS "CMake-Conan: [settings] compiler=${_COMPILER}") + message(STATUS "CMake-Conan: [settings] compiler.version=${_COMPILER_VERSION}") + if (_COMPILER_RUNTIME) + message(STATUS "CMake-Conan: [settings] compiler.runtime=${_COMPILER_RUNTIME}") + endif() + if (_COMPILER_RUNTIME_TYPE) + message(STATUS "CMake-Conan: [settings] compiler.runtime_type=${_COMPILER_RUNTIME_TYPE}") + endif() + + set(${COMPILER} ${_COMPILER} PARENT_SCOPE) + set(${COMPILER_VERSION} ${_COMPILER_VERSION} PARENT_SCOPE) + set(${COMPILER_RUNTIME} ${_COMPILER_RUNTIME} PARENT_SCOPE) + set(${COMPILER_RUNTIME_TYPE} ${_COMPILER_RUNTIME_TYPE} PARENT_SCOPE) +endfunction() + + +function(detect_build_type BUILD_TYPE) + get_property(_MULTICONFIG_GENERATOR GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + if(NOT _MULTICONFIG_GENERATOR) + # Only set when we know we are in a single-configuration generator + # Note: we may want to fail early if `CMAKE_BUILD_TYPE` is not defined + set(${BUILD_TYPE} ${CMAKE_BUILD_TYPE} PARENT_SCOPE) + endif() +endfunction() + +macro(set_conan_compiler_if_appleclang lang command output_variable) + if(CMAKE_${lang}_COMPILER_ID STREQUAL "AppleClang") + execute_process(COMMAND xcrun --find ${command} + OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE) + cmake_path(GET _xcrun_out PARENT_PATH _xcrun_toolchain_path) + cmake_path(GET CMAKE_${lang}_COMPILER PARENT_PATH _compiler_parent_path) + if ("${_xcrun_toolchain_path}" STREQUAL "${_compiler_parent_path}") + set(${output_variable} "") + endif() + unset(_xcrun_out) + unset(_xcrun_toolchain_path) + unset(_compiler_parent_path) + endif() +endmacro() + + +macro(append_compiler_executables_configuration) + set(_conan_c_compiler "") + set(_conan_cpp_compiler "") + if(CMAKE_C_COMPILER) + set(_conan_c_compiler "\"c\":\"${CMAKE_C_COMPILER}\",") + set_conan_compiler_if_appleclang(C cc _conan_c_compiler) + else() + message(WARNING "CMake-Conan: The C compiler is not defined. " + "Please define CMAKE_C_COMPILER or enable the C language.") + endif() + if(CMAKE_CXX_COMPILER) + set(_conan_cpp_compiler "\"cpp\":\"${CMAKE_CXX_COMPILER}\"") + set_conan_compiler_if_appleclang(CXX c++ _conan_cpp_compiler) + else() + message(WARNING "CMake-Conan: The C++ compiler is not defined. " + "Please define CMAKE_CXX_COMPILER or enable the C++ language.") + endif() + + if(NOT "x${_conan_c_compiler}${_conan_cpp_compiler}" STREQUAL "x") + string(APPEND PROFILE "tools.build:compiler_executables={${_conan_c_compiler}${_conan_cpp_compiler}}\n") + endif() + unset(_conan_c_compiler) + unset(_conan_cpp_compiler) +endmacro() + + +function(detect_host_profile output_file) + detect_os(MYOS MYOS_API_LEVEL MYOS_SDK MYOS_SUBSYSTEM MYOS_VERSION) + detect_arch(MYARCH) + detect_compiler(MYCOMPILER MYCOMPILER_VERSION MYCOMPILER_RUNTIME MYCOMPILER_RUNTIME_TYPE) + detect_cxx_standard(MYCXX_STANDARD) + detect_lib_cxx(MYLIB_CXX) + detect_build_type(MYBUILD_TYPE) + + set(PROFILE "") + string(APPEND PROFILE "[settings]\n") + if(MYARCH) + string(APPEND PROFILE arch=${MYARCH} "\n") + endif() + if(MYOS) + string(APPEND PROFILE os=${MYOS} "\n") + endif() + if(MYOS_API_LEVEL) + string(APPEND PROFILE os.api_level=${MYOS_API_LEVEL} "\n") + endif() + if(MYOS_VERSION) + string(APPEND PROFILE os.version=${MYOS_VERSION} "\n") + endif() + if(MYOS_SDK) + string(APPEND PROFILE os.sdk=${MYOS_SDK} "\n") + endif() + if(MYOS_SUBSYSTEM) + string(APPEND PROFILE os.subsystem=${MYOS_SUBSYSTEM} "\n") + endif() + if(MYCOMPILER) + string(APPEND PROFILE compiler=${MYCOMPILER} "\n") + endif() + if(MYCOMPILER_VERSION) + string(APPEND PROFILE compiler.version=${MYCOMPILER_VERSION} "\n") + endif() + if(MYCOMPILER_RUNTIME) + string(APPEND PROFILE compiler.runtime=${MYCOMPILER_RUNTIME} "\n") + endif() + if(MYCOMPILER_RUNTIME_TYPE) + string(APPEND PROFILE compiler.runtime_type=${MYCOMPILER_RUNTIME_TYPE} "\n") + endif() + if(MYCXX_STANDARD) + string(APPEND PROFILE compiler.cppstd=${MYCXX_STANDARD} "\n") + endif() + if(MYLIB_CXX) + string(APPEND PROFILE compiler.libcxx=${MYLIB_CXX} "\n") + endif() + if(MYBUILD_TYPE) + string(APPEND PROFILE "build_type=${MYBUILD_TYPE}\n") + endif() + + if(NOT DEFINED output_file) + set(_FN "${CMAKE_BINARY_DIR}/profile") + else() + set(_FN ${output_file}) + endif() + + string(APPEND PROFILE "[conf]\n") + string(APPEND PROFILE "tools.cmake.cmaketoolchain:generator=${CMAKE_GENERATOR}\n") + + # propagate compilers via profile + append_compiler_executables_configuration() + + if(MYOS STREQUAL "Android") + string(APPEND PROFILE "tools.android:ndk_path=${CMAKE_ANDROID_NDK}\n") + endif() + + message(STATUS "CMake-Conan: Creating profile ${_FN}") + file(WRITE ${_FN} ${PROFILE}) + message(STATUS "CMake-Conan: Profile: \n${PROFILE}") +endfunction() + + +function(conan_profile_detect_default) + message(STATUS "CMake-Conan: Checking if a default profile exists") + execute_process(COMMAND ${CONAN_COMMAND} profile path default + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + ECHO_OUTPUT_VARIABLE + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + if(NOT ${return_code} EQUAL "0") + message(STATUS "CMake-Conan: The default profile doesn't exist, detecting it.") + execute_process(COMMAND ${CONAN_COMMAND} profile detect + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + ECHO_OUTPUT_VARIABLE + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + endif() +endfunction() + + +function(conan_install) + cmake_parse_arguments(ARGS CONAN_ARGS ${ARGN}) + set(CONAN_OUTPUT_FOLDER ${CMAKE_BINARY_DIR}/conan) + # Invoke "conan install" with the provided arguments + set(CONAN_ARGS ${CONAN_ARGS} -of=${CONAN_OUTPUT_FOLDER}) + message(STATUS "CMake-Conan: conan install ${CMAKE_SOURCE_DIR} ${CONAN_ARGS} ${ARGN}") + + + # In case there was not a valid cmake executable in the PATH, we inject the + # same we used to invoke the provider to the PATH + if(DEFINED PATH_TO_CMAKE_BIN) + set(_OLD_PATH $ENV{PATH}) + set(ENV{PATH} "$ENV{PATH}:${PATH_TO_CMAKE_BIN}") + endif() + + execute_process(COMMAND ${CONAN_COMMAND} install ${CMAKE_SOURCE_DIR} ${CONAN_ARGS} ${ARGN} --format=json + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + + if(DEFINED PATH_TO_CMAKE_BIN) + set(ENV{PATH} "${_OLD_PATH}") + endif() + + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan install failed='${return_code}'") + else() + # the files are generated in a folder that depends on the layout used, if + # one is specified, but we don't know a priori where this is. + # TODO: this can be made more robust if Conan can provide this in the json output + string(JSON CONAN_GENERATORS_FOLDER GET ${conan_stdout} graph nodes 0 generators_folder) + cmake_path(CONVERT ${CONAN_GENERATORS_FOLDER} TO_CMAKE_PATH_LIST CONAN_GENERATORS_FOLDER) + # message("conan stdout: ${conan_stdout}") + message(STATUS "CMake-Conan: CONAN_GENERATORS_FOLDER=${CONAN_GENERATORS_FOLDER}") + set_property(GLOBAL PROPERTY CONAN_GENERATORS_FOLDER "${CONAN_GENERATORS_FOLDER}") + # reconfigure on conanfile changes + string(JSON CONANFILE GET ${conan_stdout} graph nodes 0 label) + message(STATUS "CMake-Conan: CONANFILE=${CMAKE_SOURCE_DIR}/${CONANFILE}") + set_property(DIRECTORY ${CMAKE_SOURCE_DIR} APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/${CONANFILE}") + # success + set_property(GLOBAL PROPERTY CONAN_INSTALL_SUCCESS TRUE) + endif() +endfunction() + + +function(conan_get_version conan_command conan_current_version) + execute_process( + COMMAND ${conan_command} --version + OUTPUT_VARIABLE conan_output + RESULT_VARIABLE conan_result + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(conan_result) + message(FATAL_ERROR "CMake-Conan: Error when trying to run Conan") + endif() + + string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" conan_version ${conan_output}) + set(${conan_current_version} ${conan_version} PARENT_SCOPE) +endfunction() + + +function(conan_version_check) + set(options ) + set(oneValueArgs MINIMUM CURRENT) + set(multiValueArgs ) + cmake_parse_arguments(CONAN_VERSION_CHECK + "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(NOT CONAN_VERSION_CHECK_MINIMUM) + message(FATAL_ERROR "CMake-Conan: Required parameter MINIMUM not set!") + endif() + if(NOT CONAN_VERSION_CHECK_CURRENT) + message(FATAL_ERROR "CMake-Conan: Required parameter CURRENT not set!") + endif() + + if(CONAN_VERSION_CHECK_CURRENT VERSION_LESS CONAN_VERSION_CHECK_MINIMUM) + message(FATAL_ERROR "CMake-Conan: Conan version must be ${CONAN_VERSION_CHECK_MINIMUM} or later") + endif() +endfunction() + + +macro(construct_profile_argument argument_variable profile_list) + set(${argument_variable} "") + if("${profile_list}" STREQUAL "CONAN_HOST_PROFILE") + set(_arg_flag "--profile:host=") + elseif("${profile_list}" STREQUAL "CONAN_BUILD_PROFILE") + set(_arg_flag "--profile:build=") + endif() + + set(_profile_list "${${profile_list}}") + list(TRANSFORM _profile_list REPLACE "auto-cmake" "${CMAKE_BINARY_DIR}/conan_host_profile") + list(TRANSFORM _profile_list PREPEND ${_arg_flag}) + set(${argument_variable} ${_profile_list}) + + unset(_arg_flag) + unset(_profile_list) +endmacro() + + +macro(conan_provide_dependency method package_name) + set_property(GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED TRUE) + get_property(_conan_install_success GLOBAL PROPERTY CONAN_INSTALL_SUCCESS) + if(NOT _conan_install_success) + find_program(CONAN_COMMAND "conan" REQUIRED) + conan_get_version(${CONAN_COMMAND} CONAN_CURRENT_VERSION) + conan_version_check(MINIMUM ${CONAN_MINIMUM_VERSION} CURRENT ${CONAN_CURRENT_VERSION}) + message(STATUS "CMake-Conan: first find_package() found. Installing dependencies with Conan") + if("default" IN_LIST CONAN_HOST_PROFILE OR "default" IN_LIST CONAN_BUILD_PROFILE) + conan_profile_detect_default() + endif() + if("auto-cmake" IN_LIST CONAN_HOST_PROFILE) + detect_host_profile(${CMAKE_BINARY_DIR}/conan_host_profile) + endif() + construct_profile_argument(_host_profile_flags CONAN_HOST_PROFILE) + construct_profile_argument(_build_profile_flags CONAN_BUILD_PROFILE) + if(EXISTS "${CMAKE_SOURCE_DIR}/conanfile.py") + file(READ "${CMAKE_SOURCE_DIR}/conanfile.py" outfile) + if(NOT "${outfile}" MATCHES ".*CMakeDeps.*") + message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile") + endif() + set(generator "") + elseif (EXISTS "${CMAKE_SOURCE_DIR}/conanfile.txt") + file(READ "${CMAKE_SOURCE_DIR}/conanfile.txt" outfile) + if(NOT "${outfile}" MATCHES ".*CMakeDeps.*") + message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile. " + "Please define the generator as it will be mandatory in the future") + endif() + set(generator "-g;CMakeDeps") + endif() + get_property(_multiconfig_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + if(NOT _multiconfig_generator) + message(STATUS "CMake-Conan: Installing single configuration ${CMAKE_BUILD_TYPE}") + conan_install(${_host_profile_flags} ${_build_profile_flags} ${CONAN_INSTALL_ARGS} ${generator}) + else() + message(STATUS "CMake-Conan: Installing both Debug and Release") + conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Release ${CONAN_INSTALL_ARGS} ${generator}) + conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Debug ${CONAN_INSTALL_ARGS} ${generator}) + endif() + unset(_host_profile_flags) + unset(_build_profile_flags) + unset(_multiconfig_generator) + unset(_conan_install_success) + else() + message(STATUS "CMake-Conan: find_package(${ARGV1}) found, 'conan install' already ran") + unset(_conan_install_success) + endif() + + get_property(_conan_generators_folder GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) + + # Ensure that we consider Conan-provided packages ahead of any other, + # irrespective of other settings that modify the search order or search paths + # This follows the guidelines from the find_package documentation + # (https://cmake.org/cmake/help/latest/command/find_package.html): + # find_package ( PATHS paths... NO_DEFAULT_PATH) + # find_package () + + # Filter out `REQUIRED` from the argument list, as the first call may fail + set(_find_args_${package_name} "${ARGN}") + list(REMOVE_ITEM _find_args_${package_name} "REQUIRED") + if(NOT "MODULE" IN_LIST _find_args_${package_name}) + find_package(${package_name} ${_find_args_${package_name}} BYPASS_PROVIDER PATHS "${_conan_generators_folder}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + unset(_find_args_${package_name}) + endif() + + # Invoke find_package a second time - if the first call succeeded, + # this will simply reuse the result. If not, fall back to CMake default search + # behaviour, also allowing modules to be searched. + if(NOT ${package_name}_FOUND) + list(FIND CMAKE_MODULE_PATH "${_conan_generators_folder}" _index) + if(_index EQUAL -1) + list(PREPEND CMAKE_MODULE_PATH "${_conan_generators_folder}") + endif() + unset(_index) + find_package(${package_name} ${ARGN} BYPASS_PROVIDER) + list(REMOVE_ITEM CMAKE_MODULE_PATH "${_conan_generators_folder}") + endif() +endmacro() + +#[=[ not needed by Qt Creator, and if not commented it would break the auto-setup feature + +cmake_language( + SET_DEPENDENCY_PROVIDER conan_provide_dependency + SUPPORTED_METHODS FIND_PACKAGE +) + + +macro(conan_provide_dependency_check) + set(_CONAN_PROVIDE_DEPENDENCY_INVOKED FALSE) + get_property(_CONAN_PROVIDE_DEPENDENCY_INVOKED GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED) + if(NOT _CONAN_PROVIDE_DEPENDENCY_INVOKED) + message(WARNING "Conan is correctly configured as dependency provider, " + "but Conan has not been invoked. Please add at least one " + "call to `find_package()`.") + if(DEFINED CONAN_COMMAND) + # supress warning in case `CONAN_COMMAND` was specified but unused. + set(_CONAN_COMMAND ${CONAN_COMMAND}) + unset(_CONAN_COMMAND) + endif() + endif() + unset(_CONAN_PROVIDE_DEPENDENCY_INVOKED) +endmacro() + + +# Add a deferred call at the end of processing the top-level directory +# to check if the dependency provider was invoked at all. +cmake_language(DEFER DIRECTORY "${CMAKE_SOURCE_DIR}" CALL conan_provide_dependency_check) + +]=] + +# Configurable variables for Conan profiles +set(CONAN_HOST_PROFILE "default;auto-cmake" CACHE STRING "Conan host profile") +set(CONAN_BUILD_PROFILE "default" CACHE STRING "Conan build profile") +set(CONAN_INSTALL_ARGS "--build=missing" CACHE STRING "Command line arguments for conan install") + +find_program(_cmake_program NAMES cmake NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_CMAKE_FIND_ROOT_PATH) +if(NOT _cmake_program) + get_filename_component(PATH_TO_CMAKE_BIN "${CMAKE_COMMAND}" DIRECTORY) + set(PATH_TO_CMAKE_BIN "${PATH_TO_CMAKE_BIN}" CACHE INTERNAL "Path where the CMake executable is") +endif() + diff --git a/build/Desktop_Qt_6_8_0-Release/CMakeCache.txt b/build/Desktop_Qt_6_8_0-Release/CMakeCache.txt new file mode 100644 index 000000000..bdc8b6ff2 --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Release/CMakeCache.txt @@ -0,0 +1,445 @@ +# This is the CMakeCache file. +# For build in directory: /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release +# It was generated by CMake: /home/austenharrell/Qt/Tools/CMake/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Boost date_time library (debug) +Boost_DATE_TIME_LIBRARY_DEBUG:FILEPATH=Boost_DATE_TIME_LIBRARY_DEBUG-NOTFOUND + +//Boost date_time library (release) +Boost_DATE_TIME_LIBRARY_RELEASE:FILEPATH=Boost_DATE_TIME_LIBRARY_RELEASE-NOTFOUND + +//The directory containing a CMake configuration file for Boost. +Boost_DIR:PATH=Boost_DIR-NOTFOUND + +//Path to a file. +Boost_INCLUDE_DIR:PATH=Boost_INCLUDE_DIR-NOTFOUND + +//Boost program_options library (debug) +Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG:FILEPATH=Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG-NOTFOUND + +//Boost program_options library (release) +Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE:FILEPATH=Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE-NOTFOUND + +//Boost unit_test_framework library (debug) +Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG:FILEPATH=Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG-NOTFOUND + +//Boost unit_test_framework library (release) +Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE:FILEPATH=Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE-NOTFOUND + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//No help, variable specified on the command line. +CMAKE_BUILD_TYPE:STRING=Release + +//Enable colored diagnostics throughout. +CMAKE_COLOR_DIAGNOSTICS:BOOL=1 + +//CXX compiler +CMAKE_CXX_COMPILER:STRING=/usr/bin/x86_64-linux-gnu-g++-11 + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/x86_64-linux-gnu-gcc-ar-11 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/x86_64-linux-gnu-gcc-ranlib-11 + +//Flags used by the CXX compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the CXX compiler during DEBUG builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//No help, variable specified on the command line. +CMAKE_CXX_FLAGS_INIT:STRING= + +//Flags used by the CXX compiler during MINSIZEREL builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the CXX compiler during RELEASE builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the CXX compiler during RELWITHDEBINFO builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//C compiler +CMAKE_C_COMPILER:STRING=/usr/bin/gcc-11 + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-11 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-11 + +//Flags used by the C compiler during all build types. +CMAKE_C_FLAGS:STRING= + +//Flags used by the C compiler during DEBUG builds. +CMAKE_C_FLAGS_DEBUG:STRING=-g + +//Flags used by the C compiler during MINSIZEREL builds. +CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the C compiler during RELEASE builds. +CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the C compiler during RELWITHDEBINFO builds. +CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND + +//Flags used by the linker during all build types. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL= + +//Value Computed by CMake. +CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/pkgRedirects + +//No help, variable specified on the command line. +CMAKE_GENERATOR:STRING=Ninja + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Program used to build from build.ninja files. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/ninja + +//Flags used by the linker during the creation of modules during +// all build types. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//No help, variable specified on the command line. +CMAKE_PREFIX_PATH:PATH=/home/austenharrell/Qt/6.8.0/gcc_64 + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//No help, variable specified on the command line. +CMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/auto-setup.cmake + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=WindNinja + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Path to a program. +CMAKE_READELF:FILEPATH=/usr/bin/readelf + +//Flags used by the linker during the creation of shared libraries +// during all build types. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//Path to a program. +CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Build a windows installer with dlls from the firelab machine +FIRELAB_PACKAGE:BOOL=OFF + +//Skip Qt Creator's package manager auto-setup +QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP:BOOL=OFF + +//No help, variable specified on the command line. +QT_QMAKE_EXECUTABLE:FILEPATH=/home/austenharrell/Qt/6.8.0/gcc_64/bin/qmake + +//Value Computed by CMake +WindNinja_BINARY_DIR:STATIC=/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release + +//Value Computed by CMake +WindNinja_IS_TOP_LEVEL:STATIC=ON + +//Value Computed by CMake +WindNinja_SOURCE_DIR:STATIC=/home/austenharrell/school/2025_Spring/windninja + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: Boost_DATE_TIME_LIBRARY_DEBUG +Boost_DATE_TIME_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_DATE_TIME_LIBRARY_RELEASE +Boost_DATE_TIME_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_DIR +Boost_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_INCLUDE_DIR +Boost_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG +Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE +Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG +Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE +Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=29 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=3 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/home/austenharrell/Qt/Tools/CMake/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/home/austenharrell/Qt/Tools/CMake/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/home/austenharrell/Qt/Tools/CMake/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR +CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB +CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER +CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_AR +CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB +CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS +CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO +CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Path to cache edit program executable. +CMAKE_EDIT_COMMAND:INTERNAL=/home/austenharrell/Qt/Tools/CMake/bin/ccmake +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/austenharrell/school/2025_Spring/windninja +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_TAPI +CMAKE_TAPI-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/usr/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: FIRELAB_PACKAGE +FIRELAB_PACKAGE-ADVANCED:INTERNAL=1 +//Components requested for this build tree. +_Boost_COMPONENTS_SEARCHED:INTERNAL= +//Last used Boost_INCLUDE_DIR value. +_Boost_INCLUDE_DIR_LAST:INTERNAL=Boost_INCLUDE_DIR-NOTFOUND +//Last used Boost_NAMESPACE value. +_Boost_NAMESPACE_LAST:INTERNAL=boost +//Last used Boost_USE_MULTITHREADED value. +_Boost_USE_MULTITHREADED_LAST:INTERNAL=TRUE +//linker supports push/pop state +_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE + diff --git a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeCCompiler.cmake b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeCCompiler.cmake new file mode 100644 index 000000000..2bbc9eb34 --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeCCompiler.cmake @@ -0,0 +1,80 @@ +set(CMAKE_C_COMPILER "/usr/bin/gcc-11") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "GNU") +set(CMAKE_C_COMPILER_VERSION "11.4.0") +set(CMAKE_C_COMPILER_VERSION_INTERNAL "") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17;c_std_23") +set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") +set(CMAKE_C17_COMPILE_FEATURES "c_std_17") +set(CMAKE_C23_COMPILE_FEATURES "c_std_23") + +set(CMAKE_C_PLATFORM_ID "Linux") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_C_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar-11") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib-11") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_LINKER_LINK "") +set(CMAKE_LINKER_LLD "") +set(CMAKE_C_COMPILER_LINKER "/usr/bin/ld") +set(CMAKE_C_COMPILER_LINKER_ID "GNU") +set(CMAKE_C_COMPILER_LINKER_VERSION 2.38) +set(CMAKE_C_COMPILER_LINKER_FRONTEND_VARIANT GNU) +set(CMAKE_MT "") +set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") +set(CMAKE_COMPILER_IS_GNUCC 1) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) +set(CMAKE_C_LINKER_DEPFILE_SUPPORTED FALSE) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "8") +set(CMAKE_C_COMPILER_ABI "ELF") +set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake new file mode 100644 index 000000000..bfe6256d5 --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake @@ -0,0 +1,92 @@ +set(CMAKE_CXX_COMPILER "/usr/bin/x86_64-linux-gnu-g++-11") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "11.4.0") +set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") +set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") +set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_CXX_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_CXX_COMPILER_AR "/usr/bin/x86_64-linux-gnu-gcc-ar-11") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/x86_64-linux-gnu-gcc-ranlib-11") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_LINKER_LINK "") +set(CMAKE_LINKER_LLD "") +set(CMAKE_CXX_COMPILER_LINKER "/usr/bin/ld") +set(CMAKE_CXX_COMPILER_LINKER_ID "GNU") +set(CMAKE_CXX_COMPILER_LINKER_VERSION 2.38) +set(CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT GNU) +set(CMAKE_MT "") +set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") +set(CMAKE_COMPILER_IS_GNUCXX 1) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) + +foreach (lang IN ITEMS C OBJC OBJCXX) + if (CMAKE_${lang}_COMPILER_ID_RUN) + foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) + list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) + endforeach() + endif() +endforeach() + +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) +set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED FALSE) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/11;/usr/include/x86_64-linux-gnu/c++/11;/usr/include/c++/11/backward;/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") +set(CMAKE_CXX_COMPILER_CLANG_RESOURCE_DIR "") diff --git a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_C.bin b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_C.bin new file mode 100755 index 0000000000000000000000000000000000000000..59672f58544a0d3fa118329bec892cc5d8608ac8 GIT binary patch literal 15968 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 Z0>QaorNy;#ZU061!veG*;1CeSKLPgAN{|2m literal 0 HcmV?d00001 diff --git a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_CXX.bin b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 0000000000000000000000000000000000000000..cfa527b53452d63fe64b6a8e2d060ddc5e29a3a6 GIT binary patch literal 15992 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 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__BCC__) +# define COMPILER_ID "Bruce" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) && defined(__ti__) +# define COMPILER_ID "TIClang" + # define COMPILER_VERSION_MAJOR DEC(__ti_major__) + # define COMPILER_VERSION_MINOR DEC(__ti_minor__) + # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) +# define COMPILER_VERSION_INTERNAL DEC(__ti_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + +#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) +# define COMPILER_ID "SDCC" +# if defined(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) +# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) +# else + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__clang__) && defined(__ti__) +# if defined(__ARM_ARCH) +# define ARCHITECTURE_ID "Arm" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if !defined(__STDC__) && !defined(__clang__) +# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__) +# define C_VERSION "90" +# else +# define C_VERSION +# endif +#elif __STDC_VERSION__ > 201710L +# define C_VERSION "23" +#elif __STDC_VERSION__ >= 201710L +# define C_VERSION "17" +#elif __STDC_VERSION__ >= 201000L +# define C_VERSION "11" +#elif __STDC_VERSION__ >= 199901L +# define C_VERSION "99" +#else +# define C_VERSION "90" +#endif +const char* info_language_standard_default = + "INFO" ":" "standard_default[" C_VERSION "]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else +int main(int argc, char* argv[]) +# endif +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 000000000..9a5e8f8ce --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,878 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + +#if !defined(__has_include) +/* If the compiler does not have __has_include, pretend the answer is + always no. */ +# define __has_include(x) 0 +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a version is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) && defined(__ti__) +# define COMPILER_ID "TIClang" + # define COMPILER_VERSION_MAJOR DEC(__ti_major__) + # define COMPILER_VERSION_MINOR DEC(__ti_minor__) + # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) +# define COMPILER_VERSION_INTERNAL DEC(__ti_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__clang__) && defined(__ti__) +# if defined(__ARM_ARCH) +# define ARCHITECTURE_ID "Arm" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L +# if defined(__INTEL_CXX11_MODE__) +# if defined(__cpp_aggregate_nsdmi) +# define CXX_STD 201402L +# else +# define CXX_STD 201103L +# endif +# else +# define CXX_STD 199711L +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# define CXX_STD _MSVC_LANG +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_standard_default = "INFO" ":" "standard_default[" +#if CXX_STD > 202002L + "23" +#elif CXX_STD > 201703L + "20" +#elif CXX_STD >= 201703L + "17" +#elif CXX_STD >= 201402L + "14" +#elif CXX_STD >= 201103L + "11" +#else + "98" +#endif +"]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} diff --git a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeConfigureLog.yaml b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeConfigureLog.yaml new file mode 100644 index 000000000..b2d70035b --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeConfigureLog.yaml @@ -0,0 +1,556 @@ + +--- +events: + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake:205 (message)" + - "CMakeLists.txt:20 (project)" + message: | + The system is: Linux - 5.15.133.1-microsoft-standard-WSL2 - x86_64 + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCCompiler.cmake:123 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:20 (project)" + message: | + Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. + Compiler: /usr/bin/gcc-11 + Build flags: + Id flags: + + The output was: + 0 + + + Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" + + The C compiler identification is GNU, found in: + /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CompilerIdC/a.out + + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:20 (project)" + message: | + Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. + Compiler: /usr/bin/x86_64-linux-gnu-g++-11 + Build flags: + Id flags: + + The output was: + 0 + + + Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + + The CXX compiler identification is GNU, found in: + /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CompilerIdCXX/a.out + + - + kind: "try_compile-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:67 (try_compile)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:20 (project)" + checks: + - "Detecting C compiler ABI info" + directories: + source: "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeScratch/TryCompile-xUW7UH" + binary: "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeScratch/TryCompile-xUW7UH" + cmakeVariables: + CMAKE_C_FLAGS: "" + buildResult: + variable: "CMAKE_C_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeScratch/TryCompile-xUW7UH' + + Run Build Command(s): /usr/bin/ninja -v cmTC_c01e1 + [1/2] /usr/bin/gcc-11 -fdiagnostics-color=always -v -o CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCCompilerABI.c + Using built-in specs. + COLLECT_GCC=/usr/bin/gcc-11 + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) + COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c01e1.dir/' + /usr/lib/gcc/x86_64-linux-gnu/11/cc1 -quiet -v -imultiarch x86_64-linux-gnu /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_c01e1.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccoEEKAv.s + GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) + compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include" + #include "..." search starts here: + #include <...> search starts here: + /usr/lib/gcc/x86_64-linux-gnu/11/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include + End of search list. + GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) + compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + Compiler executable checksum: 50eaa2331df977b8016186198deb2d18 + COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c01e1.dir/' + as -v --64 -o CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o /tmp/ccoEEKAv.s + GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38 + COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.' + [2/2] : && /usr/bin/gcc-11 -v -Wl,-v -rdynamic CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o -o cmTC_c01e1 && : + Using built-in specs. + COLLECT_GCC=/usr/bin/gcc-11 + COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) + COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_c01e1' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_c01e1.' + /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccntBB8o.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_c01e1 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o + collect2 version 11.4.0 + /usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccntBB8o.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_c01e1 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o + GNU ld (GNU Binutils for Ubuntu) 2.38 + COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_c01e1' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_c01e1.' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:137 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:20 (project)" + message: | + Parsed C implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/usr/lib/gcc/x86_64-linux-gnu/11/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/11/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/11/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:173 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:20 (project)" + message: | + Parsed C implicit link information: + link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)] + ignore line: [Change Dir: '/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeScratch/TryCompile-xUW7UH'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/ninja -v cmTC_c01e1] + ignore line: [[1/2] /usr/bin/gcc-11 -fdiagnostics-color=always -v -o CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCCompilerABI.c] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/gcc-11] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] + ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c01e1.dir/'] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/cc1 -quiet -v -imultiarch x86_64-linux-gnu /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_c01e1.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccoEEKAv.s] + ignore line: [GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [Compiler executable checksum: 50eaa2331df977b8016186198deb2d18] + ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c01e1.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o /tmp/ccoEEKAv.s] + ignore line: [GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.'] + ignore line: [[2/2] : && /usr/bin/gcc-11 -v -Wl -v -rdynamic CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o -o cmTC_c01e1 && :] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/gcc-11] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_c01e1' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_c01e1.'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccntBB8o.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_c01e1 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccntBB8o.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_c01e1] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] + arg [-v] ==> ignore + arg [CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + ignore line: [collect2 version 11.4.0] + ignore line: [/usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccntBB8o.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_c01e1 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + linker tool for 'C': /usr/bin/ld + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11] ==> [/usr/lib/gcc/x86_64-linux-gnu/11] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> [/usr/lib] + implicit libs: [gcc;gcc_s;c;gcc;gcc_s] + implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:210 (cmake_determine_linker_id)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:20 (project)" + message: | + Running the C compiler's linker: "/usr/bin/ld" "-v" + GNU ld (GNU Binutils for Ubuntu) 2.38 + - + kind: "try_compile-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:67 (try_compile)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:20 (project)" + checks: + - "Detecting CXX compiler ABI info" + directories: + source: "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeScratch/TryCompile-wg5nzn" + binary: "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeScratch/TryCompile-wg5nzn" + cmakeVariables: + CMAKE_CXX_FLAGS: "" + CMAKE_CXX_SCAN_FOR_MODULES: "OFF" + buildResult: + variable: "CMAKE_CXX_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeScratch/TryCompile-wg5nzn' + + Run Build Command(s): /usr/bin/ninja -v cmTC_010b1 + [1/2] /usr/bin/x86_64-linux-gnu-g++-11 -fdiagnostics-color=always -v -o CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp + Using built-in specs. + COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11 + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) + COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_010b1.dir/' + /usr/lib/gcc/x86_64-linux-gnu/11/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_010b1.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cczUv8BJ.s + GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) + compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/11" + ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include" + #include "..." search starts here: + #include <...> search starts here: + /usr/include/c++/11 + /usr/include/x86_64-linux-gnu/c++/11 + /usr/include/c++/11/backward + /usr/lib/gcc/x86_64-linux-gnu/11/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include + End of search list. + GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) + compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + Compiler executable checksum: d591828bb4d392ae8b7b160e5bb0b95f + COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_010b1.dir/' + as -v --64 -o CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o /tmp/cczUv8BJ.s + GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38 + COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.' + [2/2] : && /usr/bin/x86_64-linux-gnu-g++-11 -v -Wl,-v -rdynamic CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_010b1 && : + Using built-in specs. + COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11 + COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) + COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_010b1' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_010b1.' + /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/cc4zGlQJ.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_010b1 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o + collect2 version 11.4.0 + /usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/cc4zGlQJ.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_010b1 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o + GNU ld (GNU Binutils for Ubuntu) 2.38 + COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_010b1' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_010b1.' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:137 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:20 (project)" + message: | + Parsed CXX implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/usr/include/c++/11] + add: [/usr/include/x86_64-linux-gnu/c++/11] + add: [/usr/include/c++/11/backward] + add: [/usr/lib/gcc/x86_64-linux-gnu/11/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/include/c++/11] ==> [/usr/include/c++/11] + collapse include dir [/usr/include/x86_64-linux-gnu/c++/11] ==> [/usr/include/x86_64-linux-gnu/c++/11] + collapse include dir [/usr/include/c++/11/backward] ==> [/usr/include/c++/11/backward] + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/11/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/11/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/include/c++/11;/usr/include/x86_64-linux-gnu/c++/11;/usr/include/c++/11/backward;/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:173 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:20 (project)" + message: | + Parsed CXX implicit link information: + link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)] + ignore line: [Change Dir: '/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeScratch/TryCompile-wg5nzn'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/ninja -v cmTC_010b1] + ignore line: [[1/2] /usr/bin/x86_64-linux-gnu-g++-11 -fdiagnostics-color=always -v -o CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] + ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_010b1.dir/'] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_010b1.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cczUv8BJ.s] + ignore line: [GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/11"] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/include/c++/11] + ignore line: [ /usr/include/x86_64-linux-gnu/c++/11] + ignore line: [ /usr/include/c++/11/backward] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [Compiler executable checksum: d591828bb4d392ae8b7b160e5bb0b95f] + ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_010b1.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o /tmp/cczUv8BJ.s] + ignore line: [GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.'] + ignore line: [[2/2] : && /usr/bin/x86_64-linux-gnu-g++-11 -v -Wl -v -rdynamic CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_010b1 && :] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_010b1' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_010b1.'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/cc4zGlQJ.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_010b1 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/cc4zGlQJ.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_010b1] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] + arg [-v] ==> ignore + arg [CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + ignore line: [collect2 version 11.4.0] + ignore line: [/usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/cc4zGlQJ.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_010b1 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + linker tool for 'CXX': /usr/bin/ld + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11] ==> [/usr/lib/gcc/x86_64-linux-gnu/11] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] + implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:210 (cmake_determine_linker_id)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:20 (project)" + message: | + Running the CXX compiler's linker: "/usr/bin/ld" "-v" + GNU ld (GNU Binutils for Ubuntu) 2.38 +... diff --git a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/cmake.check_cache b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/cmake.check_cache new file mode 100644 index 000000000..3dccd7317 --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/build/Desktop_Qt_6_8_0-Release/ninja_version.h b/build/Desktop_Qt_6_8_0-Release/ninja_version.h new file mode 100644 index 000000000..367f13b7c --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Release/ninja_version.h @@ -0,0 +1,39 @@ +/****************************************************************************** + * + * Project: WindNinja + * Purpose: general disclaimer for windninja + * Author: Kyle Shannon + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + +#ifndef NINJA_VERSION_H_ +#define NINJA_VERSION_H_ + +#define NINJA_VERSION_MAJOR 3 +#define NINJA_VERSION_MINOR 11 +#define NINJA_VERSION_PATCH 0 +#define NINJA_VERSION_STRING "3.11.0" +#define NINJA_SCM_VERSION "6a8269d2034eabbb8a28bee5e6b77c628838dbd1" +#define NINJA_RELEASE_DATE "2025/01/28" + +#endif /* NINJA_VERSION_H_ */ + diff --git a/build/Desktop_Qt_6_8_0-Release/qtcsettings.cmake b/build/Desktop_Qt_6_8_0-Release/qtcsettings.cmake new file mode 100644 index 000000000..62ee7d015 --- /dev/null +++ b/build/Desktop_Qt_6_8_0-Release/qtcsettings.cmake @@ -0,0 +1,10 @@ +# This file is managed by Qt Creator, do not edit! + +set("CMAKE_GENERATOR" "Ninja" CACHE "STRING" "" FORCE) +set("QT_QMAKE_EXECUTABLE" "/home/austenharrell/Qt/6.8.0/gcc_64/bin/qmake" CACHE "FILEPATH" "" FORCE) +set("CMAKE_CXX_FLAGS_INIT" "" CACHE "STRING" "" FORCE) +set("CMAKE_PROJECT_INCLUDE_BEFORE" "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/auto-setup.cmake" CACHE "FILEPATH" "" FORCE) +set("CMAKE_CXX_COMPILER" "/usr/bin/x86_64-linux-gnu-g++-11" CACHE "FILEPATH" "" FORCE) +set("CMAKE_C_COMPILER" "/usr/bin/gcc-11" CACHE "FILEPATH" "" FORCE) +set("CMAKE_BUILD_TYPE" "Release" CACHE "STRING" "" FORCE) +set("CMAKE_PREFIX_PATH" "/home/austenharrell/Qt/6.8.0/gcc_64" CACHE "PATH" "" FORCE) \ No newline at end of file diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt index 8ea621eb5..d5005ebe8 100644 --- a/src/gui/qt6/CMakeLists.txt +++ b/src/gui/qt6/CMakeLists.txt @@ -1,45 +1,70 @@ -cmake_minimum_required(VERSION 3.5) +cmake_minimum_required(VERSION 3.16) -project(QT6 LANGUAGES CXX) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) +project(test VERSION 0.1 LANGUAGES CXX) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) -set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -# QtCreator supports the following variables for Android, which are identical to qmake Android variables. -# Check http://doc.qt.io/qt-5/deployment-android.html for more information. -# They need to be set before the find_package(Qt5 ...) call. +find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) -#if(ANDROID) -# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") -# if (ANDROID_ABI STREQUAL "armeabi-v7a") -# set(ANDROID_EXTRA_LIBS -# ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so -# ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so) -# endif() -#endif() - -find_package(Qt5 COMPONENTS Widgets REQUIRED) - -if(ANDROID) - add_library(QT6 SHARED - main.cpp - mainwindow.cpp - mainwindow.h - mainwindow.ui - ) +set(PROJECT_SOURCES + main.cpp + mainwindow.cpp + mainwindow.h + mainwindow.ui +) + +if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) + qt_add_executable(test + MANUAL_FINALIZATION + ${PROJECT_SOURCES} + ) +# Define target properties for Android with Qt 6 as: +# set_property(TARGET test APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR +# ${CMAKE_CURRENT_SOURCE_DIR}/android) +# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation else() - add_executable(QT6 - main.cpp - mainwindow.cpp - mainwindow.h - mainwindow.ui - ) + if(ANDROID) + add_library(test SHARED + ${PROJECT_SOURCES} + ) +# Define properties for Android with Qt 5 after find_package() calls as: +# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") + else() + add_executable(test + ${PROJECT_SOURCES} + ) + endif() endif() -target_link_libraries(QT6 PRIVATE Qt5::Widgets) +target_link_libraries(test PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) + +# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. +# If you are developing for iOS or macOS you should consider setting an +# explicit, fixed bundle identifier manually though. +if(${QT_VERSION} VERSION_LESS 6.1.0) + set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.test) +endif() +set_target_properties(test PROPERTIES + ${BUNDLE_ID_OPTION} + MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} + MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} + MACOSX_BUNDLE TRUE + WIN32_EXECUTABLE TRUE +) + +include(GNUInstallDirs) +install(TARGETS test + BUNDLE DESTINATION . + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) + +if(QT_VERSION_MAJOR EQUAL 6) + qt_finalize_executable(test) +endif() diff --git a/src/gui/qt6/CMakeLists.txt.user b/src/gui/qt6/CMakeLists.txt.user index a992a29eb..7a712353e 100644 --- a/src/gui/qt6/CMakeLists.txt.user +++ b/src/gui/qt6/CMakeLists.txt.user @@ -1,14 +1,14 @@ - + EnvironmentId - {ffebe718-7e6c-496a-80e5-5cb3ef92867b} + {f3a83e8a-49e6-4193-9c60-1e85ac4bd4eb} ProjectExplorer.Project.ActiveTarget - 0 + 0 ProjectExplorer.Project.EditorSettings @@ -28,7 +28,7 @@ QmlJSGlobal - 2 + 2 UTF-8 false 4 @@ -37,303 +37,346 @@ true true 1 + 0 + false true false - 0 + 2 true true 0 8 true + false 1 true true true + *.md, *.MD, Makefile false - - - - ProjectExplorer.Project.PluginSettings - - - true + true + true ProjectExplorer.Project.Target.0 - QT6 - QT6 - {410b4c54-95c1-4d21-bd01-659bbf2c80f8} - 0 - 0 - 0 + Desktop + Desktop Qt 6.8.0 + Desktop Qt 6.8.0 + qt.qt6.680.linux_gcc_64_kit + 0 + 0 + 0 - - CMAKE_BUILD_TYPE:STRING=Debug - CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} - CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} - CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} - QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} - - /home/cody/WindNinja/windninja/src/gui/qt6/build-QT6-QT6-Debug + Debug + 2 + false + + -DCMAKE_GENERATOR:STRING=Ninja +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_BUILD_TYPE:STRING=Debug +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} + 0 + /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-Debug - + all + false + true CMakeProjectManager.MakeStep - 1 + 1 Build Build ProjectExplorer.BuildSteps.Build - + clean + false + true CMakeProjectManager.MakeStep - 1 + 1 Clean Clean ProjectExplorer.BuildSteps.Clean 2 false + + false Debug CMakeProjectManager.CMakeBuildConfiguration - - CMAKE_BUILD_TYPE:STRING=Release - CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} - CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} - CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} - QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} - - /home/cody/WindNinja/windninja/src/gui/qt6/build-QT6-QT6-Release + Release + 2 + false + + -DCMAKE_GENERATOR:STRING=Ninja +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_BUILD_TYPE:STRING=Release +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} + /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-Release - + all + false + true CMakeProjectManager.MakeStep - 1 + 1 Build Build ProjectExplorer.BuildSteps.Build - + clean + false + true CMakeProjectManager.MakeStep - 1 + 1 Clean Clean ProjectExplorer.BuildSteps.Clean 2 false + + false Release CMakeProjectManager.CMakeBuildConfiguration - - CMAKE_BUILD_TYPE:STRING=RelWithDebInfo - CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} - CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} - CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} - QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} - - /home/cody/WindNinja/windninja/src/gui/qt6/build-QT6-QT6-RelWithDebInfo + RelWithDebInfo + 2 + false + + -DCMAKE_GENERATOR:STRING=Ninja +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} + /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-RelWithDebInfo - + all + false + true CMakeProjectManager.MakeStep - 1 + 1 Build Build ProjectExplorer.BuildSteps.Build - + clean + false + true CMakeProjectManager.MakeStep - 1 + 1 Clean Clean ProjectExplorer.BuildSteps.Clean 2 false + + false Release with Debug Information CMakeProjectManager.CMakeBuildConfiguration - - CMAKE_BUILD_TYPE:STRING=MinSizeRel - CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} - CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} - CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} - QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} - - /home/cody/WindNinja/windninja/src/gui/qt6/build-QT6-QT6-MinSizeRel + RelWithDebInfo + 2 + false + + -DCMAKE_GENERATOR:STRING=Ninja +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} + 0 + /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-Profile + + + + + all + + false + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Profile + CMakeProjectManager.CMakeBuildConfiguration + + + MinSizeRel + 2 + false + + -DCMAKE_GENERATOR:STRING=Ninja +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_BUILD_TYPE:STRING=MinSizeRel +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} + /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-MinSizeRel - + all + false + true CMakeProjectManager.MakeStep - 1 + 1 Build Build ProjectExplorer.BuildSteps.Build - + clean + false + true CMakeProjectManager.MakeStep - 1 + 1 Clean Clean ProjectExplorer.BuildSteps.Clean 2 false + + false Minimum Size Release CMakeProjectManager.CMakeBuildConfiguration - 4 + 5 - 0 + 0 Deploy Deploy ProjectExplorer.BuildSteps.Deploy 1 + + false ProjectExplorer.DefaultDeployConfiguration - 1 - + 1 - dwarf - - cpu-cycles - - - 250 - - -e - cpu-cycles - --call-graph - dwarf,4096 - -F - 250 - - -F true - 4096 - false - false - 1000 - true - - false - false - false - false - true - 0.01 - 10 - true - kcachegrind - 1 - 25 - - 1 + 0 true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - + 2 - QT6 - CMakeProjectManager.CMakeRunConfiguration.QT6 - QT6 - - false - - false + false + -e cpu-cycles --call-graph dwarf,4096 -F 250 + + ProjectExplorer.CustomExecutableRunConfiguration + + false true - true - false - false true - - /tmp/QtCreator-uOWCgm/qtc-cmake-lqVeEbxH - 1 + 1 ProjectExplorer.Project.TargetCount - 1 + 1 ProjectExplorer.Project.Updater.FileVersion diff --git a/src/gui/qt6/CMakeLists.txt.user:Zone.Identifier b/src/gui/qt6/CMakeLists.txt.user:Zone.Identifier new file mode 100644 index 000000000..e69de29bb diff --git a/src/gui/qt6/CMakeLists.txt:Zone.Identifier b/src/gui/qt6/CMakeLists.txt:Zone.Identifier new file mode 100644 index 000000000..e69de29bb diff --git a/src/gui/qt6/main.cpp b/src/gui/qt6/main.cpp index fd3e53341..58a0a6349 100644 --- a/src/gui/qt6/main.cpp +++ b/src/gui/qt6/main.cpp @@ -2,10 +2,9 @@ #include -int main(int argc, char *argv[]) -{ - QApplication a(argc, argv); - MainWindow w; - w.show(); - return a.exec(); +int main(int argc, char *argv[]) { + QApplication a(argc, argv); + MainWindow w; + w.show(); + return a.exec(); } diff --git a/src/gui/qt6/main.cpp:Zone.Identifier b/src/gui/qt6/main.cpp:Zone.Identifier new file mode 100644 index 000000000..e69de29bb diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index a06fc8e39..df8aa76e6 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -2,14 +2,8 @@ #include "./ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) - : QMainWindow(parent) - , ui(new Ui::MainWindow) -{ - ui->setupUi(this); -} - -MainWindow::~MainWindow() -{ - delete ui; + : QMainWindow(parent), ui(new Ui::MainWindow) { + ui->setupUi(this); } +MainWindow::~MainWindow() { delete ui; } diff --git a/src/gui/qt6/mainwindow.cpp:Zone.Identifier b/src/gui/qt6/mainwindow.cpp:Zone.Identifier new file mode 100644 index 000000000..e69de29bb diff --git a/src/gui/qt6/mainwindow.h b/src/gui/qt6/mainwindow.h index 4643e322a..94cd27c73 100644 --- a/src/gui/qt6/mainwindow.h +++ b/src/gui/qt6/mainwindow.h @@ -4,18 +4,19 @@ #include QT_BEGIN_NAMESPACE -namespace Ui { class MainWindow; } +namespace Ui { +class MainWindow; +} QT_END_NAMESPACE -class MainWindow : public QMainWindow -{ - Q_OBJECT +class MainWindow : public QMainWindow { + Q_OBJECT public: - MainWindow(QWidget *parent = nullptr); - ~MainWindow(); + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); private: - Ui::MainWindow *ui; + Ui::MainWindow *ui; }; #endif // MAINWINDOW_H diff --git a/src/gui/qt6/mainwindow.h:Zone.Identifier b/src/gui/qt6/mainwindow.h:Zone.Identifier new file mode 100644 index 000000000..e69de29bb diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui index b232854ba..6e80a6209 100644 --- a/src/gui/qt6/mainwindow.ui +++ b/src/gui/qt6/mainwindow.ui @@ -14,7 +14,16 @@ MainWindow - + + + + 0 + 0 + 800 + 19 + + + diff --git a/src/gui/qt6/mainwindow.ui:Zone.Identifier b/src/gui/qt6/mainwindow.ui:Zone.Identifier new file mode 100644 index 000000000..e69de29bb From 9ef6719ab3a50b83cb9058272607f322bfcdfe05 Mon Sep 17 00:00:00 2001 From: Codymm03 Date: Tue, 28 Jan 2025 20:17:40 -0700 Subject: [PATCH 008/435] Fixed Naming --- CMakeLists.txt | 2 +- CMakeLists.txt.user | 335 ++++++++++++++----------------------- src/CMakeLists.txt | 3 - src/gui/qt6/CMakeLists.txt | 20 +-- 4 files changed, 141 insertions(+), 219 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d21f09df8..f7c36c237 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -151,7 +151,7 @@ if(WIN32) endif(WIN32) # Ninja executables -option(NINJA_QTGUI "Build Qt GUI" ON) +option(NINJA_QTGUI "Build Qt GUI" OFF) if(NINJA_QTGUI) set(QT_USE_QTMAIN_LIBRARY 1) include(FindQt4) diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user index 52bc0871d..010cdaefc 100644 --- a/CMakeLists.txt.user +++ b/CMakeLists.txt.user @@ -1,14 +1,14 @@ - + EnvironmentId - {f3a83e8a-49e6-4193-9c60-1e85ac4bd4eb} + {ffebe718-7e6c-496a-80e5-5cb3ef92867b} ProjectExplorer.Project.ActiveTarget - 0 + 0 ProjectExplorer.Project.EditorSettings @@ -28,7 +28,7 @@ QmlJSGlobal - 2 + 2 UTF-8 false 4 @@ -37,377 +37,302 @@ true true 1 - 0 - false true false - 2 + 0 true true 0 8 true - false 1 true true true - *.md, *.MD, Makefile false - true - true ProjectExplorer.Project.PluginSettings - - true - false - true - true - true - true - - false - - - 0 - true - - true - true - Builtin.DefaultTidyAndClazy - 14 - true - - - - true - + + true ProjectExplorer.Project.Target.0 - Desktop - Desktop Qt 6.8.0 - Desktop Qt 6.8.0 - qt.qt6.680.linux_gcc_64_kit - 0 - 0 - 0 + QT6 + QT6 + {410b4c54-95c1-4d21-bd01-659bbf2c80f8} + 0 + 0 + 0 - Debug - 2 - false - - -DCMAKE_GENERATOR:STRING=Ninja --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_BUILD_TYPE:STRING=Debug --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} - 0 - /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug + + CMAKE_BUILD_TYPE:STRING=Debug + CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + + /home/cody/devWindNinja/build-windninja-QT6-Debug - + all - false - true - Build CMakeProjectManager.MakeStep - 1 + 1 Build Build ProjectExplorer.BuildSteps.Build - + clean - false - true - Build CMakeProjectManager.MakeStep - 1 + 1 Clean Clean ProjectExplorer.BuildSteps.Clean 2 false - - false Debug CMakeProjectManager.CMakeBuildConfiguration - Release - 2 - false - - -DCMAKE_GENERATOR:STRING=Ninja --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_BUILD_TYPE:STRING=Release --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} - /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release + + CMAKE_BUILD_TYPE:STRING=Release + CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + + /home/cody/devWindNinja/build-windninja-QT6-Release - + all - false - true CMakeProjectManager.MakeStep - 1 + 1 Build Build ProjectExplorer.BuildSteps.Build - + clean - false - true CMakeProjectManager.MakeStep - 1 + 1 Clean Clean ProjectExplorer.BuildSteps.Clean 2 false - - false Release CMakeProjectManager.CMakeBuildConfiguration - RelWithDebInfo - 2 - false - - -DCMAKE_GENERATOR:STRING=Ninja --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} - /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-RelWithDebInfo + + CMAKE_BUILD_TYPE:STRING=RelWithDebInfo + CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + + /home/cody/devWindNinja/build-windninja-QT6-RelWithDebInfo - + all - false - true CMakeProjectManager.MakeStep - 1 + 1 Build Build ProjectExplorer.BuildSteps.Build - + clean - false - true CMakeProjectManager.MakeStep - 1 + 1 Clean Clean ProjectExplorer.BuildSteps.Clean 2 false - - false Release with Debug Information CMakeProjectManager.CMakeBuildConfiguration - RelWithDebInfo - 2 - false - - -DCMAKE_GENERATOR:STRING=Ninja --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} - 0 - /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Profile - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Profile - CMakeProjectManager.CMakeBuildConfiguration - - - MinSizeRel - 2 - false - - -DCMAKE_GENERATOR:STRING=Ninja --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_BUILD_TYPE:STRING=MinSizeRel --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} - /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-MinSizeRel + + CMAKE_BUILD_TYPE:STRING=MinSizeRel + CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + + /home/cody/devWindNinja/build-windninja-QT6-MinSizeRel - + all - false - true CMakeProjectManager.MakeStep - 1 + 1 Build Build ProjectExplorer.BuildSteps.Build - + clean - false - true CMakeProjectManager.MakeStep - 1 + 1 Clean Clean ProjectExplorer.BuildSteps.Clean 2 false - - false Minimum Size Release CMakeProjectManager.CMakeBuildConfiguration - 5 + 4 - 0 + 0 Deploy Deploy ProjectExplorer.BuildSteps.Deploy 1 - - false ProjectExplorer.DefaultDeployConfiguration - 1 + 1 + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F true + 4096 + false + false + 1000 + true - 0 + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 true - + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 2 - false - -e cpu-cycles --call-graph dwarf,4096 -F 250 - + ProjectExplorer.CustomExecutableRunConfiguration - false + + false + + false true + false + false true + + - 1 + 1 ProjectExplorer.Project.TargetCount - 1 + 1 ProjectExplorer.Project.Updater.FileVersion diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2e7a67cc0..6a1a58d80 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -22,9 +22,6 @@ add_subdirectory(ninja) if(NINJA_QTGUI) add_subdirectory(gui) endif(NINJA_QTGUI) -if(NINJA_QT6GUI) - add_subdirectory(gui/qt6) -endif(NINJA_QT6GUI) if(NINJA_CLI) add_subdirectory(cli) endif(NINJA_CLI) diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt index d5005ebe8..8896b062f 100644 --- a/src/gui/qt6/CMakeLists.txt +++ b/src/gui/qt6/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.16) -project(test VERSION 0.1 LANGUAGES CXX) +project(qt6_application VERSION 0.1 LANGUAGES CXX) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) @@ -20,37 +20,37 @@ set(PROJECT_SOURCES ) if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) - qt_add_executable(test + qt_add_executable(qt6_application MANUAL_FINALIZATION ${PROJECT_SOURCES} ) # Define target properties for Android with Qt 6 as: -# set_property(TARGET test APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR +# set_property(TARGET qt6_application APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR # ${CMAKE_CURRENT_SOURCE_DIR}/android) # For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation else() if(ANDROID) - add_library(test SHARED + add_library(qt6_application SHARED ${PROJECT_SOURCES} ) # Define properties for Android with Qt 5 after find_package() calls as: # set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") else() - add_executable(test + add_executable(qt6_application ${PROJECT_SOURCES} ) endif() endif() -target_link_libraries(test PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) +target_link_libraries(qt6_application PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) # Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. # If you are developing for iOS or macOS you should consider setting an # explicit, fixed bundle identifier manually though. if(${QT_VERSION} VERSION_LESS 6.1.0) - set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.test) + set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.qt6_application) endif() -set_target_properties(test PROPERTIES +set_target_properties(qt6_application PROPERTIES ${BUNDLE_ID_OPTION} MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} @@ -59,12 +59,12 @@ set_target_properties(test PROPERTIES ) include(GNUInstallDirs) -install(TARGETS test +install(TARGETS qt6_application BUNDLE DESTINATION . LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) if(QT_VERSION_MAJOR EQUAL 6) - qt_finalize_executable(test) + qt_finalize_executable(qt6_application) endif() From f64c81f52344d0a77d64c7edf57fda8920eaf9e6 Mon Sep 17 00:00:00 2001 From: Austen Harrell Date: Sat, 8 Feb 2025 12:41:44 -0700 Subject: [PATCH 009/435] Initial GUI work --- src/gui/qt6/CMakeLists.txt.user | 100 +++++++++++++++++++++----------- src/gui/qt6/mainwindow.cpp | 51 +++++++++++++++- src/gui/qt6/mainwindow.h | 6 ++ src/gui/qt6/mainwindow.ui | 64 ++++++++++++++++---- 4 files changed, 174 insertions(+), 47 deletions(-) diff --git a/src/gui/qt6/CMakeLists.txt.user b/src/gui/qt6/CMakeLists.txt.user index 7a712353e..439a78685 100644 --- a/src/gui/qt6/CMakeLists.txt.user +++ b/src/gui/qt6/CMakeLists.txt.user @@ -1,6 +1,6 @@ - + EnvironmentId @@ -58,6 +58,35 @@ true + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + false + + + 0 + true + + true + true + Builtin.DefaultTidyAndClazy + 14 + true + + + + true + + + ProjectExplorer.Project.Target.0 @@ -73,14 +102,14 @@ 2 false - -DCMAKE_GENERATOR:STRING=Ninja --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} + -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_GENERATOR:STRING=Ninja -DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} -DCMAKE_BUILD_TYPE:STRING=Debug --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} 0 /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-Debug @@ -92,6 +121,7 @@ false true + Build CMakeProjectManager.MakeStep 1 @@ -108,6 +138,7 @@ false true + Build CMakeProjectManager.MakeStep 1 @@ -128,14 +159,14 @@ 2 false - -DCMAKE_GENERATOR:STRING=Ninja --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} + -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_GENERATOR:STRING=Ninja -DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} -DCMAKE_BUILD_TYPE:STRING=Release --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-Release @@ -182,14 +213,14 @@ 2 false - -DCMAKE_GENERATOR:STRING=Ninja --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} + -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_GENERATOR:STRING=Ninja -DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-RelWithDebInfo @@ -236,14 +267,14 @@ 2 false - -DCMAKE_GENERATOR:STRING=Ninja --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} + -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_GENERATOR:STRING=Ninja -DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} 0 /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-Profile @@ -291,14 +322,14 @@ 2 false - -DCMAKE_GENERATOR:STRING=Ninja --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} + -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_GENERATOR:STRING=Ninja -DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} -DCMAKE_BUILD_TYPE:STRING=MinSizeRel --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-MinSizeRel @@ -364,11 +395,12 @@ false -e cpu-cycles --call-graph dwarf,4096 -F 250 - - ProjectExplorer.CustomExecutableRunConfiguration - + qt6_application + CMakeProjectManager.CMakeRunConfiguration.qt6_application + qt6_application false true + true true 1 diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index df8aa76e6..06aaecb55 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -1,9 +1,58 @@ #include "mainwindow.h" #include "./ui_mainwindow.h" +#include +#include +#include +#include +#include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); + + // Remove window frame + setWindowFlags(Qt::FramelessWindowHint); + + // **Enable transparency while keeping it visible** + setAttribute(Qt::WA_TranslucentBackground); + + // Ensure a minimum size so the window is visible + setMinimumSize(400, 300); + resize(600, 400); + + // Center the window on the screen** + QScreen *screen = QGuiApplication::primaryScreen(); + if (screen) { + QRect screenGeometry = screen->geometry(); + int x = (screenGeometry.width() - width()) / 2; + int y = (screenGeometry.height() - height()) / 2; + move(x, y); + } + + // **Apply a semi-transparent background with rounded corners** + setStyleSheet("background-color: rgba(255, 255, 255, 220); border-radius: 20px;"); + + // Apply initial rounded mask after setting size + applyRoundedCorners(); } -MainWindow::~MainWindow() { delete ui; } +MainWindow::~MainWindow() { + delete ui; +} + +void MainWindow::resizeEvent(QResizeEvent *event) { + QMainWindow::resizeEvent(event); + + applyRoundedCorners(); +} + +void MainWindow::applyRoundedCorners() { + if (width() == 0 || height() == 0) { + return; + } + + int radius = 20; + QPainterPath path; + path.addRoundedRect(rect(), radius, radius); + setMask(QRegion(path.toFillPolygon().toPolygon())); +} diff --git a/src/gui/qt6/mainwindow.h b/src/gui/qt6/mainwindow.h index 94cd27c73..ea0d25e15 100644 --- a/src/gui/qt6/mainwindow.h +++ b/src/gui/qt6/mainwindow.h @@ -2,6 +2,7 @@ #define MAINWINDOW_H #include +#include QT_BEGIN_NAMESPACE namespace Ui { @@ -16,7 +17,12 @@ class MainWindow : public QMainWindow { MainWindow(QWidget *parent = nullptr); ~MainWindow(); +protected: + void resizeEvent(QResizeEvent *event) override; // Handle window resize to maintain rounded corners + private: Ui::MainWindow *ui; + void applyRoundedCorners(); // Function to apply rounded corners }; + #endif // MAINWINDOW_H diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui index 6e80a6209..a301782e5 100644 --- a/src/gui/qt6/mainwindow.ui +++ b/src/gui/qt6/mainwindow.ui @@ -6,25 +6,65 @@ 0 0 - 800 - 600 + 1066 + 537 MainWindow - - - - - 0 - 0 - 800 - 19 - + + + + + + true + + + + 0 + 0 + + + + + 80 + 30 + 461 + 111 + + + + + QLayout::SizeConstraint::SetDefaultConstraint + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + + - From 3e9f7f6dbcdcdb90365988f46d131025e03573f5 Mon Sep 17 00:00:00 2001 From: Austen Harrell Date: Tue, 11 Feb 2025 11:46:09 -0700 Subject: [PATCH 010/435] 2/11 GUI updates --- src/gui/qt6/CMakeLists.txt.user | 75 +- src/gui/qt6/CMakeLists.txt.user.f3a83e8 | 422 + .../.cmake/api/v1/query/cache-v2 | 0 .../.cmake/api/v1/query/cmakeFiles-v1 | 0 .../.cmake/api/v1/query/codemodel-v2 | 0 .../reply/cache-v2-2bd5eb2af276508f9cf6.json | 6903 +++++++++++++++++ .../cmakeFiles-v1-c50b2651e07cb0d132da.json | 2020 +++++ .../codemodel-v2-ae14064b5c5bfb65eb35.json | 79 + ...irectory-.-Debug-1004986b89cddb862e46.json | 45 + .../reply/index-2025-02-08T20-08-26-0866.json | 89 + ...pplication-Debug-ab345562360576f6a3d2.json | 457 ++ ...on_autogen-Debug-5e2568b9da3822075dc1.json | 71 + ...stamp_deps-Debug-813a02102d630b32837c.json | 27 + .../build/Desktop_Qt_6_8_0-Debug/.ninja_deps | Bin 0 -> 1932228 bytes .../build/Desktop_Qt_6_8_0-Debug/.ninja_log | 39 + .../.qt/QtDeploySupport.cmake | 69 + .../.qt/QtDeployTargets.cmake | 2 + .../.qtc/package-manager/LICENSE.conan | 21 + .../.qtc/package-manager/auto-setup.cmake | 272 + .../.qtc/package-manager/conan.cmake | 1026 +++ .../.qtc/package-manager/conan_provider.cmake | 655 ++ .../clangd/index/FILE.h.79AEFC497861DFC5.idx | Bin 0 -> 300 bytes .../clangd/index/QAction.C96EF240B8C97D16.idx | Bin 0 -> 226 bytes .../index/QApplication.6186EE4D00472E1D.idx | Bin 0 -> 244 bytes .../index/QCheckBox.F97C85CD389B142A.idx | Bin 0 -> 238 bytes .../index/QComboBox.E9BD1F66553AE54E.idx | Bin 0 -> 238 bytes .../index/QDateEdit.1363D2C608FAA19C.idx | Bin 0 -> 242 bytes .../clangd/index/QDebug.D6EEDCAB812A108A.idx | Bin 0 -> 226 bytes .../index/QDoubleSpinBox.0C0EB87BDB251E24.idx | Bin 0 -> 242 bytes .../index/QGridLayout.EB133BD173F64EFA.idx | Bin 0 -> 242 bytes .../index/QGroupBox.B9BAA2414EC9EC9A.idx | Bin 0 -> 238 bytes .../QGuiApplication.40A6B5E7DDCCAB10.idx | Bin 0 -> 242 bytes .../index/QHBoxLayout.59B98A56E1270903.idx | Bin 0 -> 240 bytes .../index/QHeaderView.8CEFA40187CA5B18.idx | Bin 0 -> 242 bytes .../index/QLineEdit.4DF8C97A081C5AE8.idx | Bin 0 -> 238 bytes .../clangd/index/QList.43B29E3EAD15F037.idx | Bin 0 -> 224 bytes .../index/QMainWindow.9E6FBF24FCAA6A21.idx | Bin 0 -> 242 bytes .../clangd/index/QMenu.DCFD8A588257C352.idx | Bin 0 -> 230 bytes .../index/QMenuBar.3F9BED9766BFE45B.idx | Bin 0 -> 236 bytes .../clangd/index/QObject.FD42F5FB68E8C303.idx | Bin 0 -> 228 bytes .../index/QPainterPath.3AC546BDB95A3F0F.idx | Bin 0 -> 236 bytes .../index/QPushButton.2BC29870A6CB475C.idx | Bin 0 -> 242 bytes .../index/QRadioButton.A434882CF2D0EBE4.idx | Bin 0 -> 244 bytes .../clangd/index/QRect.6DA68D4D1D3E2990.idx | Bin 0 -> 224 bytes .../clangd/index/QRegion.130B003E89FE9983.idx | Bin 0 -> 226 bytes .../index/QResizeEvent.E67339F1D6D32BCD.idx | Bin 0 -> 230 bytes .../clangd/index/QScreen.711C5DF3EEB221C5.idx | Bin 0 -> 226 bytes .../index/QScrollArea.C483AA522C6CD262.idx | Bin 0 -> 242 bytes .../clangd/index/QSize.40E81C35EAEAA1C2.idx | Bin 0 -> 224 bytes .../clangd/index/QSizeF.7B926032F3663078.idx | Bin 0 -> 224 bytes .../index/QSpacerItem.70C1D6BAB0508458.idx | Bin 0 -> 242 bytes .../index/QSpinBox.910CEC95EC8A5F86.idx | Bin 0 -> 236 bytes .../index/QSplitter.417D2DBE07C04B3F.idx | Bin 0 -> 238 bytes .../index/QStackedWidget.E41334FDB9386E84.idx | Bin 0 -> 248 bytes .../index/QTextEdit.149E81496A7D8D7D.idx | Bin 0 -> 238 bytes .../index/QTimeEdit.4B41D1477297003C.idx | Bin 0 -> 242 bytes .../index/QTransform.624B53E37B6109A7.idx | Bin 0 -> 232 bytes .../index/QTreeWidget.DB007D1CE25E1CE0.idx | Bin 0 -> 242 bytes .../index/QVBoxLayout.970ACCF300B40607.idx | Bin 0 -> 240 bytes .../index/QVariant.94E74B139BCD44CD.idx | Bin 0 -> 230 bytes .../clangd/index/QWidget.D763B9214B20E979.idx | Bin 0 -> 234 bytes .../index/__FILE.h.3324F85E382E036A.idx | Bin 0 -> 162 bytes .../index/__fpos64_t.h.23C43F442076149A.idx | Bin 0 -> 302 bytes .../index/__fpos_t.h.ECFBE9EEDAAB6648.idx | Bin 0 -> 300 bytes .../index/__locale_t.h.40EA38A2DCA58618.idx | Bin 0 -> 166 bytes .../index/__mbstate_t.h.6C32CF66236653D7.idx | Bin 0 -> 168 bytes .../index/__sigset_t.h.72131E8056C7E284.idx | Bin 0 -> 202 bytes ...darg___gnuc_va_list.h.43B1F3B1D6B4DAA2.idx | Bin 0 -> 222 bytes .../__stdarg___va_copy.h.F5C63B16CFDA2191.idx | Bin 0 -> 218 bytes .../__stdarg_va_arg.h.52F08F71EEB3BDB3.idx | Bin 0 -> 260 bytes .../__stdarg_va_copy.h.E522E3A1343529C4.idx | Bin 0 -> 216 bytes .../__stdarg_va_list.h.E375216D095D7803.idx | Bin 0 -> 238 bytes ..._stddef_max_align_t.h.4536C6003D50E15C.idx | Bin 0 -> 348 bytes .../__stddef_null.h.9C59159E32851BAA.idx | Bin 0 -> 226 bytes .../__stddef_nullptr_t.h.7623FED4A13822AD.idx | Bin 0 -> 218 bytes .../__stddef_offsetof.h.1EE6274699D52A78.idx | Bin 0 -> 216 bytes .../__stddef_ptrdiff_t.h.FCE284AD03D60196.idx | Bin 0 -> 294 bytes .../__stddef_size_t.h.7413848320D9984C.idx | Bin 0 -> 302 bytes .../__stddef_wchar_t.h.129FD7EE3A286014.idx | Bin 0 -> 192 bytes .../index/algorithm.1CE1C5E7A2CC8947.idx | Bin 0 -> 436 bytes .../index/algorithmfwd.h.7598BC438C9F2E18.idx | Bin 0 -> 17090 bytes .../clangd/index/align.h.EF3672F59F577484.idx | Bin 0 -> 1498 bytes .../aligned_buffer.h.D25F294C09A9BD51.idx | Bin 0 -> 332 bytes .../index/alloc_traits.h.888093B2650D973C.idx | Bin 0 -> 8838 bytes .../index/alloc_traits.h.A03678EA5038239B.idx | Bin 0 -> 708 bytes .../index/alloca.h.793370BF9878CFB6.idx | Bin 0 -> 618 bytes .../allocated_ptr.h.4C2F2E5344DBBE09.idx | Bin 0 -> 1136 bytes .../index/allocator.h.726B26F70D1E9A82.idx | Bin 0 -> 5898 bytes .../clangd/index/array.F4CC01525F44E658.idx | Bin 0 -> 10946 bytes .../index/assert.h.9895EEC17E1D2A2B.idx | Bin 0 -> 534 bytes .../index/assertions.h.1D646B13C15CF849.idx | Bin 0 -> 374 bytes .../clangd/index/atomic.659F85E5DD2BCAE5.idx | Bin 0 -> 37530 bytes .../index/atomic_base.h.BE2CD511127AE324.idx | Bin 0 -> 8948 bytes ...ic_lockfree_defines.h.2D8FA2BBB9BFE893.idx | Bin 0 -> 398 bytes ...atomic_wide_counter.h.397D66B6BECC0AA2.idx | Bin 0 -> 170 bytes .../index/atomic_word.h.8B32DB244716470B.idx | Bin 0 -> 218 bytes .../index/atomicity.h.409EF4C070658F73.idx | Bin 0 -> 640 bytes .../index/auto_ptr.h.07E293599CEBBF74.idx | Bin 0 -> 5688 bytes .../index/basic_string.h.4F91164A9845D8E7.idx | Bin 0 -> 78488 bytes .../basic_string.tcc.967E4E5D61DA5282.idx | Bin 0 -> 50864 bytes .../bessel_function.tcc.9171F62D1FC8591A.idx | Bin 0 -> 16028 bytes .../beta_function.tcc.157C17AA6D54605D.idx | Bin 0 -> 1706 bytes .../index/binders.h.B7909204B7953DFB.idx | Bin 0 -> 3674 bytes .../clangd/index/bit.2A91B049774121D4.idx | Bin 0 -> 8214 bytes .../index/byteswap.h.E57FF553A16DFAFC.idx | Bin 0 -> 448 bytes .../index/c++allocator.h.00F4CFDD575112F2.idx | Bin 0 -> 240 bytes .../index/c++config.h.A139A8B32F03163E.idx | Bin 0 -> 9548 bytes .../index/c++locale.h.9D67E3B33BDF16E2.idx | Bin 0 -> 572 bytes .../clangd/index/cassert.C302028D9A1C4921.idx | Bin 0 -> 242 bytes .../clangd/index/cctype.76C6F247C1380A5B.idx | Bin 0 -> 1520 bytes .../clangd/index/cdefs.h.E4D450DF98C1338F.idx | Bin 0 -> 3310 bytes .../clangd/index/cerrno.5BD437BDECC7A78D.idx | Bin 0 -> 302 bytes .../index/char_traits.h.A86DDC004D15BD88.idx | Bin 0 -> 11402 bytes .../index/charconv.h.869BEB8F43DFD6D7.idx | Bin 0 -> 4148 bytes .../clangd/index/chrono.21DD8193C9F802BB.idx | Bin 0 -> 32916 bytes .../clangd/index/climits.CEDA74AF679CB63C.idx | Bin 0 -> 406 bytes .../clangd/index/clocale.5FF46E6760ACF029.idx | Bin 0 -> 548 bytes .../index/clock_t.h.65AFE5BA7329BCD4.idx | Bin 0 -> 320 bytes .../index/clockid_t.h.5545878511E5BAF1.idx | Bin 0 -> 340 bytes .../clangd/index/cmath.5492EF8C588C18A0.idx | Bin 0 -> 33596 bytes .../concept_check.h.A4C7BDCF159AD4DF.idx | Bin 0 -> 376 bytes .../index/concurrence.h.08E9E50104EBC4C9.idx | Bin 0 -> 1270 bytes ...okie_io_functions_t.h.5A08066DC7F05542.idx | Bin 0 -> 1716 bytes .../cpp_type_traits.h.B5C50C37F2A36E3F.idx | Bin 0 -> 656 bytes .../index/cpu-set.h.B40F3E2869BE4FF9.idx | Bin 0 -> 892 bytes .../index/cpu_defines.h.E7463FB44761786A.idx | Bin 0 -> 172 bytes .../clangd/index/cstddef.287A68F2FBF12AAD.idx | Bin 0 -> 2806 bytes .../clangd/index/cstdint.47B9166DA94B05BD.idx | Bin 0 -> 2936 bytes .../clangd/index/cstdio.325B5C34B96CF05A.idx | Bin 0 -> 4602 bytes .../clangd/index/cstdlib.126A0D14F38BA60B.idx | Bin 0 -> 4716 bytes .../clangd/index/cstring.DBEE10CA3A7F86F4.idx | Bin 0 -> 2408 bytes .../clangd/index/ctime.D0C81AD2723230F7.idx | Bin 0 -> 1512 bytes .../clangd/index/ctype.h.B268CEA0CECCFC59.idx | Bin 0 -> 4532 bytes .../clangd/index/cwchar.A3402FA4C9A9F672.idx | Bin 0 -> 7308 bytes .../cxxabi_forced.h.B8AF18F1501F1585.idx | Bin 0 -> 158 bytes ...xabi_init_exception.h.542C953E6C829C53.idx | Bin 0 -> 528 bytes .../ell_integral.tcc.28856E23765B109F.idx | Bin 0 -> 16768 bytes ...ble_special_members.h.74E7B224F8375F62.idx | Bin 0 -> 318 bytes .../index/endian.h.1FC6A4D6D2846204.idx | Bin 0 -> 826 bytes .../index/endian.h.20F8E286A486EE09.idx | Bin 0 -> 376 bytes .../index/endianness.h.F2D2CC6251A4EAFA.idx | Bin 0 -> 206 bytes .../index/erase_if.h.72B55D60DDD77C56.idx | Bin 0 -> 716 bytes .../index/errno-base.h.23FC55A99C73A727.idx | Bin 0 -> 932 bytes .../clangd/index/errno.h.063064A523A47758.idx | Bin 0 -> 362 bytes .../clangd/index/errno.h.10013861918E601A.idx | Bin 0 -> 2478 bytes .../clangd/index/errno.h.19BCCCD58DA5623E.idx | Bin 0 -> 794 bytes .../clangd/index/errno.h.33F6986A3C61A3BF.idx | Bin 0 -> 182 bytes .../clangd/index/errno.h.3F8ECD84FB880B64.idx | Bin 0 -> 176 bytes .../error_constants.h.7739DB6650F792ED.idx | Bin 0 -> 8514 bytes .../index/error_t.h.58D3895A591B592D.idx | Bin 0 -> 228 bytes .../index/exception.3BCB02E313BF87C9.idx | Bin 0 -> 3272 bytes .../index/exception.h.563622B7F9DE0D64.idx | Bin 0 -> 1840 bytes .../exception_defines.h.CED4C5F04DCEC0A5.idx | Bin 0 -> 230 bytes .../exception_ptr.h.6BAAB8CAEF920B5D.idx | Bin 0 -> 1952 bytes .../execution_defs.h.186F44494DB49E13.idx | Bin 0 -> 840 bytes .../exp_integral.tcc.3BFA54CF549FBF5E.idx | Bin 0 -> 8308 bytes .../features-time64.h.BFBA8D3CA0316037.idx | Bin 0 -> 250 bytes .../index/features.h.5A4ED7C80201A723.idx | Bin 0 -> 2578 bytes .../floatn-common.h.0FE8C4DDCB84E088.idx | Bin 0 -> 1778 bytes .../index/floatn.h.DA21C738CC1B6ABF.idx | Bin 0 -> 468 bytes .../flt-eval-method.h.8058951BDB657B4B.idx | Bin 0 -> 188 bytes .../index/fp-fast.h.72CDF40E7648EF43.idx | Bin 0 -> 180 bytes .../index/fp-logb.h.EA7AC5545F14BC26.idx | Bin 0 -> 204 bytes .../index/functexcept.h.807459FDC2AF6C4E.idx | Bin 0 -> 372 bytes .../index/functional.ACE7A23DFA6A7C81.idx | Bin 0 -> 32794 bytes .../functional_hash.h.412E38477D218834.idx | Bin 0 -> 5606 bytes .../index/gamma.tcc.CA2DC1F3C7EBE19F.idx | Bin 0 -> 6946 bytes ...glue_algorithm_defs.h.C368EC8DE1036B81.idx | Bin 0 -> 22460 bytes .../glue_memory_defs.h.6519B6B389AF4A23.idx | Bin 0 -> 2502 bytes .../glue_numeric_defs.h.FCCD2FC54DA0DE29.idx | Bin 0 -> 5972 bytes .../index/gthr-default.h.B9D1A861FCC1A40F.idx | Bin 0 -> 2126 bytes .../clangd/index/gthr.h.224F0F09E7E4961C.idx | Bin 0 -> 270 bytes .../index/hash_bytes.h.274FC085A1115B4A.idx | Bin 0 -> 374 bytes .../index/hashtable.h.DC8C92A807F065D3.idx | Bin 0 -> 17128 bytes .../hashtable_policy.h.40A3B6E69632E8E1.idx | Bin 0 -> 10368 bytes .../hypergeometric.tcc.62C6EC35332E0AAE.idx | Bin 0 -> 21484 bytes .../initializer_list.487DC3AA34672C18.idx | Bin 0 -> 1840 bytes .../index/invoke.h.DF3BCAA5A6E33E7C.idx | Bin 0 -> 822 bytes .../index/ios_base.h.979B6DBB9A7C8F35.idx | Bin 0 -> 17036 bytes .../clangd/index/iosfwd.F621C0E74BE8B067.idx | Bin 0 -> 5278 bytes .../index/iscanonical.h.C53E44E13856FCEA.idx | Bin 0 -> 592 bytes .../index/iterator.38B33E1892DEEBB8.idx | Bin 0 -> 708 bytes ...legendre_function.tcc.64E8C808CA5BAA8E.idx | Bin 0 -> 2918 bytes .../libc-header-start.h.E88219B53B0B0BF5.idx | Bin 0 -> 520 bytes ...ibm-simd-decl-stubs.h.06B70A57602EA3C8.idx | Bin 0 -> 6772 bytes .../clangd/index/limits.B12624C6106406AC.idx | Bin 0 -> 58282 bytes .../index/limits.h.1DFE7D0FE6434B13.idx | Bin 0 -> 1018 bytes .../index/limits.h.7CEA6B3592906D3F.idx | Bin 0 -> 820 bytes .../index/limits.h.C293B8934AC926BB.idx | Bin 0 -> 438 bytes .../clangd/index/list.168C0A1C22C8B14B.idx | Bin 0 -> 686 bytes .../index/list.tcc.94671DB6D4C8E664.idx | Bin 0 -> 30468 bytes .../index/local_lim.h.2CFD657F256B117E.idx | Bin 0 -> 688 bytes .../index/locale.h.E3C63D05A4E78516.idx | Bin 0 -> 478 bytes .../index/locale.h.F1B51844858762D2.idx | Bin 0 -> 4820 bytes .../locale_classes.h.9512D5BF9F8BFC78.idx | Bin 0 -> 7392 bytes .../locale_classes.tcc.A7CA62888BCB33BF.idx | Bin 0 -> 8078 bytes .../index/locale_t.h.557516A6B361170F.idx | Bin 0 -> 302 bytes .../index/localefwd.h.A3B7C978BF60EC19.idx | Bin 0 -> 5180 bytes .../index/long-double.h.ACD735A1862B6BF8.idx | Bin 0 -> 162 bytes .../index/main.cpp.EEBB228B1106B2B1.idx | Bin 0 -> 2154 bytes .../index/mainwindow.cpp.11CF4E2CF1316CEA.idx | Bin 0 -> 2664 bytes .../index/mainwindow.h.F0118C6BEFDCBB46.idx | Bin 0 -> 1186 bytes .../clangd/index/map.8C22362DDFC69B22.idx | Bin 0 -> 904 bytes .../index/math-vector.h.B3EAC58DA1700969.idx | Bin 0 -> 238 bytes .../clangd/index/math.h.DE4D39AAF5AC2C76.idx | Bin 0 -> 10736 bytes ...ls-helper-functions.h.934C8C52064E404C.idx | Bin 0 -> 380 bytes .../mathcalls-narrow.h.EF4B0E9378BD4EE1.idx | Bin 0 -> 4872 bytes .../index/mathcalls.h.655A2220FF0677F8.idx | Bin 0 -> 63036 bytes .../index/mbstate_t.h.F9237FB65FF84D5A.idx | Bin 0 -> 306 bytes .../clangd/index/memory.768AFB22B9D6A62F.idx | Bin 0 -> 2576 bytes .../index/memoryfwd.h.935D7DF208FDC906.idx | Bin 0 -> 408 bytes ...ified_bessel_func.tcc.9B1532CEE9C375E7.idx | Bin 0 -> 8266 bytes .../clangd/index/move.h.89F6D662F9EAEF16.idx | Bin 0 -> 3712 bytes .../nested_exception.h.10DC70ED9F08D9D1.idx | Bin 0 -> 1940 bytes .../clangd/index/new.8A4066321F7AF016.idx | Bin 0 -> 6628 bytes .../new_allocator.h.D9A43F0C582D8F82.idx | Bin 0 -> 1336 bytes .../index/node_handle.h.CDEC5F05C546600C.idx | Bin 0 -> 3882 bytes .../clangd/index/numeric.C9B73B80E066D1B7.idx | Bin 0 -> 32670 bytes .../numeric_traits.h.71952CE5B96E8B47.idx | Bin 0 -> 526 bytes .../index/optional.3D6E41A544334FEE.idx | Bin 0 -> 16854 bytes .../index/os_defines.h.EA4549991D07B32F.idx | Bin 0 -> 356 bytes .../ostream_insert.h.8302B2D6873DA4BB.idx | Bin 0 -> 1460 bytes .../parse_numbers.h.A6E2C9E96411584C.idx | Bin 0 -> 1196 bytes .../poly_hermite.tcc.9FD6029D55EB67A1.idx | Bin 0 -> 356 bytes .../poly_laguerre.tcc.BFD895219AA7B68C.idx | Bin 0 -> 4478 bytes .../index/posix1_lim.h.D94E4687FC9359FF.idx | Bin 0 -> 1300 bytes .../index/posix2_lim.h.430DA38A1F301F29.idx | Bin 0 -> 574 bytes .../index/postypes.h.6906AFED0EA1F1B4.idx | Bin 0 -> 3710 bytes .../predefined_ops.h.9786B9F84B9462DC.idx | Bin 0 -> 1536 bytes .../index/pstl_config.h.CBBF88553BC795EF.idx | Bin 0 -> 1212 bytes .../index/pthread.h.022320E0CE01A46D.idx | Bin 0 -> 44784 bytes ...d_stack_min-dynamic.h.6F432801F0DF58B7.idx | Bin 0 -> 304 bytes .../pthreadtypes-arch.h.9E138C411BE448A0.idx | Bin 0 -> 508 bytes .../index/pthreadtypes.h.BAA8217B62BB6E86.idx | Bin 0 -> 2172 bytes .../index/ptr_traits.h.F78C58E579CDA022.idx | Bin 0 -> 1428 bytes .../q20functional.h.3B35B426F14AFB98.idx | Bin 0 -> 626 bytes .../index/q20iterator.h.C23CF838032BAB9A.idx | Bin 0 -> 1074 bytes .../index/q20memory.h.EF3BBE5C99993FC9.idx | Bin 0 -> 1718 bytes .../q20type_traits.h.80FD58CC3424A64D.idx | Bin 0 -> 1208 bytes .../index/q23utility.h.02F4E3C4153F6F6E.idx | Bin 0 -> 1246 bytes .../qabstractbutton.h.CFA25BA0E844A352.idx | Bin 0 -> 5872 bytes ...bstractitemdelegate.h.8D2FFF50AF7F61B9.idx | Bin 0 -> 3748 bytes .../qabstractitemmodel.h.D4BB35C1B1D9316E.idx | Bin 0 -> 33918 bytes .../qabstractitemview.h.89AAA16972132E25.idx | Bin 0 -> 22458 bytes ...qabstractscrollarea.h.E7EE5DCA0672BDB7.idx | Bin 0 -> 6942 bytes .../qabstractslider.h.ED9DE327D105CA98.idx | Bin 0 -> 5792 bytes .../qabstractspinbox.h.613B7347B045F85C.idx | Bin 0 -> 9460 bytes .../index/qaction.h.DEB42C6F940315D3.idx | Bin 0 -> 10402 bytes .../index/qalgorithms.h.0752FD13E8EF319B.idx | Bin 0 -> 5200 bytes .../qanystringview.h.9067A8646C0AC845.idx | Bin 0 -> 15266 bytes .../index/qapplication.h.45685CEE1BB77E0E.idx | Bin 0 -> 6740 bytes .../index/qarraydata.h.3E149019C53099F4.idx | Bin 0 -> 6896 bytes .../qarraydataops.h.CC375FBAF7851A50.idx | Bin 0 -> 22880 bytes .../qarraydatapointer.h.1128F9E57EA464F8.idx | Bin 0 -> 14110 bytes .../index/qassert.h.BE86327E75D27D1C.idx | Bin 0 -> 1794 bytes .../index/qatomic.h.F284092535A24518.idx | Bin 0 -> 2256 bytes .../qatomic_cxx11.h.B64FC8F5E10657CA.idx | Bin 0 -> 9000 bytes .../index/qbasicatomic.h.2DAC357DEDE2DFBB.idx | Bin 0 -> 12298 bytes .../qbindingstorage.h.73A75A3151EC9C78.idx | Bin 0 -> 3430 bytes .../index/qbitmap.h.9730D82D851365B4.idx | Bin 0 -> 2796 bytes .../index/qboxlayout.h.FBE787986A66C425.idx | Bin 0 -> 6460 bytes .../index/qbrush.h.3E2C08834AE7F6F3.idx | Bin 0 -> 31502 bytes .../index/qbytearray.h.56EB072B89ABD6ED.idx | Bin 0 -> 41932 bytes ...bytearrayalgorithms.h.40A38FF36A118743.idx | Bin 0 -> 8404 bytes .../qbytearraylist.h.E2B24FE3ED7DD6E0.idx | Bin 0 -> 2162 bytes .../qbytearrayview.h.1720D983E04E0E57.idx | Bin 0 -> 20026 bytes .../index/qcalendar.h.FE372A9F8303D252.idx | Bin 0 -> 7788 bytes .../clangd/index/qchar.h.0D786C17186DA7C6.idx | Bin 0 -> 43880 bytes .../index/qcheckbox.h.EA09085F3E851E29.idx | Bin 0 -> 2990 bytes .../index/qcolor.h.F91F6990224F234F.idx | Bin 0 -> 38242 bytes .../index/qcombobox.h.EB292BE8316348A9.idx | Bin 0 -> 12136 bytes .../index/qcompare.h.CCB7FA596FC8E08E.idx | Bin 0 -> 24078 bytes .../qcompare_impl.h.AC2E30841FC04F9A.idx | Bin 0 -> 940 bytes .../qcomparehelpers.h.99315EB410FD5E10.idx | Bin 0 -> 65592 bytes .../qcompilerdetection.h.8C6C229C1FFFC2B5.idx | Bin 0 -> 4568 bytes .../index/qconfig.h.846337A2147A75C2.idx | Bin 0 -> 1484 bytes .../qconstructormacros.h.4C4C4817E1171CFA.idx | Bin 0 -> 276 bytes .../qcontainerfwd.h.5FE05033C8BD3C55.idx | Bin 0 -> 2306 bytes .../qcontainerinfo.h.F5D0CD90AC279455.idx | Bin 0 -> 8180 bytes ...containertools_impl.h.13D5DB46CB94E3B1.idx | Bin 0 -> 10560 bytes .../qcontiguouscache.h.200BAC9C050661F8.idx | Bin 0 -> 57094 bytes .../qcoreapplication.h.9495311E207C3FA5.idx | Bin 0 -> 9878 bytes ...pplication_platform.h.025BC7505FB180D1.idx | Bin 0 -> 496 bytes .../index/qcoreevent.h.97F97F5E1881122E.idx | Bin 0 -> 34650 bytes .../index/qcursor.h.F8060C576930CE8D.idx | Bin 0 -> 4558 bytes .../qdarwinhelpers.h.1BF874FD5FB19478.idx | Bin 0 -> 294 bytes .../index/qdatastream.h.FD38833A530EF87D.idx | Bin 0 -> 27572 bytes .../index/qdatetime.h.4B296C80495006DF.idx | Bin 0 -> 29440 bytes .../qdatetimeedit.h.9A943232AF384486.idx | Bin 0 -> 12388 bytes .../qdeadlinetimer.h.1686DACE8E30BA49.idx | Bin 0 -> 15720 bytes .../index/qdebug.h.2855F0F64879D845.idx | Bin 0 -> 56828 bytes .../qelapsedtimer.h.8A5D128937FAC7B3.idx | Bin 0 -> 3530 bytes .../index/qendian.h.A9F85A81B249EBA5.idx | Bin 0 -> 26152 bytes .../index/qevent.h.35074D32CC775406.idx | Bin 0 -> 63966 bytes .../index/qeventloop.h.452FC337516C45B3.idx | Bin 0 -> 5780 bytes .../index/qeventpoint.h.6743609403519E70.idx | Bin 0 -> 7828 bytes .../qexceptionhandling.h.B2ECE802A63F4CD5.idx | Bin 0 -> 1036 bytes .../index/qflags.h.E597625F7229645A.idx | Bin 0 -> 71804 bytes .../index/qfloat16.h.0177AFB713EA8EF7.idx | Bin 0 -> 28670 bytes .../clangd/index/qfont.h.7D9F66D042F7B11C.idx | Bin 0 -> 22514 bytes .../index/qfontinfo.h.5A04B1B87E9B68F5.idx | Bin 0 -> 2862 bytes .../index/qfontmetrics.h.6FB4D77108AC7E22.idx | Bin 0 -> 8750 bytes .../index/qforeach.h.2158A919387EF180.idx | Bin 0 -> 2552 bytes .../index/qframe.h.AF3A096A5F7755E6.idx | Bin 0 -> 5244 bytes ...unctionaltools_impl.h.1D5E5ED3A5B51387.idx | Bin 0 -> 1956 bytes .../qfunctionpointer.h.DAE0E999D3F1D06C.idx | Bin 0 -> 388 bytes .../qgenericatomic.h.6A0C22DFBC3BD1D2.idx | Bin 0 -> 1226 bytes .../index/qglobal.h.1BB3F92FF7EB2D4E.idx | Bin 0 -> 3568 bytes .../qglobalstatic.h.D70EDA33C1796626.idx | Bin 0 -> 3536 bytes .../index/qgridlayout.h.E07D45D1136B3AC3.idx | Bin 0 -> 5124 bytes .../index/qgroupbox.h.26FCBE2A624361CD.idx | Bin 0 -> 3614 bytes .../qguiapplication.h.785D76C858739A91.idx | Bin 0 -> 8956 bytes ...pplication_platform.h.E00644C1147E9DED.idx | Bin 0 -> 2976 bytes .../clangd/index/qhash.h.F10ABA907D59B368.idx | Bin 0 -> 123378 bytes .../qhashfunctions.h.EFDA8E5E332BD372.idx | Bin 0 -> 34026 bytes .../index/qheaderview.h.23F2BD834D7DB292.idx | Bin 0 -> 12500 bytes .../clangd/index/qicon.h.160AB644AFBFC44A.idx | Bin 0 -> 21324 bytes .../index/qimage.h.67FD69AB005377EE.idx | Bin 0 -> 20964 bytes .../index/qinputdevice.h.339E51D2AAC381C9.idx | Bin 0 -> 6788 bytes .../index/qinputmethod.h.47A60324C18186B8.idx | Bin 0 -> 4078 bytes .../index/qiodevice.h.9388E485C0A01200.idx | Bin 0 -> 7180 bytes .../qiodevicebase.h.57AFACBC3D314B1B.idx | Bin 0 -> 1474 bytes ...qitemselectionmodel.h.BA92BE56EEB93401.idx | Bin 0 -> 13350 bytes .../index/qiterable.h.29A457745ACC4B86.idx | Bin 0 -> 15276 bytes .../index/qiterator.h.420D4A13F79F0A7F.idx | Bin 0 -> 11356 bytes .../index/qkeysequence.h.DCEACEDD22610193.idx | Bin 0 -> 11968 bytes .../qlatin1stringview.h.5C4795D24DAF6F91.idx | Bin 0 -> 20396 bytes .../index/qlayout.h.F0BFE06293DD1904.idx | Bin 0 -> 7800 bytes .../index/qlayoutitem.h.8BB060701DDA612A.idx | Bin 0 -> 7952 bytes .../clangd/index/qline.h.95FA542EC7493437.idx | Bin 0 -> 14544 bytes .../index/qlineedit.h.D36FB34746B2A0B4.idx | Bin 0 -> 11724 bytes .../clangd/index/qlist.h.F1E0E6304468B4B5.idx | Bin 0 -> 71410 bytes .../index/qlocale.h.FBB782BEDF501C8B.idx | Bin 0 -> 92972 bytes .../index/qlogging.h.78CC882A01A41DDF.idx | Bin 0 -> 7760 bytes .../index/qmainwindow.h.107F43AEE6E4074C.idx | Bin 0 -> 9230 bytes .../index/qmalloc.h.AC2AC112265B866C.idx | Bin 0 -> 1176 bytes .../clangd/index/qmap.h.E1B18DE791B411CB.idx | Bin 0 -> 70528 bytes .../index/qmargins.h.B935BC6EAE3C8C16.idx | Bin 0 -> 21888 bytes .../clangd/index/qmath.h.24E8DD8C22CC4E56.idx | Bin 0 -> 10676 bytes .../clangd/index/qmenu.h.0FABB7AFACD22F6B.idx | Bin 0 -> 9856 bytes .../index/qmenubar.h.21DA5516EFFBE0E1.idx | Bin 0 -> 5814 bytes .../qmetacontainer.h.D0F3C3B65E99E5EB.idx | Bin 0 -> 33554 bytes .../index/qmetatype.h.DAD15CFA6FC9BFF9.idx | Bin 0 -> 144004 bytes .../index/qminmax.h.4D5B665F22788521.idx | Bin 0 -> 1958 bytes .../index/qnamespace.h.9AED58CB1F607D2F.idx | Bin 0 -> 155292 bytes .../qnativeinterface.h.5166B0A1D4E3018A.idx | Bin 0 -> 4360 bytes .../index/qnumeric.h.CBE0FAE461F0112D.idx | Bin 0 -> 6272 bytes .../index/qobject.h.2B0D8C99B5F9D6E8.idx | Bin 0 -> 21536 bytes .../index/qobject_impl.h.E498A2D63752432C.idx | Bin 0 -> 2342 bytes .../index/qobjectdefs.h.4CE94A4E1E89C28E.idx | Bin 0 -> 616 bytes .../index/qobjectdefs.h.8F45D7C545CD3DB7.idx | Bin 0 -> 25918 bytes .../qobjectdefs_impl.h.3D23F86B673417A6.idx | Bin 0 -> 31906 bytes .../index/qoverload.h.F7064D60B84B4724.idx | Bin 0 -> 1668 bytes .../index/qpaintdevice.h.83AE26BC9675EC56.idx | Bin 0 -> 4696 bytes .../index/qpainterpath.h.1D7575F9BD81DC74.idx | Bin 0 -> 16402 bytes .../clangd/index/qpair.h.7E4415438F6A17FE.idx | Bin 0 -> 696 bytes .../index/qpalette.h.A0D6C68FE4FD52CF.idx | Bin 0 -> 11702 bytes .../clangd/index/qpen.h.D10BBA7A213EEDEF.idx | Bin 0 -> 5470 bytes .../index/qpixelformat.h.1735C8D208876A87.idx | Bin 0 -> 18858 bytes .../index/qpixmap.h.DA237644164D7D41.idx | Bin 0 -> 9664 bytes .../index/qpoint.h.65D6EB4FC892AB96.idx | Bin 0 -> 17046 bytes .../qpointingdevice.h.D088C170EE78F2C1.idx | Bin 0 -> 7474 bytes .../index/qpolygon.h.BE82A0C1B4A66723.idx | Bin 0 -> 8622 bytes ...qprocessordetection.h.7DB29B574BD1E9F3.idx | Bin 0 -> 402 bytes .../index/qpushbutton.h.B13C1F0959DD8453.idx | Bin 0 -> 3522 bytes .../index/qradiobutton.h.54424D6AB6222449.idx | Bin 0 -> 2264 bytes .../clangd/index/qrect.h.8BDEDE6AD19146A9.idx | Bin 0 -> 35532 bytes .../index/qrefcount.h.E2B7FA019F51035F.idx | Bin 0 -> 1156 bytes .../index/qregion.h.1A71AF3EB76D2D94.idx | Bin 0 -> 8604 bytes .../qregularexpression.h.AA37823FD2F57F30.idx | Bin 0 -> 20838 bytes .../clangd/index/qrgb.h.4A29C9FC342151A3.idx | Bin 0 -> 2054 bytes .../index/qrgba64.h.7EAC3B23774F706F.idx | Bin 0 -> 7656 bytes .../index/qrubberband.h.18E73D8C8F6D4C52.idx | Bin 0 -> 3148 bytes .../qscopedpointer.h.6298AF6754041B9D.idx | Bin 0 -> 6296 bytes .../index/qscopeguard.h.188951AB2A4E8E0E.idx | Bin 0 -> 1742 bytes .../index/qscreen.h.ED72C2867F5AA1B9.idx | Bin 0 -> 6766 bytes .../qscreen_platform.h.EA88485E2520FBA7.idx | Bin 0 -> 1240 bytes .../index/qscrollarea.h.E8DD046A626C5B2D.idx | Bin 0 -> 2970 bytes .../clangd/index/qset.h.F5113D4D2082A5F5.idx | Bin 0 -> 25076 bytes .../index/qshareddata.h.81536A7340226224.idx | Bin 0 -> 17992 bytes .../qshareddata_impl.h.573B6A3862491E90.idx | Bin 0 -> 4606 bytes .../qsharedpointer.h.0EB51E8B190F6437.idx | Bin 0 -> 516 bytes ...qsharedpointer_impl.h.337721DAB3A5F08D.idx | Bin 0 -> 47710 bytes .../clangd/index/qsize.h.2FF56A05E027E54D.idx | Bin 0 -> 18544 bytes .../index/qsizepolicy.h.A573A7E48BFD1C50.idx | Bin 0 -> 10232 bytes .../index/qslider.h.5E2CDDA19C546BCC.idx | Bin 0 -> 3390 bytes .../clangd/index/qspan.h.068D12705FAECB9E.idx | Bin 0 -> 27204 bytes .../index/qspinbox.h.EB85D3B1F4510764.idx | Bin 0 -> 6158 bytes .../index/qsplitter.h.A61F84E367402D3A.idx | Bin 0 -> 6468 bytes .../qstackedwidget.h.C50535AFF6636FF9.idx | Bin 0 -> 2514 bytes .../index/qstring.h.BAD2817AB9DD923D.idx | Bin 0 -> 83052 bytes .../qstringalgorithms.h.2B3FCE39FAFCE724.idx | Bin 0 -> 16986 bytes .../qstringbuilder.h.1575CA4BEECE6BB2.idx | Bin 0 -> 20160 bytes .../qstringconverter.h.4543E36264CDFCAC.idx | Bin 0 -> 6946 bytes ...tringconverter_base.h.EE8D95078AE5BAF7.idx | Bin 0 -> 7936 bytes .../index/qstringfwd.h.46E1DB540C447155.idx | Bin 0 -> 1392 bytes .../index/qstringlist.h.B508805E79550159.idx | Bin 0 -> 10320 bytes .../qstringliteral.h.157AA821116E86CF.idx | Bin 0 -> 804 bytes .../qstringmatcher.h.EF569685CEF0290B.idx | Bin 0 -> 2676 bytes .../qstringtokenizer.h.CB1C29950E1C8DA5.idx | Bin 0 -> 17788 bytes .../index/qstringview.h.483947F23EF16192.idx | Bin 0 -> 26472 bytes .../index/qstyle.h.C570AA47748BED3A.idx | Bin 0 -> 62638 bytes .../index/qstyleoption.h.DBFFD0DA4D4FDBD5.idx | Bin 0 -> 66276 bytes .../clangd/index/qswap.h.5AB090D7B04A2E11.idx | Bin 0 -> 1028 bytes .../index/qsysinfo.h.3FC08E4B53A487DA.idx | Bin 0 -> 2110 bytes .../qsystemdetection.h.D0C11743BDEEAFAA.idx | Bin 0 -> 444 bytes .../index/qtabbar.h.423B200A1E3875C8.idx | Bin 0 -> 9888 bytes .../index/qtabwidget.h.F6EE9365DCB13255.idx | Bin 0 -> 8004 bytes .../qtaggedpointer.h.2F4E30F23592A691.idx | Bin 0 -> 7714 bytes ...qtclasshelpermacros.h.BC1F21307C1E8939.idx | Bin 0 -> 10256 bytes .../qtconfiginclude.h.B88C50035F6000FF.idx | Bin 0 -> 348 bytes .../qtconfigmacros.h.7614BFE7533C7B11.idx | Bin 0 -> 986 bytes .../qtcore-config.h.021DBA4935D10D22.idx | Bin 0 -> 1146 bytes .../qtcoreexports.h.46D4639DCCC6E158.idx | Bin 0 -> 564 bytes ...recationdefinitions.h.AC8F81BB6635D445.idx | Bin 0 -> 250 bytes ...tdeprecationmarkers.h.DFBE9F212D166E30.idx | Bin 0 -> 3094 bytes ...nvironmentvariables.h.9AB3237984442820.idx | Bin 0 -> 1800 bytes .../index/qtextcursor.h.4060323F9EBA1B44.idx | Bin 0 -> 11394 bytes .../qtextdocument.h.783DC05C8FCFFD61.idx | Bin 0 -> 16548 bytes .../index/qtextedit.h.F04246AE77AB7AA4.idx | Bin 0 -> 16310 bytes .../index/qtextformat.h.3DCC5A5127B71974.idx | Bin 0 -> 66292 bytes .../index/qtextoption.h.7E83476789A7A646.idx | Bin 0 -> 7304 bytes .../index/qtextstream.h.7C8DD4F82DBEFDA4.idx | Bin 0 -> 16108 bytes .../index/qtgui-config.h.EDE12B3EBA6D364F.idx | Bin 0 -> 1442 bytes .../index/qtguiexports.h.0485051AB44B4703.idx | Bin 0 -> 562 bytes .../index/qtguiglobal.h.AD776BD26C164B7A.idx | Bin 0 -> 424 bytes .../index/qtimezone.h.76EC4526BFB29E03.idx | Bin 0 -> 13126 bytes .../index/qtmetamacros.h.2880FA8BC22BF523.idx | Bin 0 -> 26506 bytes .../index/qtnoop.h.D2D08A6E32B766D8.idx | Bin 0 -> 248 bytes ...preprocessorsupport.h.E169B7BAD080F5CE.idx | Bin 0 -> 280 bytes .../index/qtransform.h.294620FAF417F13A.idx | Bin 0 -> 15696 bytes .../index/qtreeview.h.80E03EC4BEA50965.idx | Bin 0 -> 11028 bytes .../index/qtreewidget.h.4EA5F2D3F587C36B.idx | Bin 0 -> 19340 bytes ...ewidgetitemiterator.h.266475725033105A.idx | Bin 0 -> 4960 bytes .../index/qtresource.h.8C3727046E85FCBC.idx | Bin 0 -> 310 bytes .../qttranslation.h.4BDC706964090D6F.idx | Bin 0 -> 1020 bytes .../index/qttypetraits.h.313748CE23FB6E36.idx | Bin 0 -> 10614 bytes .../index/qtversion.h.749CF3AD7213110F.idx | Bin 0 -> 672 bytes .../qtversionchecks.h.9DD791DF0424D822.idx | Bin 0 -> 560 bytes .../qtwidgets-config.h.76997689C7F8F505.idx | Bin 0 -> 1834 bytes .../qtwidgetsexports.h.C0C51FB128E2B6BC.idx | Bin 0 -> 570 bytes .../qtwidgetsglobal.h.4E511DFA22F19871.idx | Bin 0 -> 452 bytes .../index/qtypeinfo.h.86CE2E83DA835A19.idx | Bin 0 -> 25692 bytes .../index/qtypes.h.B4AF9D175BBD084B.idx | Bin 0 -> 6612 bytes .../clangd/index/qurl.h.B126D21986816F0B.idx | Bin 0 -> 37510 bytes .../qutf8stringview.h.37A6D424546F1586.idx | Bin 0 -> 22370 bytes .../index/qvalidator.h.366510219A10A0E6.idx | Bin 0 -> 8662 bytes .../index/qvariant.h.A62C1F398A926F5A.idx | Bin 0 -> 44758 bytes .../qvarlengtharray.h.D418BF8AA20DC14D.idx | Bin 0 -> 80476 bytes .../index/qvector2d.h.06D1665E842DF325.idx | Bin 0 -> 232 bytes .../index/qvectornd.h.D9741A093A95A1C6.idx | Bin 0 -> 37738 bytes .../qversiontagging.h.CE23E689703F6A38.idx | Bin 0 -> 1518 bytes .../index/qwidget.h.6759F82B1EB68CFF.idx | Bin 0 -> 41936 bytes .../index/qwindowdefs.h.2B54FE6A0C80381B.idx | Bin 0 -> 2308 bytes .../qxptype_traits.h.80D623DA52D2059B.idx | Bin 0 -> 3256 bytes .../index/qyieldcpu.h.9FE4C39152C07856.idx | Bin 0 -> 654 bytes .../index/range_access.h.6E96073B5F63565E.idx | Bin 0 -> 7654 bytes .../clangd/index/ratio.8487D67DA71155CD.idx | Bin 0 -> 25264 bytes .../index/refwrap.h.4EE4CF02590E49B9.idx | Bin 0 -> 3544 bytes .../riemann_zeta.tcc.D77CCD3CB7017EB1.idx | Bin 0 -> 7148 bytes .../clangd/index/sched.h.A585A48500495348.idx | Bin 0 -> 2042 bytes .../clangd/index/sched.h.E8530EF262253892.idx | Bin 0 -> 3548 bytes .../index/select.h.BA57472D13519767.idx | Bin 0 -> 248 bytes .../index/select.h.E19325D0BE3592A0.idx | Bin 0 -> 2334 bytes .../index/setjmp.h.71DEFB3DCC800794.idx | Bin 0 -> 268 bytes .../index/shared_ptr.h.98999B52051858AA.idx | Bin 0 -> 18272 bytes .../shared_ptr_atomic.h.9687B284C9814D78.idx | Bin 0 -> 8840 bytes .../shared_ptr_base.h.232999EA0B0B9FC0.idx | Bin 0 -> 25422 bytes .../index/sigset_t.h.32273C537A103809.idx | Bin 0 -> 362 bytes .../single_threaded.h.918E7314A6EC8DC0.idx | Bin 0 -> 254 bytes .../index/specfun.h.65DBA0A77E3CEC50.idx | Bin 0 -> 27980 bytes ...ecial_function_util.h.84282786DB21CFEC.idx | Bin 0 -> 388 bytes .../index/std_abs.h.29C06599499987A5.idx | Bin 0 -> 1260 bytes .../index/std_function.h.50D12C74AAED0946.idx | Bin 0 -> 7336 bytes .../index/stdarg.h.66419B4717E92223.idx | Bin 0 -> 1052 bytes .../index/stdbool.h.79148566A06020A7.idx | Bin 0 -> 252 bytes .../index/stdc-predef.h.9EA93D70716BF84B.idx | Bin 0 -> 254 bytes .../index/stddef.h.DA789432602BC8F3.idx | Bin 0 -> 1438 bytes .../index/stdexcept.58B04C7E9859AA5B.idx | Bin 0 -> 9162 bytes .../index/stdint-intn.h.EE0939E700184847.idx | Bin 0 -> 488 bytes .../index/stdint-uintn.h.B3EA113168048B57.idx | Bin 0 -> 494 bytes .../index/stdint.h.22B451C129B23D79.idx | Bin 0 -> 4626 bytes .../index/stdint.h.595F290315401810.idx | Bin 0 -> 366 bytes .../clangd/index/stdio.h.6919C07CB89D47AD.idx | Bin 0 -> 29858 bytes .../index/stdio_lim.h.09E79B5FC5C8DF86.idx | Bin 0 -> 390 bytes .../index/stdlib-float.h.126E8959FAE2A511.idx | Bin 0 -> 162 bytes .../index/stdlib.h.3A6E9006951385A7.idx | Bin 0 -> 3258 bytes .../index/stdlib.h.61AA7B9EED10C430.idx | Bin 0 -> 36778 bytes .../index/stl_algo.h.AB8A282D138620E8.idx | Bin 0 -> 108226 bytes .../index/stl_algobase.h.0FAA8197C6E90065.idx | Bin 0 -> 34222 bytes .../index/stl_bvector.h.4E41E08954D1609D.idx | Bin 0 -> 23442 bytes .../stl_construct.h.4CF95CFDA6FB4B9F.idx | Bin 0 -> 1362 bytes .../index/stl_function.h.0FFB6EA3463E337D.idx | Bin 0 -> 34796 bytes .../index/stl_heap.h.2202DBFC4AC7A855.idx | Bin 0 -> 9860 bytes .../index/stl_iterator.h.2F3524DC454A6598.idx | Bin 0 -> 23922 bytes ...iterator_base_funcs.h.AE6D8CEACD6422A4.idx | Bin 0 -> 2942 bytes ...iterator_base_types.h.9732F67131B44010.idx | Bin 0 -> 4180 bytes .../index/stl_list.h.9477E4C63C8F9398.idx | Bin 0 -> 37558 bytes .../index/stl_map.h.30F600572F55EF06.idx | Bin 0 -> 29908 bytes .../index/stl_multimap.h.763186DC213FF355.idx | Bin 0 -> 18660 bytes .../index/stl_numeric.h.0363404D15CD0360.idx | Bin 0 -> 17862 bytes .../index/stl_pair.h.3CECDCC6EED8CAE6.idx | Bin 0 -> 8792 bytes ...tl_raw_storage_iter.h.BB95DCEDC42F529A.idx | Bin 0 -> 1184 bytes .../index/stl_relops.h.6660ECC9755BF665.idx | Bin 0 -> 1428 bytes .../index/stl_tempbuf.h.42C5B1935AA58E32.idx | Bin 0 -> 3864 bytes .../index/stl_tree.h.0C1ECCD6AD44DC1C.idx | Bin 0 -> 68546 bytes .../stl_uninitialized.h.829472F883E6AFB7.idx | Bin 0 -> 12540 bytes .../index/stl_vector.h.A2FA968BFB875BEC.idx | Bin 0 -> 23386 bytes .../stream_iterator.h.B499C87E9521D236.idx | Bin 0 -> 5268 bytes .../index/streambuf.99CE91E40278C69C.idx | Bin 0 -> 13516 bytes .../index/streambuf.tcc.1FD9634B084DAA7E.idx | Bin 0 -> 1104 bytes .../streambuf_iterator.h.27BB5433434D1975.idx | Bin 0 -> 10956 bytes .../clangd/index/string.A57BF35B82FBB728.idx | Bin 0 -> 2460 bytes .../index/string.h.979B97B48AB27554.idx | Bin 0 -> 14032 bytes .../string_conversions.h.33C1C7073483FB67.idx | Bin 0 -> 1336 bytes .../index/string_view.BEF992DD425465D6.idx | Bin 0 -> 28256 bytes .../string_view.tcc.F90E5CD068F587E5.idx | Bin 0 -> 6338 bytes .../index/stringfwd.h.6515E9CFB6CBEC88.idx | Bin 0 -> 1098 bytes .../index/strings.h.9EB46A34EB89BB5D.idx | Bin 0 -> 3392 bytes .../index/struct_FILE.h.2B6C435DE91D3DF8.idx | Bin 0 -> 428 bytes ...truct___jmp_buf_tag.h.C41AC0386D4A06C8.idx | Bin 0 -> 312 bytes .../struct_itimerspec.h.7F2AA6FE7224B30F.idx | Bin 0 -> 632 bytes .../index/struct_mutex.h.A62EF32C01DB3505.idx | Bin 0 -> 208 bytes .../struct_rwlock.h.76DF445C3AA414C9.idx | Bin 0 -> 210 bytes .../struct_sched_param.h.B3F662015F7067C8.idx | Bin 0 -> 382 bytes .../struct_timespec.h.0E09B6677A8D6A08.idx | Bin 0 -> 774 bytes .../struct_timeval.h.4A17C4CCB9EE5883.idx | Bin 0 -> 520 bytes .../index/struct_tm.h.472DDF26D5924DB0.idx | Bin 0 -> 1088 bytes .../index/stubs-64.h.C743FD695F310B00.idx | Bin 0 -> 318 bytes .../clangd/index/stubs.h.07D09A29AEBA877C.idx | Bin 0 -> 194 bytes .../index/system_error.F41E9F6CDCB5D66D.idx | Bin 0 -> 11900 bytes ...thread-shared-types.h.D988ADBA7666A8DD.idx | Bin 0 -> 526 bytes .../clangd/index/time.h.E3714B647728C2FE.idx | Bin 0 -> 964 bytes .../clangd/index/time.h.EDC06F0AFB6EC7EC.idx | Bin 0 -> 12630 bytes .../index/time64.h.1807D6F5124100A2.idx | Bin 0 -> 224 bytes .../index/time_t.h.CAA645D29A7A0EF9.idx | Bin 0 -> 296 bytes .../index/timer_t.h.3EFB88CBA2B5B801.idx | Bin 0 -> 328 bytes .../index/timesize.h.44719E86E09400E4.idx | Bin 0 -> 224 bytes .../clangd/index/timex.h.F2D36E17192C32F0.idx | Bin 0 -> 2672 bytes .../clangd/index/tuple.11670F49A1019C73.idx | Bin 0 -> 26626 bytes .../index/type_traits.5C70B1EEF69AB1B2.idx | Bin 0 -> 45194 bytes .../index/type_traits.h.AFB5D04B561369A5.idx | Bin 0 -> 398 bytes .../index/typeinfo.632314867A8F1BE8.idx | Bin 0 -> 2518 bytes .../clangd/index/types.h.E5A59583DBE28918.idx | Bin 0 -> 2396 bytes .../clangd/index/types.h.E5E7FE6DA0F78AF5.idx | Bin 0 -> 4442 bytes .../index/typesizes.h.A6E116B64E63B90B.idx | Bin 0 -> 1126 bytes .../ui_mainwindow.h.8CF09B0D34E0A473.idx | Bin 0 -> 83670 bytes .../uintn-identity.h.CB86545C6FF94BB3.idx | Bin 0 -> 248 bytes .../index/uio_lim.h.DF584C6AE54BEA07.idx | Bin 0 -> 180 bytes .../uniform_int_dist.h.5937C8C5B8D24592.idx | Bin 0 -> 12628 bytes .../index/unique_ptr.h.FF3FAEAED7E033E5.idx | Bin 0 -> 22094 bytes .../index/unordered_map.F95B2A6E27B9D4F9.idx | Bin 0 -> 1576 bytes .../unordered_map.h.91AEB6757C0F604F.idx | Bin 0 -> 28122 bytes .../uses_allocator.h.AFA3827C58E20660.idx | Bin 0 -> 1544 bytes .../clangd/index/utility.85FA95438DB4CC5B.idx | Bin 0 -> 8608 bytes .../clangd/index/variant.AFFF49C5A62375A4.idx | Bin 0 -> 36220 bytes .../clangd/index/vector.5540A75A3880CF9C.idx | Bin 0 -> 890 bytes .../index/vector.tcc.180200071CE817B3.idx | Bin 0 -> 21536 bytes .../clangd/index/version.4CDCC1C10BD10FD3.idx | Bin 0 -> 2228 bytes .../index/waitflags.h.8046C5530CD87302.idx | Bin 0 -> 412 bytes .../index/waitstatus.h.D7C4F06852D51050.idx | Bin 0 -> 458 bytes .../clangd/index/wchar.h.27C0562D93BBAA12.idx | Bin 0 -> 202 bytes .../clangd/index/wchar.h.83BD995621576773.idx | Bin 0 -> 27834 bytes .../index/wint_t.h.DAC5928CF0BA7895.idx | Bin 0 -> 250 bytes .../index/wordsize.h.23D8030BEC81E6F1.idx | Bin 0 -> 204 bytes .../index/xopen_lim.h.E4E4BC8C11167D14.idx | Bin 0 -> 548 bytes .../.qtc_clangd/compile_commands.json | 1 + .../Desktop_Qt_6_8_0-Debug/CMakeCache.txt | 1388 ++++ .../CMakeFiles/3.29.3/CMakeCXXCompiler.cmake | 92 + .../3.29.3/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 15992 bytes .../CMakeFiles/3.29.3/CMakeSystem.cmake | 15 + .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 878 +++ .../CMakeFiles/CMakeConfigureLog.yaml | 360 + .../CMakeFiles/TargetDirectories.txt | 9 + .../CMakeFiles/clean_additional.cmake | 10 + .../CMakeFiles/cmake.check_cache | 1 + .../AutogenInfo.json | 559 ++ .../AutogenUsed.txt | 2 + .../ParseCache.txt | 414 + .../CMakeFiles/rules.ninja | 72 + .../Testing/Temporary/LastTest.log | 3 + .../build/Desktop_Qt_6_8_0-Debug/build.ninja | 247 + .../cmake_install.cmake | 74 + .../Desktop_Qt_6_8_0-Debug/qt6_application | Bin 0 -> 1543648 bytes .../EWIEGA46WW/moc_mainwindow.cpp.d | 408 + .../qt6_application_autogen/deps | 757 ++ .../qt6_application_autogen/moc_predefs.h | 434 ++ .../mocs_compilation.cpp | 2 + .../qt6_application_autogen/timestamp | 0 .../Desktop_Qt_6_8_0-Debug/qtcsettings.cmake | 10 + src/gui/qt6/mainwindow.cpp | 54 +- src/gui/qt6/mainwindow.h | 6 - src/gui/qt6/mainwindow.ui | 2144 ++++- 593 files changed, 20087 insertions(+), 125 deletions(-) create mode 100644 src/gui/qt6/CMakeLists.txt.user.f3a83e8 create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cache-v2 create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cmakeFiles-v1 create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/codemodel-v2 create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/cache-v2-2bd5eb2af276508f9cf6.json create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/cmakeFiles-v1-c50b2651e07cb0d132da.json create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/codemodel-v2-ae14064b5c5bfb65eb35.json create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/directory-.-Debug-1004986b89cddb862e46.json create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/index-2025-02-08T20-08-26-0866.json create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application-Debug-ab345562360576f6a3d2.json create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application_autogen-Debug-5e2568b9da3822075dc1.json create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application_autogen_timestamp_deps-Debug-813a02102d630b32837c.json create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.ninja_deps create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.ninja_log create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeploySupport.cmake create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeployTargets.cmake create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/LICENSE.conan create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan.cmake create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan_provider.cmake create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/FILE.h.79AEFC497861DFC5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QAction.C96EF240B8C97D16.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QApplication.6186EE4D00472E1D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QCheckBox.F97C85CD389B142A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QComboBox.E9BD1F66553AE54E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QDateEdit.1363D2C608FAA19C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QDebug.D6EEDCAB812A108A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QDoubleSpinBox.0C0EB87BDB251E24.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QGridLayout.EB133BD173F64EFA.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QGroupBox.B9BAA2414EC9EC9A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QGuiApplication.40A6B5E7DDCCAB10.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QHBoxLayout.59B98A56E1270903.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QHeaderView.8CEFA40187CA5B18.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QLineEdit.4DF8C97A081C5AE8.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QList.43B29E3EAD15F037.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QMainWindow.9E6FBF24FCAA6A21.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QMenu.DCFD8A588257C352.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QMenuBar.3F9BED9766BFE45B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QObject.FD42F5FB68E8C303.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QPainterPath.3AC546BDB95A3F0F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QPushButton.2BC29870A6CB475C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRadioButton.A434882CF2D0EBE4.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRect.6DA68D4D1D3E2990.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRegion.130B003E89FE9983.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QResizeEvent.E67339F1D6D32BCD.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QScreen.711C5DF3EEB221C5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QScrollArea.C483AA522C6CD262.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSize.40E81C35EAEAA1C2.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSizeF.7B926032F3663078.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSpacerItem.70C1D6BAB0508458.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSpinBox.910CEC95EC8A5F86.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSplitter.417D2DBE07C04B3F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QStackedWidget.E41334FDB9386E84.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QTextEdit.149E81496A7D8D7D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QTimeEdit.4B41D1477297003C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QTransform.624B53E37B6109A7.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QTreeWidget.DB007D1CE25E1CE0.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QVBoxLayout.970ACCF300B40607.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QVariant.94E74B139BCD44CD.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QWidget.D763B9214B20E979.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__FILE.h.3324F85E382E036A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__fpos64_t.h.23C43F442076149A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__fpos_t.h.ECFBE9EEDAAB6648.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__locale_t.h.40EA38A2DCA58618.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__mbstate_t.h.6C32CF66236653D7.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__sigset_t.h.72131E8056C7E284.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___gnuc_va_list.h.43B1F3B1D6B4DAA2.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___va_copy.h.F5C63B16CFDA2191.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_arg.h.52F08F71EEB3BDB3.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_copy.h.E522E3A1343529C4.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_list.h.E375216D095D7803.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_max_align_t.h.4536C6003D50E15C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_null.h.9C59159E32851BAA.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_nullptr_t.h.7623FED4A13822AD.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_offsetof.h.1EE6274699D52A78.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_ptrdiff_t.h.FCE284AD03D60196.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_size_t.h.7413848320D9984C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_wchar_t.h.129FD7EE3A286014.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/algorithm.1CE1C5E7A2CC8947.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/algorithmfwd.h.7598BC438C9F2E18.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/align.h.EF3672F59F577484.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/aligned_buffer.h.D25F294C09A9BD51.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/alloc_traits.h.888093B2650D973C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/alloc_traits.h.A03678EA5038239B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/alloca.h.793370BF9878CFB6.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/allocated_ptr.h.4C2F2E5344DBBE09.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/allocator.h.726B26F70D1E9A82.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/array.F4CC01525F44E658.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/assert.h.9895EEC17E1D2A2B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/assertions.h.1D646B13C15CF849.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic.659F85E5DD2BCAE5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_base.h.BE2CD511127AE324.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_lockfree_defines.h.2D8FA2BBB9BFE893.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_wide_counter.h.397D66B6BECC0AA2.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_word.h.8B32DB244716470B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomicity.h.409EF4C070658F73.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/auto_ptr.h.07E293599CEBBF74.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/basic_string.h.4F91164A9845D8E7.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/basic_string.tcc.967E4E5D61DA5282.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/bessel_function.tcc.9171F62D1FC8591A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/beta_function.tcc.157C17AA6D54605D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/binders.h.B7909204B7953DFB.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/bit.2A91B049774121D4.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/byteswap.h.E57FF553A16DFAFC.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/c++allocator.h.00F4CFDD575112F2.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/c++config.h.A139A8B32F03163E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/c++locale.h.9D67E3B33BDF16E2.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cassert.C302028D9A1C4921.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cctype.76C6F247C1380A5B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cdefs.h.E4D450DF98C1338F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cerrno.5BD437BDECC7A78D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/char_traits.h.A86DDC004D15BD88.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/charconv.h.869BEB8F43DFD6D7.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/chrono.21DD8193C9F802BB.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/climits.CEDA74AF679CB63C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clocale.5FF46E6760ACF029.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clock_t.h.65AFE5BA7329BCD4.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clockid_t.h.5545878511E5BAF1.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cmath.5492EF8C588C18A0.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/concept_check.h.A4C7BDCF159AD4DF.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/concurrence.h.08E9E50104EBC4C9.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cookie_io_functions_t.h.5A08066DC7F05542.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cpp_type_traits.h.B5C50C37F2A36E3F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cpu-set.h.B40F3E2869BE4FF9.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cpu_defines.h.E7463FB44761786A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstddef.287A68F2FBF12AAD.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstdint.47B9166DA94B05BD.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstdio.325B5C34B96CF05A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstdlib.126A0D14F38BA60B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstring.DBEE10CA3A7F86F4.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ctime.D0C81AD2723230F7.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ctype.h.B268CEA0CECCFC59.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cwchar.A3402FA4C9A9F672.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cxxabi_forced.h.B8AF18F1501F1585.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cxxabi_init_exception.h.542C953E6C829C53.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ell_integral.tcc.28856E23765B109F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/enable_special_members.h.74E7B224F8375F62.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endian.h.1FC6A4D6D2846204.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endian.h.20F8E286A486EE09.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endianness.h.F2D2CC6251A4EAFA.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/erase_if.h.72B55D60DDD77C56.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno-base.h.23FC55A99C73A727.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.063064A523A47758.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.10013861918E601A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.19BCCCD58DA5623E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.33F6986A3C61A3BF.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.3F8ECD84FB880B64.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/error_constants.h.7739DB6650F792ED.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/error_t.h.58D3895A591B592D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exception.3BCB02E313BF87C9.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exception.h.563622B7F9DE0D64.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exception_defines.h.CED4C5F04DCEC0A5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exception_ptr.h.6BAAB8CAEF920B5D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/execution_defs.h.186F44494DB49E13.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exp_integral.tcc.3BFA54CF549FBF5E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/features-time64.h.BFBA8D3CA0316037.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/features.h.5A4ED7C80201A723.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/floatn-common.h.0FE8C4DDCB84E088.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/floatn.h.DA21C738CC1B6ABF.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/flt-eval-method.h.8058951BDB657B4B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/fp-fast.h.72CDF40E7648EF43.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/fp-logb.h.EA7AC5545F14BC26.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functexcept.h.807459FDC2AF6C4E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functional.ACE7A23DFA6A7C81.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functional_hash.h.412E38477D218834.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/gamma.tcc.CA2DC1F3C7EBE19F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/glue_algorithm_defs.h.C368EC8DE1036B81.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/glue_memory_defs.h.6519B6B389AF4A23.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/glue_numeric_defs.h.FCCD2FC54DA0DE29.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/gthr-default.h.B9D1A861FCC1A40F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/gthr.h.224F0F09E7E4961C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hash_bytes.h.274FC085A1115B4A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hashtable.h.DC8C92A807F065D3.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hashtable_policy.h.40A3B6E69632E8E1.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hypergeometric.tcc.62C6EC35332E0AAE.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/initializer_list.487DC3AA34672C18.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/invoke.h.DF3BCAA5A6E33E7C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ios_base.h.979B6DBB9A7C8F35.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/iosfwd.F621C0E74BE8B067.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/iscanonical.h.C53E44E13856FCEA.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/iterator.38B33E1892DEEBB8.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/legendre_function.tcc.64E8C808CA5BAA8E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/libc-header-start.h.E88219B53B0B0BF5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/libm-simd-decl-stubs.h.06B70A57602EA3C8.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.B12624C6106406AC.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.h.1DFE7D0FE6434B13.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.h.7CEA6B3592906D3F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.h.C293B8934AC926BB.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/list.168C0A1C22C8B14B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/list.tcc.94671DB6D4C8E664.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/local_lim.h.2CFD657F256B117E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale.h.E3C63D05A4E78516.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale.h.F1B51844858762D2.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.h.9512D5BF9F8BFC78.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.tcc.A7CA62888BCB33BF.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale_t.h.557516A6B361170F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/localefwd.h.A3B7C978BF60EC19.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/long-double.h.ACD735A1862B6BF8.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/main.cpp.EEBB228B1106B2B1.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.cpp.11CF4E2CF1316CEA.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.h.F0118C6BEFDCBB46.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/map.8C22362DDFC69B22.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/math-vector.h.B3EAC58DA1700969.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/math.h.DE4D39AAF5AC2C76.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mathcalls-helper-functions.h.934C8C52064E404C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mathcalls-narrow.h.EF4B0E9378BD4EE1.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mathcalls.h.655A2220FF0677F8.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mbstate_t.h.F9237FB65FF84D5A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/memory.768AFB22B9D6A62F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/memoryfwd.h.935D7DF208FDC906.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/modified_bessel_func.tcc.9B1532CEE9C375E7.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/move.h.89F6D662F9EAEF16.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/nested_exception.h.10DC70ED9F08D9D1.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/new.8A4066321F7AF016.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/new_allocator.h.D9A43F0C582D8F82.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/node_handle.h.CDEC5F05C546600C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/numeric.C9B73B80E066D1B7.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/numeric_traits.h.71952CE5B96E8B47.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/optional.3D6E41A544334FEE.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/os_defines.h.EA4549991D07B32F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ostream_insert.h.8302B2D6873DA4BB.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/parse_numbers.h.A6E2C9E96411584C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/poly_hermite.tcc.9FD6029D55EB67A1.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/poly_laguerre.tcc.BFD895219AA7B68C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/posix1_lim.h.D94E4687FC9359FF.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/posix2_lim.h.430DA38A1F301F29.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/postypes.h.6906AFED0EA1F1B4.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/predefined_ops.h.9786B9F84B9462DC.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pstl_config.h.CBBF88553BC795EF.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthread.h.022320E0CE01A46D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthread_stack_min-dynamic.h.6F432801F0DF58B7.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthreadtypes-arch.h.9E138C411BE448A0.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthreadtypes.h.BAA8217B62BB6E86.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ptr_traits.h.F78C58E579CDA022.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20functional.h.3B35B426F14AFB98.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20iterator.h.C23CF838032BAB9A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20memory.h.EF3BBE5C99993FC9.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20type_traits.h.80FD58CC3424A64D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q23utility.h.02F4E3C4153F6F6E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractbutton.h.CFA25BA0E844A352.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemdelegate.h.8D2FFF50AF7F61B9.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemmodel.h.D4BB35C1B1D9316E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemview.h.89AAA16972132E25.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractscrollarea.h.E7EE5DCA0672BDB7.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractslider.h.ED9DE327D105CA98.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractspinbox.h.613B7347B045F85C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qaction.h.DEB42C6F940315D3.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qalgorithms.h.0752FD13E8EF319B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qanystringview.h.9067A8646C0AC845.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qapplication.h.45685CEE1BB77E0E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydata.h.3E149019C53099F4.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydataops.h.CC375FBAF7851A50.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydatapointer.h.1128F9E57EA464F8.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qassert.h.BE86327E75D27D1C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qatomic.h.F284092535A24518.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qatomic_cxx11.h.B64FC8F5E10657CA.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbasicatomic.h.2DAC357DEDE2DFBB.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbindingstorage.h.73A75A3151EC9C78.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbitmap.h.9730D82D851365B4.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qboxlayout.h.FBE787986A66C425.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbrush.h.3E2C08834AE7F6F3.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearray.h.56EB072B89ABD6ED.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearrayalgorithms.h.40A38FF36A118743.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearraylist.h.E2B24FE3ED7DD6E0.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearrayview.h.1720D983E04E0E57.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcalendar.h.FE372A9F8303D252.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qchar.h.0D786C17186DA7C6.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcheckbox.h.EA09085F3E851E29.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcolor.h.F91F6990224F234F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcombobox.h.EB292BE8316348A9.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompare.h.CCB7FA596FC8E08E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompare_impl.h.AC2E30841FC04F9A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcomparehelpers.h.99315EB410FD5E10.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompilerdetection.h.8C6C229C1FFFC2B5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qconfig.h.846337A2147A75C2.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qconstructormacros.h.4C4C4817E1171CFA.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainerfwd.h.5FE05033C8BD3C55.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainerinfo.h.F5D0CD90AC279455.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainertools_impl.h.13D5DB46CB94E3B1.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontiguouscache.h.200BAC9C050661F8.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreapplication.h.9495311E207C3FA5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreapplication_platform.h.025BC7505FB180D1.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreevent.h.97F97F5E1881122E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcursor.h.F8060C576930CE8D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdarwinhelpers.h.1BF874FD5FB19478.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdatastream.h.FD38833A530EF87D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdatetime.h.4B296C80495006DF.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdatetimeedit.h.9A943232AF384486.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdeadlinetimer.h.1686DACE8E30BA49.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdebug.h.2855F0F64879D845.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qelapsedtimer.h.8A5D128937FAC7B3.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qendian.h.A9F85A81B249EBA5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qevent.h.35074D32CC775406.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qeventloop.h.452FC337516C45B3.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qeventpoint.h.6743609403519E70.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qexceptionhandling.h.B2ECE802A63F4CD5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qflags.h.E597625F7229645A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfloat16.h.0177AFB713EA8EF7.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfont.h.7D9F66D042F7B11C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfontinfo.h.5A04B1B87E9B68F5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfontmetrics.h.6FB4D77108AC7E22.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qforeach.h.2158A919387EF180.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qframe.h.AF3A096A5F7755E6.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfunctionaltools_impl.h.1D5E5ED3A5B51387.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfunctionpointer.h.DAE0E999D3F1D06C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qgenericatomic.h.6A0C22DFBC3BD1D2.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qglobal.h.1BB3F92FF7EB2D4E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qglobalstatic.h.D70EDA33C1796626.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qgridlayout.h.E07D45D1136B3AC3.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qgroupbox.h.26FCBE2A624361CD.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qguiapplication.h.785D76C858739A91.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qguiapplication_platform.h.E00644C1147E9DED.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qhash.h.F10ABA907D59B368.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qhashfunctions.h.EFDA8E5E332BD372.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qheaderview.h.23F2BD834D7DB292.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qicon.h.160AB644AFBFC44A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qimage.h.67FD69AB005377EE.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qinputdevice.h.339E51D2AAC381C9.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qinputmethod.h.47A60324C18186B8.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiodevice.h.9388E485C0A01200.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiodevicebase.h.57AFACBC3D314B1B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qitemselectionmodel.h.BA92BE56EEB93401.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiterable.h.29A457745ACC4B86.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiterator.h.420D4A13F79F0A7F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qkeysequence.h.DCEACEDD22610193.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlatin1stringview.h.5C4795D24DAF6F91.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlayout.h.F0BFE06293DD1904.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlayoutitem.h.8BB060701DDA612A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qline.h.95FA542EC7493437.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlineedit.h.D36FB34746B2A0B4.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlist.h.F1E0E6304468B4B5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlocale.h.FBB782BEDF501C8B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlogging.h.78CC882A01A41DDF.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmainwindow.h.107F43AEE6E4074C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmalloc.h.AC2AC112265B866C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmap.h.E1B18DE791B411CB.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmargins.h.B935BC6EAE3C8C16.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmath.h.24E8DD8C22CC4E56.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmenu.h.0FABB7AFACD22F6B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmenubar.h.21DA5516EFFBE0E1.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmetacontainer.h.D0F3C3B65E99E5EB.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmetatype.h.DAD15CFA6FC9BFF9.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qminmax.h.4D5B665F22788521.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnamespace.h.9AED58CB1F607D2F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnativeinterface.h.5166B0A1D4E3018A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnumeric.h.CBE0FAE461F0112D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qobject.h.2B0D8C99B5F9D6E8.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qobject_impl.h.E498A2D63752432C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs.h.4CE94A4E1E89C28E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs.h.8F45D7C545CD3DB7.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs_impl.h.3D23F86B673417A6.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qoverload.h.F7064D60B84B4724.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpaintdevice.h.83AE26BC9675EC56.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpainterpath.h.1D7575F9BD81DC74.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpair.h.7E4415438F6A17FE.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpalette.h.A0D6C68FE4FD52CF.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpen.h.D10BBA7A213EEDEF.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpixelformat.h.1735C8D208876A87.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpixmap.h.DA237644164D7D41.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpoint.h.65D6EB4FC892AB96.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpointingdevice.h.D088C170EE78F2C1.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpolygon.h.BE82A0C1B4A66723.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qprocessordetection.h.7DB29B574BD1E9F3.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpushbutton.h.B13C1F0959DD8453.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qradiobutton.h.54424D6AB6222449.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrect.h.8BDEDE6AD19146A9.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrefcount.h.E2B7FA019F51035F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qregion.h.1A71AF3EB76D2D94.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qregularexpression.h.AA37823FD2F57F30.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrgb.h.4A29C9FC342151A3.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrgba64.h.7EAC3B23774F706F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrubberband.h.18E73D8C8F6D4C52.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscopedpointer.h.6298AF6754041B9D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscopeguard.h.188951AB2A4E8E0E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscreen.h.ED72C2867F5AA1B9.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscreen_platform.h.EA88485E2520FBA7.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscrollarea.h.E8DD046A626C5B2D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qset.h.F5113D4D2082A5F5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qshareddata.h.81536A7340226224.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qshareddata_impl.h.573B6A3862491E90.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsharedpointer.h.0EB51E8B190F6437.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsharedpointer_impl.h.337721DAB3A5F08D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsize.h.2FF56A05E027E54D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsizepolicy.h.A573A7E48BFD1C50.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qslider.h.5E2CDDA19C546BCC.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qspan.h.068D12705FAECB9E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qspinbox.h.EB85D3B1F4510764.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsplitter.h.A61F84E367402D3A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstackedwidget.h.C50535AFF6636FF9.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstring.h.BAD2817AB9DD923D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringalgorithms.h.2B3FCE39FAFCE724.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringbuilder.h.1575CA4BEECE6BB2.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringconverter.h.4543E36264CDFCAC.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringconverter_base.h.EE8D95078AE5BAF7.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringfwd.h.46E1DB540C447155.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringlist.h.B508805E79550159.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringliteral.h.157AA821116E86CF.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringmatcher.h.EF569685CEF0290B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringtokenizer.h.CB1C29950E1C8DA5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringview.h.483947F23EF16192.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstyle.h.C570AA47748BED3A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstyleoption.h.DBFFD0DA4D4FDBD5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qswap.h.5AB090D7B04A2E11.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsysinfo.h.3FC08E4B53A487DA.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsystemdetection.h.D0C11743BDEEAFAA.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtabbar.h.423B200A1E3875C8.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtabwidget.h.F6EE9365DCB13255.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtaggedpointer.h.2F4E30F23592A691.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtclasshelpermacros.h.BC1F21307C1E8939.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtconfiginclude.h.B88C50035F6000FF.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtconfigmacros.h.7614BFE7533C7B11.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtcore-config.h.021DBA4935D10D22.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtcoreexports.h.46D4639DCCC6E158.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtdeprecationdefinitions.h.AC8F81BB6635D445.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtdeprecationmarkers.h.DFBE9F212D166E30.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtenvironmentvariables.h.9AB3237984442820.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextcursor.h.4060323F9EBA1B44.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextdocument.h.783DC05C8FCFFD61.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextedit.h.F04246AE77AB7AA4.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextformat.h.3DCC5A5127B71974.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextoption.h.7E83476789A7A646.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextstream.h.7C8DD4F82DBEFDA4.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtgui-config.h.EDE12B3EBA6D364F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtguiexports.h.0485051AB44B4703.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtguiglobal.h.AD776BD26C164B7A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtimezone.h.76EC4526BFB29E03.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtmetamacros.h.2880FA8BC22BF523.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtnoop.h.D2D08A6E32B766D8.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtpreprocessorsupport.h.E169B7BAD080F5CE.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtransform.h.294620FAF417F13A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreeview.h.80E03EC4BEA50965.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreewidget.h.4EA5F2D3F587C36B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreewidgetitemiterator.h.266475725033105A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtresource.h.8C3727046E85FCBC.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qttranslation.h.4BDC706964090D6F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qttypetraits.h.313748CE23FB6E36.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtversion.h.749CF3AD7213110F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtversionchecks.h.9DD791DF0424D822.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgets-config.h.76997689C7F8F505.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgetsexports.h.C0C51FB128E2B6BC.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgetsglobal.h.4E511DFA22F19871.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtypeinfo.h.86CE2E83DA835A19.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtypes.h.B4AF9D175BBD084B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qurl.h.B126D21986816F0B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qutf8stringview.h.37A6D424546F1586.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qvalidator.h.366510219A10A0E6.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qvariant.h.A62C1F398A926F5A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qvarlengtharray.h.D418BF8AA20DC14D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qvector2d.h.06D1665E842DF325.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qvectornd.h.D9741A093A95A1C6.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qversiontagging.h.CE23E689703F6A38.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qwidget.h.6759F82B1EB68CFF.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qwindowdefs.h.2B54FE6A0C80381B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qxptype_traits.h.80D623DA52D2059B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qyieldcpu.h.9FE4C39152C07856.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/range_access.h.6E96073B5F63565E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ratio.8487D67DA71155CD.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/refwrap.h.4EE4CF02590E49B9.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/riemann_zeta.tcc.D77CCD3CB7017EB1.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sched.h.A585A48500495348.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sched.h.E8530EF262253892.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/select.h.BA57472D13519767.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/select.h.E19325D0BE3592A0.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/setjmp.h.71DEFB3DCC800794.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr.h.98999B52051858AA.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_atomic.h.9687B284C9814D78.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_base.h.232999EA0B0B9FC0.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sigset_t.h.32273C537A103809.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/single_threaded.h.918E7314A6EC8DC0.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/specfun.h.65DBA0A77E3CEC50.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/special_function_util.h.84282786DB21CFEC.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/std_abs.h.29C06599499987A5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/std_function.h.50D12C74AAED0946.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdarg.h.66419B4717E92223.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdbool.h.79148566A06020A7.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdc-predef.h.9EA93D70716BF84B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stddef.h.DA789432602BC8F3.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdexcept.58B04C7E9859AA5B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdint-intn.h.EE0939E700184847.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdint-uintn.h.B3EA113168048B57.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdint.h.22B451C129B23D79.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdint.h.595F290315401810.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdio.h.6919C07CB89D47AD.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdio_lim.h.09E79B5FC5C8DF86.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdlib-float.h.126E8959FAE2A511.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdlib.h.3A6E9006951385A7.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdlib.h.61AA7B9EED10C430.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_algo.h.AB8A282D138620E8.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_algobase.h.0FAA8197C6E90065.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_bvector.h.4E41E08954D1609D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_construct.h.4CF95CFDA6FB4B9F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_function.h.0FFB6EA3463E337D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_heap.h.2202DBFC4AC7A855.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator.h.2F3524DC454A6598.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator_base_funcs.h.AE6D8CEACD6422A4.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator_base_types.h.9732F67131B44010.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_list.h.9477E4C63C8F9398.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_map.h.30F600572F55EF06.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_multimap.h.763186DC213FF355.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_numeric.h.0363404D15CD0360.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_pair.h.3CECDCC6EED8CAE6.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_raw_storage_iter.h.BB95DCEDC42F529A.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_relops.h.6660ECC9755BF665.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_tempbuf.h.42C5B1935AA58E32.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_tree.h.0C1ECCD6AD44DC1C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_uninitialized.h.829472F883E6AFB7.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_vector.h.A2FA968BFB875BEC.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stream_iterator.h.B499C87E9521D236.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/streambuf.99CE91E40278C69C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/streambuf.tcc.1FD9634B084DAA7E.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/streambuf_iterator.h.27BB5433434D1975.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string.A57BF35B82FBB728.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string.h.979B97B48AB27554.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string_conversions.h.33C1C7073483FB67.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string_view.BEF992DD425465D6.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string_view.tcc.F90E5CD068F587E5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stringfwd.h.6515E9CFB6CBEC88.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/strings.h.9EB46A34EB89BB5D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_FILE.h.2B6C435DE91D3DF8.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct___jmp_buf_tag.h.C41AC0386D4A06C8.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_itimerspec.h.7F2AA6FE7224B30F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_mutex.h.A62EF32C01DB3505.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_rwlock.h.76DF445C3AA414C9.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_sched_param.h.B3F662015F7067C8.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_timespec.h.0E09B6677A8D6A08.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_timeval.h.4A17C4CCB9EE5883.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_tm.h.472DDF26D5924DB0.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stubs-64.h.C743FD695F310B00.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stubs.h.07D09A29AEBA877C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/system_error.F41E9F6CDCB5D66D.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/thread-shared-types.h.D988ADBA7666A8DD.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time.h.E3714B647728C2FE.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time.h.EDC06F0AFB6EC7EC.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time64.h.1807D6F5124100A2.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time_t.h.CAA645D29A7A0EF9.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/timer_t.h.3EFB88CBA2B5B801.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/timesize.h.44719E86E09400E4.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/timex.h.F2D36E17192C32F0.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/tuple.11670F49A1019C73.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/type_traits.5C70B1EEF69AB1B2.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/type_traits.h.AFB5D04B561369A5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/typeinfo.632314867A8F1BE8.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5A59583DBE28918.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5E7FE6DA0F78AF5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/typesizes.h.A6E116B64E63B90B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ui_mainwindow.h.8CF09B0D34E0A473.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/uintn-identity.h.CB86545C6FF94BB3.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/uio_lim.h.DF584C6AE54BEA07.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/uniform_int_dist.h.5937C8C5B8D24592.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/unique_ptr.h.FF3FAEAED7E033E5.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.F95B2A6E27B9D4F9.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.h.91AEB6757C0F604F.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/uses_allocator.h.AFA3827C58E20660.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/utility.85FA95438DB4CC5B.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/variant.AFFF49C5A62375A4.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/vector.5540A75A3880CF9C.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/vector.tcc.180200071CE817B3.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/version.4CDCC1C10BD10FD3.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/waitflags.h.8046C5530CD87302.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/waitstatus.h.D7C4F06852D51050.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.27C0562D93BBAA12.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.83BD995621576773.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wint_t.h.DAC5928CF0BA7895.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wordsize.h.23D8030BEC81E6F1.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/xopen_lim.h.E4E4BC8C11167D14.idx create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/compile_commands.json create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeCache.txt create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake create mode 100755 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_CXX.bin create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeSystem.cmake create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeConfigureLog.yaml create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/TargetDirectories.txt create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/clean_additional.cmake create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/cmake.check_cache create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenInfo.json create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenUsed.txt create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/ParseCache.txt create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/rules.ninja create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/Testing/Temporary/LastTest.log create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/build.ninja create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/cmake_install.cmake create mode 100755 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/EWIEGA46WW/moc_mainwindow.cpp.d create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/deps create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/moc_predefs.h create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp create mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qtcsettings.cmake diff --git a/src/gui/qt6/CMakeLists.txt.user b/src/gui/qt6/CMakeLists.txt.user index 439a78685..aef8a09e3 100644 --- a/src/gui/qt6/CMakeLists.txt.user +++ b/src/gui/qt6/CMakeLists.txt.user @@ -1,10 +1,10 @@ - + EnvironmentId - {f3a83e8a-49e6-4193-9c60-1e85ac4bd4eb} + {88275b67-0a77-408f-8662-40b2bdae2fec} ProjectExplorer.Project.ActiveTarget @@ -102,16 +102,16 @@ 2 false - -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} + -DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} -DCMAKE_BUILD_TYPE:STRING=Debug +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_GENERATOR:STRING=Ninja -DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} 0 - /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-Debug + /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug @@ -159,15 +159,15 @@ 2 false - -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} + -DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} -DCMAKE_BUILD_TYPE:STRING=Release +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_GENERATOR:STRING=Ninja -DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} - /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-Release +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} + /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Release @@ -213,15 +213,15 @@ 2 false - -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} + -DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_GENERATOR:STRING=Ninja -DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} - /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-RelWithDebInfo +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} + /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-RelWithDebInfo @@ -267,16 +267,16 @@ 2 false - -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} + -DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_GENERATOR:STRING=Ninja -DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} 0 - /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-Profile + /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Profile @@ -322,15 +322,15 @@ 2 false - -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} + -DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} -DCMAKE_BUILD_TYPE:STRING=MinSizeRel +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_GENERATOR:STRING=Ninja -DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} - /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-MinSizeRel +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} + /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-MinSizeRel @@ -402,6 +402,7 @@ true true true + /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug 1 diff --git a/src/gui/qt6/CMakeLists.txt.user.f3a83e8 b/src/gui/qt6/CMakeLists.txt.user.f3a83e8 new file mode 100644 index 000000000..36cf52efa --- /dev/null +++ b/src/gui/qt6/CMakeLists.txt.user.f3a83e8 @@ -0,0 +1,422 @@ + + + + + + EnvironmentId + {f3a83e8a-49e6-4193-9c60-1e85ac4bd4eb} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + 0 + false + true + false + 2 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + false + + + 0 + true + + true + true + Builtin.DefaultTidyAndClazy + 14 + true + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop Qt 6.8.0 + Desktop Qt 6.8.0 + qt.qt6.680.linux_gcc_64_kit + 0 + 0 + 0 + + Debug + 2 + false + + -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_BUILD_TYPE:STRING=Debug +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake + 0 + /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-Debug + + + + + all + + false + + true + Build + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + Build + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + CMakeProjectManager.CMakeBuildConfiguration + + + Release + 2 + false + + -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_BUILD_TYPE:STRING=Release +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake + /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-Release + + + + + all + + false + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release + CMakeProjectManager.CMakeBuildConfiguration + + + RelWithDebInfo + 2 + false + + -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake + /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-RelWithDebInfo + + + + + all + + false + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release with Debug Information + CMakeProjectManager.CMakeBuildConfiguration + + + RelWithDebInfo + 2 + false + + -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake + 0 + /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-Profile + + + + + all + + false + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Profile + CMakeProjectManager.CMakeBuildConfiguration + + + MinSizeRel + 2 + false + + -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_BUILD_TYPE:STRING=MinSizeRel +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake + /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-MinSizeRel + + + + + all + + false + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Minimum Size Release + CMakeProjectManager.CMakeBuildConfiguration + + 5 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph dwarf,4096 -F 250 + qt6_application + CMakeProjectManager.CMakeRunConfiguration.qt6_application + qt6_application + false + true + true + true + /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-Debug + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cache-v2 b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cache-v2 new file mode 100644 index 000000000..e69de29bb diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cmakeFiles-v1 b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cmakeFiles-v1 new file mode 100644 index 000000000..e69de29bb diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/codemodel-v2 b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/codemodel-v2 new file mode 100644 index 000000000..e69de29bb diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/cache-v2-2bd5eb2af276508f9cf6.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/cache-v2-2bd5eb2af276508f9cf6.json new file mode 100644 index 000000000..c34a41ae1 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/cache-v2-2bd5eb2af276508f9cf6.json @@ -0,0 +1,6903 @@ +{ + "entries" : + [ + { + "name" : "CMAKE_ADDR2LINE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a program." + } + ], + "type" : "FILEPATH", + "value" : "/usr/bin/x86_64-linux-gnu-addr2line" + }, + { + "name" : "CMAKE_AR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a program." + } + ], + "type" : "FILEPATH", + "value" : "/usr/bin/x86_64-linux-gnu-ar" + }, + { + "name" : "CMAKE_BUILD_TYPE", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "No help, variable specified on the command line." + } + ], + "type" : "STRING", + "value" : "Debug" + }, + { + "name" : "CMAKE_CACHEFILE_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "This is the directory where this CMakeCache.txt was created" + } + ], + "type" : "INTERNAL", + "value" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug" + }, + { + "name" : "CMAKE_CACHE_MAJOR_VERSION", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Major version of cmake used to create the current loaded cache" + } + ], + "type" : "INTERNAL", + "value" : "3" + }, + { + "name" : "CMAKE_CACHE_MINOR_VERSION", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Minor version of cmake used to create the current loaded cache" + } + ], + "type" : "INTERNAL", + "value" : "29" + }, + { + "name" : "CMAKE_CACHE_PATCH_VERSION", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Patch version of cmake used to create the current loaded cache" + } + ], + "type" : "INTERNAL", + "value" : "3" + }, + { + "name" : "CMAKE_COLOR_DIAGNOSTICS", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Enable colored diagnostics throughout." + } + ], + "type" : "BOOL", + "value" : "1" + }, + { + "name" : "CMAKE_COMMAND", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Path to CMake executable." + } + ], + "type" : "INTERNAL", + "value" : "/home/austenharrell/Qt/Tools/CMake/bin/cmake" + }, + { + "name" : "CMAKE_CPACK_COMMAND", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Path to cpack program executable." + } + ], + "type" : "INTERNAL", + "value" : "/home/austenharrell/Qt/Tools/CMake/bin/cpack" + }, + { + "name" : "CMAKE_CTEST_COMMAND", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Path to ctest program executable." + } + ], + "type" : "INTERNAL", + "value" : "/home/austenharrell/Qt/Tools/CMake/bin/ctest" + }, + { + "name" : "CMAKE_CXX_COMPILER", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "CXX compiler" + } + ], + "type" : "STRING", + "value" : "/usr/bin/x86_64-linux-gnu-g++-11" + }, + { + "name" : "CMAKE_CXX_COMPILER_AR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "A wrapper around 'ar' adding the appropriate '--plugin' option for the GCC compiler" + } + ], + "type" : "FILEPATH", + "value" : "/usr/bin/x86_64-linux-gnu-gcc-ar-11" + }, + { + "name" : "CMAKE_CXX_COMPILER_RANLIB", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "A wrapper around 'ranlib' adding the appropriate '--plugin' option for the GCC compiler" + } + ], + "type" : "FILEPATH", + "value" : "/usr/bin/x86_64-linux-gnu-gcc-ranlib-11" + }, + { + "name" : "CMAKE_CXX_FLAGS", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the CXX compiler during all build types." + } + ], + "type" : "STRING", + "value" : "-DQT_QML_DEBUG" + }, + { + "name" : "CMAKE_CXX_FLAGS_DEBUG", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the CXX compiler during DEBUG builds." + } + ], + "type" : "STRING", + "value" : "-g" + }, + { + "name" : "CMAKE_CXX_FLAGS_INIT", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "No help, variable specified on the command line." + } + ], + "type" : "STRING", + "value" : "-DQT_QML_DEBUG" + }, + { + "name" : "CMAKE_CXX_FLAGS_MINSIZEREL", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the CXX compiler during MINSIZEREL builds." + } + ], + "type" : "STRING", + "value" : "-Os -DNDEBUG" + }, + { + "name" : "CMAKE_CXX_FLAGS_RELEASE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the CXX compiler during RELEASE builds." + } + ], + "type" : "STRING", + "value" : "-O3 -DNDEBUG" + }, + { + "name" : "CMAKE_CXX_FLAGS_RELWITHDEBINFO", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the CXX compiler during RELWITHDEBINFO builds." + } + ], + "type" : "STRING", + "value" : "-O2 -g -DNDEBUG" + }, + { + "name" : "CMAKE_CXX_OUTPUT_EXTENSION", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "STRING", + "value" : ".o" + }, + { + "name" : "CMAKE_C_COMPILER", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "No help, variable specified on the command line." + } + ], + "type" : "FILEPATH", + "value" : "/usr/bin/gcc-11" + }, + { + "name" : "CMAKE_C_OUTPUT_EXTENSION", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_DLLTOOL", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a program." + } + ], + "type" : "FILEPATH", + "value" : "CMAKE_DLLTOOL-NOTFOUND" + }, + { + "name" : "CMAKE_EDIT_COMMAND", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Path to cache edit program executable." + } + ], + "type" : "INTERNAL", + "value" : "/home/austenharrell/Qt/Tools/CMake/bin/ccmake" + }, + { + "name" : "CMAKE_EXECUTABLE_FORMAT", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Executable file format" + } + ], + "type" : "INTERNAL", + "value" : "ELF" + }, + { + "name" : "CMAKE_EXE_LINKER_FLAGS", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during all build types." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_EXE_LINKER_FLAGS_DEBUG", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during DEBUG builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_EXE_LINKER_FLAGS_MINSIZEREL", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during MINSIZEREL builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_EXE_LINKER_FLAGS_RELEASE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during RELEASE builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during RELWITHDEBINFO builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_EXPORT_COMPILE_COMMANDS", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Enable/Disable output of compile commands during generation." + } + ], + "type" : "BOOL", + "value" : "" + }, + { + "name" : "CMAKE_FIND_PACKAGE_REDIRECTS_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Value Computed by CMake." + } + ], + "type" : "STATIC", + "value" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/pkgRedirects" + }, + { + "name" : "CMAKE_GENERATOR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "No help, variable specified on the command line." + } + ], + "type" : "STRING", + "value" : "Ninja" + }, + { + "name" : "CMAKE_GENERATOR_INSTANCE", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Generator instance identifier." + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "CMAKE_GENERATOR_PLATFORM", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Name of generator platform." + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "CMAKE_GENERATOR_TOOLSET", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Name of generator toolset." + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "CMAKE_HAVE_LIBC_PTHREAD", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Test CMAKE_HAVE_LIBC_PTHREAD" + } + ], + "type" : "INTERNAL", + "value" : "1" + }, + { + "name" : "CMAKE_HOME_DIRECTORY", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Source directory with the top level CMakeLists.txt file for this project" + } + ], + "type" : "INTERNAL", + "value" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6" + }, + { + "name" : "CMAKE_INSTALL_BINDIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "User executables (bin)" + } + ], + "type" : "PATH", + "value" : "bin" + }, + { + "name" : "CMAKE_INSTALL_DATADIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Read-only architecture-independent data (DATAROOTDIR)" + } + ], + "type" : "PATH", + "value" : "" + }, + { + "name" : "CMAKE_INSTALL_DATAROOTDIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Read-only architecture-independent data root (share)" + } + ], + "type" : "PATH", + "value" : "share" + }, + { + "name" : "CMAKE_INSTALL_DOCDIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Documentation root (DATAROOTDIR/doc/PROJECT_NAME)" + } + ], + "type" : "PATH", + "value" : "" + }, + { + "name" : "CMAKE_INSTALL_INCLUDEDIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "C header files (include)" + } + ], + "type" : "PATH", + "value" : "include" + }, + { + "name" : "CMAKE_INSTALL_INFODIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Info documentation (DATAROOTDIR/info)" + } + ], + "type" : "PATH", + "value" : "" + }, + { + "name" : "CMAKE_INSTALL_LIBDIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Object code libraries (lib)" + } + ], + "type" : "PATH", + "value" : "lib" + }, + { + "name" : "CMAKE_INSTALL_LIBEXECDIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Program executables (libexec)" + } + ], + "type" : "PATH", + "value" : "libexec" + }, + { + "name" : "CMAKE_INSTALL_LOCALEDIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Locale-dependent data (DATAROOTDIR/locale)" + } + ], + "type" : "PATH", + "value" : "" + }, + { + "name" : "CMAKE_INSTALL_LOCALSTATEDIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Modifiable single-machine data (var)" + } + ], + "type" : "PATH", + "value" : "var" + }, + { + "name" : "CMAKE_INSTALL_MANDIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Man documentation (DATAROOTDIR/man)" + } + ], + "type" : "PATH", + "value" : "" + }, + { + "name" : "CMAKE_INSTALL_OLDINCLUDEDIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "C header files for non-gcc (/usr/include)" + } + ], + "type" : "PATH", + "value" : "/usr/include" + }, + { + "name" : "CMAKE_INSTALL_PREFIX", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Install path prefix, prepended onto install directories." + } + ], + "type" : "PATH", + "value" : "/usr/local" + }, + { + "name" : "CMAKE_INSTALL_RUNSTATEDIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Run-time variable data (LOCALSTATEDIR/run)" + } + ], + "type" : "PATH", + "value" : "" + }, + { + "name" : "CMAKE_INSTALL_SBINDIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "System admin executables (sbin)" + } + ], + "type" : "PATH", + "value" : "sbin" + }, + { + "name" : "CMAKE_INSTALL_SHAREDSTATEDIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Modifiable architecture-independent data (com)" + } + ], + "type" : "PATH", + "value" : "com" + }, + { + "name" : "CMAKE_INSTALL_SO_NO_EXE", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Install .so files without execute permission." + } + ], + "type" : "INTERNAL", + "value" : "1" + }, + { + "name" : "CMAKE_INSTALL_SYSCONFDIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Read-only single-machine data (etc)" + } + ], + "type" : "PATH", + "value" : "etc" + }, + { + "name" : "CMAKE_LINKER", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a program." + } + ], + "type" : "FILEPATH", + "value" : "/usr/bin/x86_64-linux-gnu-ld" + }, + { + "name" : "CMAKE_MAKE_PROGRAM", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Program used to build from build.ninja files." + } + ], + "type" : "FILEPATH", + "value" : "/usr/bin/ninja" + }, + { + "name" : "CMAKE_MODULE_LINKER_FLAGS", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of modules during all build types." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_MODULE_LINKER_FLAGS_DEBUG", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of modules during DEBUG builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of modules during MINSIZEREL builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_MODULE_LINKER_FLAGS_RELEASE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of modules during RELEASE builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of modules during RELWITHDEBINFO builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_NM", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a program." + } + ], + "type" : "FILEPATH", + "value" : "/usr/bin/x86_64-linux-gnu-nm" + }, + { + "name" : "CMAKE_NUMBER_OF_MAKEFILES", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "number of local generators" + } + ], + "type" : "INTERNAL", + "value" : "1" + }, + { + "name" : "CMAKE_OBJCOPY", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a program." + } + ], + "type" : "FILEPATH", + "value" : "/usr/bin/x86_64-linux-gnu-objcopy" + }, + { + "name" : "CMAKE_OBJDUMP", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a program." + } + ], + "type" : "FILEPATH", + "value" : "/usr/bin/x86_64-linux-gnu-objdump" + }, + { + "name" : "CMAKE_PLATFORM_INFO_INITIALIZED", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Platform information initialized" + } + ], + "type" : "INTERNAL", + "value" : "1" + }, + { + "name" : "CMAKE_PREFIX_PATH", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "No help, variable specified on the command line." + } + ], + "type" : "PATH", + "value" : "/home/austenharrell/Qt/6.8.0/gcc_64" + }, + { + "name" : "CMAKE_PROJECT_DESCRIPTION", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Value Computed by CMake" + } + ], + "type" : "STATIC", + "value" : "" + }, + { + "name" : "CMAKE_PROJECT_HOMEPAGE_URL", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Value Computed by CMake" + } + ], + "type" : "STATIC", + "value" : "" + }, + { + "name" : "CMAKE_PROJECT_INCLUDE_BEFORE", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "No help, variable specified on the command line." + } + ], + "type" : "FILEPATH", + "value" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake" + }, + { + "name" : "CMAKE_PROJECT_NAME", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Value Computed by CMake" + } + ], + "type" : "STATIC", + "value" : "qt6_application" + }, + { + "name" : "CMAKE_PROJECT_VERSION", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Value Computed by CMake" + } + ], + "type" : "STATIC", + "value" : "0.1" + }, + { + "name" : "CMAKE_PROJECT_VERSION_MAJOR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Value Computed by CMake" + } + ], + "type" : "STATIC", + "value" : "0" + }, + { + "name" : "CMAKE_PROJECT_VERSION_MINOR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Value Computed by CMake" + } + ], + "type" : "STATIC", + "value" : "1" + }, + { + "name" : "CMAKE_PROJECT_VERSION_PATCH", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Value Computed by CMake" + } + ], + "type" : "STATIC", + "value" : "" + }, + { + "name" : "CMAKE_PROJECT_VERSION_TWEAK", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Value Computed by CMake" + } + ], + "type" : "STATIC", + "value" : "" + }, + { + "name" : "CMAKE_RANLIB", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a program." + } + ], + "type" : "FILEPATH", + "value" : "/usr/bin/x86_64-linux-gnu-ranlib" + }, + { + "name" : "CMAKE_READELF", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a program." + } + ], + "type" : "FILEPATH", + "value" : "/usr/bin/x86_64-linux-gnu-readelf" + }, + { + "name" : "CMAKE_ROOT", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Path to CMake installation." + } + ], + "type" : "INTERNAL", + "value" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29" + }, + { + "name" : "CMAKE_SHARED_LINKER_FLAGS", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of shared libraries during all build types." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_SHARED_LINKER_FLAGS_DEBUG", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of shared libraries during DEBUG builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of shared libraries during MINSIZEREL builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_SHARED_LINKER_FLAGS_RELEASE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of shared libraries during RELEASE builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of shared libraries during RELWITHDEBINFO builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_SKIP_INSTALL_RPATH", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "If set, runtime paths are not added when installing shared libraries, but are added when building." + } + ], + "type" : "BOOL", + "value" : "NO" + }, + { + "name" : "CMAKE_SKIP_RPATH", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "If set, runtime paths are not added when using shared libraries." + } + ], + "type" : "BOOL", + "value" : "NO" + }, + { + "name" : "CMAKE_STATIC_LINKER_FLAGS", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of static libraries during all build types." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_STATIC_LINKER_FLAGS_DEBUG", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of static libraries during DEBUG builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of static libraries during MINSIZEREL builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_STATIC_LINKER_FLAGS_RELEASE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of static libraries during RELEASE builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Flags used by the linker during the creation of static libraries during RELWITHDEBINFO builds." + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "CMAKE_STRIP", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a program." + } + ], + "type" : "FILEPATH", + "value" : "/usr/bin/x86_64-linux-gnu-strip" + }, + { + "name" : "CMAKE_TAPI", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a program." + } + ], + "type" : "FILEPATH", + "value" : "CMAKE_TAPI-NOTFOUND" + }, + { + "name" : "CMAKE_UNAME", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "uname command" + } + ], + "type" : "INTERNAL", + "value" : "/usr/bin/uname" + }, + { + "name" : "CMAKE_VERBOSE_MAKEFILE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make. This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo." + } + ], + "type" : "BOOL", + "value" : "FALSE" + }, + { + "name" : "FIND_PACKAGE_MESSAGE_DETAILS_OpenGL", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Details about finding OpenGL" + } + ], + "type" : "INTERNAL", + "value" : "[/usr/lib/x86_64-linux-gnu/libOpenGL.so][/usr/lib/x86_64-linux-gnu/libGLX.so][/usr/include][c ][v()]" + }, + { + "name" : "FIND_PACKAGE_MESSAGE_DETAILS_Threads", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Details about finding Threads" + } + ], + "type" : "INTERNAL", + "value" : "[TRUE][v()]" + }, + { + "name" : "FIND_PACKAGE_MESSAGE_DETAILS_WrapAtomic", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Details about finding WrapAtomic" + } + ], + "type" : "INTERNAL", + "value" : "[1][v()]" + }, + { + "name" : "FIND_PACKAGE_MESSAGE_DETAILS_WrapOpenGL", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Details about finding WrapOpenGL" + } + ], + "type" : "INTERNAL", + "value" : "[ON][v()]" + }, + { + "name" : "HAVE_STDATOMIC", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Test HAVE_STDATOMIC" + } + ], + "type" : "INTERNAL", + "value" : "1" + }, + { + "name" : "OPENGL_EGL_INCLUDE_DIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a file." + } + ], + "type" : "PATH", + "value" : "/usr/include" + }, + { + "name" : "OPENGL_GLES2_INCLUDE_DIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a file." + } + ], + "type" : "PATH", + "value" : "/usr/include" + }, + { + "name" : "OPENGL_GLES3_INCLUDE_DIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a file." + } + ], + "type" : "PATH", + "value" : "/usr/include" + }, + { + "name" : "OPENGL_GLU_INCLUDE_DIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a file." + } + ], + "type" : "PATH", + "value" : "/usr/include" + }, + { + "name" : "OPENGL_GLX_INCLUDE_DIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a file." + } + ], + "type" : "PATH", + "value" : "/usr/include" + }, + { + "name" : "OPENGL_INCLUDE_DIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a file." + } + ], + "type" : "PATH", + "value" : "/usr/include" + }, + { + "name" : "OPENGL_egl_LIBRARY", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a library." + } + ], + "type" : "FILEPATH", + "value" : "/usr/lib/x86_64-linux-gnu/libEGL.so" + }, + { + "name" : "OPENGL_gles2_LIBRARY", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a library." + } + ], + "type" : "FILEPATH", + "value" : "/usr/lib/x86_64-linux-gnu/libGLESv2.so" + }, + { + "name" : "OPENGL_gles3_LIBRARY", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a library." + } + ], + "type" : "FILEPATH", + "value" : "/usr/lib/x86_64-linux-gnu/libGLESv2.so" + }, + { + "name" : "OPENGL_glu_LIBRARY", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a library." + } + ], + "type" : "FILEPATH", + "value" : "/usr/lib/x86_64-linux-gnu/libGLU.so" + }, + { + "name" : "OPENGL_glx_LIBRARY", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a library." + } + ], + "type" : "FILEPATH", + "value" : "/usr/lib/x86_64-linux-gnu/libGLX.so" + }, + { + "name" : "OPENGL_opengl_LIBRARY", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a library." + } + ], + "type" : "FILEPATH", + "value" : "/usr/lib/x86_64-linux-gnu/libOpenGL.so" + }, + { + "name" : "OPENGL_xmesa_INCLUDE_DIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a file." + } + ], + "type" : "PATH", + "value" : "OPENGL_xmesa_INCLUDE_DIR-NOTFOUND" + }, + { + "name" : "PKG_CONFIG_ARGN", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Arguments to supply to pkg-config" + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "PKG_CONFIG_EXECUTABLE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "pkg-config executable" + } + ], + "type" : "FILEPATH", + "value" : "/usr/bin/pkg-config" + }, + { + "name" : "PKG_XKB_CFLAGS", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_CFLAGS_I", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_CFLAGS_OTHER", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_FOUND", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_INCLUDEDIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_LIBDIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_LIBS", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_LIBS_L", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_LIBS_OTHER", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_LIBS_PATHS", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_MODULE_NAME", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_PREFIX", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_STATIC_CFLAGS", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_STATIC_CFLAGS_I", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_STATIC_CFLAGS_OTHER", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_STATIC_LIBDIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_STATIC_LIBS", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_STATIC_LIBS_L", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_STATIC_LIBS_OTHER", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_STATIC_LIBS_PATHS", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_VERSION", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_xkbcommon_INCLUDEDIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_xkbcommon_LIBDIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_xkbcommon_PREFIX", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "PKG_XKB_xkbcommon_VERSION", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "" + }, + { + "name" : "QT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Additional directories where find(Qt6 ...) host Qt components are searched" + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "QT_ADDITIONAL_PACKAGES_PREFIX_PATH", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Additional directories where find(Qt6 ...) components are searched" + } + ], + "type" : "STRING", + "value" : "" + }, + { + "name" : "QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Skip Qt Creator's package manager auto-setup" + } + ], + "type" : "BOOL", + "value" : "OFF" + }, + { + "name" : "QT_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "The directory containing a CMake configuration file for QT." + } + ], + "type" : "PATH", + "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6" + }, + { + "name" : "QT_FEATURE_abstractbutton", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: abstractbutton (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_abstractslider", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: abstractslider (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_accessibility", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: accessibility (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_accessibility_atspi_bridge", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: accessibility_atspi_bridge (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_action", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: action (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_aesni", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: aesni (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_alloca", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: alloca (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_alloca_h", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: alloca_h (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_alloca_malloc_h", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: alloca_malloc_h (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_android_style_assets", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: android_style_assets (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_animation", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: animation (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_appstore_compliant", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: appstore_compliant (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_arm_crc32", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: arm_crc32 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_arm_crypto", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: arm_crypto (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_avx", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: avx (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_avx2", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: avx2 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_avx512bw", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: avx512bw (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_avx512cd", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: avx512cd (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_avx512dq", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: avx512dq (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_avx512er", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: avx512er (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_avx512f", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: avx512f (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_avx512ifma", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: avx512ifma (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_avx512pf", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: avx512pf (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_avx512vbmi", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: avx512vbmi (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_avx512vbmi2", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: avx512vbmi2 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_avx512vl", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: avx512vl (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_backtrace", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: backtrace (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_buttongroup", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: buttongroup (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_calendarwidget", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: calendarwidget (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_cborstreamreader", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: cborstreamreader (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_cborstreamwriter", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: cborstreamwriter (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_checkbox", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: checkbox (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_clipboard", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: clipboard (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_clock_gettime", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: clock_gettime (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_clock_monotonic", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: clock_monotonic (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_close_range", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: close_range (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_colordialog", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: colordialog (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_colornames", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: colornames (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_columnview", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: columnview (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_combobox", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: combobox (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_commandlineparser", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: commandlineparser (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_commandlinkbutton", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: commandlinkbutton (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_completer", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: completer (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_concatenatetablesproxymodel", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: concatenatetablesproxymodel (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_concurrent", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: concurrent (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_contextmenu", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: contextmenu (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_cpp_winrt", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: cpp_winrt (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_cross_compile", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: cross_compile (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_cssparser", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: cssparser (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_ctf", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: ctf (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_cursor", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: cursor (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_cxx11_future", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: cxx11_future (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_cxx17_filesystem", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: cxx17_filesystem (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_cxx20", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: cxx20 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_cxx23_stacktrace", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: cxx23_stacktrace (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_cxx2a", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: cxx2a (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_cxx2b", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: cxx2b (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_datawidgetmapper", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: datawidgetmapper (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_datestring", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: datestring (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_datetimeedit", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: datetimeedit (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_datetimeparser", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: datetimeparser (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_dbus", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: dbus (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_dbus_linked", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: dbus_linked (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_debug", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: debug (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_debug_and_release", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: debug_and_release (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_desktopservices", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: desktopservices (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_developer_build", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: developer_build (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_dial", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: dial (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_dialog", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: dialog (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_dialogbuttonbox", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: dialogbuttonbox (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_direct2d", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: direct2d (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_direct2d1_1", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: direct2d1_1 (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_directfb", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: directfb (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_directwrite", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: directwrite (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_directwrite3", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: directwrite3 (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_dladdr", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: dladdr (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_dlopen", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: dlopen (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_dockwidget", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: dockwidget (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_doubleconversion", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: doubleconversion (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_draganddrop", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: draganddrop (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_drm_atomic", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: drm_atomic (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_dynamicgl", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: dynamicgl (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_easingcurve", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: easingcurve (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_effects", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: effects (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_egl", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: egl (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_egl_x11", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: egl_x11 (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_eglfs", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: eglfs (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_eglfs_brcm", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: eglfs_brcm (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_eglfs_egldevice", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: eglfs_egldevice (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_eglfs_gbm", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: eglfs_gbm (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_eglfs_mali", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: eglfs_mali (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_eglfs_openwfd", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: eglfs_openwfd (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_eglfs_rcar", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: eglfs_rcar (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_eglfs_viv", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: eglfs_viv (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_eglfs_viv_wl", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: eglfs_viv_wl (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_eglfs_vsp2", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: eglfs_vsp2 (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_eglfs_x11", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: eglfs_x11 (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_elf_private_full_version", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: elf_private_full_version (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_enable_new_dtags", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: enable_new_dtags (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_errormessage", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: errormessage (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_etw", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: etw (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_evdev", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: evdev (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_f16c", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: f16c (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_filedialog", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: filedialog (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_filesystemiterator", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: filesystemiterator (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_filesystemmodel", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: filesystemmodel (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_filesystemwatcher", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: filesystemwatcher (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_fontcombobox", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: fontcombobox (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_fontconfig", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: fontconfig (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_fontdialog", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: fontdialog (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_force_asserts", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: force_asserts (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_force_debug_info", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: force_debug_info (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_forkfd_pidfd", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: forkfd_pidfd (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_formlayout", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: formlayout (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_framework", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: framework (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_freetype", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: freetype (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_fscompleter", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: fscompleter (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_futimens", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: futimens (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_future", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: future (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_gbm", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: gbm (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_gc_binaries", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: gc_binaries (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_gestures", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: gestures (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_getauxval", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: getauxval (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_getentropy", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: getentropy (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_gif", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: gif (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_glib", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: glib (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_glibc_fortify_source", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: glibc_fortify_source (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_graphicseffect", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: graphicseffect (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_graphicsframecapture", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: graphicsframecapture (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_graphicsview", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: graphicsview (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_groupbox", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: groupbox (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_gtk3", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: gtk3 (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_gui", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: gui (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_harfbuzz", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: harfbuzz (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_highdpiscaling", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: highdpiscaling (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_hijricalendar", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: hijricalendar (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_ico", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: ico (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_icu", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: icu (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_identityproxymodel", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: identityproxymodel (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_im", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: im (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_image_heuristic_mask", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: image_heuristic_mask (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_image_text", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: image_text (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_imageformat_bmp", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: imageformat_bmp (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_imageformat_jpeg", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: imageformat_jpeg (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_imageformat_png", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: imageformat_png (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_imageformat_ppm", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: imageformat_ppm (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_imageformat_xbm", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: imageformat_xbm (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_imageformat_xpm", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: imageformat_xpm (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_imageformatplugin", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: imageformatplugin (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_imageio_text_loading", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: imageio_text_loading (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_inotify", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: inotify (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_inputdialog", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: inputdialog (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_integrityfb", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: integrityfb (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_integrityhid", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: integrityhid (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_intelcet", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: intelcet (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_islamiccivilcalendar", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: islamiccivilcalendar (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_itemmodel", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: itemmodel (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_itemviews", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: itemviews (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_jalalicalendar", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: jalalicalendar (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_journald", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: journald (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_jpeg", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: jpeg (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_keysequenceedit", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: keysequenceedit (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_kms", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: kms (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_label", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: label (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_largefile", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: largefile (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_lcdnumber", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: lcdnumber (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_libcpp_hardening", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: libcpp_hardening (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_libinput", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: libinput (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_libinput_axis_api", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: libinput_axis_api (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_libinput_hires_wheel_support", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: libinput_hires_wheel_support (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_library", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: library (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_libstdcpp_assertions", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: libstdcpp_assertions (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_libudev", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: libudev (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_lineedit", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: lineedit (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_linkat", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: linkat (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_linuxfb", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: linuxfb (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_listview", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: listview (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_listwidget", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: listwidget (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_localtime_r", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: localtime_r (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_localtime_s", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: localtime_s (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_lttng", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: lttng (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_mainwindow", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: mainwindow (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_mdiarea", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: mdiarea (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_memmem", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: memmem (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_memrchr", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: memrchr (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_menu", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: menu (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_menubar", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: menubar (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_messagebox", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: messagebox (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_metal", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: metal (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_mimetype", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: mimetype (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_mimetype_database", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: mimetype_database (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_mips_dsp", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: mips_dsp (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_mips_dspr2", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: mips_dspr2 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_movie", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: movie (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_mtdev", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: mtdev (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_multiprocess", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: multiprocess (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_neon", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: neon (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_network", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: network (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_no_direct_extern_access", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: no_direct_extern_access (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_opengl", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: opengl (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_opengles2", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: opengles2 (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_opengles3", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: opengles3 (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_opengles31", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: opengles31 (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_opengles32", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: opengles32 (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_openssl", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: openssl (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_openssl_hash", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: openssl_hash (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_openssl_linked", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: openssl_linked (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_opensslv11", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: opensslv11 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_opensslv30", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: opensslv30 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_openvg", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: openvg (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_pcre2", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: pcre2 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_pdf", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: pdf (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_permissions", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: permissions (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_picture", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: picture (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_pkg_config", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: pkg_config (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_plugin_manifest", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: plugin_manifest (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_png", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: png (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_poll_exit_on_error", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: poll_exit_on_error (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_poll_poll", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: poll_poll (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_poll_pollts", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: poll_pollts (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_poll_ppoll", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: poll_ppoll (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_poll_select", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: poll_select (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_posix_fallocate", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: posix_fallocate (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_posix_sem", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: posix_sem (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_posix_shm", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: posix_shm (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_precompile_header", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: precompile_header (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_printsupport", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: printsupport (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_private_tests", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: private_tests (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_process", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: process (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_processenvironment", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: processenvironment (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_progressbar", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: progressbar (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_progressdialog", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: progressdialog (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_proxymodel", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: proxymodel (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_pushbutton", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: pushbutton (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_qqnx_imf", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: qqnx_imf (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_qqnx_pps", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: qqnx_pps (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_radiobutton", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: radiobutton (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_raster_64bit", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: raster_64bit (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_raster_fp", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: raster_fp (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_rdrnd", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: rdrnd (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_rdseed", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: rdseed (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_reduce_exports", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: reduce_exports (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_reduce_relocations", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: reduce_relocations (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_regularexpression", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: regularexpression (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_relocatable", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: relocatable (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_relro_now_linker", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: relro_now_linker (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_renameat2", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: renameat2 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_resizehandler", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: resizehandler (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_rpath", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: rpath (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_rubberband", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: rubberband (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_scrollarea", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: scrollarea (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_scrollbar", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: scrollbar (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_scroller", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: scroller (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_separate_debug_info", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: separate_debug_info (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_sessionmanager", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: sessionmanager (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_settings", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: settings (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_sha3_fast", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: sha3_fast (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_shani", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: shani (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_shared", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: shared (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_sharedmemory", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: sharedmemory (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_shortcut", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: shortcut (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_signaling_nan", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: signaling_nan (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_simulator_and_device", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: simulator_and_device (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_sizegrip", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: sizegrip (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_slider", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: slider (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_slog2", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: slog2 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_sortfilterproxymodel", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: sortfilterproxymodel (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_spinbox", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: spinbox (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_splashscreen", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: splashscreen (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_splitter", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: splitter (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_sql", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: sql (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_sse2", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: sse2 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_sse3", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: sse3 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_sse4_1", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: sse4_1 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_sse4_2", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: sse4_2 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_ssse3", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: ssse3 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_stack_clash_protection", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: stack_clash_protection (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_stack_protector", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: stack_protector (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_stackedwidget", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: stackedwidget (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_standarditemmodel", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: standarditemmodel (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_static", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: static (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_statusbar", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: statusbar (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_statustip", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: statustip (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_std_atomic64", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: std_atomic64 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_stdlib_libcpp", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: stdlib_libcpp (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_stringlistmodel", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: stringlistmodel (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_style_android", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: style_android (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_style_fusion", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: style_fusion (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_style_mac", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: style_mac (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_style_stylesheet", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: style_stylesheet (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_style_windows", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: style_windows (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_style_windows11", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: style_windows11 (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_style_windowsvista", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: style_windowsvista (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_syntaxhighlighter", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: syntaxhighlighter (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_syslog", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: syslog (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_system_doubleconversion", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: system_doubleconversion (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_system_freetype", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: system_freetype (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_system_harfbuzz", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: system_harfbuzz (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_system_jpeg", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: system_jpeg (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_system_libb2", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: system_libb2 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_system_pcre2", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: system_pcre2 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_system_png", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: system_png (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_system_textmarkdownreader", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: system_textmarkdownreader (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_system_xcb_xinput", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: system_xcb_xinput (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_system_zlib", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: system_zlib (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_systemsemaphore", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: systemsemaphore (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_systemtrayicon", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: systemtrayicon (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_sysv_sem", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: sysv_sem (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_sysv_shm", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: sysv_shm (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_tabbar", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: tabbar (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_tabletevent", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: tabletevent (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_tableview", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: tableview (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_tablewidget", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: tablewidget (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_tabwidget", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: tabwidget (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_temporaryfile", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: temporaryfile (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_testlib", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: testlib (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_textbrowser", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: textbrowser (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_textdate", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: textdate (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_textedit", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: textedit (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_texthtmlparser", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: texthtmlparser (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_textmarkdownreader", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: textmarkdownreader (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_textmarkdownwriter", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: textmarkdownwriter (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_textodfwriter", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: textodfwriter (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_thread", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: thread (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_threadsafe_cloexec", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: threadsafe_cloexec (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_timezone", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: timezone (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_timezone_locale", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: timezone_locale (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_toolbar", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: toolbar (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_toolbox", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: toolbox (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_toolbutton", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: toolbutton (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_tooltip", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: tooltip (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_translation", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: translation (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_transposeproxymodel", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: transposeproxymodel (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_treeview", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: treeview (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_treewidget", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: treewidget (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_trivial_auto_var_init_pattern", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: trivial_auto_var_init_pattern (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_tslib", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: tslib (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_tuiotouch", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: tuiotouch (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_undocommand", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: undocommand (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_undogroup", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: undogroup (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_undostack", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: undostack (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_undoview", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: undoview (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_use_bfd_linker", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: use_bfd_linker (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_use_gold_linker", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: use_gold_linker (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_use_lld_linker", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: use_lld_linker (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_use_mold_linker", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: use_mold_linker (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_vaes", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: vaes (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_validator", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: validator (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_version_tagging", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: version_tagging (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_vkgen", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: vkgen (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_vkkhrdisplay", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: vkkhrdisplay (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_vnc", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: vnc (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_vsp2", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: vsp2 (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_vulkan", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: vulkan (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_wasm_exceptions", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: wasm_exceptions (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_wasm_simd128", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: wasm_simd128 (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_wayland", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: wayland (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_whatsthis", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: whatsthis (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_wheelevent", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: wheelevent (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_widgets", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: widgets (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_widgettextcontrol", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: widgettextcontrol (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_wizard", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: wizard (from target Qt6::Widgets)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_x86intrin", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: x86intrin (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_xcb", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: xcb (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_xcb_egl_plugin", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: xcb_egl_plugin (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_xcb_glx", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: xcb_glx (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_xcb_glx_plugin", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: xcb_glx_plugin (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_xcb_native_painting", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: xcb_native_painting (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_xcb_sm", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: xcb_sm (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_xcb_xlib", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: xcb_xlib (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_xkbcommon", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: xkbcommon (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_xkbcommon_x11", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: xkbcommon_x11 (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_xlib", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: xlib (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_xml", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: xml (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_xmlstream", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: xmlstream (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_xmlstreamreader", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: xmlstreamreader (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_xmlstreamwriter", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: xmlstreamwriter (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_FEATURE_xrender", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: xrender (from target Qt6::Gui)" + } + ], + "type" : "INTERNAL", + "value" : "OFF" + }, + { + "name" : "QT_FEATURE_zstd", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Qt feature: zstd (from target Qt6::Core)" + } + ], + "type" : "INTERNAL", + "value" : "ON" + }, + { + "name" : "QT_QMAKE_EXECUTABLE", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "No help, variable specified on the command line." + } + ], + "type" : "FILEPATH", + "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/bin/qmake" + }, + { + "name" : "Qt6CoreTools_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "The directory containing a CMake configuration file for Qt6CoreTools." + } + ], + "type" : "PATH", + "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools" + }, + { + "name" : "Qt6Core_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "The directory containing a CMake configuration file for Qt6Core." + } + ], + "type" : "PATH", + "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core" + }, + { + "name" : "Qt6DBusTools_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "The directory containing a CMake configuration file for Qt6DBusTools." + } + ], + "type" : "PATH", + "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools" + }, + { + "name" : "Qt6DBus_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "The directory containing a CMake configuration file for Qt6DBus." + } + ], + "type" : "PATH", + "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus" + }, + { + "name" : "Qt6GuiTools_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "The directory containing a CMake configuration file for Qt6GuiTools." + } + ], + "type" : "PATH", + "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools" + }, + { + "name" : "Qt6Gui_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "The directory containing a CMake configuration file for Qt6Gui." + } + ], + "type" : "PATH", + "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui" + }, + { + "name" : "Qt6WidgetsTools_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "The directory containing a CMake configuration file for Qt6WidgetsTools." + } + ], + "type" : "PATH", + "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools" + }, + { + "name" : "Qt6Widgets_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "The directory containing a CMake configuration file for Qt6Widgets." + } + ], + "type" : "PATH", + "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets" + }, + { + "name" : "Qt6_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "The directory containing a CMake configuration file for Qt6." + } + ], + "type" : "PATH", + "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6" + }, + { + "name" : "Vulkan_GLSLANG_VALIDATOR_EXECUTABLE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a program." + } + ], + "type" : "FILEPATH", + "value" : "Vulkan_GLSLANG_VALIDATOR_EXECUTABLE-NOTFOUND" + }, + { + "name" : "Vulkan_GLSLC_EXECUTABLE", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a program." + } + ], + "type" : "FILEPATH", + "value" : "Vulkan_GLSLC_EXECUTABLE-NOTFOUND" + }, + { + "name" : "Vulkan_INCLUDE_DIR", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a file." + } + ], + "type" : "PATH", + "value" : "Vulkan_INCLUDE_DIR-NOTFOUND" + }, + { + "name" : "Vulkan_LIBRARY", + "properties" : + [ + { + "name" : "ADVANCED", + "value" : "1" + }, + { + "name" : "HELPSTRING", + "value" : "Path to a library." + } + ], + "type" : "FILEPATH", + "value" : "Vulkan_LIBRARY-NOTFOUND" + }, + { + "name" : "XKB_INCLUDE_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Path to a file." + } + ], + "type" : "PATH", + "value" : "XKB_INCLUDE_DIR-NOTFOUND" + }, + { + "name" : "XKB_LIBRARY", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Path to a library." + } + ], + "type" : "FILEPATH", + "value" : "XKB_LIBRARY-NOTFOUND" + }, + { + "name" : "_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "linker supports push/pop state" + } + ], + "type" : "INTERNAL", + "value" : "TRUE" + }, + { + "name" : "_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "CMAKE_INSTALL_PREFIX during last run" + } + ], + "type" : "INTERNAL", + "value" : "/usr/local" + }, + { + "name" : "__pkg_config_checked_PKG_XKB", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "" + } + ], + "type" : "INTERNAL", + "value" : "1" + }, + { + "name" : "qt6_application_BINARY_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Value Computed by CMake" + } + ], + "type" : "STATIC", + "value" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug" + }, + { + "name" : "qt6_application_IS_TOP_LEVEL", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Value Computed by CMake" + } + ], + "type" : "STATIC", + "value" : "ON" + }, + { + "name" : "qt6_application_SOURCE_DIR", + "properties" : + [ + { + "name" : "HELPSTRING", + "value" : "Value Computed by CMake" + } + ], + "type" : "STATIC", + "value" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6" + } + ], + "kind" : "cache", + "version" : + { + "major" : 2, + "minor" : 0 + } +} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/cmakeFiles-v1-c50b2651e07cb0d132da.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/cmakeFiles-v1-c50b2651e07cb0d132da.json new file mode 100644 index 000000000..e5e084cd5 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/cmakeFiles-v1-c50b2651e07cb0d132da.json @@ -0,0 +1,2020 @@ +{ + "inputs" : + [ + { + "path" : "CMakeLists.txt" + }, + { + "isGenerated" : true, + "path" : "build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystem.cmake.in" + }, + { + "isGenerated" : true, + "path" : "build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeSystem.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeNinjaFindMake.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInitialize.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Initialize.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Determine-CXX.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCompilerIdDetection.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ADSP-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMCC-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMClang-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/AppleClang-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompilerInternal.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Borland-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompilerInternal.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Cray-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CrayClang-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Embarcadero-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Fujitsu-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GHS-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/HP-CXX-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IAR-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Intel-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/MSVC-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVHPC-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVIDIA-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OrangeC-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PGI-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PathScale-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SCO-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TI-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TIClang-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Tasking-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Watcom-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XL-CXX-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindBinUtils.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-FindBinUtils.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompiler.cmake.in" + }, + { + "isGenerated" : true, + "path" : "build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInformation.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeGenericSystem.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeInitializeConfigs.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/UnixPaths.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXInformation.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeLanguageInformation.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CMakeCommonCompilerMacros.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU-CXX.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCommonLanguageInclude.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCompilerCommon.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitIncludeInfo.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitLinkInfo.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseLibraryArchitecture.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCompilerCommon.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompileFeatures.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/FeatureTesting.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompiler.cmake.in" + }, + { + "isGenerated" : true, + "path" : "build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersion.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersionImpl.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigExtras.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtInstallPaths.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Targets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6VersionlessAliasTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeature.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXCompilerFlag.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckCompilerFlag.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckFlagCommonConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeatureCommon.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicAppleHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicExternalProjectHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFinalizerHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFindPackageHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicGitHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicPluginHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTargetHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTestHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicToolHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicWalkLibsHelpers.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Dependencies.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindThreads.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckLibraryExists.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckIncludeFileCXX.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersion.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersionImpl.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigExtras.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtInstallPaths.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Targets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6VersionlessAliasTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeature.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXCompilerFlag.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeatureCommon.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicAppleHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicExternalProjectHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFinalizerHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFindPackageHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicGitHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicPluginHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTargetHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTestHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicToolHelpers.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicWalkLibsHelpers.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Dependencies.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersion.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersionImpl.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersion.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersionImpl.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsDependencies.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsVersionlessTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersion.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersionImpl.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreDependencies.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapAtomic.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreMacros.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigExtras.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/GNUInstallDirs.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreVersionlessAliasTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersion.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersionImpl.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiDependencies.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapOpenGL.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindOpenGL.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/kwin/FindXKB.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPkgConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FeatureSummary.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapVulkanHeaders.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindVulkan.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersion.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersionImpl.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusDependencies.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersion.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersionImpl.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsDependencies.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsVersionlessTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusMacros.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/MacroAddFileDependencies.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusVersionlessAliasTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiPlugins.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginConfig.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiVersionlessAliasTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets-relwithdebinfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsAdditionalTargetInfo.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsMacros.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsPlugins.cmake" + }, + { + "isExternal" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsVersionlessAliasTargets.cmake" + }, + { + "isCMake" : true, + "isExternal" : true, + "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/GNUInstallDirs.cmake" + } + ], + "kind" : "cmakeFiles", + "paths" : + { + "build" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug", + "source" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6" + }, + "version" : + { + "major" : 1, + "minor" : 0 + } +} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/codemodel-v2-ae14064b5c5bfb65eb35.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/codemodel-v2-ae14064b5c5bfb65eb35.json new file mode 100644 index 000000000..329dec7ac --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/codemodel-v2-ae14064b5c5bfb65eb35.json @@ -0,0 +1,79 @@ +{ + "configurations" : + [ + { + "directories" : + [ + { + "build" : ".", + "hasInstallRule" : true, + "jsonFile" : "directory-.-Debug-1004986b89cddb862e46.json", + "minimumCMakeVersion" : + { + "string" : "3.16" + }, + "projectIndex" : 0, + "source" : ".", + "targetIndexes" : + [ + 0, + 1, + 2 + ] + } + ], + "name" : "Debug", + "projects" : + [ + { + "directoryIndexes" : + [ + 0 + ], + "name" : "qt6_application", + "targetIndexes" : + [ + 0, + 1, + 2 + ] + } + ], + "targets" : + [ + { + "directoryIndex" : 0, + "id" : "qt6_application::@6890427a1f51a3e7e1df", + "jsonFile" : "target-qt6_application-Debug-ab345562360576f6a3d2.json", + "name" : "qt6_application", + "projectIndex" : 0 + }, + { + "directoryIndex" : 0, + "id" : "qt6_application_autogen::@6890427a1f51a3e7e1df", + "jsonFile" : "target-qt6_application_autogen-Debug-5e2568b9da3822075dc1.json", + "name" : "qt6_application_autogen", + "projectIndex" : 0 + }, + { + "directoryIndex" : 0, + "id" : "qt6_application_autogen_timestamp_deps::@6890427a1f51a3e7e1df", + "jsonFile" : "target-qt6_application_autogen_timestamp_deps-Debug-813a02102d630b32837c.json", + "name" : "qt6_application_autogen_timestamp_deps", + "projectIndex" : 0 + } + ] + } + ], + "kind" : "codemodel", + "paths" : + { + "build" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug", + "source" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6" + }, + "version" : + { + "major" : 2, + "minor" : 7 + } +} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/directory-.-Debug-1004986b89cddb862e46.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/directory-.-Debug-1004986b89cddb862e46.json new file mode 100644 index 000000000..2dc335c95 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/directory-.-Debug-1004986b89cddb862e46.json @@ -0,0 +1,45 @@ +{ + "backtraceGraph" : + { + "commands" : + [ + "install" + ], + "files" : + [ + "CMakeLists.txt" + ], + "nodes" : + [ + { + "file" : 0 + }, + { + "command" : 0, + "file" : 0, + "line" : 62, + "parent" : 0 + } + ] + }, + "installers" : + [ + { + "backtrace" : 1, + "component" : "Unspecified", + "destination" : "bin", + "paths" : + [ + "qt6_application" + ], + "targetId" : "qt6_application::@6890427a1f51a3e7e1df", + "targetIndex" : 0, + "type" : "target" + } + ], + "paths" : + { + "build" : ".", + "source" : "." + } +} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/index-2025-02-08T20-08-26-0866.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/index-2025-02-08T20-08-26-0866.json new file mode 100644 index 000000000..16d89f299 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/index-2025-02-08T20-08-26-0866.json @@ -0,0 +1,89 @@ +{ + "cmake" : + { + "generator" : + { + "multiConfig" : false, + "name" : "Ninja" + }, + "paths" : + { + "cmake" : "/home/austenharrell/Qt/Tools/CMake/bin/cmake", + "cpack" : "/home/austenharrell/Qt/Tools/CMake/bin/cpack", + "ctest" : "/home/austenharrell/Qt/Tools/CMake/bin/ctest", + "root" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29" + }, + "version" : + { + "isDirty" : false, + "major" : 3, + "minor" : 29, + "patch" : 3, + "string" : "3.29.3", + "suffix" : "" + } + }, + "objects" : + [ + { + "jsonFile" : "codemodel-v2-ae14064b5c5bfb65eb35.json", + "kind" : "codemodel", + "version" : + { + "major" : 2, + "minor" : 7 + } + }, + { + "jsonFile" : "cache-v2-2bd5eb2af276508f9cf6.json", + "kind" : "cache", + "version" : + { + "major" : 2, + "minor" : 0 + } + }, + { + "jsonFile" : "cmakeFiles-v1-c50b2651e07cb0d132da.json", + "kind" : "cmakeFiles", + "version" : + { + "major" : 1, + "minor" : 0 + } + } + ], + "reply" : + { + "cache-v2" : + { + "jsonFile" : "cache-v2-2bd5eb2af276508f9cf6.json", + "kind" : "cache", + "version" : + { + "major" : 2, + "minor" : 0 + } + }, + "cmakeFiles-v1" : + { + "jsonFile" : "cmakeFiles-v1-c50b2651e07cb0d132da.json", + "kind" : "cmakeFiles", + "version" : + { + "major" : 1, + "minor" : 0 + } + }, + "codemodel-v2" : + { + "jsonFile" : "codemodel-v2-ae14064b5c5bfb65eb35.json", + "kind" : "codemodel", + "version" : + { + "major" : 2, + "minor" : 7 + } + } + } +} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application-Debug-ab345562360576f6a3d2.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application-Debug-ab345562360576f6a3d2.json new file mode 100644 index 000000000..9a7c77fc7 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application-Debug-ab345562360576f6a3d2.json @@ -0,0 +1,457 @@ +{ + "artifacts" : + [ + { + "path" : "qt6_application" + } + ], + "backtrace" : 4, + "backtraceGraph" : + { + "commands" : + [ + "add_executable", + "_qt_internal_create_executable", + "qt6_add_executable", + "qt_add_executable", + "install", + "target_link_libraries", + "set_target_properties", + "include", + "find_package", + "set_property", + "find_dependency", + "_qt_internal_find_third_party_dependencies", + "_qt_internal_find_qt_dependencies" + ], + "files" : + [ + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreMacros.cmake", + "CMakeLists.txt", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindOpenGL.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapOpenGL.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiDependencies.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfig.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake" + ], + "nodes" : + [ + { + "file" : 1 + }, + { + "command" : 3, + "file" : 1, + "line" : 23, + "parent" : 0 + }, + { + "command" : 2, + "file" : 0, + "line" : 957, + "parent" : 1 + }, + { + "command" : 1, + "file" : 0, + "line" : 644, + "parent" : 2 + }, + { + "command" : 0, + "file" : 0, + "line" : 703, + "parent" : 3 + }, + { + "command" : 4, + "file" : 1, + "line" : 62, + "parent" : 0 + }, + { + "command" : 5, + "file" : 1, + "line" : 45, + "parent" : 0 + }, + { + "command" : 8, + "file" : 1, + "line" : 13, + "parent" : 0 + }, + { + "file" : 4, + "parent" : 7 + }, + { + "command" : 8, + "file" : 4, + "line" : 181, + "parent" : 8 + }, + { + "file" : 3, + "parent" : 9 + }, + { + "command" : 7, + "file" : 3, + "line" : 55, + "parent" : 10 + }, + { + "file" : 2, + "parent" : 11 + }, + { + "command" : 6, + "file" : 2, + "line" : 61, + "parent" : 12 + }, + { + "command" : 7, + "file" : 3, + "line" : 43, + "parent" : 10 + }, + { + "file" : 11, + "parent" : 14 + }, + { + "command" : 12, + "file" : 11, + "line" : 43, + "parent" : 15 + }, + { + "command" : 10, + "file" : 8, + "line" : 143, + "parent" : 16 + }, + { + "command" : 8, + "file" : 7, + "line" : 76, + "parent" : 17 + }, + { + "file" : 10, + "parent" : 18 + }, + { + "command" : 7, + "file" : 10, + "line" : 43, + "parent" : 19 + }, + { + "file" : 9, + "parent" : 20 + }, + { + "command" : 11, + "file" : 9, + "line" : 37, + "parent" : 21 + }, + { + "command" : 10, + "file" : 8, + "line" : 36, + "parent" : 22 + }, + { + "command" : 8, + "file" : 7, + "line" : 76, + "parent" : 23 + }, + { + "file" : 6, + "parent" : 24 + }, + { + "command" : 8, + "file" : 6, + "line" : 13, + "parent" : 25 + }, + { + "file" : 5, + "parent" : 26 + }, + { + "command" : 9, + "file" : 5, + "line" : 712, + "parent" : 27 + }, + { + "command" : 6, + "file" : 5, + "line" : 710, + "parent" : 27 + }, + { + "command" : 5, + "file" : 0, + "line" : 645, + "parent" : 2 + } + ] + }, + "compileGroups" : + [ + { + "compileCommandFragments" : + [ + { + "fragment" : "-DQT_QML_DEBUG -g -std=gnu++17 -fdiagnostics-color=always" + }, + { + "backtrace" : 30, + "fragment" : "-fPIC" + } + ], + "defines" : + [ + { + "backtrace" : 30, + "define" : "QT_CORE_LIB" + }, + { + "backtrace" : 6, + "define" : "QT_GUI_LIB" + }, + { + "backtrace" : 6, + "define" : "QT_WIDGETS_LIB" + } + ], + "includes" : + [ + { + "backtrace" : 0, + "path" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/include" + }, + { + "backtrace" : 30, + "isSystem" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore" + }, + { + "backtrace" : 30, + "isSystem" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/include" + }, + { + "backtrace" : 30, + "isSystem" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/mkspecs/linux-g++" + }, + { + "backtrace" : 6, + "isSystem" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets" + }, + { + "backtrace" : 6, + "isSystem" : true, + "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui" + } + ], + "language" : "CXX", + "languageStandard" : + { + "backtraces" : + [ + 30, + 30 + ], + "standard" : "17" + }, + "sourceIndexes" : + [ + 0, + 1, + 2 + ] + } + ], + "dependencies" : + [ + { + "id" : "qt6_application_autogen_timestamp_deps::@6890427a1f51a3e7e1df" + }, + { + "backtrace" : 0, + "id" : "qt6_application_autogen::@6890427a1f51a3e7e1df" + } + ], + "id" : "qt6_application::@6890427a1f51a3e7e1df", + "install" : + { + "destinations" : + [ + { + "backtrace" : 5, + "path" : "bin" + } + ], + "prefix" : + { + "path" : "/usr/local" + } + }, + "link" : + { + "commandFragments" : + [ + { + "fragment" : "-DQT_QML_DEBUG -g", + "role" : "flags" + }, + { + "fragment" : "", + "role" : "flags" + }, + { + "fragment" : "-Wl,-rpath,/home/austenharrell/Qt/6.8.0/gcc_64/lib:", + "role" : "libraries" + }, + { + "backtrace" : 6, + "fragment" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Widgets.so.6.8.0", + "role" : "libraries" + }, + { + "backtrace" : 13, + "fragment" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Gui.so.6.8.0", + "role" : "libraries" + }, + { + "backtrace" : 28, + "fragment" : "/usr/lib/x86_64-linux-gnu/libGLX.so", + "role" : "libraries" + }, + { + "backtrace" : 29, + "fragment" : "/usr/lib/x86_64-linux-gnu/libOpenGL.so", + "role" : "libraries" + }, + { + "backtrace" : 30, + "fragment" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Core.so.6.8.0", + "role" : "libraries" + }, + { + "fragment" : "-Wl,-rpath-link,/home/austenharrell/Qt/6.8.0/gcc_64/lib", + "role" : "libraries" + } + ], + "language" : "CXX" + }, + "name" : "qt6_application", + "nameOnDisk" : "qt6_application", + "paths" : + { + "build" : ".", + "source" : "." + }, + "sourceGroups" : + [ + { + "name" : "Source Files", + "sourceIndexes" : + [ + 0, + 1, + 2 + ] + }, + { + "name" : "Header Files", + "sourceIndexes" : + [ + 3, + 5 + ] + }, + { + "name" : "", + "sourceIndexes" : + [ + 4, + 6 + ] + }, + { + "name" : "CMake Rules", + "sourceIndexes" : + [ + 7 + ] + } + ], + "sources" : + [ + { + "backtrace" : 0, + "compileGroupIndex" : 0, + "isGenerated" : true, + "path" : "build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 4, + "compileGroupIndex" : 0, + "path" : "main.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 4, + "compileGroupIndex" : 0, + "path" : "mainwindow.cpp", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 4, + "path" : "mainwindow.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 4, + "path" : "mainwindow.ui", + "sourceGroupIndex" : 2 + }, + { + "backtrace" : 0, + "isGenerated" : true, + "path" : "build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/include/ui_mainwindow.h", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 0, + "isGenerated" : true, + "path" : "build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp", + "sourceGroupIndex" : 2 + }, + { + "backtrace" : 0, + "isGenerated" : true, + "path" : "build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp.rule", + "sourceGroupIndex" : 3 + } + ], + "type" : "EXECUTABLE" +} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application_autogen-Debug-5e2568b9da3822075dc1.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application_autogen-Debug-5e2568b9da3822075dc1.json new file mode 100644 index 000000000..8bb338b25 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application_autogen-Debug-5e2568b9da3822075dc1.json @@ -0,0 +1,71 @@ +{ + "backtrace" : 0, + "backtraceGraph" : + { + "commands" : [], + "files" : + [ + "CMakeLists.txt" + ], + "nodes" : + [ + { + "file" : 0 + } + ] + }, + "dependencies" : + [ + { + "id" : "qt6_application_autogen_timestamp_deps::@6890427a1f51a3e7e1df" + } + ], + "id" : "qt6_application_autogen::@6890427a1f51a3e7e1df", + "isGeneratorProvided" : true, + "name" : "qt6_application_autogen", + "paths" : + { + "build" : ".", + "source" : "." + }, + "sourceGroups" : + [ + { + "name" : "", + "sourceIndexes" : + [ + 0 + ] + }, + { + "name" : "CMake Rules", + "sourceIndexes" : + [ + 1, + 2 + ] + } + ], + "sources" : + [ + { + "backtrace" : 0, + "isGenerated" : true, + "path" : "build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen", + "sourceGroupIndex" : 0 + }, + { + "backtrace" : 0, + "isGenerated" : true, + "path" : "build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.rule", + "sourceGroupIndex" : 1 + }, + { + "backtrace" : 0, + "isGenerated" : true, + "path" : "build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp.rule", + "sourceGroupIndex" : 1 + } + ], + "type" : "UTILITY" +} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application_autogen_timestamp_deps-Debug-813a02102d630b32837c.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application_autogen_timestamp_deps-Debug-813a02102d630b32837c.json new file mode 100644 index 000000000..f5869d6db --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application_autogen_timestamp_deps-Debug-813a02102d630b32837c.json @@ -0,0 +1,27 @@ +{ + "backtrace" : 0, + "backtraceGraph" : + { + "commands" : [], + "files" : + [ + "CMakeLists.txt" + ], + "nodes" : + [ + { + "file" : 0 + } + ] + }, + "id" : "qt6_application_autogen_timestamp_deps::@6890427a1f51a3e7e1df", + "isGeneratorProvided" : true, + "name" : "qt6_application_autogen_timestamp_deps", + "paths" : + { + "build" : ".", + "source" : "." + }, + "sources" : [], + "type" : "UTILITY" +} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.ninja_deps b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.ninja_deps new file mode 100644 index 0000000000000000000000000000000000000000..c3b59a07b259be2f6f49ee3060a4c63d652257aa GIT binary patch literal 1932228 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%0DB% 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

c1VH+|?!Kl(F(fed0WLm0|1 zhBJatyNx8&aibZ-SjI7)2~1=XlbOO)rZJtjnZZnEF`GHeWghccz(N+Wm?bP_8OvG0 zN>;I&HLT?w-sL^kv7Yz&fDLS96Cd&sAM**HvY9P>#^-#&mwd(7Y~>ri|__a*~4D;v7ZARkBRQ|~ z8n2Url%ygxX-G>t(vyLVWFj+f@FrQvN;a~SgPi0dH+jfQKJrt5f)t`KMJP%!ic^A; zl%h0cC`&oYQ-O+9qB2#eN;RregPPQ$Hg%{=J?hhdhBTrvO=wCpn$v=ow4ya_XiGcV z(}9k3qBC9SN;kUGgP!!FH+|?!Kl(F(fed0WLm0|1hBJb<7|AF`GlsE@V>}a>$Rs8+ zg{e$qI&U+BnapA~bC}CK=Cgo>EMhTBSjsY%vx1eZVl``6%R9Wwd#qzU@ACm0*vKY6 z>p;SzhW7ySwKd@?>6iW4*P(^?=Sow!@nmSm#`l=9Otk%IP4J)dxsyVjjx4$ z!C@>^qYBvxW3??$_+I#3hu>E?uHnBs9P9Akn(#Y$!t1cVxQBm3OJ1Ngt!PUdo~JC$ zc+#J3=VJ>x^AMfrMR$7g5`+BQratB-HSxaunB^BRCW^6uM1=kDVXnhr3+z;iUDAOomR9y+m+u+Kis4Ph<`b4{3k z!aP)%m*_#*ryus~uk||2rD2W>^Guj0HxTBs9fbKN%t2x93-eK!7sH&An4Vr2;u%Kq z7BS0@S$?<{#Vp^o#X0id`i%Wew-lebEoS*K%Xc}5_vKrYIu1M8#cuYnmwoK#00%k5 zVUBQ=V;tuMCppDw&Ty7)Rd41NZsj&^=ML`VF7D)ha<==CLJ`Eh+8v-~lJ)Oh0hKCbWMUR^y~^-kQY>-z3E z%w`UAna6wtml0`U;`W3#D{#u$9%%4Y-S6e z@i|}cC13G1Tlt1>`Ht`TfgkyaZT!qH{K{`^=Xd_#Pj>JZJK4o<_OO?I?B@UnImBU( zaFk;l=L9D?#c9rPmUEov0vEZ&Wv+0QYh33BH@U{&%q`r?ZQRZs+{sl%p*L?V?53iJjqi$%`-g9b3D%ryvR!=A~8uw%FDb$GLrKuukku5NJ%PElZLdU zBRv_&NG3A#25*vutYjlQImk&aa+8O=lyti;;|CG-DXcIL0%9iA-WLQ<%y$rt>y4n8_?= zGl#j%V?GO5$RZZAgrzKFIV)JnDps?GwY|!^2*vmflbAW>!;xI=z z$}x^}f|H!$G-o)=InHx|i(KL|SGdYGu5*KbVtt>GG?*c#ga2=kF=a zvlO5hVg5=)%<^NF|CBLOk0i!*10QRVo%`rRBWhEJy5!^yh8sVX8BI2yKS_P=r6Cn4 zNOH1}hWuou0EuW$MZ&eb0&g&c8dRhb#eM%VT6jH%j^y+CJq%$op?0s%bf!>_G7M)H zvq|c|?`2l{|A*^kxPGo?E8&_Gu0=7+|L@N78_gLoc7M$BW0r3|h`qkp>x;d<*z232 z-!zlh>x;d|Y(vX&Pq$dLz$wX$tn)Xeykdt|6{iFxDMhI7%21YalqamG6V}jSonD2iRHHg!ja`#k z)TRz~sYiVp(2zznrU^}HMsvb?yd|w@O&i+Mj`nmQtkpZwnJ#pt8{O$aPkPatKJ=v@ z{TaYO1~HgW7Yt<>!x_O_jARs{4jIE(#xb4=Ok@(1nZi^;9X_46nZZnEF`GHeWghcc zz(N+Wm?bP_8OvG0N>;I&HLT?w-sL^kv7Yz&fDLS96Cd&sAM**HvY9P>#^-#&mwd(7 zY~>ri|__a*~4D;v7ZAR!nJ#pt8{O$aPkPatKJ=v@{TaYO1~Hf+3}qO@8NpkOWE7(r!&t^K zo(W835|f$2RHiYVx0%6AW-*&N%w-<)S-?UTv6v++Wf{v^!Ae%Knl-HD9p2?V*0G-V z`G5^9OMv(Il@tnahwyJ1mm zE4OhwcW@_naX0sHFZXdj5AYxl@i33@D39?tPw*s9@ifoyEYI;gFYqESk%+`3At^8O z3du;$tGveRq#z}!NKG2jl8*FbAS0Q`%p1H(7P69!?BpOPxyVf(@{*7I6rdo5C`=KG zQjFr1pd_UzO&Q8kj`CEXB9*926{=E=>eQenwWv)U>QayTG@v1kXiO8D(v0S`pe3zn zO&i+Mj`nn*Bc13>7rN4o?)0E1z35FJ`qGd73}7IG7|alcGK}Gj;4MZniqVW=EaMo@ z1ST?x$xLA?)0ocN%wQ(7n9UsKGLQKzU?GcG%o3KejODCgC97D?8rJd-@A4k&SkL=> zzy>z5i4XaRkNJd8*~}I`<8!{?OTOZ3w(|rna*v|nDa)`qm;V8#A&IwL(iqo9oEay1S1uk-l%Ut0q*SO9N{)zQ{LY9C1 z`o#mGfB%r58;jy~806G{q z;d)e?x`b;?R>J%Kwem5{`(ci5Mz}^~=1s=)3b}ZVq)eb5;hNWuaD51KZ2ETxY`dAY5O<_2O|JBh1Iic$qAO>s)y6!LdHp;YmhvhkyHBJVDIzW0qgh7%56I z{+sX1e|hI~)sM$4KW6#ny_n_4Uf+v)4KI<1#3UgpFY^k?NY1Og#_OaYC8fHtY9UpSj`&N@(%Cv9_v`o`+UF#HnNEi`G}ACgiqPb7Cz&1 zzTiu~;%m0@4d3z|-}3`M@)O(mnP2#o-`LLY{K22>;4gNvi{0#DFZAI?r62tnz(58um>~>h7{eLCTa08BqZz|k#xb4= zOk@(1nZi`2F`c)W!Axc`n>oy79`jkiLKd-@B`jqb%UQunR%@iV{hE5EUw-}!?-*}-4z zWEZ>H!(R5Wp937^5QjO!QI2t(6P)A}r#Zt}&T*a#T;vj$xx!Vhah)6d6TQBKEI+RA z%?l1`crIeN4YdKIctjj$iS1~sWgZR${$u-`xI z)ermq!(RQc$3OH+!o4Qp`Jc^bP77Mniq^EDE$s;Rq;#Moo#;##!aXY8=uQuM(u+Ry zr61uQme6wvz-t?g_{pimC1~Q1j3}Gn47|saZVkDy&%^1cqj`2)jB9oZR6s9tb z>AcMhW-^P}%waC`n9l+hvWUejVJXX4&I(qtiq))PE${Fy@3D^cyw3-0U?ZFOkdOG7 zPxzG0Y~eFL=L^2%E52qc-|#Kp@jXBABR{c?pZSGf`Hk)T&L8~A4*p^%yV%Vh_Og%t z9N-{_ILr}_a*X4g;3TIw%^A*ej`LjLBA2+#6|QoP>)hZb*Z7;cg=Xrq_d5J_MCJ9M-nO8_ga$e;%UMB@9 zNkwYXkd}0$Cj%MDL}uRLO|p=cY-A?~ImtzC@{pH&YE-8NHK|2y>QI+@)TaRrX+&e1(3EC0rv)u(MQhs7mUgtK10Cr^ zXS&dpZgi&yJ?TYn`p}nt^k)DA8N^_QFqB~oX9RCCl2MFi3}YF`cqTBBNla!6Q<=te z-ev|fnZ<18Fqe7EX8{XY#A24Plw~Yu1uI#_YSyrpcX*fgSjT$a=L0sdkxhKaM|{jD ze9C6F@EM=;1z++NU$d2O_?GYZo*(#;pV-FF{KBvN#&&+^5B_8af3cHY>}C&p*~fkk zaF9bB<_JeQ#&J$?l2e@K3}-pVc`k5~OI+p(SGmS@Ztzd6?-R28r|W&VGW72s@^izn zf0&r%o0A;our7Yu@kmS(Ui5h~QjwOhz7FS9S5lFN)VxkO57HCPy&R+<9i=EwIg-A*_aBhTi^%21sKggPzM zlIa-g^QyeSb2OwN1E^0PIoY-Sakc$~)w z^Kmj>CJPgZS-xwyu^8{mwArN zv70^YWgq)Fz(Edim?IqJ7{@umNltN^Go0ld=efW|E^(PFT;&?qxxr29{hPUkTe*$f zxq~~oi@Ujpd%2JMd4LCbh=+NEM|q6Ld4eZ-il=#oXL*k2d4U&si9{qO2}yaGS4c*3 zUgb4jCj}`hL}7|hlwuU8 z1SKg&Y06NRa+Ie66{$pJs!)|`RHp_tsYPw-P?vhtrvVLVL}QxJlx8%i1ubbsYueD3 zcC@Dh9qB}8y3mzwbf*VB=|yk)(3gJnX8;2k#9)Rnlwk~K1aC2tQH*8`V;RSICNPmn zOlAsGnZ|V9W(G5v#cbvfXzwn=t*X|B0b9oo zY-|MuL{cQAltw{98bP|dI|K!lP(U#dBot6-kQOiq#XtpYIt)|Kon8_==%4^JGHglNEJm#~2 zg)HKA7PEwm%TMur>gA{SzLEHSnGn&(amb9WZZD>n7+S7rK zbfPm|=t?)b(}SM$qBni$OF#NEfPoBRFb^?=p*+kZ3}ZNt@)(aZf{~13G*9p(V;IXg zp5kf7^9;}O9M3a>7nsN-USu*;n94L>;$@~YgPFX-tGvc6W;2Jm%ws+aSjZw?XE94y z$}*O-f|b0%Dps?GH+hS4~L?$lg5-#O3F6RoaBr{iWHP>)0*Ks{Ja3eR7 zg{<7nEo37*Ik=Ua+(s^PlZU+IBR{uOfIBEiAqrE3J1I&ric^A;+{N9LqBLbFOF7C@ zfr{M2y;Pzy_fdtaRHHigQ-hk+qBeD?OFioI01ar!gEXQsO=wCpn$v=ow4ya_XiGcV z(}9k3qBC9SN;kUGgP!!FH+|?!Kl(F(fed0W4>5$HJj^2uV>plU7>_f8k&I$APw*sT z7|S@G;%Ub74A1f$&ohA+n8+kvWHM8j$~0c$Wu`NOnY_ZQyv8hMGl#j%V?GO5$Rb{6 zF-us=GM2M~mAt_!RMH*8}&JJ`uCcC&}Q>|;OQ@*Usv0|)q#pZJ-B{K6p)^D9R<%5NOwIKOj(Klqcs z_?v$szR&38?WU&hOOAKY8uD!?7sHU9=`QF~>Ec zF;!{Hee~cu?x!IwNxgj2m;PvH$0Fwan4{Yh*NDR0NnD4raW^@+nP+HDT=TjU*N2#U zV-AjaHRjuxzdI1unYbRr^<_1ea~UxoXXh4*64$xZ%XbZTNlCr@)XSf6%aVe%uFIM^ z?n`kNac_$F9FlW6kN8}P3%HPr$i&55!lhiskgn%2R<@ z^L7uh?yWNSk!pSBU&rAYo@W9tFp)`2W(re@d1E>=n8_>5A|rmB>-jw9vw(#x;&m3Y zgrzKFIV)Jn8?0hAYj~5lc$;@v%R1Jxfp>Y2jl9nXe8@*^;$uGHQ#P}Ot$fDke8HD| z#n*hpHny{ao$O*ash6L6`7KUOwZ2sAOSQg;rE_pA5vSiqE+Qw&LtgTcpW7)wM*dXD z^N9D05HWwmQI+@)aL;j5V_ieWaM;BJa0-fA_r+f-X-DKTk%M%k6Ore1p)1{p+$HkD zp7f$OedtR+`ZIum3}P@3F@&K!%p(kAIFIrek28XijAArT@FZgx%Q&9mX~q*dRpda= z@jMfFfr(7wMJ6+asZ8S~US>Kon8_==%4^JGHglNEJm#~2g)HKA7PEw`SVq#c{$BjdLG<;3|Ne=Bmm2Gpkn zk&DK8e}(TwE*JS&#OSy#T7YyerKbM89+~Di%M2{gq{Tc1`7^8W}M_z6t z^4tQ9q$IhxoodvgCOL?49=UO5@>7Ld8A^=t8k8mGf-;mN=9WT4{v2~dDGGQmg(yw* zD55_Rb4=Qof3klNJ%;GhMDONmuH_sac8scX4dtoKOm5;-=TgkI#fka%2JWCBchQ>M zyhbA$Q$snWw4|56S(V!v;p+#uo@;4E1%}ar(!{l36=`37>g5-49z4#2 z)S)iXf4q!{EyfY?L-Z`8|N1!5kBi*BA(M#STutt06jPZ->gA_i{+_(E>b;VB`Dx#d z`5^W3Q!hW&`ckcLvYOTurZSC}c$w78Pqn`6V$H~5BVWx)~6GvVf zxo_md8TnJ>uZ4-2_D+gYjL5Z05IJ+?Sa%coZRA3c|3)qxIdJ4^ktd-eE24SkDIDk!~Dt-j`ADFIL_~!;1B-fFaGAA?B%EU{$vd(>Mzx(PUOK+JB*yT7PYBEUFuPv z2WUX#&=1mx#x$WR&1g;wTGEQvw4p6gXN=lp2cj++bFJT4U5NqYfH1%)ty{C=c@p!-$$?3LK#rG+`Pw~C$ zyL@IByV=8DQZN7HzPB7=kXy;gZR8?1dB{sX@^d={xPyWeqA*3clcE%(I3*~_UEED6 zN>hfil%qTqsK`CsOC>6EA62MIHL7zzHK<7~YEy^0)T2HR(13o@PAH@GQ^qJQH|@}CNqVpOyeb9W;!#N$t%3dYs_LcbC}CK z=Cgo>EaG(*vxKEAV>v5W$s4RbLoZo3*e(L34Wj=`f z^l~Eay@1GvGv?@vJim}EL|)m`c@x*8CNv|iF~vyx@=w+bDmX?tC`vxcQH=83MCATa zSBPtQZHf@r^arU!UGDS!)XNudIu5syn|ry1r+ALLd79#U#j(`T3@R5rCQ%j;>;{$ol3a*>-n+=8&Xh_7^jc82dFHMOYra3KWNh?~@hPJe$Jss#sCpy!Gu5_b2J&4?> z7rp62U;5FX0SsgigL#M{4CP@SVHlBHJxb&Ukr#|$B%>J36FkWn#xjnlh&*gO&+shI z@jMfFfr(7wMJ6+asZ8S~US>Kon8_==%4^JGHglNEJm#~2g)HKA7PEw6`D zdiklBZ+sh8+t|(ycCw4z>|rna*w43o$M^ie0e<8se&!&*aEQbF$`Ow88^<`#@0{Qd z{^T$I<`jLyQ#p;(IfMUjCTDRr=Ws6PaXuGtAs3N}i@AhLxs1!Xf-A|)Rb0(AT+4N& zefh5MjzeRb(3EDRefepvZtCTy_`apss}-$jLtEO>o(^=R6P@WoSGv)i9`vLaz3D?= z`q7^O3}g@~zEAOe>>2(i_T`VL-C%mu?=v~CBDcDj*+Pue%Rjls^(x0B3t73ramh{| z@)K)iM|(ZSXdd#Bm)n>@0Y*}iT-;7IYEhFM#5j-KI5YXF!mSJ?a`+mQCFX)Mlq2Sr zLPY)?b3-W#crS%0O+_jZb4=QopZ4WP9VF@_QLBg=Mbr}x@+nbo_>ia>WFf9E6}g%* zJV9mOZba(ki~Svk5}eNvTGNE4G~+IcFv@YO$5@K{`bt`G9<8WN1yV0x{m^lUJp{3L zAQw?@h&=>z8O;dhk<0m+o6=+>J2!hh8>yG?I^=jXqA{&$Llc_PpSskeJ`Yfe0z|FP zAv|Sg=CcNEO}+fo%XcoMUVf_erCz?dRDCbi`qIAqv~MT%@|%g}o6~|+>r1`-e_Jm< z#rLU~pL+SJm!Eq1*6NAtQ!n3IJ;z}RQ<+A(?^fEEe~b7w8`+5-RrI5B5`C@cW926L zUD4}`o>%m(qPG?Ot~)45^rs3_ggYrpF^W@y=!xCM-9-PYG|}IRURU(E%2R>pMcl)^ zRH8EX5q+|%L_e)M_Y=Lc=&MD4tu}S2OVr`(^8gKK$b&SZF->Snitp1}-965Oz3k)P z65nU+%b&gG&uvk^&*Z(QUVggAe$1E4Il&+NK%C!cUw+z`pL+SO{rX&~mv1kQ<1m>i z#C-?bnIq2fSdyXSq$gSF}-Mf56nsS06rIEXhNTM@x^bXigc* zQjYT6#octJ8-3`@gZ%&Y^7G!YxZ9Vhm!Eq1&cW2nPrdxq%TK-hRO_?GO^q}4@>4HA z)%sGc@84MK%h;En;``LgPrdxq%TK-h)XSeFrhSnV->3NgCiU4YWaVa3FF&o-o$frC z!AxEu_6@(rEM_x@xy)le3s}e^US~1UPhQG0qNlimmBhZ%Rjg(WZxZ`W-{u|GvX1p^ z;9cHhBk%J8vH$cVHt{i^5PMTMvxTjE#^-#&mwd(7d_(MM-OdhnvWwmP8{_+oUVe`Q z^EXBPKK1h5lRypoQZC^RhI5sF-;8-K?aM!TPq`zG$x&iVXNUT#Tm}e=&YD#@MBv$C!(CR}*=O=Xjn8yuc)0WHM8j$~3C^_i0NHGCo)A5znVH zgZV6A5wobmJzUMToWsL@Pps>@hVsO^ub97XBJO=L*kf@9a040Z&hGNOHMxm7t`Uu? zN?Y!u2iI{w4QWX)f3qsLGs4#oa6Q-3iV6&)1*Pdt%zGDlFTZ&_K&%^z`DX{QX6;4> za+aStlZ?4E=D1&Yi#Le5Y#YCFkeK^^Cg#Oc{C8gh%p6PI$%@t&(IawW_mL40E zdiklB-_!Zfi{5mm3k|rPeB>uDZD~gyDo~MoxR?8APY3=d^zsi(tF~r)>gA_izBw-S z@>4HA_3~3MKh^qDtuJz+j2!r8&r_{0)%vD84^pk~-*u1u6yK*_e(L3?UViH3r(S;Q z<;(A_W!OPltDEBcrsCOVG$(p5(W{AmO!Ro#5IvoCw5J0d=|pF`(3NgXgH7Z7>^VEqLGYZG*9p(V;IXgp5kf7^9;}O z|Mt@+dTkOfGMOn%C3Eg54uG97=o%qa&xTiyW)Y2jl9nXe8@*^;$uGHQ#P}Ot$fDke8HD|#n*hpHny{ao$O*a zd)Ui9_VX>@@jX9qfFJpZpE<}c9O5v)a)hJ ibJ16*qKlzKlIpx&!d77mhgVL0t zEafOq1uAk6_fm<<+(#9vQjO}|PYr5Pi`vwoF7>F-12mu^=^mVE-%hIaxkjIMa$R#4 zk6F2yTgXOsa&Rj-xs6=J`sO_3B_H{@odRU6g)ZcIVTy1kMJYzCn=U~~V!ia;l%h0c zC`&oYQ-O-adggnnL}g+fbrq^ojq1dD>KfFf7PYBEUFuPv2WUV;9wcLZb`#H=(v0S` zpe3zHwZ61(=R4=Y_e8Da06+2*KXZ^@IK*LoqW%!|i@roHBkCA!h+4?2^e1W^1-zF+l%^t;=;HOvj>lD8&3a$2;~LMe z z8BuS^&Mg$>S)wlTl*guA$&;Mvy`Rk$WTrW3U;fG7W%T$a5`DYLOyNP=Ic{fpEXh!E z(vz%o^1TN2TW zX96)kW6V!tGBM_-GL7lXAmYTB6K0VSKgRftaXX&{EMyU{vzR3;Wf{v^!Ajm>6{}gp zo4m!_yu(`7v7QaQOX}r|!%tPq=K?O|A~JC?mvAYUaXD9TC7HR3tGR}2NwvOI>r1u1 zRO?H%K5O#Cu93e)eh@iKKlSn>_l(>!Y9$BwpW4e$@qOy$M{Yfy6yK+{ zy6L`KuJ7`lCN!lP&1pePTG5&|w51*G=|D$1(U~rEr5oMpK~H+on?CfVAN?7?Kn5|G zhZw?89_A5-F`P$vjK>+lNJcT5CwP)EjAa~8@igOkhG%(>=b69@OeDqkDZWqfeTwfV zi&v*Gm1(@h%S>kmGkJwqd5!4P%qDs)(F2~xe4^K~km%{W&SIjU9R1zs)kIG*qfhjP z=c|a`%o^V0E#BrG*0PTEY~WqqV|3TA$mcd@i|}cC0`N!<>*;& zV>>(8$u6Rww1>UyV?W>WKRv$BxX1pxD_1v<`h6zvIgb6sWYl7#_8K+Xg2caV>gA_i zew^D!I2z{(8RIX;<8fkLc#NyaXJb4Z<`6OFVm!t8i}9N=#xC_d#@xM3B<7Omc%BKo zz$9Me|DAWLIWODNgTD0R5i@sk_iw(({)fkoy;3Fh@>4J0cuuvx zRO?H%zEta*tnN33sZ8S~US>Kon8_==%4^JGHglNEJm#~2g)HKA7PEwQ6M6BMMKJ=v@{TaYO1~Hh27{X8<<`IT5oJV<##~Hy$ zMlqTvc#<)UWgJiOG~;=OXL*k2nZOH7WD+kjnJG+V8ZYrO)0x3cUg1?HY~+1D;6pxQ6Cd*lpR$=P zY~?dP=L^2%E57C%wy~WZ>|__a*~4D;v7c}Gj_>(_1N_KO{LDdq;Sh)Ul_MPGH;!?f z-#Nh_{K;SZ%_(wzh8{65zPIj@IJ?v#4`}vmd_?{m) zz>oaI&m80z4sn=YIl@tX;~2;JofG`QpZvw&oZ=dPDyMNeXYe1+z0Xi77h(}I??qBU)3OFP=rfsS;dGhOIPH@ee< zp7f$OedtR+`ZIum3}P@3F@&K!%p(kAIFIrek28XijAArT@FZgx%Q&9mX~y#m&+;74 zGl3VF$Ru85GEma~GDyum6~ zvxYZ$i??})wX9=38+e!Z*vR{Qz=wRqCO+m9K4mjo*ve;o&KG>iSA5MkY-2k+*vT$- zvxmLxV?W>W9pCc<2l$bn_?d(J!XXaxD@QoWZye(|zjJ~=_>;f*n|~s{&*{{6~B zQNPdR_r|fmnA!fs98xd;WSt|6W0I8{9Fy$iAwT_zG1ZSe;iB%`oywo7pztkeu;KcfxxUWR4ZK=-#G@v1|uB8!;X+l$) z(VSSz6LUx_VhvCmVl7%b+S7rKbfPm|=t?)b6KmFb(u>~op)dW2SY!YL8N^_QFqDUR zgkcOP*7%HIB(a`nG-DXcIL4ED`Ki{IYJJABT2~XA(v0S`pe3znO&i+Mj`nn*Bc13> z7rN4o?)0E1z35FJ`qGd73}7IG7|cTqVJHvt2*Vi8qddmrj9?_A7|jzr$r#2mj;DB< z@jSz`Jje4)-~}c!i5E$=KDoZ*kb3#4*4Iof)SMQyq!q1+e7r5~Xio<^(uvMQ9^RF1 zbf*VB=|yj%1`zpu)Da?|AHYB&7fZFiRO|bvdig27PrdvU-=|)F>gCJR#dM8G@qOy$ zr}#dt)om))PVs%}<^P*|`6afUy+7*rnVie1m!IyjU&(o}oQyRju@)uH?{ts-bdUY3 z^mwBGbUD%2x`60+t#E#<nh@8?rzuA4FNhk~B4WK&)W2p?m^&Fy zHtr@TH}ecpM;k)a!o!Uy&(dMw01+3+$?srG5F% zW#{Gp=6md~J7;aC@u`=e_T`%oQZGOC@>4HA)%sE|KlSo&5+`RND-nxF{2cLl#L}@I zJ=UH_oE~e~W6gSQ@(}CV^AT&*V;y^}ZNGzp6e8mNB1Fs|@p$A0#VJ9of4_^!0b;Fs zY06NRa+Ie6vF`XD?j>^9%G^g4s#1;W+)u2FuSqRxQ-`|LqdpJNfQCFsBN`L=OH(3; zi5#Q_sh6Mj?d*3Rd`sk>ky}QsPwc6TeV?~8!q-thx}IxkMbxK;5%r>|U-f1c7s|yW_m5gZ%r!gN zLDaEsWFTkxnKOCa^Tm8j)Dhm|4ZdO2^O;X_XG-=%%|C+}Hvro(YISCE<5 zQ=9hXr+e&IHb%PBgP#1i?aM#C<@J5Hr(S;Q<(uzPFF*D2Q!hXD@>4HA)%tFdA7tdf zH+y~y*~m`n<)?l5uQ(50Ls?l??l3UOcYcIJq)JeFiAIf?s$XQh+xW!#6njIZOqZ*Um))H9ryXp zMbsPOe&2J6`+vv%z~_l9)>@@|?7Q!_<1m33pA(tHWMa%uWg63&!AxRKm_^1~&=|il zZs)Urg)HKA7PEwfBEaYEp~Z)S)i* zsLum5pdslVoar9>Y2Qw&^))^%?aQCy7^GU?zrUBC;``LgkKB4Z&yeE#6yM({*1d@= zWaVaVAsgAr!L8)vHgb`hJme)G`MI3}+(AJKQJ5m!Nl}VXoD!7eF7779_vtgV-f|wi z%{#1R9qZY^yS&Fn-sb~8)QNK^U{M5_8Nk6NSaUE;qPZ0NeOTGM)_kA4TSj0NEJ1EFqv?e#N z(TKP%RHZFxUw*pBem&>GSc=P=ucQU%(TdtsAO}UsM>&d7o}1`E9Uk*L;+~*Ic$^2R zLtXCk{mba+`8aw}*4O9qIFYYM?%t5-#Z90l_cMyAL{Bc=V?XustKR;^q!y`{pZ4XO z4^pi!_43oc{IoBBvYOWvrZSC}c$w+UU?#8dDz7n%+00=s^O(;97P5%fS&3K;SS)Sv0 zCh!6inZ%1sCe`}>JND(L_&)XWQ!hWQ)xAzUbv-G*Pw{<<@6&y^ZW7~VAuBg?3)#p{ z4sInUw~>q7QayTJU{~)@*s_9OcPRkpZ4YNb{_0uFZk!~Dt-j`ADFIL_~!;1B-fFaG8fJ=aq?jri>8GlT?=$(mOSqWX{=^&>68o(RGTrO(_u_ZY^L#Gxe!e08 z#zv3v_u}uy`?;L1UW>o=ipLm3F`i-^M=sipD|~OM#|>;J{(pZ>{D0ld7Oo)P^FZ&R z6W7y)&UB+I*HMG^Tech|*M~5?#EW+3~oFt6A^sbzI~5wOq&b+`x^b zUjE5z#Z1TOCSr^Y_E?+&+`t_an$esVw4@cSX+vAu(Vh-;q!XR#LRY%cogVb07rp62U;5FX0SsgigL#M{ z4CP@SVHm@Cl*f3S5sYLMqj`cS8N*n{@f1%po@aQL=Xjn8yud^z@gkE+y?k+|}4PO`Ihhao*y{CkNm{X9OM@cahP8@!cl(X7{~dY6a2xS{Kem#A|5@J(>R?o_z!1t z7H4w~=W-tBa{(7}5t)db{t_-F;^2sfBd?BlH}cNNaj)hYA`gk2C32F;cWxwdp)6$O zW+HyhM#R#Q!$!WElgN7`&yAcY50MK;P8@k{rHb6cy;Pzyk$Y7ka~op)dXD&j1E8 zh`~I>5Qg$Fk1&kkJj!D{&Im>_iqSm5lZ;_3<9Ldv8P793%X2)>1YTewlX#KIOkpb1 zc!`&p&J1Sq3a|1SvzW~s<}#1@EMOsvc%8*8VJXX4&I(rY2CG=j8s6kB-sTU+^Vg@ipJDjqU7UC%f3q9`>@2{d~)Je9sRY z;75MqXAbfUhd9iy9N{Rxag5{q&I$hDPyXU>{)t*&#y$2^e4l#xe4l#xH;FT{kd>Rcg=}Oe2e*=w+sH+3@{pH&Cq*enaY|5< zySSTDl%@=2DMxuKP?3AMmr7LTKB`caYEY(34*DrVoATM}Gz|kU3Z}B$ou$FbKX9Mr@9vgX|5BQLe*u=+t z!l!Iz3tRb&&-sEc`HHXkhHY$T2RqrtZuYR3eeCC3zT7=XXx<2Y>PxfAdeo_ZhwX&czn|r*rD%r(S;Q<^SL7M`hzH=C7Mbz5J8ci^`^) zMqEW3E~ge3P@Rl9`XbLSBn!jn=@`cKs0q!8YfLd>{ZVI+G4ID5-JV$#=1#_wjl0Ro z%{)VM;+of;xIV<(8*^~Xt1;ik{M~`L&cyW~t}k)DxSY#~`8YebP?WgNrCz>kxPPm( zFW{P!_Th zv3SJK5uZmaor7D6IQ=$qk()f^B_H{@odVoJK?)J^ei0((k9a(CgW{B+BzF-xKq*R7 zhO(5SJQb+OJ={wrB7eJ&DpaK!)w!P<)T9=*sY6}rQJ)8BKtmp+5siubr74laL=Mt| zmb9WZZD>n7BA1CAq$8b(Jf{m?=|GKffty_Bwl1PQ<%y$UgBk@GlQAD!mGT- zEM_x@xy)le3s}e^US}~&SjsY%vx1ep!75g>hBtYOw|R%PtYbYJc$fFs$oqW2hkV2) zKIRiXWiwmY%4dAe7ktTAe9bp(V>>(8$u4%YhrR4$Ki~2l-}3_p_>rIZnS=boArA8^ zM>xuF9OF2@bAmtklfU?zf1=ix(aTTqed^_>UcT{dSZ!lFJJ`uCc9T9s%k|wF!fa$G z2e*=w+sH+3@{pH&Cq*enaY|5+=(3Wc0URBzcf3g-7^@*EEz5LY6 zPy6yu)|8^wR8OuOJ-&&=XJb!h3J(%-&RHHyGL)S3Br6f~Jm9ebWvEYG3iB{8Fp@Fk zBI*renagNKFppg3sN9q$8`-(p>)E)K+sMtm+`>~l$K5GbfGKV z=uQuM(u>~op)dXD&j1E8h`~I>5Qg$Fk1&kkJj!D{&Im>_iqSm5lZ;_3<9Ldv8P793 z%X2)>1YTewlX#KIOkpai)~D9*IP7H~`}vmd_?{m)z>oaI&m80z4sn=YIl@tX;~2;J zofG`QpZvw&oFaBQmD4z#Gx!f@au#QE4(DI4f|A_D z-ISsn9n$)5;b*M`{>hk~%Xvl*!qA^WqN~-mx zUj82E!Cv;UpKtk&@A-iP{K!xI%t3zP5Qq7dBOK*7j&YpGuTJm>fASZ9^H28jQ+%I# z`KgzmdimFhE3PNS_oXhm%*kb|P+qa4L3&rNio z4v+aAQF|=H<3yb?qYinW?_WkouZ^P@Wqo}vkMlfnPrZgrVgfa}pHWO@8fjmC>gDJC zPnHJf6wR9XOy@(a%ZSgJIEOfw;=GM>{sQ9O8*vYg`23pqT$=bynoEiEFz(rL1#!N| zI+(bZ$JNAV*j&qXTu*#n&5gu)o`tMrC&oigVogVUmQ7w_Y{X~U#OIO};0_8>h{D8p zi!l^qC&pTg&sb9uW3d#aDMO5l7-KQMV(eAq9x4%YT#ThERHYhm&yg4>HHa}2_acdL z8)GuoqQu&k`aD1bVvIdVBO23$rZl5DG5%u?X+>+=(3Wd-eE24SkDIDk z!~Dt-j`ADFIL_~!;1B-fFaG9~Q~i(AIGr>24`*@~XLAncavtY%0T*%+nYfrsxRlGd zoGZAJ%v{CQT*I}bTAy+3I5eU$O=wCpn$v=ov?BHL)4rY5%TK-hwx^|iJE_+9Kf9No z;`!?iE}-k!x>yoSFdIA80$J>y?cF1@Ce> zsCy4)08!_@kw^XBsG*l4FV}D}mvRYrFr2IWTo$r&gRirbhy3(swAcHQhkWGaHeyXn z0Y*}iT-;7IVqZW_a?ppD$xME#a4SQ3h#HioFJ&l48wwF?W%^T!0^Um@N>h?oYc!t`||%=@3H@X0Cnoz Ay#N3J literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.ninja_log b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.ninja_log new file mode 100644 index 000000000..6c27d24fa --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.ninja_log @@ -0,0 +1,39 @@ +# ninja log v5 +0 12 1739296574212658195 qt6_application_autogen/timestamp f67a6ba95572aac6 +0 12 1739296574212658195 qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 +0 12 1739296574212658195 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp f67a6ba95572aac6 +0 12 1739296574212658195 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 +150 1006 1739046735953228762 CMakeFiles/qt6_application.dir/main.cpp.o 664753324bd99800 +149 980 1739046735933228752 CMakeFiles/qt6_application.dir/qt6_application_autogen/mocs_compilation.cpp.o dd363273d0b9b662 +12 1220 1739296575442659537 CMakeFiles/qt6_application.dir/mainwindow.cpp.o a6a655d1b446dedd +1220 1537 1739296575752659874 qt6_application 38d90bfe05cc3381 +0 14 1739296989689808262 qt6_application_autogen/timestamp f67a6ba95572aac6 +0 14 1739296989689808262 qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 +0 14 1739296989689808262 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp f67a6ba95572aac6 +0 14 1739296989689808262 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 +14 1384 1739296991079839224 CMakeFiles/qt6_application.dir/mainwindow.cpp.o a6a655d1b446dedd +1384 1652 1739296991349839105 qt6_application 38d90bfe05cc3381 +1 14 1739297032999831500 qt6_application_autogen/timestamp f67a6ba95572aac6 +1 14 1739297032999831500 qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 +1 14 1739297032999831500 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp f67a6ba95572aac6 +1 14 1739297032999831500 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 +14 1381 1739297034389830512 CMakeFiles/qt6_application.dir/mainwindow.cpp.o a6a655d1b446dedd +1381 1661 1739297034669830310 qt6_application 38d90bfe05cc3381 +1 14 1739297157589793203 qt6_application_autogen/timestamp f67a6ba95572aac6 +1 14 1739297157589793203 qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 +1 14 1739297157589793203 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp f67a6ba95572aac6 +1 14 1739297157589793203 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 +15 1410 1739297159009794361 CMakeFiles/qt6_application.dir/mainwindow.cpp.o a6a655d1b446dedd +1410 1696 1739297159289794938 qt6_application 38d90bfe05cc3381 +0 13 1739297269119769116 qt6_application_autogen/timestamp f67a6ba95572aac6 +0 13 1739297269119769116 qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 +0 13 1739297269119769116 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp f67a6ba95572aac6 +0 13 1739297269119769116 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 +14 1465 1739297270599768500 CMakeFiles/qt6_application.dir/mainwindow.cpp.o a6a655d1b446dedd +1465 1731 1739297270859768260 qt6_application 38d90bfe05cc3381 +0 13 1739297692949993505 qt6_application_autogen/timestamp f67a6ba95572aac6 +0 13 1739297692949993505 qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 +0 13 1739297692949993505 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp f67a6ba95572aac6 +0 13 1739297692949993505 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 +13 1416 1739297694369994520 CMakeFiles/qt6_application.dir/mainwindow.cpp.o a6a655d1b446dedd +1416 1694 1739297694649994721 qt6_application 38d90bfe05cc3381 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeploySupport.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeploySupport.cmake new file mode 100644 index 000000000..bdf474411 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeploySupport.cmake @@ -0,0 +1,69 @@ +cmake_minimum_required(VERSION 3.16...3.21) + +# These are part of the public API. Projects should use them to provide a +# consistent set of prefix-relative destinations. +if(NOT QT_DEPLOY_BIN_DIR) + set(QT_DEPLOY_BIN_DIR "bin") +endif() +if(NOT QT_DEPLOY_LIBEXEC_DIR) + set(QT_DEPLOY_LIBEXEC_DIR "libexec") +endif() +if(NOT QT_DEPLOY_LIB_DIR) + set(QT_DEPLOY_LIB_DIR "lib") +endif() +if(NOT QT_DEPLOY_PLUGINS_DIR) + set(QT_DEPLOY_PLUGINS_DIR "plugins") +endif() +if(NOT QT_DEPLOY_QML_DIR) + set(QT_DEPLOY_QML_DIR "qml") +endif() +if(NOT QT_DEPLOY_TRANSLATIONS_DIR) + set(QT_DEPLOY_TRANSLATIONS_DIR "translations") +endif() +if(NOT QT_DEPLOY_PREFIX) + set(QT_DEPLOY_PREFIX "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}") +endif() +if(QT_DEPLOY_PREFIX STREQUAL "") + set(QT_DEPLOY_PREFIX .) +endif() +if(NOT QT_DEPLOY_IGNORED_LIB_DIRS) + set(QT_DEPLOY_IGNORED_LIB_DIRS "/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +endif() + +# These are internal implementation details. They may be removed at any time. +set(__QT_DEPLOY_SYSTEM_NAME "Linux") +set(__QT_DEPLOY_IS_SHARED_LIBS_BUILD "ON") +set(__QT_DEPLOY_TOOL "GRD") +set(__QT_DEPLOY_IMPL_DIR "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt") +set(__QT_DEPLOY_VERBOSE "") +set(__QT_CMAKE_EXPORT_NAMESPACE "Qt6") +set(__QT_DEPLOY_GENERATOR_IS_MULTI_CONFIG "0") +set(__QT_DEPLOY_ACTIVE_CONFIG "Debug") +set(__QT_NO_CREATE_VERSIONLESS_FUNCTIONS "") +set(__QT_DEFAULT_MAJOR_VERSION "6") +set(__QT_DEPLOY_QT_ADDITIONAL_PACKAGES_PREFIX_PATH "") +set(__QT_DEPLOY_QT_INSTALL_PREFIX "/home/austenharrell/Qt/6.8.0/gcc_64") +set(__QT_DEPLOY_QT_INSTALL_BINS "bin") +set(__QT_DEPLOY_QT_INSTALL_DATA ".") +set(__QT_DEPLOY_QT_INSTALL_LIBEXECS "libexec") +set(__QT_DEPLOY_QT_INSTALL_PLUGINS "plugins") +set(__QT_DEPLOY_QT_INSTALL_TRANSLATIONS "translations") +set(__QT_DEPLOY_TARGET_QT_PATHS_PATH "/home/austenharrell/Qt/6.8.0/gcc_64/bin/qtpaths6") +set(__QT_DEPLOY_PLUGINS "") +set(__QT_DEPLOY_MUST_ADJUST_PLUGINS_RPATH "") +set(__QT_DEPLOY_USE_PATCHELF "") +set(__QT_DEPLOY_PATCHELF_EXECUTABLE "") +set(__QT_DEPLOY_QT_IS_MULTI_CONFIG_BUILD_WITH_DEBUG "FALSE") +set(__QT_DEPLOY_QT_DEBUG_POSTFIX "") + +# Define the CMake commands to be made available during deployment. +set(__qt_deploy_support_files + "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeployTargets.cmake" + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreDeploySupport.cmake" +) +foreach(__qt_deploy_support_file IN LISTS __qt_deploy_support_files) + include("${__qt_deploy_support_file}") +endforeach() + +unset(__qt_deploy_support_file) +unset(__qt_deploy_support_files) diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeployTargets.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeployTargets.cmake new file mode 100644 index 000000000..99d216753 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeployTargets.cmake @@ -0,0 +1,2 @@ +set(__QT_DEPLOY_TARGET_qt6_application_FILE /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application) +set(__QT_DEPLOY_TARGET_qt6_application_TYPE EXECUTABLE) diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/LICENSE.conan b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/LICENSE.conan new file mode 100644 index 000000000..541f5a3a6 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/LICENSE.conan @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2019 JFrog + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake new file mode 100644 index 000000000..c797138f6 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake @@ -0,0 +1,272 @@ +# +# Internal Qt Creator variable reference +# +foreach(qtcreator_var + QT_QMAKE_EXECUTABLE CMAKE_PREFIX_PATH CMAKE_C_COMPILER CMAKE_CXX_COMPILER + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELWITHDEBINFO) + set(__just_reference_${qtcreator_var} ${${qtcreator_var}}) +endforeach() + +if (EXISTS "${CMAKE_SOURCE_DIR}/QtCreatorPackageManager.cmake") + include("${CMAKE_SOURCE_DIR}/QtCreatorPackageManager.cmake") +endif() + +if (QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP) + return() +endif() +option(QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP "Skip Qt Creator's package manager auto-setup" OFF) + +# Store the C/C++ object output extension +if (CMAKE_VERSION GREATER_EQUAL "3.19") + cmake_language(DEFER CALL set CMAKE_C_OUTPUT_EXTENSION "${CMAKE_C_OUTPUT_EXTENSION}" CACHE STRING "" FORCE) + cmake_language(DEFER CALL set CMAKE_CXX_OUTPUT_EXTENSION "${CMAKE_CXX_OUTPUT_EXTENSION}" CACHE STRING "" FORCE) +endif() + +macro(qtc_auto_setup_compiler_standard toolchainFile) + foreach(lang_var C CXX CUDA OBJC OBJCXX) + foreach(prop_var STANDARD STANDARD_REQUIRED EXTENSIONS) + if (CMAKE_${lang_var}_${prop_var}) + file(APPEND "${toolchainFile}" + "set(CMAKE_${lang_var}_${prop_var} ${CMAKE_${lang_var}_${prop_var}})\n") + endif() + endforeach() + endforeach() + + # Forward important CMake variables to the package manager in the toolchain file + foreach(fwd_var CMAKE_MSVC_RUNTIME_LIBRARY CMAKE_SYSROOT CMAKE_OSX_SYSROOT CMAKE_OSX_ARCHITECTURES) + if (${fwd_var}) + file(APPEND "${toolchainFile}" + "set(${fwd_var} ${${fwd_var}})\n") + endif() + endforeach() +endmacro() + +# +# conan +# +macro(qtc_auto_setup_conan) + foreach(file conanfile.txt conanfile.py) + if (EXISTS "${CMAKE_SOURCE_DIR}/${file}") + set(conanfile_txt "${CMAKE_SOURCE_DIR}/${file}") + break() + endif() + endforeach() + + if (conanfile_txt AND NOT QT_CREATOR_SKIP_CONAN_SETUP) + option(QT_CREATOR_SKIP_CONAN_SETUP "Skip Qt Creator's conan package manager auto-setup" OFF) + set(QT_CREATOR_CONAN_BUILD_POLICY "missing" CACHE STRING "Qt Creator's conan package manager auto-setup build policy. This is used for the BUILD property of cmake_conan_run") + + find_program(conan_program conan) + if (NOT conan_program) + message(WARNING "Qt Creator: conan executable not found. " + "Package manager auto-setup will be skipped. " + "To disable this warning set QT_CREATOR_SKIP_CONAN_SETUP to ON.") + return() + endif() + execute_process(COMMAND ${conan_program} --version + RESULT_VARIABLE result_code + OUTPUT_VARIABLE conan_version_output + ERROR_VARIABLE conan_version_output) + if (NOT result_code EQUAL 0) + message(FATAL_ERROR "conan --version failed='${result_code}: ${conan_version_output}") + endif() + + string(REGEX REPLACE ".*Conan version ([0-9].[0-9]).*" "\\1" conan_version "${conan_version_output}") + + set(conanfile_timestamp_file "${CMAKE_BINARY_DIR}/conan-dependencies/conanfile.timestamp") + file(TIMESTAMP "${conanfile_txt}" conanfile_timestamp) + + set(do_conan_installation ON) + if (EXISTS "${conanfile_timestamp_file}") + file(READ "${conanfile_timestamp_file}" old_conanfile_timestamp) + if ("${conanfile_timestamp}" STREQUAL "${old_conanfile_timestamp}") + set(do_conan_installation OFF) + endif() + endif() + + set(conanfile_build_policy_file "${CMAKE_BINARY_DIR}/conan-dependencies/conanfile.buildpolicy") + if (EXISTS "${conanfile_build_policy_file}") + file(READ "${conanfile_build_policy_file}" build_policy) + if (NOT "${build_policy}" STREQUAL "${QT_CREATOR_CONAN_BUILD_POLICY}") + set(do_conan_installation ON) + endif() + endif() + + if (do_conan_installation) + message(STATUS "Qt Creator: conan package manager auto-setup. " + "Skip this step by setting QT_CREATOR_SKIP_CONAN_SETUP to ON.") + + file(COPY "${conanfile_txt}" DESTINATION "${CMAKE_BINARY_DIR}/conan-dependencies/") + + file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" " + set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\") + set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\") + ") + qtc_auto_setup_compiler_standard("${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake") + + if (CMAKE_TOOLCHAIN_FILE) + file(APPEND "${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" + "include(\"${CMAKE_TOOLCHAIN_FILE}\")\n") + endif() + + file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/CMakeLists.txt" " + cmake_minimum_required(VERSION 3.15) + + unset(CMAKE_PROJECT_INCLUDE_BEFORE CACHE) + project(conan-setup) + + if (${conan_version} VERSION_GREATER_EQUAL 2.0) + set(CONAN_COMMAND \"${conan_program}\") + include(\"${CMAKE_CURRENT_LIST_DIR}/conan_provider.cmake\") + conan_profile_detect_default() + detect_host_profile(\"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\") + + set(build_types \${CMAKE_BUILD_TYPE}) + if (CMAKE_CONFIGURATION_TYPES) + set(build_types \${CMAKE_CONFIGURATION_TYPES}) + endif() + + foreach(type \${build_types}) + conan_install( + -pr \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\" + --build=${QT_CREATOR_CONAN_BUILD_POLICY} + -s build_type=\${type} + -g CMakeDeps) + endforeach() + + get_property(CONAN_INSTALL_SUCCESS GLOBAL PROPERTY CONAN_INSTALL_SUCCESS) + if (CONAN_INSTALL_SUCCESS) + get_property(CONAN_GENERATORS_FOLDER GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) + file(TO_CMAKE_PATH \"\${CONAN_GENERATORS_FOLDER}\" CONAN_GENERATORS_FOLDER) + file(WRITE \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake\" \" + list(PREPEND CMAKE_PREFIX_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") + list(PREPEND CMAKE_MODULE_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") + list(PREPEND CMAKE_FIND_ROOT_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") + list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH) + list(REMOVE_DUPLICATES CMAKE_MODULE_PATH) + list(REMOVE_DUPLICATES CMAKE_FIND_ROOT_PATH) + set(CMAKE_PREFIX_PATH \\\"\\\${CMAKE_PREFIX_PATH}\\\" CACHE STRING \\\"\\\" FORCE) + set(CMAKE_MODULE_PATH \\\"\\\${CMAKE_MODULE_PATH}\\\" CACHE STRING \\\"\\\" FORCE) + set(CMAKE_FIND_ROOT_PATH \\\"\\\${CMAKE_FIND_ROOT_PATH}\\\" CACHE STRING \\\"\\\" FORCE) + \") + endif() + else() + include(\"${CMAKE_CURRENT_LIST_DIR}/conan.cmake\") + conan_cmake_run( + CONANFILE \"${conanfile_txt}\" + INSTALL_FOLDER \"${CMAKE_BINARY_DIR}/conan-dependencies\" + GENERATORS cmake_paths cmake_find_package json + BUILD ${QT_CREATOR_CONAN_BUILD_POLICY} + ENV CONAN_CMAKE_TOOLCHAIN_FILE=\"${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake\" + ) + endif() + ") + + if (NOT DEFINED CMAKE_BUILD_TYPE AND NOT DEFINED CMAKE_CONFIGURATION_TYPES) + set(CMAKE_CONFIGURATION_TYPES "Debug;Release") + endif() + + execute_process(COMMAND ${CMAKE_COMMAND} + -S "${CMAKE_BINARY_DIR}/conan-dependencies/" + -B "${CMAKE_BINARY_DIR}/conan-dependencies/build" + -C "${CMAKE_BINARY_DIR}/qtcsettings.cmake" + -D "CMAKE_TOOLCHAIN_FILE=${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" + -G ${CMAKE_GENERATOR} + -D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -D "CMAKE_CONFIGURATION_TYPES=${CMAKE_CONFIGURATION_TYPES}" + RESULT_VARIABLE result + ) + if (result EQUAL 0) + file(WRITE "${conanfile_timestamp_file}" "${conanfile_timestamp}") + file(WRITE "${conanfile_build_policy_file}" ${QT_CREATOR_CONAN_BUILD_POLICY}) + else() + message(WARNING "Qt Creator's conan package manager auto-setup failed. Consider setting " + "QT_CREATOR_SKIP_CONAN_SETUP to ON and reconfigure to skip this step.") + return() + endif() + endif() + + include("${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake") + endif() + unset(conanfile_txt) +endmacro() +qtc_auto_setup_conan() + +# +# vcpkg +# +macro(qtc_auto_setup_vcpkg) + if (EXISTS "${CMAKE_SOURCE_DIR}/vcpkg.json" AND NOT QT_CREATOR_SKIP_VCPKG_SETUP) + option(QT_CREATOR_SKIP_VCPKG_SETUP "Skip Qt Creator's vcpkg package manager auto-setup" OFF) + + find_program(vcpkg_program vcpkg + PATHS $ENV{VCPKG_ROOT} ${CMAKE_SOURCE_DIR}/vcpkg + NO_DEFAULT_PATH + ) + if (NOT vcpkg_program) + message(WARNING "Qt Creator: vcpkg executable not found. " + "Package manager auto-setup will be skipped. " + "To disable this warning set QT_CREATOR_SKIP_VCPKG_SETUP to ON.") + return() + endif() + execute_process(COMMAND ${vcpkg_program} version + RESULT_VARIABLE result_code + OUTPUT_VARIABLE vcpkg_version_output + ERROR_VARIABLE vcpkg_version_output) + if (NOT result_code EQUAL 0) + message(FATAL_ERROR "vcpkg version failed='${result_code}: ${vcpkg_version_output}") + endif() + + # Resolve any symlinks + get_filename_component(vpkg_program_real_path ${vcpkg_program} REALPATH) + get_filename_component(vpkg_root ${vpkg_program_real_path} DIRECTORY) + + if (NOT EXISTS "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") + message(STATUS "Qt Creator: vcpkg package manager auto-setup. " + "Skip this step by setting QT_CREATOR_SKIP_VCPKG_SETUP to ON.") + + file(WRITE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" " + set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\") + set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\") + ") + qtc_auto_setup_compiler_standard("${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") + + if (CMAKE_TOOLCHAIN_FILE AND NOT + CMAKE_TOOLCHAIN_FILE STREQUAL "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") + file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" + "include(\"${CMAKE_TOOLCHAIN_FILE}\")\n") + endif() + + if (VCPKG_TARGET_TRIPLET) + set(vcpkg_triplet ${VCPKG_TARGET_TRIPLET}) + else() + if (WIN32) + set(vcpkg_triplet x64-mingw-static) + if (CMAKE_CXX_COMPILER MATCHES ".*/(.*)/cl.exe") + set(vcpkg_triplet ${CMAKE_MATCH_1}-windows) + endif() + elseif(APPLE) + set(vcpkg_triplet x64-osx) + else() + set(vcpkg_triplet x64-linux) + endif() + endif() + + file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" " + set(VCPKG_TARGET_TRIPLET ${vcpkg_triplet}) + include(\"${vpkg_root}/scripts/buildsystems/vcpkg.cmake\") + ") + endif() + + set(CMAKE_TOOLCHAIN_FILE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" CACHE PATH "" FORCE) + + # Save CMAKE_PREFIX_PATH and CMAKE_MODULE_PATH as cache variables + if (CMAKE_VERSION GREATER_EQUAL "3.19") + cmake_language(DEFER CALL list REMOVE_DUPLICATES CMAKE_PREFIX_PATH) + cmake_language(DEFER CALL list REMOVE_DUPLICATES CMAKE_MODULE_PATH) + cmake_language(DEFER CALL set CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH}" CACHE STRING "" FORCE) + cmake_language(DEFER CALL set CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" CACHE STRING "" FORCE) + endif() + endif() +endmacro() +qtc_auto_setup_vcpkg() diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan.cmake new file mode 100644 index 000000000..4f5f67e74 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan.cmake @@ -0,0 +1,1026 @@ +# The MIT License (MIT) + +# Copyright (c) 2018 JFrog + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + + + +# This file comes from: https://github.com/conan-io/cmake-conan. Please refer +# to this repository for issues and documentation. + +# Its purpose is to wrap and launch Conan C/C++ Package Manager when cmake is called. +# It will take CMake current settings (os, compiler, compiler version, architecture) +# and translate them to conan settings for installing and retrieving dependencies. + +# It is intended to facilitate developers building projects that have conan dependencies, +# but it is only necessary on the end-user side. It is not necessary to create conan +# packages, in fact it shouldn't be use for that. Check the project documentation. + +# version: 0.18.1 + +include(CMakeParseArguments) + +function(_get_msvc_ide_version result) + set(${result} "" PARENT_SCOPE) + if(NOT MSVC_VERSION VERSION_LESS 1400 AND MSVC_VERSION VERSION_LESS 1500) + set(${result} 8 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1500 AND MSVC_VERSION VERSION_LESS 1600) + set(${result} 9 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1600 AND MSVC_VERSION VERSION_LESS 1700) + set(${result} 10 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1700 AND MSVC_VERSION VERSION_LESS 1800) + set(${result} 11 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1800 AND MSVC_VERSION VERSION_LESS 1900) + set(${result} 12 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1900 AND MSVC_VERSION VERSION_LESS 1910) + set(${result} 14 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1910 AND MSVC_VERSION VERSION_LESS 1920) + set(${result} 15 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1920 AND MSVC_VERSION VERSION_LESS 1930) + set(${result} 16 PARENT_SCOPE) + elseif(NOT MSVC_VERSION VERSION_LESS 1930 AND MSVC_VERSION VERSION_LESS 1940) + set(${result} 17 PARENT_SCOPE) + else() + message(FATAL_ERROR "Conan: Unknown MSVC compiler version [${MSVC_VERSION}]") + endif() +endfunction() + +macro(_conan_detect_build_type) + conan_parse_arguments(${ARGV}) + + if(ARGUMENTS_BUILD_TYPE) + set(_CONAN_SETTING_BUILD_TYPE ${ARGUMENTS_BUILD_TYPE}) + elseif(CMAKE_BUILD_TYPE) + set(_CONAN_SETTING_BUILD_TYPE ${CMAKE_BUILD_TYPE}) + else() + message(FATAL_ERROR "Please specify in command line CMAKE_BUILD_TYPE (-DCMAKE_BUILD_TYPE=Release)") + endif() + + string(TOUPPER ${_CONAN_SETTING_BUILD_TYPE} _CONAN_SETTING_BUILD_TYPE_UPPER) + if (_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "DEBUG") + set(_CONAN_SETTING_BUILD_TYPE "Debug") + elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "RELEASE") + set(_CONAN_SETTING_BUILD_TYPE "Release") + elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "RELWITHDEBINFO") + set(_CONAN_SETTING_BUILD_TYPE "RelWithDebInfo") + elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "MINSIZEREL") + set(_CONAN_SETTING_BUILD_TYPE "MinSizeRel") + endif() +endmacro() + +macro(_conan_check_system_name) + #handle -s os setting + if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") + #use default conan os setting if CMAKE_SYSTEM_NAME is not defined + set(CONAN_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}) + if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") + set(CONAN_SYSTEM_NAME Macos) + endif() + if(${CMAKE_SYSTEM_NAME} STREQUAL "QNX") + set(CONAN_SYSTEM_NAME Neutrino) + endif() + set(CONAN_SUPPORTED_PLATFORMS Windows Linux Macos Android iOS FreeBSD WindowsStore WindowsCE watchOS tvOS FreeBSD SunOS AIX Arduino Emscripten Neutrino) + list (FIND CONAN_SUPPORTED_PLATFORMS "${CONAN_SYSTEM_NAME}" _index) + if (${_index} GREATER -1) + #check if the cmake system is a conan supported one + set(_CONAN_SETTING_OS ${CONAN_SYSTEM_NAME}) + else() + message(FATAL_ERROR "cmake system ${CONAN_SYSTEM_NAME} is not supported by conan. Use one of ${CONAN_SUPPORTED_PLATFORMS}") + endif() + endif() +endmacro() + +macro(_conan_check_language) + get_property(_languages GLOBAL PROPERTY ENABLED_LANGUAGES) + if (";${_languages};" MATCHES ";CXX;") + set(LANGUAGE CXX) + set(USING_CXX 1) + elseif (";${_languages};" MATCHES ";C;") + set(LANGUAGE C) + set(USING_CXX 0) + else () + message(FATAL_ERROR "Conan: Neither C or C++ was detected as a language for the project. Unabled to detect compiler version.") + endif() +endmacro() + +macro(_conan_detect_compiler) + + conan_parse_arguments(${ARGV}) + + if(ARGUMENTS_ARCH) + set(_CONAN_SETTING_ARCH ${ARGUMENTS_ARCH}) + endif() + + if(USING_CXX) + set(_CONAN_SETTING_COMPILER_CPPSTD ${CMAKE_CXX_STANDARD}) + endif() + + if (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL GNU) + # using GCC + # TODO: Handle other params + string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + set(COMPILER_VERSION ${MAJOR}.${MINOR}) + if(${MAJOR} GREATER 4) + set(COMPILER_VERSION ${MAJOR}) + endif() + set(_CONAN_SETTING_COMPILER gcc) + set(_CONAN_SETTING_COMPILER_VERSION ${COMPILER_VERSION}) + if (USING_CXX) + conan_cmake_detect_unix_libcxx(_LIBCXX) + set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) + endif () + elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Intel) + string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + set(COMPILER_VERSION ${MAJOR}.${MINOR}) + set(_CONAN_SETTING_COMPILER intel) + set(_CONAN_SETTING_COMPILER_VERSION ${COMPILER_VERSION}) + if (USING_CXX) + conan_cmake_detect_unix_libcxx(_LIBCXX) + set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) + endif () + elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL AppleClang) + # using AppleClang + string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + set(_CONAN_SETTING_COMPILER apple-clang) + set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}.${MINOR}) + if (USING_CXX) + conan_cmake_detect_unix_libcxx(_LIBCXX) + set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) + endif () + elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Clang + AND NOT "${CMAKE_${LANGUAGE}_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC" + AND NOT "${CMAKE_${LANGUAGE}_SIMULATE_ID}" STREQUAL "MSVC") + + string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) + list(GET VERSION_LIST 0 MAJOR) + list(GET VERSION_LIST 1 MINOR) + set(_CONAN_SETTING_COMPILER clang) + set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}.${MINOR}) + if(APPLE) + cmake_policy(GET CMP0025 APPLE_CLANG_POLICY) + if(NOT APPLE_CLANG_POLICY STREQUAL NEW) + message(STATUS "Conan: APPLE and Clang detected. Assuming apple-clang compiler. Set CMP0025 to avoid it") + set(_CONAN_SETTING_COMPILER apple-clang) + endif() + endif() + if(${_CONAN_SETTING_COMPILER} STREQUAL clang AND ${MAJOR} GREATER 7) + set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}) + endif() + if (USING_CXX) + conan_cmake_detect_unix_libcxx(_LIBCXX) + set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) + endif () + elseif(${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL MSVC + OR (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Clang + AND "${CMAKE_${LANGUAGE}_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC" + AND "${CMAKE_${LANGUAGE}_SIMULATE_ID}" STREQUAL "MSVC")) + + set(_VISUAL "Visual Studio") + _get_msvc_ide_version(_VISUAL_VERSION) + if("${_VISUAL_VERSION}" STREQUAL "") + message(FATAL_ERROR "Conan: Visual Studio not recognized") + else() + set(_CONAN_SETTING_COMPILER ${_VISUAL}) + set(_CONAN_SETTING_COMPILER_VERSION ${_VISUAL_VERSION}) + endif() + + if(NOT _CONAN_SETTING_ARCH) + if (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "64") + set(_CONAN_SETTING_ARCH x86_64) + elseif (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "^ARM") + message(STATUS "Conan: Using default ARM architecture from MSVC") + set(_CONAN_SETTING_ARCH armv6) + elseif (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "86") + set(_CONAN_SETTING_ARCH x86) + else () + message(FATAL_ERROR "Conan: Unknown MSVC architecture [${MSVC_${LANGUAGE}_ARCHITECTURE_ID}]") + endif() + endif() + + conan_cmake_detect_vs_runtime(_vs_runtime ${ARGV}) + message(STATUS "Conan: Detected VS runtime: ${_vs_runtime}") + set(_CONAN_SETTING_COMPILER_RUNTIME ${_vs_runtime}) + + if (CMAKE_GENERATOR_TOOLSET) + set(_CONAN_SETTING_COMPILER_TOOLSET ${CMAKE_VS_PLATFORM_TOOLSET}) + elseif(CMAKE_VS_PLATFORM_TOOLSET AND (CMAKE_GENERATOR STREQUAL "Ninja")) + set(_CONAN_SETTING_COMPILER_TOOLSET ${CMAKE_VS_PLATFORM_TOOLSET}) + endif() + else() + message(FATAL_ERROR "Conan: compiler setup not recognized") + endif() + +endmacro() + +function(conan_cmake_settings result) + #message(STATUS "COMPILER " ${CMAKE_CXX_COMPILER}) + #message(STATUS "COMPILER " ${CMAKE_CXX_COMPILER_ID}) + #message(STATUS "VERSION " ${CMAKE_CXX_COMPILER_VERSION}) + #message(STATUS "FLAGS " ${CMAKE_LANG_FLAGS}) + #message(STATUS "LIB ARCH " ${CMAKE_CXX_LIBRARY_ARCHITECTURE}) + #message(STATUS "BUILD TYPE " ${CMAKE_BUILD_TYPE}) + #message(STATUS "GENERATOR " ${CMAKE_GENERATOR}) + #message(STATUS "GENERATOR WIN64 " ${CMAKE_CL_64}) + + message(STATUS "Conan: Automatic detection of conan settings from cmake") + + conan_parse_arguments(${ARGV}) + + _conan_detect_build_type(${ARGV}) + + _conan_check_system_name() + + _conan_check_language() + + _conan_detect_compiler(${ARGV}) + + # If profile is defined it is used + if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARGUMENTS_DEBUG_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_DEBUG_PROFILE}) + elseif(CMAKE_BUILD_TYPE STREQUAL "Release" AND ARGUMENTS_RELEASE_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_RELEASE_PROFILE}) + elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" AND ARGUMENTS_RELWITHDEBINFO_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_RELWITHDEBINFO_PROFILE}) + elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" AND ARGUMENTS_MINSIZEREL_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_MINSIZEREL_PROFILE}) + elseif(ARGUMENTS_PROFILE) + set(_APPLIED_PROFILES ${ARGUMENTS_PROFILE}) + endif() + + foreach(ARG ${_APPLIED_PROFILES}) + set(_SETTINGS ${_SETTINGS} -pr=${ARG}) + endforeach() + foreach(ARG ${ARGUMENTS_PROFILE_BUILD}) + conan_check(VERSION 1.24.0 REQUIRED DETECT_QUIET) + set(_SETTINGS ${_SETTINGS} -pr:b=${ARG}) + endforeach() + + if(NOT _SETTINGS OR ARGUMENTS_PROFILE_AUTO STREQUAL "ALL") + set(ARGUMENTS_PROFILE_AUTO arch build_type compiler compiler.version + compiler.runtime compiler.libcxx compiler.toolset) + endif() + + # remove any manually specified settings from the autodetected settings + foreach(ARG ${ARGUMENTS_SETTINGS}) + string(REGEX MATCH "[^=]*" MANUAL_SETTING "${ARG}") + message(STATUS "Conan: ${MANUAL_SETTING} was added as an argument. Not using the autodetected one.") + list(REMOVE_ITEM ARGUMENTS_PROFILE_AUTO "${MANUAL_SETTING}") + endforeach() + + # Automatic from CMake + foreach(ARG ${ARGUMENTS_PROFILE_AUTO}) + string(TOUPPER ${ARG} _arg_name) + string(REPLACE "." "_" _arg_name ${_arg_name}) + if(_CONAN_SETTING_${_arg_name}) + set(_SETTINGS ${_SETTINGS} -s ${ARG}=${_CONAN_SETTING_${_arg_name}}) + endif() + endforeach() + + foreach(ARG ${ARGUMENTS_SETTINGS}) + set(_SETTINGS ${_SETTINGS} -s ${ARG}) + endforeach() + + message(STATUS "Conan: Settings= ${_SETTINGS}") + + set(${result} ${_SETTINGS} PARENT_SCOPE) +endfunction() + + +function(conan_cmake_detect_unix_libcxx result) + # Take into account any -stdlib in compile options + get_directory_property(compile_options DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMPILE_OPTIONS) + string(GENEX_STRIP "${compile_options}" compile_options) + + # Take into account any _GLIBCXX_USE_CXX11_ABI in compile definitions + get_directory_property(defines DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMPILE_DEFINITIONS) + string(GENEX_STRIP "${defines}" defines) + + foreach(define ${defines}) + if(define MATCHES "_GLIBCXX_USE_CXX11_ABI") + if(define MATCHES "^-D") + set(compile_options ${compile_options} "${define}") + else() + set(compile_options ${compile_options} "-D${define}") + endif() + endif() + endforeach() + + # add additional compiler options ala cmRulePlaceholderExpander::ExpandRuleVariable + set(EXPAND_CXX_COMPILER ${CMAKE_CXX_COMPILER}) + if(CMAKE_CXX_COMPILER_ARG1) + # CMake splits CXX="foo bar baz" into CMAKE_CXX_COMPILER="foo", CMAKE_CXX_COMPILER_ARG1="bar baz" + # without this, ccache, winegcc, or other wrappers might lose all their arguments + separate_arguments(SPLIT_CXX_COMPILER_ARG1 NATIVE_COMMAND ${CMAKE_CXX_COMPILER_ARG1}) + list(APPEND EXPAND_CXX_COMPILER ${SPLIT_CXX_COMPILER_ARG1}) + endif() + + if(CMAKE_CXX_COMPILE_OPTIONS_TARGET AND CMAKE_CXX_COMPILER_TARGET) + # without --target= we may be calling the wrong underlying GCC + list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_TARGET}${CMAKE_CXX_COMPILER_TARGET}") + endif() + + if(CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN AND CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN) + list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN}") + endif() + + if(CMAKE_CXX_COMPILE_OPTIONS_SYSROOT) + # without --sysroot= we may find the wrong #include + if(CMAKE_SYSROOT_COMPILE) + list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT_COMPILE}") + elseif(CMAKE_SYSROOT) + list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT}") + endif() + endif() + + separate_arguments(SPLIT_CXX_FLAGS NATIVE_COMMAND ${CMAKE_CXX_FLAGS}) + + if(CMAKE_OSX_SYSROOT) + set(xcode_sysroot_option "--sysroot=${CMAKE_OSX_SYSROOT}") + endif() + + execute_process( + COMMAND ${CMAKE_COMMAND} -E echo "#include " + COMMAND ${EXPAND_CXX_COMPILER} ${SPLIT_CXX_FLAGS} -x c++ ${xcode_sysroot_option} ${compile_options} -E -dM - + OUTPUT_VARIABLE string_defines + ) + + if(string_defines MATCHES "#define __GLIBCXX__") + # Allow -D_GLIBCXX_USE_CXX11_ABI=ON/OFF as argument to cmake + if(DEFINED _GLIBCXX_USE_CXX11_ABI) + if(_GLIBCXX_USE_CXX11_ABI) + set(${result} libstdc++11 PARENT_SCOPE) + return() + else() + set(${result} libstdc++ PARENT_SCOPE) + return() + endif() + endif() + + if(string_defines MATCHES "#define _GLIBCXX_USE_CXX11_ABI 1\n") + set(${result} libstdc++11 PARENT_SCOPE) + else() + # Either the compiler is missing the define because it is old, and so + # it can't use the new abi, or the compiler was configured to use the + # old abi by the user or distro (e.g. devtoolset on RHEL/CentOS) + set(${result} libstdc++ PARENT_SCOPE) + endif() + else() + set(${result} libc++ PARENT_SCOPE) + endif() +endfunction() + +function(conan_cmake_detect_vs_runtime result) + + conan_parse_arguments(${ARGV}) + if(ARGUMENTS_BUILD_TYPE) + set(build_type "${ARGUMENTS_BUILD_TYPE}") + elseif(CMAKE_BUILD_TYPE) + set(build_type "${CMAKE_BUILD_TYPE}") + else() + message(FATAL_ERROR "Please specify in command line CMAKE_BUILD_TYPE (-DCMAKE_BUILD_TYPE=Release)") + endif() + + if(build_type) + string(TOUPPER "${build_type}" build_type) + endif() + set(variables CMAKE_CXX_FLAGS_${build_type} CMAKE_C_FLAGS_${build_type} CMAKE_CXX_FLAGS CMAKE_C_FLAGS) + foreach(variable ${variables}) + if(NOT "${${variable}}" STREQUAL "") + string(REPLACE " " ";" flags "${${variable}}") + foreach (flag ${flags}) + if("${flag}" STREQUAL "/MD" OR "${flag}" STREQUAL "/MDd" OR "${flag}" STREQUAL "/MT" OR "${flag}" STREQUAL "/MTd") + string(SUBSTRING "${flag}" 1 -1 runtime) + set(${result} "${runtime}" PARENT_SCOPE) + return() + endif() + endforeach() + endif() + endforeach() + if("${build_type}" STREQUAL "DEBUG") + set(${result} "MDd" PARENT_SCOPE) + else() + set(${result} "MD" PARENT_SCOPE) + endif() +endfunction() + +function(_collect_settings result) + set(ARGUMENTS_PROFILE_AUTO arch build_type compiler compiler.version + compiler.runtime compiler.libcxx compiler.toolset + compiler.cppstd) + foreach(ARG ${ARGUMENTS_PROFILE_AUTO}) + string(TOUPPER ${ARG} _arg_name) + string(REPLACE "." "_" _arg_name ${_arg_name}) + if(_CONAN_SETTING_${_arg_name}) + set(detected_setings ${detected_setings} ${ARG}=${_CONAN_SETTING_${_arg_name}}) + endif() + endforeach() + set(${result} ${detected_setings} PARENT_SCOPE) +endfunction() + +function(conan_cmake_autodetect detected_settings) + _conan_detect_build_type(${ARGV}) + _conan_check_system_name() + _conan_check_language() + _conan_detect_compiler(${ARGV}) + _collect_settings(collected_settings) + set(${detected_settings} ${collected_settings} PARENT_SCOPE) +endfunction() + +macro(conan_parse_arguments) + set(options BASIC_SETUP CMAKE_TARGETS UPDATE KEEP_RPATHS NO_LOAD NO_OUTPUT_DIRS OUTPUT_QUIET NO_IMPORTS SKIP_STD) + set(oneValueArgs CONANFILE ARCH BUILD_TYPE INSTALL_FOLDER OUTPUT_FOLDER CONAN_COMMAND) + set(multiValueArgs DEBUG_PROFILE RELEASE_PROFILE RELWITHDEBINFO_PROFILE MINSIZEREL_PROFILE + PROFILE REQUIRES OPTIONS IMPORTS SETTINGS BUILD ENV GENERATORS PROFILE_AUTO + INSTALL_ARGS CONFIGURATION_TYPES PROFILE_BUILD BUILD_REQUIRES) + cmake_parse_arguments(ARGUMENTS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) +endmacro() + +function(old_conan_cmake_install) + # Calls "conan install" + # Argument BUILD is equivalant to --build={missing, PkgName,...} or + # --build when argument is 'BUILD all' (which builds all packages from source) + # Argument CONAN_COMMAND, to specify the conan path, e.g. in case of running from source + # cmake does not identify conan as command, even if it is +x and it is in the path + conan_parse_arguments(${ARGV}) + + if(CONAN_CMAKE_MULTI) + set(ARGUMENTS_GENERATORS ${ARGUMENTS_GENERATORS} cmake_multi) + else() + set(ARGUMENTS_GENERATORS ${ARGUMENTS_GENERATORS} cmake) + endif() + + set(CONAN_BUILD_POLICY "") + foreach(ARG ${ARGUMENTS_BUILD}) + if(${ARG} STREQUAL "all") + set(CONAN_BUILD_POLICY ${CONAN_BUILD_POLICY} --build) + break() + else() + set(CONAN_BUILD_POLICY ${CONAN_BUILD_POLICY} --build=${ARG}) + endif() + endforeach() + if(ARGUMENTS_CONAN_COMMAND) + set(CONAN_CMD ${ARGUMENTS_CONAN_COMMAND}) + else() + conan_check(REQUIRED) + endif() + set(CONAN_OPTIONS "") + if(ARGUMENTS_CONANFILE) + if(IS_ABSOLUTE ${ARGUMENTS_CONANFILE}) + set(CONANFILE ${ARGUMENTS_CONANFILE}) + else() + set(CONANFILE ${CMAKE_CURRENT_SOURCE_DIR}/${ARGUMENTS_CONANFILE}) + endif() + else() + set(CONANFILE ".") + endif() + foreach(ARG ${ARGUMENTS_OPTIONS}) + set(CONAN_OPTIONS ${CONAN_OPTIONS} -o=${ARG}) + endforeach() + if(ARGUMENTS_UPDATE) + set(CONAN_INSTALL_UPDATE --update) + endif() + if(ARGUMENTS_NO_IMPORTS) + set(CONAN_INSTALL_NO_IMPORTS --no-imports) + endif() + set(CONAN_INSTALL_FOLDER "") + if(ARGUMENTS_INSTALL_FOLDER) + set(CONAN_INSTALL_FOLDER -if=${ARGUMENTS_INSTALL_FOLDER}) + endif() + set(CONAN_OUTPUT_FOLDER "") + if(ARGUMENTS_OUTPUT_FOLDER) + set(CONAN_OUTPUT_FOLDER -of=${ARGUMENTS_OUTPUT_FOLDER}) + endif() + foreach(ARG ${ARGUMENTS_GENERATORS}) + set(CONAN_GENERATORS ${CONAN_GENERATORS} -g=${ARG}) + endforeach() + foreach(ARG ${ARGUMENTS_ENV}) + set(CONAN_ENV_VARS ${CONAN_ENV_VARS} -e=${ARG}) + endforeach() + set(conan_args install ${CONANFILE} ${settings} ${CONAN_ENV_VARS} ${CONAN_GENERATORS} ${CONAN_BUILD_POLICY} ${CONAN_INSTALL_UPDATE} ${CONAN_INSTALL_NO_IMPORTS} ${CONAN_OPTIONS} ${CONAN_INSTALL_FOLDER} ${ARGUMENTS_INSTALL_ARGS}) + + string (REPLACE ";" " " _conan_args "${conan_args}") + message(STATUS "Conan executing: ${CONAN_CMD} ${_conan_args}") + + if(ARGUMENTS_OUTPUT_QUIET) + execute_process(COMMAND ${CONAN_CMD} ${conan_args} + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_output + ERROR_VARIABLE conan_output + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + else() + execute_process(COMMAND ${CONAN_CMD} ${conan_args} + RESULT_VARIABLE return_code + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + endif() + + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan install failed='${return_code}'") + endif() + +endfunction() + +function(conan_cmake_install) + if(DEFINED CONAN_COMMAND) + set(CONAN_CMD ${CONAN_COMMAND}) + else() + conan_check(REQUIRED) + endif() + + set(installOptions UPDATE NO_IMPORTS OUTPUT_QUIET ERROR_QUIET) + set(installOneValueArgs PATH_OR_REFERENCE REFERENCE REMOTE LOCKFILE LOCKFILE_OUT LOCKFILE_NODE_ID INSTALL_FOLDER OUTPUT_FOLDER) + set(installMultiValueArgs GENERATOR BUILD ENV ENV_HOST ENV_BUILD OPTIONS_HOST OPTIONS OPTIONS_BUILD PROFILE + PROFILE_HOST PROFILE_BUILD SETTINGS SETTINGS_HOST SETTINGS_BUILD) + cmake_parse_arguments(ARGS "${installOptions}" "${installOneValueArgs}" "${installMultiValueArgs}" ${ARGN}) + foreach(arg ${installOptions}) + if(ARGS_${arg}) + set(${arg} ${${arg}} ${ARGS_${arg}}) + endif() + endforeach() + foreach(arg ${installOneValueArgs}) + if(DEFINED ARGS_${arg}) + if("${arg}" STREQUAL "REMOTE") + set(flag "--remote") + elseif("${arg}" STREQUAL "LOCKFILE") + set(flag "--lockfile") + elseif("${arg}" STREQUAL "LOCKFILE_OUT") + set(flag "--lockfile-out") + elseif("${arg}" STREQUAL "LOCKFILE_NODE_ID") + set(flag "--lockfile-node-id") + elseif("${arg}" STREQUAL "INSTALL_FOLDER") + set(flag "--install-folder") + elseif("${arg}" STREQUAL "OUTPUT_FOLDER") + set(flag "--output-folder") + endif() + set(${arg} ${${arg}} ${flag} ${ARGS_${arg}}) + endif() + endforeach() + foreach(arg ${installMultiValueArgs}) + if(DEFINED ARGS_${arg}) + if("${arg}" STREQUAL "GENERATOR") + set(flag "--generator") + elseif("${arg}" STREQUAL "BUILD") + set(flag "--build") + elseif("${arg}" STREQUAL "ENV") + set(flag "--env") + elseif("${arg}" STREQUAL "ENV_HOST") + set(flag "--env:host") + elseif("${arg}" STREQUAL "ENV_BUILD") + set(flag "--env:build") + elseif("${arg}" STREQUAL "OPTIONS") + set(flag "--options") + elseif("${arg}" STREQUAL "OPTIONS_HOST") + set(flag "--options:host") + elseif("${arg}" STREQUAL "OPTIONS_BUILD") + set(flag "--options:build") + elseif("${arg}" STREQUAL "PROFILE") + set(flag "--profile") + elseif("${arg}" STREQUAL "PROFILE_HOST") + set(flag "--profile:host") + elseif("${arg}" STREQUAL "PROFILE_BUILD") + set(flag "--profile:build") + elseif("${arg}" STREQUAL "SETTINGS") + set(flag "--settings") + elseif("${arg}" STREQUAL "SETTINGS_HOST") + set(flag "--settings:host") + elseif("${arg}" STREQUAL "SETTINGS_BUILD") + set(flag "--settings:build") + endif() + list(LENGTH ARGS_${arg} numargs) + foreach(item ${ARGS_${arg}}) + if(${item} STREQUAL "all" AND ${arg} STREQUAL "BUILD") + set(${arg} "--build") + break() + endif() + set(${arg} ${${arg}} ${flag} ${item}) + endforeach() + endif() + endforeach() + if(DEFINED UPDATE) + set(UPDATE --update) + endif() + if(DEFINED NO_IMPORTS) + set(NO_IMPORTS --no-imports) + endif() + set(install_args install ${PATH_OR_REFERENCE} ${REFERENCE} ${UPDATE} ${NO_IMPORTS} ${REMOTE} ${LOCKFILE} ${LOCKFILE_OUT} ${LOCKFILE_NODE_ID} ${INSTALL_FOLDER} ${OUTPUT_FOLDER} + ${GENERATOR} ${BUILD} ${ENV} ${ENV_HOST} ${ENV_BUILD} ${OPTIONS} ${OPTIONS_HOST} ${OPTIONS_BUILD} + ${PROFILE} ${PROFILE_HOST} ${PROFILE_BUILD} ${SETTINGS} ${SETTINGS_HOST} ${SETTINGS_BUILD}) + + string(REPLACE ";" " " _install_args "${install_args}") + message(STATUS "Conan executing: ${CONAN_CMD} ${_install_args}") + + if(ARGS_OUTPUT_QUIET) + set(OUTPUT_OPT OUTPUT_QUIET) + endif() + if(ARGS_ERROR_QUIET) + set(ERROR_OPT ERROR_QUIET) + endif() + + execute_process(COMMAND ${CONAN_CMD} ${install_args} + RESULT_VARIABLE return_code + ${OUTPUT_OPT} + ${ERROR_OPT} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + + if(NOT "${return_code}" STREQUAL "0") + if (ARGS_ERROR_QUIET) + message(WARNING "Conan install failed='${return_code}'") + else() + message(FATAL_ERROR "Conan install failed='${return_code}'") + endif() + endif() + +endfunction() + +function(conan_cmake_lock_create) + if(DEFINED CONAN_COMMAND) + set(CONAN_CMD ${CONAN_COMMAND}) + else() + conan_check(REQUIRED) + endif() + + set(lockCreateOptions UPDATE BASE OUTPUT_QUIET ERROR_QUIET) + set(lockCreateOneValueArgs PATH REFERENCE REMOTE LOCKFILE LOCKFILE_OUT) + set(lockCreateMultiValueArgs BUILD ENV ENV_HOST ENV_BUILD OPTIONS_HOST OPTIONS OPTIONS_BUILD PROFILE + PROFILE_HOST PROFILE_BUILD SETTINGS SETTINGS_HOST SETTINGS_BUILD) + cmake_parse_arguments(ARGS "${lockCreateOptions}" "${lockCreateOneValueArgs}" "${lockCreateMultiValueArgs}" ${ARGN}) + foreach(arg ${lockCreateOptions}) + if(ARGS_${arg}) + set(${arg} ${${arg}} ${ARGS_${arg}}) + endif() + endforeach() + foreach(arg ${lockCreateOneValueArgs}) + if(DEFINED ARGS_${arg}) + if("${arg}" STREQUAL "REMOTE") + set(flag "--remote") + elseif("${arg}" STREQUAL "LOCKFILE") + set(flag "--lockfile") + elseif("${arg}" STREQUAL "LOCKFILE_OUT") + set(flag "--lockfile-out") + endif() + set(${arg} ${${arg}} ${flag} ${ARGS_${arg}}) + endif() + endforeach() + foreach(arg ${lockCreateMultiValueArgs}) + if(DEFINED ARGS_${arg}) + if("${arg}" STREQUAL "BUILD") + set(flag "--build") + elseif("${arg}" STREQUAL "ENV") + set(flag "--env") + elseif("${arg}" STREQUAL "ENV_HOST") + set(flag "--env:host") + elseif("${arg}" STREQUAL "ENV_BUILD") + set(flag "--env:build") + elseif("${arg}" STREQUAL "OPTIONS") + set(flag "--options") + elseif("${arg}" STREQUAL "OPTIONS_HOST") + set(flag "--options:host") + elseif("${arg}" STREQUAL "OPTIONS_BUILD") + set(flag "--options:build") + elseif("${arg}" STREQUAL "PROFILE") + set(flag "--profile") + elseif("${arg}" STREQUAL "PROFILE_HOST") + set(flag "--profile:host") + elseif("${arg}" STREQUAL "PROFILE_BUILD") + set(flag "--profile:build") + elseif("${arg}" STREQUAL "SETTINGS") + set(flag "--settings") + elseif("${arg}" STREQUAL "SETTINGS_HOST") + set(flag "--settings:host") + elseif("${arg}" STREQUAL "SETTINGS_BUILD") + set(flag "--settings:build") + endif() + list(LENGTH ARGS_${arg} numargs) + foreach(item ${ARGS_${arg}}) + if(${item} STREQUAL "all" AND ${arg} STREQUAL "BUILD") + set(${arg} "--build") + break() + endif() + set(${arg} ${${arg}} ${flag} ${item}) + endforeach() + endif() + endforeach() + if(DEFINED UPDATE) + set(UPDATE --update) + endif() + if(DEFINED BASE) + set(BASE --base) + endif() + set(lock_create_Args lock create ${PATH} ${REFERENCE} ${UPDATE} ${BASE} ${REMOTE} ${LOCKFILE} ${LOCKFILE_OUT} ${LOCKFILE_NODE_ID} ${INSTALL_FOLDER} + ${GENERATOR} ${BUILD} ${ENV} ${ENV_HOST} ${ENV_BUILD} ${OPTIONS} ${OPTIONS_HOST} ${OPTIONS_BUILD} + ${PROFILE} ${PROFILE_HOST} ${PROFILE_BUILD} ${SETTINGS} ${SETTINGS_HOST} ${SETTINGS_BUILD}) + + string(REPLACE ";" " " _lock_create_Args "${lock_create_Args}") + message(STATUS "Conan executing: ${CONAN_CMD} ${_lock_create_Args}") + + if(ARGS_OUTPUT_QUIET) + set(OUTPUT_OPT OUTPUT_QUIET) + endif() + if(ARGS_ERROR_QUIET) + set(ERROR_OPT ERROR_QUIET) + endif() + + execute_process(COMMAND ${CONAN_CMD} ${lock_create_Args} + RESULT_VARIABLE return_code + ${OUTPUT_OPT} + ${ERROR_OPT} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + + if(NOT "${return_code}" STREQUAL "0") + if (ARGS_ERROR_QUIET) + message(WARNING "Conan lock create failed='${return_code}'") + else() + message(FATAL_ERROR "Conan lock create failed='${return_code}'") + endif() + endif() +endfunction() + +function(conan_cmake_setup_conanfile) + conan_parse_arguments(${ARGV}) + if(ARGUMENTS_CONANFILE) + get_filename_component(_CONANFILE_NAME ${ARGUMENTS_CONANFILE} NAME) + # configure_file will make sure cmake re-runs when conanfile is updated + configure_file(${ARGUMENTS_CONANFILE} ${CMAKE_CURRENT_BINARY_DIR}/${_CONANFILE_NAME}.junk COPYONLY) + file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/${_CONANFILE_NAME}.junk) + else() + conan_cmake_generate_conanfile(ON ${ARGV}) + endif() +endfunction() + +function(conan_cmake_configure) + conan_cmake_generate_conanfile(OFF ${ARGV}) +endfunction() + +# Generate, writing in disk a conanfile.txt with the requires, options, and imports +# specified as arguments +# This will be considered as temporary file, generated in CMAKE_CURRENT_BINARY_DIR) +function(conan_cmake_generate_conanfile DEFAULT_GENERATOR) + + conan_parse_arguments(${ARGV}) + + set(_FN "${CMAKE_CURRENT_BINARY_DIR}/conanfile.txt") + file(WRITE ${_FN} "") + + if(DEFINED ARGUMENTS_REQUIRES) + file(APPEND ${_FN} "[requires]\n") + foreach(REQUIRE ${ARGUMENTS_REQUIRES}) + file(APPEND ${_FN} ${REQUIRE} "\n") + endforeach() + endif() + + if (DEFAULT_GENERATOR OR DEFINED ARGUMENTS_GENERATORS) + file(APPEND ${_FN} "[generators]\n") + if (DEFAULT_GENERATOR) + file(APPEND ${_FN} "cmake\n") + endif() + if (DEFINED ARGUMENTS_GENERATORS) + foreach(GENERATOR ${ARGUMENTS_GENERATORS}) + file(APPEND ${_FN} ${GENERATOR} "\n") + endforeach() + endif() + endif() + + if(DEFINED ARGUMENTS_BUILD_REQUIRES) + file(APPEND ${_FN} "[build_requires]\n") + foreach(BUILD_REQUIRE ${ARGUMENTS_BUILD_REQUIRES}) + file(APPEND ${_FN} ${BUILD_REQUIRE} "\n") + endforeach() + endif() + + if(DEFINED ARGUMENTS_IMPORTS) + file(APPEND ${_FN} "[imports]\n") + foreach(IMPORTS ${ARGUMENTS_IMPORTS}) + file(APPEND ${_FN} ${IMPORTS} "\n") + endforeach() + endif() + + if(DEFINED ARGUMENTS_OPTIONS) + file(APPEND ${_FN} "[options]\n") + foreach(OPTION ${ARGUMENTS_OPTIONS}) + file(APPEND ${_FN} ${OPTION} "\n") + endforeach() + endif() + +endfunction() + + +macro(conan_load_buildinfo) + if(CONAN_CMAKE_MULTI) + set(_CONANBUILDINFO conanbuildinfo_multi.cmake) + else() + set(_CONANBUILDINFO conanbuildinfo.cmake) + endif() + if(ARGUMENTS_INSTALL_FOLDER) + set(_CONANBUILDINFOFOLDER ${ARGUMENTS_INSTALL_FOLDER}) + else() + set(_CONANBUILDINFOFOLDER ${CMAKE_CURRENT_BINARY_DIR}) + endif() + # Checks for the existence of conanbuildinfo.cmake, and loads it + # important that it is macro, so variables defined at parent scope + if(EXISTS "${_CONANBUILDINFOFOLDER}/${_CONANBUILDINFO}") + message(STATUS "Conan: Loading ${_CONANBUILDINFO}") + include(${_CONANBUILDINFOFOLDER}/${_CONANBUILDINFO}) + else() + message(FATAL_ERROR "${_CONANBUILDINFO} doesn't exist in ${CMAKE_CURRENT_BINARY_DIR}") + endif() +endmacro() + + +macro(conan_cmake_run) + conan_parse_arguments(${ARGV}) + + if(ARGUMENTS_CONFIGURATION_TYPES AND NOT CMAKE_CONFIGURATION_TYPES) + message(WARNING "CONFIGURATION_TYPES should only be specified for multi-configuration generators") + elseif(ARGUMENTS_CONFIGURATION_TYPES AND ARGUMENTS_BUILD_TYPE) + message(WARNING "CONFIGURATION_TYPES and BUILD_TYPE arguments should not be defined at the same time.") + endif() + + if(CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE AND NOT CONAN_EXPORTED + AND NOT ARGUMENTS_BUILD_TYPE) + set(CONAN_CMAKE_MULTI ON) + if (NOT ARGUMENTS_CONFIGURATION_TYPES) + set(ARGUMENTS_CONFIGURATION_TYPES "Release;Debug") + endif() + message(STATUS "Conan: Using cmake-multi generator") + else() + set(CONAN_CMAKE_MULTI OFF) + endif() + + if(NOT CONAN_EXPORTED) + conan_cmake_setup_conanfile(${ARGV}) + if(CONAN_CMAKE_MULTI) + foreach(CMAKE_BUILD_TYPE ${ARGUMENTS_CONFIGURATION_TYPES}) + set(ENV{CONAN_IMPORT_PATH} ${CMAKE_BUILD_TYPE}) + conan_cmake_settings(settings ${ARGV}) + old_conan_cmake_install(SETTINGS ${settings} ${ARGV}) + endforeach() + set(CMAKE_BUILD_TYPE) + else() + conan_cmake_settings(settings ${ARGV}) + old_conan_cmake_install(SETTINGS ${settings} ${ARGV}) + endif() + endif() + + if (NOT ARGUMENTS_NO_LOAD) + conan_load_buildinfo() + endif() + + if(ARGUMENTS_BASIC_SETUP) + foreach(_option CMAKE_TARGETS KEEP_RPATHS NO_OUTPUT_DIRS SKIP_STD) + if(ARGUMENTS_${_option}) + if(${_option} STREQUAL "CMAKE_TARGETS") + list(APPEND _setup_options "TARGETS") + else() + list(APPEND _setup_options ${_option}) + endif() + endif() + endforeach() + conan_basic_setup(${_setup_options}) + endif() +endmacro() + +macro(conan_check) + # Checks conan availability in PATH + # Arguments REQUIRED, DETECT_QUIET and VERSION are optional + # Example usage: + # conan_check(VERSION 1.0.0 REQUIRED) + set(options REQUIRED DETECT_QUIET) + set(oneValueArgs VERSION) + cmake_parse_arguments(CONAN "${options}" "${oneValueArgs}" "" ${ARGN}) + if(NOT CONAN_DETECT_QUIET) + message(STATUS "Conan: checking conan executable") + endif() + + find_program(CONAN_CMD conan) + if(NOT CONAN_CMD AND CONAN_REQUIRED) + message(FATAL_ERROR "Conan executable not found! Please install conan.") + endif() + if(NOT CONAN_DETECT_QUIET) + message(STATUS "Conan: Found program ${CONAN_CMD}") + endif() + execute_process(COMMAND ${CONAN_CMD} --version + RESULT_VARIABLE return_code + OUTPUT_VARIABLE CONAN_VERSION_OUTPUT + ERROR_VARIABLE CONAN_VERSION_OUTPUT) + + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan --version failed='${return_code}'") + endif() + + if(NOT CONAN_DETECT_QUIET) + string(STRIP "${CONAN_VERSION_OUTPUT}" _CONAN_VERSION_OUTPUT) + message(STATUS "Conan: Version found ${_CONAN_VERSION_OUTPUT}") + endif() + + if(DEFINED CONAN_VERSION) + string(REGEX MATCH ".*Conan version ([0-9]+\\.[0-9]+\\.[0-9]+)" FOO + "${CONAN_VERSION_OUTPUT}") + if(${CMAKE_MATCH_1} VERSION_LESS ${CONAN_VERSION}) + message(FATAL_ERROR "Conan outdated. Installed: ${CMAKE_MATCH_1}, \ + required: ${CONAN_VERSION}. Consider updating via 'pip \ + install conan==${CONAN_VERSION}'.") + endif() + endif() +endmacro() + +function(conan_add_remote) + # Adds a remote + # Arguments URL and NAME are required, INDEX, COMMAND and VERIFY_SSL are optional + # Example usage: + # conan_add_remote(NAME bincrafters INDEX 1 + # URL https://api.bintray.com/conan/bincrafters/public-conan + # VERIFY_SSL True) + set(oneValueArgs URL NAME INDEX COMMAND VERIFY_SSL) + cmake_parse_arguments(CONAN "" "${oneValueArgs}" "" ${ARGN}) + + if(DEFINED CONAN_INDEX) + set(CONAN_INDEX_ARG "-i ${CONAN_INDEX}") + endif() + if(DEFINED CONAN_COMMAND) + set(CONAN_CMD ${CONAN_COMMAND}) + else() + conan_check(REQUIRED DETECT_QUIET) + endif() + set(CONAN_VERIFY_SSL_ARG "True") + if(DEFINED CONAN_VERIFY_SSL) + set(CONAN_VERIFY_SSL_ARG ${CONAN_VERIFY_SSL}) + endif() + message(STATUS "Conan: Adding ${CONAN_NAME} remote repository (${CONAN_URL}) verify ssl (${CONAN_VERIFY_SSL_ARG})") + execute_process(COMMAND ${CONAN_CMD} remote add ${CONAN_NAME} ${CONAN_INDEX_ARG} -f ${CONAN_URL} ${CONAN_VERIFY_SSL_ARG} + RESULT_VARIABLE return_code) + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan remote failed='${return_code}'") + endif() +endfunction() + +macro(conan_config_install) + # install a full configuration from a local or remote zip file + # Argument ITEM is required, arguments TYPE, SOURCE, TARGET and VERIFY_SSL are optional + # Example usage: + # conan_config_install(ITEM https://github.com/conan-io/cmake-conan.git + # TYPE git SOURCE source-folder TARGET target-folder VERIFY_SSL false) + set(oneValueArgs ITEM TYPE SOURCE TARGET VERIFY_SSL) + set(multiValueArgs ARGS) + cmake_parse_arguments(CONAN "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(DEFINED CONAN_COMMAND) + set(CONAN_CMD ${CONAN_COMMAND}) + else() + conan_check(REQUIRED) + endif() + + if(DEFINED CONAN_VERIFY_SSL) + set(CONAN_VERIFY_SSL_ARG "--verify-ssl=${CONAN_VERIFY_SSL}") + endif() + + if(DEFINED CONAN_TYPE) + set(CONAN_TYPE_ARG "--type=${CONAN_TYPE}") + endif() + + if(DEFINED CONAN_ARGS) + set(CONAN_ARGS_ARGS "--args=\"${CONAN_ARGS}\"") + endif() + + if(DEFINED CONAN_SOURCE) + set(CONAN_SOURCE_ARGS "--source-folder=${CONAN_SOURCE}") + endif() + + if(DEFINED CONAN_TARGET) + set(CONAN_TARGET_ARGS "--target-folder=${CONAN_TARGET}") + endif() + + set (CONAN_CONFIG_INSTALL_ARGS ${CONAN_VERIFY_SSL_ARG} + ${CONAN_TYPE_ARG} + ${CONAN_ARGS_ARGS} + ${CONAN_SOURCE_ARGS} + ${CONAN_TARGET_ARGS}) + + message(STATUS "Conan: Installing config from ${CONAN_ITEM}") + execute_process(COMMAND ${CONAN_CMD} config install ${CONAN_ITEM} ${CONAN_CONFIG_INSTALL_ARGS} + RESULT_VARIABLE return_code) + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan config failed='${return_code}'") + endif() +endmacro() diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan_provider.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan_provider.cmake new file mode 100644 index 000000000..e5fa9cec1 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan_provider.cmake @@ -0,0 +1,655 @@ +# https://github.com/conan-io/cmake-conan/blob/develop2/conan_provider.cmake +# commit: f6464d1e13ef7a47c569f5061f9607ea63339d39 +# +# The MIT License (MIT) +# +# Copyright (c) 2019 JFrog +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +set(CONAN_MINIMUM_VERSION 2.0.5) + + +function(detect_os OS OS_API_LEVEL OS_SDK OS_SUBSYSTEM OS_VERSION) + # it could be cross compilation + message(STATUS "CMake-Conan: cmake_system_name=${CMAKE_SYSTEM_NAME}") + if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") + if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(${OS} Macos PARENT_SCOPE) + elseif(CMAKE_SYSTEM_NAME STREQUAL "QNX") + set(${OS} Neutrino PARENT_SCOPE) + elseif(CMAKE_SYSTEM_NAME STREQUAL "CYGWIN") + set(${OS} Windows PARENT_SCOPE) + set(${OS_SUBSYSTEM} cygwin PARENT_SCOPE) + elseif(CMAKE_SYSTEM_NAME MATCHES "^MSYS") + set(${OS} Windows PARENT_SCOPE) + set(${OS_SUBSYSTEM} msys2 PARENT_SCOPE) + else() + set(${OS} ${CMAKE_SYSTEM_NAME} PARENT_SCOPE) + endif() + if(CMAKE_SYSTEM_NAME STREQUAL "Android") + if(DEFINED ANDROID_PLATFORM) + string(REGEX MATCH "[0-9]+" _OS_API_LEVEL ${ANDROID_PLATFORM}) + elseif(DEFINED CMAKE_SYSTEM_VERSION) + set(_OS_API_LEVEL ${CMAKE_SYSTEM_VERSION}) + endif() + message(STATUS "CMake-Conan: android api level=${_OS_API_LEVEL}") + set(${OS_API_LEVEL} ${_OS_API_LEVEL} PARENT_SCOPE) + endif() + if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS") + # CMAKE_OSX_SYSROOT contains the full path to the SDK for MakeFile/Ninja + # generators, but just has the original input string for Xcode. + if(NOT IS_DIRECTORY ${CMAKE_OSX_SYSROOT}) + set(_OS_SDK ${CMAKE_OSX_SYSROOT}) + else() + if(CMAKE_OSX_SYSROOT MATCHES Simulator) + set(apple_platform_suffix simulator) + else() + set(apple_platform_suffix os) + endif() + if(CMAKE_OSX_SYSROOT MATCHES AppleTV) + set(_OS_SDK "appletv${apple_platform_suffix}") + elseif(CMAKE_OSX_SYSROOT MATCHES iPhone) + set(_OS_SDK "iphone${apple_platform_suffix}") + elseif(CMAKE_OSX_SYSROOT MATCHES Watch) + set(_OS_SDK "watch${apple_platform_suffix}") + endif() + endif() + if(DEFINED _OS_SDK) + message(STATUS "CMake-Conan: cmake_osx_sysroot=${CMAKE_OSX_SYSROOT}") + set(${OS_SDK} ${_OS_SDK} PARENT_SCOPE) + endif() + if(DEFINED CMAKE_OSX_DEPLOYMENT_TARGET) + message(STATUS "CMake-Conan: cmake_osx_deployment_target=${CMAKE_OSX_DEPLOYMENT_TARGET}") + set(${OS_VERSION} ${CMAKE_OSX_DEPLOYMENT_TARGET} PARENT_SCOPE) + endif() + endif() + endif() +endfunction() + + +function(detect_arch ARCH) + # CMAKE_OSX_ARCHITECTURES can contain multiple architectures, but Conan only supports one. + # Therefore this code only finds one. If the recipes support multiple architectures, the + # build will work. Otherwise, there will be a linker error for the missing architecture(s). + if(DEFINED CMAKE_OSX_ARCHITECTURES) + string(REPLACE " " ";" apple_arch_list "${CMAKE_OSX_ARCHITECTURES}") + list(LENGTH apple_arch_list apple_arch_count) + if(apple_arch_count GREATER 1) + message(WARNING "CMake-Conan: Multiple architectures detected, this will only work if Conan recipe(s) produce fat binaries.") + endif() + endif() + if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS" AND NOT CMAKE_OSX_ARCHITECTURES STREQUAL "") + set(host_arch ${CMAKE_OSX_ARCHITECTURES}) + elseif(MSVC) + set(host_arch ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}) + else() + set(host_arch ${CMAKE_SYSTEM_PROCESSOR}) + endif() + if(host_arch MATCHES "aarch64|arm64|ARM64") + set(_ARCH armv8) + elseif(host_arch MATCHES "armv7|armv7-a|armv7l|ARMV7") + set(_ARCH armv7) + elseif(host_arch MATCHES armv7s) + set(_ARCH armv7s) + elseif(host_arch MATCHES "i686|i386|X86") + set(_ARCH x86) + elseif(host_arch MATCHES "AMD64|amd64|x86_64|x64") + set(_ARCH x86_64) + endif() + message(STATUS "CMake-Conan: cmake_system_processor=${_ARCH}") + set(${ARCH} ${_ARCH} PARENT_SCOPE) +endfunction() + + +function(detect_cxx_standard CXX_STANDARD) + set(${CXX_STANDARD} ${CMAKE_CXX_STANDARD} PARENT_SCOPE) + if(CMAKE_CXX_EXTENSIONS) + set(${CXX_STANDARD} "gnu${CMAKE_CXX_STANDARD}" PARENT_SCOPE) + endif() +endfunction() + + +macro(detect_gnu_libstdcxx) + # _CONAN_IS_GNU_LIBSTDCXX true if GNU libstdc++ + check_cxx_source_compiles(" + #include + #if !defined(__GLIBCXX__) && !defined(__GLIBCPP__) + static_assert(false); + #endif + int main(){}" _CONAN_IS_GNU_LIBSTDCXX) + + # _CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI true if C++11 ABI + check_cxx_source_compiles(" + #include + static_assert(sizeof(std::string) != sizeof(void*), \"using libstdc++\"); + int main () {}" _CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) + + set(_CONAN_GNU_LIBSTDCXX_SUFFIX "") + if(_CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) + set(_CONAN_GNU_LIBSTDCXX_SUFFIX "11") + endif() + unset (_CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) +endmacro() + + +macro(detect_libcxx) + # _CONAN_IS_LIBCXX true if LLVM libc++ + check_cxx_source_compiles(" + #include + #if !defined(_LIBCPP_VERSION) + static_assert(false); + #endif + int main(){}" _CONAN_IS_LIBCXX) +endmacro() + + +function(detect_lib_cxx LIB_CXX) + if(CMAKE_SYSTEM_NAME STREQUAL "Android") + message(STATUS "CMake-Conan: android_stl=${CMAKE_ANDROID_STL_TYPE}") + set(${LIB_CXX} ${CMAKE_ANDROID_STL_TYPE} PARENT_SCOPE) + return() + endif() + + include(CheckCXXSourceCompiles) + + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") + detect_gnu_libstdcxx() + set(${LIB_CXX} "libstdc++${_CONAN_GNU_LIBSTDCXX_SUFFIX}" PARENT_SCOPE) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") + set(${LIB_CXX} "libc++" PARENT_SCOPE) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT CMAKE_SYSTEM_NAME MATCHES "Windows") + # Check for libc++ + detect_libcxx() + if(_CONAN_IS_LIBCXX) + set(${LIB_CXX} "libc++" PARENT_SCOPE) + return() + endif() + + # Check for libstdc++ + detect_gnu_libstdcxx() + if(_CONAN_IS_GNU_LIBSTDCXX) + set(${LIB_CXX} "libstdc++${_CONAN_GNU_LIBSTDCXX_SUFFIX}" PARENT_SCOPE) + return() + endif() + + # TODO: it would be an error if we reach this point + elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + # Do nothing - compiler.runtime and compiler.runtime_type + # should be handled separately: https://github.com/conan-io/cmake-conan/pull/516 + return() + else() + # TODO: unable to determine, ask user to provide a full profile file instead + endif() +endfunction() + + +function(detect_compiler COMPILER COMPILER_VERSION COMPILER_RUNTIME COMPILER_RUNTIME_TYPE) + if(DEFINED CMAKE_CXX_COMPILER_ID) + set(_COMPILER ${CMAKE_CXX_COMPILER_ID}) + set(_COMPILER_VERSION ${CMAKE_CXX_COMPILER_VERSION}) + else() + if(NOT DEFINED CMAKE_C_COMPILER_ID) + message(FATAL_ERROR "C or C++ compiler not defined") + endif() + set(_COMPILER ${CMAKE_C_COMPILER_ID}) + set(_COMPILER_VERSION ${CMAKE_C_COMPILER_VERSION}) + endif() + + message(STATUS "CMake-Conan: CMake compiler=${_COMPILER}") + message(STATUS "CMake-Conan: CMake compiler version=${_COMPILER_VERSION}") + + if(_COMPILER MATCHES MSVC) + set(_COMPILER "msvc") + string(SUBSTRING ${MSVC_VERSION} 0 3 _COMPILER_VERSION) + # Configure compiler.runtime and compiler.runtime_type settings for MSVC + if(CMAKE_MSVC_RUNTIME_LIBRARY) + set(_msvc_runtime_library ${CMAKE_MSVC_RUNTIME_LIBRARY}) + else() + set(_msvc_runtime_library MultiThreaded$<$:Debug>DLL) # default value documented by CMake + endif() + + set(_KNOWN_MSVC_RUNTIME_VALUES "") + list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded MultiThreadedDLL) + list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreadedDebug MultiThreadedDebugDLL) + list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded$<$:Debug> MultiThreaded$<$:Debug>DLL) + + # only accept the 6 possible values, otherwise we don't don't know to map this + if(NOT _msvc_runtime_library IN_LIST _KNOWN_MSVC_RUNTIME_VALUES) + message(FATAL_ERROR "CMake-Conan: unable to map MSVC runtime: ${_msvc_runtime_library} to Conan settings") + endif() + + # Runtime is "dynamic" in all cases if it ends in DLL + if(_msvc_runtime_library MATCHES ".*DLL$") + set(_COMPILER_RUNTIME "dynamic") + else() + set(_COMPILER_RUNTIME "static") + endif() + message(STATUS "CMake-Conan: CMake compiler.runtime=${_COMPILER_RUNTIME}") + + # Only define compiler.runtime_type when explicitly requested + # If a generator expression is used, let Conan handle it conditional on build_type + if(NOT _msvc_runtime_library MATCHES ":Debug>") + if(_msvc_runtime_library MATCHES "Debug") + set(_COMPILER_RUNTIME_TYPE "Debug") + else() + set(_COMPILER_RUNTIME_TYPE "Release") + endif() + message(STATUS "CMake-Conan: CMake compiler.runtime_type=${_COMPILER_RUNTIME_TYPE}") + endif() + + unset(_KNOWN_MSVC_RUNTIME_VALUES) + + elseif(_COMPILER MATCHES AppleClang) + set(_COMPILER "apple-clang") + string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) + list(GET VERSION_LIST 0 _COMPILER_VERSION) + elseif(_COMPILER MATCHES Clang) + set(_COMPILER "clang") + string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) + list(GET VERSION_LIST 0 _COMPILER_VERSION) + elseif(_COMPILER MATCHES GNU) + set(_COMPILER "gcc") + string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) + list(GET VERSION_LIST 0 _COMPILER_VERSION) + endif() + + message(STATUS "CMake-Conan: [settings] compiler=${_COMPILER}") + message(STATUS "CMake-Conan: [settings] compiler.version=${_COMPILER_VERSION}") + if (_COMPILER_RUNTIME) + message(STATUS "CMake-Conan: [settings] compiler.runtime=${_COMPILER_RUNTIME}") + endif() + if (_COMPILER_RUNTIME_TYPE) + message(STATUS "CMake-Conan: [settings] compiler.runtime_type=${_COMPILER_RUNTIME_TYPE}") + endif() + + set(${COMPILER} ${_COMPILER} PARENT_SCOPE) + set(${COMPILER_VERSION} ${_COMPILER_VERSION} PARENT_SCOPE) + set(${COMPILER_RUNTIME} ${_COMPILER_RUNTIME} PARENT_SCOPE) + set(${COMPILER_RUNTIME_TYPE} ${_COMPILER_RUNTIME_TYPE} PARENT_SCOPE) +endfunction() + + +function(detect_build_type BUILD_TYPE) + get_property(_MULTICONFIG_GENERATOR GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + if(NOT _MULTICONFIG_GENERATOR) + # Only set when we know we are in a single-configuration generator + # Note: we may want to fail early if `CMAKE_BUILD_TYPE` is not defined + set(${BUILD_TYPE} ${CMAKE_BUILD_TYPE} PARENT_SCOPE) + endif() +endfunction() + +macro(set_conan_compiler_if_appleclang lang command output_variable) + if(CMAKE_${lang}_COMPILER_ID STREQUAL "AppleClang") + execute_process(COMMAND xcrun --find ${command} + OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE) + cmake_path(GET _xcrun_out PARENT_PATH _xcrun_toolchain_path) + cmake_path(GET CMAKE_${lang}_COMPILER PARENT_PATH _compiler_parent_path) + if ("${_xcrun_toolchain_path}" STREQUAL "${_compiler_parent_path}") + set(${output_variable} "") + endif() + unset(_xcrun_out) + unset(_xcrun_toolchain_path) + unset(_compiler_parent_path) + endif() +endmacro() + + +macro(append_compiler_executables_configuration) + set(_conan_c_compiler "") + set(_conan_cpp_compiler "") + if(CMAKE_C_COMPILER) + set(_conan_c_compiler "\"c\":\"${CMAKE_C_COMPILER}\",") + set_conan_compiler_if_appleclang(C cc _conan_c_compiler) + else() + message(WARNING "CMake-Conan: The C compiler is not defined. " + "Please define CMAKE_C_COMPILER or enable the C language.") + endif() + if(CMAKE_CXX_COMPILER) + set(_conan_cpp_compiler "\"cpp\":\"${CMAKE_CXX_COMPILER}\"") + set_conan_compiler_if_appleclang(CXX c++ _conan_cpp_compiler) + else() + message(WARNING "CMake-Conan: The C++ compiler is not defined. " + "Please define CMAKE_CXX_COMPILER or enable the C++ language.") + endif() + + if(NOT "x${_conan_c_compiler}${_conan_cpp_compiler}" STREQUAL "x") + string(APPEND PROFILE "tools.build:compiler_executables={${_conan_c_compiler}${_conan_cpp_compiler}}\n") + endif() + unset(_conan_c_compiler) + unset(_conan_cpp_compiler) +endmacro() + + +function(detect_host_profile output_file) + detect_os(MYOS MYOS_API_LEVEL MYOS_SDK MYOS_SUBSYSTEM MYOS_VERSION) + detect_arch(MYARCH) + detect_compiler(MYCOMPILER MYCOMPILER_VERSION MYCOMPILER_RUNTIME MYCOMPILER_RUNTIME_TYPE) + detect_cxx_standard(MYCXX_STANDARD) + detect_lib_cxx(MYLIB_CXX) + detect_build_type(MYBUILD_TYPE) + + set(PROFILE "") + string(APPEND PROFILE "[settings]\n") + if(MYARCH) + string(APPEND PROFILE arch=${MYARCH} "\n") + endif() + if(MYOS) + string(APPEND PROFILE os=${MYOS} "\n") + endif() + if(MYOS_API_LEVEL) + string(APPEND PROFILE os.api_level=${MYOS_API_LEVEL} "\n") + endif() + if(MYOS_VERSION) + string(APPEND PROFILE os.version=${MYOS_VERSION} "\n") + endif() + if(MYOS_SDK) + string(APPEND PROFILE os.sdk=${MYOS_SDK} "\n") + endif() + if(MYOS_SUBSYSTEM) + string(APPEND PROFILE os.subsystem=${MYOS_SUBSYSTEM} "\n") + endif() + if(MYCOMPILER) + string(APPEND PROFILE compiler=${MYCOMPILER} "\n") + endif() + if(MYCOMPILER_VERSION) + string(APPEND PROFILE compiler.version=${MYCOMPILER_VERSION} "\n") + endif() + if(MYCOMPILER_RUNTIME) + string(APPEND PROFILE compiler.runtime=${MYCOMPILER_RUNTIME} "\n") + endif() + if(MYCOMPILER_RUNTIME_TYPE) + string(APPEND PROFILE compiler.runtime_type=${MYCOMPILER_RUNTIME_TYPE} "\n") + endif() + if(MYCXX_STANDARD) + string(APPEND PROFILE compiler.cppstd=${MYCXX_STANDARD} "\n") + endif() + if(MYLIB_CXX) + string(APPEND PROFILE compiler.libcxx=${MYLIB_CXX} "\n") + endif() + if(MYBUILD_TYPE) + string(APPEND PROFILE "build_type=${MYBUILD_TYPE}\n") + endif() + + if(NOT DEFINED output_file) + set(_FN "${CMAKE_BINARY_DIR}/profile") + else() + set(_FN ${output_file}) + endif() + + string(APPEND PROFILE "[conf]\n") + string(APPEND PROFILE "tools.cmake.cmaketoolchain:generator=${CMAKE_GENERATOR}\n") + + # propagate compilers via profile + append_compiler_executables_configuration() + + if(MYOS STREQUAL "Android") + string(APPEND PROFILE "tools.android:ndk_path=${CMAKE_ANDROID_NDK}\n") + endif() + + message(STATUS "CMake-Conan: Creating profile ${_FN}") + file(WRITE ${_FN} ${PROFILE}) + message(STATUS "CMake-Conan: Profile: \n${PROFILE}") +endfunction() + + +function(conan_profile_detect_default) + message(STATUS "CMake-Conan: Checking if a default profile exists") + execute_process(COMMAND ${CONAN_COMMAND} profile path default + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + ECHO_OUTPUT_VARIABLE + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + if(NOT ${return_code} EQUAL "0") + message(STATUS "CMake-Conan: The default profile doesn't exist, detecting it.") + execute_process(COMMAND ${CONAN_COMMAND} profile detect + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + ECHO_OUTPUT_VARIABLE + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + endif() +endfunction() + + +function(conan_install) + cmake_parse_arguments(ARGS CONAN_ARGS ${ARGN}) + set(CONAN_OUTPUT_FOLDER ${CMAKE_BINARY_DIR}/conan) + # Invoke "conan install" with the provided arguments + set(CONAN_ARGS ${CONAN_ARGS} -of=${CONAN_OUTPUT_FOLDER}) + message(STATUS "CMake-Conan: conan install ${CMAKE_SOURCE_DIR} ${CONAN_ARGS} ${ARGN}") + + + # In case there was not a valid cmake executable in the PATH, we inject the + # same we used to invoke the provider to the PATH + if(DEFINED PATH_TO_CMAKE_BIN) + set(_OLD_PATH $ENV{PATH}) + set(ENV{PATH} "$ENV{PATH}:${PATH_TO_CMAKE_BIN}") + endif() + + execute_process(COMMAND ${CONAN_COMMAND} install ${CMAKE_SOURCE_DIR} ${CONAN_ARGS} ${ARGN} --format=json + RESULT_VARIABLE return_code + OUTPUT_VARIABLE conan_stdout + ERROR_VARIABLE conan_stderr + ECHO_ERROR_VARIABLE # show the text output regardless + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + + if(DEFINED PATH_TO_CMAKE_BIN) + set(ENV{PATH} "${_OLD_PATH}") + endif() + + if(NOT "${return_code}" STREQUAL "0") + message(FATAL_ERROR "Conan install failed='${return_code}'") + else() + # the files are generated in a folder that depends on the layout used, if + # one is specified, but we don't know a priori where this is. + # TODO: this can be made more robust if Conan can provide this in the json output + string(JSON CONAN_GENERATORS_FOLDER GET ${conan_stdout} graph nodes 0 generators_folder) + cmake_path(CONVERT ${CONAN_GENERATORS_FOLDER} TO_CMAKE_PATH_LIST CONAN_GENERATORS_FOLDER) + # message("conan stdout: ${conan_stdout}") + message(STATUS "CMake-Conan: CONAN_GENERATORS_FOLDER=${CONAN_GENERATORS_FOLDER}") + set_property(GLOBAL PROPERTY CONAN_GENERATORS_FOLDER "${CONAN_GENERATORS_FOLDER}") + # reconfigure on conanfile changes + string(JSON CONANFILE GET ${conan_stdout} graph nodes 0 label) + message(STATUS "CMake-Conan: CONANFILE=${CMAKE_SOURCE_DIR}/${CONANFILE}") + set_property(DIRECTORY ${CMAKE_SOURCE_DIR} APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/${CONANFILE}") + # success + set_property(GLOBAL PROPERTY CONAN_INSTALL_SUCCESS TRUE) + endif() +endfunction() + + +function(conan_get_version conan_command conan_current_version) + execute_process( + COMMAND ${conan_command} --version + OUTPUT_VARIABLE conan_output + RESULT_VARIABLE conan_result + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(conan_result) + message(FATAL_ERROR "CMake-Conan: Error when trying to run Conan") + endif() + + string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" conan_version ${conan_output}) + set(${conan_current_version} ${conan_version} PARENT_SCOPE) +endfunction() + + +function(conan_version_check) + set(options ) + set(oneValueArgs MINIMUM CURRENT) + set(multiValueArgs ) + cmake_parse_arguments(CONAN_VERSION_CHECK + "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(NOT CONAN_VERSION_CHECK_MINIMUM) + message(FATAL_ERROR "CMake-Conan: Required parameter MINIMUM not set!") + endif() + if(NOT CONAN_VERSION_CHECK_CURRENT) + message(FATAL_ERROR "CMake-Conan: Required parameter CURRENT not set!") + endif() + + if(CONAN_VERSION_CHECK_CURRENT VERSION_LESS CONAN_VERSION_CHECK_MINIMUM) + message(FATAL_ERROR "CMake-Conan: Conan version must be ${CONAN_VERSION_CHECK_MINIMUM} or later") + endif() +endfunction() + + +macro(construct_profile_argument argument_variable profile_list) + set(${argument_variable} "") + if("${profile_list}" STREQUAL "CONAN_HOST_PROFILE") + set(_arg_flag "--profile:host=") + elseif("${profile_list}" STREQUAL "CONAN_BUILD_PROFILE") + set(_arg_flag "--profile:build=") + endif() + + set(_profile_list "${${profile_list}}") + list(TRANSFORM _profile_list REPLACE "auto-cmake" "${CMAKE_BINARY_DIR}/conan_host_profile") + list(TRANSFORM _profile_list PREPEND ${_arg_flag}) + set(${argument_variable} ${_profile_list}) + + unset(_arg_flag) + unset(_profile_list) +endmacro() + + +macro(conan_provide_dependency method package_name) + set_property(GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED TRUE) + get_property(_conan_install_success GLOBAL PROPERTY CONAN_INSTALL_SUCCESS) + if(NOT _conan_install_success) + find_program(CONAN_COMMAND "conan" REQUIRED) + conan_get_version(${CONAN_COMMAND} CONAN_CURRENT_VERSION) + conan_version_check(MINIMUM ${CONAN_MINIMUM_VERSION} CURRENT ${CONAN_CURRENT_VERSION}) + message(STATUS "CMake-Conan: first find_package() found. Installing dependencies with Conan") + if("default" IN_LIST CONAN_HOST_PROFILE OR "default" IN_LIST CONAN_BUILD_PROFILE) + conan_profile_detect_default() + endif() + if("auto-cmake" IN_LIST CONAN_HOST_PROFILE) + detect_host_profile(${CMAKE_BINARY_DIR}/conan_host_profile) + endif() + construct_profile_argument(_host_profile_flags CONAN_HOST_PROFILE) + construct_profile_argument(_build_profile_flags CONAN_BUILD_PROFILE) + if(EXISTS "${CMAKE_SOURCE_DIR}/conanfile.py") + file(READ "${CMAKE_SOURCE_DIR}/conanfile.py" outfile) + if(NOT "${outfile}" MATCHES ".*CMakeDeps.*") + message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile") + endif() + set(generator "") + elseif (EXISTS "${CMAKE_SOURCE_DIR}/conanfile.txt") + file(READ "${CMAKE_SOURCE_DIR}/conanfile.txt" outfile) + if(NOT "${outfile}" MATCHES ".*CMakeDeps.*") + message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile. " + "Please define the generator as it will be mandatory in the future") + endif() + set(generator "-g;CMakeDeps") + endif() + get_property(_multiconfig_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + if(NOT _multiconfig_generator) + message(STATUS "CMake-Conan: Installing single configuration ${CMAKE_BUILD_TYPE}") + conan_install(${_host_profile_flags} ${_build_profile_flags} ${CONAN_INSTALL_ARGS} ${generator}) + else() + message(STATUS "CMake-Conan: Installing both Debug and Release") + conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Release ${CONAN_INSTALL_ARGS} ${generator}) + conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Debug ${CONAN_INSTALL_ARGS} ${generator}) + endif() + unset(_host_profile_flags) + unset(_build_profile_flags) + unset(_multiconfig_generator) + unset(_conan_install_success) + else() + message(STATUS "CMake-Conan: find_package(${ARGV1}) found, 'conan install' already ran") + unset(_conan_install_success) + endif() + + get_property(_conan_generators_folder GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) + + # Ensure that we consider Conan-provided packages ahead of any other, + # irrespective of other settings that modify the search order or search paths + # This follows the guidelines from the find_package documentation + # (https://cmake.org/cmake/help/latest/command/find_package.html): + # find_package ( PATHS paths... NO_DEFAULT_PATH) + # find_package () + + # Filter out `REQUIRED` from the argument list, as the first call may fail + set(_find_args_${package_name} "${ARGN}") + list(REMOVE_ITEM _find_args_${package_name} "REQUIRED") + if(NOT "MODULE" IN_LIST _find_args_${package_name}) + find_package(${package_name} ${_find_args_${package_name}} BYPASS_PROVIDER PATHS "${_conan_generators_folder}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + unset(_find_args_${package_name}) + endif() + + # Invoke find_package a second time - if the first call succeeded, + # this will simply reuse the result. If not, fall back to CMake default search + # behaviour, also allowing modules to be searched. + if(NOT ${package_name}_FOUND) + list(FIND CMAKE_MODULE_PATH "${_conan_generators_folder}" _index) + if(_index EQUAL -1) + list(PREPEND CMAKE_MODULE_PATH "${_conan_generators_folder}") + endif() + unset(_index) + find_package(${package_name} ${ARGN} BYPASS_PROVIDER) + list(REMOVE_ITEM CMAKE_MODULE_PATH "${_conan_generators_folder}") + endif() +endmacro() + +#[=[ not needed by Qt Creator, and if not commented it would break the auto-setup feature + +cmake_language( + SET_DEPENDENCY_PROVIDER conan_provide_dependency + SUPPORTED_METHODS FIND_PACKAGE +) + + +macro(conan_provide_dependency_check) + set(_CONAN_PROVIDE_DEPENDENCY_INVOKED FALSE) + get_property(_CONAN_PROVIDE_DEPENDENCY_INVOKED GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED) + if(NOT _CONAN_PROVIDE_DEPENDENCY_INVOKED) + message(WARNING "Conan is correctly configured as dependency provider, " + "but Conan has not been invoked. Please add at least one " + "call to `find_package()`.") + if(DEFINED CONAN_COMMAND) + # supress warning in case `CONAN_COMMAND` was specified but unused. + set(_CONAN_COMMAND ${CONAN_COMMAND}) + unset(_CONAN_COMMAND) + endif() + endif() + unset(_CONAN_PROVIDE_DEPENDENCY_INVOKED) +endmacro() + + +# Add a deferred call at the end of processing the top-level directory +# to check if the dependency provider was invoked at all. +cmake_language(DEFER DIRECTORY "${CMAKE_SOURCE_DIR}" CALL conan_provide_dependency_check) + +]=] + +# Configurable variables for Conan profiles +set(CONAN_HOST_PROFILE "default;auto-cmake" CACHE STRING "Conan host profile") +set(CONAN_BUILD_PROFILE "default" CACHE STRING "Conan build profile") +set(CONAN_INSTALL_ARGS "--build=missing" CACHE STRING "Command line arguments for conan install") + +find_program(_cmake_program NAMES cmake NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_CMAKE_FIND_ROOT_PATH) +if(NOT _cmake_program) + get_filename_component(PATH_TO_CMAKE_BIN "${CMAKE_COMMAND}" DIRECTORY) + set(PATH_TO_CMAKE_BIN "${PATH_TO_CMAKE_BIN}" CACHE INTERNAL "Path where the CMake executable is") +endif() + diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/FILE.h.79AEFC497861DFC5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/FILE.h.79AEFC497861DFC5.idx new file mode 100644 index 0000000000000000000000000000000000000000..e91032933fb84f2b88c78a26c8785731990e2530 GIT binary patch literal 300 zcmYk1y-LJD5Xb-P#X~)86vV<}1;OgFjRX;~5d#4$xn6SFiCM_Unc2l0_z(*BD%RG% z!##wJXzAw8!eKuC48LJ!?vgk@5x})hx{7QX0ND4zwly!luIw^nt4(u-IJv#Sq#)VM z(nm+q&Szfd($kby97;JU3`_6ULz;3^8*7?cIwmctWO^#7CC?!@C0!_`9Jk8US?M&X z?mW7W&c>ywT{nKHothfUs$asYUmX_Uc{M%uN3q-;d^XQC!Uhlw4~Ivqgl%8|2(gKl uat{BIVrNaPUxJF3ukU*C;oD+M9Q<|tRGIdg+l)uO2!8e!%dhX#H{chUx=qdi literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QAction.C96EF240B8C97D16.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QAction.C96EF240B8C97D16.idx new file mode 100644 index 0000000000000000000000000000000000000000..23067ffc5ee7e78342ef0992d34be3d51a51f4bf GIT binary patch literal 226 zcmWIYbaT7Kz`)>~;#rZKT9U{DWD5gvaY<2TCy)k%w9K4TD}8~;#rZKT9U{DWD5gvaY<3;Y#EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK*xfDoXq6JlFa-( z28v87OhlNZmjQHRWo{D4eMPBh#Sl6t5kwakB^Qf>7>t#NBF;V1m|@Du#J~g+fB*ng CM@J?A literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QCheckBox.F97C85CD389B142A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QCheckBox.F97C85CD389B142A.idx new file mode 100644 index 0000000000000000000000000000000000000000..e1b13046562169900b0179a4f11b1b56322d38d0 GIT binary patch literal 238 zcmWIYbaQ*gz`)>~;#rZKT9U{DWD5gvaY<3;R3HroX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK3I>Xd zDNF_#laybfmjQHLWo{D4WksoJ#Sl6t5kwakB^Qf>7>v)FcQ$vKPdv}a#J~g+fB*nB CTtw~w literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QComboBox.E9BD1F66553AE54E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QComboBox.E9BD1F66553AE54E.idx new file mode 100644 index 0000000000000000000000000000000000000000..f235d229786abf7b21b68d70ecd79d0398539b9e GIT binary patch literal 238 zcmWIYbaQ*gz`)>~;#rZKT9U{DWD5gvaY<3;R3HroX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTKXd zDNF_#laybfmjQHLWo{D4WksoJ#Sl6t5kwakB^Qf>7)&4n0vIb8n$?B59Of`GF#rJh CuR>=4 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QDateEdit.1363D2C608FAA19C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QDateEdit.1363D2C608FAA19C.idx new file mode 100644 index 0000000000000000000000000000000000000000..29b2ed3b9b1323d1e3c073ab7eba5cb162da349d GIT binary patch literal 242 zcmWIYbaQ*fz`)>~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK$palRM(Wu5(bKl zDNF$xQ<9mRnhG>ZF9Ybp%G@N7>xxp-iXn7PB8V<7N-h=$F&J56WETC6{?g0H#J~g+ GfB*n;qD9dF literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QDebug.D6EEDCAB812A108A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QDebug.D6EEDCAB812A108A.idx new file mode 100644 index 0000000000000000000000000000000000000000..cea89ba805b5a3c76aeaf4c60689ee5193912cfb GIT binary patch literal 226 zcmWIYbaT7Kz`)>~;#rZKT9U{DWD5gvaY<2TCy)k%w9K4TD}8~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK$rZ|q@2{?g3LUp z{0at&%qlDfnv#@Xp_c)4VP$R-$aO`jX~hsaClN#!7bO>qgBVO80s~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK=-1|6raS({L&Hz ziVP}D2O5+EHb^f6=)%g}B#`ThQqzhdbWS3OE-p$g76&mHZ~f(B`_Vt?F(VTL6G#98 E0I@|!4FCWD literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QGroupBox.B9BAA2414EC9EC9A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QGroupBox.B9BAA2414EC9EC9A.idx new file mode 100644 index 0000000000000000000000000000000000000000..cbb05981c7446354d19f8bf1551186bda8d6a604 GIT binary patch literal 238 zcmWIYbaQ*gz`)>~;#rZKT9U{DWD5gvaY<3;R3HroX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK=-2j(gLUa3I>Xd zDNF|$laybfmjQHLWo{D4WksoJ#Sl6t5kwakB^Qf>7)&4n0vIDb4rO0Cmzm1Q!~g&w COGLx~ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QGuiApplication.40A6B5E7DDCCAB10.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QGuiApplication.40A6B5E7DDCCAB10.idx new file mode 100644 index 0000000000000000000000000000000000000000..c9543e2edf7f438242fc03615b9a1c43bab0fff4 GIT binary patch literal 242 zcmWIYbaQ*fz`)>~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBnl_tH%LKp^2*P>_?EoLG{XpT|J9 zL51n1nTZI4^fG`htjtXUxvnTRtr$Y*B!cMTqU2(6AkD=1Kge^PI7=xbBNGD?NCpA` Db<9M| literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QHBoxLayout.59B98A56E1270903.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QHBoxLayout.59B98A56E1270903.idx new file mode 100644 index 0000000000000000000000000000000000000000..f302e97521c768e31bfc7970eb997e01a9f09604 GIT binary patch literal 240 zcmWIYbaQ*bz`)>~;#rZKT9U{DWD5gvaY<3;3?K~#X_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTKo6(<3ZKNv{L&Hz ziVP}D%CE=)o1>S(P+Xat1aezZYFaUb&PfE(#YM@*;vfbSh=2gbZ$7W1|GuBHnURSB E0O+4bZ~y=R literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QHeaderView.8CEFA40187CA5B18.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QHeaderView.8CEFA40187CA5B18.idx new file mode 100644 index 0000000000000000000000000000000000000000..78a661b934661e186cc9f2b279c667e0002f11e1 GIT binary patch literal 242 zcmWIYbaQ*fz`)>~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK#$bKl+>cI%+zuQ ziVP~u02@>WG)ON4=)%g}B#`ThQqzhdbWS3OE-p$g76&nyKm-IZmd#K8VVmlHk&%f3 E09^Y<6aWAK literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QLineEdit.4DF8C97A081C5AE8.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QLineEdit.4DF8C97A081C5AE8.idx new file mode 100644 index 0000000000000000000000000000000000000000..4bc505e179db849f115a38916f81ad5748b47dfd GIT binary patch literal 238 zcmWIYbaQ*gz`)>~;#rZKT9U{DWD5gvaY<3;R3HroX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK%dOKRM(Wu5(bKl zDa-*HlL|COF9Ybh%G@N7%ZgIdiXn7PB8V<7N-h=$F&Me$rR{qmbN>k=69W@S00ICr Cg+$5# literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QList.43B29E3EAD15F037.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QList.43B29E3EAD15F037.idx new file mode 100644 index 0000000000000000000000000000000000000000..e0c2da33b13a9ccd4409f34c7cbd10e1de342263 GIT binary patch literal 224 zcmWIYbaT7Gz`)>~;#rZKT9U{DWD5gvaY<2TJCFv0w9K4TD}8~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK;Oj7yztDtl>BlA ziVP~u1sYTiHb^f6=)%g}B#`ThQqzhdbWS3OE-p$g76&mH^%q30(UK}!&B(;S1QLJ% E0F0VNQ2+n{ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QMenu.DCFD8A588257C352.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QMenu.DCFD8A588257C352.idx new file mode 100644 index 0000000000000000000000000000000000000000..c9f9d616512881a8645e8006e8deda4f178df9e0 GIT binary patch literal 230 zcmWIYbaT7Mz`)>~;#rZKT9U{DWD5gvaY<2TFOUX~;#rZKT9U{DWD5gvaY<3;WFQR&X_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK;P87Qm4cs28v86 z%mtc~lvt#f0d!ksZW72{MX71U5IQFjL>Ct&7mI@!jKK#Loz@lF-(h58U;+t1004gl BLmL19 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QObject.FD42F5FB68E8C303.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QObject.FD42F5FB68E8C303.idx new file mode 100644 index 0000000000000000000000000000000000000000..5e661ba0e0b0d49157a156d11a0af8034ce1fe02 GIT binary patch literal 228 zcmWIYbaT7Iz`)>~;#rZKT9U{DWD5gvaY<2TH;@K{w9K4TD}8q;Jba7E~u{emqC@8x7+}*r(YepspCXfIG007^fKePY< literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QPainterPath.3AC546BDB95A3F0F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QPainterPath.3AC546BDB95A3F0F.idx new file mode 100644 index 0000000000000000000000000000000000000000..bdafde64ebf69e1056b48a48f90748cdf986f628 GIT binary patch literal 236 zcmWIYbaQ*cz`)>~;#rZKT9U{DWD5gvaY<3;WFQR&X_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBnl_tH%Lz<|Weypq(SfW(pv2C_{l zEP$9&05nA}1L(HO+$4~@ic-^xA#_e6h%PQlE*1wdm_P&=Ffsb5{*#bAusVj3i2(pq CS3=tW literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QPushButton.2BC29870A6CB475C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QPushButton.2BC29870A6CB475C.idx new file mode 100644 index 0000000000000000000000000000000000000000..9f48d480f5d40d1dc1cc508c5b6732c0bff063a2 GIT binary patch literal 242 zcmWIYbaQ*fz`)>~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz<|=?45!kPlKead ziVP|&02-78Hb^f6=)%g}B#`ThQqzhdbWS3OE-p$g76&nyKm-IZ{+#jJ@=s**dqyS( E0F@0#)&Kwi literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRadioButton.A434882CF2D0EBE4.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRadioButton.A434882CF2D0EBE4.idx new file mode 100644 index 0000000000000000000000000000000000000000..98e13393180bb59195e8c2d394372e0c90c909f4 GIT binary patch literal 244 zcmWIYbaQ*dz`)>~;#rZKT9U{DWD5gvaY<3;Y#EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz@WsG%zUTPl9K#9 z28v87ECQL71U5-81L(%e+$50uic-^xA#_e6h%PQlE*1wdm_P&sFdk@#?SJQT=0777 F0{|)`NF@LO literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRect.6DA68D4D1D3E2990.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRect.6DA68D4D1D3E2990.idx new file mode 100644 index 0000000000000000000000000000000000000000..cde019fc0fa82f3163f011b1a5e9931cd998d716 GIT binary patch literal 224 zcmWIYbaT7Gz`)>~;#rZKT9U{DWD5gvaY<2TJCFv0w9K4TD}8EYr=%!~g(uu{{p} literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRegion.130B003E89FE9983.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRegion.130B003E89FE9983.idx new file mode 100644 index 0000000000000000000000000000000000000000..25f679861acfe1ce7f3cc5b4ea0d448572906ad2 GIT binary patch literal 226 zcmWIYbaT7Kz`)>~;#rZKT9U{DWD5gvaY<2TCy)k%w9K4TD}8~;#rZKT9U{DWD5gvaY<2TFOUXu~;#rZKT9U{DWD5gvaY<2TCy)k%w9K4TD}8*#;CAgALHj u0J^9$HwomLqSUlv2%VD%qKk`?i^YL76XSz$2AlBA$@3VQ7??mZ5C8x}KR%=Y literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QScrollArea.C483AA522C6CD262.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QScrollArea.C483AA522C6CD262.idx new file mode 100644 index 0000000000000000000000000000000000000000..b9b55460904fa04f6bfcce7e1dad5eaafa1c62a8 GIT binary patch literal 242 zcmWIYbaQ*fz`)>~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz~JPf{G1%eqSQnN ziVP|&1{;(JG)ON4=)%g}B#`ThQqzhdbWS3OE-p$g76&mHPwwn0bZ)q^hLMSZ2_ygk E0Gi}RvH$=8 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSize.40E81C35EAEAA1C2.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSize.40E81C35EAEAA1C2.idx new file mode 100644 index 0000000000000000000000000000000000000000..122b25d42f0118040415772f22e9099d821531d8 GIT binary patch literal 224 zcmWIYbaT7Gz`)>~;#rZKT9U{DWD5gvaY<2TJCFv0w9K4TD}8~;#rZKT9U{DWD5gvaY<2T2apDXw9K4TD}8mkfWl&+0eTq> r#g(~9Ah#5yrWHfzoJ0^^T$Efa4q`BY2nb;Om!LoYon_t!MkWRTnhHN~ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSpacerItem.70C1D6BAB0508458.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSpacerItem.70C1D6BAB0508458.idx new file mode 100644 index 0000000000000000000000000000000000000000..6ce48de69ff76a8abfa5299ce80f3d6b2c509977 GIT binary patch literal 242 zcmWIYbaQ*fz`)>~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz~F+!qgBVO80s~;#rZKT9U{DWD5gvaY<3;WFQR&X_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz~F++Jg58$28v86 zEC!mAlwYBj0d!ksZW72{MX71U5IQFjL>Ct&7mI@!jMeG3UZ;QC)i5$KFo6Uh005Ss BLxlhU literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSplitter.417D2DBE07C04B3F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSplitter.417D2DBE07C04B3F.idx new file mode 100644 index 0000000000000000000000000000000000000000..458c7b22b936423cb14da4a9cf3a7305640c97c8 GIT binary patch literal 238 zcmWIYbaQ*gz`)>~;#rZKT9U{DWD5gvaY<3;R3HroX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz~F+M%#xDSA_j_# zDJ+H>qn816U1e?($Yn*TX~hsaClN#!7bO=~;#rZKT9U{DWD5gvaY<3;d>{=5X_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz~GX^ zvkHqLW|f1@*2@68vobdc~;#rZKT9U{DWD5gvaY<3;R3HroX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz>w6664#W>5(bKl zDJ%gRlL|COF9Ybh%G@N7%ZgIdiXn7PB8V<7N-mZFF&Ni1c&y2J93scW#Kgb^5&;7M DLeWH5 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QTimeEdit.4B41D1477297003C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QTimeEdit.4B41D1477297003C.idx new file mode 100644 index 0000000000000000000000000000000000000000..11a1cf3fff79e20a0b912237eba512ab12169aeb GIT binary patch literal 242 zcmWIYbaQ*fz`)>~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz>v(`RM(Wu5(bKl zDNIQ$Ni6{yl?pUUF9Ybp%G@N7>xxp-iXn7PB8V<7N-h=$F&J56WETC6{?g0H#J~g+ GfB*n|Cq?1_ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QTransform.624B53E37B6109A7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QTransform.624B53E37B6109A7.idx new file mode 100644 index 0000000000000000000000000000000000000000..febd8c5852685acdd909543126dc3eb34ea42bc0 GIT binary patch literal 232 zcmWIYbaQ*az`)>~;#rZKT9U{DWD5gvaY<2TKad84w9K4TD}8~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz>uQUR0xNGB7+J` zfCiO=P1VZ)y09`g3FNw>)U;v~;#rZKT9U{DWD5gvaY<3;3?K~#X_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz%Zx$3ZKNv{L&Hz ziVP}D%CE=)o1>S(P+Xat1aezZYFaUb&PfE(#YM@*;vfbSh=2gbZ$7W1|GuBHnURSB E0Ps~uegFUf literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QVariant.94E74B139BCD44CD.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QVariant.94E74B139BCD44CD.idx new file mode 100644 index 0000000000000000000000000000000000000000..1cc0d30073380070fa59d2efec5d9f7886d5223c GIT binary patch literal 230 zcmWIYbaT7Mz`)>~;#rZKT9U{DWD5gvaY<2TFOUXGKdj+ u89-N6<|ct$RFs-l454!pL3D9Za~;#rZKT9U{DWD5gvaY<3;L?8_YX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTKnR0@B0~zx!KUeD t09{s@n*?%IQEFN-gw9C>(Zxl{#o{0aW5X7){^YEcKNy)9m_Py$008rbLjeE) literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__FILE.h.3324F85E382E036A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__FILE.h.3324F85E382E036A.idx new file mode 100644 index 0000000000000000000000000000000000000000..75c27587527dbbf19e6ae9120f07f8c95809975b GIT binary patch literal 162 zcmWIYbaR`~;#rZKT9U{DWD5gvaY<389gqftw9K4TD}8UpuWIs*d$i##bO literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__fpos64_t.h.23C43F442076149A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__fpos64_t.h.23C43F442076149A.idx new file mode 100644 index 0000000000000000000000000000000000000000..6767a6d7e60a541041191f572aa7a2eaa6bffac4 GIT binary patch literal 302 zcmWIYbaPW}ESb29TvD|FNIO7)X6ON#YNDhpDJ^)eVp)S(|ApH`4xY-SQ)LYC&-q~emq zl2own;>z44kgJPQ(~8A`^ugZ}`YXSjlwjmyV&q_y1$zi0pOXlpi;I$rl|c+(D8K+S VjKRRbbYcfboc!G21|~*k1^`tKQrG|h literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__fpos_t.h.ECFBE9EEDAAB6648.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__fpos_t.h.ECFBE9EEDAAB6648.idx new file mode 100644 index 0000000000000000000000000000000000000000..75b1c1f5b3907fff5458a0079f1db02fecb6c827 GIT binary patch literal 300 zcmWIYbaPW-WMFVk@vO*AElFfyU|}ESb29TvD|FNIO7)X6ON#YNDhpDJ^)eVp)S(|ApH`4x9A83~*4(7xlEji! zuz`)>~;#rZKT9U{DWD5gvaY<386Oaajw9K4TD}8xNvTg<8~%l0rZ005%REG7T| literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__mbstate_t.h.6C32CF66236653D7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__mbstate_t.h.6C32CF66236653D7.idx new file mode 100644 index 0000000000000000000000000000000000000000..9ab9fa417a8f4abb0f8347cb0f3f58d0762c6010 GIT binary patch literal 168 zcmWIYbaPw4z`)>~;#rZKT9U{DWD5gvaY<38Gmr*@w9K4TD}8~;#rZKT9U{DWD5gvaY<386Oaajw9K4TD}8GI?jy+A214Ws*7@0Yk#lRK-2_8l^DK-rlZ}+ryn|>RmR5NlhGIB7=z=VrZa}q)9 X;-chYZV-d<+nj|4N%E&JF)#oC*L5-2 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___gnuc_va_list.h.43B1F3B1D6B4DAA2.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___gnuc_va_list.h.43B1F3B1D6B4DAA2.idx new file mode 100644 index 0000000000000000000000000000000000000000..37c4bd5e0db37ecb9c50bee822329ddfcfe98997 GIT binary patch literal 222 zcmXYrK?=e^3`M8tLh7=hr_kU|+zNtA#jOnEG`0h2i^){fJBSzY6dpp?u04cK)j)WU zpGE$1KAYW@Qqy#PDA1dB@Fc8wcBjDaY#reQ0P?CpFtvCrbHj{8u<)>|Dv}^mM&m06 zavMCLg`Kzm#F8nqCWoJm#^6dzb&8<1_|$Nwwa&`g>b=qA#1C^N$70ibXWU9Z@b=gx gm$)^E;wbLKy>GGKolHYvE8Rw->zUWDcju|p2Vs6er~m)} literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___va_copy.h.F5C63B16CFDA2191.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___va_copy.h.F5C63B16CFDA2191.idx new file mode 100644 index 0000000000000000000000000000000000000000..7bd0f743973e8adca528d8366fbf32a34a77bf13 GIT binary patch literal 218 zcmXYru?oU45Qb9_EOinGeE??^-82(U1g@&vUeDPeEnsFXBLwwll? z4Kj_WA^}$`{)v#7pPL*yn=c^Eg)CwM&W(*xpE>6xa-lBuEOG617B$V9PG;#tY% f@Sk4b1%5DWpX%-s8yYRlpb@Y9e%{l`=Ec|#3M4;? literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_arg.h.52F08F71EEB3BDB3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_arg.h.52F08F71EEB3BDB3.idx new file mode 100644 index 0000000000000000000000000000000000000000..2e2f493194cd9c6defa4b2ec9e924eb9fb2a8534 GIT binary patch literal 260 zcmWIYbaVT|z`)>~;#rZKT9U{DWD5gvaY<2T5s(Ihw9K4TD}8~;#rZKT9U{DWD5gvaY<2TF^~p>w9K4TD}8~;#rZKT9U{DWD5gvaY<2TF^~p>w9K4TD}82yN?~T>8(0}C!3M1G zAMh(hxJ`$g%dEp5&I1TA2Bo=Pf!p<;qCCD3IrQYb)=#Nh|0~A;&{KI|?D5R(Idef46=g zLc-o49vo~M^Z{akDB1;wrB6G`C}|b#7r@K!>r%ZvHi1s|lH)BKwzODd?__v8RB!q5 K^BKS6HNZa)-ewyB literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_null.h.9C59159E32851BAA.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_null.h.9C59159E32851BAA.idx new file mode 100644 index 0000000000000000000000000000000000000000..44747f06f2d614ec9eac6a9d23b52d57d6e88099 GIT binary patch literal 226 zcmWIYbaT7Kz`)>~;#rZKT9U{DWD5gvaY<2T0gwiRw9K4TD}8Ys{(1++H(a@W}V%_#KXwR%P9zU m4v^qt6yXrzf$@NAf$N9*uWs{bU?ZheJ0sxXCLr|q<%oAk{62Y2bTNGrS_y!dh z1}NR(2{jy9{}W9r-#0n@Y&wTD*HlIbQd*88jAdRD9oR^oB(D9O?V4tTu^l_U>)Go5 fx>jD#8*~T5_Nm{UR6}dD?Kk3Go^|zE%7+kNfX6~_ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_offsetof.h.1EE6274699D52A78.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_offsetof.h.1EE6274699D52A78.idx new file mode 100644 index 0000000000000000000000000000000000000000..fa6d4e158199afa2928165be905e1375a71128e5 GIT binary patch literal 216 zcmXYrF$%&!5Jfj&AzG+dcnb#$L9`SCDHZ#$Zf4EOCW|{0h*%0DA3#NKe=ceJrM2Y}oa2(lu^GMCtVro>r>I(1qTveV;S(6QJye?4j%1@0Gv)AMyP eQ77uPd;M>v-`&cFc_`JEQv2DDN4yqON%ej%V2=Bfi9}dO;Q9pr=F!z<;}Hx zKW+wQ1_mZUNkJtr!N3W2DkCE+Ls4p4u^y62MlOg7umT1K^}MKp!e^=c_`JEQv49tV)e9(aT_fFo15U%uP}RI>f~G2-l6uC=qT3 zW(Ec(K`}uYFu}kHb|fPsD??FgTCok1N=7b-3a|nO2J=h#>$9dhzh>fL;^pNPfr>J4 iG4XTo^TT*R&m@A_#YM@*+#m*1(q{vf*%~2#7#IK){Y#ku literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_wchar_t.h.129FD7EE3A286014.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_wchar_t.h.129FD7EE3A286014.idx new file mode 100644 index 0000000000000000000000000000000000000000..5d83ce0c9e21fbc947d44961adee4fd0cb0e63bf GIT binary patch literal 192 zcmXYru?hk)42CNR4vxNu!A;!cM7U9LFTFPB6>?Whb9z3Oo0Bi$;^Ww!21364L%tl# z{r;(xDqK0VC}x^?kvaVQ?t5EhFJnEvkVGc$k!_r3m^?nS*LAyl GEA<89pgO7m literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/algorithm.1CE1C5E7A2CC8947.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/algorithm.1CE1C5E7A2CC8947.idx new file mode 100644 index 0000000000000000000000000000000000000000..dec5c51c1e4030b194fc209beeea7942622cd8e3 GIT binary patch literal 436 zcmWIYbaPw7$iU#7;#rZKT9U}Zz`!63#Kk2=nIC~P7^G$9q+03g>z5W6>1XC8=aiL;rjIRTNrp`m_aPI`V(W=Tda0|A9enI*;g#U(lMART%cBq>iyEKVh?r2uHUetJ%6 zD%c9JqvBIi(~1e}EG@~*$ttG)68)KTbbYaDV`b zH&5&NYOPJ51BJbKymVl~GS&KeHFy8L0}7jSm`lNgfu`jof;h!R$;H+n1`~*Y0LBV| cvIC#e9v)(0WoBYw07U^5u)-J&49o~700TsCa{vGU literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/algorithmfwd.h.7598BC438C9F2E18.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/algorithmfwd.h.7598BC438C9F2E18.idx new file mode 100644 index 0000000000000000000000000000000000000000..1c442e7dc73b4f80fe40af893a55f62c4874500e GIT binary patch literal 17090 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 LP4zVM>vaDC#9s!3 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/alloc_traits.h.A03678EA5038239B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/alloc_traits.h.A03678EA5038239B.idx new file mode 100644 index 0000000000000000000000000000000000000000..8daa7c320bbd87119a6f1d5662f6277d10664758 GIT binary patch literal 708 zcmWIYbaUIo#K7R3;#rZKT9U}Zz`!63#Kk2=nOQ&@4AL@lQmyp$^-GJ3^fU94b4pWE z^^;YNoPbE*&`>`qv!qx*F()TKIliPQ5y;WYU?89+wW0)FM{#9t63Diq)U;wIpo^YY zcJi!O+$qAy!(^^#t_^Vs14CTX`z)m2QB#Kr?{B>BP%e;F4-~diw9xTP*64r{=1~B2@ibmV~ug*BY%){iz>!%14=3$EBjY8rj zb0^Eg@X-!v&xpV^w0|p~=G(ClUt_t;-*yYd4vG zxdzm0p=hB2)7$N|p;Ysk{4JnfLrz0Um@p5MnV=cm6~|8KaV~chdjQnyDe0*UQqSTy3kU7Og$;IGUVcPhkE7Xqlc^V@l10&1^ G1_l7v@{be% literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/alloca.h.793370BF9878CFB6.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/alloca.h.793370BF9878CFB6.idx new file mode 100644 index 0000000000000000000000000000000000000000..06d8cee8bd4e8ea21eb381f6fae88d6a340e8764 GIT binary patch literal 618 zcmZvYziSjh6vy9Qe(jzKVtzpqaL1UyC4n0PDdb4}LF6EnC}LqFv$Jn+2j_NiW;VGP zg8m0eKpP8fLTuDh?F^iiHg?)r3V{R!8%t+%w;_cC!+huS-uu3pcWbR)4@v;5;aaPS zhV=r#h~3&KvEW#dugc8UVoi&Oc+Zgh*q(#Rsp}jpGbvNfs_|vGcB~8%Mgq(36B9E- zHiVQUKoTj$kZi=5SdN6-I*~L;lqKAVG$Gg$Mpp@ejv?^c{5nKJVvSN7r%j|R(*~26 zDTPwfn}*&_Q>m?3Rme=Ls1yOVkkbc-cL|p)Y2=)C)Z!&75-zh4sWxGVQ8hm4k!f`j zEI#$$U}U>x3bn0WPen-P?aVft!38_6FJBKo-Z{VbZV>v8#|Pm0L;eVOC8xLC@AUM6 z!bpFxvE=Fg%k~Zhr|gcq<73@ySXyb9zi-|hbp~C3%%3X!ZoK&Rvt9o)W$`S`o++|_ zA8tQB*gf*C$+S0pw!nLnl_&jgMjzSi378lvaAD?nokw+fdbIp}i(mbfx18}8ifsSc ur|bId>%Z1}*d0DsU^{!3YpuAxm<#vH=Yv=8_ZvS--T-(x>8yc50Q>`DJE`da literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/allocated_ptr.h.4C2F2E5344DBBE09.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/allocated_ptr.h.4C2F2E5344DBBE09.idx new file mode 100644 index 0000000000000000000000000000000000000000..45e74e91e7fb1a165aecb8ff597e9589810680fa GIT binary patch literal 1136 zcmWIYbaTsKVPJ4h@vO*AElC728H9njxTGla1ds-Uw9K4TD}8|(+Fs`CWEE|IM#qffYYjp zbu53a(Nv!a64|!(?1lg|VgJI(-X0NAX=uWlmG&yCD>bu#W~=k5E5ghUKRe;B&(;%# zXsUglZb+W<7wK1>*xn3N2S5Ij!~PYDDsQ8G~z#tYS*ky7x?>lT_T zcIM70Vd^{b7EL%iC|>W)ta{3wq<7K150`t=&ERzRK8Mof4aK0=bJlch8lF%AKvrbd;a&_bI(2Z z{?9xzY2rj7im~w}ld8%McD*lSEDZnK>{er{AAZRH6soZ$hSD;trLsb$H<>KOdb`DH zQ{C_SM1axE_2q_gi?v#zP>na~Z8n2VWiS`(D{Pe}y&WMcu2xwp3|1Vlm~9yd9b2PN zsZ?ypz?xy%#W-enuQGbtupCwLf^^lunoLh!rmRcpeWJa(!l16uTlKgtgH=6LJ@n3o zddH&SUcE_Ic?`>r^aAhIuIKb#VJU3191mG%#yu>^VWVBK$8YX}Zd!%wd#*)}vB{v~ zgFMoxB@6gD*J3Pjh@ME7Rp$C~TJOa#4~%QoyMynpy{nO#7K@1$XU}AgE$b>QMl&9$ zvu8Dw8myRN23BG$b$;sP#aJnZB3q-;RNAZ>qq*2rSz^!>56T>ef0|*#G&7BMo5r=_ zj9LE|p2xIwUWs?S?1Rp3)#Ea~ny$JxOP4i5Z8DlGtJG!YN)O+hzV>v{Xw&IU^Yqm= zoncO;-o*GVvRD(wxITM);ir8T28se!VYO7~%k*}G&SKVKEbV%u*ppm-q6(Xc@NmbNb2 znV;{wCMZ$}9n7Tl;J+UFIt4+t*2g?K_iqtlkwQo+lWxO++mP%O1o63?S9WuES9pjJ zhgP;g=oW}}3W7Xx;^SQ`Za{w}i$us$h+YaqoPr?TvwnKI``+#(rI47$q(ZSU)6tN+ ze*XynU5^K*i!45wNuA)^38GW5AYXxng+qYf)`nwWoX-tQ_ZO0InH3PY0)m}_?3{l4 z_K9`QmAfyq*M#yvug0#gi>GEm*Nh=2}Q0fLnH-tF_L1t<@Os_?}kga41XyrMG zehySlL6CwgyPIle2aSpnGze)0|5gZa3W8kCITY8j{Oo8Yi$cgkh+c?M;esHCBagQH z7^BHmvJ8yMd?&aJHIB*P!1u z=B?4F1iSAzTn-5oEseQghfd zxC^u}C1y&BqapQYFMOOV-CXhvKe#sVZ^JX;f(7~c@Pq3f|L1D|fctEbLf;f7U4Q`> zFw3|gI|VbI8}!B00X0gYKL)D_#3qP!3W6+H9#_|1wST_I24Ie~gMT|N#f5vR-BW)# zRemyKp^~Z6nN$#4pmH>1W7oRskA5h-UXLe>yO|m@HNnx4I(z3mxhLlATP^2CAL$Ax zu3&C(L6DyhRYo32?bwbB3}Mnrh+T=f!39CKX=Kc)pv3wAW59`o3Q%2mS02k~U_THbu-8V{COH~XuX=0nis_a2 zpTGn}^Qo%_aqdj>NMA$8GpiH?TUuT)%_K6KfCP(2XUOCWj)Bsv8_ zPF{+B>Xi%2zmbE^q#8v{n4@7qN`GJs6n;%bxjyHXj_Q^HLDCIS+`v=ef^2-#{KS#w zY~d=V55{wbI3w24kow-WA&X8_y#EVNoi6b0!smqx_w#}@WJ?qo+i+yQ`K@z-Oz@S~ z3d*%YpQ@Ezm(rT0MZVH@A!54_MSXgH1%>0;rD6UO^Cy_GQ?=7#&wV(<2N!%<@OfDX zAlUSrza}qT>>J>9nU6Hb(=MKQ-aC-qdk~zjJVo}vtikVoUwkOY!v}i)aRz_;Db)1n zqk_NqWa{jwclrrKUXAtYHE{x_947>_@YyKU3w~)~30^G_WuOI_FDTmc&-<`_`L)R& zn>jTiG4a-?$!Q)6A{X2YXBIjFA{1PKvkCb~G=d7wA*8UVg9Ph~-=}-5(Kt53692E) z)n0eC<6__a`zLMD2%=O3MRAlSqO=-dHMsgk^_OQS)=$dBh3;YZs0c>ng(=6Gi?$*< z-%|n*h2ai3f6)$zxG)%;wMap9g)=xwk%CAH6*5E7IS@JFu*^&}Or(UvoRR2FJ@QES z+q*w`bE?+}5oe(VnXt$(aTPkw8H)T%S@oX2F5_z*MzldtHwZZtER3n3UhVEbG^Z)= z!N;F0_3A-N^?d^ey`C}~gRc$NCXhX%LUc^#L2`^J5FO*hM`tqqlT|0D>^?Zh>v|!z zgRg#=^u-+9!Ia=BQM8VT2NApwqUdCZMsXodo^;rIJN!c9m6NN`-$jD&BB4KdOst9? zb4sO{5tpJV&YS^ao(rEh)xD4K-Cx?z|48Q#`!oiG7W#&RrOTHwE!cA%%{cG8_%b)fpu) z6=pch%P}HMW%{lowX??_@_Lww^)Y|iv7+cxkEl~Yho*TMN4J~GICP#DZ*+-Aw)c;j z+!6bg*ENgIJi14hnsN-+d_xf55E5vYRQ}EZ;)Pnh~TWYKL9sfc#zZ-e?aWKmT(@Ak#Nl&u|f-dB_gwS_rUkBO4b zM<-InEnunMCO&@OcSDq8_>+_@MHV-F=$BE;*kH>$7m@kd>FcCLOJeNhBBg zbTxBFv^V~}J?@&v#hRn}c}dBpw(A}WildL<{4GGPc`N*_29sWnnax^kb5LZgGlD2w ZOvRYA`Q0P0)eOF|*e5nRhDEzE{{wOfOe+8Y literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/array.F4CC01525F44E658.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/array.F4CC01525F44E658.idx new file mode 100644 index 0000000000000000000000000000000000000000..931c68659d821b93d6c6c0fde38130217db32b70 GIT binary patch literal 10946 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 R3`k5)>Q4r!Q_1Sj{|4QZREq!r literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/assert.h.9895EEC17E1D2A2B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/assert.h.9895EEC17E1D2A2B.idx new file mode 100644 index 0000000000000000000000000000000000000000..1e98070c2c381181baeee8ba40e4449b69d12d6c GIT binary patch literal 534 zcmWIYbaUflVqkDi@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`iaHGsYNAv84TDY(^3;lN{dp9fzk}cmAOeEQ;Jg4imMnI7>uV+FWDNkmV=3hQIuU& z0Ad3J0~ezrhoT^ir}c1Y*~cU9e2iR-(Ol7RMgFrd-aF#af#*M;A$ z)i)^sg?kuzdKe{O68l%4-1qiEgAp?iql&bO227ZTv0l0!nP*gQ50mTup2jNM^)?*n zJZTPTxPy2Yi#dwnyya3F{cLMR>VXzIGC1R=dg#H#Kq{q;Q;3qrRF4p3@a{5E|vr_fbk9kjE&_^3t3Mo Ly<=u#VqyRQ3_EEn literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/assertions.h.1D646B13C15CF849.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/assertions.h.1D646B13C15CF849.idx new file mode 100644 index 0000000000000000000000000000000000000000..0a4f58295db249b0abdf2fbee2795842931dde69 GIT binary patch literal 374 zcmWIYbaTsNWMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl(npB#upIBU+T2zvmpI5Ax!GKLig@swXnTc*rW?pH9ZhBrRvJpv{ zCB-m)a(-S~W;)Q2;>z44ko`reX~heH^fIlAJB|ly*crJPbvSiY!A=7bYwrC>5)av- z02G$xkX42W?_!-L{Px`x6`-&(r?MPOIFI8MIL3C{3aE6`ug_4j-4MEnHT_a>s1v1 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic.659F85E5DD2BCAE5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic.659F85E5DD2BCAE5.idx new file mode 100644 index 0000000000000000000000000000000000000000..4a4a0c65d1106747dd8075a50b53ff985905eeca GIT binary patch literal 37530 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 O{iHHR@reKMzyAY7`BHNL literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_base.h.BE2CD511127AE324.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_base.h.BE2CD511127AE324.idx new file mode 100644 index 0000000000000000000000000000000000000000..537a916d56c2e6a3eb1b4555af47885957af5b4b GIT binary patch literal 8948 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 Kj!~kd(tiRN*6i*8 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_lockfree_defines.h.2D8FA2BBB9BFE893.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_lockfree_defines.h.2D8FA2BBB9BFE893.idx new file mode 100644 index 0000000000000000000000000000000000000000..aba0a382ce8a381334b1dae733ae462547b16b9a GIT binary patch literal 398 zcmWIYbaQKCWMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl*SyHT@SdyQcnH-;!pPZdml$si!lA4y8ms+fs0W_;JHwk1;QEFQ8 zUmz{{evAA}24@aNE=B_m16i;YK*C9XvT~}Tg)UIohQmeyCM=xa)vRV6tp^k~<1kZ% z3D4baALH8GKsjoMudzj7N3=}rxFoX+B?Ok?%S#<9~ zps*Z=oHEQ1yX|G{+3A}9fx_k-=5TidLm?*-q^7tixtJToV9Z^*&>-ObWl07G0G38r AC;$Ke literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_wide_counter.h.397D66B6BECC0AA2.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_wide_counter.h.397D66B6BECC0AA2.idx new file mode 100644 index 0000000000000000000000000000000000000000..401dd2fc3882a49fa150f57da85080aa07e0de16 GIT binary patch literal 170 zcmWIYbaPw8z`)>~;#rZKT9U{DWD5gvaY<38E06|*w9K4TD}8;xG1@p8^mBV6J7B%?^gI_1_l60HZ1D^ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_word.h.8B32DB244716470B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_word.h.8B32DB244716470B.idx new file mode 100644 index 0000000000000000000000000000000000000000..d02710d1f49245b4fa06056325563d35e98b4983 GIT binary patch literal 218 zcmWIYbaT7Jz`)>~;#rZKT9U{DWD5gvaY<382apDXw9K4TD}8SgBXm7D+_fRW~Y`hFaQ8Rg;Oow&V*k&985LskYR+#t8urC{gYTA=E3j&enq@T9(fo(jd&<^zQb z84BfK!nR7!4o>;BVg*oGPf|}4CcMOUXE?Kv?G>P~ExWBeOjzt`|KI;pIDY_z4LA&h zV8TFu&2GBFI3O#ex8*!O-M{h|CZ3&J9yDeP)!5W|Ao z?~)`z4haq6(0ZRo6kHKGRNEkjg(jcu6~bbj7#4$WQIN!dD=7Qi(sX)$NhmCc8(e_~ zzc@{B1@%L23aq6}B*|AF6g@&QC3J^^RDQ%QQ@Ac13QVR9WUokhOA)^;gz5yBP!|ch zWnU;LG+&6?^k)CwzX7IL6ReNboGWJevjZ)>{FES z`hp&nR&t9$QB_}H<`r%(Et5A=3RgfBo@^+6ref?j1rCUTPh6@g(-Jg3_D63B|4R&>jC1IM|`s6l)SF6=uzVP6%Ry$zQ&07)ed;X zwUK(Kx_$xo4RdDK&YtP;`+|`Tj{0C^j7f@qF%xOZ)cNWulX_8RLNrfZGEF43^-=GZ zD&GA+D%G=!FGs~;4CR!OGY=@%VPWKI)mAE$zwQQV`}tGUHU8v|>3TH(*^Y!%v$r!eu5kj3yd<{G=Y zFo~>E{=_uy{^rfAI@j$;O@n-a;rk)89}1JM0J#E*OoGxL80Ja7C!Wl|mS%<2Y=-Y5 zY!|V_HYBMj`$eSURBF_jHetL*+z@HAbO?k^y}9j zyE@+r85BK4*ddY_+eS!^fo&yodC>$Ypd=lH?I7{74M`pjt=_Z$=6hA?kU~jXA)ytl zu?3?~!8$zwsX^@%6@O_Zl2YHqYKrZOs zkP0$BIPs%-E3A-4#hfGTIqD5ZSffhRb32V~~6d@?sm36fT~2|AnmQ zBUYF|xwHV=0+!f@Byqj3y%l|`y2%RZl;k>LuMa->$UL8g6P2lxqVK2)d3CNoX~9Ll?Bm1zEG9_!++gBr=(9j{}PyA z0()#@%vyH*VSIAN&vyUjqGm~yuufvCVns2 z_d*JW56dgrtd`Y=U4Okh^=SGwPW3S&IW^fwK}n4hup&6s-8!z>)|`Pc;rN||-AOFy zVUD`h8YSsEe3&F0CRVhZqvqO=kW3w>Mbbf%bnaSe=HM#Vo^&eqS!^9XB;O z-!LN_C)8$TmSEeSa&J$|jYG2v4fEf>Fg29-=?RBnMo(|Ox2|C8vKcg`iaPqtjM$3Gm-jcDJ});c7TZxA$L}I!7h(05&`#poNdmS2b8L*F1}kG@lq#mpP(?At#~%XQAsxo*qSD8f z7xrO_&_*n(b@7RmuFk<%R~U9>Nk2KbsJqN%n9;Wy4}5cJ&FVVCj3#efP*`+g@;aJR z6D<=*nj~H-h>Zz}dWNaNm{c&Vfe5f-zdu+1iB!osBn7PLTtm76pYU|~?#j-A1HJ);Qa zT86GG{d&zbTUGi2!y00&D1YT%hy0iK2R6@-S`QlLKOnE@`+3KdcEgOGVm_)&`A{~_ z=(#-)mkH8Oo~Kzg2+SblV){Iml)3Qpyq(7ltJ=KY|GW0WNgY(eQDBe4M3lf4R~EkA z_1sCr5;|U9(gcV5Pa9@b`P<%taK?@Z&1Q+ zLb{1<#3p(pCg*h+yAGIR?*N^n_B_CYiPKJBY+kqUZNoNXeEZDYq1NRWztjdCf=ZF8 z&k)S^xtFpttNxtzo?%t07aUj|*S6d^qwhFcJq@?2E*sVepH^nG`lLdO=>sImn}yAV z<2wo4N$hx)0&OzvdGn58H>^qKzyHhPUH1$#LKm3KvF9bK z%JHv&^A(t(r+X*ZIw3`edmz0BvJig3^J($ZTaOIWtewTq%EGGP_~XDHhY=WOCv}bX zRz-Pp4qCT;(D2584O>M2|H`FEm%?sI?NlSB%`jF}i(&ZN=c-p<_)l&L*sRR|0HQ$G AKmY&$ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/basic_string.h.4F91164A9845D8E7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/basic_string.h.4F91164A9845D8E7.idx new file mode 100644 index 0000000000000000000000000000000000000000..e3268a14aa1b45228f9ebfec8738b76834834d4e GIT binary patch literal 78488 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 z zwn)zbOBw+l-t6HmFs%?!8xvU@V~0*eKo6coa5dvTydkJ>2y%Q>;N%12ZmxUj`2Xdd zFz}ACM82&dsmWEr6QXTjiYNMLRsp#TH}gR&eb6e4mEp;Ua$}pfpY%aOGMNrbrtJhv zcbjh1HeC!ss9mHVwMZXB5Ls&sqiWD;!V1?jje9(eiv{{0uw?OjFX-qCO2kacuzys1 zvHsmt15>o8DeCvxW8p8iFF(~^QxpPJaUb6Dr*A2a%WBp3jbpo(SM*oS3QJ>$&v>!9 zVnE#=Q1|;@-Df>RJuBbq?6=W>GFiGj`Y%tP#@qdw;>?M#P9s77yOF;eOT_n_RM96@ zbH4E8XaAwec&V434#ao-s}fl{ zQSl`M;S28^8YM%cM863I7LN%mEeg8&jFU4q0C**KFVdy?cJfHjhCjl=@c3B6^lWM3;e2p~<; zrAaK2uQNlkXGjhL*d*yTNi31TbF*aMEI9~ZtEAg1u|!7C9g=;A(cU6DKoHcP>6me>`D8VA(43q|5SZED7B3Ro(CW#pNub_eRqqAl1gLTX$P!Dfs-;#L z08=}b8Kq{r)GUYfzY`Ps@VH7xpdtuCt7#eoY20c|czo6AN3?Jla_#Svi@cU+b` zE*k-?6R34wVHN8I<9Z>Gh_mnr29GcV{6Xj~S%NW32qb{Lf?=;Pgb2LI7L3_KAORc{ z3ljWum%F5x{WB6gFiS(R9(zn-nZ^@s74DA3Rlu*Ofia&^^v5@H->mBF|pr zgMn`L(InfZje~F0^^pY!Vuf*wtkE-T^s>2|xzf^IKV@QlA5~;Xe#}RYrOv9yO;lhF zEwDy_aR~vH*6>QJ9S-<`z*=1AdnR;gVaoyjG5pPDExlPW-a~{Qw*TICQn#J5;}aPZ zz4K9)z4A@waB5q5uSZ&(Pm9 z7UC427KUzNEa0bu|8WIxF!T*Z4^M||19*M$PDlW0dhk6SQSDI%ZOx6q*VbQOaS6w1 z>~se0blQnwmFo=3^#bypLHP>s!K`09Jq4#P{SVq3RAF3!8c|)N7{qJxUmf%6_MFR+ zs1b8iF*zz1{2TS5Jt($7_{ahGexK&}RK%LR?*f`)?B3<#*wgjH$6 z37}b{Y1UBCSg6ERP1sdUI04+(1l-qH!9gG5m3l!3pobDvk~Au>p`zc5daB z{!&sR-j66dcYbHnfP&wXg1=z$MT7ME-sXXp>Zzq5ZV;QI*18RAy;2MQ2oRd^CU?*# zC4dhC2=PqGbyK;@#uie2;n`IwswogYVJ z!EN@_H~VoA0fk0afxo`MpCfYICIsjc0ywWDK=t(j9Ff8HgjIjS%E1l+J)_a8Z?tm2 zh(|z&Ro`LdAYtumex{GJN33e?oe>H~oJZP*j^3)w)!Iw1eYG}VavN5=k7$`ATFa#O z-^qDmxAj+uv(u!do3yeEUFEB}HS^_+HvACpyl0SC3J=i&9bKTfzrX38;JO}@c9TQj zB>2(^zOuCdy{}q$s#oIyaX_*AX<9PBC(a7i3@NsJ{7?9Jl% zW-$)5I#i-X9N!|wfn5y&x5OuIiIWHe`+afTeKD3Wuy=~%I>lJR!2Yo`{$nW)4D4V| zz+9SEZ@et2U@Msxnlm$gMXhgDAI=_>8`i|I(Gu{{n_- BX0HGM literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/basic_string.tcc.967E4E5D61DA5282.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/basic_string.tcc.967E4E5D61DA5282.idx new file mode 100644 index 0000000000000000000000000000000000000000..888033b07180bc71e3b54991a752b1a855a07ff3 GIT binary patch literal 50864 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 L?cW{-r3?%J&L|~6 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/binders.h.B7909204B7953DFB.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/binders.h.B7909204B7953DFB.idx new file mode 100644 index 0000000000000000000000000000000000000000..3f91ef43f44cf8f873853436aeb54b18dc539d24 GIT binary patch literal 3674 zcmb7GZ-`u16@Pc!Ot!OcXWwMwq>`f7n#37*GSk^wt-~@78`!WY4TOlG(D3HXot>9` z^WMw5@9oYcU6WK(D1`)?UZ8@q(YEV%Sj2O* z)nVPWC`dwWqRVoL9`kI@8PBy`U#)i&--!e4$)zrw#!2K;X$LA^(;jrwje9iS45%Hg zC4J_{oVtD-C|40edDxUAxW`6r70QtTHfsALBgMuxe8SLkS%-Rd%%WS zS>&wHLKIK$9%#;7GoWRMGY zDkwwN5|2BLM&I=lzSQ*sJ8qWBm3sBjGUS0iNW748$`z1r_5vTFRs$ks??WmYtQaLTFj>jDy|4} z()J5HLE@oq7IlNDPnTG~DKZ?TgQXgtH4UOO#}xNRHzQ0Y8~1=y&s`r)o{*6pLGFIc zaN%?b36>3IFIDy z$pZ%AdI3lRZMpkUsz!|GM~Pt+5=wZioN5|9Z$n}jr9PA>=;$UM#DJ#23Q(X&9ik`= zmN4M194$R#s9Vl00*y?P=ne}b=HR>%{L*6!3-!9xMS7k@Ec9##i|yh4B+wG-1$Ie8 z9Mu~QK@D`rw@Ox7V9fitDiI9-=#-{=4lCqR3+Yx9ThL`?LB zw$6jn6TUcy56kh>(&%?WbHaFfmvy`yPrEk>#;_yR!ewPbA884I;`d# zUR=gstzNISZD)Pcjyg3(6tDJ-AjF^e$s)d#hNNCyl?%#fG$swm2!s408hqGq-y?=` z?d6pV_cFgYSobKRT7q6!sfdSP19kMKAyOXFq*o z@cGxfSVn|vq;QSQr#J0#_$Ld+C!eT4Wo7okDUB0k$&mQF6=k{i1=MC!$ z$z4Gdbu(tNQ+o}A?Ah}h=gozG{QEms5eG8@*jpyV= zFTcI-`1&u6uiwaLida5dJNsFA(aTe(lk1)1Z+uS$zmUCPvr9jJ`m!FMv^X z)5#*%o%>8>5ZJG*tE{g zoh#^mnASxycaan{g<28_q4c0*o7PP-eUs#La?{!-bK9h#%Q3CnWbQU8Xu*_+Up#d9 zZutzbH}lO;YV3L$*p--ce0@h^rJccZfBO5viw}O&{6LYW^$MAJh3p@7#Cny?zDkPv zT~~$-LS~u-T|Uf0UfQgcg|tFe+6>AH8%4bblnzkg%H`}OvrBj3-M z)+Lg?L_VdHn${hXy)%CQ=hoLQ8SmeF9gg0tcTguct*d1ADmkcW*CPN>O8~ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/bit.2A91B049774121D4.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/bit.2A91B049774121D4.idx new file mode 100644 index 0000000000000000000000000000000000000000..0186c868d605378ad3038953ba9488f505c7f52f GIT binary patch literal 8214 zcmd^EZA?>V6u#$e<;zl00THN_ma-yf0Z|J&zTBMnIaySso2-_CMLKyrA)sNAp~z&$pax6k7i5|4qPyHTxj)Q)EH}+=XxisK=cVVK z_c`aDdm0hJ-m3n`nDi$*ZR40P z8R{gRpBF(?wSSfV!+kpfxKN6GOObTj-rt`1SG(oa%U5@a2hS6BTu=ll=1`}(pbgSu zr~vo{;6$^{z;DL!P9)lid}ux&@$(U8pO4)0ktfX`L;Pbjzb^c&@1EUUTZVU+Wxf7G z_x3S~HKD@57e*70#{-4ELhv^31i=HXy%s|yU|#|lHUi%WBHG#nd=rjaz`g~yZv}oU z&bI--4abkc{xNPp1pFbKw*cRQ<8owQj>i4D5H)w|-R)0!JT8=gxCA70e2gG9!b}>Q zKx)Eq4Y<_6G@5S#aSOh_6{M}WeH%#IaNGed9r*gkAbyOm9|GwRZf^mp1;h z9NtiHd-5lItG|%zYme2|j^1SW8*eNS7Ekb> z>dmmf)wx+()Y30zHDgyTeMKDVe7hW%;31zt|Igy}yKo`QH3?L4TjVtng*Vxbzv zcU6t`OHw7)1tohXV_lHOQG<0sS(CD`&ML<-2jdI^1J+s9fw&HT2JHrMH;zX@Jc460 zT4+Y$RMM3ey^0a)$`6qttmF`toEcOQBg*`JJ?;nAu)6cDjs{(P?Jl#`C-ZGt^YEg3 zZYTcJ2S1)P+NbSI=?R7chl{i4i*Y%U9E>XkVJUdiE6YGo2H1_G0=z2#>y0X5 zMkQc3h=U+Hh);{Ez^e*`^#3~w0Y?FQ;BJ6P4fv3{5Qz#AHjOGoQH3a)UT;PMGs667 zM3WoQ6p9ZS9sKJ7C;Dfr*V)~YFIA5A&#zehg-i@+YTuC(*~Yj{$R=#E8C+R+oz;Xf zO8UEM4(K~sb)xxdxUXu(VAuaPYeTy{-Iw-w{KC-4npu^JTOTa#We_Ft!&>Q)&^uP2 z9(@-S^A*RM?*FUd-MO@bdQ^0Ih!K{K&B83(*hmYja^4)9F#F~o36?ig7hyRXpFw^) z)p2K|bgzZsc0}<+{fdvOo>~2FZuw$#u;)tRORK+--fz>d4sTVCuqq^Zg;U<`t{0#uJjsySz literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/byteswap.h.E57FF553A16DFAFC.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/byteswap.h.E57FF553A16DFAFC.idx new file mode 100644 index 0000000000000000000000000000000000000000..37c01bf50ab5321645741335160156ad2b08a6e5 GIT binary patch literal 448 zcmWIYbaUIm$iU#7;#rZKT9U}Zz`!63#Kk2=ncYAd4AL@lQmyp$^-GJ3^fU94b4pWE z_0v)lOG=AUi}f-Xut`@~n8ll!=;mbRl~(Ac=auRwWtJ4{CsmfD7MCX$kff=kvH)xi zLvdwp639J8scFR*fb_0UF?ZPl?Kl~En1t+wJitx`5-SVO^eudytjom3B+DTy4HM>J zQsY#Uf${dQJh|`fg$5&L9wucLWkHxQ50ep#5faax#U0M8jVwG{8vDhDk&8*3LtFx; zWoqEsMYq0MPXbzJ#bJeHofoGU+`4nk&r_1C4nGAd(&o@cQe?_$3RhH=nv)1JwYVs` dSQ*4%1`!Ydj3O9d;(hSD^_y@QHxnZ>0|2<2W0U{@ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/c++allocator.h.00F4CFDD575112F2.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/c++allocator.h.00F4CFDD575112F2.idx new file mode 100644 index 0000000000000000000000000000000000000000..af1fcde443fd7d0b6e857662c784c53c57e95e83 GIT binary patch literal 240 zcmWIYbaQ*bz`)>~;#rZKT9U{DWD5gvaY<2T1CR!Tw9K4TD}8?R T?RWlRmQp?=BLgEu4TuB)y%s+| literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/c++config.h.A139A8B32F03163E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/c++config.h.A139A8B32F03163E.idx new file mode 100644 index 0000000000000000000000000000000000000000..b16373a28843c5eac3469b7a34bed00f80f23bb2 GIT binary patch literal 9548 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 OQdrN($N-EH7ytl#QfD^+ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cassert.C302028D9A1C4921.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cassert.C302028D9A1C4921.idx new file mode 100644 index 0000000000000000000000000000000000000000..b8e76e840d69c047db67c361a7e2fa5a3bebcd10 GIT binary patch literal 242 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cerrno.5BD437BDECC7A78D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cerrno.5BD437BDECC7A78D.idx new file mode 100644 index 0000000000000000000000000000000000000000..f19f21c72756e516a550069cdb9474176f5ce6b6 GIT binary patch literal 302 zcmWIYbaPWO25Ff&saE>>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl@T2z#m&wx!8SVk`ct6YVJS-hEvZcb)iX@zcjUMaGXNtq?ZFn)4= zURq{4(2(NF+$4~Dic-^xZGg0!|F=%RO>KotJdD~L+TviR0tqfg9S$8h&*aC8D)A1T zMT|U*`W*VaFhxbFIf)>4aZz%yDu}@hA|Qa#=Wg*Hfu$1~S(uranHZR0;tUJ`X0b-u literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/char_traits.h.A86DDC004D15BD88.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/char_traits.h.A86DDC004D15BD88.idx new file mode 100644 index 0000000000000000000000000000000000000000..e6c17097f4d34ee289ee482483c862c924c7c151 GIT binary patch literal 11402 zcma)C3shEB+Wx+?_jwQSodX^~Kmcs5AEbel-!tlR>!u*^q3O@LMGJCw9I;e2ka|}MD_8(nnKc=U3JmO#c4dji-hyVK?{$Z;BJwNsF?A*!O`32Uv zN%||F~K|#*=JeTM@KP#uOz<$Qh za*dfZadK9^UrwIp%APdNmHjgQj?T#|9PJ;zYg|rl_MnuMlvfJ!Q$%;!DPwx34Z+`( z)YOz0v9%OO%gGb|qcA-=Dhl0Ya!fbjRJ7^G^4gTLT z6VgWhmGWn+`B%!p|DS^F2X%#$MvKn;i-e%#3tR=$CcfC&<8sA({8{H0PDi*xmB4tH zS;L`*>$Y$O24KCd22Cu$7DVa3{>yWHB4!{( zN6K9WcbQ=eqFkQ7|G=YX+L6);hg+jTjb_?{DBGS{T>8FMA1prlI)m#>H-#Wd`@8|a zsvhu6%Kyl*ZTh&AvMEaz>~Uf@8VK;3h7k5Jb7Z zDSQ4CGh2TVsu)OF%V8}KvISAp13yd%Z!UW@REfZj76UBC*%g8)pX^_j^Ywzg!;ykt zG*g3_T97S>GQFU(v~CCc6@D~!G>5|+G;bk@GT@2PBg%dp_7s{oc2oyY2Zk+(@>+wh zC{Ak|fwPO0^Qv`TO|%73o_wXt`=P&k`&o}G7AaR%>nhHR5JdUy*1ad2)9(KU=LKi? ziUL=Z09z2{lV@&@@0&Jvl;7$U^DEW!l^S6SqO7c|IJM;A`TvE+fE{fF*oez01W|6M zoNv+|Ez81vgdN>b;0AUi1X1q)c63XU@0%?ABBY#AtTRfYEr@dG{h9p&(vot~c5!yk zfprdg+kz<7bH39yjoAA#P93&#ioq$|jY1G*-i8x>v!DJVA3qvfxeRa_0&GE)x`M!O ze|%$ap~n@8l#^hc1fMO4lAh7)({2N=O$k+cVn=lh>X>N@qD;K}`Ok{+Xf+)*oEcqxQ>drg38?lu}fJQV-A&By7o|#?s_g|Ib8sS*3sn#{Mw=IY=YH`!~ zsV}|z7d)k~l_Cv_aFYl@ln1`(J*rXZQ|_M^&HS2qzGe}&Aj+&~GkYzmIIs#=8i#wF z!*Oodf+z{8FN6*FU}6QX5q7j*gY|gs3PF_7xl7)0KGM#=#W2aqBJQLMGo(%yVsTZ`KsSGt5j30^ir5M@aG@9)3#`CmW4j&NRf0qg?P z7DVaQyg00LP{Rkf18}(YVAVsSEr`;-edKR%O!?$v91FIx7ho^8A_P%p&i~AKJncKA zMB!K#Fj#;$i4a72=}xbszLodZhbld=l}`aag-}}%WzNAaPkeCi!Y14S_|X@cbrFq0 z2%_{?=1snr(SIv`G*XH=6yu301W}%0ZRIbnpS}xC3deFzvCb(zTM(uC?R8rQeK>G8 znm2y*HGpfl8-*ZB=(EFnTsS{uADR?)^ewZ#WxZ`dl)Qo$6P}(|{x>|mv7>4R)wlpc z5XF7p`o-)Mee2Nbu$6KSo9v;}I;ge(7 z5e~OhgHp6zA&Bx+uN4hZlh|=_9Ntplma3aV5GD24V{`v7Ea4O`0FGr3hdn&h7DQQ_ zwy-63p!X}J;8 zgdobjPd%P>Lbw9Kjjo+rRfm50oBd1jKE8r> zhh1G%t&4bR2|?}f>A3;#{NnaiJin3BtU@y$h(Zu$Uj1uhI<3BQ1MLn+a~7<#I2s{{ zGW*FDrJG;a-iY&ylxhvCwNP6SCHnrj|L$a#x8P}q9kr>@rW&>&${*U-wDMP)?%{B8 z^3E#OS)4o}h%#CUJNt*3VeP_Ix(IL)4`(5Wvhwcc$JZIj?KpX84&N~A8{BL{5XF_B zJ+9#4Zqhq;2iZO`9hKx0qe3{uzJ=UTj*pyEGWx+^L1^)S_v$&u3T<-hF4e-bpvVQH*btIN{*CT)Nq$ z7)?$*pBeL+L%)<6OP%-{Gp;%D56t+%iDz?THg~+gh#QNX_@-*yR2};Js&U_m=Yla8 z9QtA~ikQn>vzl{9lWmBQzL_00=6lU7E} z*2(#|r|i(kwX0X(I}whDz)D41sieuN+^lGuC8j6=yAmM+`FIa}75L{*fv~ zu!DzCC`Lg8z9Aw8G9d~T@Ko6i5xb!aU2{Qpz(7sw<{_{SK|Hy(6hL5$B6^_DoI3Kx zn?tAl*^6VSPs9Y-Q3OqpKTa~Pvk00&Kkjjz^^y1{3%SXnC60hLi6+DS1M#o#sQ_jPk*jw(@ui@S` zJc%M49m5*WS|0Ai-nCBsChpzDlW6h%!M9PvBb+#~hNnrqn_IhiB3){_`56!Sj7Lda z%cE*}9JyK)_2JTskdKyr)T~=Cd1nnzLt{#JrCZW`=PR!HiUXfjU1!w}Od%q+C*ngg zP6`ZBA)-Pu#?&X9{~6r2d_ZU2oM24oE<4IKavf-v+nD8c;CXIio)Z_jjUp#5b{oY` zT;euLocKG%_)c-OcU>{AJMlhd>|+l7L1r9u;v>vB;>7jLsCVK9W;8f)BQqME_zpAf zIPq?7?BV}_n6?wnwur20e}1yyqmc~|n~CSr5_iuf z?g4VXPqLmTSqCPA#1=&SO)XI1jS3NN(?U|XjS3NKlPS?&Lxl*fsVO>tP$A-KYKj8t zZb5b!O$xv7X53OE$gT6^9=Fs!5;vd3C(JX#4Tz_iyB37oQ}a;LW`Or zahn?6rpA)Dp`(kD)TZ{8cpik!gBS|(baNp@EQIb77lW@DQfZQOoFn{=cH;EKkSTE~ zcuOIPZUG%H0Z$o(JF&OSsjq;}70^xU{|d=}g#i**g0~Wq$Vt@EGxStJxD$J;oca%; z^M}w)>OX=$A3=YKH-L8oBvDqupGq(`LWC11ZiF<6w?X7Kuqdd}&Fv7f9ik-O1yQ>o zj&3GOi=YLFWC$%ZB|}glG9h%1@Z#OA3leWXk5|$;rk!J5$$;zkoE+wQ^5{r>V~G;D zMDdY=n#4O>WK86pEie%im+Z`XBl+}bbbl@>{VpkwkwV8Y47j2^F7XXzzzrv^WxiUL zA@z04SLeh>+2EsWgw&s4`Uw^*@hKL6iuINFI_r0xIr_iJ2Ha$h{+rlahj@B!}V|1j4Nb4UNjdHiwS(Lb#wPNm2k(G*hV2;(`CFQQe^&7Ty{Pl`du zzi$3h>GV$}lrZI!x(C@=B>Cbc#kizIQ26AZ`W}~*J`!J1Lar!LWDowONVuY;NPI&H zxuHbS$aEZ7!VM)w;$|hhS&5~A;DMkdH7k83UckZ@uow!|b@MG2_ZI6d@lxhn%2Fw* zpkpQhf1{l^y@X{-yqv`?XT2pZXVK*>UgA~EyNV@I9H3(u;HhBYPVB94>esUHwJcWZ z*D>!pmP9eOj)AqOnuR;Dx7w+%Vc|6_R_eDf?-rIsv8X=)HMX({Cr;eT(j?x)!uPOP ziT5#UA4{Z&SU2~xuKQUJiR)NY9gCxk+^gx8pI!L)&=_P@DOqw`xhN`C7+t+S2Vjl&F&By10^-F50T0w zQ>IiVZVr*hq|WgYfxtHKkgtUqW=)%;1=58{3C^G(JFO{Stk$|zYjG4F>*mK=9eX9s9>G|A@JjVPV5!XsUEfT?BurL{e4*!%7zX4U41@ z8#l8Wd_|2U-%!USMerGjr2GZtZ1Ln430vw&yXBNNx%$HAHc`H;mry0{a0!7`NZcKNeH;gwNXuF$l zcSlj*y4mRFjZWO^=B-Y=iW#e%LGn6gtaIWm%-G_@E4Z=388olq#u_Ky#Enf(Tna|1 zGw7`Zqtb~tfU&`e7iz{r85Ha0GR;`##H%%9wZ!BDp>>FKH_a`X7p{)TbxZr+saZR< zc(N}_dSeSB<4uktrMgie65P}RCAd)`vfI=rrL|EZlG*eIHHm`}nQUn)0@HHUv?dt4 z-aKE92S6DQDB~d%@;$a=?#40%IsWwBdXyu5Mlvdp_|2p!D2Ih%WD zb00+&{)j!UnD?UP@kik4N)9Vs2A2+teYn)6tbt;U`s> zcrJM7f{)A_GYH^b0Gh;$A#O4Bk}myHfTf^ITn6c7kRe_4DoC$_4C!KTgxHM`Pfiz( z51o*v7U&YUfVTyF@^-lo?)#ugJX4FCsr91U2Io(M*_tkKk(OSh zWzde%F@v67s%21e-Cs(Mt<>TvNu-wkT7Mm6|B)V%Tgh7QUAkoo7 zl_LyZMcIf(>CZG97a@X@(0<(GBJ`2?GK5@)C~_op^dk~3LyE-LAmkcEQI$r=(oDiN zNRhY^!W$u0T1F!zH9}vBTOq6!Vx(oXK|~vLmw1Neo1vvj%b2NQC?D;_=`*!Vi5F_# zg<6udoFdIrq=h@Nx5%k4(K?rC-K73)E%|M2fW*r*?=me(T3)HQA*jwto4(Y&AVDlB1`pKvQeo;IB{a7mL~B!EpnY^Nq6f*E#yNjO5*ie)OszB z%&_(R!P*J?4zI&p%FwW(4zK5&5`0dHqrH6hSJmLFYBa^uR53)CQq&2hdGFy}_V75F58TJCecVSo z2>p2;vY$sve1JzC;1=x{9k)yJ0p4HYL)<#VeN?{C%_F?)5gsq`F>W2>KH5$??)C8F zJcclx+W2XrT1f--ecLlwx!h$Nep(R^DB{6%-v7^sd(92a$=h(&FR0oD)hjQm6QG@d z4m_-E{mZ=)4{gV$y#d~i`;(Rh|14^tG|RM&&^Ht%Pq}YzgLWGN zGNPeu5B{s0vBp@3|2Nr~>_7!Zfdfr3rZ`ZUo0mB~!74Yea^m%FzFuOg!Qv-~0xV4$ z-Jz%u^;Y^ex(rbvs;u+|RasFXYOC}HZ6Z{NiYmpXs(65}Y`7H)Ke>7ozrpMJI=j2S@T==r8eph};j|so)dxdX^VlIt=sq!gI3_X>r(_^G0fO!kg->`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl*SyHT@oRL_RoS#>wm%%_lc}ZnKYJ5piB2X95p32-LkR3&-X~ot2 z3=E6w*=Fp0dzgWVg)vw-ShS-1!8`4F63r}((E`yzFkXYrWXZNE#Vjl=jF$YC0x)3~ zMk{_RB%U?DH4@K;-v-W`o>eq5EvJKd|z_xA~W2ZPX3uCx)xC+7raq@8r2wsv< zk}!;C`=M{;1mOwNczwn#W6;LFJX?hXbI(0{YIrNxPm=^K8>{kjUT&MCNw)WSn~NBP zgA%mx`sK&AxRPxT=4+E}i)*2B`=06Z44HTs4Mhy)VFAg*=q2I>=fyR>&r)jgG-Bjo z)L_t10H;?VF>e;uZjL5e9_SKq`_1{;T;`QR+5bwNiaXauU`m%an+w?8H=43mC zdvbB@S;F>>$mt7E!_LX&qey5HQ7$t8=19PYH_k?v5mAshiha{i$u66WM;5XqJ33v+b=bUcbau%Uvrz`WwF@F6oc&9R412 z!)wxM)dew^lQ;U{RkV45&tXSEKgwL3 zSxU*aTtV&d{Oti{rFd;|S+1+L;YeX6UPWf*T{i6c(lvM$<;{KSBAFeAUy*u?o~iC; zmkzupX|&4+`SLyQA|a~fqD#u(Sa$W0phYVE`Gwm}t9!@}->L6w_k275VFK9(Oe)`z z=)`kk65haYpZaV;)Wz^AB>2onT3Pvg_sp4OJB)Mj&uvVKOtZ;0;QmnsZ#PDf*?4_+ zxh%VSt;L=>WZS|r=U~`>W8QgW8!)NwpQl3cwE4jDD2*Xa4wgMvdTQ)n`{?Teysm$< zM~*cy?#)8HisVFpUC1t4vz%-fo?J9rE_P$#7QD73h;A$VGM`~L*|x-MayrczyeYrH&me3uJ^ zPBIJTiNAY5wgDW^-u{0W>iCds0~%h3pTDkf`ymMhz}?-^=Fuy*JRw2LqFggh-@3%7 zBxpJ7_-5LvD$RFz)8^I$%|F-9UHVM6_hmcwJrLNe`;BY^k{R@l*M2J?-+$Z2 zQy~FDl_G>l7ZeCDMMAaEzDSYYQ9AN_cAuMj4#XVr=KuGjnVa3&r_3|Y%slhV^Vspl z)~!eMW0;odFMgDrk)MhfhVjGyIr8%|e+$Mx^nbkU_U4`QGBdi^U&!p*EyIx?pO@jt z%__*x%+0ZhxYu;wC?sE8F`tx z>2<>GEwVCG@dvs1Ye#;1Qj(*$BR?ZM#VFEVkdvR8W$&ifm=~YlEj1@TCp9P6k&%|0 zlWtGX=#rU}sW-rZKkkelW@p&DWTZMWJ7;Co(HoqZ(={)*pocxJTV8ICUW484){&R- zv;5qg%rv+5XW}CAGV%-Zax&8G-Smdxp7hAe#m&v{ZO`pu&&|o|ZO_a}%hT)0>1t2S zx2NJ}W_HQV%eLpG=08fsuNhq=wbn7%c3-u589gv>Gjj4Bb}cn43-e3wS6*&5VWaVJ zyq1~nWbwcDG$yi7-6YH@%<_&IJ?h${9iPV8Bm2~IK1(ma&Be@1#xLu|**h2m($pTE z{%I`Z_NhBrT_CHA>9V>#LV5KtVIC%YvLf}Kr}W6p%*jt~sf$>gy;VWpqZes(#=XmW zPjxoj*P4e`^1pTPk&ApN;R79X9{}KgQ@d-FvU0H$rso!5nYVY#Ey#2A&izGpX3oQ( zE6?F3wI+_deVwYj`C7N%5eVRa%OZTaQ&xWo)m!AYG)OIZkPE zeelpyoq`14Jd_a+cHvP9dMFJo$h{snp}}o+7YjpP9(bmU%7c&ev3=l~As`PtdkC2! z7O_mSp^Cbt=Gj|icFoLpeA+a|`7pnCkBppDtl*3Z{%KP}>UxTK{Eug^=e8=y!zDai zmC@cBn#`!#Rop*6eJCICDChUUTH=X6*1t`o-8Fhkj8IaNYiLq%=i=-sPQ{BQ#IRET zN`P7OgcNu_Icurg^k1sMlhR32uc=!_Zrn+6YTy*ie8X$2 z+##0)ID6s3ac|sT8$;rH=^Prj&+&VAazmb)K17ANOCgp8SBdw1;MPlO-gMb}{4aXM zGR^yVwaCNH7IxvVOQU-%srk8i4mqJ?Jun#s;2Ll7U>@rV4o$GI6j8?w|7oW>#n8dr914MdmC<0*UVlSId+&!bsqW= z?s=u(wCZSY{B->~OuNi{%&aWCqo7Nd%#V!TLctE*=hH{e-pTMzp}B_U?DQmGW@o15 zIXzg%6Bdw_m5Eg?c7dO?fSdw6^iNbdb-$nN`$ubc9(cgIhnjIJ4Z#KEbY z>;L+#JL8|Y2+H~=F2Z2`6MpT+{wFNKIRMP-cwLj8*`-THUPew@23|eoYZ-V#vX+*0Cc>P*)!!S0Dc(Ywy{l6#wGBGjn zfBLuzzJJmpo_;1V@rgVC%p-l;?uj}6?_WMbcPst43ci2RA|93F4{g7TR)kZB1#HmRAO&{p)Kl|xw@S_!xQ;?0rbZJgVKY3@pEDJnQ-y9^TFExBf8@g@ji1#Qk>xMWS5vQM86yu7|bg!`iNgwcUQw z_wlax@oqoq`vlkf1o|-9^)Q(}bo)hrHg!=peU`y%QXKSW@LXkZTs|kA0qtn4t(f~( zSodQf*hxtbf9_N-556YjNJjS`@7y*T9(+e<%s=q^9nQ7 zpqnWOGlgmz0R~;$w=r46)3#6M#uhtsBncOtdOc{1TeByW{e7#w`|b6S+5vb;JWM0-)i#N zYVvmiMvk|?!04^NyQj~Nj_;?*W^S_4tQCk|fty7D)OfyTk9WiU3cVC&h0(<|qOeBv z*9c(b#E2E_j|MNIm1!MJUk~+Gn9&B|Z@lmu<{1HuTwQFKqgT4Vepyo5w9==%xj}@r zg4Z^|s%vp-Gec+5W5eidmlr~ioreeV$Ko^YqhG4us?u9j<4eS}MFfZwXQD_nh zO|la(a)1|8px60r{WIZtMQvg@?p@aed0u(m0@EX??T0T~wUe*ytd?r<=tMY z%WaZ0F^#{ zA+14q#@S|0UThMDO`^9(03+88XYzGk48DGPeUGcvTUfZh^KnUcCE>2*>jY3zYJ-nf zz8ciJmB97Xxw^pQv%nPW1dLqA-qV=O<{2~3H;*(wuQ2cER69grhv?-5w7&D}Duylo za%pRwsk$(HYhu4O@lF60wj2G&wiEjnv=O+>*=(%#4eR|4YjpykVKXMavtsw`mlS4_ z!K*QnFa}Qs0`$r7{92;2Hu#S1RQ73mg&ASYtraR-f#((hjBN91{{G9D58Z#;yR7ra z)7l$VMr%V^@1eL#0-(x???=~K^6r`Tpi7q^b_rG=1OU;xgX?>C=-TZSrylB$*#4M? z0H6sQ9$V2V$WMoHL++fD%0@LwEw&fN0YU`$3V)Q`OIBi0@S=-QSsv~8oz zl$PdJB^?B=)F^F)>^(vb&;m(8z9h`YY$brQ^-jTnUZ0PR&IC1jofocSMi8J+ z|ECQ#+Hu~5h_HRJ+1|_y_8VN~XgOlE9P0#7<>j?=etG}wq--B01BX%+poB(JV zFW)mL@Z`82VCB|I!dl!c0%)^(F8+kw9KR&rIe$)a!b#3cBY^5IIV1T+en(t^nVVoR zYawD6VvZ63H9GFbyr~XOE5OXsTRu{b8Y#y+0no$+9W99ubZFjOKSOHv3SN7Kr!)d| zsp&^_&FeoMc(!`M5Y3nvHMIio0;}-{$|=iVRrLJTS3c3%q>s!+A?l(~+X;Z^r!aX> zeRFPK@O%Cgs{bj3Y6Jk$-=Xc!G^wukQ<(8aiw5(;U_34a=;PA*2V+LJ{(CYy&}Sv4 zBTmRMUO0y72r$$)q1()U>%X=%y}v)#-x$Dga_~4gN+SR&O+TLTdPYJ(Ayj%@6t0U{ z7!1J3e!?@$j7qtotta!}92lvadwry@A@&;fK?s1tZoT{MZ#z1y7^g5(j2;XWgn`(w z5I_yfu$33Objkf~l5P-nmMs+7g(7kSDC>($_MmFbeJ6V}Wvs55PfJOsrB+S=MBU4} zY`E}p(=WZbfkuU!1+UH6(IP+}#DQcGCk7R!Pn6!7;#5laOy2iQei{K#R{zd-Q?GXm zoN5eol-Ad~uhsYi?^j4y(z_k;D$+Tiw|a@lF2SuP0Ep(VNy?}fT5f)a zqV^XWCp9a6r$pzIF6?9E#$)7`P5?y5M^2v8Zqi3{bv>lFeU`}1!p;l*0;Q ziu*?3$_!?n6nst!0U7~}92fSYp+|q;dbhS&Sb)i}af;DOSnm>SDF}d~_P+Vv=$bzl zerwRw(iXGci!luWKr_4Ah0@uh<}bEzg?jIdf3z!-a7B`VjQ}WYU(n$d9|y**QJ7JNN!_9fTd;{BKsOPM zJHL)i#GbWv+V4&t`@Qa^EXGV};)!~h1 zZlzIDf06Ak`f3CKQS_8iH@Bm^8}*UFB1J}KqAX05T_e-@mBT|%T)bB9oKS_xT8Kh5 z0-%`T(wU$4u9&dJ%uOTCsc&Ll zI^HeJt`l$=lg%{7Z@(z)$KD(PhIi#Kyt%#?S{*yoVk?Zy1{H0<&JF>L9Aa+vUVB{H zfWgletp4vO+XZf^QQC3I`?wUK5umFLlOgE`npMndV6#?$*1j$H+{P1v0O&w`<5$P| z4l(ZpKWwlh493=t0DZy8K?Nx=nxJm-_Dw8wbz+`X4Zd*Be-}rODhZD$j0`q|YsIt-9 z1?Lu+O3!(7LyRhS30}MKLVy5$fQFFiD#S(9d!eM?1?c7s70tloO#maSN{f_Nah+!W z+`Oc#FI>m|fIc%$NKq%Gcqf1=TbFnBN$n zaaqGyWfl&46QGyYirD*GLi&d(Svnn=N|RJH2{VHLMh^6D`auU= zT%(t*FHM@*`7SI7)~dosL! zf4@+>C~%;n6@(SkB$}UL6s?zUFO_0_!}_|t`^@(Z@tbVWO*VqIZ8&Ee&V@s76&(Ap z9O7)QxCmZP_@3lc7#amnHp`!!4Tc7{*YxyIQxlLf1&58i3QZQky`1qy+Fs&A0#_C1 zLf0KP_eX)SD8}U(mXf|FaXNQAcr=QHV4k9lK>=e>7{zgTX&myR^y3jb9?7tTRPd@X zXgrFb_*CRQ75Ra?sc6N>s~A}*J{@^aM}A6bg1p(H0=<0u&0X zFhyI0ycQt~#TO&%ViXFI0!3Sntjkd-L}3+eCGuK{>vu+F6>T-Lu128{m{f2q(y|8G zD83$9*P~EaM`KftEE|xG;#-h)3krpqqi8#kbtei1pHR^bAn5=ygYi|gKalhXGJ_FP zu-&PC0tHk2JhGfeHVAzw+C}7b5m_jH8CfnP8$@Ik?JDxRiYyfW3t9d`Hdrkw+I8f0 z9a$(okdGS3$Get#+8|yY#QRcwFmD~qhf;h9FAd?%6fflELU;OMygbYuAHzqD;p1H< zLmSJ>V|ibSkK?W5_)v{GV;N=S5m*P8kd51gxD=+-YS98Vjap>Oq8y`yX{k*)N_oes|KI#Y`?^<$e zM|t@u?@RGxy!99#O7Y{obeuO+`~)wbaHl`X%O~CO>wLgd)!dwoKwp5Up3ceIC7Xr%# zI|PUoymVJL3pHR}ui!lsb(>HFHdOGQfKa_c2!=qhf?dMuyM$oy7Zn`8@!Kl|L2yUW zPKhC>#3m+TX>c3G9q4;*yx?K%* zZOCXlRR0}n2;iW%b$`RyNCQKZkaQyVlNASL?EL)BdHv3LgT+PK9aHcfQwR{kRvQlO zk?l2VO8d!DKREyb@?+Z$E>5~N$IGKT1#{KJIrrh9M5G<$!w&LxAVAt_zQ$=j946-* zjqQooCVZtRSgH{_3;9zoVgX_oxZ{fvyVxCHj@aey_-e$icE{HvcD*~k1+iP)@tug> z>5lJ1rhO=Y)_)9{j=AGgMRuy_*1nk{JCowW?))A9!b?4Ts@(f-{Po34XRbA@=F$6x z`H6Ra$R;O@fuen{27a$bx)vSUIyGjUS|9Kh;voC?Ppx>$quhW-!IDR|N1+C0+?lLa z*+VU?m$r|S_i-*?6l^k5jygs)jJ3e&{`y}MKZ7jY12e;nkd6w?X#Cg&KvDFS|_Z0wFv$P z-m4{h(I8DoTf_UU;j6m{wCSSPbkQ4XK-yfck9=&AD~~(Xa^r|OkzR_{Hlb~O5PC)HYUvt4*Qgszfg4ON0avth zrt0TRDy7~fJhMw^;_e$X*efJa-(aE|H&LxiZSQ2Y_GC4Y;?vc*>1thSdrQ>XC2Atz zuqMPajieaBKr~zZzOBpQvC&uxD-Q%zocN>e{_OU#kIkPYALnMBUN$AxV+|m-SUgGo z0t60x2Iet-9Xr+XI8(lTbGdcug&%5Fxg6hE_Cfx#--~N|?8AWa`a;>;Qe2g{0FpN_ zb4bF5OLCkE8(8C!Bn_(ZuArkl3dnc`Wck(XMd;*SKI%Gm5rF^w}a>AmO9zvxH;zpuDH6ys5A%!U98b zWuQf?0-8-};y72|<8U4L`I9Z5U7y#$<8a-5y=~654_0_4to_4>+j^=ap5Ybk5@)`| z1yQaHH3>sazM!TQty~n!MPJ|&UP_5Vh3M-_ThV?I&A*62u+#GA{GuU~%D!mmQ8FMl zf@cd!4RTE*?VMykCq;sv2|eLFR^m#ytKiq4X>U(@0k#ij{+d!h*muW*@vJA z*rvj9Jyd-t3ZVEfQZF(s%r#kV5MR^(6PR=bd87xJfZtKU%2Zzz<;tq!8<2T=gU zkD{QXD3r#nE~1EwC>q8>k4r^dMbV(BbXP6nI*JBYP0?;4_7*~vUnix&lTr`_{S~~& z8aPT0f(=+jn{KN&-PQnnLRha0Ud|*gmSL zY>%bpEz`(%rW|aJxxPw}R|zfygw>Kzqg-eN21$M!bQ+%5czRex45JD=1`tnI%50O)=^?j&827PMRR*-eeZm}kS4~nNp;LOuJ@z7shdy`(UB1x#?xxlrtA?aWJklg# z5*7-ML40}B%ZuAo`GB1WYS*z(v%N1=dBKp|iT4~yJ|~O|(#ACCO^7uVtZU-<(}vGfTFH_6Y|?X_WXfZB=(|65-Kd2Aq5o= zAjvz00fgNo`~}H11+xX)YWM|7FohS8V2WRmq*7quzP2c|=P&PcsPZ9$9SXcGC;6#R zBht$GuyWoG1P^W-xB0Vwk1PK-tpifDA;>fY`MUcgrV+@O`XF<7?>W2*1!Eg71l$s$ zAWH?(VDXG1sjrl9j9g=k91odd`AZ9bT{En#16~TOFxgj_q9H+jU%f_a>Yj{z)uS}^ z;6D00+I!}!k3IG!UglG~-eWs@lrGpn;yGu6E_4QI%lNQmyd4N0H()cBZxt6>U3(q3 zpz_5zm~kvZB=;A@6!w;}??bYFp=pYCnDal(g~P%{(N1&zr@3$lwCS6<@)%^L1G-N1 zUnhn`NLPeV{d!5MXy3xW;O?XW2lEEfeEr1&a0`y%wR5Dn=VID0^d`csI9>|RCdCwli2 z{UFIs!9f>Gk!XV`4BlrDEwe-$1P}4twJ~FWZuG{bx4*XSN>2kFvo>*%}nT$Od1e zxR>*60UecPe84h37|a1)PVfQcd@xvB1@8d{9OQ#x4^Yu=N?|vpNYJt0jTgRs{qB}* zk5lSW+t*TOTK8t-u7ygWuC2PaeacRxHQJR^eC4S;oX-Cj>+=^I03{&p7VC41wNiYY$!DF(?fpiR&qkB$ zJs3J1u_MPe;6p_lZK^riRGZ@WFE0X$ZuDx^5*2vt?3J0%eYGw$Rwt}ne?dYL<_b9) z0s;ep2)uS8$3j3v^^ixkQL>eWJVwjaM$1-^X>7gagfVhM@S^O|8;X~A=%qKM^7#z= z4VWwBa0%tY6g6;)8sbWU){4}aA~haxIC+9aPCs=5-f*v+^mV^49;a2g$hDdiAH8^E z&)yz;^o%wEC!Tk&eT6zsomf7TmqO@yb>aZWuOFvqcL)S`6*c6 zN9?W0+t6k}UyqUjsZ@CDkDRQ5;XvBwe2vffa2J7gQLJ-OOn}@FZ281Gcf|zA{eUzA z+%$6Zh8A>xo*+mZNfNWOGJ8`@7jJF1u^yo;F%|dgUAG2PK zTd&ro`5PP6+8fnGz|XJ!UCOeG=mzliEOo6but1kt-R+s`|DKMcy zjHzU1$RJL6Kqn~L{W^eq@8}yPoqrhWv2(yS%r0`ch_dT`z7F0I5%~OP&lFaRAhTO|dok^&)N9BDsD{y#`o@E(x1Neb8`1w!Bi z;k_H-oFqcDw9SMQ)85_n*7(PklP{+IG^BZnX@WpJW9Q^voC7ucA zy%@7@;nBZz!peoH*|^%#LB|uPSNX`CTNBEsesFHO#}^0NlkcRr-+SxsC!5oi-5S76rMb5>7^liQE(U#uilK4zaaa1*h{~r2b!ygz4YVj6elMl-SN=dLJS0^@n*Sb zohsUC7;L6!ohjOZ;rLLAXjvczgJRdiVqS~H>J(orS{94JFunCKnOCV;o#LxSakc16 zBQa~l;5A}2#n+1RTG5Z<@XxT3YQ~aPP9TY7TKPj3|iZ)O_IBqOjPm6YnUl8RB zq94Wo63u^!Ht?u%+*p)uh!%?95#>9gAH@es=7ExpCZP|Otb-*x#fMAsaLJG2Vxk&P(_$txv4im#QdYb87QE_g{IN$VsF#WzX;8>JfH%ix%h zB$rEm6hAFlPfK?27xayO-+NLJEG6}ozIBXj2VI2cpDnS(mINF5xICL&Zu6t~CR@-Z zTNK4N+rl>6Vky4EChu^k-)U2K+9K%t-L}x(wiv+SfIYShz5UFDy{MsKnM!=nOt=MMsUlFuS5T{ zq-U8&GYWY`*p`ud5Wwr$S(bie*odTM*iY%+sCzOnbB;P_QHr&6S(SGM?p?rnALOnD zYE+6jshA6c!{v&0g?s7>7fsXGDooZ2Q#>>rD^V1%AJw55P{&cgaa4z9K>a2@^_v(C zN_ED<^}b84)>(-=x>68V3gKWaJNYl``DZb++M_=JS3yW#&g&m&Q>LN@Q&AIe?es&H z^@~vw#iyeN(@_(e>{Wv5m!KqypOOMkNuhA{1CEZ$furS68flzit2e{e2;>Y_7kDtq z6%()%Is3ya)_y6^tnoPQ!SZ8)BDYUKu0-MT0Tq|GMy&NHP$@AvlV+U?Tj!B$?Y8{= z&b*_xAF5oE2JCe_y}0P;dI4!ixTlVAX4qy$+6}Jy4fpd4H#z^CoE0PqX(LS12$Kw< zFNDvyCYPXRVK|Vs#a3sFEdkgK!-APbF5`gtANKZ`>!%|B*dXXzNys&X9pQ(2wEvvYVaIu}-n>MFVs4Ev9`1>~j=@T}m95B!4M?g34M9Y+gZ z$_hSrgb?t(aHf}W!v~arZKas7&VAQvi)h~>CQ{#Lw-~ltOrXBZA<=$FOoVBLw?xID zi(+l+i`*51?uxakukpDQ^tn`<`V!+L|8Y_j^&Q4ZiQ}Z^6fc(ii=`;)I}}TGi=`G6 zFO#fgQZ)4q%A~qwQVWXTl)P_BL9m*_xxhBt7F#VCOq_3MQ}<9?>{>p^8oAH}RO=0S z)+Wo|UFBF`l$q>hrU;0PLOO=bJ#cngk3gII%T{n35I)Q2GgO*hFsDD8V`0P@C$M=3uqt^3%pz-SFuo$J|y}a zqCW0V$?rC=bGXS?k8Ob7gu0d^h1#`-VqaCPW?H zIsME09aYX;zi~C~ul!lK!y|J+li-jHxl;#thWBfvI-g4kK=5F0+yQoOQKP$sJ3ZF0 zc5~C{w3koq{QumtnCC^#8?N2)+#)a>csR)YKrj*E9tQk^+zA9PE>=AKm-!{{eUbR) z4!lTuri<@$aW z8#;@Ph2@F@7gW05JMa5);iEXqC@uu@r}P~9kf|t!x=qC>xER%>_;eI99mRlF((k4S zEA5BvU zHt<0k_-L9+u$5Q0@{#mzft|c%C%yj#d#HTSemmQI|%cjS#0M?4btJNwp-U+o8uJod)N zq1Ep-d~a^q@yGsfM)ouE%Y9S-ct!&&>?kcRf=ec=8aV-xzM&ydBUm9;Wfc}?@n$BvIhlE-6}stp zrTR$vl7Obe_{sTsX_@IjyBLZqbCWbwWY{X#%7Z!QGU2OA;Jtd4>OgbDo5-`;-s?35bpLSgXsy5>=6M_i?gDDZj iE-p$gRt7PEp$!8}OZ^raS9^%AVq#`wV1|h@FaQ96)@xz_ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clocale.5FF46E6760ACF029.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clocale.5FF46E6760ACF029.idx new file mode 100644 index 0000000000000000000000000000000000000000..bd7d4711395f5c19f7f7bb235607d7eb259f2218 GIT binary patch literal 548 zcmWIYbaRtoVqkDi@vO*AElFfyU|i zi;MI#^OAE)Q&RPlRgIj0NZ-&!Gv!ru6WWR|1lY;8st!zFwB`i)gb4=gkg>Y3L~4HH#b~u=Iy2zKtqsK16`Vv k2y#|&QF5^|h`}_Si!bk}3CDUS7G?%e>_Y)FjKRPF0RG^a{r~^~ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clock_t.h.65AFE5BA7329BCD4.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clock_t.h.65AFE5BA7329BCD4.idx new file mode 100644 index 0000000000000000000000000000000000000000..910904e409abc0f36a10fd288cc656affa6dca67 GIT binary patch literal 320 zcmWIYbaS&{WMFVk@vO*AElFfyU|MX9zO;Q9pZo$-r`?u8uS8_8jGcd5S39(6n2?kCE z1||juMn+bKqSUlvJ)la5uKo3)pE%7KxmX!F7$qS-Ll^)Q2I+lfOS=8{i6SxkGC_jFaQ9eJX4$i literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clockid_t.h.5545878511E5BAF1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clockid_t.h.5545878511E5BAF1.idx new file mode 100644 index 0000000000000000000000000000000000000000..ece3836d6553815486f21a8c4a7ac847494522fe GIT binary patch literal 340 zcmWIYbaV4zWMFVk@vO*AElFfyU|m$D6Y&+QUp5qeayEQLBXn} z+zd<%3@mISY_ed2fs=s&=u<`(R)(U~v|>G=O8x5+nk#<1>Sg3&VdP+xhWHj?08kjD k8zx+onv)1(7Z)WLi-Q= zqy0od5OTo3sOZSx5n17f`kxX-`d9RB6X6*%uq5}pjAxPlUfyjZJeB`+TJ@;p-7dnj z-~a9r92V_aDxz2K@PBaAw7{5%{~-Nu%0DCt2@mV;*)6=ce@Ngz7F*K;`Fbh?GwYdo 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/concept_check.h.A4C7BDCF159AD4DF.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/concept_check.h.A4C7BDCF159AD4DF.idx new file mode 100644 index 0000000000000000000000000000000000000000..4e22aa020d4588aa5bf7b3958221980e8ecef86b GIT binary patch literal 376 zcmWIYbaN|UWMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl*SyHT@oS&DRT2K<7oRONGt(U=oO;3e|S-hEvZcb)iX@zcjUMZ#_ z5JQ1xrDdiA4Joe7O#-=~C^fBkA&_ok&-h}o=L<6<7o$FhzB1TxKw|BwcJ|}7k6nSn zavX9JFyV=jx27L+I2QpFHsml=gb6za-cbs=8PUba!>FsJYY7wfQ~NP@f2iIt3ju{emq1R@}S Rkw4`1%AajNH!(6X003bxS|tDg literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/concurrence.h.08E9E50104EBC4C9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/concurrence.h.08E9E50104EBC4C9.idx new file mode 100644 index 0000000000000000000000000000000000000000..68868504ea95f9bfb68b90ca25d042d7ca3683e7 GIT binary patch literal 1270 zcma)+OGq106o%(qkFPQaeIPWAkCuuA(W#QC1jN#UAuGXBv|ThLExdu`Oy`)P-i1wTl)Cf^By$+Fh|-*`l@f2ASL|UFc;7&Ufa&=RfxhGXws< zzFicA+r$3ExMBurC|snsVd@b#(4e@~NL2Akl4KdW6w&0UHLOT-Q^zfON$u@YC}J9t z9FGUg$+!|Q^&sW8@R@e0mL{7@LRRAD={t^fk(hQ`X(eGwa!ivgT~{<&IZI_zI=%Ts zcW0o}-5QN(R-$!8v;LdGh#A(YnK3yYDvnK8RKr^)2oI)zj9#1ecYug4!PQuNR9x>0 zi$?>yNe_x>Ijpwhq#%emadpDOC<)Fa++dsrXPWWR^R1ny%PqQh&6I}+^U#_)G zRnOBd_QA0at+rmo186va4#p|sOc9B3hBz~fXCMFdHyYV_+RX+LHb}iK{JiN{a!EbQ z)FB6s9CX_cL|lcIRq!*;gEJ3a#szQ|7(cv!_t&4U*K5?FtEQ_obyfWm9e?%a13lQu zdW+Tf*4OK^AE|M#)XUlW+I^f!zq`MOSq@5rCFRia&?EO--%lc9xH5d1iT0p!4@zA7 z?aATMv+CdHMf6m8E-;yeRt=*hU=lb^1EzVN0i5A^4sed=9MJi3`}2T#o(q5lo;LwE zdENrt;&~tF8|Uh!2&M?f8G;#}vjnp|FA!Ydd4=E#V_k^`i)S}<+3*zu3{<>0T)uf{ brM#?yK)FD_E_+qjfglhT+P^TGDQDS#uHWv1 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cookie_io_functions_t.h.5A08066DC7F05542.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cookie_io_functions_t.h.5A08066DC7F05542.idx new file mode 100644 index 0000000000000000000000000000000000000000..1dd57995a2643c6b6ecbfab8aec1d0956f078b8a GIT binary patch literal 1716 zcmb7E&x;&I6t0~lCiWD98}Y{m;o(NIo1IKY2w}4uK{A<@A-Jov8$)twdb(?7D%(>v zR#m$@9{ndgc@XjDK|J{fc#sI510EzO2p;yJARavAz3QonV-~@IDY{;L@5lGOSJmxo zZGHI+W39Y%I1(;B$rw9}f9s6=fj0DO71|1D?d;s@w3`6z9sOb0Ua-)Yg@CcP(n+nr zX}I|A&Mx#OPT-l*BXC0z^~69bCDj0QpA41PitNK3kQR2^?OVxidvCQ7(P35^Bb0j* zbspHd-9?}_K9ErPf5dEW-&}1*yTVmfVRaN=iG%sFn^9M|(kKfb38MkavSpSDYx`x< z0HswhEA2>uu1Is(zHxW2J;$_?2&BS1DfG&IUl=5Tdy$hey$Rg7y%myyDn~s8pdyu8 z2BT8+JuDF$P-a+?fCK4$H&>wAR*Ol&V32MN>p;(W(QC*~!6N;r~mHieZ#S`>3mQK<@S8|j78 zA@@{)Fh(29QMLFf)ekVU6AA&HK26`eUjvMv47iM;a>%tOK|TTv6E{RDysK{!-GykF zT4X5{=&?}9l+;Vd_?^Q_l8lIOl1vR&xYY)^D!|VtF{ZsG#&`(-9&#$hJ7GO^?(5m4 zxkZT^aKE%Jn$}na4L53fS!p6k5;kpOMmKym8Ho$_`EdzWn$u&zR*3y$%)X9)+Np+( zIF3teVyUvC%td^-el@vzD3Xkr{Y8TG!v2W{(* z=l}Zqw;x}uvu7FO4c>UoFSM&Mw!lxF{Hp)c()Q1<)>(vr<;CSyzYyS*2YmP3!#_X! z{*kP+GYD8(Tw3u90Zw>8{=w1N*FT9qt+UezxL&*dl3xgb&nl*P|IvfD?tXK0RA>17 z@|efVej&hu2QVZ0_E)U-%A4Ot4=49tsBwPo;`V%2qI3w%=xw2wO7LK!J7P~_>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl*SyHT@Tu=~SQdy81Us99^z)# z48+*v{JgZxbf6){mAOeEHx#9&74KkVULi^EJg_a92U(v2=#GI@3WMeJdGH6 z7~L4$6ky7}?%eLav3_O*BMakaX06Z6+A#YyEA3TOS88Sf)w}SyD8ke$UpZHF*uAL^ zL%n&&x3B*z*%~n!iKhF&Ii7@sNnQRw2N1ML_l zH1EBme*a literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cpu-set.h.B40F3E2869BE4FF9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cpu-set.h.B40F3E2869BE4FF9.idx new file mode 100644 index 0000000000000000000000000000000000000000..f74f1061d0cda2ef0c69a55f0eb1f1115c706573 GIT binary patch literal 892 zcmWIYbaN|VW?*nm@vO*AElFfyU|}QD_#baI+-DA`|GImUe*V2LcX6&ZP;~)Efe=i1|H_m5-d<=h0@|d*q9X_s=3x$E34-%lob z+185G1BHtiig;nd(JT8(mWyj|0@@_QAp`d+&?XfPJ(!{&eR{=K6AvE%+N8{(4EHM2 z%#8~JI9(3`g+(|-;9jlPG0Nb&n|&B4oWzj?H_|EN^0d8t7UzM&!JNTjFthtCcfD(~ zbG`@^cHnS;$4pAb?t&LioAh)2fplo-y+< zm$H`fz|01QfJvD(f>*9zZU*DQ5+e&2BoRWzfr-ep#15tiXaIW|JXUy^%Vo>eU~)yN aIf)>4aZz$HIOQ;JPc08|o>`>CzyJV~;#rZKT9U{DWD5gvaY<382apDXw9K4TD}8YrxhVwB^MlL1=;kka+>qCg9~tB{H(1!TI1^)&=twsHB>EC z9KepL+`HgGqc*A6*N3jPQ3SdTRec`a-Kb-0f>weoY0+Mk>e>9`VVoE$f{7-Tb zSo`$dRmA3v98{!4BpK5%&+2PRSg)3P^>j>)$BiW#q-39_p(?CPYEp`>TNh0w<7)SY z#0K)T5KlEoUSeD+`@wb8S6RQm9`8}Vvp%bjtD54IWjT@RQRGNpMpu%FNII=(n%u0* zt*Mlj!9_5wMD$cz*3>SgUx~`E>d~Agszs9BhF&&THCtpg8P)n?ifm?ULxQjveVMdn zjIOTTfxmK1jhsvC6KVZhHitKFTCb_ezW(*y$v)Y(uS?Z446_W8o=ATNKm#?;2OTXW?C2Cd|M%%h=7=!K%lI2L62FEm#Ou(Ci280>N&k5pOB#@G&=;?MK)c*EQP34rVLeeA%lSncJaV}m!iVafBOB+9` z8-1`cj}#-Rv7oUi`yoz3Rucj=@9Q6akN)L;R7J@OBus!XfnH2OocXxT@RIyuf9GxA zpIazdhNL0K5Y2vw)9D~C<5uc-jq%TluJ0@tJeB4w66^Bo+(wus*)W@$PhVg7Voar^ z96ii}FpFVK!Ef|o)z%fRY4Q#w&mn0HgfS$Uf}f>>_!Z&soheG5MbZd3MlgY<;OF^X z{^Wk}N6#!JWk@;&!YTA*3hwEFx8<9+g14?yA|YuGggGRcf}iQ`wL3j+sg8$~c#(7i z95H0+dG1sdARBDK8}u*94X}}ToSgSp(R5l zR$Ge0g~P=hjlhx-D6twv9EHMBDCYP$(Bt5;x(!>5j?KrYD(ChSKu_51CxM;>m(^p~ zSoG9BF(A`)wF`@1niS7<;h$xAm@d~)FfXME`YJhh#Cnh7Zd5JkNhb1%Me;*MeOeP)8tTGm*#>f0| Uvjrhy@6Ua|Bnm(93Z-uH4~i3FBme*a literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstdint.47B9166DA94B05BD.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstdint.47B9166DA94B05BD.idx new file mode 100644 index 0000000000000000000000000000000000000000..a8e430fca8055a2ac86564850cf6196f028a4125 GIT binary patch literal 2936 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstdlib.126A0D14F38BA60B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstdlib.126A0D14F38BA60B.idx new file mode 100644 index 0000000000000000000000000000000000000000..dea61b7daa42c338a4bb4ed40ac96a95009ce9d0 GIT binary patch literal 4716 zcmai23se->8J;@VSWz2aRV*Y%g;p%Dg!EtT{<|}_J)NUFd*}Q9*WEkc z|LfwYh=@d2j+>Jhm7!Cc;~hATQ@~%7*{Jd2;fv*(;Ilp?Ol#05dulcYc>1glWsB5} ze%u81IKXq@p6bU4&{bIEG6TECXlLT;R;$bk>2RLh>QN7m|fta@F7 zR;}lB2_~~4U1fqVmOHn`WZ7=f?i%CuiJVc*Y)k_y$UiL1^4ppXiR_ldZd&Wj`c!LO zr`hiCCDUY9>o|yLHb89nV!6Xf$Z2RKtaXrcLwz|#J>lz#qxHr)@q`nG04ZgTI=x7D<4u8gMn5|V-AP>RelnZM zPp4vZLj;~8C7;lIai|lq+3yUGjdcQnnGgjf}7dx^uUvKVip0FM$t6%27g( zioJLp%??eUUg0h99!O~?%64(OeTLpD)6#-z0zVQdC4`oUi{6q{9n<8T_O8JDA*Gur zyU8efF6-(V{uw!FUAVvpA*Gindx?jg;*j!jM8+#qguuUvlrEy|B7&Wg>GJv2p0LZ2 z0xuxtL;9iU7kb}q?z!i6zg;Bof$i?^X)D3@JMZ-65vTJJ~XF@8qeg1>OfK2MIkWrgT5d zoE1GHV3)wZjg(`A9wV;ybi0Q3$its%3I%=`QVIzz6nkmS{qb2!b~;c-A>}1ez7%iV zSHG`_(;W^i5qM9eloDDh4iqt@_WD0eugV18A1QrA*(W{Ke)L(`VDF1H0uQhKz@^wl=q@tE9_Z1^>Up^x zBkKj;1u2{8Cedlpedq7+u=t150w02e8bWKtnUEaQs%yp-7X@C9lmbEv#PwW{U9tR> zpZSu&J0c~U&}{L`daGk*^j~TwUKaSbkg|u+J>o#Wx;8rKQQ6bm0zVch<%E_KH+wyg zzqor<8#L&Vz>h=9Awmy{bE(Yld*Bgx7ARwovX9Vx;`85qe6j4V`cap_Pe95MLXU`Z z2{@F#x8#lX9)b5p$^k+Th`m4$NHV=kIWFdLd2V~_4UWhatfY(`e|zCy=AMnxO`NQf zjQ|QZp;nnj07V)sm^dSl8I`B>K6hNs%M}x46W!U*&2d!WFY~vpP`|;N={8!UY6HO3 z8Uf$<+cYeI4g@hbbM^HlXOoKkU5b1YEkv03e@-dRzhkmUw$gC|CiD=rc4 z60xm)`H24fU4HL?JrfAD4{dA9YN}6}27q)Yu@OOztO21#P(qL6hTV13AmSB5ufSoq zUh>z9!9E2ZSbstf*qs1iT?v6Xk;b`sk_V%O4x;@MC;)vsp3dyqBL2lRkl z4P3Ksh5+_504zNWALl(;5xu$Zy=aK|gwQ9T(6(Zvsm+Zj&Nk`%u%lRlDK_Ith&W<3({_O9WYE!1$(B1XrJa& z_wDv({VD)hTSh?J;`j6C%f{&dXeR#6BnVw&&xagYuSbjS==%G9TQ6jSg%l{#~ml2y_f|!wBA+8mF$Cyruviv)*fqV4Wo(v@}_qAOK*K z16ttR0Dx3Ka9RL>O$lhxxo38&YJzJiZ0N%A3&Sxdxgv{<&my+x>tT=YZ0-u=E5J3IABVZwIOE~L*1)Fg&_~FjsyOi_#D#1efI^gI77SeQa-~m9|dT`9)onCu;ofMr! z*-6|n=JwvUn2?UOb+BcrvQ$s3O0Fm)vNB>@<4gpBEVB?=mq#8qoLIEF9x|5ptGhXW zzkQ*_@dN+lcvTZ5^O(@b;&v-l@|b!G!Vs!-=j&QyOi=~Wv< zkZPjK(U(E9_ccC)x^R~0Mf0R>0O*28(P&5{-vD;rbunPC4G}o mWeTx;u}LAvDJ^Su+4>~>KaytVH$Ud4oeObPy16Qq+`j=&kx(Q6 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstring.DBEE10CA3A7F86F4.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstring.DBEE10CA3A7F86F4.idx new file mode 100644 index 0000000000000000000000000000000000000000..df3b10d524f8b5d2119650ae22670e14729047da GIT binary patch literal 2408 zcmZveeN5F=7{`AcAm9KBs9ZQWCdS1O=?0hvu^>s_-!E_S4woNr;l9AV7rmFQ8mNEx zf^00Mlu2T-!B|_VETxr8t(f>y3rEEYl2pJXTDoH8dd`I>&zg6@x#xR7=X+j$-{)|1 zQxX#^-6ScYCdI0kEmcmEB&~s8v&E!MaDX@b6|3Q0L)|MHAX|Nwhm16 zvR+efvN!rBd(&j&jo!Fh=B-(_z#eL1V)#xpRlH;319$@icw^M*>@5uBU2~Ixx3bA( zv|~Ei-Z!iaHmnRYXqNe=YEvWU(RF1wC|tD|?H^ieO?o&>o4)!Mk)$6dhKAiXPZLI- zq00wLGH8aE1ji3A2M6c)rH%70c_j))7y_lVQ~<6&)PHL|ddZ)WbqEyGV(%voem{Ka zt7%FMWW)!7LRu&|gqD_@_`E&xi*C z<+NOwBFenL4jR218SzG-fEM^XIfs7=BS!pfnR^&G zAMnM}*q$?tI3tiw(*@w@K4sk8*x^w|RwIx{^8`SD|MJu+)!bD^{17OiB?7Q%rtMPF z(av#30uU&pWx^uw`1Oa*-cFceWGw=_=q>?J9bfg~F@OCuBMJm6X{7*|0S}>UKEuuVZ`#oat)LA9SJcTG@9e@eXKg#=WZ?dW5 zuc(0L$AEHq`$EIU_LNAFQ>D}m_JW2#J1_q=H)HuY7G$0cq_Kp+Tij0XIp?4UIe#Pr zElxSTB|Y%(vG!b$c>>X-^S9s@XSI(SWL{n9_kvBfE@oZ-R*!pXQo6cA@wPmw9<0 zop9#+i<0~7A&|wKbRBt|vcY_;7i61c3&aKDg#c5Ej{&a%ki|!g#SgN0urEjFKhjO_5l1v-DHqLBd?a{BVJkY;oQ4U+?SG`}3Wz z`FswRVr`Tj8Sgt6(#B)8q;CKPS0>p=c*AB?ydD5?by?7$#(lsy< zmm5^wSz0+*bOU5D9(Xl@3BQu?p;TX6=;;_;{0?YQ#(N5Av3T)z0$DuIhwGQJHz&>f z^1toq%{>Q7c6ZEz%>VJ?l=Aj(`n(i77eN-oG}L;0?crAwAA>AbsY%vV@gq0GR|X}2 d!@n}EyvSSo3(`J%6noyu$OTN zPRVF680r+aL9P{@b#}=hCe6=*pJCoSgP)!VqF>Lgn(%vXdRkf9f>ftmTjx!!tgT}W zD`by?@8a58hg=CJl`eHJuuq#)ow;h%hvKmtjkGxbUR8|_PzHS{>m>32q^wc`)dgp< z!Bz1D&LaJjJi6a|AwnS0QT~I`=I}W>E?j-lXhJLlv5CPoCP5%N1Pb_q*Z`mxPPQ?lrbtmvr9Iee75HH zLAeBIdge%DZh)qFK^fBmGV9&dcD%o@zGMTKusdm&az5Xg^=K!^H27%JdzW;SZw}oB zGV6^&18*8Iq%mF~(^#QQR$VFW-Lb3-OlYT3#;gI&w&7yi=%LrX_VYlqZ75IQ9`dt( z>?+7K4QPUS1QYg5h6gW=A31UJ4bU`wNMksGW@QrD)EP4@jsVS;^T4;YarVdE-$7=} z!2p8^TaM4y8T!0o_!rPLjkqMH8EAIjm|>7v+ATS4G&71@RA$nN{||`HxG;582d&iI O^5fcvrgtPfjQa<%3bm8~ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ctype.h.B268CEA0CECCFC59.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ctype.h.B268CEA0CECCFC59.idx new file mode 100644 index 0000000000000000000000000000000000000000..1172adc8d4ce1109425d02e0c9b3167145fc80f4 GIT binary patch literal 4532 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cwchar.A3402FA4C9A9F672.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cwchar.A3402FA4C9A9F672.idx new file mode 100644 index 0000000000000000000000000000000000000000..18487900d8367f8aae489a5eb9416aa863862885 GIT binary patch literal 7308 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 LJpOF(MiBlB3jlk; literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cxxabi_forced.h.B8AF18F1501F1585.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cxxabi_forced.h.B8AF18F1501F1585.idx new file mode 100644 index 0000000000000000000000000000000000000000..c33d6625ca9d8816ee58155cdeb28c6e3d96b6e5 GIT binary patch literal 158 zcmWIYbaR`=z`)>~;#rZKT9U{DWD5gvaY<38C6ES#w9K4TD}8}ESb29TvD|FNIO7$@egBYHipO==I4m6~=GB*k2+oII8;zK~% z#P$f+jmjtyMjj?Rc{^2bKmdss_NzQ6x(Qk{aWQFfXv)Ead6?Y9+;m{PcTyAg|K`5z z#>mB_#i6AP6ZWmIH@dWnJq{==&mpe>6Sh@)c5uq46)Tv5HmTd0!-RR59F-i65Ii?K zH$NCpCM0`R*xjV{Oq@){9L9nb-4EVr&y#58VRAKdwTCGJMo=P%U0jr040Z!EOooAh VX_=Mq=TGYbm@#QU7R5E9 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 Yp%ohw7W=#YUx++OTT#+CexFSCZ-t$+6aWAK literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/enable_special_members.h.74E7B224F8375F62.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/enable_special_members.h.74E7B224F8375F62.idx new file mode 100644 index 0000000000000000000000000000000000000000..2611f89aa99e3fe2ded8549b20a9808ef82a308a GIT binary patch literal 318 zcmWIYbaOLfWMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl*SyHT@nwOZAlNw)KkeZyCm=m9ynwykbRIHc5fK79Sg;~6riEd72 zUTKAHdR{4pX;9OX^YhX&(}9LC6j$aZf!tD*npPYKq~n_2XDKy#8Zq)Psxhc3fTTb` zv(jEgb){w&P*{aeMG+#%z%Z%rpQl3cwD~~c9ZU>6nB-s*Y+OBccB!xaFmf@7)&4n0vK6^GM+TEKht4kVgLZU221_` literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endian.h.1FC6A4D6D2846204.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endian.h.1FC6A4D6D2846204.idx new file mode 100644 index 0000000000000000000000000000000000000000..24f89baec1356c7ceda84741ac4c22a59f893fde GIT binary patch literal 826 zcmWIYbaOLeW?*nm@vO*AElFfyU|oM16AvB>A{8VEU!6v*B zC@jq>4L4itzhG>F|JDIeiegi0M#AO5*{u5fiY|h`-yG%TclI)UjVID>W z9tF4q*lznb|E!9<57cYOWe8VvQ6f0*<1gLEKw%9o4Y=^?D@^xaEe?DN6jtX_hYJ^_ w<|KlAR9uu?Yz<;C_LkVc$~2wd%EH9L%*wz75`zFxMt}lV7=wWUm{VW?06Ff!KmY&$ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endian.h.20F8E286A486EE09.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endian.h.20F8E286A486EE09.idx new file mode 100644 index 0000000000000000000000000000000000000000..3d94fa80d49b068b3fc49250c209985e208f9f27 GIT binary patch literal 376 zcmWIYbaN|UWMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`V|&t@n$BvIhlE-6}stprTR&kCB^!wc`2ERd3qTPq-x1aEiMLXV<@i7O#<0jl$ut& z9!OiXoenR)pTWV%#VE%iCjxd3khsS^rKl}&t^iP2n^Rj7CaiPB>%7s5t=>#rjItcE z;xJ(zMlBI7Wf*Vexz)3@A3X{K>Xqk^hZ}kLWvkmN{m+SvK-DZ-0x;E|T+dD|a97^| zR4vRQECv&1amtB!9^Ls5D6Gz@E)5d~x;rNk#3?RHE(Y7rnE9ON@Ex1ZZH!C|OmJlk E05DrvA^-pY literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endianness.h.F2D2CC6251A4EAFA.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endianness.h.F2D2CC6251A4EAFA.idx new file mode 100644 index 0000000000000000000000000000000000000000..5c549408d85529f558e139499d339d78a9e17aac GIT binary patch literal 206 zcmWIYbaOk#z`)>~;#rZKT9U{DWD5gvaY<384Uh(dw9K4TD}8`qv!qx*wJ5PTH9j*8|^F!xMN-sUG942&#{X1r$n72OZsY0r~r4!7H`*51m( zjwXCW|CaXKhdt=RkF0kJF=;H4MpJ#!TA`m+TUZfIc%p-7zWmpfx@f|2P4Bamnmmmd zc^EYqG!(!=1SHM`iEP_?c0&M~YX8E?-X0NAX=uXXXD8hC*?OW7P1w-tnbF$JpPgvJ ze#djGZ94^~qX|bdymAtGQ8E`zc<$AUb9ThcoX5z;D90fu4Rhe6zJHzy#na{k-R;8Q zA_o)Z(Qr~Zxoy%~G()&`ww$TUayW@5Y3 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno-base.h.23FC55A99C73A727.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno-base.h.23FC55A99C73A727.idx new file mode 100644 index 0000000000000000000000000000000000000000..fe0aa7b68d27d8f1d986c6f53840ba4c43497804 GIT binary patch literal 932 zcmX}rYe-XZ7{~FWoAcS++}xa-Ixm|}2-1Vni%>E!85MCv78yhk6qtBH_R@MZ_8d4I_Tjhhe=p9;Z5B(fh+&R+ zZ2ktW$t7kOMuWG|#C!Abxp&ogeOx}vvdsd|dK=xoW)H`@gof-|u94%tZkFTu#xvQ~ zE`iIbV}x@J)w|!~xf;QYA|-A(_@^Pp>RHu21emPJt9UvR=_C z>sN1DkPTp!qwkX>Qky3ppO*iKR+S)+y0w z9dbIP6OV}dUad(=n~-H7qjsTxr@iip{wA^-)bs-b_s(DPeENJFSqx%YnJznprt!cHY-LMOK26c)mS#%&E^AMV5k;BCGAr1MaG!G2{eD zp!LdlYvPOf)&=09xQ!eOvDEJFmX#*FpA8`cKumaz Z{}!KX_k+N@g*}Z>uGxc^PagC!%s*R{vx@)# literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.063064A523A47758.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.063064A523A47758.idx new file mode 100644 index 0000000000000000000000000000000000000000..84ce1c3e21f5da38450c238a95a7b6184938b939 GIT binary patch literal 362 zcmWIYbaP8$WMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`Z<|-r4{iF_6gqsI7dd;J7eQScOvs<PC^aV$#4avME(Qw%LlXv=mY=M+xOisu I5k^J^0FXXXx&QzG literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.10013861918E601A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.10013861918E601A.idx new file mode 100644 index 0000000000000000000000000000000000000000..eef3d49e22f3e3e1442744c2fc8e37ea280ae890 GIT binary patch literal 2478 zcma*mcTkge7zgl|{jgLZY!DDoBtqCrWs58s5eXXugqa{FfQc0q2MUT(u~)6Abs*Z> z)&s3tL{z9s9nebE17}sVV9}!Xtcvz|?d9peeeZI)``q`Q@%z0mKPn>PfHuQ~`+!!Snpla))0((wP|lV2nj1@L&h3YnBwRGKTU$P@8|GKoups8l2^%H@fq($YmP zIYODpwUGH=Va&-Ck{q_WRFp4!2MpuUc(8`qKF+A<9{=c0Wrs>wf49~~YRFT6W ze3Fu@1LK+|^o0Vl12{}n@;=oax3q+Qy2t=9LCI^j7RPF+h3X^cKo0TWfvUq(13e9p zC&OgoslASS6>T$&kW(R*T9*9Dwg08;0?RUx87gZ_1P^=X=+6u0nz*$FBS%04U4ueHQm)aoDh`Z(01# zcmvDHkW9DJG2ust?s@n5$QEEhlNe^mZKAvFl8`OIlDKhWiq?*~Zpp|cP{Mu(AD{as zqDtXnF9C8e1XIg8*RGcSv7S`q1+ajlO#eQ<>64+9fDGhWFpJWAs_wdXZAxT03$kc= z`$HeDSHiO_WMA;5^ec7lG23M?79zWV3mxqE{72CeD~S*}4&ta~^*vpM-|Hrp!yt@~ zirKJxhzaB5BAbIb@d@YP{Ii{1#mF{bL(4zY(LCP&pjwPv3Z=CClb!7r!5w1~WH0cd zNy|pbWrX`ig z(_uPIVr1dHf3=oGjyxM?Q#xK05cf@fkpkHjTq!Nt^J0s8jruZVGcY5zJ$dJ|tB-wH z&W3C{s+OmhYG*msv+M|tRQvklm{+DjGpms8z>c=maNhH4y~@^=$gvPhTgvpUlV+O5 zuSK2*^XO&Uc2P&s`e9BjvL|@bB)_FjIvugaa09X!#B}qmrBBn+D$ds%V`5f5;JoJ?3z11K-piob;4cQ8;sAY(jit9YXDLawp!dzN@ z`kQ2rpVvHOIRi3ilA+MO-fHGO`;ceA3|c<)W$I1gIo%fIKnSFxx?}!4p^v+nWk2vE z?&WC~oW3CY7FhrSV%yt0UQIpl^>@exP(UpUxfui2yyI=iZs0~~C)<;DHv~?{kkcWZ z<~BMUtM25}&2kx(5%+}D@Vm9Ne?aB{hvu#|UUB#6+HjVq!8B^g+f*>hN#D&fANcfY zuB*x|$gxgpM>YmyI`5q?Kb5WTZ0tY|f*=}DTgtuD;JBUTN~k2>neWwoYv1|P$RZFC zKd~Payop@Yi5v-$)H0i|u$^1CjO9Woq)R(`>TsB^&TW>R!I`+Z>|pEV(RF8$wLpuO z&pKl!9(Hxt^CgZZ?3eO&DjjVy4xBC zMByv|9Mqpwf<7~J5T7-N2odr#aMdTsix@*VbdjV%kLjF?KqBrTrNs~j1P!S2(ZHvU zpRk_bU4a8Mz_LWcKEF-eC4_V_;~;#rZKT9U{DWD5gvaY<2T9FPWsw9K4TD}8VbaOKEN-K2J^GZP);Tno7bCW~;#rZKT9U{DWD5gvaY<2T1ds-Uw9K4TD}8)3t1jXI literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/error_constants.h.7739DB6650F792ED.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/error_constants.h.7739DB6650F792ED.idx new file mode 100644 index 0000000000000000000000000000000000000000..01c90da277bd8c3ac2c7b26b4257f867b49e2126 GIT binary patch literal 8514 zcmbW5d3;nww#Ta=R09TX60*`+NFYGS24M?f3jqTGl0Znps%@wHCUnwE=-VCAEDjI> zBM2Bo1_YD2wKkZJzQn4l-WMQZ)M}$@^ZWQpTBm({254B^X=mz|yM*Sy&dx6SFd ztJ${HoC5flJ!D9>4H~;We@Zpxj!;;C1? zVzU78!KnT9{ERx>4OXWEPG0a(8V*fW>j*R#^CJ$;Vzn51M}p_jqB)kR#I5=kd%SgU zju*R)53uWSXt1i|Oxzwg3Dwmw5v|?|1BTDGg$}2kA4eNMjo=XHin4E2ZS;aL@{ra!#Ico%qVvC(?B9-GbYm9>7i@x)qu@N8IX_+tr;{Z4p2^%vA@ zb;IR?3kWBkcMVSr+z_w0IPfs$~j0sxvQYog|0A)$9K zzJ1`6t$zzw$lU;~r))iq3>FeK6myv3x}Qos0%X?1|0O}0TAT}sc7zytGul%hj{N>KkP=XLS_SSkg|g`E?7vY`tqxf^muJ*oKz#t3%BGryk-+O8mVFzx{pC3d$pD~| zRYnUVf!sqMow)hj!}Gh4sOcnbK#u|8!U%v6xZq2sf2XDXwRM3)@*%=X%2v{ZU?HO{ zEGitAQQYeuh4cfcgq1`HBY`HLW$w-~zu%{jG642awg)y(FC=s+aAINK|M{azA!z{3 zVzYV)BY_)LYBTSLQwg@jUvpZ#^(iqm$5^ap4Ln-M9D1a9sY$(09sknH> zGKCBSppMl=3L}9RM-?63Ub_i^1OO(oiSfcnAaUuOl39=b{*XfM0$>Ci5iX1bP81I~ zpWCVP!wMM(z;d=cRu~BsJ^$G7uI_hQ6w(!dY?d7^j06T8Ox*e8m&dm%WH100X6Y@A z1Z=jhU00dZ|moO3-P?Pibe|~TdfLQ>vQr1fQ1`7!tzw$&$(!S$66*3AS z5A#F_BY}Xma{cW~ukTXGQ~)+pwiynyUP$P@Mc2FR4gCtBkpQ`vD@qs%)U1m7&#sD_ z0CWN%jisdsBY|lLJgF<2Hn%Dy8GvbQ+CX6>5ZU=c;VapRPbowJU=$k_D~tq8>(rbh z^XC9C8GuccZGy9*7ZTd=!@+xxZEf7IkU;>Iv+_7$B=B&{j~jPfJpY_RLI6l->1JUh zaR1r#%yq{eY*R=$0HfLH7-1wZE_G(?H&L%0R!9*5EtIv;e!)UQmuEz$hyP{f%L*9^ zPz|ez6Gj5d`+u`x-bnFT;50CU;g9>PfA?v?g) zV-CCsfC+#smK86I1j0hret%-~fzt|!0ALIolOl`+Ui{+c=R&qTdPX6m0q`?_FJUAw z=JtY-xz^=p6*38cX3CmrOt6s9sM_D2zug}AP$7{3jbr2Dgpok=L$h9WZGZGrh4clW zm=#A0BZ2c%8?-&6fBRA)W&kFz36a7`Akn+>!SWl8*A>zefLxZ_PZ$Xd7~6j1z>c?W zDP#%&k5Kjq+%~-$}E9DgXJ0-$}A?E^?JBm@GyTHCEiJxaR^9g5#xZOK!P z73R$jp`mf(Q^u!>zqo)waSAk7rbweC1vl5D=-$)m@e3wv?p+XMLBfK*7zFhx(7HH9 z9yKXca6yW0RHESKG8EmYKf$ewPpm-A2^G5F#ESlBQ(FUV8NFaU{@(r+98cYi^u8a} zxA*E48n>F7R?~2-2!*f0m^Bps5~csV`{R-+O$SazLHn^OV+Wuc=?KzL` z?f1&j7~q}#oP&@@B?~;4u}BYI5<7KA`pa=JjHjvTX&Q!nC}=N5KRK4Klk{8`G?I$;_|BF8!f=o=AI1qyrz8fDui7nyoJv3<# zO~ne-#t?=JV+@0e7~HxJ#tKxyP{AcIx>5Urn+sobw+9t3xOKUU6^ris{FBND-%Nu= z*-1@1X-^zaC}>RcE^2Hd%3+AWwJ^4SFJgP+;WL-hq5V2)T1R`x_Uoy6z1&+=%g~-n zWo$qGim!X_ulHv{`$AJ;sBAqsak6os?_G7RHf2>&4lG(KN$rEs-q@4rKg@Z0D7a_! zo@LM|yP+ptb7NnYxQp5w*WVun{3CSWBQzTWp$3N*T!15w${XCe-o}bi+4DnG^yYG&;Q3&+3jA=R8X`qYC*Ja155}5hDrh7ZAyQPoCIQpBS zS{D5twXOu(=Edjr$F`{Ep(ifov8SS<#`UGyVHH4+h#irDG)jA*xvobV1wFXAnnyRv zcyR0D9V<|}Lj~9E=tjW~Zm!nR{ZQ8Nr_cR#axRQzWa3EUZl=E6xiWT5-+AD!jIT6K z7q)^RT+uhK`|4`?uGl7&^5E8WJaQ=Cp@M67bpJaf{cxXUKi>yyT5YQCaGGk8YK-fR z${yP4dLCPU)cVQl$H`Nqvekq4u>$2hRB$biZWQt0<_aF& z-IQMa@9F%)Lg=(4t|STfEG;m;U+ObywczgCv#)W)Q0PMtUEX6D6!%b}OM0w8K@SyN z&7<4ro-x1E+xNI3{zjUzkq*I*w>>$$tvPfXugFcyHQXrsAq?0280OiKCttt9N_{|Q zreqq&7IOfgc>;hmDt~b6dLJuL?L!5Z`snWS+80~STpFyh08E69@>yvj+^b^{>lT z*grns0{lvvvXUCzroI`PvL|%XW~j)H%}&IbV44A8c#eT#Fu4FX&n(c5DFwLod;%-J zZ2$U$9b-3bhv>~Tp_v*l>I4(bDvn6m2^C`oj2VjEV%hN25{+P``d!EW*d(2_Lt!FM+@kQMA86Tu?d>R7hm~uM2_(Nld8jEz~mxgN(RLt5B zqji~GMqiloKv16WV90{=JA3Y274D$@*nK+xxYL2#R&w;zbTwyE`=0y;MCq)>9 zd|sS7Z(GdsKsO{b7`uLIX=2;F*sK@8UE8nLILw$kK@greVUWv9=MA&Xf2s}WI&+;d zlFwgWymoxeP3~@`16yepE*@rB5Jpe0j6lJx3MzO?h3=CR)|9h?MW+D8ZOqnQ{e zdqd6D$oWt3in6#eqvN&9Z8cR1Fud$W;>h~Wyb#?7q(6%6< zz*s;``d|P&~L%Xy#vO8KAn2D z{jSuJ?a+Eu;wa~urul+VOa_IE0!96v3s_{hsw5N$FnPnHjT@_Phj3j^3o1v|>A9Htl za=LK~rvFmWId=ExOW?LA+6{^FT71}w6CbR(1Y17GG^fLs&yAdG#)IGX+3<50&n@}^ z+72=gGUQ58MP%Hh%M&hxJ0l^(2wC}4`BOPtU*PUdGv}Ef~e>`RHe(f^MIoo{GIBBraALiN+mM7Y{ zn9J84^Upq)@DtDnY0^Pz+=^3Whf+Q|eS}wJrDPeSd+mZZy!ErQzks`irnN}TzGX}I z(&!U!--L?NsM1&*4QBArt)91I$C$N4g`TTp1!U?@D{roOZJK!ej9>)*Lfy7Br~;#rZKT9U{DWD5gvaY<38JCFv0)S{yNqWBVqw9K4TD}8?kvp(r)2SP#gvO=MFjl*_JS2obS7Lh7tn9&LOmw%*kY$D!O(rN~E!*;YP=T6%*5pq0ee~HlxTH zw$^ltRmFsYSkbVA)0QT)=q6Lh3p4?fl2&Aiy=uX_MzEfST*M?eE6w91Sxg)jgg!-^ zG<0hkJ9SNlWL~%MEX;vG5ra&tl1#Ehqqx!O3@^^21uGP1Et9geb{U3yewu{un8%&Q zT_hSJ)G{>I0hTSpU_h4P2&3D0Ew2(rJEbXNLR%V{<)xiDVhP^BV2w$Owc7%{v&xJJ zXiiNzj*tc{nw3owgLMr&NY-SA=8Z8d^qGn#6Wrh29PI`g3`ji>6l$$ZVlqrkPmvZ( z!joY<0k+h(NzH0*-qJGxk%Txo#~o^dA-k+$X;jG)JgcZGmL<5+3=Ex%0W0Zz8QDAm z%bX-ZN`i_(6wu8gCWA<(u7xp9P{;@UtESHAWVyjDIdAuGnZy8}yM=H^F$*(_uELJW zO_n2XGV_5ikufX0E7}w83U`b~qA`q{a&$ui!vdA2K@eEhv(qY}tXVQ6sg}I~7(J3; z@1$1Pt_Cqp*cLEds;HPK!0eJhMN_CEsmdNF7(4`rg4Ps~RmsS`ggwZFk(H>NVMQ0W z1fv?%Lkwn{a5WeVO$aFfOLaTUh7`ATVWW3L9C1U$zeo~v8!&}ZOsUY2s>rYdb28BJ zM1Cv`ZP!COB{95{2?W%rS}9@*CY9tVn82)}r5MIt(avz&D0mYs#m*Qq+9U{VG2HZM zhG?vVoVfFaIAI@8F!~ng1r8~eM$+<6Atodkwx!bCS!E*xE~5Deg&>sf3`axZCX|#? zZUvOobrs36%>y%_dO4PWD+$*ON-HXfMIsT)G$M-~MdZe|``{mmMk7gunh}StaOVH{ zk55zME@L#p&S4kve}_4!Zi{KIr)#{cqg7QjYpxYef@MuDHYw{`TA74ulZ1{tv$R*P z)R3Z4WG-=Ft2_rdZ(=d{*uj0t;KAr7b)NY54K3HgZA>QE_?I#7(Md9+D=9Rakto`~ zq&70=v&nNFgkJtKbExu}NMVuJUyA}A#T}LQ4V54SUuMsW!oOEu`Lp5d$+k6Ke;o>R z7j*mW8!FCywp&AA473%#w?#zNwK+>*uwt+lmH2!@Lpj7B|LLOt=w{R>q9*PzRy5{k z4y!_Iz~R=OZ@zv1xyQyu)W{vwBDD&Y`h2VJsRW1bFUV(ROR6Oi)pLiTqM_9+!%92D z!i(xFPef|>uk|+9Enm^%zt4%efSLa!KPOGA^2*mq*rFOh_tZ-+?gP;CfiW&f7zrVlEzA=0-XDD!H z;r=W2CyxFlqK!O5q9OrfF7Sxk%U}hTNX08A*Gv>LO^A2XlH#c*(J)Qt#nRmfiE)Z;XxwjY?_6}D#1O|p1hP&L= zhUru{Kr!W=+Q{9pYxtLwkI?yXtM~-RiCq zorwqB)lm6R&|MAp3=g_1wOWn3D_TvRRr{*FWe48<<2v-I7we7OiGzo!FqQK@4Wdfz z;Iq%tGs5`pDi4=}|MB>t^RM>BJ$(3l+RpKYOhY!~EPvqHlUuHS_|A&-jA zbI$+Vb57f^rLL|x0|0MmOIr*nECT>oiNCTUakq5%CHXNy=nhC63PTSoBN*gaS%zUz zf-KKNo(o8<6o;rSh*}j+6lA*zCp1Pm8RAEYA{e+kYbhE>NaAh*2I5+*tgu3el|ooz zQMnXil5_`=q_CU-c~*$1Yy{zwtrC)DttN!cq6%3F!LWo7R74m;61NLsow%qi48g8ykxoemj3zIyE`*~H2 znp$?|*z~5w1jcQ4Q+M_Y&hEq;ZfBO>NZfwLZy?!u?GJ@d+Z)Ice&T59VFjca(s42@Yz37 zZr^gBjY%HFEupY{5(|+D=uBGYq$=qg<7CGKla6&dty6*@AFT-9ervcuZ)V&%ZhLBY z0GJtnw!e^A>ju6kicJ{TW64}Yu9aXiC7qE;PKQX6>EP((R0!Ujf9-6~uR}v=W~L^q z1`-im*Ws>NviwEIeoB;@NUN z0CXF+b@Ny1MlUfGOo9HbA6}~}pkQXu`eO0xUq4BKrRyVG=$Xt21$$oM`#KzXdnx#K z^m6zE-_T1GgoICT^{kp2q~P3$Is(t^yG+4}N1x!E+dF6JP7R&Cjq%TqS}8d4{q2$7 z>HZ1|68RMeX6g?)DR}V4jYGP;xkd`M9{s9wQ~6Ud3f}u|`>7T43w;!f-5*UHD_S;8 z!S8E-y!g!z6B87?oR=wQyn6To1>0STBPdZlLucCaNwnL#-;qv1=)_siVcV`H(Ddi{ zwqwq#RvMxFbYXnp&B8(oPR-Vz@$C4lm;!0i{r<)CzqC+Lf9cAwQ$HG`AW`Caw`uy^ z639O}_*&&-Yh)VHD;GY!;C$yG1x@8s_Z{e%9;cwYV^7B1Le(?{xtSfC_8ZP$rQrC- j*XP)s+r9&`6qIerKSnzFcL2bwxj9++^K~;#rZKT9U{DWD5gvaY<38EszF-w9K4TD}8x0s-^dX|iXpe5e2lYjA1^Km-{WI^8mx6^>q84HQ=AROf>U|NW7~ pF-5HA6i`@>Lrw-JT$GxV2x1o(B^Psp7>sNx%WCJ8DFrbw001h>HZ%YL literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exception_ptr.h.6BAAB8CAEF920B5D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exception_ptr.h.6BAAB8CAEF920B5D.idx new file mode 100644 index 0000000000000000000000000000000000000000..d68378a504fa95bcc715d2f31ee397a5aa02bbe3 GIT binary patch literal 1952 zcmb7FUr1Y57(bs$)tg@HwOSLKy56kT=^7K=M4hgkR1Ac<+1BDiOG%U5lX&g*+;H!W zyEG@wN732epP2%%c~F)c&wbWy=sEluxq^bXn=TMH7llQ?6k zI*Da0!%@;_(5BlKLo0f{h>xJ*gcVnb94B&7>3GW-T_u)E(z2z?aXG1Ha?zaf}YhwW>TtEW2-im09uhAW1BNZ3&(_;yml zG}kd=dkv z%;WSXw_Og;f9mmjK$KSD)m7+bzO2kLAzz+7^~>W!pZVSsr48_GfS=KRy|5Bk{PU3y zJktKk{k}p&2&prFuO0try0OwDwF~WyOf5>&P&Ew!j%T21rWD@<_f05<5vAMUzFmsv z!98D!?}7VXDP98i631T&X(T*3@dE8muhSb@6Kuk?H)pa;ElMNRBQis5${9@5^@YH=0D6gyDRlB>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsBOMT#}=oT9KMuT9TQc7oU=vR;-u7KtNMTWkG6uNl{{ENiop2%G@N7 zO+`ShT}%uN@+W+Z{_H-?$;iXl$;i^ls0DEc14B=v<*e0(-?Er^7`qumx)~#35sn1!*@y)pp7t97gONAMaMgBls55&Tw0&sN4D z7=Nm%2J_-2vMszkj8alkDllOlMp+SAIRsB$N*+m0Nkj=rPDM%uNlslv9ZAkW$^c2u zSi~4f&Q!`2NzOvV0!c1aDiujCLnH%94%zEk+dgDJe=ubYFifW~vP@wVfjRm1D~GOi z32BEJxfr=PxKv@n@(~lizfgI47^r?4qtG-)X_!R$pSK&+r>i~};9<0qvQmZ#^Dx?q z*vcY!Zc=VYa-JfdNOIm%-biwOB7R760a5`-a={|ONOI9q(MWP}B5_D^2~r72a>*je zNOH)L&clct={$_6kt<8 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exp_integral.tcc.3BFA54CF549FBF5E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exp_integral.tcc.3BFA54CF549FBF5E.idx new file mode 100644 index 0000000000000000000000000000000000000000..b0e5cf9cb0369a333b03b767309490ab719736d3 GIT binary patch literal 8308 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/floatn.h.DA21C738CC1B6ABF.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/floatn.h.DA21C738CC1B6ABF.idx new file mode 100644 index 0000000000000000000000000000000000000000..454fdb2fa398b803a5c2fe1a599b85f0697c3330 GIT binary patch literal 468 zcmWIYbaOky$iU#7;#rZKT9U}Zz`!63#Kk2=nG=CD7^G$9q+03g>z5W6>1XC8=aiZhe9mXsEy7VBj&V3V$}FpD=c(ap)sE3ME?&nwkW$}B0?Ps_s>qVcz51ML=8hIrPP01~lLM*t=zV#x$U?DTk>t oOt>gDClSOhE=n#23o;8bJ~*j!c#9~;#rZKT9U{DWD5gvaY<38BajAzw9K4TD}8773%@% zM>S;*JjwH-8MzpxxTF-p761vE*|R3?GMk&j$ipbaA;b?8E=tWw1hI>Yl8d=P3`W+7 Nt3LJ0R~|7i0019%F5mzF literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/fp-fast.h.72CDF40E7648EF43.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/fp-fast.h.72CDF40E7648EF43.idx new file mode 100644 index 0000000000000000000000000000000000000000..0ab45a973cedee384e535314f628f7d55a808947 GIT binary patch literal 180 zcmWIYbaPw7z`)>~;#rZKT9U{DWD5gvaY<38C6ES#w9K4TD}8~;#rZKT9U{DWD5gvaY<38C6ES#w9K4TD}8G7pI}21T&LJ)h69$@=lL+Dz W7bO>SgBXkfw?EC}H(n6PzyJVAt}jUd literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functexcept.h.807459FDC2AF6C4E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functexcept.h.807459FDC2AF6C4E.idx new file mode 100644 index 0000000000000000000000000000000000000000..a29a13c508aec9325d0f8e5ea1b198a043261f2a GIT binary patch literal 372 zcmWIYbaTsLWMFVk@vO*AElFfyU|6~4AL@lQmyp$^-GJ3^fU94b4pWE z^^;YNoPbE*&`>`qv!qx*wIVsSpd>RtFFqwTEi*5*STBQt7=3A_dC4UZ%{X*aSeV6| znds(Z=9O0HrstJnSPgYba(-S~W;)Q2;>z44kh_ag(~4t&bX?Q>ETtw-BSs!3Z3b-x zkQ4}LR@$qmuGGu|3TyIdDnbMq7_2U@`llH(y@Qd9Nrgj23?@9O@1Lha@wE9s)kO?N paxmed)SN^RySOO1SQ*4%1`!az)LSO@RC|HYMJ8rO24EP&003bWTj&4) literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functional.ACE7A23DFA6A7C81.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functional.ACE7A23DFA6A7C81.idx new file mode 100644 index 0000000000000000000000000000000000000000..09b239299ca418146a5d5c56f1fb2edba5873ff2 GIT binary patch literal 32794 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 Po+tSHx#05*%jf?C+an9V literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functional_hash.h.412E38477D218834.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functional_hash.h.412E38477D218834.idx new file mode 100644 index 0000000000000000000000000000000000000000..8f884e1123a1b94f7b4806219b7517c800f45972 GIT binary patch literal 5606 zcmbtY3s6+&6~6!Pbpz~W0mT}X6i#7Af|wn=Rh#n$==(-^cZ@j25FF_FY)oI0lG-~XPy_i}e8o#~F= zd(Z!!*MI)=pL2%7f;n@pj1YwU@`9IZoqmTX2*Pmq@AG@BO^jf_9NVh&Y=1+Y)9t8r zT9?-SY^IP?vb4@RiM>mz-Tw59XW_Hd<8i^Otjgg{pI+iuJ~K0dpRiKysV{Xo;iJOk zaWIyOdUu(>+T(UGQBVa>m&aXc4KfBO_D~Rbx$9l7I=?rd*H`87G9h1erQ2C2Gxzk>jn2`tn?CI(D(rUlYu7;%~AXN1~Nio)v(gwfN zm-f8^EJP)KuLGjrP%srk!-1>}4H@G*U( zUTIos2|R=_UMJRc-!G2zoD%^~2>}oIA3n8Z**-JCsUhHnyCRN#kXdE{I3Walr{!Gt z-kJp2MB}X^WWU)T6?mZSz1xa*&g)Gy1)-SIL-}ghN zT&HY6Thx)3&)B*+hl=>f4QFEr429n zIJM=Y_Qhv^z7#Y}4-q2U*%j}+e=O}s08a=3XBHiLF!t?>F9Mt_$o<6B5BB*B?Vm32 zod0rQa~ZQg(rEv5+fV=ccgb4L;L%2SQgqj+EsuZc0t1sm*e|YcZv4&H*I#AQqm0t^ z-}LA1Ua;X8AU!pN^z81me}vsgdV@)eM(G(hJ;Um1RH>!_mk{ml9pqxuC2)0U89`3FHdO^{otsfAjU z7aG{NF)wD*)wrX;@^lCT8;i+?&b*>dfTx9k_s%M8e>}_F1@Pn$@P~{0&wn;@!zq9h zL%>J+4xPQVW6UQ2XN7=En#GbAu2?U!&BYoww`|RUWq13-K4);4e3zK-!o}b(+}tNG z=HA(z`&=Jmu^2VDyZ-&>UnkVuWH6O$%r#Mg2TBjS_x6Qqsqq%LXBXsJQ>`WNKscv$ z)xp#Lo_kDMkey~{RNx_m4=`mbb)}occ5CU&B=)kFzCmJd zs5I^kT;-cp6>%CpDsCF6nb1^_K_od@NVeiKwhoZrL+BpuRymD~*hCz^tWZ`C=1sSoW03+`wDkG#$EEtrX|#x~1sL}dx>xHOr;%}D!}GSpgA;2Y zff6l=Pvi22HP7wp_{jsdJU?xICYr&P1dj1M!bJP*pSw>@_`?@oD$1=irIn_mgebSs z8Eten(%7}Yu>*u2&^pFx^x#)nDMR+XIqr4vK(7HC8~DJlE#7O49;jx)M2lj8Lbce~ zfN49S+qL#Njf~jh2vJ%amPKrBV4v3;EI>1aZmGjQv=uxq8ef!#_QMBy|Mh6}&NdPu z$A`s3iRHgJe_VIl^<~ALDU!VWndQ02Ey*iPDF}cZtwTT6>pB{3WfuUJ}`>)qjmdUenUo zN%D2Ay*@Ifk7Qs~kmQ@hbdyL}HY6A)Qty&XtW%PFpP23w2@9DdzedNrM#p1DOL7y9 zZK83Q@~rMoZKl()FiY}!YFbYvY;#*SJ}I#Jw(o&NZ>K^#jmMnEvIdun*Ex(3W*9P} zCb&aIN%aDy3~$ za7=-TNJaTfrP4g;Dy^RtB;^{bxW3{^gZiGNY*FRc&kmBZB^BrOP^I-1T~e;GitD?i zq+DafcfJw7{N0-!7a+~%=FH8}JhSO(bIC9|xJ~Uj;HfIO9VVhIuPD7QF zTx=;GhMFP*GdfZdpZ673yv9Q!lqp?hQ>J!>k#*9zHubuGl=b6*l(tX5g?%?sQxj!> zV-5Upya&H|ieRNLeeXnP`=;_IATi%MKN$_dyzg=_NuRgOm%u*8vIqZ-!w*4_KbRa> N^`vI=J9OMw;lIH4O_u-w literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/gamma.tcc.CA2DC1F3C7EBE19F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/gamma.tcc.CA2DC1F3C7EBE19F.idx new file mode 100644 index 0000000000000000000000000000000000000000..3c20caf3a621f74f8c25435e7cf8bcd453a8b808 GIT binary patch literal 6946 zcmeHMeNa55<%M60b>RuQ|35iFJuA$%x^6p#f9 zQK#){rGOv_et?d+jJ9h<3Y1o?5JuawxKeRhK6D9;MP0Td?4vs`@7edyIwa%l%x038 z{N~(y&pG#=-#Pc*golNM*gNoeD|dwLNr*{}CU`ua74=c3ro<&s-#@=%bVJj78;acoai=Als<)D|X`m%H+rQr)~{sp$A1+L5M zi*NsWgE>dgwPpS810nuaa|jp!^8v7+dk`=U=F@CkfEE-Wdq&=h=C>kS2A{)L=dd-6 zzwdf?@xd>DaOF7re!il%*vWJ;$CQT5r1+7G8vTU;SJ`zxfoC?uGdSHT@6ZcWH zn87OSuEH!_i>0;Li;|I*V|DUnvkuT!@mgna zGM^!9zQ3j8y}^mve`I7#JZTKvL`6lWAXCrLN1t5^ZOA#c$>4^RoHdgq*R6^~B=`}2 z3u*F_@Etb!4hv~4ceya!z9u}9v&J?VNlQgHO|}`_u(vvY6QmWDZhLO}`mQm5rzzlU ztidgs4!Qq%S%=9k&K!vM1}+kv7Vo0gOlB_A&zZD%=Svy5Dc<0Q1okO!Jlryv@QWDP zG`De3A@5G)*mpPVz)$6)QAtM50}s`~WmlcVX$JS#^;Ty}YiQnngAXj++NX^9VPZdr zh5kj4A5HHy$u+pf;?3K8$P(xL=Z@;prhU`x z%EoQTx((?w>&*Vga}>SG^jBd|6=q=#cGF;AMt%}opTzq9E=OOAH7mW9&zUia)0;u& z)*ltlF#~^7{{?j3AfX1?)F2Uq)yP_n7BN_ZtTk-hfrTB|o0g-fdl5C;n+pxT5CvVX zcE8Q>E8>vFe`CXy@RGJ-j$k@@%FaZ-wv<|da*&jR2Qx<%;8Fo126w{3PNtfXpaoAY zQ|(C5fj|fP+)hF@a;!%B`cFbLa%^Vf0&H7=^&3U|okQB&d3B{mrgK+-yRU4^?b2Cq zL-=by%$6$}56ya@s9|{joMq>cU*x^jkKbx-u*f_*>+#Qg8~e0h^YP3;HORdNu~t}( z+|)?FpCCbl+%#<5fqgpgGCBfYcW`y>Dmiw{$SagBPWK2HYA&0#B5RG72!$Z;zEdNHpTJJDGx@WUl;4g+4*oSbpE zcV9;OaAwV{BPvC7mt6uj@Hd#!bSEH!AHhN!`5Rd%k{`)J zQT!+tdYk_?3&mK(u#QNXl1zPBC#aG$zZ_V11LfdT4*D`pfChvbrsNRtDF{9VN5;Z# z@azUDgLPn|1J;$m7}$(Gi)CZr!?Z6#Rz*mE7eP=ZOH$2jGYC+ld1_?EwAY|{8a8f5 zl4f@MAvAA@EgwS5hR`ca{{rk>z#Pd5sKu_en04T*!%lTrUqT6r6&Cf(?F<20Y^%j~ z^mx9L!%qisa4RQ*o@5BmYn^{;qmDmqNZf{GbPp0vV)03=$9;!06?07=wR1+;DgI-6 z!@q35qDDA@h!e<>P6{Mk!^AbL$Ce2Zmf6cy*NjY-$!s_6#@4@IH+Yh5`g*yWV(qZ@ z|5W&&rh?!~ZX%kqyZeQ2V-Ig0PhNat*u);jZTd z3#uw@b$5-N3iyMg)BO=a{YF-E=W>*P)TzdS7kn5j%r ZC~aqcpqa;iUeGqV$~N3i`34}~zX6Cn{S*KI literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/glue_algorithm_defs.h.C368EC8DE1036B81.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/glue_algorithm_defs.h.C368EC8DE1036B81.idx new file mode 100644 index 0000000000000000000000000000000000000000..f0949011a6127dc7e5f704eb9889867c5cec4cd7 GIT binary patch literal 22460 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 KZWW&QmBJr=l`?_= literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/glue_numeric_defs.h.FCCD2FC54DA0DE29.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/glue_numeric_defs.h.FCCD2FC54DA0DE29.idx new file mode 100644 index 0000000000000000000000000000000000000000..e05592420362c5120f6f2cb41f1a816bbacf6c14 GIT binary patch literal 5972 zcmd6rO>7%Q6vv-KTWWWk1d@;hl62#^X_7kYu9LLV5?N{suB_04NI12y+N{U0k-fHd z*CnP6m5M|qDh_~@3PcM+tKgy0MmQz8OiFVFUemRv zgdhQ@q(hpn7^SBRWbL><{Ji~M&KH`o%8gPWqJ6^Vk`@!ujWW8eAV^wOImgz3@v6bo&wR+$A z>-ieeF_2lz`r7NY2d!R$ns$HVlcIfI!x`DE6zhLv`PpPne{F=CR&}kE$>@PP9CtM@ z;D3Ofr9dlIao&~>(qHSs! zif(4|Mo#cdDi2jom*s+KWhF_LH67oR=!*Rs>B@W-$y!Dx*D3Y|i(Ig8Sf(o;AG|0M zP`l5$LOr}#r2<|^4)L0E10>@*XqGu$@u-uKq?1avh-5M$0Sts(1_7%Tl?evOXjvr1 zVzHuW#O#WuQB2((KZJi{q8KA3jg>2xMj2ChX;YJ4BxyK3Av^O{kd9e%fkqaU=RE@>fya3`n5NgZhyqVUKSz``3?wnJxD!# ze&g$-*T#Oo%0ZkN%)%^Aa-e z8T3LgHh8#&=Fs)l6GLskbl-5*;RKw(As*Yg#||-fefeB!^z@1g))Y+PW%jiW*#^pI z7ZP{=?flubiUnA}t9WF4*ftP<%1PrNfAgoS4q*u6I_%m?b1-n*UJ8`^A`rCuVe$Nr zclKWDd5v`gmPr>dne_mc3410p@>nLsnap@&nQ&$@ql{%jm&uGRmI+fPGon}~B$>=O zVwvz`^6OV$cw6nec_qLJ{ZfC5CB~p)YXXy5zi?rs@wKz5=BPKf3pwF`uhi2zlByCXSbNDAkL`X;UW|NeShlghBvNRTh8Rr0| zlH4OJa~XA6rp7e@B-<|e^o`FljKEGpaS{eStOS6j^{4XkF9-9C8@r9$CWo!UslJmh z{1b@%BTyWHPZEEZ!+W^<_esg$jn#5m4-ytw9nj%<9$o^Q1+pm02H6zpfu5oqkVDZi zaEu}YFi?~Waw*CO`4km`LW)elM3EVoDJlX*6cvMFib_BUMWvvWqB2lMQ8_55r~*__ zR0%36vNFKRP+Y};Dw?YqP)&0U18QilWk4;>bquJZxt;;_3V%HK!J{`@%EEEqTAk z|HSR(xRe~6asr7HD3}O^ZC+n`9k&%?p&yF1OU+ zYz;PH!3IT}GNQVpYFE3a&Vq#@s2)-l<`#cF35__4a7~F^;$tMy=K0}@gs~fy*xv)i z9vDCbKIf76wyMu-u@KIMdz0|NH4mJPq5bvv`BT-Yp(KpUVAM87W)F|H!D-c>C-H3C zx$W|7cXPI0E9$6y3y0JBba_$F{bKVRih1p{j~ko8XUO4|-tsMwVjJXbGo>_*K;?+=8O^X=H5 zz$M7tz9RU(TKPwNJN9=%u~XTL;c3@}s^nMBVnO1h^(6n)Rll=aq-T3^njPE@xtdY8 z)7&S6KYWPYb|~86M&j38be*|*<(UC2L~&8_7Ts9>b;0e{uk3h>wm_)`MiIZjI$?+t zN`&9=Z0!1R^w0<%zl6jkB+uv?(7qJ%@`W#OhWK^y(ZnyXO=w*cl39~Ed7z;`*n!74 zAa#TCKJRS~+5KB=r9&mKL7qYKOChipl_gNgb|0$lD~lqqgGe=qWPR@Y3xBtDe)=8G z9_p`xo|)L2*p^^m)%W{kz=E-^2a@ED!!Y1KO}BIC literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/gthr.h.224F0F09E7E4961C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/gthr.h.224F0F09E7E4961C.idx new file mode 100644 index 0000000000000000000000000000000000000000..9257468a907dffb643fcd684effe38f6381bbdc0 GIT binary patch literal 270 zcmWIYbaP{4WMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`V|&t@n$BvIhlE-6}stprTWRLMovJaZ)m8Wlvz@&pI(wtq??kOmROooqL;xywi!UZ z48@hXNg$ULrKS}d0O?5f-*Yl8ePb45kXj6E>-AZ+ICQ8Gycr0RZ_DL#+S+ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hash_bytes.h.274FC085A1115B4A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hash_bytes.h.274FC085A1115B4A.idx new file mode 100644 index 0000000000000000000000000000000000000000..ec65fea87fabbe97d5761aef0fc617041d5bf155 GIT binary patch literal 374 zcmWIYbaTsNWMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl*SyHT@kyxA&pHx|rTCA7BfK5Y%g;~6riEd72UTKAHdR{4p2~ZQ0 z^YhX&(}9LC6j$aZf$T3zO)Fjmq~n_2XDKy#8Zq)Psxhc3fTTd+!_0>}&ue{4X5?a& zf!+ zZG@buv8g4DH>vNRr$X_x`9P?}&nNd&Qri;|1QK@27k0RfE9>xv92MIYrd HGBE%EjG<_c literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hashtable.h.DC8C92A807F065D3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hashtable.h.DC8C92A807F065D3.idx new file mode 100644 index 0000000000000000000000000000000000000000..04238fdd852f92ebe247098e804557059068461a GIT binary patch literal 17128 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 NODeb;h+%46^-o0y;e`MI literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hashtable_policy.h.40A3B6E69632E8E1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hashtable_policy.h.40A3B6E69632E8E1.idx new file mode 100644 index 0000000000000000000000000000000000000000..b7a77530e861a7eab4aa3649afa8be73caad46d8 GIT binary patch literal 10368 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 QIFREqoc~xRlZ*fU1E+`<)c^nh literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hypergeometric.tcc.62C6EC35332E0AAE.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hypergeometric.tcc.62C6EC35332E0AAE.idx new file mode 100644 index 0000000000000000000000000000000000000000..4252f8c73fed58d029a9b622cb258ccea9b8f82a GIT binary patch literal 21484 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/invoke.h.DF3BCAA5A6E33E7C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/invoke.h.DF3BCAA5A6E33E7C.idx new file mode 100644 index 0000000000000000000000000000000000000000..c7dc38fd818f8255e7cb1a83e039367a19c91933 GIT binary patch literal 822 zcmWIYbaT^VW?*nm@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl*SyBuXFU!wP)yrTYMsaR_84*fLDhpEMONtVK#xoRG<|cvMQk0rj z?8U^upxds0crKST7b6d&nXZ{(MfZbu+VdouM)A-UPVXF6@mV2I2rsm1W#VE%iCkay>eR-|j^;L($KxT`Xslikqb-Q@v!tH=0 z9v(&;Ase_MK%SM4W7GxoGX@IpjFq!GM$vv^wsFM%sT5W&mS z%7c56hcTZkA4#r=r$`u~vY4kB&Pz?z?8^G!mkIPou1KydOp#`#y^88e%`Bj>CZDDv z%-26>{4>1p%dH3~oWYx+3R69)@1Lha@wE9s;dzV<^BCn|>O-9xUVJ)c{0u0OCY7cI zQ(q&_TsxEb-?t$XN=2zTi6B1}7bO=fgBZZn1p|y+i`E=`Ty(~TiJ6H3m`h*)09o=0 A&Hw-a literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ios_base.h.979B6DBB9A7C8F35.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ios_base.h.979B6DBB9A7C8F35.idx new file mode 100644 index 0000000000000000000000000000000000000000..533071af5b45a2f187c8a55df49c820df2b118bf GIT binary patch literal 17036 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/libc-header-start.h.E88219B53B0B0BF5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/libc-header-start.h.E88219B53B0B0BF5.idx new file mode 100644 index 0000000000000000000000000000000000000000..5bb5593f1269889ea7d8685df4c29878a1e3554e GIT binary patch literal 520 zcmWIYbaP{1VqkDi@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`e~_&C8b5F#d;YG*rY2g%;L>VbaOKEN-K2J^GfxTGE0i}b25{Xbu&^EQ&Nj`i%SxV zN`ShHD|5jX6{V&XdoVIE_>1tJ{t}rhz{tfEz!{(fbAx`$t=Up0&!t#-m^@iL`C-C9 zp1P+Ig6GfTk0h7Cl7P(9OfZ3|bept$kH@of8bDj3IiodT!arYo`L{M+^J3&-lH!mu zhY9aI@zug2Osc%9VldS_OwK&cq6l6TPZSa_lP43- zi<~E-)^MgV1!!&}XQB>F3;Udzo2%Zh+W-`H;dD`h38$uPd7x@+zY8d=&Z#a76Yh+T vJFCAm@e)wji_=RBCR~)7lL%rL7bO>i)dIs72AJgkOt_R_R)3P65ds(hy^v@d literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/libm-simd-decl-stubs.h.06B70A57602EA3C8.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/libm-simd-decl-stubs.h.06B70A57602EA3C8.idx new file mode 100644 index 0000000000000000000000000000000000000000..bb9e1c987a1f690ef0c5999c29753e3e3f1e57d3 GIT binary patch literal 6772 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.B12624C6106406AC.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.B12624C6106406AC.idx new file mode 100644 index 0000000000000000000000000000000000000000..5774edb15a35985a88ec36210735ec4e0dfa3fdb GIT binary patch literal 58282 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.h.1DFE7D0FE6434B13.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.h.1DFE7D0FE6434B13.idx new file mode 100644 index 0000000000000000000000000000000000000000..dab7c9b788e916022b072de755c770ab9d45244b GIT binary patch literal 1018 zcmWIYbaVT}%)sEB;#rZKT9U}Zz`!63#Kk2=nJkPz1_-2O=A>Hb>+6>m7wKo_CFhi; zr0VBn=4O@@>t$e-tgtYPH#5=A$;>OQ&`r-P)lUMd1!_r3*3C#wOi3-$EiOqcDj`XC zL4I*&g<(9O=x7~X=Idu zDSU9eAR$gbT!)d1v6+#pnGqBfV6cPZ{?Dn$0!m15 zNSMQfb*H`5l2(`<3bdh8u~Hu<>|*eRdj;o=IG}1V4l!|<@Wi&>t*$perT~SPFmf$H zn7*6y&5PUo)6;Gos3*N5zc*4 zWfoldwCfsBqLY!U6Jdv}iqn*&DGc|467n4K@YHg?{fZ*bpYxxA!m}B>`WgATsrref#U-hE z8Hq(jsX00NfhGDO`T04;K!$TsYGO%#k$z5QQfftNvVLJnGE^ivCowM_B(4u(8CvLP z<|XHprlbM|b2Ced^)eV>c9a$uVM-QP<|ct$Qk0rj9LB`J@ZfksLY#oO4kH(1CP$_q z#FY#T^H;Nn7tSv?018)fREoibf0u4xf4|<+3MgE`Q6UNwmS|X0uN)9&4HS;zh!TJa z>rQ*AC9NWBvGvljg-5kS=j90qWg9E)tv z|HoaE02J2d(1r^aTXTI~yYf&H$Pk`FX_z4~Q&zsLs@t3cRGq<*0axvHq-y2WSyyX; z!g?Hfa0h<4aZc;rzFiGKVH*w`xa!3ZuM1c%Nt_H6j^>DltA71Ked^*r4O4-_<{aj5 z)#u(xhewQ z3026c~NJ()~a10hsDw000J}y&wPp literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.h.C293B8934AC926BB.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.h.C293B8934AC926BB.idx new file mode 100644 index 0000000000000000000000000000000000000000..1fe16996ff16eba5527d5339b2db8e68ac0f1a09 GIT binary patch literal 438 zcmWIYbaPwB$iU#7;#rZKT9U}Zz`!63#Kk2=nHoSE4AL@lQmyp$^-GJ3^fU94b4pWE z^>Z@wN-Kb5Ze~fbUIs&PWo{BkZBc4ku@lfd(PjG|#zdM*GjcIrOZe)CuOUW@_?GjTA9 z!wi`ivgVxhC!J)Vun>n3Ty>%T1cuF%%~F8Ed>njmvp>v_+_~;V>_(t48wVRG+`!=K zd-f^sHn*Mu3bS*t!+ja~?9%UyTOpT$!rUC(a9{@^W8n3sbWE?ktFlL#`c WxG1@p8^mCIX{+m6;w2@+zyJVY;#z6| literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/list.168C0A1C22C8B14B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/list.168C0A1C22C8B14B.idx new file mode 100644 index 0000000000000000000000000000000000000000..1f739bd546480f87244304c8524af539194f9739 GIT binary patch literal 686 zcmWIYbaPwA#K7R3;#rZKT9U}Zz`!63#Kk2=nZb-e1_;=wR2y2AR2HP>CFZ6ogcQ`; zG1%l}7MB1iBvCttw9K4TD}8^MRoaP+nqCgQah--SErPSnU#K^^j~HW7RLP dva_&purjcM1R(&F;-G*7#$aGzLonG9OaNW`vOE9) literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/list.tcc.94671DB6D4C8E664.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/list.tcc.94671DB6D4C8E664.idx new file mode 100644 index 0000000000000000000000000000000000000000..332636cccfa70b8606061214f7610c6f4e1d7124 GIT binary patch literal 30468 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcursor.h.F8060C576930CE8D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcursor.h.F8060C576930CE8D.idx new file mode 100644 index 0000000000000000000000000000000000000000..470ee021b12f3188d83dfe09cfdbd26fef765ceb GIT binary patch literal 4558 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdatetime.h.4B296C80495006DF.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdatetime.h.4B296C80495006DF.idx new file mode 100644 index 0000000000000000000000000000000000000000..10ddcdc77de994b7b87ea492d6b15236fee84200 GIT binary patch literal 29440 zcmbt-2Y3}l_xH}sF5Kj9lADl95^@QU5Rwo=Kp+%DmEM~aF(elf2nm}af*?hDAfZSJ zO{x?TQBf>_H0ec(B3&tpbVNjy@}0f2XJ;e&{@?F;^T?fhc4lYJ%$zxM=A7SLJGW}l z;*VTOYMS2a^&zhOR9TXwa_}!NKR5H7H+<3ms#bm@F}YK-)cn*g`MIvtAd=e)r#jMdvh(ttdPiK(*XD8#b`2MAyZRRlwD$6! zb4s^pdFS7oa<^=0s!K*rZoWRY&a8|)qeby77oHiTYpK#1CCZk1{LjUCXVZ;t8*Sv} zrza<;W#r~$=OiZ&$;`^i%yU6q>3Podg51>n%$)3hXqeYz;oj0Z&-+Klc-HgG{mU!Q z75^`I%VW;kKV<&LjOWWg$EZ=nEroH;yvz}iL5F2`}`2vsbFa{8j8-jMOwWyNRpIkkqU! zscBYDo(t5=kktIN3}=3hv%f1N^|j2LT<6eS{S%&KX6NVTq!*-RW)F0B%}veD%hZ=y zXIEZMR)PL4S!xD)Kx&bho0l)OP1QeK15?w6H!*6G+81PH=`2Vcb6o>mxs3>hP@0ff@N-fPw6RMu{%@soCkNx#?1=b>OC4{4+V3r|u?%n#{~|X6NL? zKiBJNuA%u(Xb6a5&iHuVO=qs_HBcVu&YbKtmuEikHzFt7<%HIpX{lK*y-~f#c?Cm< zf~s>ub*bs;F3yKr5nJ0$PS(eu^b=DiOF#anAru`*PX4F-(lxy7O3m$@nmy3yzuxcU zWb>i5Y{%Tp*Fb+l_4+cDI`JXmFK`OlgV$SRr9y6gax!e7IoSjI<>aQj^xjLIU4vX{ z`H*CRZhg(wHHS~0pp6MM`zo2${Zl_AlS>H(6XrY5of?{3|K6^PE6x3|T~2m>hWi^n z(cjIJ`sd_iNomQIQ`)C=%1`N%@^_AT7Az1b!1oC#gnL7yN^L9YZ|d1yQr!DRqe|V| zChGrc)TrUEw@Zpe(kxHhbN+WarFqIf_EYDASLA*Tiiw_Mo_k6RLLW7~E}V|z$k5bWSJ#YOm#atWaHR8^YXzw=3Vt>0Q&m<+aLo&zkYweB3ohN(Uni zno7@;U}1F_&0QW^24rTrk`odVGIEBv5>gBD@?F^(snD>b|Va2`^NyTfIiY zz_he}FVso^ma_`dUGTgqD2)USmudBk|EU%}#Q$3*`q1RVu>WthWaa2x`rqovP95UP z8=9K-KUR|mli*6%r~Q9pN4Lnc2U_YV$jdb+GObF@Ch%WEVqyYcs^&cYOR22PA({Cg zGr2iKS{Gzxre^Dcq*H&F>C(?&56R8vQm1G9P14H-5 zNL#k+q9=c!19;S-6r1p%3wDjG9(dv&KO^lj6b8Zg-U~Kki5rwso|r%QnqQCyPyXc? zAmt599V+Qd(f!fcH8j_i2RhPyG;lw1H=-ACw}4+7_wTRU14gkNAzk@7ZS_^@W-~wM z?|sbADc!~VoWJ!D9&ky@&(W*kjk~|{=5xArZ7LOHXTI(p5SZCvpjO)#4CxOh(r{g` zz6qn8D!pmiHB#R2A^jhPOVY?jZwwkXWsu~c>&Od|wugG{p}s~U+4vFo=Y)lGo>fUA zsx*)ACz3Wp37DaTOCIHIQp4^V=ggtoc=Yyf2vs z(!`pQ79JEH=KjF!kOLk2$)0PNAMK0pf5ig6VwJJL+_pEjRX-V{IOt4*C7w~+Ga7&; zN~Rto=4 z;YVMGd09;&SCa%I!Fs;6T{%?dndIr9nb=SVTL(YPet7U|QudSGp5AmisUv9{sAB^S zFcK_tuK4uM;d^S^{pcuYWs%~wND0!W6W{416pJ*jwsADpTL7r*VT%Mx_BdAa5x?hni#IBVOy40*Z_ACJYvcQFaoc!EWa zzcKimxDE>(4%!CWc#nm>CsxFs*BX2l(*6%9u-WX#XUzLE7K~N69{U#ditX&@paXE? zy4kw19P|sbijKC9 zrg$y(CzYP9Dp%e?U06X^TUR^Q|NFjiljf30$R7QoG2K^*?J6iMLwmh#dv!xxog1N+ zRiEyiZqD`13(My}y!}I%dnVi!XeGqAM9Agn@kiDlAJ(%17r6^8-~x-#c!EvXe#pta zf8<7mGPF5JXQnb-@RhdOyJhgiTNsD&q3WYXQWr$b&`;B?UU%=vsm zJ)cl-ED>I%X2xa5-ii*o-YhYOd5>XEEJ4N`9~#rqKhlr(L!r6D{O$qmu#)xTqDNn>JG)9*+JMiSq%EXn7ScfXYL_Hf?Gt9L zD6^?wLbPR5*v103i6v00;?4eE2U{PnOY^~yWuwW$Azj6y4Wo7C9{9Y zO!*7jlM>#!UilaYEhZ>IzY*JS#8msWjtvjGyW~8SF!f(gTTfF!E5xokpY(ECtb@+h zJ9|p@IR(m^C)nB5xBO3^JGnm2x`j?rLZ>K|B#$6Ps?iyG+qe0K*mGlQ#9No+V0Ey$ z9N!zQ4SthOh&sua;JG*4PCLJ-a1764pDP49;v^m)$m~>YPe^g zSFw=zE)>E}f;#RB3;i|GK|eBwYZ9|hVqw^m%IcTJC#L2lIp{m)aNQvucf@eD`gtFy zp|4)xB349vi$KJ9f|b10BBEZsefM7Qk*dSabdlOFg0AO@*qQ40*${N5^RYUr^fs6s z+IczPyc}*Ml84h9fLC;ols`zKHJ(Tw5njBaC!-PzTkMb0jP-0ya*{GW#X8Y5m4KPLtrY6PZ6%Kxw*I}Zo=NeeZ{Q;RnFajJqH+0*dh|^{ zx+kQuBDHXDg&vc@CYwa{1i4-LWy^_sJZd%v-3&5!U-q~!dm0HAsl2CM`~;t=%^kGR zRIFWWT}+Ft@*vMwD!zON^1n3mTiIHfigQ%myo8jk5dBQC-+~nsO~nlHm2(Ksj_QxNVB+B?)SB^)ORfGFFe6M?0UR# z-mCfBTY1uG=;mkC^E2vgBv@q0_2^o?FK%z`BgKO(oujsMpnQ2EWa;o9HAj7N^i*pH zU1rMl9Of~Hh2WUSG(GUcudkeg676xD867;@RIGRVw&`r!HMos~w!=AF$HLYLlWq3p z;<8h^jcTJx3r!=rLW(i&yt|CB+N*#$dgOClO5%rcGQgvD07LFyF@~a1j|(G(zkcIJ-(BJt~Mt( z)jQQR4NiP~|CrB!W{|&8UlD6b*jf;Go?sn)t8MxC;jvzwyy;}Uohj5dh1!h-%UnEo zZ%>8nEl_5SZv4GRecz)&MuKIUHIFIzA*W(zt76MivrNTy)~DN!4;TH_h3^(zEv;he zDrT1Go?B3`Ju$AkgMMI6-*~2u7aL#pgy~rwn|t@LuDe-Ez$|^;g?aLI7uYUz#5{l%iE9bj;H6Lgb#q}E^v!|e5ROJ(aGq(< zuXv*mtrWj(C|@+si0?C4G(5o?f*LK~kY8|ns8yA9wskgD*_Mcg2h_7|bFGVWo)R!m zUz`yq#KHt+yMuM&MS+{@g)t}!T4n2k2W`6(MVm&P$4~_J`cpywCmZT?3$g+M*7h{II81_?>J)aW$}t5v_6c7I~=cN1V!!sU671m7d((z*4i$Gv_vb0=Cg??82+ zsaH#G|Gq4D^uwxCEiN|GP4!ienvy(bDlBTFqFJQKa%0=Kq;ECJ3YTOYtO=$75 zF^wM#oMN#Qwo}`7VJTz|IubJ_X3A8nqDk{kGk2pZTYUq^wyabL0uP(fQsTQ5mN-vv z*xq>*+i1}3J<}aD8z<(L>~Tvrt@Lis9-h1V;lv`##I&=uGbiTE>QfPEo%R*;jvOKK z5mHX$iQBw$cVtL%?7Ly>-=5*1ADXlG3G@C0%mhQ2(`VdXIwP#=OpBQ?DtMG>Ce&M8 z_u!F>ZD#sN2{3IJsOVJS%z!KNC7vAi5U^`^T^e57X3l{3_Kh6Wpn=*pEvYNwQDofbG~ z2Cjzow)W;;c(49fuePrG<fL0t|@XN#yS&*+{UNCG}ejn9}>vA_px3PPK<5TXMuRUDswu!ik`GLqk5DzTy?UBSUhb4Df;v>bl_rrSE<%X~g>4{}OYzm2V2$Jv?Vivk4>QcP(PPgW7foG48YYRi9andcEtQtwArZXJPAEw2>eu zW#%-A{kB?})ow}VtWF@l6U5g2#OCe!^34y|m8FTWphEpaL);&3HrtmL@?9i>d!&8g3+_ zm3FbQhmM}?_<=V~19f_w`W**B^x_ z$5_BI*ra%ZHGJYRsKLT_9)9YeQ%x!SiP(M;Qur{yug>J0Tbud9pGbTs!oueXRwA#h znc>{#_>32sN_?k65uRX?6GvATPZ;C*xsTKoMD;ASodp||Cqh(rY<=9kdf@6Wz!8N4 z{{^#uAshkA3fi7NGQxk0^}N*D*4jKTZQbx->dLvfTR9_hiSJxsgeS;I6= z&%6E@3niwRqk4_lt_hdd%!2KHZEu8Zx9+%;mC(uhj$4lK9e3aFCkAefOxU4&d2s3G zc;uLh|9ofr)i1{E-EHM#8B>=DKECnWSkS)qw@_lP+1aDC{81W-!*Ty;Pe)R&ve%D} z#Lhlq0guFH`bD+CD$@(i@WRTb&2{9CWGK+#=?&NVtp6 zUzxQ3=(vdo`RVHd@xB1N1W&M2xj*$ByxqIxpyl*_g9Y3Wit~>$Rodn6i8#s^#y%FX z4;BVbu#Otjdc+P%J^qb8xTv156ZJYV<)nGx&YJ}#y^mQ=2yX_zX`T>#`*wNRr%%O` z7A9`7fLnrztwXjhZsOhkTh7E;7H}4r;0ZEut=Zu8+UH+5;c?8m)H{YU%1ymnyai`HZ0 zBqel`zH1nvPQan0h`IZrYyPo<5m3C*X>E?74qsf4gH(V z){N!8bj7;%vOTiRwHJHho9~b8+sXr`iq6UU-kn_rzZKlHZzy+5INo*1e)w#TI7Y z!c4d4#+%~>%aW?!uI=jEFGyRS2Q~^;_E8Wiy2zAl{S*^f&doN_0QNRA){ms+KgBpLW_qw*{H$Ir!4Wiy4{zif=wC!5*gDvU%hgPX5 zR6+}NsR%B^rK0>dM;66S{_GETSG5T5h;r@^tYULv#mjwmJo=+7Z3O!1H1R(TE*qYR zO?iQ{o9pui&L`Gm>UXl-<0cp70~^ueic7LI>N6Y-pkVPQfr z8q8%?3QyTIs_@g^gs9qTMOv*mjOS9+($+(#K6!)KRIRt%I|3i8T3@-Zg}O@RtJFfz zV)86lJjS1@z0Kset@KAs{>VySVe%C#{S%Xa5;R7tiH8xPMtf;M`FTC!neI~V7iQ_5spSDgR0%4O>faoYYf|0)$Y)ycW5VUS=EYI=OXqh#(Y$* zm~}2@ucDtr)fTeW3t3M*T4QjVcp4#XlxqxW18Y2#jjR>t+6p_oLT!|4B~&V*emJV~ z-)M|^!|?NXw^@S`=!U9!d>e;jYnA)68YR7N^YYMw%LMyi#j2JXky;fUpsLnCynhrb z0ag2omivl^VUSqW4pG}7>WiThRl7;!ZqnLfyv8tj4D-Uso2rdt@;K&&F=SO+z(Nh|RlC9J-(bzqsKAgtj4zMZ<3ys6 zK?aY};~-#g9!5tG%Hv}U$}>+R5|1%TRr`b{enMX`-4H-G`h+$`8YA`8!-&sgjh;r> z9%+o%%PJU1p%+Lcw4GFNMc2GUlF>~KdV{ohNZR8`&(nzNW0V79`p_beSbpiS+{H9;!Dxv)F4r{;8VEH;pOTX>45>nh?4|Q^7c+bY z%PIPjoP_HOaRp^OG>#|09;(^~=CgqX2}X~~!AE7MX!x}3I4uW@hAzs%7iFht=!)#P zA_rqbxCUS-IV=GiLRbQ1=x_uaF=_VotY$+d`GG)1%8~wJIp@py7V0A+e*~6}@uzBI zWOdxR4#Fs9G<%R}el{wJTJ< z0-j-W%w{rqCfLp<{UMV-w9=QEd|A+l&;UksUh-uQ?>BvVn&1FfbojP}SZcUhj|~T-~`Je6jf3U;Bqc zk4iT*rNYF%zh7Dr4&t_s2Ck!3a7+<30&>N%A}IW*hZRo)A%Yny_<&6|*Xw9mJkM;|Au$$iaOY zGC0x%t3sp+WN?59W_;{@b8hy#^{PH6?1(&pH#pz~-$1|#WN@4biaX*=AVbHO;Mn>u zY4y#S=9Oci1#Us1)T1JX430Lz77%R$mbn2kF}jBk6KFw4mS78rEP-`#f_a@_LFn7_ z&^W>bD~7#=d7WoL=v_dw3F_lO6V#pvGyx@9NW2P35PI>zz$9M9BnUwwsy3f^%_l+V zT!RU515%JRRa;KHmXjci5UAP`#lA!dKr?0XOcGPc?^F#KgVIJjB3Xbn4q(APAbGHXwzxPbXpaoC%8od zmmJ1|f{5r9sG37pFar@QFeNRTwrGhF0sYJowT8r^Ip}GCSddi&u|RzWbj7F;fh*8! z4p_nAK)?#fih)xx-awQJyur~a_y*c-&<4k(-~b{f1$cf)V;|BuJSpmQ-G{Uu(uh>S z8XLF2J8?t(H=92v;Rs;?9(3di_7agR@K^_|;9~@=z+(1k?E&Z-uwE{zQe zNf)a$wk;-UIQ4M0B(>fqZBWmFc~5FBAZ>8t0O=#OmXJ2MFR0pn)?h#Df-XOh1J?F1 zOG8}@I-1oz&N|?FQnl|{-S1fkTyUy(j@3QKI^cTJr8{AX(gLMh)mA78E0h*!B3Br7 zqEVABYg>ScbdAc_AcSuGsoGQ~PlYg*NzY^QJS%-$mT${uK0bA=sy9|l%>D6rOD|O$6gVgWV-~75i3Cp~iRjkXSG%*A)Dz?T4spIi z>WT4NPMph0J+ZoPlE9lJ0i7~BH^F0QB60)AFX|je>mhOo#)k#2U5`S9n@AoCtWej_|>_c zTE~GI9f+)*l*^x#Bk_!cM^UJnqouG0^b!CwIywrOM|2dF=a4AOKu8p5lCvcGEUAXP z>4)H;3#7dD5FC4nRL7R}L-30aNfSH->vXq=q^F=K)A-4>20B<&@UJwSOjD5dG;mkQ zxT;N~zSF2bZXh}xHjPFIx|mie7CR8EL|VO=CgP5C?!cq+o1#AL1VhD*_iwsR+gWg7 z}ENA{AQcX^J$>O3zTF8CH6xBF(hY zvlMBTm7b?a^Q`oIMVfD=OBAU@&JQrY% z>xTUN+aHc=b9+Y*9H5=LoM|?VZZRx~Ck$*FPg)ae);)Q*Rq&u-eG!M8AeGJV7|@9) zNCQEiBq1kBWi#-sog|4TNdrO8p&@f@9hDQT zF3rf(ax|W#Rqdi2dr_`|=QZ%0$(63iRneunZ$jp+X)SZJfydIPO@y!lD>`%)hZF5q zV4VY2aa0hn3gva2DweN)w%@$D(~C3+kd0MB#wro0c6B;-tdc0`8H)D|#UEpEDum#i zGn6Pn&s4l;D*kx7Q{iyuoT)?!dY0lnOYs-=%~G7RlqjUphY9={I9X%bzP=wY*0;uo zxu(FOM;!%DD527xGCcdii`+50s?Nx|?v_=X-P^S(tRMcC&SjlV@33;GWAzC$BL*z69C zze5`fx`>4ru|#x(>0z}7MXaNsi&=OvOT@nDVYUXvtfQb8vVeswMud?TvRVsSOQi8U z19HS+z{ohlfMHwa=wHl0^e+q!NByFRA?g=0INBHAK(sHkVPJfXDaWG*w84SBxObv< zf(!%CYrKJIUTA}Zc(D!iT|yfi!HZR4N8t^Q*u^&xu?ra-sEZjR44^J#aDXmmAV3!~ zbYL#_JIiNL+=^h=_~(``B6gt{9H@&Gpw;F6t&EuLUVT{kyjkd*V=MT#$S(tHV7PzoCP}>ITgR#}2vz`o_Sgr4D zc)N5Q2DEYMfQVs;{i~&hN)v&-z$nM_;`%^5FJy2SFZQ7JrLexU+SZ@%scHk{0hUwD zTSR_~Sm9I^6%Pi&JVe&gxdIyttSm`lJFr5AQ%F% z$xwriNyh0!X8}kF2PETA;!zwjI0_jv5Pl35ao90tBzE}V>Cdy8E&<61lmbm;1EP_k zB91{u3ue|^&10Rb&bslC-_o(eX>OhCW<|~nYPZIjAg_$mGJ9T^eVPxF}aqHlXKUu(^ zECM6rsHvWl4QxB!lVhh1DOCRk&(T3xSX9+?1f8IC7@DB+{PKd(gj2PVej|hMT&QZJ z{6+<#!cnz1{oV{hY^JJ>_8T39{x9%V62CDd2*b8;G9>nK#DP1p3Ik`KKpZ%dD&U;$ z6Nv){4qUjzK9x9xZ+behPbUuH3oat|BH|Ff)Y-&7n>d88dM>fgB@T?FfD90O32_MD z^+IA_NE{fNQ30@EUrZdr7rT_$ml6kV007=1VXH|+3^n{6?xfQV*N`S6{~)P;kR)LU zLWKxK%0bdx&__u5BP0UVy$aes?g&W~^fx5#8%n@n0g?bQ@7cCi&&tr*(NEq zCn?FI{mDx0$x5E5k)nwCTcng(q}Y*0PYoZ9B7X zXa0ykhG+z{?_&Na)G8cb?7Nvi$}nJ`n0+7f7xA-$%zlvhW4sICdCY!@`HT3?F=ju; z{6#$NB(tAn{)l&leUaHuF@F(XJI(B;nLi@3!E4X#XPLi<|6E}93(OzmKPq4m>{p>Z z;|DHO2z}arX8srp)!}>g>&zcfVmf@!euMcVd=GREv)_dJjZ2_#u4MLG%pc+Us`iN4 zA2EO2;dJa*?R|11f%V!ax7jCm74%`*epvPw{))qLmBVs%K_8dx$7O$vb3nXNZgpJl zEa+3Rd`k8b{*Cjp{k-fi{2S-xD(B_ug1#inmt-&WcL4u#;4L`F;5WYGmGbBtfOxJ_zffr=-k+w_o~ASs@6S@I&r<4$_va}U=PA|Dy`cia zP+F#V2zgtkcrH`QA&uA?a0Bn9{(EV#2%GJt&b_oU(w@fMDYVyLANAYF-A!726t8Ln z<$-oQ|EXGroMA^O8c?Abk%G#UGwrx5s9I)dW~877%Y*HR-cYqHIm?cYf8CCVoJeAX z9Wk9mPA4(A&%nM$B8y0jup5d|^7n2xaCoCrQ7Lyb~ zFC~#nNsO=?mXdl)Ns6Ga6Ztx^>|c{gM{87k%GQOL}6!dZ?FK2cPnE)b%g)V22f?mnwmCTMlS`|Vn@+wd>#;+RaIxlKBix)cY zAd5Q4;!(zQ9T#fWVEDDh(GRwz*`#L(gWN9Z`e_K0>6u2twdzwC%(f<1){e#H?p z@QNd3@QaOj>cy=a+Thn2aTJ#Y;!a=tWOxb1!n z9=&}+`aL{FA{+eF6tv|6$w zT-7Q@RIG|OnN+Q_SLZ-<->X^|?=C@zQc|_9YS#b+xvE+>ziy$3byl_Re%(XSH>qkp z{CkAsx=^*A<$8u8`VTaJTxM;d`LklOY6@MSlaNyvIfm0{^*8HSPNQ+7Ym3w9RMKoJ zX@>%(0-FD&>7=6&)gscmh;$K4X&$LIk0jw7soEk^Z4pTlyTCG1Z5c@tT75Z-Th3|= zEx3xstYS5V*4xKg?qi+AQai}n9AsUsTCe>f)#LzhKCo!*HyfM&xN$pvVCxAAn!#F#b@opiO?c7OQ^fbMAcI-7g=7 zn->EU2i6m|*96jb0_ke?zjT;LdY~?b?Ty4;C$)r~@)v3Q7wL*nIo#^@VtT4+CUoOyr=-;t@VMG-bj)+lBSrywcD-s9^O}e zgtf9z316rfzwIYU=%!%Qh^b;zvUXbbJ}vv;xle{Tw)Yj;2hVjI9?cCHFh#inHNH=} zyidC0M5DR|-1dIvwVwsyD$|jaUWZwb(AVEFukTn8>T3^;UvWkbRP6`m^#cnM`g(<8 zU!eq`{>LlOFiQH(XPh9s`3#S({@TUMHuqdXru+n(ad>!mCA^TSYI)AQDB-vrL*y~U zQ#fE(lNzhZ3n&cWd?5jANhpH*^uC9^Pa?7JI^Ftx(oxVGNZ1AviL$0oQ`iS25~10k z{z=$I5{Y+|!9hpluZbsKj0Vp*lP57xM4|(vkI9pnCtf9hEtZ8XVv(qB!6C~+7qg0Z zD_VCZRbI`i31`weR(Tz(W_1=-d5^^kXVDi-{(^a;MW{P-&}jtn=HZV?5KK+RYx@gcTJi74)ev^B;cH5 z_Pfj%BRhD&11)fqc-^R)t<`0%>Gb=yfKN z##V(Ma-CE{#S1$Psr45D=K%lNLS3QPc}5yr6?({0R>`W+>+WJrtO~vUZq^(XIy$*P zR{7<6lzsFrLPlx#zg1Spp+^*wXknerArW&(v^dDjClT{Ww6MmWkccNF z8c}Ha>WtXWqQ&Yw!6HtuXmN1)jzxUOqH%TNl!H^5U*bnrRWL8&56HF9NI=FX5y27VQT>C?jcZX|=-d_!Tf8W!wWQu!QXdzYr}2vbxWM7GOMDNJav~~lh=d*@ z;etL&svITJVn;Yi;*XL9q|pwCv9*S9{``Jq;YDfvUGq$XQ2{*D{97a}`1rS;n_FJH z3y7OO;eD!D+~J|GR1)s+pJ=t8XiX7XcuH+gsRIE>Dwtd$vsp#7!E`rm_{Xe@aMNC8 z^{=v~)|FQ8XVw^38Xmx4lPSH`qbh*j^4~?kc|)B8J2wAK1RUS!__BG&U)Xc+|9c?t zR}`Qr{nrz)KJ@y-);(EP=or z4aQZf$AQZKL?gt4yGhI6q!HFwUisTJLd5c(Q27b`K(6r<+B&|BuYq9327v}UkgdnLefYa;ctYQRtg!k?=t8@{|Ao literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdatetimeedit.h.9A943232AF384486.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdatetimeedit.h.9A943232AF384486.idx new file mode 100644 index 0000000000000000000000000000000000000000..680e2bd0f2872ccb6acac7c52996817442e0c0d9 GIT binary patch literal 12388 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdebug.h.2855F0F64879D845.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdebug.h.2855F0F64879D845.idx new file mode 100644 index 0000000000000000000000000000000000000000..ab917a3a5b3d4cbcf7c9c3dc88c956def7392390 GIT binary patch literal 56828 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qelapsedtimer.h.8A5D128937FAC7B3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qelapsedtimer.h.8A5D128937FAC7B3.idx new file mode 100644 index 0000000000000000000000000000000000000000..8c1ed6779293a2232976366092f5f4eacb59287b GIT binary patch literal 3530 zcmbtWe{2)?761BjfbBac7dr{b*BCp$h@CpVgkX}GG|LZSLfU3YZI)`SM4ihec5C~> z`P`DVXc?L|6{M|$3axBxtDst$R8~#vI?AfGbZk;ZDNIwFGLbxxwu-DP5f; zsq90EbZRnTs3esu+!lEM8Z(njPE~R-*u8qUI;H9=ye!&aj9KQx@oFUaULOrD(w<$1s z1vfYPu%8#ohzRa-Yq`@Dgr%~VTj;XBH=k_&>FA?EDc1}OVnWPe3XIQP+23&V%zYIi zsUU=QdAmZUAU4iI1PS8TUm8j)m$e#+^J9CmAeUqOE1lO~uAiH4EhEbyeWkUs+7!k5 zC#?U;OXoj~NZd+{Z*jD&#Q6Qy+m6lu?Y%*PD}{Ks-R&|3x_|cSN0&am=8u(fw}Cq@ z#2uzUxAgMv@7YvE3!s<B>-T3ay#4)i^WQ5Y4(Q)yb-7GI1U$VR_x}8!O=q_3 zb#h*e_enlC#(%xBYCOLt^J9tgp}W!6D4}}~fAUnv8|w~>q!PMsm)bq1D0bgt3og8Q zWY1xVYr^Ea{^HR;A1G7*Byj;OP-m+v#r`h@-4}m5b?MA9QUdXk zO>&w7-A8`+^tnG=&b}>iwHO@~f`#D@9oT#LfrVH9y@CTEQb&cO))Z!SLf~+(AFBQQ zMD*0>0>?voYNt+9V0ys*RPHOw3Gwv)ddKeH+-tFjbexP!i>NNb-eNQ1j^z;UU}i8! zGr}Cq4Blu)cw6iytkI0H1~bDn4g$fvOr&8~xUz7*H0%j`i&}S6cc1`l+AVjtp=LM1 zk5$kLRT%PdV+eU@l|da>Bh+Cv!#VaeAN%aPr%(N8orR+vd`B%N`QvBzy>^wK>wuwk zm36JgQXljj^fo^GaTl0r9c{rQK$d`#j2*D#zJ;B_p+H5Sg*S6!DI^W(gfRxLzVn3o z9pCm{ciz%TXKL$!wDI65lyq-!Z^GcS|H!%zTHYDsMCw@XV84vaN2IM%s|PjYpAr~& zQ#eo@akwqqj+))%B&<-Nd3Iuj&l%cfDhP_S47%e(M<6-he(5b(2kvnG{lGOcuPbo^RgY$3~lf+J2D8g z!N=`*y>Tl}`yxdyH7nl4Ng{1o-Etcu6-w2F*4$94T5c?sY7Mn+C|TH7^JxD-H6UuJ zbxToeZ)k7Bdm_^Ip7uM6T1Q=nj3@`<2zT}4I7J!>M{dxfzGw>`y-1^x=%%7JTss^> z1c`Kb!|+g18>t-$A?QRpvSDNhwUgI&{eIxN E0jBsMCIA2c literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qendian.h.A9F85A81B249EBA5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qendian.h.A9F85A81B249EBA5.idx new file mode 100644 index 0000000000000000000000000000000000000000..13e8f8dcfc32ddb52dc168ea66de91f56da531c7 GIT binary patch literal 26152 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 z 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 PDs7`<+O?g9+{3@b1ozmw!A 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qeventloop.h.452FC337516C45B3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qeventloop.h.452FC337516C45B3.idx new file mode 100644 index 0000000000000000000000000000000000000000..8ef337c839e9a299d1126e62e36c727a93bbe903 GIT binary patch literal 5780 zcmbtYd010d7QcBsAPJ8wK!R)m91w;lR?=*3bqqTzv$fQl z>~`nKU@X)T`einAo6#ZM zfHPHdZ6;#_;mvVkiqSrwOgEYxh8EkD7Mp4K{55H5!NF>wt;OkB-O?Pdp=W44&GQ&LjqwltYijIDNusd=u^W;0nVDdmoo z3CRz|r1KE>S37ZB!)AkLHp4R8*Nx!L640!*I!dra|BS)h%7pP81rd8T>? z*f85GTAQ2A&5guLtS#ndhsj2)!j2*fTH)~ag+?oJaD{C%+hN?+Vs0P{jq^>_R%}kY?NWemvI84I} zw}qa6`z^k_@_3kn8l!YNWoJlc$S{KCAH91(S6Hl-6DjNu6^Ckg;og6uV<1FU=$E9X z6u3V(DK`iA-{}4+dwH(+L^<&dBy733T*(W5e?T|{7*x1Z+Hq;DUQR;5LAW?PgcoiH z{bvs@jL$z~P*8D7!q!S_mApU)V=7kdm)a$h&lK$0X0>^TRg5C1)D{*+#`g3^M2y+rTN3tW!*@x?9L zoOu=n6^XmGVl9KqYa;Ky-*@!GmS8Fc(~}pF7l_LP*QUJcz2-Bkn)1ipDt}clE;G^8 zy4nXv+7whG_^y%E`11mnH-8}7?|tCna$id2jFqsA4-?EEjSxugj}iYk+dk=ED+R^T zCFxwnxu9ekZtqsDmXlD(U4%Gd6ffMldwQ03@VNwbHNT%N2`q`>1^O>j9z0{&SJI)N zG#GudB-zzFf7==Qe53O6`d|v?_z$b5)!w+f;q&8Pynps?ry#g$|LO=_zV>pRbnBaj z4GJnAcgIR%)wn$Q+&{lbHb1k`8Crp=AeQ9>E?=bHTvryRdD)u;L*~llWr4iF<<|!n zUEKWZicJFJagsQf@vYx{Wj%j>ZvFBOD&&-BTRaOeFK zFGq33$M;SOj+PUXlaBlEv^F01+Fbj&f=WR1<0Rw!arx+<&fXCXEk5l_`NO4_1<5qL zaGU?aduc&w@}diVgn_!TL2Mi^a6h}@Et%=Wm;pKQf#pbXWB@PRWjz;gMf^W?;}sbd z3(1-0KTXC9-2ZG{M1fbJ?t29lh2f=1(p=%~HtxQ$)aTX@g51SR;$6A>V5P65EpgLL zUrGVdXZd8QdEt)!r?LZ<6YtgDkrOWnFGL)oG1>VHy+d>GE-6>k+CKW%Ok%WFwNmJY9la;ZPZkc+cx!vh~4x6DVp#+|GR9B0@Kq(B=>w<4Q_ZW^=K|6Oy~TcU5vy%|>KBjX;+{D)z4R5`4B zq*Lhxqg++4V3bGa4FfzONI4J_$2XX{wZ-R8gr9fRc;q5uTwDLIiqSJcn-t1!I`Yp5_x!!|7Y!TR&}@21ZK zOC@wk04gD&fnScu&@U1hv^qy%sEtJ#&NFHwuYnPc&v1I<-Spnj_)I(8JeFny@fy*5 zE8m!UB~=p@--drZ(sZcciY(>GAKFCDZosRD6baem_z~kmYNRAiN*vA;%_?c7YW6_R z)Xt;DUryTYn||~qzZD*ykToHAjxEt-R_}&OUbCNi4gwGwK@x=kI0nTAMCycTjyKT= zQYP5us1g%{R0-MTC=#c8Xf6HNcdI+0UAYorv5`5!2*;Rc8yOR(Ii^G-$drI&97Ce^ z$VS=SbGbb0?!Jv4NQSLTOL_Xly$oBetsaYEFl-H7BgR6&D6%F7M|}mAFKL?8uXv=m zB5Y{BCCaeBs<2+gaI1|jAlOM^DY&ZvE9-}M`{J3s3hZWQd$ zw9yO^#BA{s4NV@?o70#4%}q&dxwvLATaX@)u|uz^}QaA;&Z3; zh18vYKIq}n7=CQwieg!x$8_CaHoSZC`&SP`W@QPo6l@eHkYMLCtZI}h5`pVK$5d_K zCYnD6JdGU}`xss=n$;#~(-0y@;ugLN0dn});Ba#=>}2KS1gyPpXME*>!!LXW#}tCd ztTFe?`laC~Jp#vfBy>3UencZz)0Ij`b=N5mZG2XOHus#wW8zic5&h46F85 zyGRD^nIKIyvmVY51>}$K*Z=l~$MloOG8ezNs`P@#G$OyR zlz+KmhzuL!7ZZUL$FQ-%v06+$!^Q>2X%Qh9Ha<9Bi%(I8)%t5Au`CdMVnz-|k6;fG za2ZEespqz29_zT-4{aEq7N3Wf@a+t+%{`nE&2!7TC+fTRe(iCL1sVC>M^+ubG~Bd! z5gyEL>U{9T;>%z=SC=~pA7OZheWCNEg?`xiFp4USc8~NqdL7a^!|L^V1CFHpGab7C zfOd3EECMaV*5=ge@Lkne^LEPDJFX3S+$Mb4Lx*rLdd$U~FUu!H|F-Ko#LLk#q8jD| zw7Ca9YNLO-g!S|Bga2rBei$}D84!(1Qs<-JwI*y|=qCZKLXHG4Q-;k8%yY3NGlH>T z6jw08ov5PBqGE(tNR&*k!9>ABM`eh`hYpOA3_0!*$Hz#|z+?gj?dlw8JGAZo5F|oK z29w60?(93QxdqeuO#Nf%rNQ$2Q!Cmp-1g`!{C(pk<$u>;3qdyvfCM^L03<6@|LgmD zPr^Nq_ClBkOWdy@Ogt1mp(a&O_=4IJEIj@=g8t=x86k;m*s^w@F8!AWa02cUV9nr{ zlEs(~qrujwb620!92Vh21R;}PLC0@OOKHDA@VsZEpE7@KHK8^_q*TyZu~yC zvmSfxwb$Nzt$!WoR8>^$7%d28j;b{)6~B!Mf)GJ}eSWVqWhnhn|BO#spIz86Luu`5 z-Vm}aC+P}?^P9>w`yIAqja*Bg?WBdQwsqAuQu2R(N(5YUB?_@@^;B>e5hwD3;^0#+6+g+Yk zo9jE7=~nE1k2l9bM*6K)dTp)s9-q@sS7LxwWAo8d7{t1hRIhH3r#Inr2u@$A-L7=1 z7s^GZ>O9_+HkWgq;-DECNB3|4x~f{EU2!XrG}^t2;s!O>xl-}@Z7Vwk_aIw?sD4YH zPQ`1Z9VQkF_*qmG_!(pt7Ym)_4gKw(*EwiM8WmhsBfGqc;PucQRRiTyogEZ9jWZ~6 z8b{p%e)O-@PYqhm7uc;&@dsi@JNDiYJdLH9RAr5bn8prJW=CG(?bdLUJtH zAQ&l)8Y2wyP|FJMijW^PGf5mBq9s>BuIKfmg#p6rKlw?=^(>1dPN4Y??vS-XF!k%c z@lnk5lR34P;o<;8kVA)s#%SgRfy`fi{qy;)%?qL=F$3m{!ir>=zver0^PYvpF%}_= z%;$#WTC^eP-uNvCtd`r?Vxz_3q)^O?E!u$jkx@T<=1T6(aYKa>B+fKuhH3-EMlN=sm-BPs)+RQiwe!j|F1$ zmtPgPIMQ+@aVi;Kz!yYn1B@>#nODnhJeVhm(U`r~yfzlIT{oiNGC$gWmn0_B>^9yO zp$(WV#l6sTX1`~uB*tTQEw8m=c3xFN6j&`8hC6WtSVIZjG-~67H zKHoE6634;#Og=LPYi~c_b}IUWVw1!~h%0$zK>SEi-6Jo??{`Sz7>HMetTJKtbCV*! z{$_7@n<)EDL!5ZxZf0u#`*O1oN}lIO=3BJ^;$PO@{3`5V^E!*bNt_pwCuu|Q zu1>j8)m@vtcbz1Tg8A8ecHk-9XId`ft_zjy&mWF|L`73oPpUslP?0R zzy1E3OWtp~(8q;|{ZCJj`wWqNhB(1E#2^d{r?>XXf;C@yo71-F7MMI@av(U*&N@1x zzUZ_2EP_P-XN6>0v?1vK&c_b^CUdJ}mu`t(Lu9YI1QYw02pc}OX7k*YyCgA-Y&7vE zi#FhJ-|^*c=`4Nm{^25}9yvTBe6%(M)4|#KDd!IT^Un`RViGp#;;vDcf82HARG$5% zJ(8G0<~w*tj5a`AwQGFSJ992PB8gK-+`?O;v;pGjmz}#pZbkh<634>$dgJ;)1nb`$ z8}t4br;mh+ku^b^Rq&enAqWAnuIqOvLIN-uv-~wXVlVJe{1I zE=`Zr28gG8?~M;E)#pi^gV`0lB9KNie!K0u+i~#~i(sMI*&*5C+7LY2yCOY0OA^6GYZb#*gf`C z#L!Th@vQOH3(Y`(xu;2t()=I z>ACC<8dcn2(yBMA-h|MdRau8#A0je2l11{Q(%By^eBtU6CKs>*(>c~^zrSbwc@%ij zs1Tgr5n5_@uC>A=?9hdzBqh@e1CWm9tyri`)m z7emMNM#x-_Vo{-Bb2*wt>!^`zq>hSVF*-_SvW~JctB#6gu{tV_#p$R~Y?O`~%|`2} zcowgt5?F$cN@R&TY785rqsFqaIx2}J>8NCutfR)UaXKo6rRb>fY`l(2WvM!90-K?>_T*)TK!RROd z@mj3m&MOQcNBSy?gLUh>P09O1uZ$YPg3*HLvP+!lhpn zCXqu~)~qa)HF&^G8U(}wT+WZnPef_wa^a}LF~A^P_ArkTFz>bbWi|I)YfB}&dDgsi zl>1}tL!Rio_vs0-G&ifTAULAxy(Qd;L_buF+7eI8>Y;r z!gjF9pY&zZ;Lpx8eY-Ba{9-npYPK~y1Co!;J=nnVq^)9ju(1=; zRslTNtFu$zUUc!ZNwj2HNEr{5_5nyw?y688+7!%`mb(y40DD?V1@ur_kP#Kzux&{x zne;MmENUijzCqORJ+y)E=_RYU9&9`=vaRBIu*1IjL&&j~y)|S+ts8jYQJ+M4ua zZj}|(%q0i=%OqAqxeU}#2#|b0)Q*=~2Yu8au=G0Lu*opv!dM_HZ z@{e5&F8|0o6jQZRf)Y9pbo-I9nVg6p_hAlh&NULoOGX3&MbTc5I&fqo1$(I=Bqh&v@ddEZA*Kz@2_Vb2%VL*j>?~p`HbiRx$I|tBXR+kyI7YI zXcKjb-j3RXBIL;TbaHCbiMXKYB(~aYf{pVFJSn&j4@h6_KB13oQ$`u+ItQKydQQ?; zdrj!0D3gGOL-?TW6BRur5wYQN5i7C){t%T|lpdt?XobtgQgJMx458HAsZ)@!S4$T=mwu&stT zWWlqWN4`{gdgKElZ8v@L6dVATJ58N3x=d6~Iu^CR#>yzR6lS%#1{=kP*lJS^cJ}P2 zzWHo-**=Os7kD7&-}}zT)f>8g^;qEQZGK#=z;68$q=^5Fcy=5F3DZBQ3w0oH~us$ z<%Z{YV0%kje>dlz|9t#%>*3u`oWA(bi94P!LQZDXh8||%{}872GPorst*wU=k{iwz zkdZuB+k2=HG8?xb7uX~@e9wvN!(MusPK$-GC_D-v8)B;;0Py61gNUuR{V-X&G5xc# zhnKucFHy}$U;`PF1L_9=unEScIf?<}uopT|wM~N(uqn+|zYc&+FmFP~6x=)jN^(d2 zPyi)-BcLFv-v+>L+;^yX{_S~xq#L-|5VqM6a0vPH4)=kJ$c*|80cNi3jXD3XX?x!$ zGdb3rG<4H|-Q=+PNdek~e8(-yg`>dqq@;dW2r4xtHl-qMq3%#b^bo3Y-{uqX!_Iw3 z>#9MY|`k2_c*4$KdQb79Ty!wp-D-~UIyxDwA`J8O)Ppa))Lw@4z$Nxq~ z)H(y(Xp+c?`XvKKaEHJ329d7_L#UrNpwHxz%97bgUpN1>VfzQd6ITLH0xv#g;&9*D z{8zsCmf+!Cf9^iM|C@i3clv-B>sk{2{Z#W+Vy|UuO@P%OFKhYazdo>CBlci`_u>FlJtxS2_3CQS-f z@CQ725X6HA5kWkwpdLJk+KX55Am~L!C|*4XLKWYbZ1mm-3va&p-uJ$J`*t>;%cau@ z`9Z#3=7vIwcEY2LiY}xev2oxaDu!HhTvN1yjans)8Wv(LagAd}1=h950 zqlA!9mN}tSxDg>$ipMdTF=WI$>K!6Wj4g~DA(3ElHQ<2zFch-PWVr&>D&V#OOwtRt zBG>vLFzg_X#M0K}49u?-Ej0(VC1)U|IImZvG8#-R7r81&0+t4?$S6R1wY=B|>z5-yT$+uf-1?>Zus$qr|aqb|oub+tK}3{t$Lf5F|}@h5B7pPhA_?#uuh*xqELi=ASk z{`r{ixS4ckdQSp>_$qeacfQO3JBzbJ3H;z?YJGG1N(k&ew{J%R`vb4P5AS;?0LCtE z!HGGit6{21KU{eDd*h~m7qoj&Pm6u-`PJ0DOLyMdmMH5c+CRtUCf*F*_z2qlZvUvbNDjjGGxw;xtyTedf0!xUm_4_YxzY?7IK^`1Pw^&;2Sp6);$ P7HWk3%bU@jBnbThhL$6k literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qflags.h.E597625F7229645A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qflags.h.E597625F7229645A.idx new file mode 100644 index 0000000000000000000000000000000000000000..6c81a6d902d64cbadd6215c98b38dc9ce7e2b8f8 GIT binary patch literal 71804 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfloat16.h.0177AFB713EA8EF7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfloat16.h.0177AFB713EA8EF7.idx new file mode 100644 index 0000000000000000000000000000000000000000..51ea23116a23cb720f119646ce000ab2fa7112de GIT binary patch literal 28670 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfont.h.7D9F66D042F7B11C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfont.h.7D9F66D042F7B11C.idx new file mode 100644 index 0000000000000000000000000000000000000000..bf431e936c85077337607bd232a386896b9ba338 GIT binary patch literal 22514 zcmd6PcUV=&*7u&_sQb|Nrig%`DE0<+MTyw37sL`{j2_?!M`?0E#ja5xiai<&vG)>N zY*$TUP1INtjWM>wnrJjc2}ZqF@3+>Tv(DZ}@B97n-hW=6Cv*0!S+i!%nl)?M&-CdM z8~bp8B(+cKGA7NMZ81rbz2O7@YE>K8FetMUK<*l;DRvi$ z8Zirqpq-2I^+=t!3tZaKic!&eVQeUOg+s0alWQW$8PYZ6lX zWdc#Kr03#LWhbUcZSgZV)he}1wIq&^+GV6BN$o9}wroqPZLB5RmXZEO)+y1+WtG}z zq$gR^?a&N-Wn0H&uqI|?fn@D7&8D^3aZIKK zL?lTa$7E+&93=SC1#1PaY~5|iDcMr2CC!#s7wk^>jb+)BvLr;2VS%+D(tm%nR_9n$CqMJ1< z9eADj?$+#VYnEf6bgHI$4{MSwCr#>sinPa}>yeS3VTUobNOw@m zoh>`fk|~Ky2kS6PPHMJm&S4NIag+@@A^2l+Qd3=vdsxu(L}||q*D~ly3b-HmjVPzl z5V^PJzDs^ z#uF9w)>sp}!;JcHP=RB#K|QOJyqvBQ z55ANN2C_@W-cb~B{Oa5=AR}-l87LTJw0>({b$+>WbiufjDEN9>(hTimkm{MCxwKZd zS3;_7WR63ms}QH@G)BtlJh}F4YnlWGmHMXG(xtw(G^<_0(Hf9tgUKrOOLYl7TGnZs zeh{ZzXHh>`!n9xt@vFZj%VtSPwYD8&h%}DT5K+{~}KhSCH-l*d+Xkt_sC`gbJEr}^GUtreSVdmQ*@3MX+rdloOIhhjvX3;Vr za>n735;M{=Em_vSDOpzQ081|A?Hxx#)RB^;BoX+;`U1IZXjZb0u_R`TfHusr5=q)e zt~5-nIN)b?`tEN@1(zLWOSMKtL`0-yq*)^@IpB@yDVD4(YieplTy{jW1}z#yMkFUD z4r$gT!j_(xnv-M&di#tlYs5&0jtx@&8zI*8B%3Auzms7Hjjc&Zu<83RT>6|4Kl1a*i!IH6y{2`d^6|ZA(we7!6)x*Tm57LK>Epkp_;8@fbga4?y5~ zV^3jAw`nW>SgT}%y;N2}`@=vf0~bWajo71|JT$j<;q*23oKsX}=VV zY!LIIL!0tuBV{;tCX%*?iHC(p%FF-@xqih;BRgAQACqNGg9=9T*ny^P zbm_N;#Xf?*hooV~Zq3&AmGJvUOazKHr(qL`T#osTUt$7lMCWD^b8p8@AUc*V_;Tz4 zk+ZwezFOX3RAit%8GiT14V>0x%sBgR%)}y}BP?ruge>@$wv`v3V%e11rS;pZeP-0lSByq;UBcafOmVTgMwAWJ6xVD6AE#sHoEcrPw zJ3pa8`i3(IlW^}g@;PA$k$$QC;H}tC=W$aQBI#6cj zbTMo#V-LK?U04^Fq4@GOI?GP3?&QJ55^i~SaLLmRiXt_@rrOEv zyhN%s)i+Nw&suBnkZsX@)iP3fWU`no6+}u>PM+$pukh24R7Glo46Wo=&?`(eDcvWb zahBXv4?G*&)hB>=ahiArGtFRTk}~N2gc|?;Dal8X>?mc7JO-p-YV7ual0TjwsT#O${*=0pK$k2ctw(Ow(GwyPOCgSSmjrA zmXEplW8E=oE`59}s6j-i$}j0G$C&vTD^F71jrgwHgQ3f+C{j!8`UrUh*auUs+dZdf zVL`}qfoRAZ7P9Ew&^>kq}1{~%oDd-b+faPtbiQza)We)(I; z)bKLW0BkGMoEa=qQs()&rtkcHeqFdCRYZo$a%DxNT03#mG-bYS`=RYxy_jl>Q~{ZW z$-{g_sxgU4^LL$$*yYW4R#&8f$n&oJZh4VvJiVrBf|g#6>AGQ4F)%eprVu#<1Yv4y zZG>q+mc5#}h9YGkQ?MKizKp4nDL3qK>2JeBYpVPR^u36ca=%gzecQ~`&8!0TZd0F@ zd+$AIQCsC#bqk$i=5spBni)SVYZtwyb|BxWv#jQ()!dV$?A^RS^2@%9>KI*qHZ#rE zU4HfX3J1Td9@IdQqEVR^atrWfOf{9o#3`=U_n~*f?Ff}W&>LFF%?tHeTw{w@zv9a~ zA{D6#iWw=71TmOuVjMwk>bWN~YW!K!NRhITX|OyP42`MAN8y%joC?QxwD(RYNqm=x<=cW`!;>v9O-f-@qXB-7K$_)<&2U?1&GwB zQMYM-{1P+tT$IYc)#dDE=Dp0HO!$56t~=+vyRMbWx9Kd0dF#Wxv*a!!^G{jV=Ux3_ zaBHKL3z?}iXWux^oUmZL7inKb6=^e(q!S5 zq6s;bV~p+0VqUZKcw4(72pWF`&hpBOto*o(8vdY=Qc8b&tncB`gy!H{YqxfvQqzX7<;O|?6aoqd23IV-_m6r zWxhvQWm4(cF8_T$MxXEL&F2D35qrQR9`H!|C9ZBMtv0PcIIOoKMIlptxjrb4siwHY zQ)iW3eyoLgS)3xJBU6kV<0(?3p~5q~OT3fX^-=i`x=KaNT%?EIzO!EsThyz3ydtHd zoKQIw434QL#}Vz$Pxjcor|Y_Sm4B(}y`QW5dBq|oeo60Iy}jPuRQk_;Wuy;K)Nu1~ zm|>U_LxaHUzwetfqQA;FYU6gBRk+P66*2KkT+^ofvx3*_T?19VRabgF_gv4N-uBVG zi+_EY(0`E1zt&kUGV?{|+|`6Ok<0w_+p70f{V^X@%QU!0$xr1H~xYlnEuA>NBZRC4&J4voXQTUGvx&a#YoF4H}1PwO_n zFE%$!R{1QQWidA|)}wrrcTzv@d}Ud(BH2)z(eh{r;Fub<`A|yx*TGGnCzs>>oc;1C z>mwFQvHW+KlJcPSk7qzmJCqYCN5ag(RFmVFIe(4W`u_Zdal=)9Ue{+8Gp}L+G^Qz6 zgPWA5Z5yFTby3a~CQo5i=+~&z-MC&Y_AD`_DpDvic9c7+BGs52;p)_byMs?ewM+;(lE-LXJsq)WsmQ&3AleSpFfe%`Q>vT_*2Yw0a_rhd$GktRT2{Hyic|@i2FZiKLYNvm zANBp>6D#hX8?ExQy4q`*d9Ch6zLn?BFTI;LrYuiGIhUEoWd@N-{L;AHbbA#s_d;T> zB2`AFPI4z7k!p=OhNDm8AL{SwUw*8obV#2d#oWIbroGvtjC76VYkPs#XXJhvKTaE~ zNP|#VuzxUYN-@=hIU?iUnqyWkzqNC`A`L~R@$z`E0j3(0WA+~yyzE?^KffC9Db3NA zkZHWqG+wueiC=9A8C#&WnS1|WwI3EwnILp4Vv~8;WL}+qC9}K9sb1fqyX`Y4#Y`?E z4ab(No2$bN#*~bar>gaAKFg-~g1f|1ASh)KrK}~f9PIP&fG0P4f2c^wD5Hnm13VK` zP5a&-YC6TuSbz1|pY~}g-=q)DB5q!!&)?@&WBS}0S}reur{Q{hjfGxgVf0IlNiEve zI=pFSo+9~UW3h59tXP;D2j|ewUI%h^CFCoTf=qc#&SP*y6u(BB{;{L-TK}CBXR7=k zx>n1Xyj%~KZsne~9eAfvp~`3IEZ;G|?^qSmsa&mu_5G`THA|72VsjC41gvV9YE3x; zMyozc*|+Y|3l+(VOg-hEU?ohAR(dqGoVz^JZIL4RB2y)~68Jf$8k56YYFC^VbgSCh zPZTK=nJW5Mgw+pIBhz<%?cU24u3W70``RjbkNMqWpqBV0%@6sGVVz8O7JKs@8rKZ2 z&fwsC;+MEuRb907V2I}umG9O~u!@^k>E|J{rBzg`4?=-uh0b!2nGfnqTzpn({Q#fO zmnc#as+}!o!%V8{hY=dox>Js`3T8oFZ;6(xcPMW?onz8(`Ix>L zx%B$`-tx%8<%$%93OAG+!rG3hrm(|@ibm!9d28F|<;E@c5$<(_JFhgRw!LU=l>2zO z%D3w+oo4E3-COrcrw-41&~v5AkLxUpn0b-DQSX+iRH`-UF|eG|SynLf3O$lO?lkdo z@HcbUsQgErWj8bL)>-^BKW%@w=FWAB)C#*)Q?3c&A5&wOn#61`8#4I#I+Z`vJn#++ zzQZaPG4V?_P9Cs-NQY+f21Tleq9(`_z)3MRj(LqqS9!0V6M-olnLcFlhYWU6;@8NS z_GNRENnslmX&5q2W%5)8z9@c;j1T&(dVV73#%4u&4;kN+--8}tsxdjdsN0r(x3X^z z+@eU{$dn`}0TZSglQ_ix0)NQ&Fx6 zha*fiF^;Kk?z%krpKT{^SNZq4oCC~!K)3qi*Ht}F&8@makvgKBMsg#Fe3)u-9F7!z zW8`huM^0~?v>2l_AWuCq|{CU^w z=V$Jhfn}G@vXYxu>Om;~a&*+dh@d?#o7O@%|3Wu7=$qZ7&J%Fc>Y*+fvHVKxKNP7w zDpXsp4OR{&vute+4QPv4`CJ zkb^MsOTHU?sln-EZru+lQVKHll6!%FV5*67ERW$i<1Zy&Ed-_-$TW?~)6jRtug2&I zkR6it&wX9q`)~zbteasjGtFgXsKNBMbq^eT(eMjjzE)@XjH{pVs>JeFtpyLoOKIbun{Z)joc<{K`j_qK+$41j^_jcK{if z8cj6o+VP{uNA)|QNL7&OeffQ`52hNEV+LI~P^b9d^|TXZq#?)@Z;ppm4^z@+UhCHT zN7d+X(ir#VFw-3U3L|N0W|`-48K)JgA&Ll-!@!|2)!K2)p27+#L&vV4d`9K>pi@O` zJ~Pi}a0e!Ssj-j0Z|yTT@AbDTzoB=1KQr&weR|!`9`}Zf>3UY>zv(Qqxp_8sUPg}l z>dWLhzf?M}@;y4sa_+HQUlp!zF0Nkss^Egk|Ik^^GWWCkWFCL}=tqU-{O?u1L1&rE z&2#mJ7C$-C(c`z~7gb)Uv&`q_`P{jOOa0>8C##P4yyz+I)AyUPbsMZ3a$uP_);@k<6Az4OlNS9}Es zdKU!+`3Hd@OpRl);hT3-%0#xku1I0X)L-ro8&6C%CWm9R+51<+IG<(LRsLA-+j{1) zUSFWMO{+QoXxEoF6)6Vg)RpVPwhB{C4jtAidGQUaC;Y7P3m~V69pLH#4q-_AlHSK( z*IKe7bLua+WpZA@Z{(gEx%2K})P!Y89V)N;MUnhaPG`9@xDTdUYmTt+!SYAl22ME) zOz$I;UADu7$5dl-%wrGr`K7-fB;Hb_>c~_@t^(m6Q;o^tuvePhxc<80`a3GmMW!d* z?+NbCHZgURe(!c+li&E?-x+hij8q4inwy)$&H+>Em%8NFl!pH*0)|9n2s8&mEW?x- zDqXI4zx#@JepmT1z2i%md5PZ0jryApemk|@Bb9%nS@0G2d&S`rbq7;-=x57GvFp`| z$;Te6{IV|SI5QvDS;{TyRds5|gMTQ}U{uB`TVbMNs`Xo}mO)+EqZJblJyrP^x|n_3 zeV-ocUwrV%^^r$Qo+?rY6jM*G2X2U|CdM)Bg>yghTmQ0Bi6TWJQ-YiTZDDF?t8HnA z@xB?2foBZzOlI7eS84+@Z_vX+ldgfqUDl5N%a`BL zS+?>DTlK(u<%`eVuTR?emm)R7<{HQiz+Evl>fL4Lfl^+!Q>n^N>2khg<}dZl^vbip zcI@?4t!FAfs=pJr>U=J5*54}MqO*L#%wI5PT%BG}k~i$e*_Vn`8?_0N zgTO$TYT7uQaMG(AEA4?T|EcoLAg72u=YG#QY?rn(b-RAqQR&LBr+Q=^c&+l2dTWQ6 z`H;?XM~S$0cGl&8D^hEeQ$wx+V}_}*?|??M->54|9|nvKZkOgRFqDx3@YC**H_2`^G*w+vA%1 z2SIj-X^6X;`FOz}^*etH*%VWXyZ!$6{)7BuhC?>pl)XLn&3oE@L(d#PSsES8bdZeO9Rjh$8s`SuE52;u~yq{7HdOyV)_;^Zf z(32_B@uigLF^OI8=T02tjpls7O%He&-7eGnDYhY=O{oofHpLS0T1qAKT8gdUQz>2e zlintvPbv1%<0+~n9!;qU zdNjov_*P0CU;MR4qhT9=^u>;!nll1Yhl6eYN+Wp=F^jE178}Gt)yA5LU4Y zt5^tK)B@oYGo6BqaL4T?5YDiAXIMkJGzG$0W;)Bvv@rw1ITm=1h0=2;y)ff2Wx4UPj6HM2;z;*KoC!$E(CQpD^IVbP(|#04IFcrI){~~Z8C7c zabPZUH*m~n-t(Cs?SO%!fJYYarh|vf+))s;^BNGAbJKEerhThMsJNVm83-$Q@Csg; zUdMrBB@bT7E7Qpg2&;I|Dqe~1i-53(2d?3v(-tiXi>U^Srryt(tHt*ov<`%L0yv2PU?K}^nL-{=B0Uw;` zeE0ai;g6w}Vjfn^tJ7=&!V~WKg!|Br3kap$vy}VLdpHoDbI<48hn7PiyyBj(xDRcO zfROJNmG9QZpjd%hlLEJv2E_{9>KD2-BE^=pXfb!onWI&4Dt^O#zR`ma85t**Kps&4 zDX?(xHG~}y9Yho`j{+7#%MBqA&{+|FK-)k99UvVM2NawMXn=G?8PKULE`LMC2IEdw ze>>_C>Ht+iumQCIs)SStsY@q+!W|$R!VL^;!6Cs_=!Tpu4VQfmv;lPu>IoPE5$Z;^ zIuVzaS_|zqh5Jn50TdW%redfNcm%3Lcm%YlfFV!`O)RYAI`{b2t6g3veqZP9t`jf; zjfHpwT8QdRoOGgMzr+Suqkzi=Jc42Y!4$9+fli?I37vql5R^b8On?NWBMyNE54+zi{my$iKK*aYN9NCMsM6C42zD^Lj3GMMir_k5{4^~qQ7pDr~`ZjOe{L|0m{V4z4HXL-D$4&FNneLf@u!NhIa5G)Z5qJTGxCUg} z!{FWpu?i#{M0EA&>O(t4$gXFm^~{~ltU%bn{5G&4Iyg|w!(kKq3KB)I2W(uR9jJuR z4rp}*IgkqwzyYTeq8ms_X!IEmdB&^KWFn9Q3J?GXdIBS01C}73fjpSN45*C2Fpx6j z3Rpwn7s&Gnw19O4R)Ol2zgIr1w0%lXPteT2tiLbSfNUv~OW}a&_yfXoraWgA4TKj= zdEr8M#gtbrgj?L>mcD-h8MnE|Z5P6Q?s4CRP|T%bfFSA3=DSJxZbm|Zn^fRJD0Gtw zbpmaW-JrPztn30-jyzr?_$^@mL;ynxa0Z!!KpAL4#A47CB^(CQV*rFf<4Mp9G^{{e zkR(D}U=0LXP*5e11=0nuf@*B))@Ix057))xY`Dkdd(4;Kh=A~j`8{HxMCkGH70ED@*>Dj`$|mIyEimC%{f{f+%FY-#^* zoIyk8wF>MLnmHJqx0qEbW;MvpKqz7LOIT9_p_ElAWwq%En2;{mZ2@qhZWF)-O9ZZk zN(k42o`i4~S~dvEf^Q{+gR!b5Gid z{i|Qe=X*bGoq#6^u?XkPm^b9)q|)CB`GSfHzzYeXO&e|x95@$8%LH;kRT0}lsuHdR zWeGS7$s#xlmIxFJm6*G(VWpd+hv{b=+F}sC1?vb{3)LZ53$~AF7HXf6EGDR-Ay{-5 zKf?Wv@XGXB2=+P2eNO6|OCUVpRUYvA6v_zkf=wXMg~HOHn#sdP{&>fxt4o`~yhbf9 z{n;gOIL7toEaW+>nXoyd=SWNC0UDvnbJoT{c)>zmu$sKiqz!vQ??wT~3)bWXYhxhX z;(@n#I1K`D+~Se9cq;?pHV?eb!wp;M+dT3%Z)G6lyLsii1sba4yH(G3i!=}l+`J0h z0u5CP+^QG2MG}GTA<+5oV#n!vn|6kLFsu7;-3)`z_)PnGL6bB(T;iw+@DGhz;gpt3 zw~Tyds6(bBSP&XpV1j5w2?vBF2m+#2fLi0Am+Q&+t)nubgir)RglNM+ffp4Ocpy@A zNI^lpfGG)?7)481_YxLQ0f3M~SVsVas16;Wu|(j4sHDNQA)hRoHG3o;$X~ILSFCFI zpv)G0{hsq0p}{NG#6Y;u1Ml-nbQ%JV`@GJ59%&#Hx_K44`MD4(7s9YQUit`zgxy8- z5jpOOlJZl0B6nu#BStqhgh|302t}eA1VchPqK{~)JJ|NVcf?n7Mxi9U;rM9lgf8Px z7ym$rB;-dR5*eC6NN5^?JtEW43KtAD1mK8DpyT2Ng;;d@E##}nrH zgee9>32RouS{ewYtWGJbPvIM?JZJ5nvsjmj+5QEKHO#|Tto19_#xO*ad5y`uHXW}( z#x&k&8gJ?ZBO#&PG~Urb$m8wvcr5J}p-LW)&*S|KgaY2YfJYhb9%ga>S-b)vDWJ-1 z9x$5+(K{Ou=J237JcKSjfiRZ`%;iD!Kn8?)+|UEq2ouH=_vD|jXe;Ku`0({1G!f_USoYkZ!AM!FZfq;jR@76t4rDnTR z#ZxiB%x2-USp*%p2{`5k+8|zxUZsKYC9m+3S2f(Vyylf(^E$M`(~x0n0z^hVnKW~1 zyY(v~reh4pn|$gy-L0ZcT;~=c%5X1=Kr$Ls(Bc^{|BMIGS;}19xKkxyOF4(AFIY2YBTJJp3=mvn3E7 za??XD6X1YgYuJ5(R-^9IMLCuTkQ$XNzhE9bbkl)ZI1E?dqD$Wn5PS`_N7NcQ$%v27 zlnsoSI~#S!ClfN|;i+@)kF;H#jgroBpL0Br+Q^*$YII(m!Egyc8!xIu=r=Sng5C^6 z{hIr{<{>n)gn&b35cozDhCpvfN30vs>Bxd~fo&tdBW#-&D07`D*I5Ah01$4ombY09 z9YcU{heh3CZ3&G8gx^@eZ~BP{2oG4m0~f+W7Vyx8@H-3m-G%U!m4C`Y3=w%cFF&1! z(98v)(|NV&ysm+e&ui!NNJFg5=gsnYG!dYe0-Hy@q`Ow!w+cue4F*B-&=mv{k4gxM zhc-h19yu$4@34lz+))j}++hub+EERH*&!X#b+igDbs+0dk^t0^Bm&f7iNMiO2}OS_ z5%4)GA^04Y2-F;vH0-tg^{?~WFGq*-mb{(U3xuXay%0o4E=^lvl;nD?Oh;8L5qLRj zgHE+L4e))BT$*rnSVO?)s0M}6Hzy9k>ad1D(@_mV(_x7K(NPJ3=&&bbYhtUE-usRfuXgV5JLee2!z~`uhpmSIv@N!hr z^}V_`$Ia`p2|I1vJQIcvYan!vT!dhANJq3BT|?7ai>43=IWh$y|#q2mIUIPidu zv5%Ni-s{!PS^Mz3GK&SxV%6v-7zm4*X)#j>3I~KGtl|<@gWxhi*vdV&@&JQ{wsDVb zJb;26aBSyM+j&Pa2w@MgQwTXEPwQa1Gi>!9(?N`5r7WtHb*BB))$>=n)qIh0P@m`Y z3QZ72l!eGd+PBaq0pFDuuqq2!eY%d+2u&BTwg$p}UVlGt>9X~xcYwE`tp~^!Xht$6 zp&7AN1ToS=P5?%v3)CV720|>N@dZ$kWF_pJzxCUPix0nfwjzJRAr`nrszI&c1th{1 zi4HxB^N3UFnHsWNneSFsfi8`Ju#K6vF*Ch|(4b-y0@g^P?9+ek*C%qz5i``e&H}Hq z%7$&jb=K%QYiS_dV1YMWIBu}W8?3p3;|}w^!-6O%gV18ute8a`HU%@dJcBE=T>*|+ zJaiVXM(ZIE=5W&-?m>s2IhSV)oM10LfA-)8AA*>9xZ+w5E=V!F3>kBnKl3)$vrkqfls7M%qHEE8M zf8xPFfHO%IIE9P16M9W?-hj~CE@_Ev8G}4s0O%(!3jaR_sd+k(Vu`?e zQVBhiqn8VqCzTMI0P6^JCza6Q6-xxDlS&BGi6sKdNhNewh3z;XoDQ{LPk46j-FD7h)UwBe1g0ELo~ zG>UZ=H=-*yvO@f+Lyc5{vMjWgw-lxb!iA`)G^i~oRma^h-i=K5Q+kj zy~rwEWD)dU0)$JXA5tGaX|vJR zYQceGbhc~E_ZkbKl9yM;&-_{1`lr6dprb_1`sM83H#_;{?Gl3LphW~Smn=faT(k%R za%nE%Bj|f~+^yvP8oIV{M|AmUWK8q4A7i9@JF3BRmB9;ggE|pCD zylBGtJN9Q{eswBgU1@&Z8T!G!Ge2AY#&%rYjgY%2O#pUD8Uc1O0wYeBrWS|@3Ja=D zQJ3z`&^`jDO9G&t!0!^F;=I^3znZrE>+P9y)Td<7>IK_gVTsWV3F(X434kxjB7iSy zhqzv{C}?+#H9W@Np@|It535uQx}QBO(LNMEmeM~=fbV67@8yQ?#fI-ChVLRaG&+A+ Y?{O`^EV~%u!cz7rT#A8^Pj#OE2T&_nE&u=k literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfontinfo.h.5A04B1B87E9B68F5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfontinfo.h.5A04B1B87E9B68F5.idx new file mode 100644 index 0000000000000000000000000000000000000000..0e049f7e4e1f7bb3880e8863dbff3663b8f3fb14 GIT binary patch literal 2862 zcmbtWdr(wW7(e%VfjzsI$FeMsby4I3G0378NkgLIt4XI&^0IqbE-kyT4`3Tm zF{b{|YRYCRAJt%vBQ-S|mog9^yqk6B~ ziJVC65FCLTA>e344MMZz4xt9gEtc~<-{@@?c_HWzh@M8l=M&v-eocTcEhsA}ZGDy9%nRSdt|T8llO`Iq2~HiG(yEq zN4MA>Yoj?@OJ?$eO-hp zfOnobOZ{B+6M^FaPGM8D0B=y79sOQENZ=HJGZmR?fY;`h7}~x$_$Wtf08Uq=$C!`p zOVGM2?KR0X1+bRUCc^4t@9qyJE#JC6fhMhj)jD;0_=Rxz)F>QR|C|4j&P#QhIC>Vz z+`?J(;TNp$yJl~FA-$%Fqty`JkYq3dTy%L!f5F{vgB%?Pa6Zo00lZdrtJ&dO3PFz*#se1|MI#VmEd2^l^?> z0i26-V|$xk+;Xe;p8d>}gV8XW*umt?t<$ca7#QW~L|C1-C~qlJM#^b3n)h*G{ej;( zIvLaI_v^v&NhZtC3G^@N44{GF9|< zZU3~EqF7vlO1Q|@lci4KaEZemLWxrpmP;GV?U&9E&HE%Po}zIvDvkxYH@+$Uk6&L0 z^X_1-@>q1qt~QB9kAHUm@(W8i!DW#QYd~FTNx{cHim8|Y06y= zO^h8>PgIf{{N#;U_KgVkLDcryzQuKyG>l?L~RNJbmqI8KG*NZ!CiBVMnr) zEEup82nI3BLIGwF3L0ZsAizvgv0CyW6_5+ER+b5Hx^ZHo-SWeZC4_*b%7G*LUb4AOl7veP1wnO}(@n|Fz!(xihFEMc8*Gy^quOYM!(?%>rZ^S4!AiFrzVqrkPZ4%`Or9CoLE_{R zWvv4~c-cN`yl-(swD6#Jo=461j~?uIks!Q+8uq-{m@Z zD825b6-`ky93QYHZ7WMBY`LS`zU%$g3Gjv>U;Sn1))XG{&1eA-T5<=nz(NpMHKQ}& zNN8nPZ^1iKlW;Z53LgZImWBg;C2NA^eQ zLOpeK-RvA#QgxVSaSD^7f`VpoDwC=LZ9R8-X!)Ew-lNgA(B(I6J4cnfj(tuDm{n#D zIu_)f5Rhda2ta!i^V9<4-n!aYbbrqk62z*q>Y>p<^@+Ev_7DUZ5wooFUZW?9|A ze0QjG`!M?8`iz|C%un$DSo-zY3^VX2LF8`$1R2>>clp$?aElO}s@mi?s36y>-{l!^rSP{~mACy+e+7a$k>ivR!s literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfontmetrics.h.6FB4D77108AC7E22.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfontmetrics.h.6FB4D77108AC7E22.idx new file mode 100644 index 0000000000000000000000000000000000000000..0c873a92aa2df9743ffd96fccb9b60f3ead36214 GIT binary patch literal 8750 zcmbta33OCdwypbkka{nV-9!Ln0RG31{AR%Ek5Db-cZ2W&*L)ZaD8%DQVf zdbaqL7BPk5r@@TW+<(0sIoe$?6Ykar@>;b znPzj?%bW(Q!D@4B*eV=Wn^jmcEOu1bvP>pZS#_n&WNxT;+N#J-ovot6G|OqqNXtx1 zH`y(gg&AW_jw(wATsE|;Ysfd8)pc>X z27LAUMqkNyDrklWtLqJQ-iq~(Mw`oLm)MFLoPu4y%v@t|x@5fli(JiPVtK!-wcO?4 zca5eP>Q_{jKB*cEW$jy^QJkfNxMY;v&w^*FnIQ(Fd$2$I{ik|X=J;?aM!X^V;g z1lUclj=%VHXCtwbpq;Pg>+G|;3g#?)yl*g<20`1QIykhCbWGg2d{)vBE=7V}tyYJD z{bSaNr9RSvMUG(ZO5_f%Y`5zr7-M~_H-<~GV9!)$>a+J|X0F?P^v!r5iP4D$1_s8sJ`9TMh#4PP5Zjvgm&g7y zg-d~$ze26h_il(Cbhf(BluG8oUeA>EOrM}AuzACoXMQ)*>tYJj0{vocItFjP>GS8Y zTnd7Iv)Zh)=k9*}&-*uhG>$F?t4}s2>rRnhc69ZFwbzJkgmxSAZDXPO;p8uB{Bpo= zv$>Q2ftAd6CG&?s&r##{&Xn=FTpA`Bc(f8d*!2N+OyL^;zMj4JaY=)I7t^|!z5?Ti zyY7ph(>}q=HNxaD{dg8{Yu@g+|3)629@d{|O!R~KmAm^^e|_@&L^2QdWNor;{MFXm zXTE=PNeK`}@nj-uYsok4PkZe&GCA*N5ls9AlQ&-#YoqOfH3D^_6O+ zuD`{{SX^>-<18*E!u)jO^dKy5>rtQ8X1j4dmwdp!$9RwaDAqaSyL)qv6I(y~cIMme zIs2Zg4L*DPH!cW~24MCDgBJ{i`GStFZ&kk=7A_^j{8ZyqefH?-#SfPcn_un<2Rt_* zH_G(^?aXXHWmmz(IyxE{U&qvS9>24vp0b?Z)v%09@epWK8}*}ov?=+mKsBM!Pf}$A z-^ffGS$h93OwqP{O7^y_C67_W!2%Vii+R)k_|p9?_dda;D6nhPnsCg0^pg1>M{GVDyy8_S^X>G+s~w~NzGXq^ z*bSl52wC&q zA6(e^doT7_<5-iW zft}x_4A@TRhQ%cq6ZDJiyY%k|2ZaClM=r&|{2HdNVY<&QyIuEyvg6S6Ugj6ci*)ms z1FR)&#|HFKIDvi-Q+qtIa<282vfw9&zu>jKY&Bco-mML<|L#AolNcmk*qMhprXcsm4_O)|V7sExmo;l7n8fE9=JCFFZ&+%!KP?Ak{%i4$eYZe{G}w|` z8f4j}i&5qiU)H4W{7NR1k#gi{05rg3rnq1+$biL+x!^D$0pKu63m6RP8>6>=v^b$q zCELBs(98Jpknxw2&y`OCJ|=mAi(w|uGUMWkmSR6i<8$S?v2Y`eGNrtc#UhCUK9jb9 z&CmvHCbEFbSj6_OF~7g~vLTR+iVb4l8n?+deFRKRx&lkXB(OA*1%`%6U}z!>>zxh;SI8?A9FoQx(;E;pFB9@bK6UD%zNWxjfcdB3`0QEcxY&7B>Yh0 z3*r_e0hVgKB&;L~DHF5#tM2-z-z&)+1wt^%oR=SKTp)c9FDx`H0p)lxT3h{TUVkp~#72?Fp8E2+ zGlwO|UX-t-E6P?Z5oIfpMY#$xl8L@ngm$bI<1f+*TE6?MGFcadCIqo-gjSkJ6uy`U zTcgJ+s$Q6-_f7RBnDo90`+7zKu6afRxO$Dk77YWs)wp?}d5DK+ku3qpvKqG}SkgTs zt85LxGo$=9#+JA8&{vx)|9E+=#_fLg2zZ1>zC3h2ONMi6oAn4)JVo{-F8#2pNM8M^yD#F{*kZi)tQchH9S3qKXF@ zuaU^^>K$efCW+yFs#u|pAh0%+^CU0Ic-U8FY-iW|au@ff;0JQ|=61@@*WscM#%`N> z`q{MJ4nyU?4?MruE`Ubd+>zcuBW@!b37}D&Y+qb^>Vl)+8qgQ4?HW9^^weur8|=^T zi7e?UEbkYCH$x2Gg%$%-U9ANyc}?5Bn|IgVfcF123DOpA*xh-+$zhK_Nm1{78{8I< zzNhYIzzBjTnHBvC7{v(;AjdM<(>;!5&#~uXr1p0(poAPl;81ifut9V#XbRD>02!Er z$f8pLBdJH?lJk#TX{W0R9TA%0Nv0*KCF7Ak(as=U(Z+yDv@wV*+7}=nDmr`rzB`*& zlSxyMDGX8?Ulz1149E|_hIB=51Is~ggUF(%0h0h)L>9daNFz-VS@bYK#w(>O5}*@g zAS;pr7?8Fap)g#j|$P=6x`Z+Py+a5pxf0bocoh)xE`=wy(6(ZRr8 z0oF)bbS@x`bWLQ@v4Au>7DN`E3Xt*g{>LKG!XSCkx_~@z2g!@R1<0d{Ui{(G`hsUD z-TE2)^w@+>1{o0@3`hg|5!v0jz}n$Q#PE*V=vWY0bShwG?Wqehni}@)?0-r~Wq996 zF94#X?QUdXHiUX&c;^8CRU*3^7m!Eef*7Jd5uOGbl0<5^Kzi8wutXGdixVs?$^Wadmjy{qxu z`*UX_gb~<@%}WN@(RhA*ehO+pjTgihqyR2ye6l>*7a5#JQIiurqo(+#6u1|m|M->^ z5BhIq(XDJ4nh_cyqv$p^3{Xkq9W1MZO+-Df5%!5&$%X?AX;fP!tYRZjY-#kC5<1xk zJT6gP$X(1AI7W=4x>zE{2;%=MUIBUmwxy#Ny&+r_Dik8SdqTJq^n{2ZdO?ssbL{l} z$+xQy^!pcT4)_{w z=0xShdq%mwx!iNV6QU<1ct-hhzT$Pia)E;TMFmJ(68$UeG-~v;?gL*Gy-p!_a{A<4 z&y9Dn^e&c*Q$GAJ)3Yc3Ysu^MoV_PZ*qt{f;@IRjd^Fz5RF4<5Gr64_ z@%{feAiP5EV5-L}I#_fEOZ1FaF?khJy}d&2WGcJ@6%Fmi8^0mp5s((~8{u4aHQlgf zTo)h<-Wb^u%{N>&Y91nsrW?rEA(7q9Hkj3$ZHl|e)_?8vjz^8l!5s8*M`!1H?zv!m zK|XGX-qpP=lRWRLjg4tz_jyjRlVx_Y0-OM#5GDSYK`}lkA!rmB6NHiKYUg3;sD5eb z-qkDGctjTMJ4ge+Qj!sEJ8ToNgrr5g4$`pkkVl)27@|D~`8%hZy3ZN@boFOK zb@E7``hR8|`sQcEl$j;5KfYLeo!oOJlUFho(dELTlFyEwGv6fl7WIqgDY}a$jPbZ6 zg^MO37D>(?Fd+)B3oS$1iD(r<2p2|V(IUjY4fLNQ%))+souxioeBqz$mVUE)S@;z> Yz<)3$ML~1_48|9OA;9z1-}Cjq0kZ-G`~Uy| literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qforeach.h.2158A919387EF180.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qforeach.h.2158A919387EF180.idx new file mode 100644 index 0000000000000000000000000000000000000000..0f0606bfbcf9603b92754fe4f243b96609f7d1f0 GIT binary patch literal 2552 zcmb_ceQXnD7=PP!TU(B??eo(i2l_AI227^J-4JPA55Z&$imR@MDh1f(r>~6hp+gNC+4RNQ@-JU<4NpiHaJHhJXg5ESL!TyjR|~GW-RkG^YK0&>h8YgK&UGm+8oD*WJ3tC@Y4-VN#((Td=2%_w21wJ+ij#gsKGpVP#X~% zBT1}EaV+$w+9ylEFCcooUhtY^ZR!-2Ahu;u03?TL0N;PA8^FVZx)Q1(DJs@Q4-cf6ZHt>{E5z+V_AH7rX84x_&A zG<+uK$&$AI_In63bX-GG)3Kh|CEavMoe68L`ynf$$S$?|pVV|PPv7s;qc^72w+j!@a-st^+7;;R~ z^(c-du@;wPEur5pUP6s1>;D%h+AtWKxTI}>$-2+nNcRj)QVas5pp8A!20UpJh7(E{ zZIU!K6v>Q7NbgM;%gs@REgXptuCpNYd+~(_3&%!V800EKtl#fnXcFYGTF_KvVe`+w zj4%3blm#lR%rwNhs$3qEAbWa&*N=_=@~sh9(`w$vm$QUWb=}GO)CPtbDzr`k_^N`c zN|PW*0eJxcKH2QMH2C@Ho&N%V*7M$camSKZ8N`8qJyY*C33Ax;9S@X%|8KjF58PaF zXm8q}nQ3;jgrF&fHm7MIJLDBtdho$?0M5phvxLwDdzZ|8{>VoaCyT6AaJ`zE8o?w~ zy{PDuH{P`GIag#Y26c5ob)iY9dRo`@(rY!Z-zu_}67SlYI+IW}(r`rI4-en;&LgQE zN7q^`4BLnLiqoY-=#}p8FBUZIcGwt}YvE?oRDtW|R%SVV7T-bZ%&>ev|0Lz`XU`T6 zT~aFm*KKoGQrtny4=0M>YUC|WHs79KO2xF-ASR8rr_i2bE_WC0u*GV2mbPqf=?lj? zFSB#OI>dy?%WZxK*Hj(&`o=qtfw;ro!BO$eRa>_%J{agBAU0Pe1#w%GhyU2M{|QLY zgFIR51wRhVz16zrF6%Sh7d}4!)v`gb4t53?(R}G`!J5n##isuSPIIQ{br|y&^iohu z=r%Ql>g511tRMMHXcUM!CCF2*?<)RuX5HG6JTPkXd#RXV1G55ivRrUxa5m*;I0w!i zs5|@|WKT*!D?=yzuJSH;`_#Zs6Wew{9T(acmQZUt@K&ce=-EpJY=LSTi4Hv&kzv2L zQOnY?+duE_+6U<{h{+5A9VTr!*6U78yKi@)qo#rOd(l?cSceTOt(uaT~+Qkf#Yx%L+*I(;BcUN4xcZCq3 zo|};kz=_ZiO}DZap9u? literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qframe.h.AF3A096A5F7755E6.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qframe.h.AF3A096A5F7755E6.idx new file mode 100644 index 0000000000000000000000000000000000000000..35a316a82a398d3d256150d79dce506cccd2f6c0 GIT binary patch literal 5244 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 VW#m&hU9s+3Tg>k-v7=MS{{U68Cnx{_ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfunctionaltools_impl.h.1D5E5ED3A5B51387.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfunctionaltools_impl.h.1D5E5ED3A5B51387.idx new file mode 100644 index 0000000000000000000000000000000000000000..d40d22e109c5f853799eb416bb9f1eabec10fac8 GIT binary patch literal 1956 zcmbtUZERCj7(TuISle}%e$1K;x2_#maVfnk>_fY)EN!eACX5bcDA9R$ciUaPx3}DT zN+@Pgf9Mhc7e1mD3C2Joi5lj|M)VITCi+7#COi^T@fBmbTiN#gI-VdMiPAs&mP!-F zEu2)SQMZ)yfSkw01g8l}iPN;MkdT{b zLm5#LVl2x}Dzd14A!Ki1R5iaA~?ObEoER8)c8o+;#b zy<<+oiXv%aqMVl^lm7=1^GYrwW@V0773~(Nf~Hp3d1h^b{Mcxe)z5YetDK0n3Tutj z0v06^7m z^cu?=#xM}ReD0BjPyZ@~+?0=0x36pu8V17ej=y(lZ1(5w8sW#@vW{LF`sV2xVe{jq zJ6G+#s)q@8_sZ^|VF3J{b(@+arRVq5s6Mkgc=*N9j#52ku_AiFHqdAon86`jCxs+7R7Q*Rk3#5dQwcp;NCf>^oLoci0kUXx#w!@uQ#h-Rzz|QKPli@Q>GH zH>T%ol!Jf=>H>Ed206^82Eu*r=*%BeXRRMml*?M)X1dYY=thq6Dv|U-}h*cHs(CwF}a( zawGDZa~^WyfQl9uoxi^_f8YtEsl3MOTA*kDjHct!?OyW=w+B_UjgVfq^sRsaLVp8q Cpff4} literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfunctionpointer.h.DAE0E999D3F1D06C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfunctionpointer.h.DAE0E999D3F1D06C.idx new file mode 100644 index 0000000000000000000000000000000000000000..4834f219d79817f1b5a36102a6b43b435f057010 GIT binary patch literal 388 zcmWIYbaSg=WMFVk@vO*AElFfyU|#(J^ds{RkBM*}hgOC7N9?1YkE{H~``1yzO6K9?` zssjqMaIi?hR2%xQ|Mz^7^E{v-d<=X-FkxVLB!bw*MajkDAO@2Zzfyf8t2!$qGXpb7 G00IEKcVfc; literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qgenericatomic.h.6A0C22DFBC3BD1D2.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qgenericatomic.h.6A0C22DFBC3BD1D2.idx new file mode 100644 index 0000000000000000000000000000000000000000..2ebd74218feb3e2c710adb4182d6f12479e5c523 GIT binary patch literal 1226 zcmbtT&ui0Q7=GKWb8X_9&9>TYEt!;|jxHI~;kq$43dMrj{pexhL1Xf@3p7bh(&^NB z-NA#nlZrn;JnKdD;zF|U`=$L_gxwnG%iHJu@jTy?FN^tH?oB5^ zR?A;Ch^t@<2k_^(wm#y=gg(=$>th++bj2n88d;yI|997_#8eC-7AaB`k6~mzn6}C@ zFsErts!|~|(OrF&6d~^{)v8s?c8LZHbFO9RYO{!o_rfxny-<%RT~%z9;u1S8r)8AV z>Mc|m6Ps=!dv#6IGvfS_nn_Qm9fgu!AsI=MRxE=^O3iVJxuV!MsZ^u|SDF|-IVwwK zRlP8AT+&UoQqu_HS<5EUWz{mOIBjbvO?7q499?N=U747~)>Xx`tG!jOYMCXyY$&R2 zIc=`O_eEELvu0e{!RvB+Ygm1}dM?uC4?>5KOeAG5K(}|9p#N!p>T7Xaj{3W}IwA~3 zhZ3v|+Z)5D>jtF zuYUaMJNt}-eIXDAdIk=9ff1Bar{f=fi|?__fgnc3q!(Cu`OLub{cPbc$_q8*4Mqo> z@)qB1KPc^<*bPJXeh^|@EanA3Ezm>RZBlY%l$w}*v3~32d7qCLQjikrt6JvxLUmIb zI5Wi;^vqxuzMaZ_+4?+L@bf}!Hg<}U^Mc5W5q1#f7_OvtF(&4dKUDXpf%E_IZe(sg zxp(pPU7QVc2M)2>vBLA6pPSi7D4qkZkHO4Y?54Id1||eyY9|xVoWwIx2U#~e1a?#V on0ox66w2e+sw2^)$%=28-~D!F{!S&^5$^4SFs;^~UX}p-13OkqM*si- literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qglobal.h.1BB3F92FF7EB2D4E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qglobal.h.1BB3F92FF7EB2D4E.idx new file mode 100644 index 0000000000000000000000000000000000000000..a4005a167cb090f43e64b698a4c8f0d58569eb4d GIT binary patch literal 3568 zcmb`KOK%e~5XU!t&^CR)-|u%pS&B+kfy9BTl`3%oafQn9PBvD(_SW{c$w%mw6DPhC z5}$wr@C~>!+oYLFNEFGj66Gha^WX7!JRZM0J3ak17zD@BSuFv_x`H4W$FFrp-1H;l zts*462*a?d69`#m9jGcZ2BZw%y6~`cRC*f5oSz>aghFwdMS%Us+CX^8tOesrRWA*v z6T$s7xK2`>g^9occS0*)IfWj|xYH(K+-U137cp}!R25_j##0Jv9MXJ(Ri+{-RP1M2 zMY7n_q6!8A<5f>PGIhIbsTRtC@e_-sE;HE<4eOZm4Na-z*n6E4CZ+b=BZ*K6tNFP_ zWeFHxkLW8fQnSdQUe@!s>T2}7v4D*&%Y~SPz;p2Vn(pC1YaAK)}GPjaFVTA%PjjdRGCisluzkFMI<4XXc+A9IAL4(wviH z|92|A*IL@V+`~g2tD#VeGSq;FmyS1kFvX}i?++Waf7GfHt&7U|{|AG@_azZj?!6AVrg4-L(nkiylmBCjXqycjo7 zu_gRHxcSlZ^W&>0g<`S0w|g{yl(*;K7e0J?^YU|Hpm@@Cf|Y%vVX@9~vWDB=1%%?@ z<8NDEGyY|FcYAMVYh!a|YI=TRw6id`wmi8yKG4(A)%~cquYYi8cw}s5c42X8J;*Ny z&DMPfL9j#kh;W^7o^Xh8hH#EBH?7$=?jQ&{2zv<^2}cMw30DYP{%Krqnh*A9z};O3 wduFM3fN+6uiEx{+O)kEy7j8X~JE?3BpOjF~Uy5KEf%&KM#5%PXGV_ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qglobalstatic.h.D70EDA33C1796626.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qglobalstatic.h.D70EDA33C1796626.idx new file mode 100644 index 0000000000000000000000000000000000000000..d20792b8098c0ef56cb1465bf4a6cfddb77cb5ba GIT binary patch literal 3536 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 Wx3G4y?h7V_qe23A_Wv8_o&O&&@CT~^ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qguiapplication.h.785D76C858739A91.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qguiapplication.h.785D76C858739A91.idx new file mode 100644 index 0000000000000000000000000000000000000000..fa21a2553804344d31603517fb4919db0b90de1e GIT binary patch literal 8956 zcmb_i3s_avwqA3w1-5$$i^WTph$5om1F%$*NCFf=KwiGX$8zrtY~2ssdx4UNd{Fr$ zLCG{zF{KA;W}23L_AXCmnY~VRdU&jxS@)Ek$}F#W$J&d3Z=~*bzwdPT4Ava~7-P;k z=A2`We}0wa=jQ%6fa7v3`AZyDRWWcJ7f%0qRJZL=5PfJrr4wsySv56wn^{q9E@$_4 zdU|(BiQ87Es8+7D#IC57F1I7!samVtoz@UergoiGgWQ#hnY7ET9uN61Qk+Va)lF@+ z-fqpaIaLp**zMD8PK#?Xefmc--sY*XEA^8VhxPvu=Ts}sDyyX{TCQqC>*B>LfTG!J zP+VtqyKNS0POaPHa&u<8t!BPUaa%aE%i*x8;}umYvo5N&dQ?qPHoMh3s?K(~RaI@yDo@s8#cd^}I-A*AVq0RhmuWHKtX^B|604c3B+K-al$2_h z!v64K;<+i3QGSlxa(@L)X zGtTTTvtqaYIUhAHTDw2z!ehJr-yQ_*+LT3AwYL92O#Z;tT-tfwz5VY_(CgFYtf^J$ z;8nXUf69-??6z8+|CuqV6tgP3YrbOtQ$t$pJ+BsPrAKq)GS_;F=P$6D)vn(-bzWFM z;5w{-`(Zj-l`f~+RiGWh`HII1S+%XIdVGzoT-&#~idl8J%Urci3mv->7p1Ox&Kv6@ zZ>%|+r_frdPH~lykxDJ^-zhFlNUd_Ej?6mKk=E7|QyHCiI%5`Yp|#$d4vJhBTcyqF z_HcH^qjrwj?(&cdr6pIbI^O1{8EZMSTN{IRxGYL%X5$>LT8}lmR#jb259f5Lw#s_W zb$ueLp}DD)y*mHG3$|iztyAv}0&foTH?GgOHEx?jao3l7w+?q*3yvwpx$6slH`_(E zHnrGU*nQ5F2DSKfOP(I3&gxCE$e8+G&9Yc1Or76q=SP{rTRW~Z4bBDd$zn*cXYp zo&IKRVBZ&S36%I=ynd0(GsGDKxnRAq?Z7K1D$c$fBJl-)mx;@61l-c6=kfjtt3xHe zKj5N>qJDrcE!jN8HEw*E#E$@68DDt=;8nxU9%`tFktBX9;M}m>K7hC7S6;jSLPmth z4+FfG8P~GjQ23-(egAOy+6alC0)_18>_LEspSyqbt{(4@eLUdJ%($8PI{4}B=EB*p zp6V^}NjxVzqn!i2zhFQ2p98+Rb>E(tXnq>((+p`n0RQmfD~HPW|E*sTAE3vIlchi@ zmZPB350iUvWdQ{#BgXWX_T+udDvKJznBV08bDn^aWhKZ0?0wZ_gbp z@izdjj;$U7_}EjY<_x^``(Y9v0(f5Zy#9c{Xnn-pGs_Sp*a^3yv92yq{PU#B0@{_9I6GM#%oz zAKcUH&X=wQPnP&}cqoo2j)(p2p^scixVCGa#Ag7mimyrod~=`utxu(eC=zc1+|a)v z74W#Q1CPBX^)yR-IpCa#oH)QEi}RND|DxU^@sj}07H3BT{_3?YtG@cY*cQbzTK5hX z-oXZR{(;K-WyMDZ486xL@`>=Ui%r|b6t1T}+q`#{4Qg3>hg0Hjfx=R8sc-KsOP{w65oh3ENB&e&H6zR>jDg+`Gd1h|D6TbOTw zPB(eB?yLOmPLa=q!UN3s0ED+FasCA^cx3;qqSg=BN_-wV7$=VNbx`);iQuNl z_tr~%4&aj5k_5Ov7ke<*sl2m6$G^AtTL({G+S@Gh2~fC?8SnF--aBe` zUHG_NYL)nbP^bv2@C7*j`SyUfdu`s_WrCv(qkYpWy5o*vZ*JaszsTPR>qcg5WT6<~ zuyvO+9tx`3Ch>!zu$-kXXC+X0s#V#s>6&f3$WMeqhM3{ogR4r`Z4`QC?~wS(fGwg$ zhV{X@$EKT$_U@GUA%N8w)t7g_-+uJYo~qIo#DibS(SgxnU84VP$#X+&U+j_i(Xcm1 zn0=}3yQ%iTc}1lUiTnh>YnZUcfBxrOeP-^npFO!(;*C&94^L0R@J{7ry%cbA(E*VU z2VCB>+&B7|b9b*keR(YiX57Mj$#L@3*93BBuE^HYX;2 zylPF_%OW2NcpEcrW4_>gSX27T@o|rzka!6SZqe;qT4{e(=8**}-U{LwCC!BJgaO`P zn0?~9xu_bttudu=Db-Mrv^i7x}Zfr%UZsaZ6ZPqYvG`4f@P zhQcOh+~i;TfQwZRY#8G?EAc5%SlDl2GM2|!cmBn}IiH=A_(;GjS?EfCYPfC0nZV=K z`#zWWp_D%z(T;)MU$8%sf9&Fyhb>=GUHa}3-E=)OAVX8IDTH_heKf%Gp_PS zFz&Wk*U7U{--~=tDC}Uy9n6wMe#Fl?Yo@i6qvlLx@owl31$>A;!Q-tW|>$CnuDA9Wvmq@E}1R zWEd2JSqSoA!{9EhBtue{)=V&K_F9q6x?_WOSAk9EXCG_4F2^aDzgW zFA)Xih)3$)!IelqK0)hi#;Jc@62sZdyiJsa0^6uH+m+{_JhOPY3w8RHPF7~AX zlpD&8NcX5|X(rxU7Ct*GSrTg%ES!89szh&%J7w1XesJtsps z93LRa6{ZRi*S8?gj+>o;icOGrvFcsSf%*$oF!|D|U-&}xOJc3+g&2F7XV*%M5#2B)XWi@BF!Sp9-UC ziQ@PQ%^$syNrPT?)3O;jXo9?)g)V0)C|0V59BnH7_DBxJc){QW zV^9MM^1{%CaY*}uyp;{y%5FrS4w?Jbdk-kRCy?)k(1v~}y#;v-OWeXn<2wEO$?pb^ z7=Qmn+J#!az{tQ9Xuvu{0Px|UU8PFPnZh8W92FSV3y~7!VpFjMc0iL4E9s5NQ#LV` zN(g~K4kI_RSo9#sn^^QF7Ki&ykXu07^n5@luh_9?=zvH3EX+EkC;Sxy**# z$u#RMQ&tp84nfW~Wk=zlNB&o&`=^}h$+Sobfe8}ku=5mW?d1e4xpB!YsGjz|_RF{f>qk!4#HJ;EARffmJn>7*&Y3i_ zHfCs}d$aRLI~;~x{`Ra>`9l}Y|7s@L&oj-7#G$x)&D`UEo;_UgyS;n<@_Of~$Cl3N zwu0F66d;X)Awbv%B-W@G#K`<4)+iUmIKU*H_RZ8!=G7VNDd;gmjPH`{DaQuK`WARr!AE1RO&!ock?mlH4kp1GY>wP& zEDqvPj~P?bhn#Mte57Xu0Nt|$=pNbYG!KfPc?9V64#3!_HvS`E-rT!retLq!s^iR) zg~s=w557lYo#z2K_H1~^;@UIB4&>_4>OM%gpntqkr+vOHSZAtBKz$DiNKQ5C2bTzT zw?)S(CvA-hLVM!5e$AiRW;M|O9QlqZC@z&NXMWfh^X3K;JM*1Wa5aKAk`tXT!VUN$ z0Xk0vAfCSI$h)2|n#s}V8%Ae?7alPr8E*b!Z3~I@wZtjI#YB!YJ_$FlBeBLKA^yjK zZ@!)R@atPU_Zco3&`Z+RX(jZLsR_{OB!Cfzik7Z8b#mM9ZV>QHve5V?^jDs|=bn!J zJGWD+pJtjSfwTzn^dZwzz>oxa#;_STprivOB~Ka^g{P6l2Yx%hF=q!wB7_U^B`sX% zq^&ViXoH#3#_%#y-^Qph)kLA}Jreru*fURm_8<+ek@ab0@rZ{Y?_r^PSS0Fefo{d< zcGefyWI-pbrA{?Ei%uIaCO={RIK7>Q*v>|^vux;t=aRn8Z(*@-W!sL)A7nmipnBDm zBOz-E@+8wF3B|i07n%ws&_RJVPV9Xw0Xqp4nS5*17@kopkyxX|5F>k&Sfj!aNwsXG8rcLFrZ4slS+;PRu#SH1qbWDAABo;rv3 zMY3y(5ahHTX%SEr=qgBRVmF~c6uRYOEgfkOlDH!A8bCwRUIE|+uK*<0**^gIr90~S zJIC|%uj^)3^!|v>kPaZ>p`IdF`a1z!pG_={ePziS&%O1M;Q6 z8NdkYbmMCe1`wkLC4K#k0KoQLM`!G2Yrdq>X7tNQL=wc)0qN^c2GGZo0Rj3`0f3#R zYtOe`eDq%iqZ}C+>En2UY&Mz0k!}Rp5^qUDe$?tNM;oifBLWIc@~yuzz<2G=5wDea zT7IQLCJayT9d6i>zW(R{eLOl4pglG~jATe+{gD9x@)QBu;{wFUvLx0X6(Dxp_o4FI zOYdK$mDj3LwV=3h;pdUp@Rz@y0qVyRAW{yw)E*+>68VM1+5-f{8y{Hz@%$TqxkmHW ziw|ri`d<)~snkd^vcs)B*bK6+4@dFtZdTnv+MUN>>};LNmT z47mWo<wi97(>9IZnt;0YvuOA?X56% z8VDpHA%tzt1qUI$1YG8s9Nq7hoW$L-N{o1ZF|4>h|yK}zp zcfQy8zTdXcURBkTj*zXzzRJsqj1nP~MSg;!;PFyqBdrQgFu*fys9`=MdYcn?c1_ zukgvKc_6jvZuGB=Rfjz06|Er;6U+X8G}T0&L3H^A?|-r>lK5JAzmwsKndMxY)6WPk zh-ZSL-4_UnjT|G!p9BxXqkvy74GKz1(H~;nXeHki_Zs8`uRyj@t7H#X$yUBieuoXL zVx7bSJYthbx~|RZv?L*P#5`dI039@-#8PNO$oZN=%tUQ^^#G0yyB-oizN+>Zp10|32BpB?jmV13`g`t0}C zjp6_5Ylgtg!NWazidG_QFx}LkzIc-2qWrFXT2{rkk-blN) z^l48YQ&TB$yKG|FR8W7X+BtZW>i9YxDTrO2L1&UbvBIqT{A`B((BjiHnhe->|$_#wcG2^G-*SB`u?RCMvgZ8fC^ zb!}#?2?7*2S8#nYLV4xywr}iTrchwqjGEPvSfYcaNRI)cGEUn@tb)>Y*AYBA%9Ru z&|sv=Ks8P(%q)nYUw&rA{u7NCF2T%_0Hs+4^xU-D)7Z__y$MD#hWgfg@_ysg1TjoD zl^ULCcpzMfD-BQrm~H}+r#cF%#?{%tOW>bMlPA0WzQW3a<#k8!s4~Hn6HD@RM=ja0 zT?-Sc`#~q%w7KU~7?-F@q`$oK!q}>^Mo&No#F9({QBVc0&_llfB_uo+I3kskC;%eA zY&4I!HIr8-)ESt8c#;_*>Zu0T=wWn#9SBHfg(#>DmlacAm!4;t*4Y&h7N-zRElpqHFA+{yn0hhl%p1i52 zzk4r1D^rvOV0*iF+rq^gD)&*N6CXWUxy4D3y#DE(4zxD=OWL1w^lNvUCO zi=Z&B!c|!?sTe!3BMS-*_7gJb8d&g^^ZqU8q?iad#N0`|0;iGHYx=rxUA>Udsz(=k zRU!8IOA#@o35<~-1~o}c;@sH8#%Cj_vr50|?&(lnUENdDyg}W%_tN#cS{)no z?Bb3K;dMHl6aK}<#YDXJftIqCT zlxWuP|0LS!)@E?kc=@ob7tQ2JZlS2Os>c6Um;;yXn#k$=cUDaHrA=&@2M*j5$ zSUdmh*MF#~YzmeXa{E{HQ$$x4yHRLlNNlVN`bbvKVBcH*Rh|7D*Q={LDx`~B!^jqW zO==R|(f!qxOjtN8znoXAeN%0W+TFTz>D4+UvYQ)nZV5LL*RgVC$ht$MyIn+BySS>V zAR@LM)LwUYOk4#1(7kF$cW5LgS@@6oaJz+763V)VL{??>4AoY>aFMJ8=_ghxATNTy zs9mjk_5W`ft65@QS8WOD{p%9^|CiI>yw~iOFYd}}bf|#r=22TF`&&!xPuQSeeaH6w zLND&3zqLe2g^fa8t?-bDC|xa79S!2#F(Gl$F}m6zaUtqQRhB`WsJNJ3x_U9uJ>tTf zMn^`3_R>KctDWTs=mC+@AstcBBCaDgeT%N{(1?)8h(AN(BBG<(M8t)+fD!jU5~91s zshkE;vDl%aqnf*8K>_NrO9XYGgMTfdf9V=UhlWJ5(l-u??W|K(0~YklU!-ZjNZ4&Q z!8?g?$LdtNdILK3vvOrZwX3#^$f}Aj@~tFo%50(BEOWW>W{g_?(|N0lT>c9FKTi~Ax)xKMz zYe)>}I%tIwrAw49&L*`l)mQziD_e98iTW2pwfFwdzZDLNijL~lCAwQIXuFthp>ak2 zDPJ8WAyIL$U;V1>9obWr?#rx&7i7yTSN^(_X@2~tX;rTLkKHZ%iZ8t*TSOg6lPQUE zl!S!ZB;ruf<2a@tF_Eu?ESaywUnTTUi=GXiX%=rC7^D>Cb^4ysue>xv5xiF1X9L_yO=$GBbC@nTDY5fTT}O_#2by<8!Y zk)TrIBBDCEqNCg{NW7EV6%rE@(hC#JN=EDv-7T`Ct49b}Hke7Ynp+olm*|*YC0#9} zT_N40BRWE65wXQxJ>0I?u8|RO@YU_=?hb{FHA%U;b#+BV#la<-->?HivFe0`hP&`@ zSBx7B!dN%-Hj&g8l|{|(k8Tm6ouTw$5mA_}8!90t2C`yTt2Z4U9oaD!a$&bn+?Ab9 zmu^s59q>N7M)z>5WsB<(T~ZW57esV)yWCU?m_5SXP-zj6OcdNgSS%R2tZLL8z7$d| zLP%&_w~)v$#bg(#?Gp#nOsvZdvjOA>X+f#oJy|t?NX)ttn)4ev~C zGFM^zvk+7WYVblXsQM1>m?AFVlkZ%Q6LEo4~c3WKG!kJzH6+KePys2#eFT z)M+Y7r`mYxlp4~pV+&UEx{!|DL!v_6gl%F%x^{)xJ4@USv({w|7&m4UoBa()u`oxg zsWuOZ>I7-T!GCq4;D@*$)UKoJ5EARwb#QkAlcPg)bfk{8N*2_OjzPVX^$pC+Zc%Yr zUt-}mT2AOfD>s0D9duv@gn}xFQ?(U*W2+5aC`&)o4H<_D|{YO@g zc%SOsvhOi&xTgkDO(S6p=sM~;qBYhLR-mEbSl?HV`_C7eZ4o06{3{1(?shn1T(T6D193yEwOqc*wbZ`N19q=Y6{ zKVkKt3yX+!S1whmRCsh3cc~CiL+&UTD>3fK$WqPXN>wNsT(WejPNAXgDwHo35fvKQ zt)m;{wLou|`XeN=Q*;dIk1nw#!~dOhvRVNQP3VEKYAOG{1aV0J`zeHViwZ^4_usrb z>U{rRfp8A}_fmjfuXgEwFO@j#y>T%i5pmjT=@uK4-8(`Hl>H9=D^;dUDXPJc$n5U% zFPITg5pn7g#U0ZQZx#5^pYh{6)o4)vR0ku<)Wrh+@k0!=m33h;ZnyfumKFF_T{A&X zP{|QGSSW|1`5N8H9pwhQGO|~@Se#YSxWXS%Td3**txa_W9TpSaMF*L#IW>ZTfm@lcf_?9{KRy=E&@^^%|w5+L(dZo zt6n-N5dLEt5B@+s2cT90psEV8e^kF^F}|ofpfPQOfBb_g1W~LG7m9UZriUda{@E^! z{oSPt)#;gnVr_O_2;ETFO)J3^_ z#;G4!t%~34V$((8Y7swb(!>%!&`6DixRlj<#y13{D)CuEa5BpS8W4%eefA!B;_FHTnoO-hUR*8La9A;TTebwQD12TL0@I|DKTyPZW z`l?0v!uYaI`y#`Bm6fP2wpW)9XB+Eu_t)L7bE3i ztSjBeT>M?<;MVGE1M869>ySQ(kXZAp?l1gi{TiLZW$H1lqh{+-vnL_3+7$hzyO29h zuW-xtO@Ot_>D=Y?AtcuN2WxtiFVvh1 zNv({7qV1pvM23{w+)mvNjch&6tZ+lr+P`QsUbI=}>lqTO=T%?tQoD)?7Tp7VMacAl z+4;a6NJy;u`KEl|EO$>q;jXH^VyWz0DhJHhGbC1eYUaT0NA>}$AGYK?#W_!bq!<$E zj}2GH{}|v974DH*`28kfze%32XGp9)_iLSt*}dZWal!hONPYq96xid@LMdfR;sr*M9DWqDF$h&NUUy`?%jIo8!IVX zs#>mjg6BK|t6W85RV#XFS7hdBU@`r$NO3Mwpo=mj*7gE*r)}$z0<26m$9FdCI~&vk zLt>5ZG27a6Vp-Y2jnmhFdpyb8Px5|*#NxlLa?sp!kZj`$e+xer@h$>m6+ek^cln>i znpn5X61Q1j6Ou_W$SDTMj3KcimUL;vK=UJcwGbGlqs`KZCCcLvtT#{Owdo0o(3)~<>Vy!>d zVs5_;dWXX8SKDuv;6F>qHDAw=SgmIq4C%GQ3am+LT5A>CS_RT#NUR>_3hlc8(#k18 zTG)#lnj69m;wLeF+t9yMnF>ujy}7;WSkE;3W}00v8dM~f5cWn~vhj{5_Vr*$=a3M1 zNXSn}tl7x}(l4cZcq!ZywH6Xgxf4u9K-H>9tdGqfMW4d;P3b-g z*B3L~CHwD^VJ=}vq<+_`7y7N&D<2bA6{nJaxIvr09c~d-_H>^E=L*hg<7?I3(4%f2 z#Cs0nVW2Y934&htM-L>fozr&E!Dq3)3fEt4>lAyD6gvzahLr84%>@Vl_Qv3E zHC4vDOeOY7gaMN*)7tiG<&SC|71mV2Z>j*LXGp9g8O|L-p}GMIw^hw-xnf(c!1!WF ztVez;!%x&ZA7J5zaagJQjN(2cbU%i~8r8RSx;pf|MQ55W2$IX*}(LSmIT)&1D} z1^QeP7lSkE7^7v35fnQ^BHhvHnuS z{KD+{0w*qp#L89LaPo0=zuaU%Z8Mv;nW3o}X0slQ8s4W_Wnj%x>mkv}Cpv+}kXT7! z>lZb8zZzJ})y}oT;#^??HOi1!W4;Y-F?Wv1W#sZ@1_M)O;s1pM5qyRQ_o5Pob z{>;5DkA<6{rgp$69x#HgWJsxnZ+e(sOK;AraM5Uut&x4!;9S9wNSR$jKJ}_tvw*_A z(POQSGg`(Oq4*4m)vR~=md%e>6*O|?zV)83Z*OW3#llY_^jo>4g@1>tg?zYis=@Hk z!auaY^u>@^+Xgrv#4hVl$f6s@p}}y^?6`;Z&X8Dxx9th%TgMc_)~Nz4U%?le89#}U zl)FOuj1?n+F+i>J19JWYGIVr?#2WaMU)d8&mm-V9dE%zQe$xOIz>rv<_uOe3S>C&_ zh3i-kNFBru(24Pr2yZK0&kPNXC~V?>!eM&GsXOB=NvQiWOnYv4`k{B#PDQX$aL^yN zh=(oEC=4mJnNej6FZwB?2wGOyL6@10%gj)j42k7!POsB@>ztxiT~F)?6-*Ui%;2X^ zkc_%l%))G5b;#AQXA6tc)O^?OylaO(#gLM!m~wab@3vRP6mF>6GAC@N6EtYJ-GH@9&2f*1YmY}^m{wIJR`ccJnflKT z18b<-jEii-A{+EShQxY*?R59o#RrvCxX#$tM`YoM49b)tk;>+2^LAUA{XlxB7Ji*c zS%($DkXTROI)(&}F_u!esp@L(j9xgS_ks?lBC)2_`4rQv>-titB2g)i6MV;^70HlT zcJI*XVY7BZT57QpWFY~I#gIr5N5<^F zSodahNM3ZTMHw)~aA52(2|G++iZLY8+)P`kD$aF4nxnSPP1$x+hV>UiVkNv>{PKtE z16V!ZHD|9Qc8(K8{d1oJN+A)0~T9si!D&^42d;p zeu?kL_3l)`!X>I@-)|B3Ti^~E605MOt#!;HLq&z_iYDnJ-u8$G5=|J%(sxxw zRJYh?CJTyU>ngNUS@_$1XjsZVAqEOe7ikBy>zL zB+^Cm@9AE;YQfmE>OfM%^ujPb+#y3^84eCQ_54LBB&9Ce$60OTaM8<HC zDoNZ-J+6m7=`El1aEA!@LIGIKsz|Kswckwr@p|{lWL`X! zd>=|Mb{G1t>j3 zVtpF&+nGLc17O`yXVqm!VHw&g42kvUyxzA?O`l!G2sSmU`4L9b2%LKvYUX=W`@YS; zf0L^!P8z74k4ui@5@gDdk~`_X@@%25>gwsC z!S>Jq>V_e)I$w`($n`8#ji#y3qVcl`(-cEu-Er9Vof_E`SO?T9+b#RARV0?v z(RD_rG8?Na+%=Vzsd#59;I3jwtm~)ml+6>i1z61GkY+Qcq050GvHF>pWSpoq^;?De z69?K!!T%%$7vFeYmST(BSLtq_KStrf%Ni(!J zLt?d=_;g&9)V&6pxtQZp(Y90s7DHmaZjgV{pJ9D!NZcq^5f*W`1q#1gMPdc|tlZWz zq)yGOj(^NzIc9;HXGo+6b$?hFHYM&mg*&7swaO;1vVqOTkXW^h-QS;RyZbxzU|_M% zi1srgR0Km}ZP^~Y=w{87S_=0`Wu=<}(@kIvGbGljNw0rdusg0cYI-yj=Yy4qs}+XC za@T%XZs^&|wb6}(z3Z9T@yzT`NG$s*A)rF!Rh5O7`~cZ8Kn4~=VtIYDJ^!jd^46h+ z%0#8eL9AsKzgD!(S2+F`&Ll*42e~_THAe{(uM(x`ClhntdlWAhQw+-r<_~Ys#85& zz+$m(N#ZRDrfi195}$8-+Wv*HKI#)x04F8SlM-lhhQylCe*DmsL3iqBxgZwl`9bk?M~)@>l+APwGqDCDl|)G*}W*NiZZU%oJj*q%M(S}v5~hSf2gFZegr*-@-v3r`6C4*f#sqXL> zQTeL2!W+cio*{W=U~gwgDQ*7cQo|;`qq142B+paGVo0oB6NbE;)^k*=tTC}#&#%TY z!H`IO*JQ-E?z6cSdOWa3-${P&B+!5iiFGn2bxp2-Baq=7)g)QK2@5#rqYQ~vzEWV% z_>K)*Tew?l;WtUrCfvASNUXk1jCpdc@73DKmBDI=GsQu7!B3r#8y^F}RsQUR`Bg8j zdfb|3#3v5p69?2fLrN*7R#1@_8&cZf)(lqrO^5NO1GZ)u5{vuY*4gV&@{bC4SY_>% zgZ9eMj~NoHLHPLNJ-!+Klfpe#+xdb?x?qC2has^lFUhBS6}RVSoa}Je?=*@#jZiLz z#99&7wB*#^ivA*TzoY&3S?~C)hlLwMB2C!Pxx++V!(SC{o4WQnt{0Buwgp3Cm9JU@;%`b-V4l9fm4HVl6#7r&jKnSAWHUgFeh=N;4QZ_(_aBI~?66tiJWD2`pW# zsu{94Lx$U9NUQ>#=9EjRbK*CJ8>6z0$+lxMG$2D_H9mEu!pm|2Z541rqu*q_(K6l$ zHU>jt{obnJmW8Wp11lW0+6dk@0v+BAiFB**=EdHZ{sPhsb!itbc*did&X8Dx45J79 zGWJ%3)V5O=p zILlOhmZ>hdj#VVqt_F)g&*<#kUf~kdir6Oy?UTVx%aB;x7bV|3UNj0=y|FVS3;xNd z-5C-oC2rv#=YP!`LP;Hz^B!NU22vxW!?0&~MlqTO>B0dcVorI7p&K1lTcYGhl%VhoiRD_*^~jLK2VuC#z>d0I_S`OmDrHEl!cE6l zi5~VtCoC7*ZL8(L)iPLj42czb;AUX8x>Ldx?y_p{KQ+itaVlp>tZz?OO4S9GiNL{w z+ZS{7%3MA48-~P+dp_=bT;SY@ECY6sl^=w=B@BsFVQXgFdaEu2>BlyZ(kZ9z6#B~; zlHcCscgJyJYs~LxO`=h-M{w>DKs_*|q;3?mAHN+iA6V1XetJ$+&WTWVhQ#`FlKc)>h7p}vS*#9vrg-LJwu&f<;i2#@ae3Wtv>Z46>gYXuMd^n4{>9RA*J_IgRZTr zRPGKewlFwlmQUfrfFZG@(-~F9nP&oPhnm)Lt8yHz42Hz|zW9PU3woXF0^8UsYoOva zP{CPPMPlU}q*w~Ic196vwq2TSha4Fat51CNv(vkm1M7xbXZr-(KD37!606nSV+jk} z?v1i=8`T^yI>d_(SnM(+*7Y5Y-ya+(M5Ct19`@NPeYS!sWJs*uRdivetkt6}y1Y2H zXNUnaL{K>liF9yx16`G}KX#SCgN#Zp*&rnwzzSqYtZIHg#prj&cSR2}km{Q1!i<5R zIw8Q3HQ{|XqGsMZDbxPQ@-cic@*mL0z>pGZrR&++RjNXa4>yKGA45;RCs=^^NsNvG zy}}-~Zxo|&1Jz!0MaX|eC=UukMPilosU0@H=P$9i>cREQeY5jEu4fn$Ysj+vZ>~h` zjx}oLG8Zac*82?$Jcie4(^+Gi{7kUT_J%GiKSno2eC2y>W?uJ%14*q$v=R6toE<4Mc)oXB3-^|-c_Vb$sP)Kkd0Wu_Z&_K=Ts!t-usIyZl1FUSdY|-NOMSO z4w&{C66>P))1WHW5k0XTvAPb)`47p^jtq(QeahnkiB)d^Yr4uxRFp&oMg>D+6&PIL z>ESzuURl$@Ax=ERK_6vEr1d^q7E2SndtsMAML$LGn}YKXLt;6eY@f2feQ8K4Rjtz% zvTcP788ReRKK^La@l$&A^5R0!F?vlOcufzEDTYLoO$P z0=@gz#({tQNxFGH_CR1UBv#pG-@Tl$taWdN8?SboyS(i#4=jeny7@=Z=J%>(0_&w( zTSu*4N3CFyFeFy~F{8d&8r-N4&MY`KKA3$!;ASsFVr_{#KDbk2L>~)xQcdfCMLdB1 z42Hz|Mk+&MbyyU1XIJ|nLly3VI!C=VNN=$&7!s@5zIp3@d_H0* z84?*zDZ>fP%}^)UJjjsPwDWW1=lAo68o2^kYp?W{S2!pcQgWtokDsg^Wf&%LS5&q7 zQSbPuhq1NUAJ10;e3Pdd_z$}ouHVhiRPUT z92%BBWHcUWK|e}Ib4Rc^@RO2SUgPbh@Qin(ajwFe-y{3(!6}p>v9=j1e*FI6f-x3u zlUfnCMe(+n56&2>NUZ*GQ~M^r_a7_4x(gSdjf{;TH~b_K_8AiEc2JF`6_SPni@81q+l+&4;QC-lEPc=2>l*%E zU@|r!HuDvSc*Ow?$dFj?23Gd@bfgEc@}PAyT`x}8Lxv2A)Vg_{KWo%*PNB`8GlKsa zTwOCHmY2R;?}9gTsVuz3SG>SsvDN2J<=e zuref4^Lc|>WUfeoq}Xw>&5CU^9v5RstTzi=%ssLG0tz@<|4G9w_Fd`Q}15qF@o znjw)IughEzme2)~+Nvt|j|S-@o(E(|tUv2l?|Zu8XkewN+W0gloJJFnA+g3)uK38- zG!azvHW}9N42hKQ{L)SH+IE>qr;cAa#aDRhn4wOv80ggT zk!#J%Y-!ScCK~)`x!o}ry<-M11Vc)%+3bV;@|HBu;kbg|vOR5>Zw%r*gLl@Zw$3pq z#$BzkJO?KU9Pz0}ODdk8WJu{u85Z1|FIE*;yVOQZwF;?Ls4a%X@@iM&LB)mN0*f6v z-X+?0;gMs8#7a#L`lCmK0du^$Uw(!R|KXTT)^Wew-&|=_a`9?NitWa&5`|T$7Z_4f z$M$clGwkOrbIEkk{ zer@)9ZO#K;Hx-HHRp`{>?+1qi>#$l|=Y^p2Lb3UJhQzw~SF?q`R{L(AH`l5qWO&-C zJBB-Y>s zokE{FrT}XQhiUbf9sSXb#E@7otMA_uvm^spSJi%cLUNoyMZ}O;-IUOzOZqp!Vp{-{ z&F0Ct1;CJ4c~8G7Y3XrfA$e+NIGr=_X#$4CI(@2azgA1XT|~>jg-&T99@k+=tc_q zvKtj3Ln3{AbUe7=vu4W_@C9Ir-s*kc>T?qkYviMPZI}EMy&ShfaPXvg2x%TrQw)i< z-@Uf(&-MEN>xMckMwzOQLN_x*V*R{m_PAtc8nD=Lq&tdmM}eX2zd$T;t zY)Ihw1T-5M63MM=k*CU#+$$9BqB;}2G)ONE(3KeytN%ui&~`T)u0UH2JxJY+-Jv7n zCoztWto+00{!<{GbahB1Nsc5O5)6se;NgZF;j5PdYpS~8&{Aj#x(`2z(I)Jt!SNIR zT#5TixSU%c2P{DC&X8Es{w&q-o5%wz9o%fSn%)TCybub{RZ&6{-((VT=@{kpi09DiUi$fvWBIhfY{c1Mrqrx@Cm{$dFi1 zyVpDs(09OEG7aCDq&Fr=iy^UEP`A;oJnM0g zV!0*?MJEa{FEJ!mkvVntj%h!3y~1^>38YMeEfWuHG9*&5X&H;URJ^p_s*A-Hz-EK* zW&?Ou80rMsL@R)x{gYGc{<&#`!W~yTX}pIR?*Vtokdou;re60h>$g#X+Q%7qk)!q^ zM@vFttv?&oSnPFY6CIM;DVTQ(kQPH?m3dowc&8OBH)mOEca8jAbYLz z-;9g?peDE5RZr;Atd=#5&uqMX~vXE^ML0#|NDJ z0X%%nkXZHiUaV4krF|Gy60wKv2i%pDa>`kIAlnyp1Njp zF77+2vQUveGYQX3z+yf88hD1u6 z(ByH?(52gPfr6cIlHfNXOjfUnSiqiLt?p``zU9d*4>E?Ijr`*MsY8$pcxXY zt*KS*f<8a*l(;SW?|^mG!*^O#*%#IQz~jDA!bV`5Y-kLQ42ajMcT;_N+1> zViygZsgB^Oj{4vbR*_h_=Qd1q-cQ@*#g#=rXqrASO%EE7A(86$JM~Ijm$}OXt|~0} zHM4ll3{w+BVm-)nY*P`#bI9g}jf25^x|$ zMPluKf8gfZ#D>|dnHGK~K8VARSbbapVfo@)?1tqB7Hf-9++u`Tjvs`ejEr7xPDuGpTzA^yI-P*JrTDz7!s>z!xbeT<{q*SjZz${a|GWx z=zd~Itfe3S%2WTgydQl$xN4uNH_ybwUkr&gv{L6u?WzXthvy*BK0GY=9LB9ihD2I< zo2%P?!`A({ZH8@qQxtECV4X80*7opsGd35gaRBZR-CZM%;z;Ze42jff-lNeIJJdUX zW)IH#%Vpbg+#p~`EIIS&r4@l82XOt5#`#;x@2%t_B-S<)SK_8br{-`Q#o-e_IZZHnzQZ0j5VGMj-a81Y0c7G zW}%yuA+gfmbZVtMJqc;4&a5;+NJD29Ln0ODOO|ldH6MlZ&e%Fhf`5_#@Ta2)~9++*_g8N7#T_LMCl!#4`oQH1>U)MIpMtNI6Ba={E0&CMB!ILV(s2h z>AcsYt;ZGap{n5C^TK-`loCT?nacguzh2pcz+%s0r<#nZCh&SOBvyf)R~JsK+$G7v z4N=GS5sP>PpGILwth72eR<`*4a*~m&jCbj6@`fo4KQ)KjgMS+neD|l+q^!qaw>q6$ zoiOz;Dbb_mxO+*c!PUMci5n!);2TsVR`r#aO-aFpPb=ISbvo=V^#%@p65~?m z;=km*QUe&<)r#6`Qns4F@@7b^b-ya3`Xt;3R)Wg9AOu|y!0FGBSSwn7tX`+u>N5&= zLM_ulMLdW*gA9qav+@k*{@gOd-WcmL{uc!weSr+ZTF8uj+fPPt>G+duv`p@ zl{ntH=}B4sJh{<6+Le!ZAd(@mgieQYc~`gwtPyGh&9~>DZ-=RxA+d(PyZK?@LFEFv zU{IZ|l5?$+!Qf{|tWBBqJ&6~@d(lVSk8B$7(T=si~s*eEHP_+xb6or?lm>Ckw|IRNr z5<9HF=-?u7Mx4qkQ*lq0A(3j{e;HS~@h(V8eP}0977}sSh9Qyq47+|c)lYW`cLuQo z-ZV=$@nJ-U#B$a@IOg(u<&wfZRcrK^;&}|`X@B6Z$2=jP0)D_7_sU=yVY6bV0xai{o)iu&iisaYy*veP*kRT@JgrLVpmeCy)( zK>DQCQ#E?kyQ;NoV4;pa|=2UdeG!PrW zo#7`D=G|Cp<`(^wMn^s0IE-)bs3${W75=7;A^*n{!1|!}xnU+@m4Y z2%cZM|7G8Bs;v95@{E^W*VzX`iO>f*~H?!;BVP8Er?Y4;gLer?Xgp@+8USV0;q z0E;29DqN`X*t<-0X4XODWqN)Y9yDf1q#os)HoyAIs7xPj6o(ynpphSF1RcweSdH_a zDf^=1{Y-@mLpR7>gY7QvXD}qv7GtXk+>#Qv=$Ptdt8y7na4{rS($vmrBl(rLOk8=a z)Qv{tMm(y^P*bU!`ft4Wa{As|=&nR-^o`_rg9}WCl-h(}KUd$9`x@l=OdS#@t-?tw zv=KvMy{KNM!g}-M+ZcZXH-Dm~Xy_IANsRXTeoI^JxOZF9jn;n;jMw@Sul1mS7!vDP zd|0Qwwoi}_dw^n`#WW6Ehas_6)^@&WcDMc=tOxAwTTIFp+%aWHtYJ527yG_Pi#u8F z!+kuz58a0hiFB&u{TJpTDQ?W zj2IG2X+34s%Cl2}bwaJv)1r79&s{PkmeA~+(7W|kV6lf%(k0Jy>@y6B6|j3xkkG%> z1N8i%3OOJZJ%Hz884|0@f%(;ci9PfHk7i>lt`o#{0<;}5b{0Vf2{ z69VWFhD0iRreNWF!DSy>bvxB#C>QneMLiUYp-#xMw%mq%k zz`RLrUoVl{K?xto43^^B`8lWwY%vuI(8Tt47Vc=0!Vye46EG zJYuvQ!EIrNL`uo56MTMN%2RyG3X>Wm78xT}AS71B5@i>iOU?6)o($M8=ie{GSY$}7 zfzRHTTm7cQv#ibIRD(Gcm-Y;awB+#2;HBTb0TPQ5^2qFXghnz$Vy(6RlqU1>C4Y!p2r=3C2{xFWmST~Hv!$s42f0t+2$g7!hd=#!TAhS%|{HDBY511A+d@S zdAO#)>F2Mr_E5HP;ua2$8Z#u)#;`$`3q&=2Lk||u5abznOn@P=Mr9r;TJn!y-jMaX z&7OZ7TE7g5jsdmXmD4)hYJNUQ-rAM4wB$K?0$ge6w#R@r~6>>?ymK}Q>hZ;M?Y zNC!@E2aV!E-2Y}sthOV5U+l_A`Ah+g zF7WmXJakfq#DXAtvA_PM*S)@UTPBT+zIJ}01g`;cg zuNw8o^--U7JmfQ;|8_iIlOACK!7;w%F}^hI#DQS3spVo*YkFo91WDGGN!HdBZfBmS z=j#oH9eNxgD?Ey>@c4!vrvt%CkCH1rDv=;pjZJ@z+VYED55K&3>fSpQb}m7uqX2by z7c4j(8Hy{Gr%mitZM)tBuBjwf^2`pJ0Xw!%?{m(8><0r-@a;KgZH?fD)BA=qAp680 zxLBRv-f-3?!MXd!UG*9y=<~u&ZPj~j)q7EVClKt^D?9aejo_`m$y@yov~>!MclzLW z`bxCB3xau^JdabzZ3cq7obxW{NmGz2$aR+s(g^Nz_WPVeBbaFLnrQH*XmD`JdxP`6 z!IRE5f?%pqo@!Lc!2p86=77QGKsrV52Qyqb-o0QwBk@%_rIBOMyl}uuJmXC3%tC0R%}>#Uv@1wpBp@ zp~6xmJ3SEzf(ug73sNzS;ECk!OpJGffkCLh#i>4OQgZ3KR5IG?eX0??DShbJhyt}rr~gQ_@j(_ug-CQ zWBgOlMNFOrTBOI^uJvshaPz=#226gI)i%p&rz3&3e7#@XON=$(D9I-+=v2FPZ%B+r)oD0U;1hy{0~5etmbPI#9~LpQWSp?1c_py zM6sAgkR;|y5({YrSH+4~#VQm72QC?D4H{|9OAqaWV2af_#p*+0BtbCM=A3HtA>RcE zj>vV7$lp`E8W1GPjS}Ui@TMzB}Ow^u2o5nNWvUREm5 zxfHnMic<25QdT3lt`xnll+*}DJN!mFa?$xZxMZ}W{Afq8MsUzk@t~s$St-Cc<*0bd zQH6G>DAp%VS}f2f^%eVtQl5`8zUB4MQW=JV8HU2tohkGu_AeIhlg3`=KHf25avJ|P zMi@l~#Y9*%P|En>rwaw^JKys-!m638WzSh%ZMTA)e^&PRkBl!0If~h{aHBLeQixFx z_=Uw4rHCR>o}H5CPRWmSFbFP4-WQ|*(y$Mj7?n7CaxH57sDmn zIInG7URqLsU^|z4J6BvI*vonC8Qr0AmcFe+*xS<~Iyhss z7>oIWi}`XI!6v@gCO()p(EhSbm(bCPnB2!FXf&@y43;=s8UkJp8g;l$VR%6s!gW+eGU& z(MjiJL9kbp_ln*$AHg_b5r0V^Qp8^a{KBIA(rAZkKiK3CHctxj3W8xyd6?6a!mcHq zDqrJfe1`dN3{(mkjLM9K3#PLlG2Saqj5=6KU`o7JhM_jK83hnVMZ|&zlZ7*>Zu&)I zv55le-;~aP2v}-#L3;3ZDsr`*!)h-IoIF zfnbkQ-sAM8waAh1LObt<9#!+rX<1Q(V!XfoYII_%;2(l6PO-EvC*tal8Hf~E5Y!tJ ze0rYnz_5C4M);KZ6}S6W5RH&=?|i+h(zYplJ*2O4NZ*oHb|5%s3^->jPk~WDaNZbj zK8N73CE&58JOyY3#uH1xlP?0Yq_D&oDVZMBr5MR5XK|6K1}QEwuDkx1s)TDTwosW?y*DQ}wPI^C%bHfn6lxhugaMYRq!eIT?H_7zWr_;x-zT|6k!O0_-{_bW ze;E^Dv6pEYqU8hr!s0Ab_oFz=*vVLIWzB8QRphyf51n3v`_8b-8Fn9vWdVW-PI-dU zhql>3u*oTJa{ACQ4evB@m}7<@{YRGK6zmyqf(3Y{I-&s2SgS0kGu?!gfAQA+`DRIf zqxO97U;1|C)@>3Syjly4lm=$ZqCr#g6b%|PW|5#N{OO`0nRy?d?I3@x3Z8g)l{$a5 zkNowLhN4DeY8Wh<=Kqski%YgUw@m(TI0+~awFUBI!KdjMA~fcCgU@+GAU$*gg3AW$ zWrID(%v2}C@I7fcU_3VDeQYR10op+D+~9g{C_oV$K=9s>>%Ac_t@uIk+2HzYC_qoZ zfM7H)jpm)2$!rWCFot(&1Y>z+Ebm1E3X_fX#zJG0!lKaF_zR1NO)Y17>>X5Zb}I$_ zI>(GZ9W%Bie>4b^EI%b#+ES=93Z0FKuz1RTdG#WVJ4` zI_Qy15G=7;m*fx}wU$3>txS(m1LL^0+;M9qiUt9K8&>lTt3$F2U?eL@p7X=u{c3?rpNoQ=&yuY~bQxC`21C+vz zqfN3>kyk3-6ek)IVKK)wO}1W<*DKz14O}wXVIA#o(weZ+?N0U12DQt|Mypj0iXo+n zmVM&*8?ICeZH{+=0nKUFXn(bNs9{EHC-%Rb^9+SL$17NPbFxv&S34wL?Dezfk5JSK zx(Y^($FV}53WYRZuj#$6=>sST0MOI)UTOLOIt>eg>w2&2`T%l9gCJe+m97t# z+|BuERuqRg=ONCoKvuv6Nc0%zcZ|zT0d+udnsc7!{4^_y)12!xS5PCkz!ki}71t~e zE^xsYxau0gP0oCilQe>X2J=9Jq_OoU80-@aJ{rMPgKet8sS(VFBi;rd&1zu2q1b#w z8I53}q1-}4C5>Q%A^!$LQH@}u!Lrd{*9bNn?3)cf*$)}ug9QaQ8;a);RNQQ+rV$)5 z@J9?HZ6HAfB^vldgGfR2KycK+A2o;+J01il3|=P;0rc=X2vQ8@6oW)F3JA^_e9swz zH1o$rL(oM-e$D)G-C(|MkTmnhQ-k@bLDEbYFAV`N4SDFP7)W#~A2gNEuUW{<<@yV6}&NwTGlxwr%jRZt!qu z1b02GcRd`Mb=(6F>w_GEF-CrjQKWeGkjpqDKh7xTSn2WOjUuh|fU(Auca5nqMK%S& zag+JDNupONfZ&$Ne9I(J$WIUq70p9MiC${}f@G0T7DbAD0fH3Kk|Nsazz_(|Tl1c` z7N%n!Ab4UmKglt7jkTG_+9b_XHBvE;R3tKm;gZ7&e^?PI7$67|6ib3)CodWZ2HMR7 zbIeRUkBEf{xmFHQ);ylr+`7!U0)oEb_Uzh1iEz>t77joh1Z?|0a-|P7w z@$S(ZGjJMWZ_A*g5Y)8jIy-2R51RaFaS8JhdsPP6MZkC{$`3_9dTyTHoq?&c_e#*q zCg$aCxAf+c)n5M%dzj3F@=%_MCfh_)06hT+f=MRpB$K~JFu-gbVD_iIDPSa<&BE?Vi8^a}ogaU(vauk*x1cQYFgN1VRh!s>6dl85x4Hht+ ziVByoaNimM+osnD;)Me7LOBZ42batf3d|GA(V7Yb3j}$Akc$Gvfncd1FBNjp$`l04 z1?zIbUn5u}*w+ZTH3i!sm^TRCbl3+j*(~^N77EehtsvMX1nm-vQ@m~v92U%n1#f!3 z0R)Lc`9$G6I&BVuB*Bs-_|fTkRZu-iXp}?nbCM9Q5u6k(Cj~zWv<#P=6uvzvG|nOT z<)jdy5u6e%rvyKG^#)vWN~m>8XqH3J?v&6)BRC^i&Io=KPysGEBLtrj>S_eZf+bn- zqws>jNERw33-vUD6v2`r_|dawz(^6Qr3ei*f^@-|F65!DD_}eqq~}5)1*BI6LC=Na z8o?ORe~eg|&dva1vM5g$b7=%KMC%OEpJJl{BVOd=MF%~T4T6Otzfg40Bge?FNb#0H zTG*(9pmU`Tw`={r|STX|V|1;s18qTMjNYc5l0q z-Z%y2^mmd)g05!vawUxxoFmF}L?3$W3C6)vi@en0L+?&Fsaq~&7$tAJvx=FO{ltH$cx$2Zx>H>Y!@z)0Y0Ch&DMChTgDimN@UXbi <3gD{6vOf z$=tfRy9#af`Hz?pr4pwZKE6!w`MS30Ra89O6?^{_=>;hBbj3Mc37~N7AUJOiIB(BK zo^WV(7M&vT?xEzNUcyJRB5>WE^&+mU%}Ai;G&Ja~RaheSrYdsD>HAxc7by3O@88fz zR1gysZGj>$Py)%Z4}v9%yhI5k|0UcWd(V~T_HNtd+x9^6SHmS!o$^#?ARYe)!7Qgd z%Na;vD?qT_DQ|ZM(lbvpA6}XIHp%Yy-{@}i9xhba_!2Ivo^rX`KOTFwy#IeAPkOZ% z=E+{?MP^R*k}K<%>DSHwKjLj3@2qoT?D4JtnZ#Drcv@7r{L=q_*f^oRm3F6s#yEDUm`eW z!h?X|hQ)fr;-EM{P@C+vXPUnE#;&}vdsAe1xTL?s+TY=zC!^|m&hvL4?jE3rg5*52 zK(9>0He#sD|{~UI)LDfN7*+Xs1Sn`lj4uW)x zPrAjIMmY!uSmgm$g|-wxFxo1QwkmWW3j_zP@@W>YY$X1EA13<7_3fe8@rqezk zI4+etE|sSj2Z7*(RPlrqOu?Q&kR(+~k}7M?WF|}g$zKi#0V73nq)1LWF$98hlKq_I z&reV4z%Spj=sV@^hH%KkUmvC14Df9m8cOom>LJNZCG8c4!1+W#?GgQzMut=bk9L z=rJ+4WRfgTk`;|$m0WX`{2e`h3XH>Yjl*(H3bF};1i5a4T#sJ527)7U!y|GdI&24m zM7dd_+?)>Efgo89OqO$L4xFaS-l?*WMvx}^r^x{t!Cl#TSN5cx9Z2K8Y`!lG8o_SG zf434q=ktJZP4T~`1kmX_5ZqMq+*I;XcnJ{PQv7cz0h;M?q+K3qS2PCyD0{#td!R-z z#;%O9+ckod_TZEDN_36_5`Aj7KDFCu&I7?4d)_zpd>X+!yZp|sXaxNoLH!-MX;y?w z1~}va4n-pv?r;uwc+#E_FvdFMu?|HenC=Lk?x;jZKY%gQk$0vepGL6F5xC8fi(<9_ zGH3Zx>IaY@luuQ{9;N=9~saY*tqd3|qQCMooWs5QQ7GpjNp96v&mfSlm`6!%cQmngWdyCzrhmnwB z(4O^LbMO4Ep40QW%EK?yIrH=!&rHnV%rkNb=5P?hQu|cJBF?;sQ)q`2(pb!y7v~Uc z#Q?zy zt9eBZ!5gdjja8vz6u_8bGf(+)i~HYJB4rRxdkJ^Ro54?5UaK(`0K}4#6$ieCx~k z4!D>1viW@u!8E&hT8;^u%?~tVz$Hv8w|F_;qvEEIe}aI`SWh<&U%!@X{Tc*0&mGch zrBTh&w9a&+Jt<#!S>8p=9#f2J-Y^i zvz9VvEiGw0DS5wbT?YnG7{jMXL>Yf?acxOS@1Z>ljDJ@yp%?3*8sI{OvCG}Ye3iB6f2nyVB&nu-il2VDZLdNE0?_qn`VD{6E=<9@Z!`zZiI@m`B{rR2Tdn`S>eM}AVLkMaoW2QqSvJ}<_>OF`pa$eOx4V2ZYimcJ ziZco^L!?(y;G0@`8+D!=b&X)-#eLq^dEeGGgKZU}lgUU+OMb&h&o`}E^JPx0x)s;? zlaVi1WVAV0m%NzL%>Y<-@r$uF^+Gxy32rT|6%O6wkrbFL1tvE*p<>{o$#T);1}9Vu zJWwnT6gNq(vs>h5-6!o zu9TKhhq-_<>f}mk>2!!Eh0^Kdimmq_PVVGNX^nKa57bB}S4!)m!xgBDPOg;JLWh72 z2;DQ|E2V|dAuS2N$zY~-Fw@v3=g4;s;}07WmWW{LM=*g@xL+*OB$jCj$}E;x%hXxR zG^K#;Oug+)02SSr!qiV;0ztdQP4+VN_cDQ?%wpgK)93`#0yI+$_Wja&9Ri@chrZoj@)79CgYf5chH+6Mx>YBpV1%^B_howc} z;VnWDc=CZMt^5vG@O@`1((Ll+P_TcHPD;za!z()0!{N?ax9mpmCaY+&>JFqUo1cx{qks8DW3uVR>Et+_H_XuW!As6;-aD*ur5xG2 zY&o@Ua9&*F_wo3n!{4SlEo|0==x|pA|0_a&AkM_V8O8sM(jN-YZEkBC8+fo+lZxNG zGs%CtbV`}lguFT1=$qzhN|v#(PSZ;9Lh1IN@ZI>lf75r^a7H|B=xn;Ou<84lvQA!Y zAGK<^q-n)@=ps8#kLK4kWpJ#MqE`?oNq8z#^u`pu9jyJ3qO~n=)_>HL%zA;wSfH^h zBe@|!D@?@)034~v`rN^x9h^HDituFb=3I7j^`TcR5pG1`Mt2}uviDfYhOutVDrFTm zKmPKn&$PzPYGTczDwL!ul!USy|KEm^EV;HudcmG+R#B&bu#k7NG{zcDu|_ks{B13b z_un|L;Rm(xtEiI(uc+5~?w`Z`$cB|>6w-_e?D2K?j?DVWX_g=PXI>ZTUKjkJUK9oj zmAZwBAJiWjm#JKN_`x>6iu-`KVURd`zt*30{|{^WhgCo&yV&yATE$n4{_kU7+C5kE z!Kk5a{fUZbdltwU`;EEI_zflFS->j`cxQ+bfY?Ja(p|iH7w-bfPlLE0COH0Z-Txgn z+u{?M`S)8I1IUfD^=!7DhgWij8+p;b+6Muo`%n!Zsxd>IY;Ah*(T9(Qmb95Gn&yfQ z@CJUIxu9*w#3KQf^2sQOjyD~gV+>UB0N!YfZ!`*I0piy=lM!b!Dy6Z_WgO=+ZWJ(& zv7g5{Q^0&ioNv=4iczB&E2ZRNR+!~BNgnGNZasr2B`=QQ;%tDO4BE+9C?#(ngZ42N zO3BM$PzGZG10^1M4(@=lfPoSN7a6CEj60>V&DDC$)zbOf^R&(9Y1@J=5jUBymFL^! zV?=1p5n4w|B2vpmY7qd|sGxdJ3cCf8*K8XAR(RmsQ;`k-3Va`{8a&bDuIao>I`0K5 z6by7^aov#|??|;Edg4#@-1AXub_S7Cv8^Wqf4fQnV0U?{XNR@S%MYrQPvorgd(uYj zyd6YFwBIP~H>$9xYuH1vz+k_?;7EB;CUcIHx$0ElbS`I?%Q-;cG;UJB z`4@0OKqZHJKgQb~;~n5{h9&a&j(Pk?P^}dMr}<8&`7S`LO#0x57VyJ>p%4Rw{D?w+ z6cpFRK!~7*2o~ztJVQ`t*Z^UI8YWn%bM$;conH<>&<1%|YxVqEy&0^0#@tP5E&uts zdBwdFBm}H8?a~@{X%S^H*{}83udNG(FY$9v*BhqmX^BWZ8>tr|d;>qkTD{#`y)%pi z1MBs6>-EkM&w+spT)hiiGvM6Ezzn|L489puTEW0}sor*}S<^u0vC&_3>4$-0sa~K{sQCHL`MR*xnAnXi$N=th%6-lO zZ1{arlNY2I9=3QNN+D1xl&F4M(;clnxVm63Cgu`b9}XViTS5O;Fj88Rty8C1G3`A% zqvr?Y>^DnlI7Qf7C?!%>CLZiapE4o9tN;ZC#C z0*-&c;US*o8=d7_L0~2Z&hh@|_zn=5iGlNc-j>4xm;L z0f&Ku$p0Yf0Csc?972r`q1Ir)$3O-O$Uq$-0uBPsh{|_Wwp^86VT!Uu$eSqjf>Wln(z7i9K4|ul>7o5wDMXZGb2z@!EdLhYe|4u- z3E-8(`B1=7jy=lplxBULzBTbsp8`uvlDJ8d zi2`Ox>@10g#e*egNnW!g9}1W)v9l#U@b|?dThHzHE0&lmadRaT1w=?}gv3J?1uPLE zc|}M*6c8z~krEG#i&!FBvPMg8K;MXg6%w~XGEu+`m7SsTK-LHef5bMQ!&`HBcj~Y4 z*6jM$>*LnoLvfC)^HquKn%P3?SjZ}_6u~8^C8Y%vfn?~`b(L@2ajN&aD z;DJ$mU^GEw03PxKqw>J0Qouu_`p{@c0nd!$GouM2ka3e&M){S|Yy((c867C#wb9|V z(UAh)7{xa>eT0ZYh-jpUQ6fdVNYS1mMu`!{7|{gLIQX{fMDscuVw5;hjI)u57cKFk z1Jxv349FG(Ax{zaku7%27C)qblcIQ1G*Rj2r$q78{{Y-hiSCp{f#_Z!)_`INxYGjB zt3a$}0|XR^fi^&w0dZ0uP(YZ;Bh2JU0ZUEdQj>`SR+~(#O%iy2@i^9+&{~sB z0r4g=-edyCUo5f7WWUK|p@7XM$IT`u3dk{uIVKYX5#T0AO_rl32MV}nvfMK{fIkgO zOqRsSHv3|*WFIV9sEsm2atx82C?G}>V{CS;m6Bzp~TO#UC0ZFKN5^4cF=vX2Nbx%S)C?FZNN=B`rbT^hrM!l0!9}37pVh%DvfESj? zM{<5S^DqXkA@en)fD;n~_mO-bnJM4_s`CK(*Z>V4poSFi7&Uo}no_`YS(z@Y6dA(| zxy}sPhXQ8F9 z-c||FG+k~+0SDy92jnIcDZ~NU?||%20r@g6TV#fibuu5a`M#`lxxeJ+B!>^b#lR%9 zGRdrh9{~fC&2=W5eJCKr>=9!2q=1EHaiQ5n0V~a>m1YSFPvJgd%}T6UrGOn~(+;x) zFsg`G| z4-~71Pa{$FGL6Peqdh2e;~zyw^$e}nwo;6!u;&oHaf1nMFj?R>ctpERmfa>7$hE=1 zev@Ut$pvz4+Ub9Ld1TP;wnX5jkX>H=y$d2dLqP z?|aeUe9_y%uvjnd1x+H?CX z*0+5{N7mRHJ=_YaHEmxhk9BnZ(}6L&N4F=lw*pmPfoeifXv~n1*xQ%Z{)?fZTi^G& z@?uMSvM6kwPG7gb(`4$&f|4r_IOPFng_9v<0+BY8kTMBb!Eisj_|s*&`ZYRK)DU5} zB83s>$#v$*e$=Y?51GXH9sJjc!(uuU+pJ$~2Qua~-jv4MgBt=IN+ee8uEuazLkF8q zV%SLx2O@YNQyAS8hNpnjjO8?Ar5rcuTDNqq2b5mLO=jrbX6QYjQt9xGSI2Ti0UgOp zN;eAWMmv}YDBD1E^jL#^tigp^gj)^bR)Zbr=%8?rvw5+IibW@=AdcJK5*6hmZj_T2ti&UsL9Za`_@go7SJ67QxTeqTp&pf17Qe-As5Jr!@xWw&O=rT z_#2u3MsC!@EkWE8WErq%z@=%2_fNu2qL5P*s(s^!6QKdO+*0(PK| z6tEK+cOoY!2ZkkfqQIT#Lkif1jJuE%@HAkFUFd^ds0#&TBD+jflhP)yAoU8WK`DNd zWO0&g^{?5wVD{C+zu-RR$<}$YH*A9#h>%f)>_P#{Wp=r&P<#rjWOkLT0G|SGl54i+ zn!SO80RwqvF3)VCfKz7flnrpz%w9Ds6yw4TGke3VK&&$EBU+K76=x`-Rsy(2E4~!4 zO7UE!G^VttRZ7!UN?Qupq{y2TR~x`{lTDKaD!V{cD58f5m5oppis&IpWs_6|h#v4b zcB$+xRRM};3>;FWL#i_*z?A^5hg4qx@CUi{3s!K4h({F}js`$gsoAze_7H)D+s3h69IHSQ4F)!_t{Yfy3fRjw+{*@0G4K0W zw|#6K3dmr&3|4_4c-+Tf*7Y#!O#xYKgDf_X0ML|!u4xO-cKl=eR@@|3=NPN2IorBqXz|yBh#_@@ z&b&ca9pZ2?5U&e}*R`d9qdM`Z&I0LfSmKVZ)g9eO5X&5$psVpuuScDT?fC{H-Y75G zgn_wQd2V^hCdh6hy4XeDbdgs;`1PP`u7nG7w7w@cz(L0^UBT5{!#mOG=Bz<09fcy`|j z`|ETey=Aa|8Eg=|y*}KU5Z86>x>U;J0JlBat8o5Uu3iVTcKBT3@0WsOyS#%Vr5Y4) zPm=FRW(v43Io+46Hh|lG$(;gTOYL7v9sDy=R^JNS|2ys!(;rMk&42*`1DO6`5(*kjVy6ro_S0?pz?=#*%6S&B#4IGwDzCu>{~E%flgxT1v-KfW1_QHo*4a8w__yNOUaPCI zR#%tWX!hzXdv)%Rpn{tm)0vOys#AZxQ#$jhav<@=-a31S9Ozncp|>07_{Xl|yIre7 zZmMWts%T)UXkbo0A2L2=I#$rDXke;nV8CLIm&5-;$jz~xGk-cWfa^xIq?OthE46Jw z=K>ZSVisN~atlQhlw89f$A8T7Kjt!vIhF`j#8AZytT#ZpM3kcAlGAai1{~lZIh|-a z!{lKukfIH$0cjC}>_U(;=s8b5cs{#br}o{62Ai*{`KlX`S*`%Om5&DUdDC_Nh0ma)n*)(W>N0a`7y zsRnj~lW%a2ht4mWZa?K}7?zmN%kz21qVVo_#|~YSf`LR{PUIbT21Tf8BfFo#K)NKS zOOAaHY}&ia@jwU$o=Wml$uU?vYtq0u4+dc%8p+Yf@r}FRsTxhjje`RtnY?MDJWVV! zAKn_1qmTEU(DNO1-XXrbo6U<~^Dd&PF>#-NnslHinP=OARzNvNmeXvGo6VKQLxI`j z-{g{i+3IU`%sH;l)~(48)~4_3^$vq>oBDjvfrF=eSIT?clvHi(@M|}FzYk*uJlnr{ z{4;;`TKU-rZI`!8Tk|q%f`6ZPc>FHa2AkhVpZ6guZ44{MuuiZN<8JjH;j-c9K4eMQ zCMm4ga>POT-mCAw8OcZeKj^cC{UR0ot>kSUkc|iAvNW0e z*c0(XBuQM7WYVmyH$Uf-F5@wfBGpKdY5~y;tQ0U^BTd&hLt+zduvnuk*0{fz9OUrk(3k}n*lBd% zX{=u;{GPw<>WC|?T%X4 znBGJI$MxcI8{mvyJfk;(K>{~9qgT%8RSL-0tND663OKJ9&+ARV28x?p(#x0hW*fkA zN$)@bm-P;p^^O#9MK4~l>EotexT!Zbdfsr_@bz&CxYJNWlTbrb?`EH9JzpOw!oX~U zINM;Nl7?aoO=Aqr0z)@H++Xd|94rxIXd7c_M*%AhO;#G30+j}qSZN4YX$Yi%SVKUp zArSnASR&TYG1l-Q1#B>g8w@6h{=*XS1~LAB0B-RHcS<7B;GSrx5!YUQ*6T*6V%#Lr z;FV~oWdj5x8Uk&AE{TS&6p&BmqDd~-3E2H!Hxp<7`QzKo&qurN~R67NS2{amcfUj8p$?z zWE(sw;JAT1Zr~~4szJGGLq>AVQ0JP#2SNt$z={nX#Rg9bxMSe%7!l`^)R6PI%)r~{9itl%swI0p(y<1A^M1EiB;z9#=BnQ-N1B;C2sKC4W6ffn|zI%d`%mm_D$ZK0;UMc6dQtZK)fKvm($o{iOqs(vmgPlEd~w>@1%zuo!nM8>ut@8; z$fk<%5-qnxYX*t%t)qs_tJdW+@=?sv@L3u=a5WuS;dQ*>&`&OiEoZYE)=j1Ij%#V z!fSxWn*R{mV|WSB zawFeQU6p%Tm3s;KK6p7)@qt(IfrIl4FNZ2V@G3rVI3VNYQ2Bh|-)FS_u=(t5pKEaM zw(+_U*hSbL?u*=gn}UmTP260Yf{S-e++CAIohbHboncnz^H93E1E9U7nc5CuRk# z+8BsXxCli88ulh%Tpv68)`icB=_r`tf*A?e@Sp$)G2DddjbVBjSRSxwxV~GszPAnA ztLGwp9bkI}b2G7NT-S=%wT=|E_bsh>OX~>K-njSatZ6#y1OW_C(T^CWqItXMa-JJ! z?abzrTF)EwKCCcc^d*|vQ_1P6qy zaCm~Zp5R?!X!wo1H8*=}4uq`0+|et4I`vu2FUg3~k!Lz;03!d1&lklz zM)B_OtMLMoN(=-W9D@yRkb77HG!8ZdQb4LuFI8x2|3$sq{wrH8!xD#t4-N_K zsk2~);GZG1q=0OpNwyF~0q2Ad&k5bBlU|X~ut@NyfXhb5%SN}Mt#7sV^fX4|yIeLl zzHAJnfGu*ZEpk1oN_UFh@p{ zzDt4JzCi9m?JtFL%R;#W1zeEvgS4T5bmhZzr8|}0azJTtK=Gr1qsoUzmF^JKhVODh zX?Q~M2LKZK2(xOgDCUY5NF>AyvQU%@MJp^wEb))Y`j5$z+GmqwF-f*i4|PTs&&U>P zggItwj@gsi5*I7h#fm5FfN-28>pzo`GZ{xXB)7;vKEL~q>d=bc2C&Ew8r~?*5XI4% zwCg!_J?9L>#CXhGIdv=N3^ji+Fv)0{WOM_q7X#Ccmgz<}sDk6&3)!{bb9yLo{S|2H z7igLTk6;P#Re|Ow0H6pE`HRNzZZUjq_=`GjUh-_^`Nm&Y^a*Uv^9mYreAL(EfuBe| zPo(Cs)eT;`H+t*IjbB&F7Bua%AHH+SXNFary`C#4P5=3*Wf&PihNNUjR&WW7+V$!8 zn$h0Fh|6y}Q*(MbH#7!f7~dGC9e5frP^9xM(zSz-KMb7J`=8Z!r);!43~oCNew17bTl*_4TC)x1N+g4{b!WDAuFI9FEZ+5ih>b)jsbg2=PYYPQ)zt@t&H-5Q%*xHU@kH8!!@af)4> zjYOPMJ+52=PXA<`ZA8u+ktY}#4s4t9q0{K!hrff<;6=|~nIlil9!@&3O*48mX2B=F z?VkTGopkrxk$++MKf^07D=4u}meqYNx?j#GQRmH+v;?mMBglUtM{A#>^#BJs6mBJ6 zI@?MvEC7)ytJY=I*mn1Pex_se`MTe{k8d7)w8+q-G;);21w~6OX5g zu(OJ=6S8LUa`?X`>;xtO^7jiC*Kf{!OKP5q`SmG2pnn z-^hxeB!g42awO^Jkz@dScy$k79Ri(!-JSe1@&q|gum?qUP;|GU=i7G~RdFNud&-w> z$NY8fUtIa*^Cq1WPQ4mM?qkb-2*EYvv~yB5oK!_1ufTi8Wz}+7tq$QfB|xjoYI^_{ z6kgt0vxon;@2~|z;xsuJ-IUQyx%z-rOXr?Yi`L=$-jUtz$Yp+7EU{cg%hl?Eeb|-_ z$0j8GbojuCM>7V0Tk(N``Gic;Q4Sp~XX}uTU1~m;i~Lr=SF%Jot31LQcYj9|@7Pcs z%ruEJZFmbpWiiwybA5p+<#cv;;M)y%*0=la9o}>J z_xInlvu^*cQXay2{pHsv`{;M2FP=V4cJ_@~7V~@FcjU!SmhC6YWva4AuxzZ|PyL=; zS!$M+n#(K?Guv~5tW8&tpN#a}$x7r2+4jJBxOEvnz;XU&4H z`7GFvfkf4ssQOWvYCBcyPSuafRNJds_o{v;zvxqUMeWmxxXD4)dQkO)Of|^aCvWJj zD7_WSJUdXto?M9#sz(Uku;-=k{-|2>#{GXJc~2*_(h02sRukO)DXnx$tAtz`>3tz& z-C_*nYo&ax0;wVxxTLkeq;;a|u-(<#-PJk*5f_$ts8t_o9YB-9z*DXIRO|3{wLUeP zPjMrs?3Y@*ms-amt6YnB4W2R;18=qJTdhO4%~xZF9sDi=12b9snXD6-fG{wZRpzo5 z3J7EE!dOQN2xslW%K`9xk+7eRhK_V9c6ZnAH7SEY52=Sj{p{u1t0rY1=q>eDsGpxz z|IBU7^0e(ceO8KiRHUL1wZ|vu-4gU39*6!}@$}8}SHqv(yBHMO^QTJr|JLYnyd|49 z_os^gU$85X|Kck>`>LFD`S;8f=YC9B{u4O^UKd(i7rNU}Shpxtx&wvv$JNI6b8q1H zGwEb3J5~pAP(TVxmQf+^S;#kqWmMmx{jjjH1Aie`ZgJ|Z@~nPPJ0*N&fyS^vBU3R~ zQ5x4MO>NLs@xY=rQnbc_0#;~TS7>Te7MB=}6r*vV0NXr1+{aoCyS6;S3iqS2_ z=nZ*b~pS+&RBi)Ff8N zrH?r8!v6Me&O`O>9zEE)Zr2XT9VgvKq2^JjD|Fv8{hOZ4?FauxeAW{gWg=q*iwd6j zNJflg?5MDVrHt!RrWOT6FEUOx~^oMXguj2#trP{f#v z7$*w2z*sIYt`u;Qsd161Ljji!ND`K#t|EpoWFz@COh^LWR+a^ov}K1nA z^E*)$&ug5|YrLpJIYpX!MH)Z1s4f}mt)gA{LG!f%`Pw!%-(3QOfL;rXO69g#T06f#A`|~`1o_B;pBV_3iinJt2N|F$G z?eMEfk$R*^Jt1!g1DR4lrWBZP|FdJ~7neA&Pf5xtNrenaEOA=0J1yDU0Ci7Gz5qaA zG#SVV!FWO_E0kjP9x~7K<&*L6@E>@4YwD1iJ8MpO2hqdNWF)gB zG^_kD*0^!Q#)IoDEoo!xJ=)T8!GwToYyU-WVjbW14cVdzWQ8Bp84qIqg;qoRL@hJ8 z<2gB^vmVja0cwTI);?QX{(fOXP5hRsd_PsbpZ~)5GoVJu{opS>CccmDt>?mzU!Tm_ zI`JL;WDqb$zC8C?bf0yADr@-P5U!WQ^^R1K*+RXtP;Z5pGTdaP-n>%p1a*SKh7KGS zIB>$GitZ%fx#MxKOOV47%g$I=zm) z9t^+auh6pU}_x@F!-PGc`hZQFZGRH>OTRiA#Qut*yybB z69@~sGHuh%>qA{9|C@atKD}FKUW)tfuP&2Gq{TU{<2kL<P>{}n}+L~!P~=47U|_hdNcKE7VCW$>+4qA<@4z40VS&}N^gzQSBH0nn?&p7XuX*N z*6B^_^b!<#0(!Q8Gj{k!K`AL>U)rw~_G`;3^N|_RqO)2Dco+;^(Q;R`GSpQs0oq;B zcA5mez2?_H zYh7_!h$Wt}=o#xk0U0_jLnrs2+~H{NRxS5J*d_V?*bP1%b7Sw(V`i#%&e0mbRD#6Hw(ANqy@(vdM8c~CJZ>8Nu$8bSg4 zk#Rrr02>wVV?XM#9}Nd!X87$<6D|oMWbC1=T`21eR^!YRr{EcL?LtZ|jkN3P&n6*l zoPtJ&ypJ8JAa~5Jr$e@d5QQs@Z57700W%Z^GTHi>Y(p?IVIbDfH`dS(@+C2lE%wb8 z`vC(!@B@&~f4bz9E_s9A)8o?B&3B)+p7K5(f!k1b^J)7pr&P)##CPb$bP39vqQMVm z8|2)={gaH-_j^nwM!!t0kf}wKHnM@`Hn1j&Q7)NnlgxIc*rU=}E}b<|jBxQmR5GAmzW zxNA1R4W{7@rWqwML(9$3njjMm_c253K11t80duvj=4#sm5E)~6G<5QTsa0yBCY2AU zQVahJwa_s4?!8SjwV@WgwqI+M*BU2kZ3iamI7uouCp00s#$g}h zN&zPr^9jcBk4`PeAL}xUxUq8?bFK|=lHpD=h>|$TSWYr76p+Voc{UOSjJbeur2gv{ z814dt0JtO;jliH@{h7z56rolYZ;7btxkwRc5HB8ERPs3Y_3cn@GJWQg082g4;ch{`m50?OE^RJT#|p!`A1) zeP<0}t9$Wa)-p6PD za0|!anb%jnm%f2jk4))YgE-e9!$BF(MvTEe#^3}K2b^rg#`wm7-js7BlD3>>F6ROi ztQc6tSr&0Fzsf_i^EJ{g3ezX>bkv5A3`^7?8 zQ8D1lC0A~6PB%Dj2%`9Sc}u^T?H=L8tWeC^7jtzEo$uW!vHNc%8+{&cKaa1|vc9%s z*K0MlU|^qQzfY=DefJ($eqsYcL-$0oe-~nfDLx)Ogs^`&tgIacE`z1!O(gF4Zy$R`8lPxQ11bR_M&lNv@r2MPEU`-Cyh>98DhXj=t;S)k#@X+5 z>${dlKU~E?qJ~S^2~7uZxQaz0)A)#KkVmeVM7grp5DMfAwQy! z9|bug7zh#65WzxmE6xzq88$$epoR$+ib`?5pw2G`z_m%1<`dT830oG~(&GCs3qRiI zgTv;r-9=IllqdYBXL!%|9QM~DvNSic){U$uY!%J}>@O^QG;0xAA_w)xgZeUxg{+J_ zO^(z{FKJ^-i`_lpbm+M0oBw_vo5}gl)^_L}ne%t0{8a)EW?!5=qA6bBIGe>RZ7a{t zV+`}VPdLz>^lB@*Wyy!GhOx$D4WOuBThzfvgObvbq8O&V|5H{kG;{oK2b-uoG$sG{>cAm2gm4ZKXf0Kb6FqpJ~V=^mM%eC zj+i6JLw_lJX@+}(FO_I6`^0wp%6+I%lM>+;JB-2(o3fR=jqGkC_w*yr`F{)>*BU=z zmQl_!+Cdl~2A&(m=SCS^0vI?Y%BMs-pv%HQf!LxzY@Mk8IGkBs?-~Xkh?WO7bu7b7 zmN1j`;>Lo2YiBy2#S-_B(>>%uu@KIZEwf}R#W!?N_CF{$hY%XvB*bh9F3><5Cq$7$ zl(M`?JOJCeJgEzt6o*tRj;Ivf4T3Gn>pf>=&y~MKh;}D~&y=j0k_$wNL2Y7kG)hL+ zWaJ4)BfPbhQXxTE5|2}Bwl5#_T_ow`i7Gr%6$nIv^EbIt%=r{^&Ec#bZtp#1Oyhl# z6%Tlq>{A2N25wkV@t`$1t;L>p1XAO@UpI3#w>jw ze?TDmA`f>~Z#=74;Vir`G~iFRZi{7Ps?Li1S+Q(w0C6ALb=C=JonZN7-u=1XOTUqS zT(Tf03o7uum5(=MT`RymeP6;P^RfllCrUvYNVxQ`ot_4x8-72gQ-P6m*r7qj#V z75V#2FFw;Nw>DqLF`?Z_ntHH73^phb@QX*ZLEtx(pZWKGao}0bf`or@n?^l0y}3TG zT@)FBT{XM1MRff6+wDJpGBv8|d{K42s5)O%oiD1+7ggsA{GI=Q<9v~smfRt9Kw{Lp zack~C)*Z+N)F%8@`~M8LX4lBETx7rVQSU=Vf;fAk2wi0Pi>w5Wmo^z6#g1!)qKWSE zlyiE@)c|eMzV^}B&LJbBNt;u=>nXl2s8vUI54&tIr$txPY6c$Y67nkHSTu2Mg&Jyy z8X8k&uOdY*QdGhF1&S`Yu`LVe$?Zi2{d0a@POjLd694n@#cQFK*~^JPu2_ca)!ME)4CeH8|_7||A^diwiF;cu?t3n&Lp=4K*NCL#wI$h7*G>SK@G z@``iw=c|*g6MUC0uXqIBx#qcBtEDIZMVrSh(-MDPeW_$Bj!4Rpa*H{*8OaD1aNL6O z(vNPv2i*VUhX*SvPHgy$FNbaV_{oY&(dbX<{9>=Qe;rdPhp8yd+5qn*DJ#jW-O;mm z^nP&K0sc1foDr%Tp_cLL0&g3+vQm{+s%2(@ON)+1cQtifMVxY_OAC4{J7$5%hr{L! zW3K6!H5EBzoh#kI-estKlrbD=hPU!@S$@oxw2nU_LtXcoGCY% zc6wRwSaM_AQ{1u@;p0%B=Br7Y7aHk>Mu9{Y)4Z73Q)5o7CUc&ovrE#sL527+KToRp zcy8Y6ioJbpmoV1#*B2#i*6XUT*Lgyl&C{F6QJNG zC-x&UIwHHMoziC)yp#!R-w7F=kX?X!9FOsoY&s=ZhyA^{XME=_7bDh?(RUI$nITXC z0`>{Mn~`^y+Xr6%lNC_wL9eys%5#mwbB!B3?&f0?*VH}s1uUDlH;zv+K7 z0+-z389_bXPF%R23^`j;vdi})h#4U*`tp74;Y~3Xk6(joYUAEvK3ZGdYy2_#)(Gg=+f-leIh#%n@-|QLR z0X7XRvDAo`8r^ok+;`=9MilgGC$?KOPd%yZv`%-KLb zh%=}t3^L8| za;T~5vv>U~G>&$)VnOVPn!aKYZs9{bf>xQ1aQBF%8<=RT0y5nU6 zxe~(Lh49Ys%AGEr{L>-pv&4!EsLMxDb^WLOnMj6o&?p=on>*jRO_cd5iJA#WaLO zYusd>)^DCR2sjil5T^4E)A>RiK3?{v_J@TLuD=etx%(-WIL~)H&vyn!Gz=8+U5ogh z7oQFPSiYY_;!jfr=TyNR+<_Q4B-A}5G@wd-WeBx1gt`=vjl=VW+7xh3@INOsr)q!A z5M5`8H6b({ce+qi7m5ys$2a4nPAnkHW|2uKj}iOJty~ z8K`HQTaQNvb=ySLmeO>V5HviP^$Yv{m3aKuB+~mPjr}H#3&l5{qjAX5xIr*4mbj@m-_$$7zXSszqB%r#f&wcT zm?B!Hh^_!Y=>hUoQ7Rv$mRSv;8a&xz9vJus1~YX!d|^N@3=VM6!M(l`&?~{A-_hR} zZp+=4IsUi!A>Z}xkWAX<^446wCe`*b?{K-iKs#RDrJEicoBN1PevQIIlF5jY4Scep ztgH&mD!H;$HZ3i;aKN_cgs&Xe8jowuu%+Rl*+%_f;Ea|#QyvC{fwNlftPOBZE1lEY zQA|z2tXnYawb)@_Uae)HIN~P3Y~5hC5e0;@ZlSCf&<$aUP_}L;+lT^^*??rWB}GxQ zR%czSbEo#{cpVq7lPDlZ$K~iGu)g6=i*%?+XAe6$2CnJ2YdVPn?&!ojI)wtV4bIty znoCbix|n}aXOEi{8=Q*`H4{?;R$Xb6+YSTQd57z~%hlRvU$|yZ`3M8k1m|f&O)B2{ zf$01|todn5Slog8qdQ`WFq3nbsV4O|zlYrJAupR)9p_ncO)6F=#Oxemt_h(zMd97= zjvcxtg}lr8ywiN%8$O4@z4{JaZhe{Z4j%)c0wuNX4)Xzr`OefbJH;DM@h;#oz+*ne z`=8=JqJY!9@igy3MWUbPo1NxA1OP&Uh~wZi5>F#1sJn`9w^iY{DrIFcGOS%Z0|!so zL7rxe-55u(O#vZ&#ZS9^?fpNEl)ZP77CTMcPLmOKlg>TkGQVo*Q*z~?q#i7{s5Yz7 z*YxAIpq*qV2tdW~f4H6Wxzq73Z!vILV|N*+ag@a`ALjjF_rbss-gtyp+w{>b8T?5W$uT>^H#oxkQ@}Cac#KzT*jszw@pNjAC64jF z$M~icaFJ&(@*=ehU*oxJyley5U$fb#@AA@J-a?sm@A8g!d3Oq!Bv>ce?Bp{AG*fV( zw)Vw>xLB}*G(0@8B?7wy2b&p~dTq1X?#I9yfn6hrR4m#qf!!sDlxmqSu<3$GDUSI9 zn=goz;&?$o7X$|ih%ibKMhj(Ljxah#7~Lr#*2u;h#f+)lZa&|Au^CnqO8u@)qNjC# z{5G-s?HZZe>u4YDA{*%6I^*9ud-&vEaCPi3qNDTf_pwdF)RMd2%kWXMoz9o z8reu=S@xTM%*jLZ3wpno@r-k?KFlM!&u$~WYocCA)JrfP{Ni@%*`0bWXthVRC!_Za zz(9sx&d}RYL48Gfu}CjNup*X-H^}h@J8pm_E+}JPD-0wWS|l1;$F*0V^}5li7z5cj z;nZNYQ70_L2CI!aVZP4WQ|oq`V3{W13RKZfwGT|O;68E%|6HLtP~ibv7Eugq*UH{^xG!+Nl2w$UGiT^j(Duf5SzrH-+myZJv6k_U%gPJ)SSEZ~Fz4%=dn?6x zw&wL;H9B2KX+)=w)Nqj+Bb8-~!wh0^GV9>5sky<$o$#x`p7V7Y6J=b9*9h?%6Lmty z=BDlCDYH`pN6r7Dg=-plyaT+$f%0meao3rSgSRH7k@8|!1mTKMi`q$V3f7x~A0#;A z``#6-cLl#Kx8uh&t=*d(5FQEEM}l8hck|8KEvFN!#&f~?T=0VfF$UfU);EG5cziH0 z)o7h+^n=RU7?@+U&N2D{Ap!>G8?Ez=enB4$+B>``lpMPj8?B3te(H1bw$1Dl-g zp08(WsqU+|wWf@C5s^@*^*%C*GxWj?y#zE%z(Y-XTZc^R%1bykKg~C2Gq>-*=nY*x zoWI`r%aY!nOHR)vcZgfczIuE@lzvV6`}mM^=Pzw3{_{fmJNzX;6(ZYbg($5hf@z6B zTSopvl-5gbRN>gP3H!+mrSfWO`2qxc51G}is%dMvC1!k4|I}(NqD$J?rli;9`wz`^ zKd`@2b_vfb8-hk>ryd{!_**0Vtx@5h*Y}La$Hv^Q2P-a;1sk4zm>)d!pcdAB67b)jIgNuyANsfB_!z@ z;}VSwBf+l#hYhXPAZic55h3d}h}r|N<9(9`QF}m=#y&}7rIO;)G-8^@{QJ&6$&Wne z5Z=yx8gZWukfU+W(RfjYwOkFCt1;bwu1s;Bt#1H^RxUKfzT$!MWQcPlYFO>d^g}{ z!=0YuJD=ivP&Sb>{MTprku|@cJLlY{hD6E8=SSxAKm65Z@-GGJrm}0&$42aW)ctUI z7#l>b;n!Pw*3Y=H|HM>#{`KhZ4>p$qW*#QHArgh~dD%3mLtTojf~T{kYrk^vig@U(24a<@%tHV2O(gx~Moo0Xq!Dswh@%}1LsPfw{&}i5H0+? zw)-V)^<+uB5TqAES=0xVup!GigKwX~e@5N!3~xNcdr%X8hVOcY|B3?gd1F5B0dD|5 zL_XgupZ|se3V34y??Evr6!4u3_#qTf$QuiJ4~kNuknd5*4+j8r8IlC{lI35rG}m^X zPR!FOpxqdn{5A2z#_3t)G0z(GXAJ^8j8mVa!2654A0Z!^DwoOF&0Vhf;+gpWv&+P5 z=ed>hg1*ZpYvqtpIAkmwO%W-{17Gx8J&|N4p5E=1BDVQlpH1{?itxFxgA+`XC?8hWJdv4B=Z%iZ2Gap z4axq7VKr!Nq zZGeZ!@gZ`jBpxHj$2P!IWcL&~QxX$paiVPZs#mhJ;F|dak7J5#onqs!2$NBm>_9m% zmdfl>Sp+8(Zn92h*U2K48oo(pH_0NThGU5YnN5&I%5j+~8#85<3N}6_v&Uo+4%N8H zDVaSbi*WqLK&IK6X|74F&*Nrv-0VOB7tHJhvq*as6)9Y?P`>+c#W7rQr+`I@=OV=y zjPCd@i$94H`5VY3tw%n$f3Clz#3 zaiD;?DmzydDc|Q-mEEd}pbO(BX{wZ_TEO{Q0yw6r?f~G=aH&fC#ot#Q>easSYQ*`R zj=EJHb4Y~AY*wDlT4775IoY~;!;C>CS8St29=z}@yz4qWr&84DTJzEqS{AR(A$m`S z-kPCzr3`LaMr)SQ6%ywyD_;HFq(-Zw8vGQOw6yW)QSgGV8cyDNlsv^|t-M+51y=WE z`2~N+56e3G4m)SdxB^3VfcG)7{r)Naseo51f0XaQnuV>8k=-xOAjTOiVDKY*n?X)8 zlo7XKiB!&-%6WS3Jr&*g!KSSqOS(Gf!wm)BV2RTIG9<5qCzdSW)4c0xz7FV`>-)ZL+2MnY z$H|p+Sx7IhJl%8J>W>C+2amtQ|D*c!p2?R{{=10o42n?GMs`0z?w80rCGy@7yVNS? z=OiqqmJtd(+M7x3hbGK0!{+4>{#wxht#x^OJ3wsBA8ADTYba!z6d8s*ZsO zseXjiBztl1A>-mdDJ1tp) z-Q!w9XdMRbb4~Aa0Xbh6wi*+=u>}SmZ~+gv7GJl&(`4$&g7z4A$OS#*TEa|VU5&e9UY}V+npid zZL?6lS*Q_2;A)!1UG3G?JGW9!@j-S49kvf&nmYt9k*cWws;Gak0psOR74=^g^$&Xv zUJg}J|5Z`{?=|W_@~3_We7Y^qeFyC*V!CVpEjQwFiQ6Mjt&yjCgC)NN=$xnaqJYb4 zjmxSxnD(*6WwrBVwHE*vrzbD__}1=sxo@wh55IG6aV=Ma{|~l@BB5Q4G5jIa}o~LsH%Vy{|eeIsrA9Io@W7kcF>!z~kUFMsXyT=Xs z>tyNuXc{=sFo@D;YqkN;0qHGO!=`F<;Gj4;xz(FZfA2V1DT)IW79#_QXN>XX&*yyN znABNo&Z{`+j4*Zky~gY*GD!Vj2r8}AnVFj8^PMOW1J z_xqWJ;~tIk&TZds{A}KvBgVa%`y8GA*NXqrU%9z27u9%+AhigsCbN6r^=?jEdpZ}@ zO-DOlj!n3{aq&BOxgFAJ#tn-uHS{RVMYen=Yp1SQ?-Z8X%joqYb{hS}ZQr^DBPw&z z9w1lipR4^CyA$FDM0K#+B<^l=B)RYE)!bu4*F0p}NTcVb(H|40jSOyX2KO;GZG1cD zSnsvv!}Ba_UJIF*h0M!B=4B!CvXFVf1>Jvw%nLhZp%sxjZV66s4J^~3^50PhGGV_! zbolr^C4WyjVlQKOv;CC3pK`>i01!x`lqAYYr8zC1qZ~1*3QQ58mjm>Ucu|Uj;LuEa zR$|V!i9S9V@#)0!K@anuW69F$5DIT{9f;R~MEHzWfI$_&6T67Q0^9>$_kg#`hS#qa z^jF#N2HgjqDjS|x9q=Y>c=cdZJ@8Yx;g4zneuNwTLm)l`65)p50>l;|5nlHJ%=iGt z|JO$`JHyiEp%crM%=ndzKMvx=CuFE*(qwa5n^P%vj6hfN7`Hs8FSZGP-F^M4i9TcV z+pmf7`4Y+#ViH2yT&vC`WM*RGeM|K_=_Fh8)M{bLswziR#I>Y;`0uXr`yX?(nJbYX`q_^_!M zy+f!dgo>>}tjEs$W^#yL_zwz@LHpD^&OBL&9E}roY@$ve`t@G@puKu;A`ESxe(*m1 z%NV$t^Ki!bn->bv#xRw(PNlmNtH3ncK8+bH~d4LG-3Pf7klk9!taMX&n?2s4*>0sDJ96*`dE-23+A{kfBGTz^K2Aq-(;kl zjIG>PFh!tA3N)Gf9?c1w|BKFJ{;mmg=(?FDBD|7H_e`bxkfvq2ZyG(20PZr(T}Hqh zEig+R!_+YXra6Z|D940y0uewT#xY@>Km^dIaedRcfhv1--wYM7!N_bd3aVfl=kJZK z*o7KCCCtc#83jz034t9(=N(2@Os@%nL=%%}5^xX;1X4{*s!709nOLC&HISP75ms5C zfeADS_|#*PE@xxYh07&qDWVPz$NVa&>9Sd4Hrq(ns6r16791@2Li|z`D{^80j6xxOaM8eRgUT&mqp`c(L|)k73Ew}A%JV* z_-mp+U@ih(XmMJ>t6kTU5sPXE(u|p>Xrd|7Ylm^EaK3}xNVaa@0YW3QJ z)%J&@C2SMjgYp-(T&T3kn?9<%R1y+T&hj_aC6v%K-NdH8& zVhv28mNkXI4UW3ew*7hvSl!^9vwaNiUmfX>&M0d*eGS*@?g@cLj%wsYLaert>)goo zAb`3^UC_Q%>jE_0-pkt!ujb0ki>f= z@t#=d7p6$!CnfRI3808~DB`RCV*yzYF0$-1PimQG*T;#BKB~Fz-D9j z&Bp$CwuYa>Gun!Ri^8l!W^aE8r~^u2mNJuFnaK_NGDD!zWNI`yVm;g^bt$)XKOZP- zKLu}R4lWy)b@h3^c1&=A#@r@ZY-&@KPS^cqtkbWl<JPiG6;@f|bucMNzmz>s1 zU2&VO`1He`^NU`&-v0Y9WEbVfRJ?!P2p@c$V~?vol|wv#h*ya26~oIhycGd#6u?G7 zzz6EEZVn0ZA;IeQpT-@0Z__8QKp;w#qeQEqGP}f2_LibWV5|sYMFFo4AP^_I$BBK2 zdHl8rZi_-m-n86#-}M*`Q`CrkYs5iB{8okpG9-Zr8^0v+mn4M%sw7Y)2}H)0Uny>*PZj*&2l zEle81^bcVMU}YN!gfc#%%*zCgi{k{=^I=V&TG= z@nMXAWw*mo*7?h(!>5EZzW%CY3+`&lpj>%pp`?E74u$K|{GSaY; zq={$8l<=502X&d<8fv#jz^?3{4;Vk8cv^4;y0U_%R?vFvBQnPAQos6lZ&jeaTBQ@J z+C;LkzBls7FW}_@zLg>uKDd?#wY*5M2!{wDL=cI-b5{U&1(6tu4ogmlB{#eRfcLl| z+1`+xh*k}jL9i?mVfv?Ja7q@5nEMhLl*l3xQ6Hdy07WF4Ia2|dibxDRjSAnW7>Qve z)CfY2A|5p6RogO)X8KklKj`f`x9z%qI64~w(K@SWoht^u%53U=cf#A19kO`9bEylg z-58pVp*dnQO`*9ITEx|Prc z0!1`cL^A|IWD#v&M0X|tH3>h=Qbn^>v_vqF*U+9dv=2dEUq@4Qs&drRY&|Uz+R~3{ z>ai+CGtD;B5*C|=PYE=Lfd&)aCqW?C;1O)-hvm_p0^@=WlL%m|!DFkTU$Pvblw}@A zk)~S>z(Dg&lyRvelY7uB3)z0zop=PWoQJ!43x!W%s*d|Td!z_ZW? z%!LZ?kz+FDm~4rFoO>qIJ(I04p(?kzaJ2r{AZiyIw@kWO%RNvNo zwd>Evs&Al&JkWSN(DcQ;otPL8jYlDzA*79A71NUTCVd)J6xM2_p!qNl)5`ajwaysLb&bSfmz1JCVoe>F2(?AvkvLZogdYA==S&?Y= zbQYwuB4$azKB1`WkS8&rO;<0o*R6W+&Ayw+6Yn6P54MSB!m_LBsvw|drwSRA%YyeV z-h2`E2n*GMg=zs$X|Ox|vs4S%ScN{jFk`PUqck?%bh`MB z=BFx@=eT5dTynyBBJ?wF)Ezxtg}S?1(xz{YXK_HUtSU>Fh4hbJmM;4Tx-6!*L*1`{ zaVubY<57RvTK{Pgb30c*$ByaF@jC}Uc*nCEO&!sUO*CVRi9O(Gdx9Bqg7MM&exr4w z4tYZ06yte{@iKI}X-q%5-~$N228?G0V^U8DBrwAgnBhyq=H0(|a?eK)NMwd3GQ;`P z+Ngn(qeejBG~;=i@fzw-+w;qTdEO96X8e+w(ad{I?9P~*W(b^N2AyF%F;#7uu_5#Q zGk(?RHIoF8)TR`XGdq3Qc+a=1(O0(IWLVy&NFz_)6ud9z`=@y>vg}2+Rm}n06H%UP zqWM~zx#XF_-AliVd<~=P#k^O~;4jp1L{q({%g&H65~d z+a@fUb)=KSoeo(fBYHR7LZ#L0verCIc8 z7GEYf|5`+^7SWra#R-;-!IBA6RKR`XAHYF z%*~D4f(doeV+w#!09uJ%Kbri7-Rjuc_d29a-J{RW{g}dCkfj2$wIEvsD>+9^|WlYkF`^1#F_hCYroQ z5&%hn1j-pu&XB+!9_-;sU@s5$s(>aQG^v110@x&wS;7PmrUEVr@+EQag!gZbK=htV#zZyz*chbc~R)G1B~^oaQdMa_w@!NwTaE5a@!*%&0y7uuBpIO}@ zaE|BB@#gFEdrYVvQn3UA89bN4n?0Wlzvt|H2B}Z0?3BDtW4s z7YL<+TfE&Z-jz6?YUDv9uMj{BPqpwu>9H}tonFDrgZH>7@fRg4;?!}4%&m~kqk2Ye zi(GVhE=C^1qcMuAXG*lwb>n*^+y0JH2iQM*k7 zrUQb&&nD_;lYsf0AaKw0!aWm%4;diPXnLX1#NdPRF~!%-Q{}sj?PuAgHo9e@x+jf} zFweN|x3S=&TV_uc}ww|@aJTk$xb6{qRZd^dDmX}Gfd+ZrWs1eD@STP zA~gddH8U$?R?J@vQ)FnmWN3P-lslZVHC?cB2TT!QunjOc6B~d4L%#rnHvz=69`Wn| zLg6lzeL0nV4O{c!JvN9ZN{wm9TwESWf~d=WNS4XS~gT zH!bJ-m2=(%a7gZYNcJEI#pC3c`4rnJo_y?Q+`-i)`yg%guIzvy@aj7~|dLn^xN}yiEhbORxQmEc3RDXg{<197g zEH#t>DkxAv@gMeH@XKejYJY-Ro=`SVD0@t~0f7j;RfN71RzZhAlwOL`o7UQGopE#K z^iLshS#P?mx50`R5Gd5Mg(@B1ay?t#CcFE=Dfij^-&ywHUs1uq=c1@)p1FGB_2xDE z>*0^KCq8%%D<&2XMRU#(Eqg@EV|xI0H$YcH87Z_)*b)x~XmzJ1dxL~H@E+1t8|;l0-P+|<+|wiC0%TXk`(<%j4c;u!ll#tmEQe%P}0*7y55KkSelIM&2M zk2%1Z4#0)|-;WV-M@NhFIN2sn?m~QE$7Itn*@Xb&Whq{E!~ncmJRE0@_IQDC^sjvN z;t{EjI;6}c(aVbGPEC7+{A!NU%F#C6UI>%}t8&nZpo3Y1>5=h(*I z(EA>h?2byEaS?~SS+VPutIgvMX+2>?L^xPH{c-yRJ@%nS1=wJGaf7jyUJzTL(3KX^ zuBA<>0`vSM`;gk=OJQLBl=l*v-um)yuBmq-9z1#Y7}@p@)9hiDIOY-B?Fiis>u18s zDx${~(Gv;JhGPcLV}>Esp?}TVkv6d}Oc4Riu0Wn}=k{yc&d;6!fn>lZ1DQBDE(L>1 z!CJa^@~{SYW-`C?YalK|FALNBAXiNcq82H=qs>u?|@qG-u0 zS{j8L3*I$e;^HMof&e^T8Wt~2Ab^Qqs;g;LCxtH^p>)=}G%Z{lpSY(1a+DC+KbdmlFgmH-{yZDfqlnjYFx% zozPG&*EpAJdJ#Z@u1A5+JEx$renGK|A1u*&`qlOHgfW?^gBtqVPfwb)!-I+tZXy^>2Qxl|{-7GE&)!*`H@XW@bw3s<8*c5Bf8&;CVdKKo$a z#Hu}C{LF-D!Znea?V25$D5yNPTeC~^LO78!lK4A{_!}l`{kN0&dk67%81eV^w!i-e DhGi9m literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qhashfunctions.h.EFDA8E5E332BD372.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qhashfunctions.h.EFDA8E5E332BD372.idx new file mode 100644 index 0000000000000000000000000000000000000000..c269a312a65cd073bd2e84a9af49162901891c91 GIT binary patch literal 34026 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qheaderview.h.23F2BD834D7DB292.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qheaderview.h.23F2BD834D7DB292.idx new file mode 100644 index 0000000000000000000000000000000000000000..031b4e774c61fae901a07a385ff22296ae485db3 GIT binary patch literal 12500 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qimage.h.67FD69AB005377EE.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qimage.h.67FD69AB005377EE.idx new file mode 100644 index 0000000000000000000000000000000000000000..6444620843d77950d98a41684d4ffb3dba55b8b8 GIT binary patch literal 20964 zcmb`ud0Z676E{57uDH7l?y#H-9v~o|AS#BSBI1E~AE+osv%or_2nZ|U5u#CyM~p|* zs5v|m<9){Cr_pFsykam0uf#iEi7{$IjJY&V^~~1HYTmqmJbCR9rjTn^iD|Nm-R{abBrLAE`PBvi)fmWhkgsyg%-)D5#*KDp37t|-%< z>xgMZ4YVSSC?zk;QR2vQ%NN^ob2Q!c$j{5C#{9c`za+|{I&{WdZ_V6lbd{=FbE`r% zxaCk~ZaFvUv0eL^R-Jp7v~;U?mHdCJk+*2k{P`AY$-lQ~^$h=3|1!Otx4UjB|F3-0 z{vmtXKV(aLrtdU`e@b4lqtMwSKg%JgpMB*F{mU-&RJN+R`iq1<9rAPY3sVd2c}2r< zLkQ38D$MacB&d7V^%EbjeYm!eS{)zn*0WmFA=hEg8&lAEOkSolCqK{Cj&DH0o}0^; zl3*_=$Q}2b3>i7j-nsTXM~D0|c}@XyMMB0nr=zI1qp*8UoX&KHQ{~K8rXn?;m-9(U%~wWB99?B3AknD#VcCw{0tXl88M0wHc?G$uKuWnIOJ~o& zpXs0g$Ao6u>1fX_Ko5J-NLRj#V@zRAkuxXLt&D$mF3caLa1gSDES#oc1!yR<90ks7 zOr5AF*G~`3@OsP^r;aOd@ZX$F2R8);4ovc#{c^@rY44m8M{Zv`t^gq`-^phYn>z~A zp2-aohUeru;-jOZv-3weqU~dfoQ}L~dtsp?H#fSEGrCn&TvW4YIWu!utCrC@d6~Im zvK(06A-~WOJ({l$B(;x=%Km@CrZ~qj_P?>hS##QPtriX+oAuu~6*@AV|BVAb!Sm$* zTOP?{a-v5otN%Z7$l?CMf8tPp`gE%6?7#8h%W=4J`2Qz9g>uG!YVVZC{_KSxUmqgTfOX#KN3RVN_0GAzDoJ2iwvI*)A$^$FxOErxyl5p#+8>nV_%;u7$jgp zFLeg+OKHiAln+gSR7Z(ZDB{+eCn&5$56 zG_tXhCbtt<1!7FUy4Tk2vF7#D#bb@94anw%d%%@4pv6!*^8xw1TIuEC$hQZEAy1I<)@?ticD&7IP=y2Mhb`WNv0 z1%ip7S-`A~rT!g|;4Q6(Rp7Y_e2AiE_0_R&jeXT@5$d9tEsZVxltkA=^^$}vzrQYd zS%e5A=x*#DsU$kVr-$Rm>{#5^BC-A?#7VH7geKHQlRNoupJA_hOYAjGhyqiAH`U)? z`F@*puLD>=j2O&j#@S3$<-AW?ydLM*(kihYMDPGi51~*+~ z#1?A0UIL~iplN$>WV;p~<&8olmWC|$G2eZxmg|SaxDcCuE${nfAr`?CNurEVeoCVE z@>k2uy6aai40T(U0}KPSWf>YAWqNXJc|D5|g6*3doBJt=-hS8z#&)+Z$AwGm1C&zE zG39tE2?=mLFXVLk!r%rH>qyF;&OE0xZPi{#Uu}9ERngEQSg?JpF*ZU;^d8=cVeNmN zG%!Y45po%`ma!n$4|Q_b?@6OIi92K5lwAd$Rl2e-y?=dVwKJEROKhH|%X45m2a&|0 zP4BaNq&wlU5*v?VTmsuA2zC7siSR@JzyGY!1WDfDL%jmFD-h=TA)165{u|>?w~v$9 zO0A>K%yTmfAc~w6$h`FEOQh(DOeWeUHc%3(o_sT8>e`ZpZA4)b(Bi9LK^3f?V5-i9 z7KymR%MQj(IP>?AB#9N1PJai}@8CsDI@_{W&%H9DV+|IIdnC*!%%&uYPL)0K>iIu+ zRkZl6quVZ<%B)lMT{h^THE@oco-DD6)Wv#cTF*3d7G|ja&5id?Awe%9*vLFLvQUzt zV|lwbH{9ym#UeDtalUALF+fT5dA;%u9 zx_ytj6LdN0^^r(1U8C3t#*Mnk7%^#GX8V_?BgLB<#Rg{Dz%=umupsC5hJ?)S5_?~x z*bS!L;7^0eyxj1YfZ`p!EkZpUZx>@1o08}Xx&Hak;HZ}__m=9fv?-;gO#D zKmVh_eI>R?qgV>2rFtix-Gc7+Zt2s{BGkuDIv6|nDT&^R$C_ileukv}R<>4SaRK}< zKnQhmc9v9a)YIUB7Qqi$bTW1dQWBlT$mx#EpJqi3l-Ov}_*^i~g_^`6`P&Eb-1;|> zAe{)dGSgOl59~0Ch4WIT4pH|&sjaku%oA##a5dgkI{B?37C}S_qK(mEN}@}UcBpx~ z37;JtDzT~BAZ9Y_Ojes%^f>>+%RZlN878sW8pS&1xeiy3%Wp`Sd2nvV%=<4}1b^(L zy|KMbN%T(M{CjIqr?(7Q5-ZbKYys02eVjjxEgPM*az>V$?R?4WCC##}x|*`|(_fiG zVnay{`@y^)w4;p85j<|04i2{n4N!!5V|;*;=pu}JXGEs;?+voVCJ=|U%yX^2O-~(L zb-c$9!?G=cgdAdwF%e3lb9jI1lAx3}J#!>BggE3G^DLwU%l>P_98V@;^@rLR7cy}n zlZfKMkgul(`<_IKr5eQ?W}2g0g77CRYP8O3IznQvQWv95qqRedExdiKR*Q2Z-ISDO zNYf6Oc5ja<-yQXCu0@E%5p*{bU5J^FQoHSCDPscI293gDa8xHn zm%VUoli5DASYpZ4#djcmr>~Y{PmcV$BG_4C5yEg3DaMpYCDBK*XHs}$d)+xDZkq0I z=&xxyB)Ze!+6i}+DcfOm>v*RHxa8f7x!oI{8>Mxr@z)e z{g0sqGbA<+yZ9DN--5;ULt6UEoVoZ)@aJ#1`EK{Xc2D=+s_%T-RyJOK!yS5qyzF4`Yu2 zCDB=U{Iq*&PN&lM0$C{uQD`U>N!MNXhMd1yXZ~{aNRy8<-{UM)-UFsR`gwC`i|3L> zXWOlm*bGgI`Cy)}8_9RuO1~Xhb$g{nXoym@HnxsX5?zY2ZysH5Z9egl#Fl9+7BSNz z-3Gn8cFN_8Jx4_eT(dRkcMYKstveKa&S^j8wSk6HFzb%ZDNk-!TH z;*4<-N}?0QE`3~ixKH!d5=$jjoB-Pi(9Wc(ufFEz}+K{wT-QOb9@n;uybv(_S*v3WaVyKp7Z1&Hj`rPGfEC)Rlg@#OZ^tx?xo zAy8bl35K8@Zy%|-UUg8v0oym|psGLAiMj5qQN1SA+32=~Qw^!w79PBy^0&l-d7IP& zO+LbWk1(6O6--<8**dt)_m|9G$(!A8nID1oNBTYX?co=XERXnTGa4=&Ndr>@i;|EG z6Eg4Q-anYJMPltpk!zsl8r_VY^2%=%e`@&FnrtAp-_E4%%-i)tJYMr&xT5fr$6KxJ zBTbo0SSZj91@O!(HCF7FqG zDcXJD6bm}V?*j%p~PX#vw*)5)(sT(Nu5cZVeQu0}DR zndUR?+CA2D$?1Vlem^O(B^t#6Fdc9k>lE+A^7v+7NbD67V;=LI$FviqwokW~lNZf7 zWf82ncG?)*_$rCMi(+o?^9z8TNMJ&Ow#K&MN}?0o_~z%%M-H7uf;vd>g7F1ECD92g zhSl*|e(V017NHRmBpZ`$N}>~V?Yn16pQ?eU-Bf8e*tJb|aYoVA_Q$^cN?jE4mtgx6 z>bibt(!*Cpt=wBaq*7raXBaZfN(m1eV5KydgNN`x%bXU zY!*_;H^FohB-amd>C~=jeBrj3vl4TXGT#H!d!U)5-u+LFEbcWC3D#-dtOL_Jy_;q2 zf4o1zFW_8tAqsnmG)4L-3H9*)JM(wF72NKe#O7-Z&VubM)F+A&H@{f?{n+&LY8Uch z=6e_|&U!Gd*E^ZBVYlH%%(ROZ0b{^&FJmu1CD9dL-fYbitJl_xZpZOqFdf!U+t1SW z_HFdisml`ULL=P^(q7%ULlL15AJD94>yH|J9#i&g*XLe;If#1IbHFsN^5AJmN6A8K!!3ywRp(|?X+RV)fhFafAYzz_Pn$R_OU74KI z?gzYWZSlQDsEHD^Ft&(L5?zAvKMlRyrF1?LL?c0@e`H-HQ3#Z$)+cj6`Py`M2NDD! zL1SZMe;ScXxgivhX%Gksbj+v2julw@TQ*#tNlCv zQr~CfW6b{;3c3qCcj+`o7WHWS@|RnmDh~$g?kNLX8EEcV!mBT~PiS-NsYUQXF*+MN z`zeVo28Mcu7kM=igmdfSI)xq|CNL4La`P{tJy~o~u7sAA(1DKi+KJm=nYA+=K$Ooj z;XJydu74Dh0Fx^eLC@-LWqD+O;*;4RT*YU$aj_X#CaN*Kbfv0-34-32IG|2xO}UAgF=@5Lm$j4^&Kn z2P{?t4pcz_2dq%z3{>$-|C`sC$Ij}gn1!tVLe`XC5rV!Rx;1ji6_1)C+IYY95KQ)8 z#0_TK1a)ciiRg9uZG~X+NJYFz25yHsbjcKP`fKfidbBh|ymi#x17UO{5#@QzFprtj zT@HgN&u6yztS&hrA|5p%hgp5S|8f>y&Kl|cA7LR!Sbe?!qb%$wYpC~sj71(}P4)hd zvj)dm6!lM$7F0eDv(Q9SdOXGVk5iKEUJyOgO-#Gh=)EeblU|Jw;QPNmipM)IyY}F|TRNj~>@4s#4vo zMpIl%U6cnV4D3fMN0ie#rVXM89Z?=MV9-cu0FySJHvOe_R^x#A=7@pHKamEp- zaUNVKnVNf(I8qq{ktT03*JAzPIXZ} z4N0dVRkv4XAn6RGlD!h;v(Wo2WRP1X%IBcZISe+qVjpP6zn@V74iU9G6?c8Vfl7i#o~2q}7mo$$~RbwXTmL-0V$q70(k-@Cs* zJ(!_60mD4>=Uk4rD1QaMUx7{6bS2cUgvO+4+BDdy8jd3V*SbsZy&SnQhCROzX*{$q zX`SMD)Ib$+pvl4tH9kcZ$9hyW+Wq46mS}X>uz)qJ0lgqm;0lFNqgK>{!c|zIhN`F{ zD7Y%*QMb5O&+S19U18U1#ER&5O&Q`}{b5R+MU*GLFtHm2utd4^h0<>Hl#d1lnofiE zbW)3WEVY;c$#hPMxRF}Sf@IoRqC6WyXG1J`)}nj@nx266^bjM;KR}BgAek(KDE|m8 zeuQLt02I*#4txM3$tH3OFsKSfk!JahAM^-D(Z1w6eDGt)qa7~F8(Hi|mO^nXJfc|3 zO{@z!JT%H`W+gmFx)9}=;58F!>BD*hyxxFXG%TrEhkC!w_js{}DDMQrPB2sSi63c( zU0~Lal-#}?MFn%sKznorMExM;*YaLqNlhaPO2+h z=rWZHe%o>K#=~`Oap6=zp9&a40kcMy*(Ybbp4P6KD3`&DWssmx-Ci*41ryz?M0p?7 z-iLgTzCxKQupM-V;7@9}OqZ+ie;_C@7_uGeLFW_Z&rUX&fx9iDof zY>>_L94N|iExDea%YGrdE!ief&Z(K>OXg6N3xWzl$RiNt(Ltj_D6%5T#n$3LdcPOt zvDUGH^d5rZ?hX@Kp z@;zxi0fG9SJPFp55J(OUUs2Wy2&5IoJ!Ne&c^t=bDdj0{lc>qbe&G{J&KZDub3o%rI zS+_w|kWd93_53ej_yx@FUWwrmm~|WV2ofGaM?L=-+C7F&y3LxxJf|>k^6Er+D)XGm zyeXQG8<}~QF>gAbM0p9Tzl1fRXGl?A$~>1cZ+c%9<+aSPmYFHcD9Y=YVI4D5@RZv~ z!$xM-ZRBQV*v!myQlJOJybrJdI;FYWEgoi8cemTKoO!#u-Qp2ub$7ePqs;2=cGo<{ zeBEuFc$`_u#^HKn@f9qQY@H~dVl7Xxc zE`z_mqHci44e+N(lu1@m57dw}fel~rdL>NXc2mG-3N)mRXF|nsECe+pECe3K90);P z3Lzk{ScN|jJq-YjxeM;#vXHdXa6~G|fm+ZpgO0w6ZJ-K%ZX_LJ-ASi}bwEND;-C|j zvv%byg(iz24>;88;Bno3SKR`STM$T(kS1A0LJ%W5(Xa;<06`UKURd&RmP*s%icpNAo)NGMMCA9<{VvIyWYb z&qJ(kOfG=u1@I#PgeYHt$O{ldd4gx)WN>T-%@Nr`)VPYppwSQ(11nSr22~IQ0~vAr z1uye>j5I?_yNf;pgr7!#la+jBGrwI>({3c}$VL`@Gb zSgfKpsN&OZ^WOP8b|PdHCq_H*&NQ(VN1w=5c2prUZ__#Ztk% zDp;UyeJfZ*1#70~Pcg4kEKs+`r&z=(){OGx&7e`^_z>z?Uc0r{(AnKbXdTlf>W#@S zE?qzRSG|HHq6Y{ZgS+2HND@>Xhmnx#`mXgJI%D2jd78IM?kjn#)E@y&kgbX@Aqfdz zf)y&Rgesyg4tsmi>^Dc_tX49wO6Eg$o9F9RvIxo(00l+k=o1pHyvlE~ceAa9+R#Zf z!lPi1Dh`EuBpeD>sQ44AAp8kdsIU{NAlM0Nouf^tn9wFjucAz-;*<8bYepZKQ;ah4 z2O4^>A@B)~fFn<61ayN&HtxWuXX zQ$4sZ)BP~(;qJ@yFJ}Yjc;ptO`w`ZIEQpBGr5$C1NPK?orX6F0=-lOp-^<6Doen?p zFi@c?(1j#8((6jMU4JZ{iTmwi2>BSo2~5HtNyE281HFesQ1cL2X?b!9qK~o`R8L+j zj!}ikP!9x=!LB(zhUSuhF-WiCVThjaFj%4DV5ov{Fj%4DU#Nma#yM1BFI2&0?0A%Q zCmHDx139Sh7a}D13(Cl`FC-&@UXWhJx)42KU67swU5K6#F1Y$RvW2K)dToAsXMTtG z@lNb7_-md=dU?00f9?2k85WQ57~xG%`A}#O^Mpj zbl~i7SK*F(-cNYeFX++}f_$ns`3U7O(^cdWa!U>{0-Z0)wwj7^48cvMX?_Q-1OQXpXKdg2wt2$ZYVL4L1E*@-7Ux3q#zW2nO7PA!JLwS99q5L5w$31c7d{pA-)2#2K!h;iVn2@ z;^dpcoKLr+G58YteF<6auRi@NVK}||&`?lB6~sjx>DGY@QUz~O1vf8VPw`K3Tz?@@ z^2#q04<~irW)$UNLBm1`%p}TxfbSm=Oz;j-p2U17v0#d7^YEl$A@d|Jndbu*vO4a0 z_wc2NRw-Z+t3zgr=Nm6#%_*PvwEFVZr?a==&T@A#==DSMwaJbq9oSQ^(DwRH!?TeN zQJxHelcAQrWG_R)Wk}NBAg)7$>(GQ=u?WhB`r{BbQc~2#)K_+%9~;11l=OY8?sTMZp4WCLA#^k+o*yj5NG%+@cIgTXogJ~Dd#XZBBaHO ztW|UyReW>mLbu4@^FPr}61tZV>40zskJptY605o9mr1uZd zm#mfngD1UzguZ083~05S51^Q=mH~q&#Z^#3R?C3Flj28ELRQOw!IQC%VH{a4!V98i zRGc8Gj20VKsPI6lpvXK{sHi}yaONFpT{CXhaS_i3&w-NL+2Eb#?{+qL4wBr?2JgZC z`q{7y49mbo7%mY-GA{=U$tcPzz`O!11bz|`&0tssCW1GJc*vPQ0t=mbqP!Z+tHDAb zAW{AcYW)SF1mNP2uAx&|eR^D^@GXu^MKjXK2%LZwDvFUR2*rpSjzbvfR3+>p7IWYt z6%%3+i#c48iV3HP#T=wa#T2l>PTiv!v~!VKMI@3eWHvDF&vA%U{H(ymX&tf3q9TlO;p#Uw;K_~Y>ONaB&pWa53-=Dm% zuE*Eca7^68qyvn$6bhokAxRK|B(Y~v9M2+@$T(qZ6)Q=t2`h;eDn^njzANg#X@)fV zTNGm^Gt6WXy%^Ho!xk!Nl3I|{`P_Ynu#`9z97su1k^LaK#-*EAZ{i%+_NZNxhAGO0 zUWI;iRV0`tw&fU0YWv=bU1=Y{jN2&NbY_^&%mhgwn~1WhXiJif3=USPC`+m!lqFVh zbR`uNx)M9)&`RoB8f(}BMtYv*a4^GGq<8&+0^W?kyccTH4&edluze6o0caj~Y+3;^bc^F} zF*S}bPijy1ahzur*h#}SyYQZr|Kq~MSyzP(4>kXUZn|XrQEe*nlUfj92rE>?Csjl? ztx@zM?`d?;REm@xFNz)z_13q=t4rbT3og&^pv>sdxYmc3Tu9 zLvMY4)&3aAt76wkesbecJ{6Nn9O&+Ye(59-CqWpUOE}#MHkAkon~KYs15;@^zjt8$ z?WVa+|MbF(WZFbKxnvkSPb;+(FOFyFISmHtYkCHx&VZN5CF6LO)LHNnxnvyAk~AB- zk=5g|^PVSQAh~25&yxBByhJV;$FrpV2rrRK#xIg34`4EoPsRZ)Cu` zi5}c|DA{uf3m{jYhmspCWi9D)7v20y|r9>m^*L|rTQA?!Xx(S3nyDeM76=}LMCwI4zQ+D$ZDr~wrpOami) zFfIiS4yL7msNh_Cf0Xvai0w1Zey}zf=*XehWq~+MtQ=WjI`!dPpcnO$U5oFu^nI`$ z=n-@3+%2fh#-v6KV`q5ie9tw8twNSIebKRPOd#8%aJK$ d>I513XRiL4rGF0BKS%1HIr^tv|IF4u{|^9(#)JR> literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qinputdevice.h.339E51D2AAC381C9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qinputdevice.h.339E51D2AAC381C9.idx new file mode 100644 index 0000000000000000000000000000000000000000..20a655342389e3793350a70bb075f0bf1f9974d5 GIT binary patch literal 6788 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiodevice.h.9388E485C0A01200.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiodevice.h.9388E485C0A01200.idx new file mode 100644 index 0000000000000000000000000000000000000000..0eee3aa93ea0f6617274ca3c52df407f257fa2ac GIT binary patch literal 7180 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 Zlwu=PLzjN|nPOnTputRlgBj#_{SW7pSJD6g literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiodevicebase.h.57AFACBC3D314B1B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiodevicebase.h.57AFACBC3D314B1B.idx new file mode 100644 index 0000000000000000000000000000000000000000..5b26903f658bf1a7ca8e375b0af31048e9cef007 GIT binary patch literal 1474 zcmbu9T}TvB6vxl3yE(4A&F;+l)s|7&ckF0|iS@8)3KAw-QQ(8k?%vg@b=RF)OZ$50 zlZc86suzPGqEN~rDuSXON}(WvK8O;EC?6t_AR~(E%#E{yy(ajdx&Qk==iWI#*p`O+ z`r9sm+E_zRC(CF~08sGX%out~z!&RpWmgwV#-Of8H#2&&y(yXKg*9y3-)Ab*gu7r# zV=Bh7FZBtn9hw`ORWrLw-7_4JG8CYj@C!-p! z)+Zy~@i;SB4EQz=N2|-iYr_*x4cCPyG>+>DR;{XPN2-&lTDO^D$qvmhSR$b|XVl72 zRj6ETk4D=nm#TU)n&^%(^lMWFQ`7B3d3_Gn2doUu}J1(2VR;}!UOw9H@RRE2BbWxfD0W^x_YSm zT=}DI5_oaDKrHZavFks+yBBYKqwSHvjRC*t_i?cU^-o6LyB<8=D}e_Cg<_$Hiyd%2 zZQJ_&W1vrh91IkT#S#}gkaKgmqQ7svUxIuLD5B!$Vh0Y4YmslKY6c{5V4y@S32?Ck zJ1;*Riz^?7B#~rlrk$d*h-^9oZ3{OwAcGXn^Na6thz!NFZb&@^(3WkhsfU}nHfEf>(-l`KVl zH5Cm~Un>_h6xS%z?|pkybIGN&GBa~2Ei3JN?!EKOy(9Me{eFG(`+0`vo^#LhoM$`# z^PDknK;OQ>$rPn89`I6`!CIi8D9Q)^S*+&Lg&p7z{u3QJH8DLm%TQQVGCeLda%xg~ zk*VBb4b2^3HIxlA7!5_%Qd4BU zLBK>5C@%EB$O5Ci$l$&)q*(f z*Z5&=3GHg1t5e^ayGi3D1aNr8B4S;`zRFPmKp|!CdP+n|!Nqla9 zg(?!PHlW;UFk8TnE%KhSiUPC2(xX}| z4zb%%R%*5L!H45ZjfV7ugoFvEGDAW^mBnf(pHKjvWHct^S`)hJQgvMtN{Wicbxlqv zEiW=w6&v8W-efi;R2CFMxE4SVLO7Q3?xLGO{f+5LjHbeZzc~jliUl*n|AS1%Qj7KP zt;%BHCzwzmv+x9i;A`NJhL;Q$suY42{)vtNrnUbKT^2FAMXT|BmOf<_)+z7}c9lJq z{W+q*SXxXO4dbm;nZaCQpaeCDEgIcaVK5h1P39gwDBjmVfXX~W39Qv%9%3?=!3-}O zinAdv51&$D824D>_`eSo;+O(oHdraMux7Jq@{@dCG#Mp+8HzEbAuTvGXbNc|FNg$e z0Jg{Q7cLL@Im8~&LeNr{3S+62vP>?hpsYs9YJx9Q#b91llS_-O6R1}lmuh=yN?Bo} z8%13@nYn&*kGsT=e!)xJptx6ekqGv=T+sa14h2KSQWQ6s9o$K1DAx{7RB#mG zp1H)9h2M+b&_PMLdr_Rp#l#8?qyw;L%9B}hy-LD^*dwa8Vh>GGum7yx3!R`rX^1ZKrnno332~-i z5{Lt;2fe5Htn70gOJ~6QnQW$?&|r7^houYT~t;sBwVTIi2dasMJK3 z&cy-iiR*e2fCIuKCO040txR^Nc|gX0xRD)3hDr+Z-``*7m-5|z)Np%DpR=HHEghsNV^WExK&kirmP}9D! zNMD7opU~j@9;VQ#uTi=_4AoDRkm61d>IAsC$1^mQ7712#nfK%OLa~4K^Dact7oS=g%4$@KFFetsM^4et_nhVgaeB;Gt7tG z<4z0>q&-m&yNPDE6bU!lN{$vCJ~SL$1!Y)Df|p7%IKO`;U@iCINS4lrWri!meT4>P zIGQ;%)oXj$)|(DB^KK9hYk%Zr^)@vYvTu444XL zNMsZJg$8H%^j7f31-YjSS$Zf6xR?YimO}MG&l3rw^Sun7^ayxAFEFp8(BS(%RX>I7 z?!0FbOKb4`Rm5wRGBsDhwFHuc1-UP^m=XaC2w*RP*X zVd;^uj$mc5x6t4^)?|%p8U54V8M2fy&10H9Wkh`T+tF7}Pn@Zw+(5`mmrAA3NJ6Uf zF8#K3ud#-uwTSs^|z<^YAwgJ8af{_3Ay<=`n+_# z_Ju=6YqX{gQBiYPIv!ax5Z4ANue28Y`=2lU*khhE&4Qxxee<dYN3(T)Z<~l+w8lwtCbW31B@<4R%oOFKYVZ|!s*JYbu66;W(rY; z_y`R$$T$BHxNYQ(w`68&B#K5!&2MC$9rfYqtPSo|ATXHXJ0)Cb@cn7;S8ro_zOsp> zpM&ZBUHv_T2D|$jkNE@*$#`2_o=TzeA<<9cUih88o8fqKNjDAE9(d6u=}TWsikz$OuU8o-@m1g>o&IAbUDOgj=ZY-hE+hWSr0L)IJ3h&zYtq)l`6ttj;)^I|D-DbmhOYd-s>Xfl_`hwk~2w}KmggQnbFNhxmvV;f# z7Bk1&#~X%@Dp}`5Xl|5Z6!YtrC9_KR)V&((xoAL_cmBtTRtS%;>}q+icwzJ}3hrga z%Wid-m|Oq(wctYpzr;-hy~xQ1dEqgSchSQU=n_{>1h|;xznp(CtnJH4XAqg;lZ5Sq zxEIEYco#)RybB#7&c%+FPu?~5uVLM2nj20H_l~Un{YR2rdr09xAsB|YMG%Z{BM62L z5&U8Yf?wzmK`(Y7=!Fgu>|zIkUD{0mxrja)E~{f!IAS?n#L(|O!)tw>VYtzX(Xi2p zABG#N7%QV*RJCN&(|>$F;@UG`W^@AY*iNYJ5L32~aa_+u71?7tfvO$fP&`H> zatCMNVLLhl;&l*<$LT2T{nze&p4O>ra65h|x3`-J-0jNZVIp=iLh6<%exH&ke^37~ z+zc2lH83?E(ICU6DboB4iHC;FZW7q#HUp!|f*QZW1BU2T1Gz(i8JH!yP0Y50V6lZX>!jl4*ye z+;QT6oOC|1>Vm4{F=YcDSU|7*X$6;=cw6W9iA#?N7lsRo4$%5Y&ZVF?H=87@2~ zJOObiP~F0NN>qGed^gO<45v%f$*AO*!5eghaJUXGGb{Z~o-_0MZ0Z$cYxctL}=N>g)-lwp^|9d&?rf0fc z_yEsX-rxrLs!_PHGn~4=dLW`0h6{2Da+BO3NFC%aQK8z<7>r#|nIg~ya;q<-qnV2dVE~j@+ zmgIyv19Ju=-l??i*I%2pBr>L5$W3nj zq{H3DG3`5Mr_^n|7r&-6ydlptC@gpYe?UcvUd_0+vu%T0!ee;}kE|f5cvM9}@u&(N z;t>@)@QCWBH65#>E%_5pvBoRS3!_6j1 zvq?|f{CT?nY%)xuYe;Gh(c_lHz>YMehU8219MXLb>5Cf>1N%?z95Py>=aS61WH9cO z3~ZDm=aNE+UO}`gND=}dhFeL3SCSY+D-5@R1aBZQc#`4i^bMqsL~kTv8%Z2G6$3ui zb0g_5(G4WBfh6EDh2a`VMgtin(al8LOp*`;Gh8##H9m%DtR$__3~ zhl#|T(xtY`o>SM9xmd)2iNxXsIv*AEmqsI{>pVqX0G2$kfCTmz3rDz2)0fGa zncoZ_Y~O{@V{jJ=wK&fY`zJfPJn3xLnvu%~!)mq?#a7~tGa%T2srix@l(I-gs36g?z)1Y44-kH5=nB7iTh(iZJZ^il_*jcRmp#vazfPmwR ze&_&*FyO4f7yIxroE4I?x}nNiDwl^HUFb2YUGTgY(v~d*>V^6j$;!X5#Z~;f)hU-T~{cH36V_n-4#fV5l?s z3}gnX17#pHI5Jp+rAa{PQ6X9hrH3bncSS#8xQL{PWC>(OWk%_x9HvdsCQ3OVx<~Z0 zh`<>x-X~rLK;w1sG60(FlPm+E$(m$20A=;w=y4FTUGzy3l@pc|fshm6XiQFLqyT_I zi5Si4I&dSo_fF68;E?>m^7GwS61<9jD#hIZll{_5Q|J9YF`yKzEVg_=D+fvdIlL^BuBZ_52jkPX@t0SIuBowQ+43sRqmy<}W zVKCe#qTWQJu@uk4;?zbm5MePs2U*3^JjyyKX4tjwOE;B)W_iGbYpcF|Z$2~mWZ6^G z43_qt+=P-o;v|N%23SL|&c<-nVbxl!93vp{aOFmH7yJgw;oeYa;!d$Oxp}@It}PPb|!$I1JZHB3elz zRzDf;5K$i@ke z1A4GFI95sop|PRy(%Ca2HX>dM{fLx^REdgL#|KCU5}jHnqmtFh0hnmvfUZulQ@St4 zt$1_M;!4<>+lXfy@kJQG)1hrdgY=%=HS`yqyPKU94hat^*{K?Gq%8e?_>*d;SC{w9 zw!o7LZ;pWO_20QYf!b~s7&b*Q#Rm)b3R`Un;XPUyoKw8eLFa7A{MIw!;F4;{&^(^O zEe&-DJ1Bq2gP90+P@gO{W-u&l!u};cw2Cuf=WN%tozMSjo$=Tvi7^TS@i#;$4&D%f zuk+VKGG7n3#z?+i6&VV-rZzqZ94SXD?w~}m(Lp)r= zO2nHioCtFvbci=t*n!(JC`Dco92v0SQr^W&OCTWP_3;B_5vAAJsqVV)yWcMNUJ6kx zKlR)rNmXs@sb%oku`aq>5u@n-_55Y9H;C{buqs{^_~g(!zJsF)U0Z^=>C?(`+wXmS>3J!@BV-> zfANQm6LYpdx>l!O3yeJ}Px}UnFbLw9zXik?fH;oMio-a@9Sp4O=tr1MoZW=$KQunW zz3l#S0Nz;e&N_4j87p_zek;jya%UYGUd*g(@MtJozVtJVC9af4q@|O zo|q7)7v_xo;QH+72GB)Zc%0p2Js!oa`LlRo1DHUxP2P->zVnQ2UtqBkRLb9FqLLP$ zxjJxKRr4lD+B_yf=mQ8PdU!h4q!9?!H)*o3b?Cq2!GnsWcOMSfY-e&U$7j&h>j!Ql z$OR_+WhgRvD|+@E&5v%4PxZ>Yp+gQi-I&w}UK!{fs6?5e`05^Hr`Fd`9l!H+^*eU% zxWpH?tB3F1a_k*Y$(zLaO=7>|z{^+=i@%9QciPeXyNkyj<93)xGy-nPcsC2a!r#f_ zGG3bg^R%PA`@Rq3`K8ia%{Ud(0*aD@we$ZzJ4pM$)MDF> zUDDT#yK(&ZOdgFz==z%b;V-c+Iy}GR@zF)Z?Dh>IG`Kh=JQCnEfg)O1S zbUor#yrzbg^LNy!2!^W)s0zW&@3$?>whx@S`Cz*RB3=N^%K^3M%9ube9aU9di7h?c zPHzavz#QVuHzGI;df+EVV0ci3@!~}|E)XxmVG;Z-xU`7sfa+k(p&0q_ws;AS-0(04 zXn?-~M`weuX5-XSUglU%jR4JgnRZz7{<+6tN%Bn`5hSSN$wzH;2!ygAi+G`qD|z?U zA3m9Xe0CBXqmC%*hzIVC)h`sV?t`YC2ab*vp8Q!mSL(h$alV~xUhX(yWTD}7`wooO zc5is~UR?HUhZA1_b4MPi1PEXLdLK1}z!o0!cl-GG!L(~juAF=MtEVQL%9M=v56)`) z%I+ArIpbjo)Fb{N0M&D5qI2cdpZk2Rcv39st)i50{DqPOhA4Z z{9q;dIUDyo7%%=#0muJ#cG`l=)YjX!-0@dC2W}MYjE^taLK!35aaY3o58y8T2m-ll zti1=d*6y)$8 zbyZ&0&7YsDcvaLpH(f?G-hb*q`~`)RWBtu>3v&E<#nl(beslbC!7m`TxJ>jGyvBg_ z%kw^#w84q^pNC)|t;_ILTt6512u3?@A9ZUMUMS=q{0Z~(=?7LM0f9FO6lS>Z zszOg+s}0^y@TVlWQBbHh%3?0Ebmu2Z!r3S)QTmhHG@s7tIAnCaA}KLBg@XSIgdcmI Hm7@L^&jdQ& literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiterable.h.29A457745ACC4B86.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiterable.h.29A457745ACC4B86.idx new file mode 100644 index 0000000000000000000000000000000000000000..8dafdf74e6becb617c999c3c3c0e6a2ca853234f GIT binary patch literal 15276 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiterator.h.420D4A13F79F0A7F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiterator.h.420D4A13F79F0A7F.idx new file mode 100644 index 0000000000000000000000000000000000000000..504ddc77eeecf4fb92b7717d047ae509bad5f8e4 GIT binary patch literal 11356 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qkeysequence.h.DCEACEDD22610193.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qkeysequence.h.DCEACEDD22610193.idx new file mode 100644 index 0000000000000000000000000000000000000000..ab4b48b1bdd3bda0b24359907e6127b94987d671 GIT binary patch literal 11968 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlatin1stringview.h.5C4795D24DAF6F91.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlatin1stringview.h.5C4795D24DAF6F91.idx new file mode 100644 index 0000000000000000000000000000000000000000..881bb1ac4e1d8b4b67e7d5744b4b9da687088dee GIT binary patch literal 20396 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 ZM-OLW+~P?0EBPN~{0+wo!$i1W{{;zcl1cyo literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlayoutitem.h.8BB060701DDA612A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlayoutitem.h.8BB060701DDA612A.idx new file mode 100644 index 0000000000000000000000000000000000000000..5728465632844f184eafa22f9844eae545e29736 GIT binary patch literal 7952 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlist.h.F1E0E6304468B4B5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlist.h.F1E0E6304468B4B5.idx new file mode 100644 index 0000000000000000000000000000000000000000..5a0c7589abe039ef9c3649aaca2fc4584793087f GIT binary patch literal 71410 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ŪjcNL1 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 QCIn&gu3&@<1#$fU0g-@M&Hw-a literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlogging.h.78CC882A01A41DDF.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlogging.h.78CC882A01A41DDF.idx new file mode 100644 index 0000000000000000000000000000000000000000..fb70f65a77fc9bcc41ff7c7a3b97950b17d34460 GIT binary patch literal 7760 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 K_^H3Og!}_g$wsyzzN4l$RWql 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 UbQv^oFd9VHKxnY|bD;S1KhX^mVgLXD literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmenu.h.0FABB7AFACD22F6B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmenu.h.0FABB7AFACD22F6B.idx new file mode 100644 index 0000000000000000000000000000000000000000..9be97afcfaa825836ecbfd49a247aecea2e551e2 GIT binary patch literal 9856 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmenubar.h.21DA5516EFFBE0E1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmenubar.h.21DA5516EFFBE0E1.idx new file mode 100644 index 0000000000000000000000000000000000000000..a6a0233d833a1ca3c908cee55a4dac52e5df0995 GIT binary patch literal 5814 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmetatype.h.DAD15CFA6FC9BFF9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmetatype.h.DAD15CFA6FC9BFF9.idx new file mode 100644 index 0000000000000000000000000000000000000000..7a64bc8f0be8bbd0ef9d70da1399cfcb5e546eaf GIT binary patch literal 144004 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 N15ku;gHP<&{|9F&G*$or literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qminmax.h.4D5B665F22788521.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qminmax.h.4D5B665F22788521.idx new file mode 100644 index 0000000000000000000000000000000000000000..bddf4538cd105b1cc6559e994d5ed82b97444a46 GIT binary patch literal 1958 zcmbtUO=uHA6n?Q=+f7C@#-=oFT?2`Wg(TbjG}^S)YQfUh-;(N~NZBOYHjqv1?pC5w zJd5H%MLdXC@uG-Qym|2;6;ZJikDe+N1QirS5NCHX*`QV;UD(IGH*dc0y>H&`_{gC{ zcbWi(awBC`F=P$^wv$&kw0y3CEX-$j@Io||EfsacpZ1ILLdYMy5VHfBg|2_5O!&n= zQ`CI%cbv0w!3xD~XjLx%0ba*R!dTBql2#9=iS|F$+De7|)pdqwRCQ#wVMh2hLY<~hx`-!pxPfy z=L<*t!BdL)$!E5 z!u6vRp|!o$k4*zS-#`-_y!zv0E;5C{OAtKm9>Fp;g4~2A9}Q=2P=ru86vw6k-qlEJ z*gtyr^Xt{4PiYOoa4?EZ1AOx)nsDIBo)_;{zdol3z2V+CHVyD-GfjZUi?5bkXIE$q zo#D+uswPA9nEwcM6?iwH_>V2m#v*3PG{jEfzb(fbE5ZkjSVI zjtMc5Q6Ze@NCa%JSLhWPF~WTveF5gN9EX!$bEQ9a$&F5Wxs@=&K9|qUnnhT0Np8D> zq$}xWcnA-;2HcE=ogggMC{*CsAP^RF3YfNp#q0C2Glaz}`D$3aNnZ_%cfiM3manYs zdbqfJk+5*h+%^Wsj*_r7MU{B;*n^)Rt_|HG7wZPMhh;N)IVT;dO1%DFSv7>t8aW1B z890J#4VsNxXLldpc3(Ys{{1HoSrf-#ku`C)XHJ~$nG?r6^5c`uwXS7#$z0&m6W?N& WcCHOKxVL$rssKP$IsmtsNS|L0{03V9 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnamespace.h.9AED58CB1F607D2F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnamespace.h.9AED58CB1F607D2F.idx new file mode 100644 index 0000000000000000000000000000000000000000..60fb5752cda34238a3f9617d44c0eeed5f2f2969 GIT binary patch literal 155292 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 I>75tFyQgm~yPh z`$7z#KmkWuC{p&_Lj^vbvpDx=*O>v?riKjrAc8mBXtOLlLIrk3@QV$maSv85W;hiY zYK4PV$eSHhxvbypyaRnkd^tae*$;^JKobSZ%QaM3S8`bO;c}rSiz6A{jk| z4mv2;*FhB?GyF0tYRS ztA3yg)j=6^{BAgX5DERsB!LF6lhCO<;b$ z{aBqcN$@O?;K^2@dKIHhfo1)QKkX98v!)2gD|WgfITb2@+%;?3+YxiH^FI?AJ_ApW z+3A>U?u05&bw!LzC_HLFF=r5u%}^0(c1n|R5j3~q!HL(CEZ>%8cnQ3?Z>RfW7@8X% z^;g4baS`7KSq&jb?P(52nnW*Dd4ck}>z8t1`mrHw_AbcV?sQxBsX!H}w~>{*-{1FY z>Br2LRROuzOnc>x0V-(Du(Qg-gR?(e;z>}$1~iFkd8%>H$nPhAe2jTja%_ClU3>)! zo+;Zx+47DDRirMg9{W#UY}EfJW*?wnQ|y!?6X;N3U9~W_bol76PL1S0ABomm%TbG; zNq#^1^R+t`seO9=ayGdO<)37wBrE4dXs$nR3wwKcXF?dWYvJk}8@;jd3k6hIS8PxB zo8p*$`HS5-$NFyMDSShM5NdFG@{SR{%~w{whQ90k#;~L1ZmXfMD%34z#}=~;OO<}& zZD>$T-H=Y5c5_z(Z%LXaKYG(VrzdC|S;d@Ra#oRGejmm7Db+%$GPej- ztd7XKZM!r}3vI^iRAjI#Cb}X+WT;~G5Sh*o9n-MlFTqwr1lUz3$12HoP{pD_x;H!U z*O3X)Z1ofx~-y<;yYeT2j&J8hDT2UV;tg{p@K%@i zeUn%I63ix}%u*bbB3A)G6|2MjOrfp|tDP*(Y!>1y+(hA06HsAYGpr+rj(j)!>QIJH z!{I19McEmK3VbMM%U}IJ3&vC%vXbFMlv;qD0whC2l^43yM&~QCBfO74v)k}=Z=F0N z!r2U}Sp9V8-@Sb4Um=j$188%vEc8mUBs7=ZlJ)y7{~_@Lvyt#&nw_SJ4^UxUX^PTD zeC;>tIm7o6>^CiRQ(8VWm*ExngPsPKExe!e9}>E^2YJhWQK(||9`T0B-5!nWT#?y7 zR7#s;qB$~{hALDKv)XkF|08BveMXbfHgCGoO}X3(s#ra|Skz+hptZ4m_vdu&et8P} zNmhj#9G~1w-um&nogXjGX1ix#_dd~miAt!lt7inGhK%od$@dAfcfqE+QMwy<7tmZj zyw5Z2?dcv>5AX{t>LS!ip^}85iq&=e!>)er9g=!58;=%u&q(*=wHT^c{oeLvtM8Jd z3XNoTDh@f8rqX=#ll&@9Z~n-r*sjK3Q<9mRhx+xhlb3ALfC}rX-vO(ibntK6=pg4` zz=>8$l+VjTb2;nXs8+xqW&1IkiTYjcq~&sVH&n5D4Ey@;(!**O4q)~O;%1hWX33Bn zn#=Cg*Vldv>+z7;C^WaDL`R7W460at$p6gjo$u0j3mbvLok=uP=9Hkq`dW4A4jXwd zI5e}|AwCHXClW1`C>xxhxtxfoTKRFEpoYvYL2G+L^hD-|p^DYf@TBj%yKDFT!R$UX z`6m{7BCQRY%PtKow|&ov#mrts-dX6Ng>vK+s#u*tu}S7; zp^8Nh5Y=wSh>+n|*lI!5e9oHbtZcxCDo`IgDlsn8k!5u|%<~BUr4a|cm45!MQpLvb zJw-Cm*wig>RdDq+%x**tXAor&Cse3nbs_Zlcg(wgK3-yWB|>+ZnU=|gDNx1guI=?A z>-YZUiiPlWFPcv?YQ{w%zlzh-PrgMy8do|hGIs{i7-*$HiAJbmb>(jB*Jefg7wwr1 zMkV-L$X{M8p~4=|8I$;y@#ylZ-7gILAQJXiX^$)cL30_t@_m<;$z?h-n}q_~;LbNv zalU~nR&ND)GwzOW#diM89)`oaEVN6UfaZ3hPfX^z@M0%JtcEuz-6c-P5=rP#Wf;}l zlfv)*^M?!dW0%gU(%b@quo=> z^`DqM2X`OY>5-g_g$nB$6FrW$E?vKOBf|l3B8(_Z@*`9k*3B}!{-RFFZQ{f*nq|0^ z!X@WH6{{<*;r&8Of8BSRS%1{UMLS)Tkpnar+xUck?9^5tn7x6A3$sv|++GS5)>X;d zryN{9<4Vv`-uaI59YRCcUHMf;^}eK5x(@dFi9Vk>-*LNXT&ndF) z_RFITKSFZ4Yofbyr7%<()?wb=UbK#7Npz^y5RDQGaCZdARywF+QNdsKSuthCrD(SL z9xhyS&^1~AfGTq8e;X7#Zz%f5-$fIdEw9@85i=c;(LYq7x~=b8dwkYfONC>+YJ_$+ z-AU7BmI10*Jr!B=%A4AMZy3nzQN+SqE4`Hr4HY&#=f;xK-}kvO;fo6l9|L^DMmJ=C z7*t?apR!@pux5PFh~YCRvUH+!2^^^MLT8cF`C@#IL}f9Xj=%}AQix1SKozS4=jo3F zPcEEWBg|@efTv3`JCbCRFI3oc6Uujbr#=PBHyst`G^_?1;>;H!=YFBeEXWG$ru6>e z_pxDofe@bTsg<6}3^G(m|C|jryVf47ezw(AhJ6u^Pn`5bK0*LhX7v%yQ}e2>_AaU+EFfYu|v^ z*=U^{I)di5T(nw?c}LRQhFc9;h{>Zy$5ENVg({a(664QoNor8GJ)8XivkPprKrRx5 z3VAYT*Y1iowQ8@w-jU%8$o?OV^ieK~f-1B6laPMZOE;WbVV1CH@N=y+S0W9nSp95q z<^H-gywQ4gcNyC7X{Y0~EI&g(argesmfxN^e}k>Q$AbkMDOfy!DpF5P-~M)8*09xY znGHj8+w4x8WjiKRu~~ffQTo85B_DK6=^K5V^C<#ihlO@XN{0&TN;zw8R(s!I_~qkH z!%BquSx3IJ4t~3We&X)g2?L(B@kwK|FA$OQoityTHK2;rO*1R3)mL?XD}RF5pHUNW zR*I8s3RSEwum+PlZ~6B{J!W6x(M~z&lw=a9V)ZA#o}8#NIO@oJW{;!D;*1n$%=Bwvg4UO zgJ+xTpt({GP{rzT)}mj380od4e?%TbarJEH%yiCNh41WAs!;uGLDd?*@~b(N(Vd9% z*=Cw86IxJVT@&twV}ggi{LPEuJMi}w(JdLsLX}~i_-56s8nmd#GG<#TAC?(unJfuH z6{?p6zgt~4cD#SDQ@nKnX2YBmCgX0XV)Zw3Cb#KUU|FZcQ&z)S6hkICGG(zGs#rAl zu_MBWFA9P<-i&vt&v4vXf6k?Cl&4faMIGqoJr7l&qDE@{P_x~o&@zdu=KF4r3_2<_Ut(W~fQ1$2aI&zgie#ri;+-*iP zkaZVWXo0+gLWOn3%!nzU<(Xggi_>`w1(e;(X1XkWJ5<<)x^5eJXVtZD{EpH73iWX# z9~n47l?!^4{2tHnfO{=!Ga3ySqU{tdlSxovm*fmKKMQH~PnSil7=DZ#7G|U{Ip_&h zhV@Oh$CF!RRm=YEwAHW*m!Tc>bR3jDPf%U7-5aGp`uX@M#ui~4SBOWR5D$J&gesG$ z)^R^vHa(aU!(DKXgYYb!f1hVZ- z8{L$?3@Wf|U@_!focGXM!=t#c@N7Fh96LR@u%OBdltSdA$_38E*NNt32AG{`p_#H| z2o=&5GM|k)7ky>qj|?9~YQEx5SLB#9RGHPEQLA@x-l0A>+cLWx>?5K_vY!sBSlz_U z^^fO!Dx#;mjtWj|{a_s0@msiq!=?(HUClQfM}_ z3sD(Iipo&F2&hJzA&FF9EvBfi}vSU^{ChZ5RNL{_b6`ma}@bLh%8SwO? zi7v{VF;uZSY?fq|@0zyt9<$F;UbBg2OL;+sb(NQS*>`?lEX;G37mxqzd#$up-mbSQ z&E>?!gWr6+vts#k{1S{uTjr!?va$$Ote)#xzVpu#8`H)xy99PO*=UpOVS)51hpgnSmr z@N&SXZFE{r7(fMfJzecL1;_Z+yUy@4w6?nzx+^nIP=O7)p1b(|+-!2`8_cGn?v@fQ zm2dY!bFo=@l5W(B=z4+c8I35`L9sH40~Pij--_a;MzEn<=Dj+7^)H4OqVAqJ=!s0@ zLzQ8@x$fnj!z|)|B;(=lyH%VRhmmM)s z#p+>nmsX9Bbn2QEXEmHhwFSC60%f8M`iTdFzU>ioV%|fx8Vjor%=AFsCZLMcJD_ho z_qyJ!cjb$GvI*={Gd-1q2~c5O6*1gk%wMnHYldf{aUQnOVd)B?0=pXL!SLU9Us~ND zo_CkP@@Y56Y1yX${lwpM5931qJkmIxUp!#;kc|$>N-i|F*-dLkf5>Rjhs`cQFg$QN z9>`H%=qF}t|FL9g^Zmow>{W!q4GZ0nfh<&!I&4B`{p)m&oXYGbxDaHcAZeJ;+%BY5 z9RBy@A7?Rq3vjHJVx@b5<}!S^@<^|u#pg168I3r}jgsUr2UM|oIb~gk%N@=wH(%oI zv^c{V=}D2ET)a@l>f7&kRPX*<`C+Y@U5=QRI&PveBJWDEB)mRW_BqGc#n8r>eN*rTi*RPX^DJyu4QmHAu*7df~1%_@sE|Pmz+{T~+ zyV^qevHf<(ng3+?F)XK{rus!wb+FsZd~9cFL0D8Bk$eSJ|f2jt)())sW#Rz*FrsRnBKX1$I^2J)gndvu1T;I1AZh zk&PC~>@HN`@wzHn&)T-C^|kHH9);oK7CJ8N3o5KDA^chCUaN%IM24qf(DKks52as) z3T)8*s(Jj4K?5RhFnbdXVwRC+$*cravHA;lJ5SU&T0Fa0BKHxf;wv_~B6HVJVO>wR z=;XWK=S(Zba4j_;+efsIcwri<*z+$w!3G1+BHuXZje{c> zsz|*aygc*r-{yxwNxa63VEkyOkFxs^Dy-`|EB}067ps@J$nX8Fe<*N>kIN@Ukogv}pPcND|dQNPnYXu1c_ zfkKsGeW>StQpDaz749>84#jrFPDf;i4K$Y%9dG}7c=0*@(uLtH>~8bOx6OmIDO9nj zxc=epP5OOS;AS4fL=_2FiLS~E6;y%xg=%YUd))P!k&I49fSoYW37JBG3hR2IdVDFa z-@V0ji@P>>yVy>PNC!{N9gNAsbdcw0E=-h?sZ+p^V5 zsI&wdCCKfEP$6B>P^4y^t|mzuhJ{K5)WX_IEGX-ENNEGRF)3#NWm}7X0fST=aGxLp4>pd(5=Q%pO1m z%z3TsIIfu6q^gw|U4hcwWTH)S02eB(tG9eQ$7l49XWB448$q_$Mtf!C2o=~BWa~OK z-u?9c&$q3H>B#55JAUUPliyEV-4q_n!xjI>%%@ za{fP#f4HFJ_Y-Qz)5%dq`rcy~Zz6A`x>2f|q$8z@)Ncey-@dF_`QIYR%;IlLxps8WK%YD?J~vGn&Ch+ znpqB-B^&yo%B+5;zTf573O{`H53|`|S2$^fOtC-}tLNPgOle}-SM$reyf%g4j&`SL znYV^2Ru8Ygjho=xY)w;UPr+^qQHtDI0#&S@3i+|;++P;g7|(12RSIEl6z0a$1yF_R z)51TOUi>)y>a)96gD+eNbvQz0cN0{xD6t>Po_cw#UeQ#pGmxuIwA#dl09B+O2-f(l zd*-ZyWtd%nzzMKXfQ*Tu!n)c_RY%WD7c+V@{2tN!%8g#h`z%x$)~|7=Km7ExRB9%( z`w7dH6-q%?rFr-bsJFS_W1Bd;sFuz6>Xzj?>MQE;$UU4C^6C+3OdozC9Ji>}!--wi{(jVuUJIms&lK zk44{&c*E>UtWh2Eq(h$UFjTQy`Tbp9XZE%o?7TDOe`&lM7ELqKPLa~}K^3b@_`~B3 z!@s-Rl-UOeiH9b7D7_R^Sl4Z@K^;&3`?+;2!>^FaR=U$l`Nk?#8P=B$6dbzEYu(!M z%pO8@ytdG58AC&JInn%jwaOjO?_f3zC49?9w3>)2@rK!za5m6JfwHv*Dy%Em z7hda7e$b@q_j%JkK1X=Wla6_E@j{hh9h80lh*|V>diDE!KRd$Vg2Qn^(hgLyXq#!j zPc$V?9KcpDqtd1lO_fcRP(|uWE8Tq1>$qng8u8RIs+7(S2T zNEkkBp~EuXhYIXUlRe&sFZ!~iKl>YqLd$kKvSpbY`iZ|yI<{@F^u~5JI|XC_Q2=qD z3KjCIQLi5F`M9UYi&Y^EPeU=hchGwovOtwtJ>D%D65p)J#gELM$HUFH(|nn^fhtxP z#DXhBHslRxl5RDuM++M07|4lFem`+FXwrVKBiCCn<&7AhX>`n#8{?p#kp6=MHhn&z zZ8{HY@VDn!XpRIeR7h7@Rav^_p5NS&3}3_$nN_fZgf}f&VwpekA_lb9O_bMb0D)dRWU@HDOwKMLlvqw8w6%mn0NX~Fr$8O;ev@S z$koLjY)QhfBR5yQ5yCCk($uYy03v zAEdQGm0>*&Y1BJ}>Q(r_>>WJZ10y{!a<2+ite!S0GrM5rQ}zOn`LG1+wxKqh^yF7@ zI_Z_K74Wpli6+dQgtHfIbWs8gn%mi3l`nsjPJNo1B<5uI{%_IdJf32kdk}UVNar>|XSlS!+}2ddx<_6@x+AlTP-jm}^h5#@Dy-|)u7L7? zq;4BDnc+k{-AN0bl=nKQz^<<1kMhs+RGzq>;a7m;?G!H;6+)F4x-$AqxlkjeUFcJ% z;Rd{zZpt@ZcH%%4i^}Lx>sZ4d-o&ug<#+>+H&VQ8k%THz$5?h*LmThE)0y={%Y192 zw{i|1Dy*x}ECm<5sx-ngvsaX;@l|CjawU389qkSR15mzQRlw~WPZ!+CG>5Z z%(O{1u|b7xs9SMR7ynAJAA2%;8#U)`C2xsIsIsezp?A~3sfV8|WA-^0UsAc47H{P{OldLwglP+=SCKVR_T zWw(PZ?q~2_WO%GA4#yR_l^3e)q86T?Y7p^u_hYsig(h*tN=GC$K^3X3E=r9z56_pu z>}$lqGCM7kbOX)BmfBVEkl$$AGrn08aS&#rFge%<71lK`)@#s+nQw0wdzRl6Z;X^0 z3v+jd$){zZ26vuZ=YN(9llyF~QJifipt;-Fx|~D-Hp>7R2fDT46+yBw6d7z z3tnhK31qraro7oh6{-7%l|#PnxWwL{*{g`H<0d*TH47EiRkKY7Rz10~@(_l704F*q zQFhZnmEo!XoxW(?|7FCA`L;}c<3jbWccb-kn=n+ddJr%&`uk90rzXs9hQn8#bX7J@ zL4|c)$FO5^>h%j>H)Z%Kvd30CZI!uos4}c${Q2O4mD=X%$?PT+@CGYwkR9~UTap2h4EuzT#ZN7@547aPCrx}#?W?@V{YHI8P^_MU}5c=BEvsKN22yWyGhvdT%5 zuC%Nc)@?1DjY2uZ*eOP~yg(xaP@oKJpvthmz3pj4!#01c-^HvK zf+omFL9$~Ts#tyApmTfsH(sm0e3i%0MLqvrGu<_FFhT`&edlsd_M1x^e7|A#7IIR$ zk<#VLGN`hvdz^du?;h#*eHCWs;^B7LX_w?0sA6@@JUZm_?dY@Sq(G)D_}QAhP1Q{rHVzH%s=zXVz++HV5%L>E*@*El!s z$|^69mMK}hbpuU3)JdVz;XsvHyM-4`_i7We>cg~?Id_Bll_Vz**t3NigIKZdj zPq8(aU4UYkVy7uGeufI`$~UI*_tPF-T=DvI(}GU|EXFf$jAtnwU_R!B13Tx9WP{$g zetnN8?eXNGfr`QXCcOh9|MY9~?#_6^a10u5n4Q98X9ZMwsw?5QNnL-f82g6V!|-&r zm1fJ>4w{R7Td{fQ+XXeUnMJ4f(n2pK%AvW~Z56hDv!GTxX76EiIflk?Ta;hL>1(YA z)UJN#;Q7AHO~G(xnS++eb}p!5_0)6w(jWe660t2iXSMTip2CM^wG(P^=5yw(cJ3^) zI%KH-UbY*7FxY6JjdJ-JRO}wl$p-h63VoS>!*Pc1Bf=X|BaRsPRSxK}c!}j5-#nO| z#oSvI?0Y-Cmv>pHu&!Cu%_WUfd#riS@Je{_%t_DWFeOwO)+6Dro9eG$?49=wzx26X zk)Ax*gMvMHPzP14zUAF$+a1vIKxt;5p=4LN(<*n~`UO?2o@cCo`FQycwwlbYMd@yF zr!DdYM5to*v7!whT78~oZq95n;`<2E5jh(IRjfWu8J1Yl`0K_N%toOgHri>U^wCho z>IkzHiFSCG9>VNaMA&{i?UzwLG#5Lx>W-^-x(#QxiAqbpM)H--5Kx8cwd6jv`YfKe zaXh2jP-os|@-}lYK!tVfciH>C;=Z_t0^ddCUb5098LmNd`Oxgksdwspf0WrQJX@Td z;-vLJbFp5B_uahP{sgnnVAs!1e)4f)XfAfDWBJ;zDxYU|5z6C@-_Wo9?P-}^SYFH;aufnE7Fa=ZDj?Mojr{00qZpON-Se+E@f z=zeld#E_YFg3a%^V|P0u4f8wtjvq~a6&FGu)s-u)PyJo|`I6c1tcG{6xz6EOCsWx_ z#iAA}6)0^?f3TV@K0`0xL2-o}DO~1ep^DY#bjCMt z?-`zQl-X#6*Jcme?7{oLpo-P^7{3aw;yJCM$9rCpLd@*4(JtAP3KiBhqu+3H)A#aKrFvVaK06=QeEc zp05!=&ws|~I3p(`p~@smtIkhXevg{>JOA-%NFLAa^jvy#sF1GS+`r=1E3qE^7(R@Y zaN9w*<@F7!%<3CdriB&VzjoLlW>=sZPCDqMJQXz8Q*CQpHhI>*L}ss}xK3H zg?05M=VFScz8jXs@J^(JlQudj6BST_U1i(u=L&U?SAWm&7I^&HM6cywB2;;ygJIXR zo)O3Yp74Peqre_=qeE`oM?e+3mtL!IycQ8$z3!!H%!Z=ap4sV{6dP1nSFu?~WVZhh z>&x&7L|HQN?MIyOpvtgbd2Ki?`qj9i>zIv2Fa*0%uw3i|RqPzcX_cA!pP5A8yxq?1 zG&IWBR(dUO-cVt^at`)X_&s>>k^=h}UW|}vPR%*t$*(f1yWl$eCfv$jFOj)hFuKP= zdt|a6Dy*w6R=4gKk+)Jh!`Dz`4~_KD$e&?`D#JS6bPj#)|QeykCk37`~t6mQBlJy#>BK45v*V*;gCI)R`b|)&rhsZ}3f}p}acIr$z z@}aw7|A1h2VFSwGh@0bx+~ETK#D&67j#P*^e~8I7gR`Bd5tf-z50D~Hp6S-KrB(L3<03ZtiH&2#2s4{k}v) zgVDr|(!=uH!^8ByuCs5Pc$(+R_F7F#M)xw9+&Bq29Ge{l_5a}mvX4DHAA1x{sg`$X z=3fcvx1vskyA2;|F#eyd?+%Efcm8(o_Kvx-d(xYrAa?9xS5)l1_uhN&6+w|MU;!zj zSO7((ilU+jC`CY;fS?E>iijdbK~djL?i-eSpWmN1pPOVdn=+Y9Cfr}I(Qu7sNSg8K zy*Kz@JLQ6l|H#lE`Qrbb8|vESnkPmYgmi<@gcLuows3##Y=2x@nFz{6+N88$L(Zvt zh6P~cr5Ij{TN9+R-=+hTWH&KVCxAMEHpzB1dH1b%-Uli$a#;wMg@y#Nx!YyF%ZOhX z$pgp(^@$HOW}IF!b)dAw&n#?@fI{v0CxU+>T~d#4+^g*ly*ptfNdQR#V^W&Yh{z*O zcNbCU;kz;}5tX8~aIbbpT|IxP|N_^`AO+x%IKqx+mH9q zdU|~`eVzZ(g%`WM!?n~4pYlGAGLDL|Job^K1=Y?S5jRGy9YFa|l=QeHQMsdgP|; z#dB48g$XAyQbj=()$NUMJFBPKf~}*b`>(Eh>xGd_F=UE0Niz=rTAjApKN8myNYQ~* zv%0#nE)#m)NE0rRe3t8|>1dEnL4TI()A~9S>jA1^_*B-vL&oCKBc+Swz878W;_4xzm)Acw)5<@33O!m-Ci=w^z14l?^=wya@ zKRY;IG3#J!j*!C8DGW2!ir%u}FJE}|S6GhHquRdTpN629442D_RdRKJM4GmW~!b^sJ z$uKLrmsUD0&Jl8iOoq;67}>Lnf7ZBjNi(_A4u;NRn4n#kbzMCNtmFvU44us|fp%{D zt=c*+;Rrblox?EoXVq&q(&y?pLM}t+GE6JoLVfd%-F|U|R}B4%VeHG2R_^tyAH)&z z7&?z(zSKPmGwkMcog?HkbUwo<66W3x+x)64M<`(E0){cw_N?Dlb~uqEyk_Xv3^Qrk zsK!N)9zEa)g$!NDFdGa1ZNEPuB!(jtF?12bge-iKF+ekTJ4blK&~F%~jY-!(;rC0P zbA-1H{gz>Fj(?N%xM1rIj!?|d#SD}8Y)4eK`zR?#c*oH17{>Urw|nIXt7MK)!q6q$ zKh#+H{F6@aIYKEzmoiLTT=Ag%vu$p1g!c^no?%wEHh1YXu8iggWei=$Fg9P(6K_~W zhH!)r4E=#&Hr=%AR0LIp!tFidp!3xD_Q8KKP)J~Q-ZhBKK`<{BNXHDB6T&k?Ly+L~pcV0}&dJ|{+SgySrIoMndGT{5pj`eM`z zZCKidWwv-_z3Ota;{c9e%hI+ib2~PAXp{Y!N{(=XrBATTSU2^#E3FN)IKoMmKFKnM zf9lsPDEc^*BiOOD9m|CNbRRU^zrQm_IK|SZSf=q};q2#cZ`|bw_AG7BGSy)-ezC7x zJ8}dEmUdv74Pi0o()Yxmk?qLRjx3WA#8~YacIiAvaAIjEmifASgvrp8MK?KuGfO+O z%om*(Q%ZEF?dAwBEbYQFvGMGQ>Zh9|9Kn^PU0KF?rC{aWL7z}xKh4soxweef&A79w zdOt^SV`(>*DGi988vC{4Ek|%?X?K>1dFOuobB}LL9KnO7Jy^zefmQdp0k@BFgtIJt zmSu{1yxjh5$W)}lb1Z$1WoC9h+%V>7`csZ@o~6&TOq-2@@EDs>)f~Z#rM*~2+@tcy zrv;kX9N_{>UtpPAy%j^3myJdp#+#+RS*G96-ka~3oyg$`%B8pC5TAd2Z?lUyf-g(^ zvW(w^`d0HV-mB#Zek|?B>C_`&Ymf9NGdaRVmcGa`Z%dcHtC59Ta|C~u_UBmqhITnK zX?Pk(xWv+zSjO$_>>V1eaT*-qGD}}(nQf6V4ZQ;Yd6Q`rt!B!Jl`M(-JSU~8%^6M$ zxi!m9u4N}TCJ47!o|2oMlADj#`a59JHe(x(@S9pwk3F8=IMK6iWIg1fj8Mw-fh#&XfV85o)omXfiqb)_-^6TC2 zNn>gEC*c^m!O%CD=9SQ&vHLZgj>V-t6T>sHF_C~7rg3=E{Z!1OYHUo}Yk$l9U;*Zd zpdf;3`)>Ec(UVKOMv<8kNuZoNi7u+A%bH+Idl5pED<(ls7UkrDH&O-h{}eZAOliM;21d>Z;EbUCgaK(eKl~fFS}$_y z`S8$sjCiVnr&_bsvAJyO!1M8T7&$3~lR^_>aJ{w*I~AUA8zVMy?$p>!N50J5Mpc`J(;Y)Cex2}kM~vTb_W#m^%FAx|m# zDP>NO$aC>)w>nP6rDaMWQ=(Y)zwpb@e&^iZ#xBE%w-mgkS|rPT;)m?dPIWdI@lpdX zzVGUewV&fJ3dcyK7$U{(hz_oPc~oLIB^DzdGwA%)f2=A+@UG^fq81hP|Mr$lM{Yy zI<$q7BFSEf;FYL(yb%izNuad(hyrDvFu>TB-vwRR0GdeBifhTa(Vj&#^X;q51!Z zOzVfth}6PO_djK(KV{u6#+lXIJviXV5q>c24@Q@mLu4C)WLIu12=C0?1^S(sb-2DD z2?R-W$AOCT5c%6q%C#0IBBaKNf;=GKymY2F)%Q6S$@P3jM%Axomw-J ziKv%YmdxsE#-w*k{@+>JX@mUO?`Mz`Hl~YA)O#zGK z3YI{y#FXgL`bAdVrCI722@*h%K%Yo_>_}zg!*pX7wLb{xAin+E$NFgY9dsKb4%^tiN>Ql^HjaD;aZ`;O5h+mTocwNm4e zF<6oYDKtn8$f~}OUZXRoeG*1)N#T}MhiuO;Y>}JpYtx94%M@Iu49K&}jfLZ~|1L3C zAW32*S}~ILq+f9rKaiL{kn}Fu(A_Gf>)2Nup@d;e7$dR|`ut6?<#++;Dh@ZR2T~v!rcRk2bRcA%mGb~2j~IBwu%x?1_Ae|sG${ikg=$d9chNy>ofoftm93C)^%SzYg=|OSr{M%T zr;wdf7{o`VM2?MLs=*Pw6*6yyLCp`lz3cw{8psiX6|!K3LG#-W+`^~eo>eeV+#2z& zVPvu?_m4P*EKXsdKFOFpd13`(d9IK>R~RfzG^Psb8fI{W0)?!AOVfYVVs(1g4?2I<7#0wGevUP z9rGwRM}%kcl24nKT|J8tRii^#IN)Jgw>mL(F9~`ERwBt#EC)I{@`Da^gaux{}V;Wsoe>BZ(+4M^Le+FH~dX8Nf485EEu%@FjoAUnOEA z0vq0BKe~7Lt<&8aG0%GmyqB~l_a^_eN}9BFW*-ea0m&g)u0y)(dah#TYL- z+kla9IfTn~NmiR!YD}MU!$yoerQs>BT;IzPChBL5w2(OIayp$?$5UpQ^{QW!wU9dQ z(r}j_%$Hi3KJK5t5%c`dG4ww_{+2P0&qLn|v{7kFR}E?0sKzJHLwEPVh|*U=5aJ<1 zJW8JtL2mjVhTdjlw2=g_Xm~|8@06q$R{DPmoQ+FU`tAsi*N4s@eq7k0jg(j*g#xKQ z+4XR0tdI_`kWM4{?}G=t88zQ^FD~9$2+qPTWDG09mMtH-%oZadQV5aik;O^#@Trcy zW_e-c3Z8B1eg531S_szjbfD8g;ZOMb;4|Wcik@Jt$K@B`1pil7IgRvevFTI|x z&_NB%ry-wjpyuxA?y(+9B#nkNT8s3>U!M=R%JCnIOKZ8Q8eLv+IAi)aTvnFU5O|4036GHlfLyxpoJ;&gLYNZ%Fe60?IN#0lv*6+$sh7t<~OQP0x#Y)e9z zf(}zO6Xvdad1qg^2bQRYf*Q({IJfT{E;BBjmsY;ECpvNE%M2^;ytN>p44bE ze{+N@REH~6@7fx>(hzo>=`CwxJ?At_T&mJDNBZeO`66a##s(~jD+8{KE=eZ0(EVy; z?^XvekLqsn_JK_XehxL5r%DD@G98kxsm6TvQr|o6^iaE;0i2= zrE`o(pl%}986$VWh|+gW5ZyhSr!S*CacPM{NEEgsS|aBGs5Di7#~AYuM?2Mj!aPkB zG*Q~S+f>%SDgD>UOqX)$tos$$qiS<*^(k?B{(;p;Qa=>JL!lw5ry)~oTlH&WeN<1& z-9VXe?$SwTx?=iQDgBlA4-|C^pv{gA!DWRAAw;N0${Oo2!LMWEPK-neAxhYrAo~+0 zJsj2J5Jqz4kSo`*)@XgY-K?>PkLNv_AV2ct|EQ<%@q#~hpJZd6g|M*MjvSGxS>tho zHb89&kU)T>H8BsL$Bt?nZoy*YFAabBLH_jG%!01l24f_Qf-uU2c$^m51Zc{a%``ym zSKW;I7L znxoz*(f4A^<01hUi8finUG2Pvjl1;^^Qd}!uIC4j7+l=S5NR}zhCF_!olzZQUU?`&b)wHQ&|HQwm+pz+`h2P|X02=e*;yZr2zy~}pRVI*1#(Nc!o$Dh0U zs?P0iDTc^=wo|mSQ)pDDRJ2bPP3mj^(4eM=%U{gX1A1r>KgFf_(-vqj(l#{L-b7ZC z$f}ccGF5?-@BkBl7?$L0MH%4yS)G7}B z$v671)bzkUcJ-pSMyQ*3P~bsnw3xWhPzs$cP z>+*CEmj{O9NsvH-M3*EV7@2gk3*P4)u=pwq0NR>-@GwTB@LCd zK55>+OkuU2%pW6H)ZhxQtf8axO#L7qBd!3h{Nna2PN25Lad=y##!`S%&?fE_;lYWQ zZyHX;NPq|eM9onEd8;pV_xN=bBQK@!Qp(h(hklq8z0th)%lAp1(a$h)gMu5B4w;TW zX}om)dan*6)(luPX5>=q_Z59+ImYa3ha?CG2nS|#_eGr+Zv1ep-}`B99b)!lBvcJT z`912aTUBO7?C*ByqqNkgp8Ynfu683#1l+_BL(wsmdG7f?_F>OgyK@AkhqjARZPeku zv+aFfsrxZIMwy^$PfFkjH6U@oEsy2a|N&r}gsMuW*c97QkhG73?>msoj@bgUyg^&*ku3Zamgu_ECAe z(F^ZCN}n_2)@U;%f$C&=y-pOjvUUyTNs>sCB+aAo&a!(;jt*Xn5pOl{<|PQV+mzA2 z&0dU{fm!qSoV-!qd+%*~OutRTZGJw|9T7~;w*8Bdrz|{W)vbI&D_-Xfbj|JW=s#@J z%nnHAG!dln#>cJ&HJZ04-@o^KeJSQiSA%r5W-n4z$hGvN zkLgZG?G18hkQ)%Uvt8Han#ezOUm8n4xBh1 zBRK-d5ws>|-rd`GHwvQmW8?u15BLtYXUWUU?_LFCbVrw-fGQIQoZZ$KKO=#nHTK%;O^jA3mCnY%S2r{+p8grnCqT_fc#G zrnZ9a#q!Y`D9OL zq)=Zq@a3oQ=Qn$0ShjzPky;vR>E=~h?pJx`j{ZxGT#&&9nGSg=>%yE_eK%*9cSa3W zbv(U)F=OPKzh5v5)&JGS6zV?a#FsNtHvY+2Q;9f>z?olQoSim5-X^QW zJiave(#@;%#;ubA!fuJWqGtFr;Lmg*221Lfxh8+7nPTJ#3r|=DnZ%aFP2T(SR8Neg zsX-e5xlX{_{=0@R>Wb8;dNkLqGD+RJ%A+gl4G-k-K(0-)c5of%k$m(c`HW|KpPb$F zO03mAYR(EcIt!l;pRxPEE=+Sk6=&l6B9$VXPG0({uiS3Kkptfl#sGA zq>2oF_suCQiD8qNcI3FZDEH0!J6*kS@s(;&$)9|Xa4%H6G60MS+i$W%&a}-pl_E(X zOQK1Ro!<@kHgf6eJ6I%Td>7#vKl|srfK$fZkw|xClDo2&fx|JfjxjO|@_bgmv=P&G zs!i{XDpqv~t6#i-UD0}JcchDI0aOb*5iLos_PYL5;|xZegy1AJBZ$7uuDH49<1i8> zf+*fjzd@a?v|j!T*P}XhJHCyaU4O1s4^+%a*W)f;1;DvOwV&S z|NWi1g~5oM6x^hyW^poPS3rcqS+54-_+n6KM<^b zpR@aOdMZZ7z!)v!Vz%7S|4y92QgZtdX zJgV(Hx^}o?-{}y{bCrgx{2b(TWRm8ufEO4!DTR|#J#vE@_SN5MV_k!h8Zp%H=bZN( zt{lIzPrWD7+ItG#Q*Fo?s%(GY;%19k82KcHPf{IXGyKtTuWQ{Hf{|DnV)@?Pqw#uH zhnTpY+FX}a#$&c{c`CR4EeOi+%N7LXQG5%6GW@ayK^cD8f}q^|wjd}&7F!UM@rNx4 z%ILxt1Z9Ls3xd*2Z9!0a7h4dNaeplc$`HL41Z9X`3xYD2E&jv-dQZ@s|WD5f{6y;2O7e4pyR-C(TD zTpJ@XY7oPZkb72hosX4w!HBCAT%|f>y#0016m462xVMxmEfBN=>M<`}BirMySes@*h6!fV#M<`)6OIWiO z1TRHrFU6o1$G#y7ix9b_A}yitrLXSn74qr2JPwZV<~DTkkO zLt+sQ=|B8$p9`mYBc-Xjw3a9Ba$B7cg?a3RV8>5+i>j-`x2=r9$ZLStphfO5xMbS7 zmn6htBt;G>@;1bPAj(7Yv$Is%AYiEc-TGTxoYrnTegDWlJkxU?S< z_#x3JrsqXw!o=0(X&7-;16Q?XsZA^ti-YgvV&tEUyD+FtV(Gq?d~8aYsOXE@b5adX z^6eqsL*7Osqp#UUBZT-n=I_QHn9&yrtLov~mUBa+=lb=1(RaEGa2d4HtbU&;TyA%T z>t$ikCJZ{02kZt;wPK8VY{rGCMwFRrY$&fNxQAt|5I_ZgD4x*Wf8rwWBE;d*g%eN3hrHh#Gyoy0et`zV zpF8^Or3NCYqiBfYzs{GB|9*Ee={pd0*(!;oO6AVjFNXca7?IfeBlo++r$6e83-J)VB|@yteE!eF!B%JALtM#(dAa-N=|j% zI0)6FI!k4z&+Tj>w#7VwGz9XU!Q)%9QR~G)7}*88G%B`_o}xbK*``JC=}etkET+Fx zgLl09OtNCx&kNy7B#D9~sx67!akUR>WOI@+Pb>wolm>Zs*0DpPu3pC+jC`Tt3*D@n z3rT`*cH@;uEd{ld37L4l2Kbz7n3{`u0@Wap_iKv`pWj(HtqiyGtDOGIhhC6-M@R$8 zn@HqyJ+Y93SJL9a2vOznx@$gKE^-=-zQG+i+>vXNvy+T8srlxi4>0mo3}1OOX!AFZ zPHnR?G4hFmPm~dnx&NwXa4o8y_ydc7eb+mY zh!IzXfh#|dj-IN_{ODhRODhB@1Z^^vG^}a$YPZ!pjFbzZoR8Ecw{TEvRFBgZ{+Kds z@>Jbn2vJ_nBOg&LjSm*s^ud8wq(Uy zxKz7*U;Y}*qul(ES^|&u>)Xm>Bj$0CfCGO@@#V0`B-fIy7^$P7jt_4++Yt5Qef15D zT#&*AsV0dq_l4|@bdl9?B*7O7zEJH*XAKem>ih7$61l*@1xB6N17V$AHE%DthI!7= zaE6~SjO_c(xgGW%BVlp~lWUOSa*>+;!v5f7U z=lFIbzU2jAo^N9K#t$)a%7K=GFh&u^^d#EhRtpJ`MU+$_BnT$Xc+f!gq zsgs1e{nU#7?f+|mkx&VQO4^W3cx6_{XXoaQ!APzMa`~e_a$N}ttGvKODxPVx^k<0o zbj*`ULngmD_P(uFp3rU!@oIKygof+`^Sp1MV1(eU?76K4En#LrFOf99$#iUY9x|c z)kPu8*k&G(c?$Db16cECido-&=btG1ijfyIyx_a$m^BJ^)h=cfk~&llp>iG4Wv1V; zwcc(y86%$s@L8Zs2FL2*%;~La4j6eUgqOm$B={s}!IIKHM_e%SNd%unMr1;J9DeN8 zz-g|dkmZpe(@K!Fyr-NfGfk9rCrc#Phl&}tn9(QK1&G@Sg$e{yl3+@md?)U&G1SNy zY63Y_@7BPiT0;A0RDs96fhrqY|lf*rMbBw_;pc76n-p zOD4N-%=Vry+E-yDMgTGVb*J`JWM20U>=-1os%^k7dztIILT?P}QFa1}ouK)6k^AN@ zf=(`i0iVWxu-tms^AJbyU|A2=nB0Gy*X76Pz2SOePBLT_ z?YCgW0xaY`-JNt+hwO2Jz?q0Fi-qstgVvbi7yrQ&-_8MO8ng9Lm z9cBGOa1%Cf+`6006i*Gwz{mwPxWJ#Qjq4YpB?zy?$ZA;KnmlZh8W&W*OxJ2Gs$X?W zSu~-zV(9l-7*Tbno~+t!bt-3#l7NPiMvHtTyq5a0*er z_)h-95%O5wJe8Xm|GAn`!D?5qX5?`;Z8p^4ROVogaN4(=a+*&ct{Va?eo zIoBZD%1Bel(i8?Q2$>3Lrb55@@inf~ zDP-9SgBFB5g)~p0-{Kz5e=g>{QApn?^odiKt3~yu&PhWH^OPOCaoJDH}+a?fT#{*?X|dKP|mMnB~)=pNZ(+L)QO;u z55tIhv2a_LxrMlvmYazqUo{N79(;p2$^=j*&?HvTTKy?GSzVhjhiVXJ+h6qVyc_!_ zAc<9PM;K3NT`D_rWC9xD@1*cfYCsNq65ZDAJCOVcBbUW+S=<~`CR`IFFxV!YhU_xtQ?5T^8^i zBdTj>@WUBeR_y3WNN1IDsFZgm&LzLU8QztHr(>j60<{ut;?UmmqTI!_*IkS}lENdY z4#`h7)Mt@fb(H=>(mckH*PJMBgk`VUWsiwR6=U`HpM&j5)03 zU@g}pD{;g97f$Eff1mvSkDAjtXBXV*({l=vD_sQXymPH!^R3EhQ`Tc7N&r!OtW2Tr z!b+{9=cXWI^o&$;M%vOI&tTXLMu+6KIm~VM!&YbFLO#>*neP$}rH&2zM^;Ti0;zh4 zb8nX(^a<-V6^Zngg13|oF?2raIQ6PJuxcveQ8g{!C70Fsx8I0)9t+{I(3osVDvtdd z)L0aW5f2G?NOXz4@AJ5QSAh4VGR?N=it@JO|;R4tbl;`)U6+qb{W>IaFMlugkU?UZF~72)M7K zud8p?!VC*y#X+nlA&})3D^X#P$dA~5wVz@)tsFBG2^uMZNQoZtg49uObf4z0z{o2Z zyprjYPqJ5$mSZ#c2u8eV@a8{#)4;2>72lmO;vfVE{`ObQg!)IBo4jTs2~?H%BRZ3VQqS0WExCsK0CU<@!zvW7sp`wa{)Z(Z+d?l z+OO}-eN$(l`jr`ONc}m>7Q?p#ei%`09((V#UHy^eI3d*`(HTdpR`fJWkHd(a z4D4iW$p9rY1X78uL}Dvx8H)FrVLvnaB;ym~81r;jVk$1=jR4;8hh}7dfeLvFlBdve zmP}>XR7QuKv(9jHcXU1>n2mIlErD!_HVG2iZ+>lWt2Dq!g%~P$AKZwfPx7nb>};e9 z)s6AkgHy`a7HD9epEUgB%^j1|N8aD+-5>L)p7=iSiOC2u*)kh#x_sqYzVem_Lw<5o zKY4%sk)2MRyuZ_x>lL*OTg#Y|+)|cxp3zphZn(a3fO3AcFSOjPVb4_H`c$`!Z^FYP z2VIiRK`l-eK{CJW=%>Zqw@#8{Bti`$_#mr$#kYGKS?DPd8AQmm$gxY;*Wr)mbRIhg zsrsB8&dH5iT$b~e5A~MMBw3?RIVM;Q`@MV)Qk!bk1GOHfzO9i)Zeahre1j%#L4d~{|AzXbm za;V`WTiMF12dpZiG4fFeAB76yexK)e$zaOq2N+2eLaMM2S?2a-M5@*Oh{MQv8Jw4C zkr2(f_OtUN9=4i`>NzWevoc+RjIUUB@?(_ITqL!s>-SEPMULFX4D);u!WW?~k$^;l zARblkV^oB&>3iTf%u_%?0i{ir?Fm!XeKzbq10!w#ZqOXv+jM`-`dRaq&qX>7C$p3YU6K3fH9i#J5rqA6Ii@ zRuD$gX-KD=Z^d`LpSL@3LOyP>s&}WCS@r=Js|w5$FNJui9hZJl7c^nytN_jm z%!qdo>9H;WQTd^Yj_C2L(qnlcI>eE zT(?vX;Yw3Ai1H7XHq1w@ zv6p~7?@XO-P~PFw?tPd?^#b(v>SbR9M#nIZtq^Saq)T;DvjyEtZp=r+_#(hX&~9On zg+rTg=t8chR4s_vBwO`NS+NZ4`MBTqnMDU$UrE6gt8QopSG>KJv?3ex+!Mh)KDzPh zz^PA?D&AloRn?c7?5WTz`Hguh0V?@~5yk8J-m0|gvj8bY)g2f)rD@>(&;<*SQhWvA z%coKmKbw^>pV^0z+iGxItvNJ)`LT@qBO_>%G9u@ ztiADf%%kdr8r_uSnsurUBdT^XiTg#eJ(8O}lJ_PZlNc9B`DrpqnylsVegnfcFa{*= zA2A0|AvQGF@Z*a_NTEWW$tBO^EhD4S!G7G%gf514d1L2ctgR7f%n$^5bNZ@EV= z^XN+pk!F?YCW(yM#g+-H8dEV(6a!KGp~yvps&Mo6^deMRHVxVQnn!Zaq0&?n!M>h4 z;Iv_5{vtH_xKZFnsgwIY++5>M>AF+xoNV6b%eML0as*GRttZu)T%~I;E1Q?KS-u$6 zmo9{Kp$VCYR}Gx+l5c$kBORbaa};2RNq^H-OOIo^pAh_n&G~Cc5(T8R*K)~gc}r{K z9Lt_#^+{H~qFFj7zuul%j2ff7O+{4WnDOpzs(~*?ROg6J#ruK}y87daQ^b%WHYLXz zzxO3y-`_s~^Qd;=Aok_*!_lGt2eMDNXbDtTV?=e$=(GJm-Eart5~Pw*FsgYcPcmO3 znU%RPiOk!Y{&xQ>G{77sVki+ehe`Qd@EmSXITj<2gz!kHL)060Za~NR-ZL>0FNb)! z!HXkHi*4r=oLq6}^I7SWT^Pv*$ObKvE^N@{hyX%(^K@OC&yly}pO>K0R96?0 z<^t))5-gi_b4o8^uxIS{rHDgy;!$%I&0HclwiI!sNFjxnxou(BZrx&BFmi{2JA7ER zmzhrXtYw)?QHMSwhcj{`A~V;2FUZX<$On;}0UW_wZssi?MC_tjoj$aEZCQg$4HrQ; zKRIfxQGeHa+)s@3gMJJ-smOYtlT~)0%d-Er)_BF`-^J^CFGI4&Ng+;ZNY>I1kNS># z@^=tMe#qg6+?d2}iraYH{%NsvIpQf2LlM7ez0uBM*{9TH7`aTtW&Z5)Z;`1quxbTH z-pb*vT!RdyzR zwLPpznmlp^lI^Y(?()~3%jP~Et5Z7;BQ7+!@ayc#17C+s_;hUrl0bEGHnQ(HwaflT znCG4h?#bGcBg1pmjhn=t@fdk3hNpZu@S|MgtqXp=z(~FX@+C6zRGZWIFK%1S%P?|> zg*&W*r1sMh95tC_Bv^?gXz9PJE6h*-mePJDYK@~BIPzygB)c%;Q05yZqoL~x*NK~k zuE9L^4A?WezA^8-9}D!)J+vx0Wpquv3Qb;4a*30?<+XKNmbGQukesVYSpkM)u9&St z6+fcj5v5K-kh=LN&EHwjc@?TybuV*g$-36{D=aZjxfsg%`~RzUeVn)Q!*Y!L0Qdn~ z$EGaQJvaMx;w1xzfjfP7VWdC?1^hw$uvn_Yr36=8PfL}2>c73o=Ak#Ht48WQHHkm7 zf5K&4)=dg-Qd-2>xxKAM_FsKf`+_t4__|2XZ;D?|WGJi&rCk-W0)2-v4sm zYIpcp_30QH596Ds8_l9w+XLS_VY-_dxT!VY@H(>5sbgGj*=qC!RBIU*rSJSOc)%J| z%SRD>^XI+hv6EvLQ z2XpPYV@b2%TUT6t@19<-`FCf#nPKnOA_-It z@UWCGK?ZqsxHM-uILlj;jymhv*S;|>gV&*YoFw4H`vWgnubp((c`HVu#SkrSOBTu( zZ^nAu+T^+p)uU>id76~_6tL$pPb348jGTmNOv`IODYaB@J>pSyQ|IUOI};=rwH`^} zAOZ*8nOOPmxMA^zi5LkML$J6xd_uTuwPsvRA}+1vp~syrd85u{6=9BFH2mW8aF8o( zd;~R#scw#-CWMqe#}011V6_1W6v09St3~FJ3FRMqN7v8YfEuA{Ol#db5Hf%9LX0Rg z7?Y1L8C7ZS+hGYVtwshlG6NDBu&C3zwL9|OZ{R;9*^Q6h-0$~|g}*URqzEGU)rYKL zXiamMOWfscNIl#V<}2^&D<4LD7aXC6VQUx@k_CHRa9EqAE|WL%^%14~6*UU9-REvZ z?Na6&CZ%4v&=}NfzuQKni}OM_FYHRrch1{{4Kym$uu4>iHvvKfLYJy?Xxg&8-%1LP-;q9tz?`T(@C; z#m{wXG0$w6-Rv+6UO0ZpqnOj1fGaB+w4$M<=i(li-h*y)`}%BH>N4phSLPpv{ln;z zl%pIWkL{Mn_FMP-<(avTQ#kuY?yBhQs_5O~lr=zM5ug~};<)p^qVs)4?-u8dnF@OZ#o8{OI`7^xRQJ%4KWGfLxw zq;m>JT;<>@*CW%8an%t?a(D?wB3X!JHOUy;nl2o=yYwfPK-F?TKje~2|Icb$PyS&97Tx&h#^Uu`kSlk?=h9`Uvzp_Z^ z&UU+tk!lL6skWpOL^*io^*9uZ>uI?Rcj|1=;d3FHrgkEjhVZ>bk?gB&N&e58^ zErluRfst$(Wb?<-A9DA1GQYV8BX5N8MyT`cf6=wewSG~9hVH{i56yMk-7g*F#4qB;sqv)Z;DRTzyW zc&!Gnc@M?ug57(~d@?Zdn1#oDo`v=<6Sp+HDZt1hfJc1(bD|5R^V0&!X@LQefK#!j zptGl7kfzb-N5OZqJUPN?mOah3C0XrXL}WPyZ`0p~be<)IEIwaXyY`clgM+(nLmz!B zY}F)TF01i=dhxrEQO`8!+wQMvOcX!y~@WUhWW;ny`P% zHl$`%LzILv;CVt}kjJ0k+?{SW_VZDr?Fdm-=9|8gt?r)du^lzxjtuU|jETegP2aV% z{+=Izkw`g2$_+@=WygEzoBF0qz(}G95_vD&C*wu~wa+s!@?He*d2=s!=Jq@NbXQ=+ zQ3#I0j%3X`@SviEop2c=6JSEKAxMHDk<6->tKBQNv>P(=JLdQ$fM0ynr%BDpYgO$n zcc9iJ2p~bwoGhLFo&D~CTiqt-`$i&oU3~M6xx}(8OOG9$#bF_m<=^=24CD zUA%DOnj+1!n8%+6fBxLdxqew#Xptx8QNDRVBuK2)KCa#?Y$tC~5F5(y^Xbg*OJi_p zZZx>@hM0cB_UGJ2V2OswXOeS0z;xSwb$O_yDkY<-Xw#Qj`HuhX2FHGbmZ z`c(Ap1hN{B9eMW9;qM?f?xzh!+fbS$){Y}6?OGC9#}Tem^mR&;oQiM+W#=YmARM8A zq8lhpGHY@KrLXbvmY!vQKS+@bwgTE#ph?nJa0KO6n1s)91Q!AABG4p(njFDXKzj-_ z$+W-`lxrgKfpdhPLi(prlU!xu2+BT3E-rC|K%fIbliY3P2udFSIlJHp(LhIoCNZ2i zg3@0@%p{HwBcWp?nk3~KM^H|#Bo{MBcp;%*NHl%l_W5JEJvWXcDEsl4UulZZbFf$%7djL23Sz=P@{fublRkYZBv|BPdMQs21=|2r4bz-RFPflm|iZz+I=gKZL zji^R6j7YqeTDetwH$s#*%gMke&$A#zb-R-q(A3+x`(n(addAs*&ewmDs0vZbV2}U;l zio;`rJdC^-!+U-?TWA;JReeyg2T5QAMl3lVI`92iZ|C$&nC>hAXMPW?*8O7TWP^x3 zsGX{gGk>Stxur?@nCG+vPV)(iM~u(xtk>-)=21THLbMk5wZo88xzfF;G*x%CPS?Hn z-aqTV7fEI<0c(jqxhU7kX?ELs@pz0l)8Nc|2nNd6HjUT0f{{iwXym;Y!>gv~ikF6A zq)Z59!ZyUB%ANL1d&`RgjQpYD4}VlKuJhqvPgc#}hh$S-fc!oydRMi%vJc7D89Fy> zjl2tmIFv6%k#<&v2d1A}`WAEeO2C)b&70nrA2jZ3z(|ba5>#7ni2$yd>5csz><>5z)cm zhTWp)E}agb_B;~6BSCXkk+!-9>oQl4!N_+CzVjFI8drTSa{M|QBaLEcsL$HhnCF%n+)`@}ne6YhQ)6`dub4;G z3|S)@9C`N(dk{%oEP!G`^E(JTbF$7W&JDnbzYP3k24wR!<=Ic`!x7gok}H5*-VhRh z^F7(A>NZ9$(r}S?2Mg~Cx4fMac~HjH^OA*^tR@-poYk7cN^@B4!Xl$Zl}FD$;|Tez zG@sROu_G^HrA4fEi#!V@Y=;uI7rD30v6QpA<*ez6W1h>(z%q{`d|?$|Sc4WZ+%>GC zhBY8l5BHBoR?)~BkSA+7!f}P>afNYi?f3BhA|r&&uEJU)mtugoDrzWvxy zQQBXV;&Ho^WRN6NC&}4Y+C=SD7zhp_{nn{L9q(*T+x}+jmsPqLNtQseM4RM`tJ;06 ze0{p9Sxz}lEbGJ?lXts>5v_aQJnN6^`$)q_{<>K^`eU$G z$9RnV2Kdci0iJ0wZ|%iU>M)YTRt;=F-8W#pynj$6*IG(F8eW^5yv^#Hrh9mQul*RA2osz48oLJFiZ@aFXOAkR;y&hj&Za%_gm5HH@U)0A(Os>0Jo{TwE zeHU42$802@GBHnv5Hf^ai67_bF~i5x|CD1M)!T%`073Pu?gQJM9xDEM-t-7US~_Bb zb}aWCGpGL%^l__YP%SegzNeaQ@5)ac7;*#!3Ffoy^4Sh51G`-j+kp)13mv70Ug%ol z!c|>CtKal5>r%H67k^p}PV>249)4EWKJx7t=25jjW**%&?oa5+BWj#T85Csj*R427 zUQ)&{DYJFA>DXT%?N4!pOv)&eYX9}=;LS-7oS$-pY|1E`YQK13?1*8%QoeD7JgRLT z)!}%6`n*K9<8B<9N{(9{x#KwtT@EXMXFMrb%$QqJ$_5~Alw>%HSp)x zK5A~&oc$Y;F;YWA4d3IbaN2>n(0~zd8F=#nPGrx5>QP<${$A;4J~CGK=zkGna-tqz zCD*Eww5=n~afofOudCPgQ{=ZA!`;j1GAWd)_`g0&%|A?41z4_e)no3{&B zd{+*4<@&_e@z#|#%C_Ez5oZRR87-17{^^Ido^x|gD0xJ1mp>11Zc7!N%5}g<5e-Fr zf=+U`4@sbW?T|>YsC?+>RtXW9r&0=)d>T&DP&7nBK@zGGqZtitqoEVoBXa$siD8=< z9TMxu5gZhq9TdIDT+9*t6c&DpVJ&VBMJPH)D0;QH!jr17NL36Y5&T;26YOJGG-1i! z$l;A#pM2Tz4M}Yru64CWA0=M^`TRS{yEkPv+MgVQksLAP@Fxcy?ALZV^L{Eu9*f~I zzY&N@UmWW7!5SkoVP^BmK~e9hMg4vs$MiBel*x5T{c^uo))y=6xaey-0oe~|w5KtGJs2%tvLoB;5-fv=tT{t=A4m%)3PAvu&iYe|()*>eRW zH-&JMzfUw(Ki1%o^bMRKqpL^Yk@<`s|Lxz1T(gQRv5gA4z( z*T!}p@P*xDg9ei~1>SsmVXos`raE7y`jS_oTxRdRlU8>W7ZT1wIIB+%3t|F|sz+(u zwLulD&i2|VXSantj=?+;a)^*?kzqE>I;VsFsVjfQhJQ+>m@IMhfpySGp18q?Qe~REIzdMKondp`|U7t>vOEtnqF=#B%|r zt9qz!Tdt_I-0gzPY7#<|P~+;W#A@S_@#oU+eR=n`}QB}hdG4#hecs6J(yQ2Han?_aG>D;rPx9f= zZ+uG8Uz3waf+R5{@tJRkuM5?q8m)9}=lX4$BUWLaLNOHbkuY6|W=;%>48f(;r32lRVfZv$bH)sU>VLG3tH@QeHBa(&8#@DRc~t(ep( zZ`k6*%WoES+L6$HC}kd~;DO47hi1cp{`=Estfx$Y4hq<;G{DArdCvrI$|UI_iN%aS z)dp!nDR8B1mGM|)TfboA;|-)gmHW(hFD{*{{QebXl!u_=n^RNLb@`N08a?Et?)-VJ zzLf{5=Y|1pFdOE3=6YG$iFTAJ)-W9Oo^z4F^F)HK~h$|^QNvB?pw+RY6I>?LNA17Z?p1=YN^rsmC-qlfDXLe);7Lk6t%lRgBzeBipl(sTQSaF9TvU)nharWWYQVLd^_ZBIsT5D+AdRy`tH#6K zavqEs^o%ms3~-IjWZz5D4xioA5mi0BniEG$xTyL@aGhtwOdL3$-Fk1FSlEAIiUuI)Ssq;G`3!y_*`Y#N}r8XCdddu z#%idu_I3F5zSYR{lvxCe%0EH>yUEd+cW=`Al|w~s`LkkIzho+Lzyt?Oj%bY2=)|8D z60+4kq+gWBqJYsohWc_fd`Qc30dmoN9Rs~N^_lsRVs=h%TB2Q4X0c}KM7Ul-@k z9gb3&9eUWo^reG)K0f{X<+HQ}%2q#VajmD7QxavA?>X&szi%6Qy`rV<*T8;e*cV)< zjz+uJyq&Z_xzA{1>a#!5)15NPL-6XM4xOxibpJodoF3u7QCn#qWt4C9Zp4lBp1M2R zN$;HE;1o;0w6J5z7spw-lzF0uC;IY?>iGW15DzqRfr_|K@w^bvSMJ|MJA3;2o?#6K zRk>*4F>MDaKFS19CP&;8r<~Aj-QL%82YEo{V?3^rIB4>w%T&gf17DUzdv({<72Q6@ zQ6^9aflN31dij--_Vew0Nj?5r@Mnso;-0^3R(2UcnX78J%68{3E!^w)dJLk>L4bo` zhn`(~8Yfw17XIN&tR1DiySSoFz4!S0jM*XlY+`@P+MWGdp$i z4{5lAGCwTf2fH9RYO43*ltbqKp|pIfQ+C@|4)y>U;Ro2Knm2mmLk!OPAE6 zJhClNcmI6*+F>eF22cj&cd&R0Cy((>!+q1p(}^VWLNafIGx@J-1J>87nMez{YXNuJ zG}Y*5(W3O@xjRWA{v7yocDN-HU-cf&b`R%@Iou~jH>k8U+1-zH^btKAVOD3&W?v~b ztDE?d)+-M?%k3^KozZPJl_@qrG0Vc8c$Dw5sNDf7<0)u8h4Mwlzv;aGvASR?6QzMD zrUXJm8M53?vzaE}SpVtrXMJ1>#Fl69LI&?tsd}BCVOKJ54_Ox7w%xlYw8ZZk_^z?X zzH2_%X8O2cFK8>2GtsgJ>*Ak{DxoqP4X}~L5)S?`>)NTM60=haJK3kT?PABp1DD$F zB0UtOhah&iToc`7bfJ44$~;xWQ>Jul^{V;R8lCIyB7LXy0vx{d)|x&x?I@GPYm?YA ztl8ISR^HkPw6r8GB(b%v)%mTDytjl=Cei{T*^B0Kk9!A?xkZ`n8raTq$u_d` zWXhaV!#Oq~pnVVN?_Fw}UFz~cU1AsSR=ez0H${sd5!faO+k|Sb4qobi{r#Kg-kXam zFDXo=tyfMAzd~kyFZO&#>${?cD=ZiXx`L6xmQ( zd1Qce0VD&Y)kFqJQ-BPRj_EQ$Itj=CX|K++q?0BKhs z1EjsC43OTN43M^7GC-R75a{f8a%++O(B0(y`I^AjR1F;i#Lo9Owe>d*Mb|d;QYFLw ztHOS;(`QIqyJa$cv%x$B^A4!*QKhf6jGB9pGA9H$A=u)X;oMcYnetw@yiWUI+fw zA&D}|=*TmE@3G|gxm16;3K?My3!t$>_tP@9EQ>OeV3HNa@cXCTptw;r3Ml?U11~g| zXbxjBYXA5kE6Y8kex>3BU0v+O4*sR#erZg25)wQ31225wEiopt2&4+`sX{}U#X_3U zHBIOtyV!gx^nEG}z>7^$BulW$5^QA#3ORyxj$kJPHkmtYGIy5Urfe~H+G6f1^F!ES z?y=t6KD~r^2((HE9T-O}h z@#WV}aV}y@&zU=%Gk2EV*<3Mqx?=7s^LB_d_lPw2mPJ{MG53lw_r)kLVi|YMZg&!N(HZ2lBJ@T zvCZD~9ZQ+(2Dr|2${AxGFD{!ui!#YZNM=ENT+bgmHn?aRWpdPz!*rm%Had@)RG;_gDE|V;*QkKss#VrbPrK|3>t96amTo7af8{K+0-Y>}&aHhIVI>2uL~E zF^`%ENZ%>?RfvG(K!Sl-MLUKuYLSC1{UNe#b6xA|S=IPSXpf z5$nBPi-45S=jP29tseVU3KfCZy!JKEV}@Z7$l|qGJiq4M{g~rj&J$Br$+`sXO++Av z*XD?G-Ned)&n)9kiGXA!hjw!!Af?H`goPp?g@(A~?q9ZOQAb-5c*|?w@;pY@5dlff ziV3zvK=L6+uW}J6;I#!jpVhdcZ_%G=Z$#iduYJ$+H`;5QzARmQMg*h~9GJ*J1f-De zIH8HaM_&7p=VzsKx_$eBWq=5L;x``-i5E z@N^0h0V(6rmx+BNdO7Dm5`hw4Tf+0V+CF_)Hs@!K2uSM_u2>>a%41V@t-d_}c zNCcz}J#O(uK+5lgc3C1IndhRxt_Vm8pRV5$)_sVY$%%lJ@CoC{h=63th_;O)AYDY@ zhEoKjXj9=YeOAA%U-&}=BntzyIS>KKfC$Z`L|~_&-6`-Gxj_W{1g)RISDK*?3t!Xu zg9u2z1$ZD70e?a3FYuv_%xx!RbtMBvN&t#B79t=;u)vrWA|M&uVpd}jkm7P-q%IMV z?&$H>UIZlb3=GgN0tW=`0f9&VIuVe(h31|Q|JpF**B<;o*)%Bqhzhu81NK{l@1@%b zMP#(EE-vSW9s0GGEMMy^U>$S58STkeU)s`UAKCeLgpTD$XK@AW?7s<(!wvMs&1C^@1thfeJN82PzaSVP^3p6+tK5nE}+aR z3s}W2STM^qDeW8w=Qt+}x|TGWv-fnqLS-)N;WE4R9a_Di>0<|p@zaAJi_ML*2I&Q9 z9>J~Cvm17X8o<|JjR7=2c1ha)_~|^#lv+TkMS1>@+aXB>$?+LM zqq7p}iLWY~uPS*Of>M=BsmdMQm&Bgf zAP5@-M_jP%2HL)BwYcRW@>I`_@Z4yF#zlLcPCqbfdI!oJuz&;X!UM+*F)-T)+&+-| zHHSd05NLsJN@9Iwyimqh!G&4`c9`9Em|MyYJR#<0A?9wf(@Uh;Ez;alb`(i7H%l{j z!*j)lWvx4fd^t{A_Cp6hSic6Jt&-4Ad*u*$7t#ueeT1tmVU!{3>JDq&BXN5gEzQda zUdBr3f6!<|trpW=KT+nH5uO>VW8dJeoRlW*)3F{jt|p99x3}KjII#LZO%9WuKA?sJ zOmDO`-@8Iktre6hRzb1K1?Q8tW%c&`n!Ne2ow$Axo5s;KK$34PcO!e(S_Ro@X2J=LSfHZaEm5c~T%9&lO4R?G(?&(B8I^v?4lHMU;s@3w0qql#GfTWyh zvB-9FxAdV8ML<%{EKYl|uxms$a!8SsGnk4&1SI9m_deaVJ~zU&8|{X6Shsu2Ve%p+ z24C@rFRNyC7?ej}*LgjhXKG7h?MV;Q*S(|6Nfn$_+2Q27YyPZ~brD}F6KH@ygD@=O zTk%}CxxdEmvmV%UqBfWei)M|5z6 z**^^o*yMX+@swcFYNambbC7z;TmS7;W;X}BndbU|DJ*HZ;7?`bCT{f)rTVn^_FvpP zbn61!&8KKdp=t`f`k1IDHx^NzX326J-^mA`R$!Jo(DF8!y{ zJ!KCayKaxAh5t0dPnK6v)oZS?Lyq|f>8Kzcg7`X^Xu7cG$Ob7ZD^g~i2G+4em^m9u z_9U8|DD%nyub3&ZdsEjXKkN5BLOM!1t>f!0EuFXR)6f1#@SDT`WJw!nI=C~OJUH>>}`%VO;Zw?bzi-7daVMHJikiI!pL0o|; zbshPDq;Jl4i+PAwUUzb2m%cg8$ZacUyR@$)0@62!5w1l*8ecaeN2q3htW1um(l^($ z)!C>DR!!fFfb`8_z6=qNzB$Y`CIZrzg$AIgWFRj^8Mk6d|Ll9MuOFl@vQP_!%%Ug% zl7mm}uv?UQse_lgYN+)ybW`6M{4{|wVOj`dn=w4jl6s^AF24N11D;g7NWt6MK*tR=_+l?NC zkkRc8;0;#z7`SwkCMiox|I>Fzx5ZtL5}7~?2xMo0e!YIWUcET+D3MXtgHE`FQ7TK( z&WbSdX`sjVp~n`yvOY#?@l=DS+7Xk~^!m|UJ2t?EGM6~G#5v$K!?AZ~eO)_lrp#U= z>@_-Ic-95gU%s3E^Y}4Ri==G8uHT~{S`an!0%epfYn!_{sLIGow6rZ8Y+(U8gZ!6I zJ-@^5IDV`DZ+#T4+r`i7|HAs{Xw|3D*oI?{lNTweEAU0y{5;w!Dswhvl=e8N%_A~O zXS-Eh>sKB4&jKo=G%$$2`8utl&BEhk_@x;kjRii#G%Tbvb_%bSU#R9G{ z!wj79h>UWO;bwv`QupEW?BCAzW8XR_Nb$-Yzjwm^;;i$nD5G4m*RI){R%EmE1bOt0df3Ra52I#? zl&0+b%f4Zg0{3@2Nf>GR#mB%+8ex=ETm1Bm-ujijPLg^qs^KCtFq|=^TYk%tb7^VH zGdOzplQTzw!KT0wh>jegpriD$l&RK zFd=5A5at_*_cNT>lK-Ry`cL+q|0LV_PhOn=q`~=5#+v^msQFJW8D;92e)c;jS1lYK zO8WPa9v-m`RAfY%>w37(eB-w1ed@p0U8XY1ktD=6 zTK?ENJCr!(NmfUw84&@=a2Ns96OxK0%^`O5k~F8krdKhZA{FQAA(tKbXQe-Vrfpc0 zGI@H)V@<-$f8;yJ<+xl$g5MZkh~X>ajmztRtcz=}&!&aEG{H;e_Jt~T(xm?>-RqCs zm=RTI?q9_vs#SdaDZ(iIvwzE*=J(jOfR=Vn1LriZs0VRs_r;iAqlC&RS4|A{NgCVO z+*od2_l_6d@s6m4_kChl)oO|JX;Q6n@c*sZlbMv-?KJ75QZ1A+#od?-w^KSz>r0s| zJ!CQSF3dhhs%^=&ELSUtuV%crB0naS# zaffiHOM0_GOOH_*rMr6FRjAd{;ws$1$9MMli!xzq2xIR4p(~~}_*TK2GTC~_W&!*= z-AmX~Ve56ugm4hTIX*hxvRn1I@fB8O|6SF8gL4>ZLADmMnb}F30mHlJMs%mlBQ-o? zN*=sJBz+K1Zxyk3Pz^+0%N{kiM=iI)S|hd^R@g@UoGE~C65ti$=#ov2=k1~Ng1oGAJbaiC;Z*jk`OQp;X4tB7(8W;MMwzNLL zog)u;SPzHUyw>Q-^!1asE~d;5fE{c%Taq2!KG^9FWfJs|pfA@BURvL3aQ7SP^Q5#g zBa|7dV45F`PUo8b`Nioxc^>74;z;4>!yb0ks7w|ISu6zJUB{8z8sBoI%ndc%U~AgK zISYSmd_0FTcl2;aU!EFz>irB&(d@0X9;Kf}`>77`jc5B)nP5Exv#D>9jq`~c6Aw}5 zyAi&#^XmN{#l?r*LMih_3t!kIQN8`-UG35nDYHfoYglQJyP!_MU!TsCm;77{&)IMm zr-@9hkg2sth3M|QQ-z^5oi32>^5(&tw?;qHj+vw0Eg4puGMm(}N$rdq_JN~rOo?C9 zo-)r3@Z8{xsbxIvYYz#D7X-WuxNa?y_;m-aa>62aRpZ+28qFIIZ}(VtPiyZHv4l`CYA8eg9o!`pT76~ z;6npCT_UxlTR^%+dES9JGakM-N>lDyy*srGo>Fr%mDy#4T}CTB0D1Gze!rZ* zipnUrVPEIF&TZusOl3A$zy@}lGmp>(#jTH~GRjTe>aS16Mvlp+GS>jEf%(ON4^xLa zy5-;9c=E@aGZM2NU_Hy5J9lADSVYlpm+A9pA)Wb7)S1=r*+)~y%Xpl^BcXVrAgT{E z7!?1MmKk(X7XeB2A&a9WExLGk6@MYAK4ej{B-IC6#EHLeiw_*K$EEelsAsXowcUlftH{kS<50cov4#jOZPst;LYDd{|bzB}SCqKGl)Fl=lGd*^S@rT0t#6ZTep(gG_la zc|YmL>%j9aSO^6Ul{$_Bllc5VU$~XoB>GJ?=W&Z6v-$y3&Li>2`~7E zzg`rTHvciL_?Zcwu^{k4eziVjTXeokI_ro5ju@QLVFYz|q+;dv>Dicph1#cmsmwb) zykjwh8h2Q^dj9ABSN|)Mp7^*=tQNrzGn(C92*3SF8Rf0@@l}_0t$TFp8tMGmFuOeMthlbusXnJJhTnXY?0q`j zJ%<(`%^dg$lcEY^H}-%3f2g#@1em!arGEr@B}E!2(m0}JV$H2y=F+)~B1l7(ZXkO% zIUjpje2vPyR>NzSVQaL$a%=65xCqkFU=tT?l4sa@%nOfsJ2btrow$3|x(9KzkS82G z;cU^>%%|Ug2KC-PpcN|z;jo~}Q|4Drr!rSHa8*+o_xpIOLmI2xWSjYP7q~xrdaw zse_wLD`dMjd*I)dpHpVD4mPvfnO@_2R(|8p-yrqu*TH@kM*))t5OvBm6?aYH85gB$ z9Hr`jUclmW+8nDF{} zwC&%o>P(NSBCh#Fum1lwRdr^x68qx+!lp{B#mnsMWp+jTYZ2IKcHU`rMe73**l%{; zZ+69FjtCqxJ0CN}sP?4dXtb$|}j~D#nNKR2%rl{;>u>~HgoF1yGq62>q>%T9Yc^*TDoN|gqD?BoQ zCA&NvjQE`pMya{_*FE!D_YF_zFukFH8yZ`j{x{xH)oOk0M^tyQNs^H?>Iy|bGLn`7 zl999wkc^~dfMg^s10;2Z43Mr}Wq@QPEdwMYX&E3HNy`Aq_(BFqM$$4MnR?{P0Le&N z21rKIGC(qtmI41WlKvke_J?F7E&GLZTPXu1BWW2R8A;0kX@?{OB%5d%AXzKR07+Rc z10-u@86YW6Wq@R@ECVEKWf>q@E6ael)LK~vNY=_SK(bbr0g|<{43IQ?GC(p;mI2cC zOa@5C$udB?9+UynRjmw=Opj%NWO^(EB-3LVAekP^0Lc(d21tg*GC(>L$NgNWY8-EB!gZVAldKA0Lgw=21xe1GC;D@MPSTdL6r{q)x1U4 z=(kMZROYA_jze^-IZu)(a~9w%ixxN5 zVnx@#OH(Q1$$=+liw>VIpXRS=8&@lu)T31X#N4~z{-}8>Wt1u&pAqdAdIU|2Cau1w zfqR+;IQ^b#-0@35i#e3psDX{lLe?ohY)&B26j+u82hi5@*d+UP$Hb&>Lm(!hQB1#x{#3Ki#K-eJWcF4Qte9%ON{7_h{=602}~ow2Bm4e;z8Ghgv?j ze*Cd%jZ1oiDeX!ve|t#_*`kFlOsTtIm8E%eBkS9w_=g&JsBy&M(8;@`js9R0%4{{j zR)cemVPku&D8AR|tZ*YZr)Mk5#OWc9-9$LpWpDJi>2;g*h4LcVGQ9WF;Xb{oOr#1T zRn~akxS83rq;ct3%3Kn-ODt9gh9)Mx6waH&dAU((kRSvJRnUfhNxO&Yx2xiB)5D9A zyQVlYL>sF|8|z}+cCmBPc_E#5KwSZP{E$XVK0x?tpPk$g`=LyAhjdPn5sFyKCFhc= z+}+=el(}XB*Vz92j}`NTl)f$QkkXVokh1l?Vj8DQj53houwjmm`Z>3zrJYs7S>{Ie z(f8=G*Ujcq=D7}@v*Q}twUf>{$#W-pd2HE0K?oF_&^ICWoxAt%{ji{9VN9!<{r(V zG8+LlvIp1fY!YC-&743w>!<}BW$Mtw+ZxS%QSo*HX`52plX9tU!;`gZ-6JwPjj+>b zhe}B9(u1#gZ|mP9GRo<(s#QggMWkj zJDB@7ZNXt39A@4PcwI$0-;3wGcq^0L8a*V4HqrJ$U-5dJ<`Y@`XK9U1>h5UgIRv zf+!TKbSalz9U11T1@BwHmZ_Z2y*@M>cM`(sDUv;?xkw;<}>8E2&31 z-eDiC3$EAw^?+h36Q+SMO)XseCRSdsYwz*u$)p7Z00rQH-)Y{S0rRe8*P_fv4Sdwt zp!)A0_p3E@J9|^cTMypsS{a=RNed)5Lu|pMi4BbtYiy-5Z}jkn-S}m7oOaC9&6hIk zEnq!!^x83EUZ!KNUou(hjtJ%>LN$B~;%kW$>c$CeJ8x)Gmhib=u?WNq?(sr<^|HL& zcPYESS}wLroSAW)mRg{O0u~)}wUMh~XnKz_yExdzY_sbg46NY!*MnrzdgZ+|CTD!EnGMIBit@^*rM=a_Ta7LD5*i4Q(xf8_%4B@Y;dz3jj zs9lrO{rppijB=!Sbh&@x)ut56NM}YYZCp@X&5wtnoDJTwcyLnM*;qmpQR+|9}*em;(j4*@@Q3uW)Df5@2Z^ds$91X z=`VP8?C{grrH|W%ajhv+Vt^7B%LctNNNLJxcK@#V_5L)5QJJ$kILlTGx7;kNzi!;4 z%uPMqWZT{a8>`RWw=jh=C$(^rwYs*s+6(W@SCo0Ff|ty%2EC?93nV{k?1O!qgB$y= zcu${HsX9wJv_47q@f$5IMh`K}v^)NqJ-9h$yg*SZbuN0~D^IHPk#ySZA6C!a~yOr=b& z8gki*5YLRHv^PS{H$o%q1HW%WI*vTEoXQk)P|P{3JlCpmXs-!wtu78o3*F`UnDmbF z_&U0pL)GTBeJLa90da)ZnY+Y2$o(uWEmj4wDqGA$eBS=zog;h!m66n*C^Mj;$JMYw zswbo#GR|`Wo~NWCL7gL>*e%LOG>9qz6SEya-~_8F>`us z24yy=V1vr~)V~)zu0HMgCU04d>wo>8Pur$k$WBHzyH>TdN;-L-M>=@KuI2DJPMGrm z=fQ}9^5^^tynVC#P%5)q3%l7268C7w^vC_Cq?3M=&$}4Vl9Y8+usJGJ#%;j#ah_%4 zCTyZ*z0<)vc06$#tiK-c=WWW|HNahiBQ9(hK!wzjY<5a!CRVMD4gP(X@s!HE)WAzk zMO>CIt%Y_KW7|F@-*2`Gvj2Z!T-)WSen;!5z=9BuFGW3`lH!%C@r_Y^PIWJtNDJ{- zfxoJvLIqPfNL3S6FnDAl^*M9Sa`V-EUdZPiF_=Y~MTp*Rd(>0XHQzY+#+lJJB;KW| z?}ikoXQUlUg&CU35JtJn8N0R86*uF2DkEu~aS-k*dN^N`f9e^j=a(LSF+1f$HXbQW ztEEsTQ3r|a6@25CriN7fK$+DRu$rACYV>#7_J`Y7T948sJw4Rj&9#augVf`10sbsB zeBFI!I&bA)H&Z&YT)P{sjr!?GNA&);Lp(eUU1(Nfo-IzE1?wgu!XTSo9bWfv3W# zr@|DB=u|O!Zqw+P)wG�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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnativeinterface.h.5166B0A1D4E3018A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnativeinterface.h.5166B0A1D4E3018A.idx new file mode 100644 index 0000000000000000000000000000000000000000..7fc79d51f5f61abab603cc963d415171f5c566a3 GIT binary patch literal 4360 zcmbtW4OA4@6@EJqvMg&B78Y>%$&xq>HnkLu+L~xA)tWXZH8mwIt)z{faEwW-O-zkZQ(Nm#o1c@k29K>Vy)*C@1srou zIETybefQ^k_kQ<27JI6yP#i*)jh;t>L}4QlLhRETAz(d}*%xyA;iESzkdmD_zk!0-qGu@K+h z#_jg8GEqGWaU=2bsz+`PzGY0eTfJc3mo=718z*z3kXH@`38V4c_+?zGG0-|jdPh*W z3RdR)+U2J!63Z!A5pf%lxIhP1npp+2xCxpeU_omN=4e-NGb@`|o(C&}CDIz=B+{tG z0h@p*1;JhvFnq!xSq)0sSU$um1apc5jk^e1BynwUhP;)cMCP`%@SI=sce{~yeux{V z8Sm{Kr%=5ns76!hpQ+7N=`g94cNyEkvqGaj8n=5=yDt^F&My%n=q9Ho`tg>#T(?Cz z-sZ-LGz+3iw2WYZs2vt@yTrC=ZRZ48VFiU7X|)(oInkg%2^&-j01q&03WNmz2oofZ z2#pZI*MVu&LM#G(q;^gwxTbDtC2r?{QG%$Lc%rDh36q9;s6kc6DJ0m!t88MWrcjUw zitIqk09Ol%62&pW+}v&1peF~iy9_cxRj zIUx-nY9ydn>FsQ7;zb|JJDR^r3;|HLkuYWm2F0gUQa_J10=~6rYfEJ|;^fNkovR5C z1-nVLj8mGCy0<{ww1$yHWRbsNFN0!aVWDqN!uT=e2$$gd&4fd8N6n1~iw5_##l|;a z_$V!7MnPc|lMx$OkaAyLo3l98gVBpe*gJv`h!dJytrE3C38zby# z=@7m)KWkpb!wZfu%v~ebN7!X@*(r06v*%w*fBV#NE0YD;m!>bBp$VG()hVC6*mO1e zUEto7TX65w$Tu$ZY-oNL`Ue0f^zZXEkH5He_>*&hAKE(s|F%b4fA>z^xr_HQNlZzyCQx(~1Jel=fCUqfm%x9G56=6+tD%T0 z#6;rqxbo3KMJN)_j+-6+mNw^CtDk&%g~4FPy#~~4h#jpOdgp_v1M@vY23_x&1M5Ei z(bg|)x<*`2Z^P~_WE!NXPp!|PEud3oFlp08S5E1l|93ur{nv_hLnbeN?!(_ywUp}` z(K&?#>X1@q&e^f|ee24<*6RA2OCOT1h4>}ln`_L?rbV&acim^LDf$+uEk;XN?O8kA z_3Ym&8gxV2yY_iMwhj1ojqW*Q^_K2k9MCm-tmIJqBTvlbbdA2ZX4dxSTZdOMW?b#8 zE(#A0u79YW&>mP$_Mdc~s0r#uvi^SmGvd`U3Hn#+EG?$BIDPV&*D?k!N#I+8OY$i% zBk>&ToD|yJ`NuC*yl~;?if#hBF(XadrlgHBeaeg&e`ksmv@}~j;_)DfBAm*(1y3Vbd9zY=SKWwcUm_TiTZ)OT6rV{Iw@^jiRcz*PyOh-_`)Z=QR?Les6Kvsv|FhZ=^BOPN_s= zFedG>peW6_Gp#e5UV*kAeAQQj`cPtnulgK}`Ff{&XHsU>x({sM`k%AMbivV~fJo}Y zKogj;&*iJ6%VZVLe9?0$>ja=EFcyS2fIRTuC+ivgXE>73+ub=61y!B6ABRY-|Chd6`D~tN? z3`GH}!BU+{E10r-XDaDUAJ&ZvuM5xK3jyf(BRc9~1x-y0h-e3qEcxXmHTm5X0YbR% O6~$E)Kh$lw8~q=eaE~(p literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnumeric.h.CBE0FAE461F0112D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnumeric.h.CBE0FAE461F0112D.idx new file mode 100644 index 0000000000000000000000000000000000000000..59e617ed9bcfb01dafacd8092329bfa41c559611 GIT binary patch literal 6272 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 f^?j=9dmakKxossA0Bs3XKVKzvbVz2)n0s8AW literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs_impl.h.3D23F86B673417A6.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs_impl.h.3D23F86B673417A6.idx new file mode 100644 index 0000000000000000000000000000000000000000..27eabd8cf2f0173c8bf6ce28ca67a161a4ac7cf2 GIT binary patch literal 31906 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qoverload.h.F7064D60B84B4724.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qoverload.h.F7064D60B84B4724.idx new file mode 100644 index 0000000000000000000000000000000000000000..5b1c270b89bce92d2d98f2cde2d404545502806c GIT binary patch literal 1668 zcmbuAe@IkW6vyv->iFJsENg0=W-Qxu{eg{d9LGr}vzf6bCv|l;GM2&`$L9~4nV0WP zmX%RN5CsKM5JsgaHaORtxNzf=qBwl!{%dyY1#ZDLc~CQ;A<9$ z$kUh3i5Y3*m)cH*TC65M4GIb~3zxHC6!Z_y9QR&3+i2sn1a?bAbQQS1AgRTH)<2$) zJo&yon_mq5KA$hdg3J9Bxj_sx zIB5=vl#W1TNOK^hWV7hBI6ucDnMIf6vKp&OsdC=R@9?k3>Du3qg&WJlrLarAP;bS} zkt$APG@(=9)Qd&K)`3>24hf+(SdEZ@ObJ67(E<~S6q?-JxQqXL)Rutipb%Vv)kqo) zMlnMf23zagfW2nXExGN+s!FPww+c7{wfGl>T*59CN_=g|BgZoi(Fr*OnL>zXsc63b z??313zJaST6Z29$6JiP8lu4{c9663*h~9`HcvA-PBw63S5QhFL7z2|Ap}~&cNF|t1 z8qwtTtsTnhbCbVA^;ThPK33y3f=mfT8M}CC4#|{m7JUw%2XE`f%l}?^92f3G?-pUp zhkH1B@bR4|?aEt_(}i^UBfuVn8DvT_?m*zbZ-jz?V-d{YTlpa9T2#-aUZStxJ$3Ku M?9ZG;BxcUS|28tzg#Z8m literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpaintdevice.h.83AE26BC9675EC56.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpaintdevice.h.83AE26BC9675EC56.idx new file mode 100644 index 0000000000000000000000000000000000000000..ab6ff8e8097f5b160fee116c98ed10c97a2d6109 GIT binary patch literal 4696 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 an5?nFSgI3*(fo59|IFf_+5B@1|NL)u;kF6@ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpair.h.7E4415438F6A17FE.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpair.h.7E4415438F6A17FE.idx new file mode 100644 index 0000000000000000000000000000000000000000..97a3de07957fd0957bb027c58245232b3e0284fa GIT binary patch literal 696 zcmWIYbaUIl#K7R3;#rZKT9U}Zz`!63#Kk2=nR<*s1_)@VR2y1_7%Hf#l_lnsrW)4j zD5z8$S%nzEM2u=R88na-=qMn`X)>gwCg+q?7Nlwu2QWrs^k_ z7MG;vWh53ArRL=52bSoY=~?I*=%*(q$D5hxXXYj6l%}Kt#hvquQuPay^Ycm)GxJi5 z(#lixGAJ=AJtsdYF^4iU3KBDmfF>0BCT6Dw0ND)1mAOfZzyPamyHepdd-h@;26hGp zHX%tNB{0Fj$;8OO%)rRT%21S=R?G|xUs;DOwcXpI85w!lq!^?Gz`+e9j=Ehua^ZGB z5(^KTu$HhP+&ng67h!J%PgGu14T)zd>Hy;z`mg`@e3J7#pt+n3oI)^jVbY9T5C=iU z`}Q5_%JnJRzy!2TT37|9iib^9KvWXO%RF#$%B|^Zw*&REaIo;hjI0r7uARyJ?;F`p o1%^dVBFMDjqU2&_5CfD5p@0>}0EXl9qF-N@`uq}SVqs+f0Ir$Lv;Y7A literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpalette.h.A0D6C68FE4FD52CF.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpalette.h.A0D6C68FE4FD52CF.idx new file mode 100644 index 0000000000000000000000000000000000000000..b6c9b6c86ed5c216c5a9ffd4f47b2230f1e8d0ea GIT binary patch literal 11702 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpixelformat.h.1735C8D208876A87.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpixelformat.h.1735C8D208876A87.idx new file mode 100644 index 0000000000000000000000000000000000000000..902b362f2412e98e30584ab623829d28240475ce GIT binary patch literal 18858 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpoint.h.65D6EB4FC892AB96.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpoint.h.65D6EB4FC892AB96.idx new file mode 100644 index 0000000000000000000000000000000000000000..05a845fabf6355c428455d9ab7ebf4810dde660f GIT binary patch literal 17046 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�lOv^)!s1{+;Y$mNXlQ7vyG+SCR zrZ&-MM?V=E`D4{??bs>QOcsRPK9X%*y;818^HX>fU#n%B+Nc7hQ*m34s!Z+u)2j!t z|MV+(7Z3h8xE_c8{Ni>TEXUDd)e0r)!iF1DOEzgECasc_Fa;2CBCT*!n=1VCeHmK| zXTOgcOi`qC5uo5bvW{BA$yrCM>D0b|c*XM#2Os~}-*KtkY-l$dO?#CvDLJ%s&KYEu4-eGJRLK&Q1;G`EUT z+IvB%!mw@<<2ZgGMjppWz zqbQY@u85Pz5%45_HEFf0)J|bZq=8zhN)0Bhf|W4cA&>^WubgxNM1fH%S&2bGR?Axn zA9=<5J@cXW|ApV{Z+QRtWNyq* literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpointingdevice.h.D088C170EE78F2C1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpointingdevice.h.D088C170EE78F2C1.idx new file mode 100644 index 0000000000000000000000000000000000000000..ac4b234e5333c273bdfa3ce08c5b3ae77ef384a7 GIT binary patch literal 7474 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 bnve=vG5C=|1;XhItA7*S{QM0rM#cOWQ?vG6 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qradiobutton.h.54424D6AB6222449.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qradiobutton.h.54424D6AB6222449.idx new file mode 100644 index 0000000000000000000000000000000000000000..e09eeb5054c2ea33ab65c1a66035e3ef6dc6b64a GIT binary patch literal 2264 zcmb_caZpor9Dnce_Qu8-8;flWWg93vKzVQ|C(soLa^uJYq_PsDZ9L%B2DrUV;Doxe zG(k=L!#F)S!vj+95K1fyqe8C0N+aqFjt~tl^q{(qGBx_WZQtSex8B`$?|r}D-}n3Z ze!idYZ(D9o&ecE+%PP&Su`!&9#4t>Oeh$vgzJj9{{wdsMDrKuSJ2|eZ((fZJ&F{0o z&bmw-gE20qlEcbaE0adkbVZeop-oN)$5d9B>~_X#r3*PaC1F!SB3*8=l%#B+*-DGm zS;`>$cDA&f;T-fXlNmuUSva%1YC^?-OlRji_@8odyFDPwtyN}|6+x?DIWIYECCe3Y zwN@s-nqv`JHe|3lZAEMyV`LF0wkoHC*;?gdwzw&(HX)po2x6b7yP z58O!yZEH`CjV8$m37po6bP8~*2R0w?{Puj7j3B`sDTa-jiB@B3wQ)>H1h`EoN=iw?mjg~mq}RpL(pxej5DI8TS|2q(8^+@D)PZv{ zLImz8d6W+7FYep=cjm`SzsU$OxFf_7KJ=KKDRYdXrCFWvetl!#4jh+I@mRdf3k9?0 z+-u+4>IfhRNMBYqikF z)PVv0(9{|sGK(;g94di8aFJUWP-*qtmZgn5i$ie_04NE1LD9TUAR2Uni{1JFvnlZD z2fFF(b%cltp+eM9QbI-PqmqHZ>{H>rs-%_#LPBXsjR-18s0cDb1T=!uP+c8T7!K!>?32z^jimxAe4Mv01s#d zV$Vu>?I;tvSip%gJ;aWLQVZ1bWgmZ&fM#xV-=2TAbEL)FGyqrJWVLyZg`eOlqU1j2 zlJdL%nQhK$MdlzZ$cL#fWIpxUhd;f8%#k6HVKC{M`akvzZqDf?{7FIJbSeY1Y3^x0 zdu8tJelLJaI;ZMRV%MDTh@t30|GtqG%mF^{Vn9zYs})LwTLx`_`*!hisZF031h z=5H&APSua!E#Z0=S420TXqqr5-(5lgdEB56bhlYe`_WhY<%X`Nb>dYxKC^2Lt%m!BNB;edX}yUztrTzaDthnR~wj%%l literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrect.h.8BDEDE6AD19146A9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrect.h.8BDEDE6AD19146A9.idx new file mode 100644 index 0000000000000000000000000000000000000000..edd35d478c28f6b3339e20ccf4d6a517eda91fd0 GIT binary patch literal 35532 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrefcount.h.E2B7FA019F51035F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrefcount.h.E2B7FA019F51035F.idx new file mode 100644 index 0000000000000000000000000000000000000000..024f40aea1467da5a9bf1a3126de843e03f05730 GIT binary patch literal 1156 zcmbtTPe>GD6#r&g{dU%2o!y-^_m4=M?iRD|q^8&s5iN8QJXW#*MVBa6xv1qxUNzJL zDQLQymSuUgTvTOc%(T?fsA3qZuFL(F+?nc19g{ERau+*~%UUU?kL6XsGi5`SukO`J zjs8y!ppdiqK^3i}S(>72*VVp>lA5o$pD&rfNg2^qqM2E6?Wmcx6br_%hcG9LBRe3% z_ba!!z}efiUe?7Dni5lC#}Kz85ow|8n}ah$T>|Tdu*6CAj=^x%mrpBJ;%kqv2sd-hKF47A)x9nMncesjWe+ff zdaJ!&#}Lk;#?UIybK~K=9cfu$Yv6q&*XVN$zVFI4r3=HW?*+CB!u3LZ&@mVW6-=2W zq~Y}1)cw~N7>1`Eq(j)7dtVrir+(2N#!+}G@}htL77{~YY{b)OZ8W%li`B-0$dRWB zF%iazc`C)FB#O(^q?Bw$Ej`WxaCppNJdW@PV=}Ifq*fNixA9^c%a;U_kVFk;G; z3gFI>4P@KmW43Q=a_7d-$}GU`?)D}W(@-Q7uNb;6cBo?L zNFt7HTKiW2Zp~#DfrXp6{a9CdviqZn|;~=>%#FduU6ZLTQ6->kHpv oiCyRvt&2vm6ns6pVly<2oO#f8=-b1;E}!fjUS+CDwGHf@f1MmbJOBUy literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qregion.h.1A71AF3EB76D2D94.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qregion.h.1A71AF3EB76D2D94.idx new file mode 100644 index 0000000000000000000000000000000000000000..57653576f0405ec3531a857dda91e4933365edd6 GIT binary patch literal 8604 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrgb.h.4A29C9FC342151A3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrgb.h.4A29C9FC342151A3.idx new file mode 100644 index 0000000000000000000000000000000000000000..8173a227486ff7a5ba6078c8e6d03c0a712aaf67 GIT binary patch literal 2054 zcmbtVU1%d!6h28)+nL0VX4+}mhQdR_ga#8eQK?I*Xg`FD`Lc!Dj^Y*wc_cd#&bx6ols8HH7H9`@^h z$T}~z6xejIGA6LAlv5Erp>Rw~cJe=U}Z`(X@Ht8oJurFq&oEG@Hh%Zs}#K z+H7Rk{~O<2yQ;Qu1pjNjRcTi%wPs1HAq{R0>YDkiso+eMO|90}O=wNmHr6$0oyG`S zbB4BUTU~EJt7tmmV}@RD*R1MB4c{&4t7vepw!w9eH#QExwpOZ*%@rrLvZj@-rUB-5 zy>!z9FiJnY9eO(=5EulYQ7I}j1454%B0&%B_J61ZA1Zz0?}HIXl0b8b+&Bmr^#>3z zbmP4%$=+6gKnxkEL}Sc!80vxjGm+k|P#+Kk1f#(OGd4psY?m%6GfdKR@;D^91fgK%V4fWd1Ad#~`tJVb+9MY(5ReftDvip_fFSss zU7QkIe?VyWB?mAjjmgwDohJ8gJolP+apW?A1Tw@UahVy$z)D>DY(Dqv#lepW+=~EN zl4Hzt7+!ty*elmo=e{POAV7&IF=jvzyPYP_y?g%z@y!23U>E^mDLlwbhv9>p*A{kP zh~M#p9|1%ngUql|1K>9AyzVofzWv3Y1mXzDL^31HfY96JlrZ!)v)u&{e|T@_~46qfk`a4~oVM+7dxtUR0LAT9{3 zVyl4{$0~ACIaDQ*9y(NIypZDrTreKd5y}C>8$bRs{`=mSaZLMqeF4rZeJ>gNGwWw? zuQ|w}#GH#$BidFJPxBg>wspkQTtHsY5zav#dlr%b-ZOvVS|*+Y&?gJG=HLJA>cwtC zvtl;j9uif3YHugX$+=-ZKSHO(sQ~YV&{=WTjkprAiY-Il;qirc?*4Fj=1ttD075@c zb6IwYjvU>_vjf?|PVuSeRGgRNLdCt>D&i;hTL-efR2zz0EST1fZt zNn><0o$5q|{z8P)acKucN761`us;~#=S^r>4iEFngwi3Za4``YjYSjgzZI2-WQFgY z(0Dj5@wpMIgcXTzlF+f(SfbN#YB)90X)zPdNSz^NMl;Dyl<&#=dHaOsWBCM+I0jG1 p{tfa00)C7%J1~v1Ichuf=%u+Ab8me$>y-xBx7|+SB{>h<{sncJ2)qCQ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrgba64.h.7EAC3B23774F706F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrgba64.h.7EAC3B23774F706F.idx new file mode 100644 index 0000000000000000000000000000000000000000..499c8411d2e618a324ab0eab2ee78677acbc48c3 GIT binary patch literal 7656 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 Is{%>-A4gFdpa1{> literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrubberband.h.18E73D8C8F6D4C52.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrubberband.h.18E73D8C8F6D4C52.idx new file mode 100644 index 0000000000000000000000000000000000000000..029b2fcc209e9d0eff51db1ee5628370135bdf8e GIT binary patch literal 3148 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscopeguard.h.188951AB2A4E8E0E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscopeguard.h.188951AB2A4E8E0E.idx new file mode 100644 index 0000000000000000000000000000000000000000..216728ecaf09df01cfa41420f74851d878df99bc GIT binary patch literal 1742 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscreen_platform.h.EA88485E2520FBA7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscreen_platform.h.EA88485E2520FBA7.idx new file mode 100644 index 0000000000000000000000000000000000000000..ad05ae4096c519ec1aea6fc6e4da0532940cc7a1 GIT binary patch literal 1240 zcmWIYbaT7F!oc91;#rZKT9OE4G6(~4aY<2T8zYbb0)c*sC7ETZo_QsyMQMr2sa954 zgaX48D{~U_Qi79BtC(lT>Wt@QQvGxBp&^%F~rOH%VP5{rsbb8_?pOZ3h3 zEc6WY)030q%}n$&^OAE)Q&NHA&iO^D`h|I5>oZ~2>t&EPG&OD z%=|oxj4B5EG`=7wu_P_OD3>C$N`UT4&&f|p%mEscUs_U7TEbAC6Axt-SLP<|14aa& zwa{PlX-?W~Ow5c7Y?>mPN??M46C6#9Y^;S&C(I^WtTYs3VrF7s(^k;d0}~7!UfBzpyu8K+HIRXUO_E(w0AajK_QA)id?()&VB%ncn8>Cht|JRG z{%BuH)DvsX`#6j*N=++P0qPU$5W7$`=`I5!6Pq@Rwmkog?XM>D_b-xl*izfQEt-*$ zhs}z?N&sR$0|U=iyR+Pd$JiMe!Kz_Fu<1^f$=>y4f@p@oq?x$DA>*&5;;NMGbBYHX z3^2*_C#U9>D6iH=(+dkcMlKZ9H`NvfCQiKQ19X?Rv9=Y=V$r9fMPHpW{D8um?3$oF z0|tt&Jkp0)(z>8#!>lxYBojNy$9e`651Ryw1TRcA51R&y2ApT;zy9CzNzU_tM#?bA z2*DJ=0tn4W-OrEeSN@*06-{_v?%bfTPS>4i;RTC&G|$1JoQV?>)lfTm*mQVwL}Ael zqZv8D(GBy{l+yv1le8z^1qBQ+9%0Ufr2;gY{LYCScCB;R_#rhxys9=Hub{GSgK1+31zh^Hwbex%;g_VI7AprnTK~$pv literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscrollarea.h.E8DD046A626C5B2D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscrollarea.h.E8DD046A626C5B2D.idx new file mode 100644 index 0000000000000000000000000000000000000000..cd63ebefdca9d08795a89161baac29d0af2cc64b GIT binary patch literal 2970 zcmb_edr%a09N%4*$1Z!^!f~8;JmrzZl`Dzm7DXT| zHnFI*L?~4Vp;RuDgxR7j=Gz3jAQ6S4O-MJHOvUyR!DK0u z6`{1)B1wYHW}2y(#u?L$Nv0yJb%Pjdwx5cW+4!stn*I4`? zDgQ?*Wx2z7xyWYEx7e^UyR}Tt5h|2iNhr@O7HtKDB*@}h!c<3GoL6VsOHmLMd2%Ho z3rdDNx@h6_8=IX^v+!XH4mKv4CZZfDmL-B~Te&DKUuu_>JiwfC2+3MlxmMcs0 zcc40G)?T)5(Dji#<>#sj*2I|fgpadA`j;LK4LR4u@KhkcX4Y%~ctXWTPoxW?%9|ny zf>rC(k&YjNahxVu&*d#slkRr3O%I|-ieOVUsbP*EIKOD_{ETyBo96SB7U=aVy#`=a zT}*a2QCZDXK>&v`p`!raeSFHvQ5B8vdQ%=wwFIm3QjHqA{l_;0-x+9+so^P4I6sCN z69ngV11CdH862jD~|F%aOh6Jn1f?|#35rvdlZ20c>Q9Zt|$Cs}CMN-qz{}j6*#ePsgj_benMK#MKo)Z|5luoDNn6 z>i`zn!OiOj#a%qb0UXIh1_Qir#)X4{sRQ5f6c4b0F}RgKTsH7Z&-St1JVgT>9T4q4 zt?qy6rmxu5%TsEAW0)8%kgKcH+RN@0U*#z;fMc215P+K*&p&o{*IeT%e}Kc7FgH23 zChV6($`{v%`5mMRa;NmONlMt}@aYe9lnzeoXq_jJOG2T1+mj$dC+(`L?|hvkIW~<* z<6YTz7cx~sSD!002r(cXxJAsBxkfs#ig zxYU7U>R1q}WtCH2}=;@5wqV-^IeQ*ed`zR_CeXhgLY#Lo3`B&?m;I+#7z8 zH5!Uz1Ly!h(8RGCTH{_#*`nX6GdCO2rU*KMfjZ?_Gi_!-J}{E3qvPPZ+O1m_rc9G& zAg6IG-~#r^oa{YMOI|~i(LT}sP$3)}V~B}@f`D#Ck-=RGlq(Ini_cUKT1e7C3FhE! zjgL>)Z?K|(rO+u_Fnhl@yTo4GCnEtyt#LH8$+sET{7eTvEO+IoRW6>lX;tA_m;mTX z-1$HPo$tXoJKi1jcs@Q7T8nnv+grQu*Y35dPhb`xCOiXx31$E?F*7hn~>R;@O59=sqP>D)80#;qasOACum^+ za%^Hm;&Tv4up(V}9D**$Gcw~b2xf2+nTIz8#08o0*n`~_RrgnPPtMvo!Z~PY>e&Kx zb~{7>Mkb=fqY@}D9z9m&KfZdeE2Dz+srl63#TWD28@@hqqp6E>k}OEKFW|-s1jORC)p|+8E_=Ib@ zv+?5ofPuRsynu0z%y^6g350XR?uM4tJ^5oF{euMJrUTvR-N|NYMyvgP-**gNI;bNd z0XrV`H{3mXX*~(e5PNHTrB2iJF$q;zcFXJht8?qOkno-p|3cf#QA_@8Ct*(B>RAz| z>*za1f>sC<0cz8`-tKwh^r<@}l+f*ojfW>{JMWWF)PyWqY|G`3~e*vHFf} N$C~Vi@+e=1_!n6Jg$@7! literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qset.h.F5113D4D2082A5F5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qset.h.F5113D4D2082A5F5.idx new file mode 100644 index 0000000000000000000000000000000000000000..2014c541ff141fa05d9c9d41f93ac2294c7fb9ec GIT binary patch literal 25076 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 UyLGA0&Hw4}(+Tk{6O*|A12D2Uod5s; literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qshareddata.h.81536A7340226224.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qshareddata.h.81536A7340226224.idx new file mode 100644 index 0000000000000000000000000000000000000000..1509b75723e79bb0f708902c29e31802dc5f8b4e GIT binary patch literal 17992 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 Z(5`J#d#)Xn0mqr$HXN6ver>P*`hPNACW`<7 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qshareddata_impl.h.573B6A3862491E90.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qshareddata_impl.h.573B6A3862491E90.idx new file mode 100644 index 0000000000000000000000000000000000000000..d1f4d7b7e2d13a6a1d2a0d8e63d85af67e044bb3 GIT binary patch literal 4606 zcmb_gdu&_P89%;tQrkJPZ|dXPN$NbD$Z4K#Qzva4Ck+XG2bYqx2?ScXwo_YN+sXB9 z(n7*B3Kbc2>$I-4rA6hT{Q;xeN(&Vd-9#TC3M~l4culCH+carxFoCi@#&@p!^&0*t zLHJ7ke82NM-}jyKz0R?3TeW=oHwA=rg;#BhN0gwR5MqT-N|9ryX2A=8=2zak(6?^c zwjn7NiYe0eo@h{xgl`Ti!CRBDgc6ZAH2Qnn%iK~lHC|U%d2i!PCd)9nI;}dCOr(^u zpJZUhBG=5!OnKc*76BSz-7{VQIHj&^#cthx1CwUMfAh)*;LVSg|XmDnYp7oV+PMhs38F zdqlwj@(FvQR3#{X^W4to_I;ij5QQRu>nrQ)RD$r%sn<@t`RSf8B~DO3p|ecrtk=GX zah8sh=7Wi{XE&Ys-Sk&UQLuoH;euhCN>E4Q@v~zGo$gUlm+qpw|WAp$e#UMXY zG~!Z;=7F)&I@0{a?q|}`E7zC17$+$I#mkl@+b%xyO4;9cX#&#ABsW=to_b{J8ddK*m2HuM`z-N z&qTonaL^bmPzl0;OT9|plb0{0QzKpwFJzn`912=r@7wjKE9uZm1yUj71YxMD!PE&8 zA&@;&`RpIjWEYX-)gn5dkSYc925Uo(= z@Htv>36vF^it})tlsTz0U*k$>Ne1UKx$-atD62A6#}w+ja!+&(u^CWY&Bh-uW@VWnhdVn+RZd9usEQRX-JDJB+WYw21M{bo`dFDjsHQfHXdQEX!Emezf2)e%npzX@W|ijbyYg`n~=JyM+4t;xb^Sl1 z?m+(YFFQj4f)RD5P`0mzHRmAOfvFfU3?D;5XR@1k`! z`P|xW&&b8X!oeZ|jt+=?P9lgdE=n%81~HgG1O&jM4aj4Li7_y+BA6`Mf;=BsR@)1) KFflT-G5`Ryo0D$< literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsharedpointer_impl.h.337721DAB3A5F08D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsharedpointer_impl.h.337721DAB3A5F08D.idx new file mode 100644 index 0000000000000000000000000000000000000000..4eadf7ea7ee1fe70d8d17c78c2ea34d0a872ffc1 GIT binary patch literal 47710 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsize.h.2FF56A05E027E54D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsize.h.2FF56A05E027E54D.idx new file mode 100644 index 0000000000000000000000000000000000000000..e59ba331ef26dd5cfa361dfad428711d8ca03361 GIT binary patch literal 18544 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

ugkLeVLwAg7Q!acqg?R;xr2 zhm~HQ!k9xgq${<06uyl{kqTpuxcOT<1$r%NmS2`XFTkSa_~rQX0u;4#2(xowvUBj! z97MEr3F>tXrF9LRbq#%W4gGWt<#Z0Mu&ff9^m-Z=W*Z5!R%XMPt;;{O1KBR*!;UDb zmESN0(WuE`%tB2Q>qR&`kvXy?&ay)i5_XM8Pt}Mk1I0L@TOlR|7;8Tn$sh z1uAkDg^JjAQB+ZkK*i4DQ1+t~wK%FcMxfG&(kPQ%(yu(9EfKxUh*wK7n{`f^~2)EQXkfUk%WHv%?-g-NEU3n6eJ1dAx| zQ(%1xd_~lC1z1*qkBFkK0A&UE3;ZHjUIZT&K}CI$LZIL;@J6s~1Rr5tZ3O#92oQKP zL~MpAj<6`|>tJ~ue3$_>Y=0dB1l|eGoe(PG9y=j^CnO5o4$gK672a+;#J58tLs|QD6J?%pyI^hUV>|i(~2_$DoroVH1SY*`EbEQS~;0mW{#6C_J z)_U;qMEJR9Njn{MyU@A|?ZQ&pg`vAJnlWoL(qekCAFDr`Q3J@Bb6PZ!r|8dEfUUCR zoBRIt^XiUTz2BM!)ENC<^GtvqosYH-xw0Wuq8F4nA zI_YJCOct9_J;<2XMbj9?g2pt=VJXM2?m>H;(Rwl@|ZAR@NV>V+c0IU}a z^6c6sq@OeUt>+>AJmm5w*o+!O?w|6f!OwKJJa&QtQ>*0QRdR~4SWjLg{CRVpFC#M8+nCjlsq!#vIe5B zUg5|UNUWKNzdV(VJhM^PNabBxH6v4y?7#G^TsFTb(v+T)%jTEOD1Q`vx8um|cr!aA z97rM-Gb$jBxmd;0+B|iS#%&J5QGcV_(P&`Nrrp*m9C<#QQTE7~D_O`3ybQsY&0gST zh`wz00xv_}WwRG}83tZ9dx4kXhRbFz@G^|K+}R6^o{h0)FEC^th6%549!Af@Sb>`` zqzS`>*Vly6O;oSX)%g^TayDbA*$d2Ggt@{C)ay2RZ#6G4Z5w8=WvO|A1GZx!6J9Ib z8Mp&gvlr;tg@LTgG%wKFj=p9u(7FeG*xT<42}&+LrW|r;1m!c6K?mw6gZwDjrNLg42HIA@FAq{~4r+ojm~&Cm>GP_9r3W zB!u#5s1>OOoPtnx4m6x}3VI9tImCYsDPku+hl0;xu)t>^{tTpuoj3#eXJC-PXCdM& z#EHZ5ONjUq;#f~Bly?Ze0O2COZ~@XUK(4^wLGX7FF5(N{LHc))EAaOa{5^!TTGfi` zd@q7S#20>q^dBLYPb-BEt3f|PslX3m+C!KlG{GE9pM$yHVr8mO9y|w!3j8o;JdAmq z@YB-z>5pJ8AG%tcG2>Cp+=2lu7|NQB zil{NAMFifp_?I~luTVz5bR`bwsD>6%30#L^EP@IdF9n-$Fk3SUog8^>Sinb#rYRlU zFhpp|&Mvp6IUU&dW_<^p?_h+` ztotxzA4Uqzx*tRKVtt=A45Eb-I;%Es{Z>9Zs*uPWij-hbBHX4@$(L2 z2KJoE>h%1q!?=CJt?%3NyOBn<7=;h47z-y?4C{#f`Dg0iITJJf!!O_1^ZGl#kR@Jj zFOOhvNjr4?UjvtjL|lf%%aA1$^%Y3GV#c%4Z#ISr#XTF7W@EO%i_pFZBZQ)QNcMk7 zb}^%{LMK8Rzd`c&eyiT4K6w!Us$J^jvC mk_wF}=%OZ0Y#7jQ{{&~Z!T|&G3#0*}DPMdYD83emum2CkWnJ?C literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsizepolicy.h.A573A7E48BFD1C50.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsizepolicy.h.A573A7E48BFD1C50.idx new file mode 100644 index 0000000000000000000000000000000000000000..a341ef2c7a4c0dcda59ce40f75689a7c95904d0c GIT binary patch literal 10232 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 P{|fMfkbLnoSN!}x&E!7$ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qslider.h.5E2CDDA19C546BCC.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qslider.h.5E2CDDA19C546BCC.idx new file mode 100644 index 0000000000000000000000000000000000000000..c8cbd1bea648665056baf7b967533a340f60ecee GIT binary patch literal 3390 zcmb_ddvH@_7XR+eZJQe|`EDO+nm(Xy8d_Rt$~J8+ot8f2QCp!j*5}qXO)u@$q=DQ^ zd;qRER^_P{XOyu5c3ELpEwp0M#exWw;h~O>4^|yPWnc$gcG+cDoLOMcz3E9G|E`(I zmwe}(@AsYWobx-Uv39|N;;DqxwAViDmsAf&2#JTUq6XzM7XE0T#eq9y?}G|i>h{U) zQV@UV&K>)w88ieGS(O7_C~XMJA&)AN2|69Asx1%-%av-$7kEfFQK|!KryDL%!rOXj znHv7rD0g(K#5*^u(p@>~L*@L+39wQ~>Qc!v*(c3)I-Q*XzvT3+R8*;}(-RCzKA&@` z>MYK`CBMMg;q|r@yPR^D*SE4=0{LBXdxxYd&J~_Ec(uo?D*7w)JO59(UkOHiDC}Q{ zFVN=kfmd>uth&`leA1HTdbIr@@UQf{SgA;=7S`G>RSJeYJ~FzGWLCjT)bUo@CSvj!RtZra@wZtGggjMt_|8B6 z+?$-pvIauS%=+CJ4DQP)d@ubtlUpIMYJaJS89qxwR4K;i_3Ms2&V?V}rKZ_XB3 z8{VF6%8o<$$LoH#?cQryE-RagY6s_tLUqOud6|{xhi?(tBvj|}xk;!_I$+*>(%)St zvWciJj1sWA|Hzd+PVZ z-#j6*$#_2Bm>QJQz$fPD|96F@r-p`qwHU>v@rl!wYguIX1lDl{XLV+V_d~8YLz;pJGgj z)t9mJBq%LYevBq0t#aR*4MX=aj6kbMl^9MHA-U#FwFQ6r(7`T zIGWC-n_7hIqWuS(`_8R@KV#%vRt%gq5mPLl&9^sPGG}(jvjR=v63i$TsD-mccF0S{ zr1KH;iF{;uorfq!9)eioABvHGAl7(?V&olQYoxxSP#o z^Jpc|94?2)I3pDqhH4bVvq(XJ)ToDIThiO6jXxEZGAym&Dl8~A7u|mS(%vttL9B%l z19R*4pRT=_QCS0FEKDezj=aTRz}9$+AkXaH+3Z>rTmsfwW)KAF%<^FxkIFgS0rV%f zI(hBRt*tHa3hgXHUYNlruHWRACb^3Z036VWkJbmOE|{I~KO17grLnJh_qp1GhCkf1 z$#s8I|66MSWIQ&u2>{XB1A-iLUtK!TdF{zbo|L}R^PQo!r5mudz@gvROaMe{A_y}4 z#B&!`$X{)S%w<|KQ?W<{YX6PB6l-IMo5_`(U;jMBtDGy3!+3qS=f}(U>^ik|^cCoR z{15W zt}WMrbtBL`E>FZ5q0OZF7^0U;KY90TA6!>J3oO`MS{6RK{!sg+-y3*JqiGU4C(x3N zl0s~M;CO0T{;73uAMQPA`)%t#-&@{vmN<@D<@u^nO=VNO9YEHg*)-6KaiSngoV_Md{rm7R+kw5}}X! z|J?D#_XFSxXXGNC=HWG0S0AljFgPiR_;@H6t>>d>Z38`ToWAtZ@TfJC0Y?E?Ya;-y zaRjg?z4hbk1)7qOG7bAHjsZBUwSPPt^L(~@|M1hNCY3Q}4y?6lfYvw-;3jPpjNO!G zNt=#Ia8$e~v|i8td{T}u`s_s3g{g^3?B0fnv=19$`EphocNqr_C{Z9X3{og*Lb_7Ox*% zROIZfy9gj+j#z@?rjG;vvKh}@2J!gLiD>|AZN?#XPw&QW+6sTU3D#N{L1w_r^Le(y zPThD{Xy$?~sSG-Cy>HdA+!-S!4E9`Zj;kWA?&}bP4{tsB?4r$0Evp#Jq4nk0ysx(m z9$|1^$X{%*{Ui492?pbF!*l%2o1HsOGZ-#>8^Ko{TD)#y@aTgV8JsRe33?T~<}V#M WRnz!V|E`6sXeN=VOh{yY67oM^3jC%3 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qspan.h.068D12705FAECB9E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qspan.h.068D12705FAECB9E.idx new file mode 100644 index 0000000000000000000000000000000000000000..893df74ab5fb2afc8e5920bcacf269206054bd1a GIT binary patch literal 27204 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qspinbox.h.EB85D3B1F4510764.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qspinbox.h.EB85D3B1F4510764.idx new file mode 100644 index 0000000000000000000000000000000000000000..638aa461ba373133675435521794d35e7438457d GIT binary patch literal 6158 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstackedwidget.h.C50535AFF6636FF9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstackedwidget.h.C50535AFF6636FF9.idx new file mode 100644 index 0000000000000000000000000000000000000000..c05f9b599660c6616ce7357cf7e655a002187cc9 GIT binary patch literal 2514 zcmbtWZA?>F7(VxKftGXIUMSw$c9oU_3X`@Vn4wNL$Q)=86%u01)Y4v{+Lq7{P*LMY zK!YC}_+uK0m<4rlY%txJY_hpIaq5h2Zpor<%Es8D(Zpq&S(fR}?d@B&f4vDU=Xu`q zp7-lHw@WML&%dBVsLWll)+dIXEJ8?2|AL`_XOyA;NY9e$kkhqBbk};^4Pq#6IcruN zusGmpafU?Xbi)Q$Q`jFuu5chA`a@-nPJe^whGm7{Ev|({^Z>Di+M#-nSDaW-Q#z8!)}q{vWK9(xjx|ZiMGaP^b(X4 zZ;d4W%-%w>pJ0Qxsm|%8?mSZRRrT~cCjWBa)8W_p;%YM>1YLpsn$ ziZeQXxc;z}$EiT)D0B2c_iX!bhi3J%P02VxE(9W~B$W|SUC@Uii9+v>Wt|Jvn|Z8- z{dvkf0rrP0r`@UVS=7N}70_mdSp)RAVa1uz1N-*yI2q_EiYc++=FZ+<)R8;zQ!=J{ zBO0A1JM!`P^mW;!^~HU@F&^`{0^5l2kU8`}~mgyQ}jK*235^N+OLLSl{YA zZ5h3ll}wLRB4sKZ2~)_VM5Yg{ZPvxN)tT*D%n>cCRf9E0(%JObsO*dZHd~Q&n;TEt3lK_T+rg2Gw4DdXy_4@=+ znxIJ>F|j5By5fjgFq9lf|e zT0ZEX_7_ja!nyh$X_S*R0$3MR4Ltm$#R*$}!;Ff^9 zlQvnpGr5pbNNz5V#o$T?<>c4B8mz%7(%6iA$GV#~FBCqhP=lv`UU*8mDiH!zrUR Q8(-ZJ#9RtWfm0CrA6c2H82|tP literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstring.h.BAD2817AB9DD923D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstring.h.BAD2817AB9DD923D.idx new file mode 100644 index 0000000000000000000000000000000000000000..6c408d780274845ffc1744a8e1350470869b61f2 GIT binary patch literal 83052 zcmb?^2V4|Mv-rf_ota%&GAu|AMlk1`F=x-yJ4Ha{L{LCIJw0>IIbc@I5d)Y|G3S6e z=bY1-{Z~(K?d+c4z4!jV`@Z+iVry!uyQ{0KtE;Gi!q|Slism1#j zu+r6xNs9q=d`!2%a4WHm?0+Kq8%G;ygP630q++z7RtfRF1G~qhrNyTtS$U@>^o?(y z7D#`Vu-2xVWV8Ers|!0@!ck^D

p1* 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%0D^IOnu=w`o0sG(M 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≤&EQ%yMwqzOEU=nI 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 TMzpUn?dzcSHLQId(!Tx!)2_m> literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringbuilder.h.1575CA4BEECE6BB2.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringbuilder.h.1575CA4BEECE6BB2.idx new file mode 100644 index 0000000000000000000000000000000000000000..fe9ee7577730f56ffee7d808b1229ad175ffae07 GIT binary patch literal 20160 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringconverter_base.h.EE8D95078AE5BAF7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringconverter_base.h.EE8D95078AE5BAF7.idx new file mode 100644 index 0000000000000000000000000000000000000000..eb24a900cd591b783ad3e5c754f15624d6f5208f GIT binary patch literal 7936 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 JW;OA$fj{q@M?nAp literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringlist.h.B508805E79550159.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringlist.h.B508805E79550159.idx new file mode 100644 index 0000000000000000000000000000000000000000..cfb250c2796cec364a5f087eaaa2375c975e265b GIT binary patch literal 10320 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 z z>j4DEBeQ6O@#Y8jQVzx9#=tXMA0BVD@x!wYuYLZ``4j)q)9ci!K~G#+kae<+FVn^7;G+Tg z58QiVSU_Su%lQk)7<8yah{^_UCmtBi4id40m=UOmKmLbxLEGn_Y^78fi3VMfBGAeJ zcr$FnunaxVg5O5iQk3sjh_K`r{E01Ng~V(hMfnX@sRSH*Stv64eysV zizCMEyYeUA`#u?dpNv60M7s-HD#xc)4yWm$({vo#8~$=P{zQ}2m-&6#@ji{mGD-oa zE#o=J2wzt~kOSAKH28dmsmpO{?7`pHJbaC79AYS$qJMqD=~las4|L$bquFYIUc%nL z<<^e6nEuO`t$O1#4<;rDxp86`MnQ+lbTR8wjSDu&2XyQlV2OT#R~^3cGDtk6=Jhp`Nijffi2RV|G)jZDFpmdJ`s zMJX6%64~hR(Xnc&EUYXBkDbUIVU8GlGhNNubmQtzE6=skTa3lSa(Nsc*M%W?P-h-~ zM=5kaOO}L|8ZWexGa4#`FH6!U1t1%dCHp74O^a3v)2lR33|)K#jD;7Q&p136g=Ti1yArK<@26r8Zs{ntbPT;(An0D~QOD1VJ?iLru}2-d8=rN1uHTIFH^C9(Axg9!q7@E;4R0p# zctjC-2Q865+CeROf6SDU-^PFXi#I^u(X-s2xIigqRsnv|18)e+oI!ZcavB{J{%Lz_W+1Z2^Ow?h1_TV3a{XF9(+* zpeWoGC<}K53J>va0dZ}21p?ph3Pieb2?FjJF2P-a?@o6GK0pL~c%T{zs37hN)Hrtq qs+dsYwAJ+D^0uMS1!1!Kla0Q6A?4M;8BJcc$t8Bdu2M?WpZ^bTq(R*P literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringview.h.483947F23EF16192.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringview.h.483947F23EF16192.idx new file mode 100644 index 0000000000000000000000000000000000000000..a74efc74adcea370473c3757a3bc4f6f2bf545a4 GIT binary patch literal 26472 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 JKa%hp?W*eP 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qswap.h.5AB090D7B04A2E11.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qswap.h.5AB090D7B04A2E11.idx new file mode 100644 index 0000000000000000000000000000000000000000..0a22550cae103f540b15a2f21862ccb9e7258fc9 GIT binary patch literal 1028 zcmWIYbaVT|%)sEB;#rZKT9U}Zz`!63#Kk2=nOhiv3=q&zsW!9DGy)5Q)q@1VN;Mght;!hEGILU`^!4>K z@^e%56HALrQu8tri;7Zna`XdB^v(1v^bGXVlau4kO!PDJl5 zNoG!FNhL!;X;G>|a(-?B(3`p?nYpP7xtT!Abn^>s){LB=F;>z44 zCt$QiAN6kev-QG!9tIu;1~wTn8AUL`z{$eI#mmab##)s2hw1Nz)O9=z+&~4w{K6t& zf`OBnkpZG0HLZ9aFcru;Y^m+u7R|`W!=}ujEC5avK;m9qi1d>~vCKeWF@7;&m~qE5 z)OWv3KFNtDT=Sfn;jmww8k%svE+z2*Os#2^cOT?VCF~!*;8DUT&xdbaDWI1V2g>HfB)~g2j$G{ P9GncCFkuD;b_5duXf-=O literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsysinfo.h.3FC08E4B53A487DA.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsysinfo.h.3FC08E4B53A487DA.idx new file mode 100644 index 0000000000000000000000000000000000000000..46fb3b77f4aa7678a265011171fcae6e3fc83127 GIT binary patch literal 2110 zcmbuBe`p(J7{}jSmMqC#m*%-N%}i5b(lOK0TtnJY!eD93s@3V%RVP@cq?fntVRDz= zU9=JB{umCc;F!pCt`1!p%*nbbx_?C{f-u-$`iDP2%0N^m4#rS6#rM7BNoD@IgS>t3 z`SE?;=ef_N**7^cG3+B`yfnE~p>}Z-Aw*^$%QiJrU>kmoY4f}El2+8oSly<3%n~(8 z)395!?J{lNOikCVNqx>BxXI`Lv%M=QpP$xVpcZMYPa0;4@5roS*iY!%VvSCg$ZSn3 zmqur`#%8=)8#UDh&8DhdGbvH?J%#B4)++2OG%Nhi-YB8gOq1&N-70fhndTKmSuiS8 zDb_5T>I+2{SuQJ6wlbU<$qXp-s`||EprYw&xmKdgK5m#)S*)6dN-c{Wo$@njhMrj< z_n>FhEsc%u-b8HG(C4)IN>Mcp>z<`dN|&mJX>+A#sj1WQ+tGdVMA!Fqp?V-lHnHruFCKQ5jp{phAHTfg;sX^B zqL@Dz8Qg~XcV0agP!i@62ok#cdc9sqKU)Dx$J-fXC+n zG$U=y%u&MuAY(4S!xk1twwReSg=S=miEyA0k>&0q2X3ve#@R`d(d2e4iGVQ?4i<`F z78BuAq4~ROdTiCTKE*`B-Z1})b}r2d0(=1w{-C4i(igS zd>rsY$Qx?g2uh1-z==xGEA|4iEJ2^x2iT_s{bD~L$P#443?M2JD53&Lu>=F+0AR-w zWW_8XJrd-^9AJM~iS^0f7VPurm3N;zdwKK=)@LG`=)tpMZ5GX69*oAa%*kM2x0%_iu}ehRZHQU)`$oR@%zRFv)NTqUHSB^TMmVtp9f9Hzkee&9{>OV literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsystemdetection.h.D0C11743BDEEAFAA.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsystemdetection.h.D0C11743BDEEAFAA.idx new file mode 100644 index 0000000000000000000000000000000000000000..1bd4bcbfc08e2bb2df2dfe0e3f88e3440d43dbb7 GIT binary patch literal 444 zcmWIYbaUIn$iU#7;#rZKT9U}Zz`!63#Kk2=nL$7r4AL@lQmyp$^)vEwQ}q)|i%U}T zG7^i5Qgd?j155PH^eprY^wX1*fsS;?DU+srrS*l|a?GDXAr?$t9Wj zd3qTP#g(~9AXAG{(~4z*HXk_`xa8V{rJRghjLBTdA`lya1BItBa!p|b zISLFW)kGJyaGnB5++pOn!>A3DnE!rSn*p1t2T+>{C3Mco?}j zxTIjhT#Vct+;HAju{A%eF1-l^>i){e^_5W-rp$xAX^YaQkR+hQYeufuj6yI8Q{}sN z!=E`903~iPa@=6lg-PhYit`V>p5F?TxXZ|Kmr)NUAzS2SE8R738BpRTBgaif1DM48 u=R#&v_?~|UO59@PxW%XglK_TNP9lg?T$EhQ4Pr2EPFT?RVNLBB1_l7K>T50l literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtabbar.h.423B200A1E3875C8.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtabbar.h.423B200A1E3875C8.idx new file mode 100644 index 0000000000000000000000000000000000000000..04b6f2fdaaf6a1df2117182b47309033dd9a67de GIT binary patch literal 9888 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 Nc%g&oNg>|z`ag@DBi{f3 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtabwidget.h.F6EE9365DCB13255.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtabwidget.h.F6EE9365DCB13255.idx new file mode 100644 index 0000000000000000000000000000000000000000..5cdc9c78c64affdc4eab122ce2698ac24a692086 GIT binary patch literal 8004 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 OTnrZnGsngBz5W}?xI5JV literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtaggedpointer.h.2F4E30F23592A691.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtaggedpointer.h.2F4E30F23592A691.idx new file mode 100644 index 0000000000000000000000000000000000000000..087c459f001396fd05593000c2296215c774159e GIT binary patch literal 7714 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 Cs^_r) literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtclasshelpermacros.h.BC1F21307C1E8939.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtclasshelpermacros.h.BC1F21307C1E8939.idx new file mode 100644 index 0000000000000000000000000000000000000000..6e951aa00165a74383f25c4b264689e06ea8d53f GIT binary patch literal 10256 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtconfiginclude.h.B88C50035F6000FF.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtconfiginclude.h.B88C50035F6000FF.idx new file mode 100644 index 0000000000000000000000000000000000000000..b650eb7b442ef14ba2fdf3026fd39901e50bb2c6 GIT binary patch literal 348 zcmWIYbaM+~WMFVk@vO*AElFfyU|fsS;?DU+srrS<`FUxX>3SIq6qr#0 zF$8Kf#bycU;cP+Xat1oC51YFe>4kbci0>h`l>(kDhPCKe7BNwD`J@;Qkhy0|F0 dSQ*4%1`!azq+1txD8AxtFB2m(128OM002+vVkZCq literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtconfigmacros.h.7614BFE7533C7B11.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtconfigmacros.h.7614BFE7533C7B11.idx new file mode 100644 index 0000000000000000000000000000000000000000..d63c9bd75fc03dea058794e763b9f9fbb4248ae1 GIT binary patch literal 986 zcmWIYbaT7J%)sEB;#rZKT9U}Zz`!63#Kk2=nNf^D1_-2O=A>Hb>+5Ia=cei>mKK+! z=4B)n6{Y6n=m(bQo9S8T8R(}cC&!za=x637=aiz#4i&FIqOOo^R(lXPb!g?80 zFe^7PxhTJwLZebr3yM;c6H7Al^HNgNGV?M)EJ_V6OD!q}8k3xnnw*VnR%vk&JYW)w zi&KkAfUYmD%uNCXZc%DlF*6ebgRH}r+U{-9jEr1N>7413ASn=d&~-rZ*aH=Ips+KC zGh8_OsqUr6S42gC!daYIiV(F747N_c?kv7gCJ7W?$;i2qQ646-=)i*%!}rx1K#6S5 zY$cd5lW?|b`qMNmps+iayEsf(x3I4!e*Hx~pzs<-&NYm(Fo{w-Ny(N%Wk;Yy7)O{4 zOt>}ZV@2D>U(P_`D9$Lj@MCWEzdh5HikZ2X)OplJVXAqUj9rcW5Ij>IQ&Sjk-R+*& zy?d_J0!<3%2#1@bwD6;)BP&kt_6CRYhNB2!V(ZqTUD4fcf z3J-YA1jo7TEd39G!YQ07aF@(H{VPr+KJ^Jun1zEy0%mrhuYtzahM%8+!a-a?LNMX^ zHsY%;{QLMHD4fBWp$roSriGkD5U02(x!4-S0Om{>V1+Rl7(kg63Yc8&xi(~9HCfHV N$jrjZ0L!sJSpa^^^bi05 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtcore-config.h.021DBA4935D10D22.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtcore-config.h.021DBA4935D10D22.idx new file mode 100644 index 0000000000000000000000000000000000000000..d83e9c81734c86e2419e80006bd1d1e65849227c GIT binary patch literal 1146 zcmX}rdq`7Z6aer$Tkc?UtQuzXJ)OF;U0ZXhnAs-FtkkBEl&0%8b+$*{P1&q}lIVdF zL>i(Y^e!#YUaMJIWJD2)X#J5!(Ze1qiwaD#?5w!oh0FKx<8aRT&Ude2jb6|4DN46( zjmv6s8gWa_$JgOx&H1?gdn(KpQ#wu4Rd%b1Hr6$}Wla_fy}?Oql&Q*Ox{_ha zG-}#xV=Oh>Oz1j0Yod2L8C;eyc3XwHQdxz0-PW!CoUEzB@q89V#dqve%wBq(&kN$k zL7e=5J&N)j`LcUQ!#4qP0Tje?to2k@%U&~LWEse$9A9qlF4b)ejX=(X%t($~bxLMN z&PF0jK`P_;t5C#>ZW)&l+LTWr0UEl1=vG!OuBdbB3!0~ALw>I~*WIJ*aB#}<~_cnF3eZT1E z00Pa#u4k?8gG$8&u}L6?xDA)0jJeQ%ud zOo;rP2YKYHDxOk+#Qy6Vat`E>!Ab+|V{VBnkfI Z7Nh^F94zCQZeme(Y7xl5 z;>z44P~a7%rWJPq>4WF%cjPX5!^6nM%)-GU4w3=^x!TKiPQfePfWmrQdh!rK28LTt z@}w6tJ_-a1^YQRW!h|1ltN-npu2js(!_39QB?=S1Aa`latlVQ~fvUy1#N}YZdqdy) zaq>NR2o#p!l2C>T10yaG#4avMF4hMzm?v9S91<{W+{Vnv#KHiJb)W<=VZZ<=VL$-@ Di42*9 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtdeprecationdefinitions.h.AC8F81BB6635D445.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtdeprecationdefinitions.h.AC8F81BB6635D445.idx new file mode 100644 index 0000000000000000000000000000000000000000..2cc1a68467de5310f4e10ee35961bc879969cef7 GIT binary patch literal 250 zcmWIYbaVT}z`)>~;#rZKT9U{DWD5gvaY<2T6p#jkw9K4TD}85@4in~KA&P$Kb&5~W2?DW{6|cpa}Ip8YMEncM!WbI$J0=li|)H^1M#znPuL zkm18yxC=sXT*yp|Y&TIs5Zd6!X1AIr5#biy8t?wFe z28O`AqB@keO>ruo3o^pJGxVz&O; z08c{be+Oajx{f2p%x#t@d!w5R@Fq^X3epARxPAnNezT?+N3hCMZO3(jFmhVUQ)`MA z2_Ei-5E|n3CIWuB8zN`~M^QA2BNH`oWTs}0QfVqj88m~Vxj^Rv$Js!$dCmix$8#aj zLY^H!9XvaMI(gm+bSKZ1Kr4B!23oCg=b$}VIp4(qxEpGSP(wVF;(a%SrYwG$37|LZ z0=5f$6hqk}LK-(lmnE#)+rc-OHnK9{^tQs|y;q#jVT7%~w!-^Lgob_x2DQ6#&1K{h zmQT7VMr3`>dgh$f0*&RsmTNQ852n1-ADYk-jZ$ExS~BggKXt4-Th|Va5@03TjGLp^ z-qIQRd!n&~uqE0x@?HrE>hb%C9fOS>EH0KEh4HGT;6A#lI&SIlywXe3YA4Z6BpwT z*c3Iok}k?`^H*+%dliN|eFJSVXk@ZXbs-B(vx_~>{^pYB5H?3^%-5~j`lfz0As!8H zy|<`jbG~@#nC}minNdDO^oNN0a-4oCl$Hu8e5B_8QBGh9YLX|nhmIFagFi<(l0~YuR*pZjvNT}&0+gd! zv??e5;#of1*&!F@B49<@UO)XQ|DL>T$k%Ah12#|Vj?cs!!5*PKi_q9X*bbuR(|2sy zt3UID*Wu%+mC&lSvIs-n9+d39R=xqp7Z6sUEn4RRO#@aOd9e`;(U?C)so1GZ0ls(i6@VEKdeqgTD9ppXpCZ`)D{a5iM=zi;Pw-g9|3!$1^RJS z(9pOxfzQx50lE`fi-powS(ScuFVNUX*hZ~xd>1ykDzaH6+X&Z*-u3nNXnZkp0lx7l dhnsRDym>8ZB*U@Uxfk5`EPK(E>GbYy!au3Jq!IuC literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtenvironmentvariables.h.9AB3237984442820.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtenvironmentvariables.h.9AB3237984442820.idx new file mode 100644 index 0000000000000000000000000000000000000000..fca66fe5dde2d7c43540d5d78b7c6fc19f44ffb1 GIT binary patch literal 1800 zcmbtUTWAwm82+b?ZR1WanK8{&6MKqPwA7A@h;-RnTZ}|eX#)ijl*#0z9h}UhXU?<@ zwfL~GC=1J?i_609!md(-rzZ^Gb z+a~I>PonRT<(g)RlI56R$Zrc&Lqb>qc*>v;_6}!b^XMyovLB!rklqMAGHZqrzy*;U`!S@o!HL6)C#2t z#&ac`(3L9Xafx7EqlRr2HF6S@l?q~O#vn`#Ta@jgq2)~MNg5Uf3*$U8DAF86XKhq) zE!~Ujpd8DaYlLPDpen`aHs#sK^LQo8B~BI=c4<5!P}-QckXg=&FW5;p2x3rE80S z|0F^uC-lfYDny$EkXt>4pMSmZxDWp&!a7b!$*E*DhkNf&pZ%lb#i9sZoDlDdBcIUn z4O7T`n&1E5i6eJJNN_^8+&xfLczb_GdE(il|7)sHIu%w$b0hdw5L|GS27uJ?^@SgA z91{dl+5j6mLbXbpglN#75N|!*JHB-O!H}?8inK%!XRlv)I5d*IoMs|jkuIJy@K!Pr zzl9W1zb3jwOJdZ4FbT|T(y zpDW)lW*eeXtSMHhm8H=ZS9s6QANc+1$dlMHMv|JOHP!5r+mb_k_Wa8#^JgEj_~aSv zPdtRTANlvw+jFCTvi7t?yTm2=8Zfp${t)MhFxVe@2+u9NJ9T>`y%dQ`a+6%CiFK_l z5$By2C8bS?SB5VsY2^^N_|7n0e^)|X?q;yRAtB8EAT{sk5ZzI|L#15+(r-7cG}SZ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextcursor.h.4060323F9EBA1B44.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextcursor.h.4060323F9EBA1B44.idx new file mode 100644 index 0000000000000000000000000000000000000000..316c6bee80dee6ef2a7b3c0c6a972c99d0eda73d GIT binary patch literal 11394 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 a!8876OQ`?2yfI_*g>fcptl7;syZ;82-_(%+ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextdocument.h.783DC05C8FCFFD61.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextdocument.h.783DC05C8FCFFD61.idx new file mode 100644 index 0000000000000000000000000000000000000000..09c0991ac06baeb0b2d3a3a55e926faee6b0fe59 GIT binary patch literal 16548 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextedit.h.F04246AE77AB7AA4.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextedit.h.F04246AE77AB7AA4.idx new file mode 100644 index 0000000000000000000000000000000000000000..d2d3f3cff305b534eb78e52bd428dfae0e38763f GIT binary patch literal 16310 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 B>VyCQ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextformat.h.3DCC5A5127B71974.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextformat.h.3DCC5A5127B71974.idx new file mode 100644 index 0000000000000000000000000000000000000000..eed88bb7a412d61d751a605c72b665d7fbefde35 GIT binary patch literal 66292 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 Ml_jaDf$Goy1#~eelmGw# literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtgui-config.h.EDE12B3EBA6D364F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtgui-config.h.EDE12B3EBA6D364F.idx new file mode 100644 index 0000000000000000000000000000000000000000..e4b42d31574b91564e842e5c41e7ae122f2b1500 GIT binary patch literal 1442 zcmX}sZA?>V6bJBI26%>rA*;|*s0hW@LR-eVLRdo(w3engthBy_Tw3}IjjB%2D%1a*wP>9!E(*k)vcaYR3CPNp%ssDX`zDcIVXZ4tL~x7?>m)8?0x|9PHs zZfmU7YKM|2s>WX1(dGzR6Df*%9^ZkW-(82F|Gk`UkE24VRJwd^4y82|2s*qjtKaYN zc$8a%O0}X~QKD?I*_zZUrQ2)sgzOIV%^|n4J=hX*%WXcd)7_$QVd}oNW+u_^a0URo zPOsNIcZ$d3aZ)&3;O73{jiTnq8(KU5DiR`>LaBh|;iU_GSGQHpyW8#_JjS7sDWK$Rw&l{A>FT7g9XSP3NOkFr zw?A2Nd)b351!*x`9j((=6=@0r$m?KTAI|mh{BLXy5(u{mA7|PM(v=o=vH?`o%-Y)le;FLt0|=QdWP% z05T7F0(lqgA|W-u z@XeChr(YuHLq4hIz7{?_x%H3p$TE*$?A)`5;J?V(EExxTCCA~Fp$sTLIphjigPSCGwMmaw;sQ1!9v@4kEuxd9pq zSiX~bDRpjxQiLLL*`O=lrW#zaM#kYybmUgWRi$ch8xYke%Qp z*?*46qP|ZT7oYYO<7oYoXm6W3X E1)h8_pa1{> literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtguiexports.h.0485051AB44B4703.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtguiexports.h.0485051AB44B4703.idx new file mode 100644 index 0000000000000000000000000000000000000000..75168e7f3503e8a2599e2569993c749273e5ce98 GIT binary patch literal 562 zcmWIYbaT^UVqkDi@vO*AElFfyU|K;rhZ{bdTC~A zML~X13CNt{%G@MS&=sYo6?Xw?y`LK^%LG^JF>Gy>XwH}wA z98CDcvbA^W9rnEg3QKTFD8Yn*(Uu5e7Z)WL>w_39zms+tEYCfn%FM{b%m9mXpad{k LzyLFh!N33j$48mE literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtguiglobal.h.AD776BD26C164B7A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtguiglobal.h.AD776BD26C164B7A.idx new file mode 100644 index 0000000000000000000000000000000000000000..e16295254be9198260cfe91fa9ff512cb9c4d950 GIT binary patch literal 424 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtmetamacros.h.2880FA8BC22BF523.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtmetamacros.h.2880FA8BC22BF523.idx new file mode 100644 index 0000000000000000000000000000000000000000..4376474043f73520483528201c81c52e3134c165 GIT binary patch literal 26506 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtransform.h.294620FAF417F13A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtransform.h.294620FAF417F13A.idx new file mode 100644 index 0000000000000000000000000000000000000000..b58cac5d1048abe581023344d11bf66e1ccb42f0 GIT binary patch literal 15696 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreeview.h.80E03EC4BEA50965.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreeview.h.80E03EC4BEA50965.idx new file mode 100644 index 0000000000000000000000000000000000000000..7f6072d29795b564f58926f4a75fc72722c446c0 GIT binary patch literal 11028 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreewidget.h.4EA5F2D3F587C36B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreewidget.h.4EA5F2D3F587C36B.idx new file mode 100644 index 0000000000000000000000000000000000000000..a7948eb9bc41e3a23eb1c73ab5610c02d5739110 GIT binary patch literal 19340 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 bzFbhh>&=t%7SwH-mfj*&*FvjG)n5M(P0YFu literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreewidgetitemiterator.h.266475725033105A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreewidgetitemiterator.h.266475725033105A.idx new file mode 100644 index 0000000000000000000000000000000000000000..98578a6a8a999732590731f30511483c325bad15 GIT binary patch literal 4960 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 Px(fsS;?DU+srrQ_$@zI{nd!NS$wm3a zdKnCq7*&*7oL^d$oC-9Cp|~ zIVai=PX`LKaIlELgfn%xXSaD(o(BpGa0p1jgn_2zB!W1_MajirGnfobXLX&ueP<^l KBLgs$U;qGR_EJ&+ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qttranslation.h.4BDC706964090D6F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qttranslation.h.4BDC706964090D6F.idx new file mode 100644 index 0000000000000000000000000000000000000000..ec39dbd429e379c8b5d43d0de1d23ce9e442dbf8 GIT binary patch literal 1020 zcmbu7-%Aux6vyxAy51FCY**LT-L>nsqE_y>B^pbXw6UN;W$Rl(j5Bw32It4_otae1 zKOlM#66r1ai4u_!QBY4ozE+ey6oHk31VJy_V{}$`7JBx=T+aR6@A-AloFC3+H>(lK zNW)V)wFM7CCMrm~=uB6hUX;?N96@ifhsx;G$y8b7Jh-%oxAcLeQ)s0S3 zSv9Bxj1)zaQK3-KR8g>1(@2ViLfx1`$vCxb%7`K8loZFvZnR% zb{O%#pY!6};%Y}d@@ut$Fw(Vnfenu0OxParL+pbvBmO z$k(^L(CS(CaCJC=6HP7-dk;olMLuG{K^$yx@t(mE-$w337;qDA3cGmZ!Ql4R8Pl07>-3<^_O)ca*z8l3SGugyuroa)4_qaX2Tq)TX4%h7pKlH{oS~c zxdm!J@>dGHmi@DKrv3C1s6#l^>Z+$^Hm|-pnSEO2!;Rj?N^HpFk2kwb#Zl6KQOdmo z-wxana(&OOefoW3^~pNmD2_&44Aaqs(!pY)wZCN4mbRURS6<)V8d!WeQRS^gUY8>D E57V{>S^xk5 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qttypetraits.h.313748CE23FB6E36.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qttypetraits.h.313748CE23FB6E36.idx new file mode 100644 index 0000000000000000000000000000000000000000..7ba7e131e95701bcdd1a991fec13c7f8665372bb GIT binary patch literal 10614 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 X#X$_FJ`3NNnew_z7#SIWAqxWl;kkwe literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgets-config.h.76997689C7F8F505.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgets-config.h.76997689C7F8F505.idx new file mode 100644 index 0000000000000000000000000000000000000000..cf9339d1c612ae1ee5679110d0c1f2dd1e4f56cd GIT binary patch literal 1834 zcmYM#3rtgI6ae6RmB-J5^iC~=8#c9BpxlMc!A=6DJuybebp-I!5@0^_T|L4E=RuLB) zE3{>p=)Ab?MQT&F6~izt_$@XWbt(A!|3{-MR7Z%#Vy&S_EzT|}HmUX6Y@<z%U7F<#oJ6}udjl04SJ0(KSYbw%ZqZj%0{)O zxXy-Q-dL_M^vQpAG$nQ$IV1-R?1Y_5cz*fEq0qRxCXPM8!-Ho@ z%Q4^6wM!k5Wgzq6xqa^u#kS?)&d3oE;l*=BYL1|@_eWRcc`%QPoccS9`R7Q28}cUD zw3N?2S@z81@u-PoAqc66NtrOPWpJ2dJ?Mpe_9QI3;Qjdxj-w#To#%$`n>VMOoP3dY zv9OD!>ME7O&eRy`hk;Z`CAKuB9h`6q79snCKW#tjq2HK$qD=^LBMXglW!fY;=Bm*s zF$Nf5Xo@p$>F-=VSt~(a4XZu*)qv9Do4D-qP-Itd_2#)b&1s)mb~pmr9o#9qMT z{Vde-i+@T2aw(Kj%f9QeBbR2K<;eD6PuU$~DK264<|O2L7V255zG}o)_wR*i1qPI$ zq%zSr4r()>p4^D+25xSA)AZ!f@hyI*Hz8L-C2c?bMyIa-@stkP3aqHeJzG1^yy zkQc!sI-er%;ONP+%?FW_Ac-cZ9&B;6)>=0q2SOm-hlxQeLOq4+zC^YG8`@<_*m<+n z7hPW?Z-uSIL+`vDnW*#aMP3i5zS=ds&fUFZPo+Gbu84e)U^6oli`Jh8N|RkSVv7uM+L*`+!2mfzzWKq zZ+%NJ)i1e%yav_~ul>QImlgzGMV5esc*hb|z?eurj9kM)&D;&w|K@#5NsaUx28>{& zrZS^r-=Pl=a2y6vppeQ}4_0iNLWG!fExPDQBxPJSs zPmmi}XkcmO$!CM_g;rWW#XtpA5Vs$08L?6Jal8-~`tV1$IqgKeySa57IR;{AiK$1Q z=j8htCXfXnpd~u=-Q99#!4St@;6>+uJVSQz&(7*eWM^=uyL=)uI`aE7voDZCAcTsX zx_Ya(YO(h##IMvboI_8*_^txC{28XUYDh)t0Xq=0CBVczpl> literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgetsexports.h.C0C51FB128E2B6BC.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgetsexports.h.C0C51FB128E2B6BC.idx new file mode 100644 index 0000000000000000000000000000000000000000..51e5e6e96443a250ca9f8024328e2627d6500e64 GIT binary patch literal 570 zcmWIYbaOLeVqkDi@vO*AElFfyU|#u>2EP=u-94t~W;lI2a1QIJu(tyHxTzX0{;m6$Se|x4Y6*Ka% zaPe@7!i0q%XUcoqNzMVP=Hua$fe8bnFA>BpE=n%e2QipI1O&h$9>@cx4H#fK-g4u5 NK*jNs%#2LT3;+ifn-l;5 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgetsglobal.h.4E511DFA22F19871.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgetsglobal.h.4E511DFA22F19871.idx new file mode 100644 index 0000000000000000000000000000000000000000..19ae9de59396dbfaed544cc025ca5af0de13fed9 GIT binary patch literal 452 zcmWIYbaUIo$iU#7;#rZKT9U}Zz`!63#Kk2=nbtsYFi6YHNww0~*U!k$P1R2KB%zmu9BtNO=w&dF zWlVTxN_uKZG0>=T2un9PKQApaooeQ#RutqHl@wFWJh*omiYs%IK;c)EnpP|hq>Y5b zbH5zq(_-XeVc}qr1P3idJ|_`G7Z)WL>w_3fAOZqdE{ZOF=KOKmQf5XbW(HV<0Ogor HDi|05VKjqS literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtypeinfo.h.86CE2E83DA835A19.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtypeinfo.h.86CE2E83DA835A19.idx new file mode 100644 index 0000000000000000000000000000000000000000..05967de43f735638c8ecc06fc6eeeb871c97f866 GIT binary patch literal 25692 zcmbt-2V4|a*Y^&hA~9m3Xe^kuAfkX^0YpUUf*?{YsIcq~u&@Pp7Z4RIirrX3?1}~1 zU5pxgk7$fNu||moTVjnGqsE@^oI6}#*}LzT@BR4YnVG%wpVRNT=ia&F6B8B^5+@Uh z0%c)imAp=3EfR^E!T+>6jr>Y;xWGSKG5n2`DkNI1I65vbiw{$!sv~(#8m|#<$yG|V zEL*{gqjiC54Nn_&yhbHa*a|;WG;%(*?&D%5QqhWa>F_M2EKXHO(zIfAsyNQWMI6_| z&CN|LQOU$v8eYq*bOfy=L?v3Wq~MPKp~oBsgqvNR&8Nu1hB*z`WTCom`bBIKWNp zuM+bTtsL|~8VVlVpQ@3h$-!!pEYMIQO&80-9cn^4TU*PALUe#;>2d(c)WpYNeo3}Y ztppRGKzVNBSap>Rz!-w-&^d%0DwV2MfLoHgRJlryM*Ls-$^)Z04rogyI%&Eq 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 V>c@H;U~0XI6TyGge;aD9{|_#th6(@x literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtypes.h.B4AF9D175BBD084B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtypes.h.B4AF9D175BBD084B.idx new file mode 100644 index 0000000000000000000000000000000000000000..fcc4a0709f2199c3ea1bb8f572da5884a608c13a GIT binary patch literal 6612 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qvalidator.h.366510219A10A0E6.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qvalidator.h.366510219A10A0E6.idx new file mode 100644 index 0000000000000000000000000000000000000000..09529267986cf2635f9b0f1864e382ac779c254c GIT binary patch literal 8662 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 rI4<28g0)B_mGeJSWLvvOY>A9fbdZd8g zq4ZKv(C^TkWkq@|DCl=0v6 zNit`>81kUSQ**~qNjp?>MFx)^m_QZgy!1#Fn37(vw`8J68dB88l^a(<(Fm9|(T^uC zT#8vowCkYmiLDR{+%3@`CoWtnc}QFz5;rb|yd)kki6@sj-Vo&tF>rW_q@5z^xKwaO zVpk*)r2@>04}Li2r1*I6irRIq3RUkVbo9!5OyOfq*O5@Rlh1v9F zy(No2A2fqy7;p|L>Hs#tfbR~hG=xnj1|Hdah_FM%z@PgV(H}c+hGWSRj}6*Nk8hA-4U8X4Lul=}T+QYYKmUKWSK%k87>1()vZS z4}N(^2T+&~*77CDkM*{yCJ67Y*5JbRb5%cvSJkUnuW(HKj#W+sy`{PdUpyOCYm|Vw zkrnllq`f5Ra4|y{3z(hO!Y6ompPd<3@q3({n*R#K?+|oG> zozu`h4OPt-?r&W?v=o`TUS#VCCUec$|#7XVX+wLTsSl%Qp>l+8mJ>*awbFsUEFB1;dzO+uyuXl|3TYJA^zNqm-PE7M){-3@{{Zzm zK*P8Xg0-p^@4ra(7pXr_`(!Pr$NR5S{dMY(5$@*lU&?PZfcHP5E{~`QHO&f?4XpZz zHsbJ0%3e}WRPTdknFhV2F&rKzuyKMXM#O{WT5x$Pn7C%TNN_0r=c zK{^caiwR;+4o?*;PZb+r%$fp4Ccl^}_T=zf(R;2K&OOI-MgLr}B--78n~9oLq8n;e z%y8@~u@;B(MUQ+j1i7^GC#DS9AVq1d=*|0INy;lJfCsm}m6W$q0LIQiavfP2EC=x5 z)~T{GRSw|6tuth0h8%#p4Rci<&nI#yX1!7%<)QJF9E3R#A$V5nIZzvl#SG71I$5Is z^8rro>)dei4JQ&C1a4YO-*WEseyH}J12_L1nym-wHCNE(=l^@5+K1+qI9@Kf?dKo- z-U8VvNKb!G-(#&T%-`Vq>3g1Co>za@@YoI@pUtCD^JqL4Yl4t0(R-yBfsCottzt8S zbYnX>Rr!A-RX)~{hOfIu2wfvYV$oHdYON=YWYKF_Q@4{RpLKxU!WI&+g+yY3Y2x>0 z$9i>aN9ZWcN_!wRU^m1jT8mHf-N6pxwuAU!SuvvP@w!dtm_#^#pA@uD3PZg%mZt_= z`3c(K1Z~14qI)##9*x8}04PObsalP<3a&mv^c<1?5-4h!s9DOO>RzRKw;EHiAZvpyko20YVt%ax3IG z+@C4xCb`@uIS%({@Vs(~eR65spD9qIC2T*W+ObtS`=Zj)()u3`d;u@!gdA}~u7|JI ztM=5ut?oZ0LC0~)D`)3!=~MvllH-H3tG*YHF4SY;~)NmqUZzsppaE7WOXpLmL5`R87?y~WE>CM zzgvEPY26-9e&FN>c78B1{r9(ZP3wAm@ciJ|yfe+o$5(rR?0!*ly(oF(-lACQMB%zl zOoxv5ODCb85PY8A3A%TJ5hs#fohp}_D#s$+y3XQz>!y9uQ&en*EZomPZVZbdi^En! z7Kg2dEDl=@SqOK1@#t#&h~~XN_>Y4sWZ0HX6(gpKG57}1_5dC48z=6zT|2j6dbi%N zRZY?-nfO+s5$Eh-w`!;IE?vvK)#zI7^es( zq$Z4Gf{x2XcbV87(7)YZxpk3OPA1&b6xnNv9ElM?=R9)P#hl5>guQFHU${dJiBd78 zDqxN_w1U8!d_d`T_6!Wob4*9bd^*=GEks|bd}qr8uxQQ zEP5Xn{dnBrebN2C=*7d;21^wNOK}*@V2*AG8!AO`c(LTOSn}uLYO7_>)v^z2NI(lF zdv1|^xH9L29CU(*i8{5w%_jAg?P8rxP1EUrfmd5uz4u=0eChpfRzxRWV+J@TRs3S)8JFF>l z1n)U~>9)tf>($C(m7};4IZK=6$^)hPY5TeISge6WJCL|?C!*m*JDj+p6Op2hA=)v- zl?Rl~B-)w8l?PVMCEB^fm6uE$A=44E76Vwowk5N9vL2&@b+NzHN%*W~{|}x$W4=WA zNUN!SH4VlU-MwU|N#U=H1~^%OlLgpWz`MJ{JB9un`kj*~oJ3(Kiq$`z9++<0_#JE# zt`e`Sq%@bw2a7?2#W?h=x^8NjU!(7p@BUJ$-#n-FAE)-^4|I~5lg#X7_QkLtcjr#H zJJhVeC6xtx z)#p^n{#hfO^yj2MJN=<33S`yCtB*Zrz>vGYfBMDjrXwNQ#WrT##_b4sjW4QAc0C#C zBqApf*@-A_=V{%hp94pUI&~E@u3`@9m)5Y#Ygj^FNpYhvx7~8HI#4%IcI95WLuK7i z*%cipA)S(}n<=}ZS1x+n0(B15>IZ7=epphY8BH}qs*e6krWc#{w%s1j_J572Z8hwa z-tXmS@o5r1Ap8s-4t1(WE*562@RXpc#1tosb7^Z{5 z2F6*`2ZaI%50L0<$J$TtB>GNrsQolVrbBq`r@(~cpTtL=8w1LYP!=kp-C)GfRYBsB zdgJ~{vu+wZwny-?o8w@8IKYet_>8|C9=CNx@22D7j6K9{5AjENMq8#u&nk7tjt5Ia zPkm1ZOT%IswV1|XxPP~@TXL@6{cSu9yp|c)@`b1M+!}H7*M&`lf#*t*bERsi!}hDf zGItL1o&+70S!H{Axe+U>p5OBJ<)jaOJ~wN)^g!dqhAAKXgQAfFOtPnm;WV)eD|)D2 z8kr|oK>G~Z@nF?hMfIzw-CBiSz|gTq(5>M{-4`b(JxZBS^9PW^-wN!l5QL^8Sg;ry z$n5aCCUNQAPHp=E$a6X~PG`P2;Vyl?xc(X%Y~d;@5W)9Teu z`cC#zYl@n}QcT<+mXeV235U9{E+!sQ*^PBG-T7nHm~Sk28` z7Nz`Z+6dKrRG!@IyS;6uIoGbg(b`o|dGCT7&$~}^?j)Q$3Hwf>bk5wUyVqt<1Maep znbxsT+2~p^HF=Er#1>aoI&4v-* z&zlze@v67KPO59}2+#!BcYDWQzFU{kcKB>3fBzftcl1PuEyZut1){ZaDr2%vnB&Kp z@i?p-^&1w@+|elZ?A1FAm?95^hViI6Plw^JOg>&K32r>~@$3a+vd{ho6y4qTiDl zhW|e1@Gr8i?n}UN<@P9Yk_N;*;u5rsZ;55&Z*chb9)-tF{$YH`VaQ+xC+0O@um)vu&>wh7tHSkM|) z28B(qt1y>!%pa|0pgCY(J6UMKN3RM$f86S#IVpr!Aqz!u*(@Cg>}F9I&I{EOnfGND zhFK))Y~K``;Xk4P%FRC%Ob>-Xq0WONAeh@GW%I}Llt4n`Bwc4j%RNG)-hBF7%GIJ(gn%@3dM&BB{)1< z@Et7#Av~l-tK_++*FQNYrgLK2Cnl0JZ1PSp-3jJ_Dm$D9uq}KgM7`p=Lo~2J1bIi# zj&`-bqBQ~2$W=`n3af_2$oYZ2cmeF+m zw#y6NZh>e5YmI8mGR|x@s&Su?-FDv5dDF>O*wD^m##!8T!PIo~6mhY%6|~$>ssB?N ziWyh*>H_AqfE7pjL*E(jnb}Wt`-vNF5ES(&QH~N1zPEWNYTt?W!lam3AC{Q+Gx4M8 z7`7k_h}!}#E9s&3bohNK3a?PJN#5_rZZ+Emve3U*J#)am4Ka+pCiQQ2npoE**y|>kJR95sHY_EDXD>qX9yz_-QSA- zJn!0ANf|47aW&OADSDh#k;A!?G1pN)eNgf^D49_1RMe%i?@~F4d%`V~4a;P2ge$KL zsoU_zyL}%#bF7=UjZM3DVLvd(g@V^Y!R|X;u7~o=@`=y)L-bL1eRl_aVVX}`FxIeF z)E=Qdq7VMow6JDJuO^C`?v)<+DtCSIsp+jf6}4w@&r%qrsDLcZ77$kyt`&75VGD^X z`eiEWA{w!XmNQg5weR43?Mbv>!TPq8xGp93_(r|@y&U+x9Es~2`sRW|XFEeXdwNHw zL+6=-?+s=(@c-n{>ECig)!(NzJM@39pPtfT?7dP)2OoB>xXu;VzT&oNTRVUFuO*KH z56EZ6eC`5dHq%sG$10_IH|`@Js-z!p7FzzE64saqeZFn`7yqW zypDskbDQ|yCZ$jaX+CmM<96CT$DL&5Br7{v1&nIG@w(eDPNHzuq2b|680H01^k||R z&9yNo&O*l`s$WFyeujS|Kf@Wl+w3mYbnZ## z%I949>?_~ZQ5%13eRqqKD4Z)FU-@F!>GTcynofc6JV`Q4lH5@PcWQ9Wx2vXZI`zRX zaP^+-3!43_dKxU%|8oVoI=P*)Yqs_~13q{S^bI_@DzuSnBVW{$Dr#fb#=ghuez|u* zgQL|!OGZm9q%jyVsrq*5?)uZ`XPtc6$(QYXx!Ly9Q~D+SnzN) zgVc18R^^p`Us0b|v=aK7J`St$N2!Ss{{X~`w9G|X4)a?m>R1*$mW81$XL$EbWyfBx z{ST*b`Zp3z-`3A=c|GpsKb%a^$pr085KB};WXf$pxh?o%P`{$y5tKWQ@IyiSQ1C+I zt6sgv#AIS=;i3)KGtjp9sloDe%ss69FQ)x*N4 zk8VRq84DT1Vv%WL8U@g4>=bl6dD6$)%kO@>Z~KS~&WY)qnD&X8;l|#~UwQe0bBX;M zEwPwE6sCBWfG+m@c1PzYtY}!{59hZm`#1WQm~soOsCh(}N9A<3ZZKS#DFmc<}9 zh?3jM3_JOf_`jV40(Zi&F^-X9>`4k0HCBvu$4*6U=GQD7y*?E6kfc4t^Nm%TIj8;M zn)@y~xy;{)G8^F;rMV`yA!bLL1)HV2;b1`x*M)t*Mckx$ig1(Bl_Q6k0oF1@A zxIuI`9Ah4f#KFnJ(08dlY zF4eo#MRgn`HzdYE#D|wRA3=;Gh!2)G_h{2_hlhKQU*VO%pH)kp()qIMwqw73`0H5Q zS-rN)vD<&?^o^!t2v|En*#Vw|dinb7{vo~Z+=h$Dl*U3L!$v599BKV+=$#JkIX$*6Uo zFi@I?9g<2S7p*mAgG=OE-v^L7V;dUcl^xl6W3b_X4Q6vt@4NrQXUmb9A!zLK4WMlk?~=^ z;Ty#J1_{J%zXH4ddN)W@4&NmHH%Tb26u@&x{7q8V5pHsmwB+zD;(dz*V&t3xStjFd zk(wNSOuQeHKpxKjn8ZCMH90(xdJm)y<%tH;xPi1LXQzXy_h1@`De4q8mwM;YzyP7^ z$&H~cQx)|m8vYY4gK4G|bt^5tl}7M-X>$aZIfB>qx#!Z`RV{)AZLZ)lSMUle(I_UZ z|K@N-%@>UMf#7k&w@T)3>+^; z@+{~-h=D(dk(dQtQRj%JIbztD=QI7j5-)>Rd%kFzFNQsDQtj5u$mBW@tuJ~l5{rku zdPgq~I0W~%NDN&hmgaE2SSw#_%)iH8(POU|z~}2;vBqApA%_o$VFyHq`FvLNI4cJ5 z`FmEZb5>M2TqIT~5)(MR7KzD4Vj73vi2668Cx=H%6-G-5oSsHYtwu{7I6PCTFjGq4 z^fg~{oiF)vc!yMZhhsUb9nz;eq$E!NJEYVdQU-_jNNkT};P5_4zfbby@DWLS#IbzV zeW}!asRHLePo+{%r3#$?ypm#HN%5SX-b%4=rFc$HgXP%4ay+M>!E%kkazhRemxG7P zQJg;wm&**7<2d}iEPpQ>Ilr1L%adgz=T~#&kU4TG&j0e{ig|K%&Tm%8`W3RLBV2ri z9KqoNxk7=Q!1+&s+`T}~;_xO}ze)CVgo|&IBRITIX8U9VU%~gu9{c0~4)2%Qe#id( zvd4bM{sS^Q;Mo6I_IWG^p}|2>U&=l&#PyFE5gDc zN3WDC;EVclYw6SqN&TOLtp0w2m8$_a=Dy0^@!Yu+bnXQ0JHeQ7da=sZE6+ikn`qkh2>VtoE9i9z!U#*?+2DYFxnQmd?^ zB0i+uki6DOC6LO@%!{q$Nt4P=zWQ)mHT5l+ZLboqtE4oqb2wNG8Z5@4IFgZ)mQ(?@ zS-45i;O-Z%Wd8%|Ff{g_%#7sBJo6T<5$@A8nx_0`WB&6a{~;#rZKT9U{DWD5gvaY<2TKad84w9K4TD}8zPUq&HEaiOlKzWq|3#)o|6N&)+Wi-0rTuqhrEz8D^cgY0+po`n zKXvdme@|JZf1MFp|KDYVrd7!p7|Pcg{JHXmfr?qS$_=XezUl<^8~ED5;X{V~Z8=8% z{)30~&h`F($=koTz5=Qgs}Dn!Ug)o?_TtZ@W%Po*uha{8{nst4n*Trb;;-}mWiRwO zs?rPnRn=bn-Bhyom3jfM|GF1d^Z%z_{B_>Sy)eEv-&JY??AO;St)9Qn%7)9_-+!N# zwF$CTq89bM9HICRiGP~}t?>Pa#J^2~CjI?)Y3=;q;YQ{gX^hTaCkIC4uag6#peM6U z*`QMK4J#-5=i)D3@!yzh<}Y(qS}Fe_hp`q|2E8k+VLIX(R;iy=_GO@9km*ki3w&75 z`!@~yQ;w<)(+80?Oh;V9{$hj!uL2E&H-Bmvm+NmD_NN?yhVjcjP)T4P!I1uChCoOE zE<>QgBufi#20Kr)c-W|2C77l|{X`y~+b<(y_`tVvdgXdMjLd>lx?x5Sug?do7wB<| z)OuA)ylt6aIz&lZMsiDm%O zccvw!1rWoYhz5d#Md9@3}x;Qy%@*p|R4z0wZ~ z8IY4}892Plh{1y`gL7UPko%(fcw*>?-otYGSzZ}3?B(8r%?E67_OE`HA+P2P>kS2Y zyZ7ilY+!F#J@_UzGw{zk>|g9<-N4Jb>}7J`Wior25_p-yUbbivc$>-IW@QE5KG)Oo z>aZb$pqrNAIk`{kf1c6*Jgfit2V5zDTp53JN4z>Xr&rG4oR@Q6$<+x}V3%k8Us-_0 z{9jps$ozE{cBC}?zq9;pMXZ#+tq5qK*`vQLg=P8MQh;!pr5IUqhjjB(3-kG?C3i@G zV6lI;?%!W0IrsudB>QKTG$3S^X2L}Jkz&zFiDkqqIH9juUbnnqdDHTiW%!#f_u1#N zSpImedqmgf*_KGLQ?^ArMm@)9g7$+L@`D&ks;*_P3r9(%Hwo<6JQiwDk znB}9^v{moIEkdyPq41ty(KcGMH(I-y56skL-1K)31lJOcawf^1Npgbrg%I+E5U6V7 z2Sdu2zyG2XCcX@<`9w+lL`l)Eh|yQXSS+Rg)zqoGMmtHk`0QgAt%Sstka}ACr1p(4 z!~S}4E5

h$4O>yvC@;!7|zXXV7Ra*B39h&~_$+MB+2 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qwidget.h.6759F82B1EB68CFF.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qwidget.h.6759F82B1EB68CFF.idx new file mode 100644 index 0000000000000000000000000000000000000000..97359ffec479ea59f691d219bf7fac1d28c200f8 GIT binary patch literal 41936 zcmbt-b$AuW_xIh|*}2(!H^~i22t*)Aa0pJ30>vpV+afIxl0X6>fe2Cxgd-7nK+t?<9VXjgLy`RU;y@Yv;s-l=vu1{m$_TiP4QB zlDb-&8LwmGJGV%NHx{0!rCHs?i0(15kx8{Xb&8Hm7If3Zgx-C4B`nPvM)XNY0cO*< zh~!QQiQRZHmS)W(l9HnnIn^R1u~S4OWZWXTPaOQ{@v)s^qoZ0TB*b-$NHn>aCI78d z$>RFbN|l;N$45mc)`^SgjPGhiBuBVE3+bkbu{|S_qb+V}#AA{rA~G_%dvdMBgzo$~ zDJiyNTy(AIq{zhB?#ZzU@lFZ;wsAzaXdsQZwR=X#C%c}FgvriATpt?|74?Ht%3?l& zOjMVYq~sQ{zd;r$$q990juA=G&UBHL@>g$B-PIi~f;Ud} z+SSEJSt4U1;yXw4Dn=T8{zEdn<9*-U=sH1kHoh=2E;=HyPC{f#5`T1#fylUoq-dbw zuPdj7Zrvl2jn-+;+n{|?TtagDh{Vp2EFnG_8YHO^P_glX=A{|T-pP%k<5Msv^F`By zxY)=(Jbmxv_T50HeRtQp#Au`6BAq|bvh}0HGmPAtkZVM2d~~Am*7&BB#H0iuppg^0 z8BAA^&7*syM8nvNvP2nUBnqAr6Z*h!&z60d(cuwL!|3>! zh{VL`xVZ3U$>HTod{?4mc<0E-_T|fl$Hqs-r9?%;`M8W-IUny9=yx{Qx+W)Q<7r-Qx3e3|5Fy7U}XH~3}WLuCH&`1K+z|HHvLcebdBzl zWQ_0l$msu+Pj{F}$uK2i|8qWZ(aFjGu`aQ_yG3;WPoI+*ZRoZCltnM+@)#A}>Hpk8 zTr($y_ecVr&vn}WwMJ%E$-SIweNyMRgpLt$|2aFJn=>0Q06M{n*2!1}>bsUVC(#)6 zsMB!ZJcDeS7~RwDRg;utt`(i~E{)EgK`=HUCCN?LX)N%p_*d~~RQksBgg5cY^3L^4Be55)zXm!G-~OcY6m(cXKBuBB_pZ-GqmF(XpLl zlItXZkrS01V}Uo$JXd831g$8Eiv$iH)?Erd*_;!5(&nb z1*oLx1q3lMsd3m@n#qNRqomvy^CP zLs++?6O&zri#uV+LZ0yvaeTFlO)`X>Yagt`79c_Wz^a?rq!SReG7?;JHpp zTwDuSsKNM*O{y0g73F+r7~LtkWkPeK-Qabjh~BZ?V6GTx8^Onz&k0cxaq!M5*D}FK z1XRm}?hRpeH5fm|I*m5*8URgkW!dOm9;!Olp^Jp-I z(BJ{uIX>#bxakOO8plmr{!=T~usRIu2~wbe5SI`c0oGewLN5>pB~~Xfp&S0zbxv8N znnolV1|-NpU7ddgzh#2S1zWtE(JCq3_~=5)In-SoKHT_fV(DhIn~>%dmln^)06 z^h*7B=VYoG1B2KCn~`o2apnw9=pLOI0b{I66$@mUmp+k;-VWlwTg={6-#2Y(JZc+1{Hw43}oP}BK#W5h3kj69K162VP;b# z!FUq{pH#42Nr;QHfNuD~ZA0TCzunV(#c*zGj5o<(kaSFeW-*9w_bBjI>{y&i*!9NT zsW@rZW(A&|R=C@)0AKOFfNP;JUUJhNo@&J=aqR)ms7T*6j(nV#vSa|xD31yO>IoRl%$ri-JQvuJA5M_qtagEEpGN3Ug&K-!$nS5&4w}&K6!i zS5KyN%h+UCG?HLP7#)S{w{t-^{%{pwJh?5Q1}RocCuMZLbL}*!#!lU7NisBv@yDs~ zjR&`G0}A^L9%EohXb&b z9%ez5CB->tTtDU{=WiRug7V~wgTFAxR!?qNGa;tg!Za5!YOk>D6za$o_>|7>$Tl!e~ zyL@-x)9ll&6`X&B}mLCm`A$o zkuLJ+T_eTgX8n?igIqE5m_yV##LUBMu;0v^uZMudBU54wQO6Lo9<{CY`)^;H$s8oh zlvqzZ*OS~>kJG&xyee?*nTLa{G9~6KKJ%48l<@ztU56aMR8`&UF_)-wMLlZ0Dp)zK z(K(PfYUVMUsRB+^4eoR8%8! z^rXa2VK1{gNH|tw9Q7P0vUqUn*@4$Bnguw>Eht2P&HP`pQ2mwccqL}k45b=M~3!C9mrTzhz!| zVhc(2&1of`e5PCUyezNg>=cUyI_0Q$xpB|8ObT+4mu7R!py~{2PVD3nKldzLXI!v@ zEHWjA(QLzL9xUW(t&fX3^_UJ42TX}evU*82M`^o&fgPWps2gG>469LvRq++o$QmCW zaQFP45C=J9W^qMPuPEl&IC)}6a@hi>L83jj#(e5IpPB+&e>_m2#K|jAhHGkA^y;j- zzbIo+ixt@`oRD)l$ZoS=M=9zk#Z+>i-$f5SGOk3ZgS<9tu}4<-$maMev{62wHvSGI z3PO|5WI1O-zdogYPpO$n(etZ@jJf=MUI#g8X7ZA%FR7`2?&X=?YtX)JAhE)%$Pq<7 zqU6LD-L+_Lt#-F!3wn{xz81ZuPsqq1alfikd1uwPeha)A4h*fIvc{3LmNl2ok4 zh5_1>z%e_EI>>BO;)ddRLowB8+io3Z?R(=}%t4+)J@p;Te+SE_k0k0yp=#R)RNP$j z(u(2^a^3uvm9n~0sGs38X4dwrbf&nSlz>dOOSbJ&nCl0t5>?>)rge*cDd8Y7Ao7ug zd}LwzJIUvrWH#yHyXRZ^w5(s+O1y9g)?hV)#qbz1YIDzNLt{!i$R)EP&m{GkWNM$+ z9->ZKtG^VQtt|SfjDxH; zi`b(0Y*9?zll1ypK#v;T$~s7CEMlD;xK1vLSu}stH*E2RsUT1U1(wR{QlXoQ#HMfk z<;r*E9OS-P##C9IDilw(VBej0FAN2VogksVW7*%aKz$JL86=jb(JOYhxDmS-WTu$8 z%#yWPV!dB;I&S-ytu@O#$QZNt|B=;yWKXQ>X1^{!w#t(V5{FEQkCMknF@jRc%Ly5& zLqVb=ROBQJJjwFv`-s;*Vm9gc1@m{Wy1NZTo|qNMBx)uxJ2vLVtdJSAZ-7L)SUly;g8p;bd|a@A{@@@vP++30O_a^$BEIMJvkM<3gTPy}64Qw~ zU36)I$tlCC9SW@BAV*AzG{rMbF{k2z%G(>953U6g?@fsjvN}R^X_L%fLaw~)3KGFs zjU}?WM5vV=vHp8D_n!g+TOkWQ&6+dK8m8Z&o_DA@wvL`wZ~ySIL`?@-3*DrrTK!V3 zIrV|Wdmu6U_3*JgP0}0dATz`qT@R@GK(xr39XUfz#!RW{MV1oil~!siZ|5KEm5?$& zU#-+?el52q-Ap|r8i`JMqre3oizsEOlkU-30 zh2pb949|vpro2^4^a6oGC@`4V28-GJ?)mLCL75vGWGCJza7m$;6gxJ>*#)m(SO0Bv zLkAgYbjqL1|4)`%zb&b^L802X;;y@@!|*G=-2#~&n8`@$Gm_@TOzNI%v9MvjBaIwn zsyR3w$?7B73nhxJY<>B0(wxQ)GTfB-EUTY|ZRLMwLeE08BAYnKDN|yQq7D+KW{uk6 z>%PCg03;@x5_1)wxk6{$9I>_LB;wQ5LDE1%pC>!!$sw*Etch2*N1=t%0zjrHe$08I zo+qaH)oyZUZQfsHK%grMY?syTVxV6hU+CJ|21y{WMf97ZjuwN%dtV^e&_LjHuS&gw+_XRL?D}!8^UiHZ)mBH^ zl(~4lrGuO>TVsN(P7tO~#H}Suwv1@4J4j_L=cJ;ZgsqKBQBS`&;Hj;Z|4$CGz|3NY z;;}<92Uv@|efBo~ZB=Ur*%NR@4v0^`!8PL3gHIMZd2gv{leKqr6&4Ts& zl4_U+u5XFlc=18*14n;#H{LJH>SbZPd-u)LxMhJe?Hpu@*)g+ab+(u+&j+s@lC@51 z?;r)tZ&7@<3&k*RbHjV1Msxsy>1I`z68ln7)jP9>54+iAdItv?WEL_;R>z2Oej>WM zqv5gV9W?TnWU=U(EI5-Da{b`P#M{TMP>v6cuo4Z8ydT&Pfx^fe)O%DbpD*_!+*Iuf zs;&^bosYFH_B+*iVMhl!XVx^6s+q#Rk15eS(b{rr$86*${MaYd?}^xm)ZCY_Y{-GK zkuV|6EH)Fr&BWXyEG+P7`N~TbL1LvT@myA)3)|_|cMa7e$-O{gm)RU|i1tQI$mh9g z(W130M}f&=N(@sxhlx!@o6DoCWxe!_c6Tq#qUtQ+URXD0_T`!1`^7j&s+q?P+2@9^ z75l&2+wnrZ?6D4V*{tb&qRtofsE}v$9!IGgATiUFSVgo|#B?s5oM5|@Beg~s2U%v8 za#B`L%BGv+PRn~w&Kzpn)j_VBdCVi~JfR#u`K+z9f68%?7zGmg1LpsL<U&|4 z{#NM5h${tujB}9U*f9$gpM^pnpP%FxFueK)5V&C$vqo0e$fmV<(YNd1$D>CiI7nH{ z;<%z7SInB`yxM2Lh8B#Vlniu}u}Nexb*Trk>lUfy7*+J+?8wZ7h#I zf_RJ&HvH-rpI*K5I|wq{%v{DO>KL(vRg5mQxM$aTi4HQrtjQ{>t`e5Vo${Y8b>D9T ziI1klGon5dJ!5aaEdPyqrIH*Z2%BsT^;;w6%d?=aO-9|U00O_Gz+S~?uVUJR8B556 zzmJXrfhA@clNF!Iim3`OH!O8-Tb1!3vE7tdNIe${7sQ+{>!z2w)iK$NRD$Lh!F)zA zf7cIojE5fA_UD5?r?^f1jns3a_|~1fc0OJ(VLS-*#ft7!)SZfH>9zk-x#GJ!TY5Tk z(6>>~Z8W><2MeL4%2o|&a0x_~n>C%N_)JtnQNkYlTjIdS!+K>SOHGM=vfn=0lnA>w zX~@ATq>qCn!?z5v`VFxL>Z!y#Rdj93x91o8uWbw>h6%0jWB&VK!#jVRwQK0c58Ccg}*sSPyF0lvU*GCphJE3?Wy6|^qZBq3@?kG zhvo4U%Cutd?b~Z;^?$d5G0gwz?OA(26lkgp-L4KjuC(swMSg=CG*_EDoPV$e7ka&1 zJ@FU6KOE#2ticM|Z-s2`HPjlLX2~Dl|B;P+GTSOkc4Uc}q8FI6O*SrMAboJUv{I@o?;X1MFu&@LXgleG5(fWF#Cp-7~SuOOV)Z zR^@>d@IVT~Ru9iv@`w14N<*#0j=lCh``*n@HqGb2!AqB>40Vu=MqTHz(0Qz=exC;2 zr{;|O{fC`>ueSJY7;JjXiaeIo$HF?<`nXw+g(-E@9At)Bk!zB6O)}SoI)(E2lWY{qK=h7Z-9mqE%h*`<(48^vi|lG*UkxqmT6UURYi*Ja`Hppv z5yrR9l^t_oufcy%CUDP^DBpkjf=qQRW}V`*PHYr59lR89uE%2#NHhEFJyG9_xe!?) z^{<2hTQeQx2h8HKILDMNL=CP0@+;di{=+e*_YP&5C{|>Ss~Ww60+jS9rusbdWzy ziHAgeC>E}Id%TbRQE@Uz3@|0qWHn7FmrehUE}r?v5s;W-N~BXqIyLuAokm}Nf1-_T zl7mbH3H=Mp{smlV1Bh(^co|(iQ*m>#6QfI%n5q5pzdJJp zPA$xWb}L@Hh3T@bWv5s5-nN*^m!7lK^DHbq{0B2Rb4BYFIQ$n78ExML# zvu{s_@M-R*{zX~6C`^6-Wwj#5Zr=_Pi_JWy%j$I5JS{pVAKzVl&yO>p<&AN+g88oi zL+p{HK9bDdDYLB7lf*{@K&A=~l5>*BImxu5>@Q>c#hq?4)7>IGFRSN;MYuY)?$!>! zrGtcVM5pg&{=30*JesJZg$*>|%IEP>-LK7ZkXhz1SxoGUMHe4g(Qx+KZbj!fw@`W- z^G$=^;Xl}F6^7pJ^`idBIS!J7bsa$+BdF=|S66ME7&&}02>fL>Nvdp174}@uUxU|< z+8H+2K_a25$5_ZQ*q7`jK6}Od9lrSSsBwST7uYS?LFA<5cT&pj`oW46-9Sst7+QY; zSp4SK>{7Dr5(`z$acQsf54Z^u5s=AY7IGL&zTL!Ux6uCo9;^AF!>M))-JFomspoUy zgj{pSe&_zG10b;2XxFvOZ!M_AbmEaNRN^)5K%3`&nV;huO zT<= z+O~`U3DeVfgnAwks`*iWxgnMGr4F*r?3xRb#|6oBLC^K6U5{?>3KAPki7!O^BJ{-G z@ZHDL%U@asr(34P-$eaeG)LY~wvko$-dN^tgshewtA(CWGBa!R9CT#4gT&()x=s9V zlYH2>%O_|J{z>b!%0cd!-+EJ4Z;HK3V*8z+>83d#vDcK?C9Atcd;Pq<(#8s-a;|oe znpnsj#b=IC5njz6JqVZ*0s`mFEY{2FdNFrXax5qMv*92y%ly`*iqBFp#H1CL&$9Py zkeF!ZF`0T!rsno$QvDn)UuJ8Q1&0S_9;wtnm73;jzcIgim%rV84fs_}i4R2kAlf{< z^t?Xan+C0QkZAmrx03CxWO}jt)opgLbCV+L`Tkgc%KV?Qocc3aeI~5aHbLcz)>kis zOef6bi)8yEPHUun@23{oyJdsh@Ht97kBZ@weenK{yF350$%`B`4CG&Izj!GX$BI1U>#Odb+s@JPT4xv%3UT71V)){@r0;P zgc3V*aQlXaP1G%3WV3N()W*L}4(A`NM2UFma-r~ITO1@G7BPd^W(WhfY0Jh}$K2Dm z!l|ZN%fDpxFEMhmr%%j1wg0c%z=>^2yq9e6CG+TXQ>|YM%^QAqyBFyVb@*BRIlJ=@ z)*;)WLT}0rlm6nT2KqwTu~5$8`azjKBeEALHToxz8E$^*3rT$;PGLIt^er_$X5vmb zr!lMXMOMEEH&UKUg%;OI{TC#1;kT}&>Pj*A{Lj=pV7by`mxJs#v$#mqi(pr|7Tfth z|B?Uw&mDHVuPoIpDYrr5ER>=jWc~+1 zN6sYbOraDCh7KJ2q1$(R+}EB(L|Y^}_P6xZzHLVP?}eS9S0;XwyEZGO-;qHYrvncZ`J#;M#rL1MNk zv7FeKizPdt`;R|tJF@Yh7ny2I%BE`59L_)3!LesEaz6Fh2{|k?bC{y|Oc9RgohPad zpV;siNF>3x-eCSWpgm3z^^~Z_*^v`2obOxckb}&DzR^cn{YOE&zM_s-qFt}d_p^7| zRTyLpua$n6`QK$h`dQg=Rv1*9M~u98t4kk{8ERH$096MF1@Jjy|MD*}vk${jzbP?E z@tLHUhZTW6&NWiI>;MU)k9oTfr|NLgtdZTTPP}ZXb;Lm?m?P=Ftlk%AzM&h=ye?m( z!qIG`JZ6!h_+^O0$z0X+ip8QT9`zyzj8<*n(ZJLB2V3=5{YAeYqjw$$@2gpf4^;gi zKBQAZ$-lc?YIXuPg{H(Cn(d8fuu?6K*Zpq)!jqu1jRw2L{BMEDc1U&{64xg>tqA*V z%I>!yQwl4(Nby-Dd_iwx%5*JtW6mjV=kB4Nd%(`+KUmisjZ5Du-eB(;*y)(f@sX$> z#Tc4%yVvf|9rvB_B5RDVZKyU3bpF8{QvFt4u6ic*tb_b(e#>~Gju(?*_NMMt+Ae%| z≧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 SHfYhTUj0Uv+Cr$Yc>I6T1NDLc literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qwindowdefs.h.2B54FE6A0C80381B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qwindowdefs.h.2B54FE6A0C80381B.idx new file mode 100644 index 0000000000000000000000000000000000000000..efe78880dac747ae4675993407f4a3bfb04cb0c9 GIT binary patch literal 2308 zcmbtWe{2&~9DhB#*KX~$cDu6Q8yg$@g}rT(WuQwLS1OYqTVXf^g5KKOcC+iX*P8=% zhSWp?gt3587Bg5xhGP(Q5+NZ3As8GWMleAa1(kprSZ0hdNDTPB>%A-fXWUEr`tI{S z{e0hjzn}NrRyBG&f143v{f(Qtd6_dJgwo*?ktLyxf`u}?4WUp#@Nu#r29cKy2%$ES zll;i*7Px@efxIikmjoVpn>isU^Aaq0;57?Axkm!HMd;RM*lHF09lX3;h{$BUf(wO| zAH{Z7^Xf*>FZL>s@~x6v8~vzV2=EIThUpZ$d4}tW$b7JqlO#S6V7xL@>#TEDF&#eN z^R@FCA?OSA_<6utQR11fPYlX%I$mn;^*cLfq7>x1`ACTK@iUVV+q!t4?C0Af|5xYf z9)StV9X&!vKy2dzGm`056aAk~(;|w2h>}-{=VVc0B2WTIuiar zdHuWkPLHg%APW%Ke6~`Z;)Kq-?|wbxcRgpK638KQa862`uz;{%-k}b<43}Brgvm(j$LYU@ADF0E{XnJ^m+B$X5|9Me zuZ8$|i;nf}_+-6-veMP4+NQ}NEA2rZ{VDs~jUSZ`UdM(+Is<3Gp<;u024K}I8cdvG zNQyZ`gUyEyYB(RYmH~OWU@tb-}AT&CX>&&xjfSrxA z;S$8gso{g0Q2Lw6hL9RRC6L!;jq@B6-c-G%$0?KZouM3XcUV5<#8 uW5XYPPFY4IU*t(;VOOTu&~E`Wozs)4PvFXjCynV2yAA1ukNuOQ@&5r1OD0qR literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qxptype_traits.h.80D623DA52D2059B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qxptype_traits.h.80D623DA52D2059B.idx new file mode 100644 index 0000000000000000000000000000000000000000..452e3dd24f93ec0fa66569a62ef19a3dbc61ccc9 GIT binary patch literal 3256 zcmbtWdu$YC5dXTgg?sd%UHXC^-9DfXuD7MMwKl z+KTvys6jz|1Pl=k28=|F3MgWXQKO=f7$wFi2_YC0(fCSGAPA!K?cJPLO7M?fa+CXJ z=9~G=%x`wDx2vP$bvq&Lp{~&(YDk%c5FWm|p~>%N!4LNFR&HA0G3Zb%DjC%4cDq}J zU{um|!57=?5-K+}c#N?aRiq&*EYZUH=GNp5R4$ctdadI!s>vfXG{Lt+Q-`kg^{W%y z{MY*2qRJstx9~7Tch@kp_kZ zhIl3fg@z@TKM`ya(Z{20g%9!ilSxLPi%_#K=4FFqlZN!Zn9H0iI}-2pdEgSpQGofS zPe09^>NGn1zi+w+<40OFznX4@GBB#Z2m#0IvNp|))!9ngBQ$u2U_>NCU zR7i{lMkpAn;8$y1f*e*bm;2?YY>c_B{)nvOt&plvA+DQVLOW=6L#Wm% z6*kh*nC52ZKC!XJO_G!#K~FzPkVVzVfE=YBQ4}NU5EZ4kZcrs6X&Q}2#npz`>~3+_ zi{W4}(A+4>N-!D^QP8)m8Wo2d>RI^#Lz84fcSj}@DyR;{0Em`=1-zSFI0HI4Acu#f zpr%d|*=THhk!hkATt@|Q6qu(T4@QU@qnc!>+F}A5&AuK_LZ){6 znj;Q%f*%^pHK~h98azA=s@2uk)w=|?g)SjM(s8y1wt^T7QNfutgp5ehILw~hg9dnt zj}7(rafB3nUw`W-$^(uZF298EEd?zVrXZH78H6}8_^hd0-|Fso-YCrGraK8=W2@m! zK`b`*LI8(7eQht1c&(`+X zxB`IJW$mgl1+iGCz`F|^emT5m_^D%^zCx}7;FV{VXPE-?FT4Ct^Pw|^yKGz`Bv7)I zB2y5H1)9U|H{5?NyyfEWuNH8{aK9q6!fpz@KXuRfl<=ZM%r^y^zdYJ~ zcXW<&+{TrGx!zHqX9_gu_Qfu&{HywNxIKsPwT{|+Q=oa*s)ugp*XNzc;festW~+#+&|l@F3FbB zb8Iw(_t|_-QxMCvWbLkaUGL7&*dKr%;LUf;&oc#v-@AL&(uWsLyK3WR0=%Z|rd(4b zxWjr!G&-PLfhT)s&b)Z2IxmB>^NLsL#HPc^uLSVqY!*;bRFh|k} z@*;2~IY40yM=19$aIapt=)08wh2~QyLP5qunT+n3E~Dtm2XC&}ej9lAkRAtm=e>7m zk9x_gf!bZ-E=TpLlY2fcfBQ#`%jA7?eIimNlON0(EWp<6Y^t8JZ@+U3jJ4KTTZL@4 zkGpc=+ta0|pI!4HfX|wim1-DHowJ$?_g}+?>xOSe;xF*McJ=I&?au+Y5>k?f;3AIh zw!=%>UIg`WvV1zKv6YaC?I{+HD++41pSUx)nxJNTiE1nYaIt+vn!!MNn>OG;5FgxS zTZ!OTd~;yEb6eyD;98rzb`Ij&y>-s|gFn6e6{x%U?pZiZ%m_i)=HgWEyz=Y8@Y8e8 zLQ_SjI1ka=$8~uyvJ6Gxi^M98j8rkL!-*@9pp$f_riKm3w3@4qh1>a-c`Xa@U1I0^^7{nDWakHp2P*Lde^w+$ tGUQk4{g6^%4Z0T8MRtwf@z@#17fW{kFeNW{21z{^2+75ugrulJ$iJg8ve*Cs literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qyieldcpu.h.9FE4C39152C07856.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qyieldcpu.h.9FE4C39152C07856.idx new file mode 100644 index 0000000000000000000000000000000000000000..88182556b4450926b29277d770bfe34aae8538e4 GIT binary patch literal 654 zcmWIYbaQKCVqkDi@vO*AElFfyU|fsS;?DU+srrS<`MCu^ z-9;&>C8^0JnfZBo8I%}TP?VpXT3nn@E%Qo}^YhX&({mG(i}H&pb6RC)YEDXWK`GFb z!blL?xuBGxEI%^^7^aoENs7SWT%~#Y@J2fxb{+aiiW;u!7PH1OU@QB8XL7lw7P2Vt|qp6fnaWKtIp<>9W0KpWRAk LW)@ZkR)hoq`fsJV literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/range_access.h.6E96073B5F63565E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/range_access.h.6E96073B5F63565E.idx new file mode 100644 index 0000000000000000000000000000000000000000..4085c43dbff24711df93534b97d1c156d46fdfe5 GIT binary patch literal 7654 zcmd5=3s6+o89wKF6_&kVf+7L|j(`YgS-=+{VhFh?d5Ah#wT>Z|-HR;jE_8Q6X_~Y? zt1*wN)$uh&qn#1ci4Q;>BWS0|pnYgjQaiq46Q8L@r?IK2n(2S;*|WQ_tANo=cI2M@ z&-u^){O$Jjxg7eV`<(mrUTUDnbB7_FOpTlW4$A-Wc`UxWB*;2b%EhA)_>a4Nb zh(hdYt!j6u#OzeiwnI^Lq9Q z1U5hA0c_}0A-rMWRUN9zG>|-6f#|JX-@^1*fbdw%_%2X*fB`)y%umw)o~i$y{C;$l zQ8!GAQ(>J?wF8KtFFuaIJy7y@h>2gB(8zhC^}ONQRyQs90n)rm2l3xO3Oyah&EcXTY^Kb=w!ba?J^y9 z{95ha_ZaNn>Z}&FA7Cb&bY;zk4f10zx?lo{0sVN*?{3*W9Cm}* zX0+6pRD*G7#&ht`ke+TRH9H*!yJDNGmMBJ}>Tsl%_vnhlX({25=>AGq=yj)pX0XI* zSHL*r%CVMW*UvV$W_Z&`N-px*hWG&V*dYx*qK^_M{4RvJBaT@3omgirt%e_sVYgS1 zQ){mUNGP=k$+N^+I_-gULn1UC@Y4y~>Y7sHBs3bB&SLQ_*1Hy@i;wD;N12w! z?wI|_|8~bqC?A;K6~uQ1oohk5gl7gB(t+vb`OhY;JGL{MF)bCurNG1%Dk&_RN*cZD zwEXuODOdm)`1_x(ShJfuM$M)^II7vc%yBXK1Z;41meRMn$$oosUO|BVBPuOur(6O0ClxuZIJfRT%SOt zn5OLKWEj5jFWhY4&Dg zJ+o&m7T1D3Y@zD<;!0PUJbvxyX@+&11x~eg4hfJWDC;8 zMLw;iBJkE6v%Y@khs>+ZSlkR=v4u+NGoGqDyu8qgV;BBG!wxgJBBml9>4wFQ(4@o^ zo|%^uxC9vJyR`$0J3tCssL_HZWqMqG?3??@Ip$S?SP&r72UVljy!s+<>y0n|v--T3 zn#zRAWKUeujmvA7lqFqb9&HiCE#MJbsFbHPNEB`qKmPrnPTU9(rW9$mBDp-a9HN_& z1SB5bH?wg_^c>T#?s|pa5@Q)cy+N8ccD2lLDF~s4%&C8izj^>+QC=@ZtQVps@KXiULr>19-w6E7}kU}ImU7sGy%tT0% z$LYs;QLl?i3Myzl2rdzPS#hY%!`ZjO6 z9qZe@=`&b=#+$x`^_M&}ugCyPR*rd$0&Wh9nYd~CQ-UO)#D@jiKe zW#P?=xP^roSdx=bGT~|Br5yyZg3bl)3m<$sbJ^Du1W`5(Fb(8&P?Vc-N;4kLi#f0Q z03TZI`R$&=hYNz(u$JHvaTbp~i^uaANb)%xdJYffH18B(IqMJnBJU1h6733nyXPkH z?g5fn&)_0>$AAOYC-^~f-Gqdp4apS{++iWZhVbCd3~st?%xt&$B*PueAg!BlF%o!^ zy#SBru1WGj9KH}odgw(sbP*2Ybk_bmF~2)Ez9vwT8!>6bX*`$`WGT2AM|Z7 zyY9<}aPT17MOJ~16TV|UB66(244Ip9tJ!dN%uq9k~!9)>Vp z;lKvkX!$i>IboaiRer#u35r-R3 zchGt1=(n>PK8rl;;;&oM@rsRM+ZVS( zDe0+o|BlbRpRzLXA0X=}HXOwnycC@8_{R9>tH;iW5|jk}5gf%2BxumO6F7nwHVIzw zpmjndH$s9DK-Vfn@XpTXKmZh-|2*FJ4#|94ggnqG(Icj(o{IUUQ=3-a`y9d<6By&p z@3{|WkDa}}>0&ocoX?_gn@ynH06u^A)oF7l-`M@oqJRi)bzkdJ7ceHFMj=2Fq}IAr#HH@yE~0g1 zRW?Db`vzK3Yt<^YqE;=|s;DSdQNNSC3@;|rO(BThvH{;F%QX^`AP773U#(FoEaRmu#7Os*D5Q<75^ zN%CNgB3Uj{Ni>QSr6frtQ7JT2kr;(k%taS{HC2I-NfNbMq>(45CP_31D^FF))pDgq zEs`i_iV_t{h4xo0L7ARBMXnNMAUPrl5`lO*Dojx!v`i$ED^rpcN*&)SNHQf!E}Am) zbCskiO0`C!ttBN9iP6kVm5UTgO|sNhNdUaj-h_jDzB6vJC6*V9VGIa6&6YV5~c+iUKG@N zo1#8)B`VbEhbVnbXpqhxl*q6cLZZ>65YosggcLQ4f{@9j677ffo032`P9(~c5h4+_ zcVtLNNV-}TqEJec(q-}xsdrc}^e-edG(?K5ffQka>C|BYX?0D|s3Z!Fn)pWXjf9vg zmm&?OE0R)(WI5uK6;c)Ysz^#w5K4(Mg+O*EQjz}>sS0TdK~!yeMmt|RSfDZz#fxI=)MNbH84)h@i1d`raSi3y$ za2p;7LZICwcQ@&%Ct6UD4wSPn_sq8LSFCuz4T0(aw+?jB6D`P12io3y><#{q2pb;3 zMW7N=T!M6>2(6Rk`eC`pxMW)%5rRMmNbvy#q6iHd*pe7%oe}3@5BOq2m<>ePpp%{u zR=T?*HdK{9EL%I=(*}r;oL$g)7xdK=twsc4h3@TaP($xC%l3M4fGYwm0lXzZs3(Lq z2`qGKKXR@*{rc=3FCOqmpyPmh960KUR+7ICbVF)Ep0k3!91ws&4*>50aMlwoC_o3Q zv2)t^{`3of9?>3w%1Ch;x;Ki@_vSm6cSCt%Wq%&g27&TOaUKFuga#e+s`Qw1WXxAK zzzczjp>r|x*Ax2gnumrw>*yYKc2_&QIeJJOtWLiuWU(C_?L0QG0v)zk*4#d4x3r?IXqe$S!(9gHDv?JJwcQ zn8PD%5U7e2SCOH5LW34f+7s$^b@&fF&=G-_k=$jZot|iQ>Zmj3rTjxov9w@%WP3fa9S%OWdzL}%oe>w(*P;Hf9rFFWt( zeEZg@bB8&=1IgJ4c^jdlo@nKG=;RE&rmXb~UQlfhoRFMVK(q?^H$||Vmf+bEyA@q( zc!Ud*Q$UIfP?J!ERys1aeDvi_=`}XM4}tQaa~|~36K!Qw5Zu0%-?cqA`Ys2!BhVed zyMtnvB3h8UPNV77z54ENvHy!lv_qf@Qe1(mqX=Eyy7;T}Ud3&HYy&zW(0=H=ABN}& zU7c*cTDHS!X(NwtM4&=aT!A~fh@#69AYem9OFwqE>RS^mI^0Hp97 z=y(pef4lVVv%p-(Oj7s;Sib>0%tziyo49MG7eSK3>#*Z>XaKwk9dANs3?zjwVaJz- z<*%XRYq}iw(-vHP?~E_Z?>6E}r-s8sTT)nS;a+RufeW;Jc&$YQ%{N-OHCl*h{*{IM zD?|J%i||*5_LzN+a8Mg&OE!Rn`p3+7|h4FW1Bz zBZp@fl{}X4SnK%mx%a7G7AEsq3;H=O-0se-XY2*xFnHIl=|Skm$_xc|UZ8*~3< z6kXl7Ja7ExO@uA${;N|=(URM3M`;DIdj{blH)=y_ppDz`)|d9%JBC}gV+`YAU2o?* zjL_Jb8{4R{;XexPLThPdYJsMZ!ud-X^!a7{;M;&Sh{C2o7 zHpTgzd3$>cmUd(vS3f-YsN}Zq;Ko|euTi3vmVtI2jH=^#G0D}>hVcZKk7glG>wznt zpjZpHf`F|cm@Y2^L1iEWM?RiCqb`A(I^%*_M^yp)cmTO$RCGR#|`Z{*Y#%n6?ZVNPNllf=6aw^7I1(_{oWU(P2I>ftJ5yUzi zR>#_>xWCR1W(;BZysPh5y4r@Ao5H9mHfQuJy5H2VGwbf5Yo&V1z3G-=j74Kp{LQPWk-4f#vtqUvHcjFDk> zZ&_oLQdr-Wb@y`n`uFGOHs^=44vr6B4N|^|KgeFtO^>L#ue;sU3SyU~X)4TJxS?Ws zgh{yZvemO|oysCu-*b8Rh=^BDp0XD-wWOhWt~wyfMAgFkllG2p_bv*JdEBhrI^dpU zc&~!hbI1=-j6Km$N1KNBartN}_~_Tu%AI#EieYVok+FY1kLxV#X%11N5RKjOvPajf z#j&jYc#Bn!zht{};>;E{vhbYT%vmoNR`xQ9no%|Dls)EM?ade-V6J8S?FhF%tlMby z7t-^Jg-`pk4yX88Za36t-?JCQb$RhD_QSb;tTj?Eusj>{qU1}n`x&_(&NiUFnObdv z=cA8Y29KQ8^ICti#f&T#xO&>6JG)m8U>$D1cyFKho3wN=Yv(TC-fp9Cg;f$U7t*~xKLjU#}!P+_SnlTjM)PgY_ z;9D*G1i7`(_{!wLGib!TZ;o%qO)zPrgiKlUjKHS}j1oFmTWp9s7%5={LfPt`!m6cG*0CS$F(;)sF*MOc=V58t zgZhsfpU9}n1J$BDpUd}{fjDi8e4AS5h<*E0zkiNwzQCDg_Bl&|xQP)Hqv^6q5t9tK_=tD| zE+HbpfXlS#k!jJ3zH&A2S`GZ^*E(x~>ssJJzt(vOzIX_ta1Ng@Yy^Id^g=Yg@HOy! z4O$nT@zI(+?>8WTmfsA#n+^H5z~e1wU5Lg0b@PK*K9pVQxf8^Rf4z^OTE1Fjx$>VX4Z7|Rzv1e}M!f$o2v1I}}Lp)4OQg5-QM z_SlzibP$k_xP@CtCga2w=ogARC&x+Htp^*PnmYSzzPhupU_`t&B#P1;K2 zb9!6V@EPf>+iHeVcKmKhc7{1jjKZYP-e8}SGiftfTlkBNAEVoZxO~rAkaFw8K2Foe zuor|^3!wO<_IBX-#INm90kxk47kDJxQOoO_=CF2XydMPBKy3!WHQ*HvsDRq}feWrb z`z~YYguG0~KErcEn?&xiYniNd9Q?3En)9H35o3*6mpeK3o%_XNbL<$!j_(3-cyM{2 z#jIUEVr=QrkxS1kF8Gcbenk{H#LFaG&zH)nh;WCp) zYsCq_0jZl8EH_)s$YRQu)i1A&{&fYT&sjbWJvKWkd?h1rh0kL3?);6b%%(On^}6S? zkG#3uxXQ#iZN0-@+o^Z2Vf~O>lW|bei(jJ^#BT3ZXy0)`Z3jALGdA{c$G?OAsBg(; zt@`rq7Z=9vgzHRz)5q0uQjoq@ez+Xiz_k_FGst&~G!Q&noVAB*&zN8qM&Ny9?3Uai%Sj6NrC$ zwQtZc1CQnwyomafn`@3|qj)BBPLBE1#U|IJ4c4sqI6$OczYXQ?4wJ-T5^b-i{_+R- z9WTEBdOPdp@0lIwMPv$l;YLkDDxLHc#|NV)zg)R1t>HOn>8M{mx*H_>i`@wzj zUd8}(vwwGGx~gcei3FTbK#QEI9q)Knq|H!rN}v4R40@hvo>e8Nl4=eHt8C$va+yONA)g3y3RpAS>p?fy;H%u?NZGwJ= z=_U7V&>wpPA8q{i&x2j?nE=}Kw9P?Cr@Q=md7ZCZQ_QGQ0e-Ace=E?J+2z`Qy;`xFLTM zwm%8&>GCJg@rmK_H0wy)b!6-HUH@zN@Cf!g&DweHtolxBWBvLZYe9Hn2HIUtokfNF zBJBp<_UnNI?yRiQ2Hk+ohP%s4K~O2ZyBu#^MV%UTVimRt9-E>9>aZ$YzzeFlIA>by zdB*-ym^@lIJ7)QL69>N-Jw8@kA9cZ`AjEPir(x)>U(B9wUaR=>7-mjvTLOfn5DL zf4G~~E^%>x2mO4QMk*p>J~--enAW&fBhW@NDs z=_gzAG&N7mhA}eCq2wG5SaIelW0zYS_wV`(-}ygdJ@KlYF3M;#GWNN-DU6z8qMgmW zGQXwI8Jhy1ZiB*~IxQB5KRy-*6;LO{;sSiW3@V^bg~bI2Ci}PCxODZE$;{1e+@U!$(mVLUAIDnoVB9ErE1r)Ev!3*zgw>4|FQ8NdqMbQC*u~2b?f#{Q-|N3AIY9?xcN1EtFk9F(Q0#WC&<0 PAOzG)Ywc%S`s@Dy@xk#R literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/refwrap.h.4EE4CF02590E49B9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/refwrap.h.4EE4CF02590E49B9.idx new file mode 100644 index 0000000000000000000000000000000000000000..9a609201f452bc9c8f52df7a00bf6d7174caa8e0 GIT binary patch literal 3544 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sched.h.A585A48500495348.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sched.h.A585A48500495348.idx new file mode 100644 index 0000000000000000000000000000000000000000..7fad1e6b9686824fbcdf8be09c6ca9eef18146ef GIT binary patch literal 2042 zcmb7_d2AF_9LHa2%kE=`YkPn_=#*BwUADW_meMX)OWQ3al(P$q4K34|+1-)d+0D!> zv>c*PFNk7{m{cIa1Br=fVrvuo2Ng7!28z_6i4rj)0W>tCUUFUXl}}g0J@0+_H&X7Z{XI1TD6f=?LQ##tEoF9H> zJ@jX?159$PId-CMJpKA#X_@&>z;(EedN&MaUOcwqk_T`VuF4_mzV#P=?z8_mA8;Pd zqwSEXLrP=Xro6*;{oqdK#dY0adAZCZHaTzC7E>p{H~ zFC_;6-Rs^sG!)&hV;6SOl>6@nQ*-x?Y)EG8vn;cy31cs^6#XMwWm!d|GoHK>`Q~{Z zoT_nkHtDI#6Y3w{em4%d6qnKjcT}Zo!zW8r!1M4tIv8*Aa!WzihdQ2v=g{pxn!A}v z>3(7t;01U=F7ZB|^@MZThpoc?Wz4w^?m-?VZaTz zfnxs)yL;ALzH$_B87`yv)Ij0-$@31r3z)?$-B97u=(XCdy*kdv`TAdnarF%LZ@H0H zegbeIE~FcpfAwlh-=@PK04~8Lbc@ctaXxI77WD%5VINHycqzL5cW%$efZfOth!^`MQPS$OHXCUY4Gk|B~+2nmhM!B<~PW$bGU);djV#Mu4$e#dwe z$O}9&9<`LUc*mnwXKN{m(%!5*(EHe}5y(=H>*;j9o77hIe0KV6z{R+jo-fzi1?}IK m*!}>#2rr^FDPn}v4ON9#4M=-~-@k%AC(pmU$J?8fhW-W*MBhXJ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sched.h.E8530EF262253892.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sched.h.E8530EF262253892.idx new file mode 100644 index 0000000000000000000000000000000000000000..25a38ed32a802278598858841db638531635aa92 GIT binary patch literal 3548 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/setjmp.h.71DEFB3DCC800794.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/setjmp.h.71DEFB3DCC800794.idx new file mode 100644 index 0000000000000000000000000000000000000000..3dd0b37e6f3d311ef425afcabee396677b728b80 GIT binary patch literal 268 zcmWIYbaP{2WMFVk@vO*AElFfyU|N125Ff&saE>>`lZE1`k8sjIi)G7 z`V|&t@n$BvIhlE-6}stprTR&kCB^#1sU=yt1$r3_#A_+fFG?xStV#uHVkoZ6O#<0i zl$uuT3Zxggp6TwaI;FzM#VE`nECzNAkg%BiInZ86D20)SQB+w}7bYyXs@iDp|I1&2 o!m_Ng{4imlX*r1?PH|Cku{emqXl<(V-_wLMjFE|f2_ygk0C-11xc~qF literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr.h.98999B52051858AA.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr.h.98999B52051858AA.idx new file mode 100644 index 0000000000000000000000000000000000000000..a50040aebce612348f480ac37d530fdc583fe90e GIT binary patch literal 18272 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_atomic.h.9687B284C9814D78.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_atomic.h.9687B284C9814D78.idx new file mode 100644 index 0000000000000000000000000000000000000000..b2727d058509ea4fd07b671cbf8c8aea0883f434 GIT binary patch literal 8840 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 CGC9@& literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_base.h.232999EA0B0B9FC0.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_base.h.232999EA0B0B9FC0.idx new file mode 100644 index 0000000000000000000000000000000000000000..0cc8b4a1e953f8bfd7917f1cb7e425dfd609e48c GIT binary patch literal 25422 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 Dy5UU! literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sigset_t.h.32273C537A103809.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sigset_t.h.32273C537A103809.idx new file mode 100644 index 0000000000000000000000000000000000000000..e94bb42ab307510377be99196d85494da4503bbe GIT binary patch literal 362 zcmWIYbaP8$WMFVk@vO*AElFfyU|+1TQ%e-`(-ev`)AJH@iWN%o z6_QdFl5+Bsvr|)a6iV~p%={vS^2E%N)D(rZ{31OC1%|ZDoK!1)ef`qnBK^#~qgBVO80s@#HC^m|SOtiOWWMTjSXK7@G literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/single_threaded.h.918E7314A6EC8DC0.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/single_threaded.h.918E7314A6EC8DC0.idx new file mode 100644 index 0000000000000000000000000000000000000000..ef5698acf850c4698df6048bbe532faf5f858c10 GIT binary patch literal 254 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/special_function_util.h.84282786DB21CFEC.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/special_function_util.h.84282786DB21CFEC.idx new file mode 100644 index 0000000000000000000000000000000000000000..a5879533dd55231e2daad65505ea3ba2c88cf8db GIT binary patch literal 388 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 E0L-sOVgLXD literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdc-predef.h.9EA93D70716BF84B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdc-predef.h.9EA93D70716BF84B.idx new file mode 100644 index 0000000000000000000000000000000000000000..da4995c2e962f26fbfec56a771b59e29b3c868e6 GIT binary patch literal 254 zcmWIYbaVU0z`)>~;#rZKT9U{DWD5gvaY<38I*Hb>+5Ia=cei>mKK+! z=4B)n6{Y6n=m(bQhvety6ayK~MX8A;`9=CUnMtV?smc0hA0J;_l9G~|7N46~5ucconVuJ4qL)Dz8}mwYa_DGPK}iwayq2GqR-9Ur zpGGI|0lk)znU+R3?-gfOrP9r^@?>CIr?qX6OaP3o;>z44P?jr7O)IWpWMIgfaB%*S zN%{;dJRAy|3T7ZF5a8iZ(^j*9uo)P*ICMF5MPWQ14sRZBNf=M%P|{h2nssbUTpSJ@ z4&pFj9*#VoJZTtjmO{#<&o8!#0Bup?Q9@Fr!K)zwQ^dt#!eIg`8^C~vBZ?;qu2Rsc zjLE%oer%2NR00*5bC@G3isy-kEAsdwcTH@iViyw+ zha9gQ+yX8RZ4PZAm`T>!hQc>Xw7Y;N*>TuO!Gw7@GI=uPU_8UfU%L|Q0~Y~3rKqlG z3KQnxP}fv9hw->Lj5&hTRzA-(2HvF(8D;ql#Gb0O-WMcynaL52GcVPe+)i3}nb%A^U@t1>e literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdexcept.58B04C7E9859AA5B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdexcept.58B04C7E9859AA5B.idx new file mode 100644 index 0000000000000000000000000000000000000000..20aec441c4be34cbf94e57ef4c16214c5adc1051 GIT binary patch literal 9162 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdint-intn.h.EE0939E700184847.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdint-intn.h.EE0939E700184847.idx new file mode 100644 index 0000000000000000000000000000000000000000..49bcc250a36938b222707e36d79927ed0de11d67 GIT binary patch literal 488 zcmWIYbaQ*a$iU#7;#rZKT9U}Zz`!63#Kk2=nKOVi7}z8im!xFomDn+)W#*(>>Fev4 z78mJf<|XHprljguSeV6|nds(Z=9O0HrstLFCuNot>qB(t0(Ir-Wssn+q_QBj7^nlN z(aV+Jp9a_n}L;qfk{$GQW8usaDpAq$jBPw zbMW+z1JmNU8Gv46k`R)R1QQ4as&*M1A9&IdxEa`h3Z#UjB*6qiL8`Cg-o}l~lDHYz zfeOS0#l^t{LP1e#T5&OwTNt?@ZU8%hfdS?MpfJdKs3-%>UZ60@QkXEzHlQ%bDwyy* w=C#l7M*B>Fev4 z78mJf<|XHprljguSeV6|nds(Z=9O0HrstLFCuNot>qB(tmIAfq>1B|hv81vfwHT-a zq|?wWz68uLHi9zDOrQ)4Ak9!*nVZxCbfVKQvzjN9Z#!}`0Nu|dAuJ&cCKx!u&Szv~ zZU1rPWk}%n7H$T1paO9raY-*I$OUl&*a-{_Fc$!YLDoY>8DRDTg+Z3WgkiP;g+W%q zg!kGl@!A`Z_8urK%poiT6J{t%%}E4tii?tq#X$^a5CH*9va3HFtWfve!^q4409{3R AkN^Mx literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdint.h.22B451C129B23D79.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdint.h.22B451C129B23D79.idx new file mode 100644 index 0000000000000000000000000000000000000000..fef4346cdcfc268373ca66b3ea664f9326487ba2 GIT binary patch literal 4626 zcmbW4dt6Of8^`xrInK5L)Zd-ccrk9U3Q`Rw(4e{1cvpY^QEnH(Gt zz}s`&7HBZi+5iuTj&dFuhTJo}-J=4D<2vi8mU2bo!{6c(umI(wDcE`(MyJWYDZZ1HEE& z`gpTfv_9Tvw$5bqiP6oD^3rNlYK_6mXi^zWpVZp&LN6Gz{{Lwg|H%z4LHU#qTo|QQ z89r%n3+EfuMqQ!?8o~Hx%~2Um{RYi4$&~^9TT})OY*88V_j8P zvsjhc(mu{)fCm~J_Hwxjr`dmk4*!PyrMWJWJEtn`4i6 z5xCAE=3}3GxsP6S({3HCzZ!h!VK2AnE1oWMDQ zAiy!eT{KK^e%naTa~FO6*wCZ47VTdDjFu(c7EQoKi`EP z6F55%cshCZ6b%#nkZ?1}zHa1cfolhXp`C^*MMDLad`PWX)o!g_?GFOy3Ia_hjjL!_ z4-5Y_adnbg|7wBj1cIsdQ(Z*E1kO#5Y(Fbq(Sa%7GMC`m}FxJxTQ$h41lJxyE|TQJ$eI+C&;08M#GKeByt_}7Wq_TbJ%Bo{$KTgv)3PIHFrzT5%8 zGEA0Xh_0phsBdp`8Ti-**(frwRR)HrT8gk~(u&n#Gdn{I6EQ*3S&Fopz)hEu@xjU-K>)U5vK2!LT1rJ_?C5K+=2MW1NiK#3WGN3$?OvL3 za$E?23`8>6sG90SCZwhOLV;5or@@k*+j`sED%9{LxSu2bIZH}ulLA0@C`o^(sK7yZ zR1*sBjfiYy{jUg4pAm7>Dhxm&CWS2Eksf8&8b_U*2A~L&A~w{biDQZ#!>&gFIE=|* zmIThPe)Ny?n-B?LA13=)S8vv5RtN0Or62{76gJp~4YwNB+qa(%pb3#C1RIW}9CH5& z#VM{(kcLPai)`scEAQOjZhZw{4I*n8hzzbTRr>xh3&0YxL{8-9a}N%^zh|Be?t6&b zV|r15n0Nh37 zE*t;HM>Fgf*ZP|QB$7mVJTGl|)#r7s7lV5TCOcS1{r8=mdBbmJ5`a8R@-Uo|mU8X( z+Arcuh9m>nhRHUT_Cq5(KRvd5(^3GHh_6KQ$K|}9|L>uX_pAi48I#SdMPAgjJCz~F zDL97sV=Q>mu?B#iY0|5u!wlT?B$M3I5e9C0eo5}5cKsfeT+^-x_c}z@v1QnI_}I|_ zx+UKNSU?uYp%~Izg{)`v-2m=gnCxPqP%NxF_oL%M3XWiMgyrdp4>lvzLE#$#m2{E=pvSlrC+YkKH$A*1 zcauS=(i`8=Zr&pPEt1a$ZFpm2z?H7s0W=`ez(CixDNo(Hpj-ecn51BNb+$HFU2WDz zQc#RZF^g=u`E+Q>f7)Eip`oA}k!rS;?9@!y7}aBYF@T+z>||XvH)(E!^f^s|kr?H# zuKXkV?#X@&O27?sk4q z4>DWuBKJDcDxsK@h<>p5IMtUqVM4g zrybs3ZUCU;b#l_X7A@+3;^XyKZEY08tcJnQ2urb11X=~QsD)aEwy0?pS~+YsiYx?w zE$X|FVpq$02~w1_tXCjKMa%kSq`2I&{s1W+w5&J751p3v>`WgATsrref#U-hE z8Hq(jsX00NfhGDO`T04;K!$TsYGO%#k$z5QQfftNvVLJnGE^ivCowM_B(4u(8CvLP z<|XHprljf@m!xFomFQ(K!0ae3F2a;7uFOpWxuhsHt+*dZNBP^t{(913#K^_S%fTxF zb|jE^Hb+L~nc}_@CN4&8Zf$*-Fb|_Chp7&Xw|&<_kL|&c(|~%lxV7Y9!uL3HovVb{ z76SF^bL$(ygn1Y(IV|BOeNhYU-`V-`I#913x1J(Q5zt*Zi6BmKQF5_3h`|IRAb@c} Om@lV+qOckx69WL%^H&W3 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdio.h.6919C07CB89D47AD.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdio.h.6919C07CB89D47AD.idx new file mode 100644 index 0000000000000000000000000000000000000000..7962313c3fe81739e0c608bf20b30e54865131f8 GIT binary patch literal 29858 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 ba*RL9ALKuS|8bvMM*PR}e8lp6fIa^oieM{% literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdio_lim.h.09E79B5FC5C8DF86.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdio_lim.h.09E79B5FC5C8DF86.idx new file mode 100644 index 0000000000000000000000000000000000000000..ffb30a9a6359a5954ce4c5ebd48f3a717f176f2c GIT binary patch literal 390 zcmWIYbaSg?WMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`V|&t@n$BvIhlE-6}stprTR&kCB^#1B`KNt@j02fdKo}7Dsz)S`ioN2ivI%XOR+w# zY;#mt7`Yhbx#U5%fWeB>nngBC_;i87vYfI)FyXClGwiM1CfYOdFv{`CNyCJ@zo)Uv zcD)S;39HK)z=SyHCf3vmcZ v!c>UDK1Jb<_0ks-M7h$T=iMV!N33jZfj6h literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdlib-float.h.126E8959FAE2A511.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdlib-float.h.126E8959FAE2A511.idx new file mode 100644 index 0000000000000000000000000000000000000000..ff5e3920adc42e1b35b7c3fa2a1d52cb0896daba GIT binary patch literal 162 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_algo.h.AB8A282D138620E8.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_algo.h.AB8A282D138620E8.idx new file mode 100644 index 0000000000000000000000000000000000000000..245c3a4c253200aeeebb6cb42a136272d4541b78 GIT binary patch literal 108226 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 H&-ecaStqtJ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_algobase.h.0FAA8197C6E90065.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_algobase.h.0FAA8197C6E90065.idx new file mode 100644 index 0000000000000000000000000000000000000000..e0b8280169d2ac7c5e2554a93fa0c2f345c1c1b7 GIT binary patch literal 34222 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 E1N$WB)&Kwi literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_bvector.h.4E41E08954D1609D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_bvector.h.4E41E08954D1609D.idx new file mode 100644 index 0000000000000000000000000000000000000000..66d62b9ca196195222d783725ed264e4c33317d1 GIT binary patch literal 23442 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_construct.h.4CF95CFDA6FB4B9F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_construct.h.4CF95CFDA6FB4B9F.idx new file mode 100644 index 0000000000000000000000000000000000000000..29031565fa7460194da837fb64919c54e53054dd GIT binary patch literal 1362 zcmWIYbaV4!Wngel@vO*AElFfyU|CnXlA#;29$B^Q&eyQH!pl?dH=spY`*kz!@VP?n#W0!%BFxk=f;Wb)a+eCub; z?QA>@TtW*sG22K`624PM{cGhivFWtLBly~wla03xK!@vVn(8$En$ixe!7&uv(7&sV!rZ5zxrWLya(%QRrZ{H6}(3YMQzfx>~hf#xtzX;#{+sIJt^0t$QZc__k6 zKX~b(oa67FEG8bl-Hal;8I@ti@bJB16nTT-H}*{qxa0f0hm(iTkHrt}Xdb>SmMkP* zCnHNIBNBfeBgZ^O8JKN6d|Mb z5D}Q@GVA;Ta5fL^}y7WlL+!vaZz%yHHg9YZo%b%^URUI ZSp<0n_!$I2Vi3R!V=yrABbWjRCIGQ=iU|M! literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_function.h.0FFB6EA3463E337D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_function.h.0FFB6EA3463E337D.idx new file mode 100644 index 0000000000000000000000000000000000000000..fe6da7d9a70d1aaad2fce99311aa8f30ce9309d6 GIT binary patch literal 34796 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 D6CkG? literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_heap.h.2202DBFC4AC7A855.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_heap.h.2202DBFC4AC7A855.idx new file mode 100644 index 0000000000000000000000000000000000000000..7ed26dc6e3fd5ee476c892f84ccfa95f73a9d058 GIT binary patch literal 9860 zcmeI2dsJ3c7QpX0XL|*_SApaeh$xRl89#XhM3V+im{~;3IO$j^k555B==(r3hcVxX z#E_Z@A^1QF$(A4s7m84V8d*XiQWzy_A`=QKl3L zA|WA8hzy8OewPc2W8$;{8jU7duhYaVi;PQ-(rO}Iy@He0M4d$-J9Bd65Y!s;Sois7C|kN&58kvd7=6GS6)voJ$p_P z%oU+70$s$y>@0?}*kYhLQBdyg!u$6MQ-W_bsm+xWC|8=h3vjnz6Sb+d{7Sy}n8pi| zFhGONW9===-coH! z2S^7CvqlV!{WdB6G+>iiX5UG_y2fAB<_-fKR+_8BP}kp_A~evPPPK38$}uh!s2^BjPch&lB-H&$ozpi{~C9 z_VAnuVkU6` zE)6|OPqaMh=Wyuzd?2 z;Fp ze@(=%dF~}*FV9;++zMR%3J@z8?>XKR@+bSgCx>~zVNbVq1x_=cVZ`Tt#KyM8Kecy; z1<0Y+q1==lIysc{-!$Z(hPX*N9m(lvH1p?l+Vz>nN_knd!E6H{3n)PJ2fY4z7bu> zf9LKsA(dDDX7IgOtw`{2Z4?(7tjK51=;*2^4=y%X(c_gd^MCXlzr;?Gm-;LXWYf`` zu5WrVN=J_AXbR&@G$9jBWqb(PA3~EDmm>R8o*R*OBYK*ZpF<ubx%(nM z-ej<%4fW2p&#d-MHR99td%5Iz*p}MOMl|8kCG8Ct))p&a{jiqnYcjTle)~duy0s)f z3(wlJd2InK;7AKvjuIe&qhv_tXdQxeh~qp2c|4y$aDwM=5q!(@eFXP;&ccv|Ieirv zDtKf1 z&h=ZevxoUqO!wU@#}n{-!>o2|*V*9LC)m7a@Q`X;9=qzGe`W44+mA4v6xnE3vWrOa zK_nhT7aWxUE$q;YN=$q}N-;uApgK9vi0Y_SK#YxDMs7n%GPw@f)bacf**rvUbOA2OYp~54%yAR8 zY2vvV+cY!oexo@nc+1jaQIZ>w*nr$=CrR=NES|s|XAv=raQqDszu|csh}(cGKMLYe z#uqeI-80*45B^H#p!=UIy;DC={>X^Wh7@&catf>u8PNoqH&x;*HEBv8uZfwDPg&}s zQX|?%JyEeu&DB!df<8VvQD?WQ+ztj}0eTta{#byK8VfL1V*$o$EI`Kt$Z9OWSd9g! z6(Fmz0An>4V64UhjMZ3xwWr1cjMZ3xu^J07R$~FiYAnE5jRhF1u>fN=7N8k2kkwd# zm8-D;V>K3_X<3lfSb%y6$Z9M=BXf||Sb(N;-?v-;(L(Feaw9rS=va;I829v}Sdw>R zaW@|~)nKuP@gl48*L(7XW5awwocv33c1G;ul_MlsH(592X_CB3S~ZsTqa^=KTz)1V zG@~IY84b6cFqQV3Bv-=tN_dR++w*mO^NTJ$`mquFZS6U|_o2K?C&q%j8BN-Z-08i5 zoPq2!_-yGRW>K7mzcW!>y_4|fB*-7)x<{=npVSR%Do6#C0(DcG7Id!}9XMLQy4B!GV0Dng z?mU|t7l%0ynq0m9ux)N&+c2xO9$VnI;DfR&zi*sy8z=9s2)TKn{M8O+t@0rfKjb&; z_F{1_zajSkiw}6NB4QQ4;r0^|e`5Satka5-VNZ7%aW0|D3&nxe4<@Js(>0bdHq?(K zXu*Gvjd7_}7tIg`7AZ_Uozj~)+-fb`mwnou7=G7?U3SK+XxxM!t?ntgjW3b- zB~m^CQ4dM3#bPbyxP^!lM>pcDXwmR4c;}k&)~^I&}rks`;F1-BK4a7 f6Z!CqDS}JUogc~QQIasa|B`x)q9@9?Anf$tSCHjK literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator.h.2F3524DC454A6598.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator.h.2F3524DC454A6598.idx new file mode 100644 index 0000000000000000000000000000000000000000..459fb64d23ca619bd1adabe050fa3959ef5dabd3 GIT binary patch literal 23922 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 V6u2?_;ljQjT}2fm?Vs1q{@*@6gzx|W literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator_base_types.h.9732F67131B44010.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator_base_types.h.9732F67131B44010.idx new file mode 100644 index 0000000000000000000000000000000000000000..4f7245ae51aa3c4addfa0e669fd4567165c309a0 GIT binary patch literal 4180 zcmbtYe{2-T6`ncFnfqav0~#=3cWmQ;51$VMBH$#3;1qCiRpgkeP10QV_V(`9-0dE_ zdp1`GRNF}qF-=2S(kfCCi<&eEM2aYgrU_C-XoXb%2(gKyiV#R?Pz$0Wl&T3)>6@K> zd$uXcAGPeAn>TO2_v`!S5FKsn*0oP3q&3mDEvr~k2_a-A{F#=a4wu3Q{^MtCP25nG zBx9|5Hmhr_PPG(6vUG#V8Obyo{ovA>R!y;G30*Onrdw%MOR;#~VhJUwY6{a7(^3-5 zD&!Qfn2n6pwM_t0OaPK4jj38%F;t5s4L!>M2azqEnNqjHOg*cx9^Kdi7@cXwg=CTe zo3x?aNmBCAqH{gGs;x@Iy-OEA4#F*3T8fCTO2+ccJw3`>>s8Odni2!O+} zG@U0e3tRW!@N(UZ(jw&qpCHuB8Pyqso|$=1kB&xr;tUTnt$K$cOrD3I== z4SElg^?U{zVTXw;tLx$A@onxjB-O&2lh9`D_y5uAPDml8XpmM0qCx#8bc30^ssdXh zF$mKm83~hTHF;7v2ZiCh075cSdEO4F=^<<}blgEUIUvjFssd6nR>9_n*&rwZ97?FB1*6ZaW*R;xlQ3-!2JCQ=6B7UcM)=8`Hw-uklxA58vW*v5 zPg=5gs|t`TP(sxjY^FQ?9Pa=)z$CzY(2bPW62QL#mxq)|>A>`K7RC+42Skm<6_IIN z;uMD1V70TsOa;4aHky=9UsGJ+q(I&&-xt36$YJB$Jcw*>&LVa(3lxXptw zAxV>!ai&dzOXDmZiaj}58IO$lw2-xG0>o)gPs$W)1)16{V-o)acT>f8c+PK^XRujj2vt?z&vNzX2@9l2kKFb2J*wn?_XC0gMN(S+w#ZHK&P7EGdoVFEn29b1QV+f=6V1)yiP0wSogO%{;9ZHpw+-kF(u^#LECJ2j z>6JSwa=yLqi^|MwEAAAHd0hf*EByhB|O2C5mO;V}p!7R1QNFTH*Gm!ED4km-=@leFSVy2x43<=Xa513&rl z<$~8Ur_vibO#`RtTxUU-KlFb2`)3bc>xGgb*$Xs$fi^h{x;*_G{X4JzY~;sY&s~u0 zj=+wY_JjC*CDcy#`+tAGYlBv@3krrz257|qt#uZ}$mqs952xN543ODS&j_s_q0P>M zF8i~&2g=@g>lv?S9)#)gb=BGr-ji}W%;uq%75fg??(uqNfkWIEue2ZBA!s`ssjMC@ z-CX}71c6%4(fV@`L@XHO;i1(lpFY|#3{8VP&d~4~y2@G5<*C;ndrqEz={4Ro5_*#c z-h`%!h4}naJ$5K>^yI!nM{5pv$=AW@QQxEU><7;UxCm4#8U60|_^W%~;3%b`vovrP zP{e|PUir(n>izF6JO!uzX==ZItNi8*_kj5_4P2&`c!0u$w1g^=lPE_x5L(2(=TbN7dXFD( zhl6{k-CKh|>;Ku8`|RA%CW!Dko%K1b!HiI};4h?#Kqyr>;5tSB`oii3b+6TT0Z?0c zTQ%aNZoylq75lflZ`BJ2w*HIz_j{`PJ+%mgGKM#VhOxBiI~IO+ymn;klwj!bwU2K^ za}elSeumCQCI?~I<>%>aP-g8~st$U>1@_Kh!cD2q9xg zq`_3bty}~Of?N3rU4-uiL6ha@=pvLWC(F!RG*a~M^HlVCmf;?C57gtLM{_Wgj3ggG zULqJIB@~a#fX0A8o+%J z?@|Xchyr)_S7_N4>T)I+x=Qc5O6!X6-=Luzl;IvPl_`GvGC^}N6kix$g{!#ENB3=V z4Xb|p@2dSD-Jf?2+Pgj8U+ny_-!<&6zO?Mb=990uh6Al7y{p?d9CHo7`d!bFveJfA q*jTp)90PGrOhYzn`B3?P4mdwE@B<;CitqhkUS#nT*F7_5kpBYK;)$yO literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_list.h.9477E4C63C8F9398.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_list.h.9477E4C63C8F9398.idx new file mode 100644 index 0000000000000000000000000000000000000000..0ceb8ada97c2e3a04a8d910b4969079081082669 GIT binary patch literal 37558 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 Te+iTF-(SZ0$Hj2r5zPMqBhR9H literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_numeric.h.0363404D15CD0360.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_numeric.h.0363404D15CD0360.idx new file mode 100644 index 0000000000000000000000000000000000000000..e4798fdbc4755ca8bbc1b805bfde05c25c717220 GIT binary patch literal 17862 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 GH}W4G?OJ^R literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_pair.h.3CECDCC6EED8CAE6.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_pair.h.3CECDCC6EED8CAE6.idx new file mode 100644 index 0000000000000000000000000000000000000000..901e226d219bf804959ce1451c2ae58a3b49c157 GIT binary patch literal 8792 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 bw3JT{J~s0Ffuk&Kn3QJr@V{a7AxZxQU=e-+ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_raw_storage_iter.h.BB95DCEDC42F529A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_raw_storage_iter.h.BB95DCEDC42F529A.idx new file mode 100644 index 0000000000000000000000000000000000000000..b29322c6c8018bba08672040fc12683d3c4f414a GIT binary patch literal 1184 zcmZuuUr19?96r11an9>ll#+Xpn`vN*H}?=W)&doEtu|bHN^xE9uI|peKizZYpF{|Q z!Xh71LJAi2R6PU{Bt#EB_|StDSWxuRU$CGI34G{5I_J)xpg6W4XW#cb-}!#uFB0hN zoG(VGJsucKX;fiHw4eP5HT4l2JMfP~lA;NnNIKO_g=S1iH55W5L!(4ejG>IF(?p6$ zgi)GA6Pj*HrbcoGqxCe+uMlP<&YQ3k8edU%G zc|fN`Ce(DIEaI8 zt023zH`KK>9r+f@pLPj$M#pj7X%(O|B}=c$&aOQv(8GAxiFpCKYiRx5V5{%7ODJQv zBRJx;3ea~xzVY9W-u>wkN*Nu-VW(Aq{@run>*nL&FPBilXj(85%=O=H@qfd z6{~KDMZ`&*bVCXvPT5kG@UMUBPqKC@;IWC=hkQ~YPlO#?0Ey7t^yg2X3{u z9)|8)Gn)a4+`h-UN6}~vz~G-b;kyKpw#DbQX7#math?XSe;o3tKDTgUeLl3j3x@ER z2wyvhK*9{>>joG$%?$E20}OAlZoXcCP0djDF}E=7_KFcPRZ`C9z;n|_x<3`Eoe2F0 D6#aM@ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_relops.h.6660ECC9755BF665.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_relops.h.6660ECC9755BF665.idx new file mode 100644 index 0000000000000000000000000000000000000000..233a288faa55132d1dbd4ff60d48044aee3744e4 GIT binary patch literal 1428 zcmcgsO=uHA6n>kuvE8mwDSGfAFVadwW0&?MAsb^Xf!wN;o{C|!nQf+Qc9)r1=u!i= zUOb41h}Ry9NDtyk5ig=QJ$MjL^)4ugcMsz1rrV|=#U^p{4Ff^ECk8)SOr&7m`$A2JDYg%m-hI<>S#O5#hYE@EkjY-(G^>52( z*XuKirq04F?gT+Tyf`+#m0y-{HCxRk@Vz@f>c}5#NO(- literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_tempbuf.h.42C5B1935AA58E32.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_tempbuf.h.42C5B1935AA58E32.idx new file mode 100644 index 0000000000000000000000000000000000000000..8412e4d8022b2de42ebbd0e6fd43e82311ea7ade GIT binary patch literal 3864 zcmb7Ge^3^$-P`*fEbQ$byL-qr z6*4MCyov)iq!w2mKzbBE^RkPa_s|jl9)E z0gUPbkq{N@K~+YNVT^o1NkU$%391;-MMW-52FzM4$}L#dMY$g70Jx_CW2pd=>R^f* z(nUXfDC!L;08qLJ$+UpdgtcWPx{kQ`g0evH5U_&Ubp>kCc~M514h-rcv7(|%VY+PI z+sF%$5DEl<>8cB(Yzz)ih+o4}3sFJ^l8TN5MF!P^f{wifgrlGYRSgr08&QB4)v|H~ zr9|0cFL5U&5LRW_Urv}sbwmK^^{QBd|FRdt1wOzFq8>sHsF?T#WicwFCjJyFK8L$5 z;B-Px6}mz)k?gBc3oiwsJkbXbvNA(e;AP~&(*j^`VVMiEBeYe~F@W<#R2)kg)d`a_ z{5*6TBZ(9Sj-(XuR&g_A0nU&p66(i(1!e-M24%j57bV^!;q?$7Qi4cpP=XTS?uS7k zSaP&;Bxj+9K@;z^LecWc06eNHEg}p>1RaEKP?bFhw+c8iBB(wHBPZ)PqBNQ{t9672 zNhC))ub_IYyJv>h9TnT*{N~sONVlf@0OQmmDnU&OA%1%9y~q>#R-DF1@<~AN92u@DkC3~O_6z+@Vda>a&TKy z8qig*=<~UCA|JSyMWM^7vRS_6j&Ha*DWSB5@`(~Ib-7$YO?8Q~AO*eHCFHHCf?ror zk;?;9<QWT&WF6C5oe@uOZ3(H$t zO0_7Wm(oIhPZeBSqn8rIz6)ozaTJ$Av4UO5h`dlq332osijI%_GA;Pwor-@F}>uOzV4D_K&!FUutsh>+n(5-YEb=T{i*vH$IDq3DKD)@N8<9+msz-dG}`3o zK7TXEM0nL?_u+}>AI!CgKeTdXSAWwVoealbrxUKzOCn!4@WQcuOhO+sWA8h^Hhy47 zVu2~qQ?2O~sPG)W=lWt_^*f3KVW*(SrmxP(} zn0=U8c$mqK*}cr#UZ%vbojqsx_QH?cpr)`&SZ}Dgt+}t}2RnZ3vmo{0X>sRYi@FwqK#sV)j)!?P_c&?pA+x`h|<}jV7YbP(^NDzq1kQ*)Vs*G9z9c zryE8;Jtmp_cgz{MB@|zhO$XaYdTu=O=7nYp2B~c;|NdUi<>myA^`v+*jGluUnZojz zg*iMwX89KTR>UkNTgi)A>SA@)Sr0w8hhAuiy>9Qbi$^}3YK0xSM%%8@$p$@+?O|*^ z%#7`5@Fmr8sry0KFtaJl)EEdH+s(}DW@cuXV|$s3US^YV-Z7e!v8nx`gC;rFZU60= z+VHt9(?L<`tu?QS|LL;Oselj0W#h6V5HICQ1qR=(zxO|}p)2({i|Ad{XI1lV>&GnI zs!w;^kv{jm2+gmyS0@{!wsH1^!>IE`i2m-?>Fxe{Gt!UDe`#bpGmZpiLvRZG=vYwW*7-buls9QI$J%viCI$ zT2n_t4;&m0zHX|()<5NX;gtn%m<|$?*RCBn_>&W+gQ~M{Emt!;Pr_vuT{xp=`}D%a z?C8Q7_N$o(UUx4zangji z3#uKW;}6AFdUt>8rNO4%?|*NX*n)xKw#LdK3&mV<4e__PzVZiC_RPlyOa69r>+n7E zeK{KQw1%Dyn!b=<7ejfq$qaBlWj>`S{`p_l9H+a0U)SIp8x;= literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_tree.h.0C1ECCD6AD44DC1C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_tree.h.0C1ECCD6AD44DC1C.idx new file mode 100644 index 0000000000000000000000000000000000000000..00d93fe88a6c8f5a6bb127dd0a3076cf2ce61579 GIT binary patch literal 68546 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_vector.h.A2FA968BFB875BEC.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_vector.h.A2FA968BFB875BEC.idx new file mode 100644 index 0000000000000000000000000000000000000000..d579800f8271859f9d9b3a4804009da2d3fc7ad3 GIT binary patch literal 23386 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 BKoI}{ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stream_iterator.h.B499C87E9521D236.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stream_iterator.h.B499C87E9521D236.idx new file mode 100644 index 0000000000000000000000000000000000000000..9f8bc8d429a20a3ba6ba2dce7960321139115c3c GIT binary patch literal 5268 zcmb7G4OA4@6@G7pL6%`elwAa+BPc@LWyK;Q!9OI_A4nR)5y**>Wp|K8*j;A^l~QdA z+G=b}OH!p+tI0_ksX0QdiIEenO*Ds~9*jn#wp63UP}>7Udy<|g(mOMIcPV<#M9%Ww z+;_kG^X|RxzE`j$H}_ZL30dS^vc6i7?LmZ)aqut6qU(iV_)z|gJink!bP44=|6|d! z*5wo=-cuucYh>Of3!+{2h`c0J+ugFuA@Su3C5wW+T1qj3Xkmp*;vH3XN#eaIZFdJG zWe>kj1U)=_z`941O;H44t=22>g0wZnp@2!!l)BVRhsOZswy4)^129Nsn&M!auT1Z8FJH_NIizZLe06x?vv4!p*_wFpfpd zunO~SIKWh6H4LDJ;L)V#5q}xG+~1>$Nr52Oh;CjMYXsg^uGS$sF7cvJE{IC;I$h=P zCAeiQe~S^00^mJv5R-Vj%nNR()l+WOG7Dv?7Ao&is#QU_J#xzTG^W&}q{LCvrJAxs z$(Mn$2P~zKGLNTK=U?B?*oP{s-CAk#Kx>QRliYv({czh?%^?yF*|C&DC|7o4) z{|q4K!sm#+Jh1RkUqG2pPIW?(otc@?9AQM~un=$^@x#_-wPw|hKsJt)d#G86i53E> zwz_QdC_+lk6`c#-aAr(|VSF6n`YF>-Ip0J^YhBuWw01F{z` zzy7y~55AsiGQ@y}3zWG)O}+^sZzdjHwC!$nN{At1BH?BjXT+!j31x!71`Q7Gd3Is_ zk++YgMi|VX;|67JfEU_?I_O&spSzn*rAHW|0CI;icL1VI2(g@OIBm=SA~%fu034lV zot2>u$R3iSzUm(Md0rR^2MzC2>-#j_HzCCKm)3DH6Y}!4y{a^r!H1#?4`_76Q>NwKG9s)z3txBYDgJKKgT@BsROcqkutuhtNq_= zv^{iCrUUk%O$c#+w2s;N%S-hkh6&(gD>b~e!fLxQN96U)x6=1oJn4O+mzrOdam z6Kz60Pdy#?MPdEjosc&0q$s+GR|jN&_ipjI?2lLM(e{x&Av>8<24r{D_TB0b8~25g zNRUpqrq59aWPd1yTO51xT39j;oNS^@6WG@#C6b|PBx7@CeHXtvZGRYvg`BoiYdf9e zn^4c9WfMOtiTu$Cvw;UQ#Y}OCIw1RHL(HbVeZl9od{!_O9H$J({>M<&wPkyqm!PJ= zz!7RaLNk05Lh3fh1fAa%^B<@yFpy?VOIHVE_k8;6f(}dGpjO-6G`gGeoHikZK&zL= zg%Q${@$}h*-gaUL;_B&`dO8+QjzZ6>r?ZjXdhfn<@ltQNF0glbdl%i&rT}{>+e+-{<-F?R& z)74OaGL1P@JldiQMBgHeYJXY3?ONaTKSVdMYS|%^RnJ<0QjXRzYSL0GoGLy1gB1z=6Mh?f?*F*uYwNAvR z=G__M?l#W`d^VFEjd*wGlPgbW-p$aho`MD4{R?MA%-2oPuF-REIN$vJLR}y>b81wZ zI7aMdY+ga#{LdEa%44?&d9BssRK?GF>q zuK{mtIktS%hSwBqQoEcmTCvBu8#})4sfEPFjgE^!?_d10=c#?KoPWW(S0x&rxBug+ndv-Ss;7cum(4d{c}vs&5HY%yM&>IgtS> z*PNSxhYx!x_@ccouwwETFB^QdzoZ4cX{Ydu#m7b{n``ep5%Q-XmRm_z`kN)oRnp2~ zluYGe)R&ZgN&Pfq>v;X(;rRWaJJpoxj|*A|GWs4dSOhG0j55b)WPt9V<_?;Gr%0)0 z^97oKm+ipIwLjc)y5@jxz(%zU*qYxkwdn#!8`IJbZF&BnF7T}hn+}wk4!)-g%=_ei zNz3(^2X6i}=Nj}hTb#{*3|Q^}jXMyy zKPJ~r{^a7Nx4+Ug^OI-(9yV*mJH5KV!J5C`+b4JYOBZ-%HNP&TU_rkw5Ff!1Bjp8* zp}X>`yJNs>|F5n*wowSZ_BO^C!`ryZ9uJKGF93qN{R;?{M2BQnTE-ac8-#FwJZ2Bw L_1?YL=@{}qV%)%l literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/streambuf.99CE91E40278C69C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/streambuf.99CE91E40278C69C.idx new file mode 100644 index 0000000000000000000000000000000000000000..d9f5c463815bef7b04315816df9dc28bd7b52c91 GIT binary patch literal 13516 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/streambuf_iterator.h.27BB5433434D1975.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/streambuf_iterator.h.27BB5433434D1975.idx new file mode 100644 index 0000000000000000000000000000000000000000..c54e9a552912ae080b9ad83809c8c67e5f2ae70c GIT binary patch literal 10956 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string.A57BF35B82FBB728.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string.A57BF35B82FBB728.idx new file mode 100644 index 0000000000000000000000000000000000000000..4f2848162f7f6d4889c98fb4f2dc0c15d88712cd GIT binary patch literal 2460 zcmbVOO>7%Q6rODCB;MV|NgcbB=Fhg`Lz*;;Lls)fa$FbLSt_X71SP#-tv73Xo%K4} zU8_zDhc>E&TB%T|$^nVA$A|+}F9;QZ;DC@2su1G91*NKrs8o_lK=~Cgv(D_)AR(KP z{q)}WeedUcGb5i6)9EW70FEq)wX$MKE&zZJeND?yGuXf@K6)k^vsPCWT`DWVBSp!W ze<=atD`g`V!;X4^Sk>tCKQ^A6YTP*Gn2ypIc_Qf8^M<5aW&-3SQDisCbLu!w~AEGs=BEdR+At@(hEvfl4Zp-n}nE_mX)+Z1@W!40LfQ% z*-|Td3lP;(j1~?6E{s63xVkLP*-BfDXgsp!(f9^6H7uoO33|1x80b1QdyM|$+SCqC zXQvPB*Hpb)+h5SD|GGyz_e!qld9{GpFG^++Jq=5-SY6sLfc;kJ1>oF$P$ich?A&(r zo~)L0p*8?Mc=xD$Exj?`!R#GqhY}}wZ2`LKFUr59j*k zBDIT~TjOuRH9{c6+QgAda_lW2}SuoFyb%pkj3dwj-8~BitAZU`vB2MJABG&LxrL0MQ$w|OBv=Lr=`{B1QKD~*mn2FBB zN$2EPqe%En(?|>c1!qWn13d)lX6*w`A*nzrOycn{9Y}{sojlA0GGQ`n9*O}mOpa{) zjWZjcT3`K$3Y+uJ`AEa)wrCRW*ED4FGpy{wqP_w|0ic_z4u=5r(OvlUJ7cR`cW$2T z=@0OpUEN-PpKte`-X4|%JoWNZ75_=vS^Y!-fTOB21^{-`U6!i#H_f(t=x#4n{|2UC Bs&W7T literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string.h.979B97B48AB27554.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string.h.979B97B48AB27554.idx new file mode 100644 index 0000000000000000000000000000000000000000..6e54b741538deb3bcea4a2622c9bb5b9073a8886 GIT binary patch literal 14032 zcmbta3wRVow(jbhArHD)G>Gy_I=q6A5E8;G1OWrlfFcl{$}UbO9WpwZ3DYx3nukGw zMc%APcm!C%fDxAnsIbDfF2q$q_IkmqmwliMWY{31KaY>St0Dp{d$amyk_(48By3WbS_Lg`;TF;)- zr-yU`dczv|3d|^*m#TH0lbP)e28^&~a|ujEy5Cni?|xB76l#R;EN_Io|E4rCuWz>D zGxh0VEzqno9P`%%rNBhG^eVCc4^Y?Pob|Gc+Aog6W}9Ai~R>FhWG2Hd?i_Fj5?C6ATDTY9!S- z`zQ-r3Ly>O3`W{(x>I#+#NkvEqRXxH;^?ZQUf@no{4d6@-7HF3*5w)_{8L&b}NTF7VGYiB2 zXnuj!XrQrKt3;XTb=jq~u^w)}D4G#1Yh*T*YsApd<#*KPM5>`)%Y7WS52icw1UPJO zF~_SkZ`lCUJGLsD(~dNs%qD@WfkNI!kQ@>v8& zQ?{mD%pqr<9It&zd_WprR;CAvw1V-uS}+g}Y9mG#Oz5p?Y&;OuN`oO?3zv8T+8E2f z9&cC=8Cr2DSlU=DH&|Nc0sb*sVR=|Lv|zDTkfC|V44Fi&gOgBERn0MRNzG%>2aKVW z1pP(ulF`UDS?dmoR^;>QM*1wU$rlW0kQ0UQQ=E&d5eLI1Ivf^$zbC90X~n@%X|%1W zTErl;7{O4Oe1{@_SdF#jM}CAFo3*Sw${*lr>gZH$Mg+VN2~wL>YUPuXpb8<)4T4DX0VPq078v21ja5c460KwlsXkY6kH_+cBS z6w$yEu{;PSWSXuO`$F(M4SKy1a7e(blQbGLa^#3dMuI8Y!^5W*Oc}fVAG?+rw|2B z^7f9;FD6b+nbs#ogN;$@3wXj1Hkh$E7=iVG!LWHi+!GM}#r#4wT6Tnjg#p`bY#Agb z1cEs{puMy#81jV5!K~t9-I^n$&y4s&dQmF3@WF|B&JsZ$XzdxF-w#<8A2IYIqHZiK z3-m$e86@>RVX|{*{H<6w$P&JnNp(mCHC8eFXRc8$`Y8hS&%LNX^w zj#AxYWfRy-$S28lK9~ZV8B!ITJ#zf`F%zvU{Be5V2nax0+Vz7dD#(8*HJ;1>J(P$) zOd=WxhHbA|W#h-&+SD9BQVTH%R!lO?T5D6{&-fsV9Y(8CHs*$;E-Vb`vwU{=sk2GR zA)?Wyf-i)L2rlfEW)Z^Y3;4o5@T;NED21(WWtsL&iO*XC}hm}LCOQ6qC3P7=^(hwXxvX5GtuRLid+^X_l7bL6ck^WxUawyfipm}b!vqn zpYgQ6+yeA))Y(C#`v5QjTP%ISVzp*~yprq2v}>4?|w3Ctkl z>GrRTf$6@0*B>d;(~WRZkzU-pgwGK%LIOzIsdog8X3*IK`%mwmmFD*aBD2$G1S08$ zzOX?|@TQeONc2z|H2Xr~A0-_wFM~S}yVimzxXlz2 z68^Kk;HE*o%cxAqYYQ2ASPFTbA=+R7>VjQ1rU%LhVHIclH+l0)M%a>vuK>{lso{ml z!dK@Q?eWprY^Og7VPWxYhVg6lV5Npyx{5}#ihnbk(t0!GAT}p8`8hGBE8D>oW|;D z+*XPkkyL2$EIOA`UNG!;>58<2^ZbAken9P=b&Y)Q##i;>138Mci1YMTd$*C|9_l>7 zcF)$g+{ynl?&`ye^c-jDsrCd9<|R+GSu*eksgE!I={QAtiL>lREq5c(Gw>(lt(Bii zeI)VwvZ?)v9m0M%)E=7bwzN&a(}*+(tY&pjCmT=gTGMemSpW z*%ONN0_O=OggQ!b4|kyf?K}O;*()ym<)@0YgtO$RIabX5w#7kp%x{uUo_kV}R&kc= za=Ytt7bl*r!$;L=iKj=;d$drIo@KG>r}hJmks9Ub zbAI8xQw`Y%kM%PN>6>%EJrDtZ*jP~z5z7lw9IM1tct5->|vf9kB(=>PAAAc*gJiknle#x0C zky>dhdel;M-|x!b`ub8@r6O(TJV%gvgzyZ$+m8CnorijR?R^?}p65IjF15l1Jfpfz zvjg_rxXc|DH)>v1q)nXZAXX3Jd!@JsJO0#~>|FfwTPAi)+NMaq;ygES%NrOr*ML@I zt@If@XyP^BM@MVKP4PWazb6Kzx3mrF(0XRviofT+rbxTEo^!H#PKJox@0w!Gwfg0O za{16tfM+S^IfE0<;3N_;-SYJGaNDn^EIYDGk$%p3Dp0!$q)BlPw3nVKgN^+4%^`Cq z_xtE|McTr7ZejHnhPnF0J!Q>xwQ|d!PhR}n8={_h3G-kZ^BVTix{oghpXm6eP%@Ue z+AVV>OK};BU7k+tn3#94$9`a0$Y)xJ)rDlHoO>U)-CQ?y!t-e@M!lm*wVY`$YPA=E zn|rnRnH~6VHpp#G=iWY~NL8HaFitpZXPMVp`-xFsUsyHb?jwq{mGi8_t=5sv(>I~m zRy1wpr`z7@z5tkcR8tey2!lxS}&iJwwu-1uXuQRznxt&Tao?pEzSI+-r*=LIM3g@Z9t*VHg?7N<@msR-tOI0h5UjBn3?dD9?s8uxr zrXF~@&9pji&Z__JJmm{TTFIHNVD$=dP!DV;qQ3j9jMty~&0iF0HY+YCuyO)}dq#D8 z`VAC@1p2Py&9OZns{gC#pK~bT9D>!e)2q~|df|y#E6yv@0zTK!mP7B7;)dQg#@ZGI zS8BQ(uIzVFtg7L5VJI6z+S!SkQuKK2o8vYE$4;)}Gpv3_(x*G}S>8GLlRv-z;_p{o z607QWa>93VCn+v1mab{Q$!)Fg9eG)iUgUZ$1fr%&c1)p@i{Y29{9`k7OiE)Jc!hTD4FpqW*t)N9QxOt zI>mo?eDGaJF|#^nr7^b5QTuvtIWQ>!E9P#Ly&FBq&th{Qa_vJ3-_hn#oN^SWvn=G>o?&QDi!=zyU^cxsuC4SsAm zvq~{1-9IUv-@VK!{iY1&o79}wXI_6^)65E#Q-L1jwbERTy01p5{FE}+quBMR6+dju zEok5t^Z>tXnbjz!8mWBGnLAL*4wUB5dr{0@@FXj2=3bP&7Y%dhBPjI<%H#)?`HCF# zimdXBn)#|6^Qx@!6VY6V(-z{syqcPeaHmDMi$kx#$t!S* zg)4;}vKzIcli&XR?KY5|NwG=f-@I5Kb_a&+q*q@Gq!;~hQ~Rth+q)s{GO}{$sHB(& zQ0xK7fBGSG=L3kRrD7gNiHFhs4t^L7JdAP~{n(}xpTC#)Z3oEajV@`Ut0e>2MH>vE z_iKuY&tHnTQx|~%QQvU zRT=<#gQmc{HAjDQ@jojvVf%LJ*hN_Gi!RrTuDh6Gwx2-Wx?R)pw=R|p9h|pjC`fO| zG25Z^(~n~A!s;%l^Yp`ZC&*h@Z#sPA!l=gnpF=I469c;wb=)Zi@=fG^6E5WRqnJO( zuAgH*iDE9nt|cOU2zNb%GaUW}F4qFbGpt;}%IJ%Mal$Y3aquu<$@kfDbF?`$%~o4rTg*Y>;Et$^w2xj=3Vz z6*#5>3-~UavJ3Zd^$K(${g!bw{4PWMCoI1BU8h^%aJ#M++ThFBTZ4 z4;2cq$^rm=olt<4Z2+t%2_5b_Vr2i1-c8rRO(#*@NjP`uC-M6w<$ta2H6u|mhpEGo z*sx-bRmTd{1WRwDq}w9BK~CNv3)XIulQ)TUwX9alf_*iz zS|if6a#F1<=-(qJ?Gfo?a^f*rucwD5f$(^ssS&n~h$enM9^kS?ohPMU%C}t&A zD@A%URyT|EO|0H@==}WG`|lsLzYHqg*K*9)GT*-JaSAy?-=uVgK{Hw`f8hH55J()t zoesg(o_<;`9b|4lHQHzyZ+468CRDtFm;&L{n;AQ^2NO}uxv_Hv>T?wHITCnppqLvX zT`9*_$^!o`IcAqE@V_s|yf4yM<=Cqt{}NZ+5*N3Oy{%!1^hr(aVh?Hn=sTJM>=g|F zeLPcOXZs$jTKuZbv*45tQU{f-kKI*(pFX51!Y&N}(AP5s<|aP8-54dY9MEvk(bsL7d=2RocoGp7oak!1{Vut-)! zpyv0TFP!iTP~QbepjRMu1rn@VgVZ%5{Ss1N66y7*<9gK1nX3wERpLRi6=_>VdOOm# zi}X&U>=dhWEz)X5d>?AR4|Q?$A4HuGqFxSNhdS4Z^jVZ~7V)!QG3!xAy-43enYWPO zsoN;?wn%S~vo^?rw>HUHn?$-=)~aP83N^A;Bhs~UX00sf-y>)45$R)c#xYs2@3@?C zT%_w|wO$tde?e9+i1Z~{y(H4tBU%Ej0JmFVs$0-59voS*I;#x zNLOO5Qsm!^wap@Z2&;!g{u6lc2|U8lcM7YgMEpEf&x`a0tX>f5%UHcE(pRy1RitlX z?WQ>YEu3}>_jl&2aP_Nj3F}|#(v~`9K{1!RwB-)X9vHA!X%mZTVlM*#Xy=Lo>`Dy) zZC6pC^r7z_{Er_}tDsEmN9um(4aY9=AVGUqRDyM`0H6&k3b1w+0JKX*0oJ1efVQS6 zz#3Bk(0&vJ*b55)+JvG2Ye4}(J5Ll~Z!`d`b`u?Dy(So@JthjUHxK}{u|$C#^6<}p z_U4%b;E=BIT@&f36#C@Y|9vug-LG3HW(|s|5%>Cjl(t{odxw#782Z-qqnI0T%m(PW zaQXur^MOeJ3CH}&q1j^(45Q5~D#$un0MG^&1=#Zp0NS;p0BczRKs!|wV0|h8XnTqR z?A;51)sv#btRn@(v=K!C_CN=KcAqG~o`e9|UoQGhj_0HD1l3VgWj=H7t=Fa8xGeG6as%Kf~O^1kSPUu>v)@#bkaQ zE9TS|Qw7R!LtmZG5OG5Xom2B$%ojKppcV^|K(9dV6-eM-gWPLG`X%IkNu<}KHtP{z zvSL;tHxvP9wyns$Riw8g_jZxqiCjC8u>M-)t`+fp=c*W=b7MDBwkUWeRuB7GLQ z&x&+Ca@ULWE#$r>(zlWOwn%S~-5X@V{!OxblSo&~?rM>)k=->ST`Rk5MS73y-Xqe- zWcM+VJ}$eDi*&v0t{3SGvipKaUy|LIMEaWSz9!N)WcLk`UX0y~v9O+%*u7Gu*I@S= zk*>tGES^YpIK57!kK%quv5?^>ps$358^9^- zJ|*fqjk}!2J)QZ^;M6l%c(l~xUiDabRGr7}^P>C(?7kq-hO*EsCbTrCLJ~bXZnl$To9(9TPrEI} zLs9W0D5xOPg7)IkL&1YRDc)-Rxp=Rj2iuCEC`ffSn@LJVG9-`p^S$@JnfKUCdUEo7 zD*&mPv^9qeu>}Coh5x#t$x#|B_JJ8uEg~qD$^d4?1q6|%sTBZWQ8l4tSv(J+ZdAk& z%w>?_4-JMxQbpAbKTMTGE$1JM)HPd8iaLtLV&RD2K}i^7V~*$O#thHv@-l)(wFJq- z?HVk29u#B+@f^pQy2i<>q?j{^lY+xZ{Nsj(xV&uWT)|W&16dN9H)5q`8Ip6qCUqsu zPp&krg;9!}ZwgzqU!fTaSq7(?b4ZgVXlNq7So6!+IrcQwBE%28fHYmkv-wY+H5P~Q zk*Ff8rWM80{pTHP?}{rGXsDknoQF=kV*q$he!v`^k)Z z#`~&*gf&#q_i-ZOKsmihR%xve-@W+8LotlE-RpG-fjTAZw)qe=p+Ykbg&Le?a_-zo zl6!geU^cLt9;R4^1Dv0@Nevg{@T=z@ZNM@DEqDlYCH|tzx^Y3KTA1nZ^dPAeUJ}j* zpM+;|gJ^g39C6U|XA+@?CG-gWN34KQXUH1!?X-n++(ZGu{?gS>2T|}omA}7#y<6VA($?A0($?;71#OKW I{!Wtf7yJ)QP5=M^ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string_view.BEF992DD425465D6.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string_view.BEF992DD425465D6.idx new file mode 100644 index 0000000000000000000000000000000000000000..c9a99d54e05464dc170114bd922e1b5ac36897ca GIT binary patch literal 28256 zcmd5l30zf0_xH}sy$D?3DIz=+xDOP;KoS*A5wB@3xs=*&g$Pe2+2lQ3GBdX{w@gh* zN!%5+6vYkq4W%^A)Y9B5mvUdqtn`20n|HXNU!U?le*Yi*?4Eb-oO@ert*WimwDh#d^nqzWsb-pcn={R6iDuQBt|qAbllpEpa!Afh&&qJT zvy^#d?w@7*$YLk7W+Y@Lq^j|)`zB<*q^d6s&M>R#z12iO6B4cFOxu@8^HOF)veg1a z9QIDn)ag_!d>Nr8nR_Q>r2vsN9lm_z&&D?1YX3ZzXBlTNZ>#^%1S#q1{VZxqazChE z-(*WOdvO!flgxI;{OfwQ9O66Mn$G^#lKieY-fGVl-lmw-;H_p(OTy2Du-Zc!G>eb7 z6*fLO$(&|QwhoTB#y-*kvG(?ea8xxeP8~EfLajX{y4m9>)xkr0bte{TU zAO`yJ327TfKN;;nE`I;c_J3)%K@pG2?!(T=!N|6 zydU4|P)NNa?X4Z5>U~`%wWOQ>m7=6`|06}|E-gzCYa8jdah{ftYF6#Td1#zaMz0F7 zWz!?7hexK)qK_FgbuxSge5}A9a)r`c z%|L9+)(q;L7spm?HOyi*t6ds4iHQlXFZAHGu5X*I>L;ha6`^)Wv)I1PwAgcl!rLa0 z^h}G8U=?~LB=&=cZI=5th3H5w)tHaIu{R$~F{-VPERUu;<`j^B?7v5a)usb%QWy6h zKDVXW!Mk#Nm_U9krKp(v<}gexk|Fnh>-BO zFJJw)FJFD!m;L|k%l?o1a^SyxIS{_=B_#5CC&DZ%B&Mf=RGI;Tx{pr=VMqW8aG)9K z$sp5+mDnzh)J)sBvB0FPf0Qv;NX&F_2Qw#0NJ_9K2uaDk9afKh78gM3t%C(ya_{66 zbF-+Zs4PonRB~EkN>-9NDzQ%Vv+ysfL4&AXV7o+>YVP`dpXdu5zX>VveG@EwpYSV( zl*cFA2gMV9l$ns$#~h!K2)3E!2|p<{TRq{K&q+=~vz2LoI8JLhE za4F?Oz3f~pl%0u%0SPHtVEo(Ktn`#DSO%x|TIneWN5WhFGl~on3?w>H(B>0)K5=sZ zp$cD-9f+B0YJR*>a3@a#NxG6=)BeC@*}YB^OZ*K%5nk#gXgQ4KFvS4`SA_|6>WP}< zS&;wpTf+-PMd%7dGbJ`tQXD{Vb*IK!0uc3`nml*K?`w&HJPR2erSehg>j0S9o7-Cj zM|b{9Hjo#33)&h*Cog`coG>mln%Kwp{el4pI3K^+l48jRCpi!g?y4 zWP`{y0LcL=AJ9o|UaPa?>km^EMd$_ve!$oRs1*l-s~h39I(6+{R6xyltGbW?AWCpc zsA+!)uGOoFf*^WJ*~~>f^l`ekfy5^YEqbz^uG%~*&!g^Gl1g@o?C$y;l@`!f#futXhWD_|XM2Z6>`DE4CRW?*@6T+*#fyx`8+8iKB?`ort z-Elcsw+0CUE+a&Fgy`!4Nb+V@?rX(y<>R8K10czzccz{_(A*MfAT@#H zfha$K#^V46z7xt%g?SK(G4SlRor5czsJd&<}kCZKovf z1pUAPmT2#YL94g)@6s7a%z}1JlCJ>?2T0;_te(rluNQZ5Ckaq>t77%BKQNgseWhV- zE%gN-(g~6Wm$WQGOR!^-7wTWRn(eEnjla2WjB|N&I&OEZZT{z6R15xO_Z0yy6=e+W>qx(D|%c*5vtiot~dytCf#-QgS~D zwc-HzTxk7~_l*(TCL72*kktwzuONy8Aj!rzre}zwUzx%M^JAHP41&pl;OgZfs9_+O zvGrHpo?~4##Xur}&n8jc1S6XRkDJfnayLXC;;Y#nn0$J- z+Oe%zeHI^yqa`*PMj{7#vt28mx^~@|MV}kUn~=pcB2NQl$N}<>(SciiEs%lzNWwJWg}(?vF2G-x}hyn|Lll08Y+Hy`MoF_)0!Ufjgc?n&PF zq`HDDM_a|eHS43GpXc#re;~03P*e^CS5H|84uxiaaLnqJ+U@%V2GS79u~(G$iXIMt z88wXx?VmZ#xR49w7gYWNgpva!ng4y^3!$^eE_5e-VHC}ks?3$V9l%zaK>IXq%6@Zm9mh53~O5NSWq2$2Ux_)*m=kZ^z`Imhn0f900Bfs5iW!!VO(dth?+(YI>W?fBhxLY_wf zxGQxUwpryZjpi120klAc_r}S0QnqEc;Tjda1oGziKfk>@+=sd93Tmis{hq^ z@RhxMnmaDC<1o#gqw+a@n!ELJdXavXrcv z_6L^cy_Yk4#SDr%;Z9N^qa{+6B~Tg;^o$mFu2C;z>7^4km0m;pO>+MYR5}O9r|F!W zE=#){Kf_lLUs3rhSV3@rByWap3ROI`pA4iGwDF7V#VXn-RQ`mzA;BA+-s(91Y{#p1 z0&OCdCsH>DK$3{talRh!W?bVuqF7WFZ5oxQ={(l-4FCJ+H-~QVsqPqK$DmC((C6k+ zUAzj4cQ(GmGnzr=8ITbNn9&&DpZcuM|Ljk9(jJ$o*a8UViQ#x7hD8 zb{DeYKyUhSt!J<7_2t|54CGbdaY2+XfR)Sv@`>m=>HL_u{(tdhij`SiwOlIa>dTbL zbt8k^I?o4!?!aT2C@%vZ93YRvne*zuF?r_S?j!|B-cjE1wLdWVEP1WkqMts!&*k%owVg@PN?&WW|oiGgV0FfE(;Wix-A zIc#{dY!<8Ixy&z@`Q!SUX}PRfE{oOiHOy}f^GCawX=_-sH7r)gH!|;y%m>XSrtM(f zJD3lSSElV{-g}u3+L7~z$=RE)>=YQ&CXt{?#DohYrj3yT$4Dv~5RfhfPLfnK?U^=B z3Y;dXxHiE8Rv`{Iz@YJGu0A!}Z=|gT|DQEFc;V8D6{CiT(A6=nF))?$KlDY2#NmO! z@}d6$=(+O&W#BD!_ct%mkuvD?4J2p-2}WIx?g(JTeGzC(qZ0zGZSHzNRs&ZCoWB0c z0he;i?UatAbDP~;>;~O)N%XrU8c`sb_6-aCh6SN{&9oyd@CXaSMFi7+WPv|Ix6#h4FjfKWr0^&5IQBWlRCNCeN)&qihXT>iHhAkD}{v(dj@Sd#o=|)Q~6p}$CrwR zrJ@Pv2n8mF8q37GI-X73vq>#<3n|){#PB6C;qnU>@ubRXV$|_<#B&`9!ZD_R0sHiJ z(&|%(Z3~NB;!;HX(8y7={Ul&NsgGuUr=4GSfB|t>Z<^RK%iD?{yNhX zDH^9sShYxAQ}yW+}xNcGT$2KkkY zc~U*J@R_zsGOdy#aB5=OHp#S2ibO9V(@sgIQ&JRqOqh0AGF_IU(A)-tM)J8Yg_bPJ zwGU*E59B}{A1V8cltW9Lc-m;$W3(KoVb*No_#hxv><s6S7%QHVe`5Tvj!g`RF=e4NTZ9L?81xQqvqM7G#4*dm#tDi-0+l7~sUQX@FBrc`fwezuixB zt6n3p+;b@IO+eB3#sn4(ryfY)`w*CbIvo=D?gJ)#f1qF3q}``OD!svh+azFt@;wr) z!MKr$i#`f;4J&sm;;ss`3Exsdj`{DVr(9Z_6YjJH>M=4?@b1>Lp3}0p;+1tZKEJxH zUZwA)yKCRJu050cl+#T&Vs|6C;I%3dmA=Mku7VWt?KYI6^*6?Tld~u_s>0PdE>|H( zzKMr9zCGgFJHaD5M1!(yBs5ZS88~~UYfjEj&qq7mC%8N4;%46!#B3FNE!uz^LxYB3PEYZPsrXjmr(qFYhXHj0LgVjylcpsfQdF22vG z>)Nu`|BpxBD<1YoUSp?++CMLKO#A)q_0BW;!PI=%ou)rDF1KF74OHk~zHN#PeS6vL z4`&oiY~plBx=*zX-EUlFW8|C%1UGV_sC@eti;6ZM^c&x_)%&fi4`uG=+g;k!yx-jE zI-!*Zu0_5Pj5&gj*1j=}!$HxCCI4cn#7naI^>s>A7IgDMA}%B);`jdSkwb2Nxb|762LQSOpjUYe1NJHgFM#>aLl!Ur7iyF^ z0u^w`JkIgyR`bSH?VqByP7fJeI)PEggCTIo6xRbXaYR1oMXOk6Fvd|p33&7b>XGv` zJ9Qh<@^Je~FIi80^3Ir33qR>l?y>WAojGrQmzdwl>0Vqtr&_kBc-nbJ7_kDK!Q)hL zY2JEiJ8Njir@K_RErkIvue#X-UvOk7+5q1HDu%xR7B--Pj*S%~$BHo+{Q_<{(eSNk z#5J>`9T5#jL?iB{!+w}(I3^l#xuIw$MBfvls^b^Lsux6m)TIh6H(jra)lip$TZL4g zKmyS0Qy@&C`ZN-N5e$kpkI3_g7wT4Un-Kr`B&0MRKA%ME_+sL+m>6_?1@TxxYM?H* zg@y#LAW!M|D&n$=7<7CCaoIo&rQMdE+ljC4w%ktC?Ic{scN5Ru#8-D??k4JP60YM# zL@g?dM;DRidip`)d64*`ep5ibsRv28jvpqThl#K5_B>3~!z5hCkC0kNNF5!YKn)Y9 zQFn_@q_ro~NFAR{4U?%6_fHkrHue34syaTE8m3Ys?u|l!P<0v&FO4^tMw{vQbQ(FG z#^5d}xJjuxgNEz)Olp`(jk;TQ7OgXj*4Odb)G!x-gc^0Xa2}1!qcJ+ZoEnx>BgUL4 z5NM))0d8VP42q(yq=uE$hG+M`3QF#^h((wWsSwLgZsiA;RBYX{w*75b! zu$~&xg#m70Diu;s9p6k1o2e0PQ3XuVpe-~^$G20%c51|U9R-4P!gkOGI=+)iJE^CR z@1~KvX$(5Yzzt8sif98JFQ$fKsJ~+iUeUg$^lPf<_&3z>4K?B}k^-AZwGYrp9siaZ zzNJRoIRm#crQcDdG+zBX8ldAxXyg$ZgPV2`kV7Mnmc~y|!wG8C-SVfX>nU1I$Inv3 zS!%@K4h14QLe9|$9sijcex^n=6Tl5kUC+~MrE&lBG(^WQ(#VT62CYa%`<1%>N~`Jk zEn4*!_1AUjEo!<&>mj~Wng9LatHKNAp07$2u$w&!5&7Blsp|>RL)WJ(Nc0L4qwA|# zw8<>mTpv%lv|cW)uaBRFwBbV9M3?_U>RU)_>hiUPMs1-Db$KeH&5CH8E)S<@%~Lc; zZ|`%o@j3d8-oC%mn!nN@Y@cJ%O*b{TP`j(s(=JXx5^)4wVvDec9M|k2M>TuMF%A3L zWgOA--3%AM?ICun@Yxo<0&Z^hC{Qe~qFI70jWOH~)@!0+s~CzNUf32By|#;WbbP01 z*eQnMGFj1fi(b3MIy$~bH0%*WF>DUjd!kpdSVzad77bsEp%{k<+diV#ez6YXxV-~b zF^@#mP0#X zEfIG%tZSD)?6cP@yyKb%uew;&vD@pF-WYD0J!g2AO+UX;;VpohhG3fV&|{Q}z&Efx2y+Bh|~1>f?5lqOFylS}R3iIEm!e&l!mmq_xUhN9_Sa1_zmngn^y4UeaLd|t^1|PN9*OphHetv4{8^ar z)&8FSoYqumOoB}E*m>-M%;RF;1D8Hesq`%r^-&*}fpkksg$pN!BQWAPGk~M0yzx)3 zc@&&aZ2E0lrEkhJ9Y+0?bEQYR(<=0Dx_)nip&j}=EuMz=>)zZE@?C!r|E$2Qx){`Z z;#kh^;0+fufq$XYs8EX2yQWxbTr9QJ@e5Lu3sNf`zaurdqvHuvUpVsqo;{XwYhK^k zcL%g-&9a>b-@AOW^rWb z%3b{jJKbk71INX>MAdxHX+~+E|I)_T?-l16g&h7Sb7#8|?^k#mo8nJd%%^X^UvBYf zGWPd74+hJ_E4)M)qXp&>KcIw?A3VdQx7&onBgqO{9fC}RCt|79|-Y#ZdlCNO0Qq*j;h}{a&?=rPLGTxujX&=Hh$Mf zmA=N!-3wL>2x~sB(iaqC(ZFQpXZCR1K(M9#C?8s0HYxYNpqtG8eJ&jQam2C-PEQ2G zCry3vMCS_=Kwr-#@?7GNITmaS>yR;X)Wk~PhUn;lsfC|y#Hr=eYeP5ve&G6Kr`rf4 z_&~eyGm*GWh5Mn9H9rT5Sx*_bKH*tq?-Zwp9D1c72Y#9ob3k_mB=EzNn1F{T;pD3A z~wkTuV%3meY(%&W8}ku~Hng zyJ_^*l*_$yeH1NLiLHixs%R}dT6mYjYPAT~v35$kQk3mI+LxkiU#op7%J%izKdpaf zHClsk?-AmTseGR*SP%u`n2oEXAatidT)ZR~NQ&-s*d`gbNkO<%4I3JgyhBoSC&Veq zcuESwxdr0RCHah`=uU~tlJT+>gqy3d;V8*hB?X-nwiC#;A4v7|xaU!F-BEHRZr0ll zhKGGD*GH{rJB=DPRj!Y5%u^=a@1R89FC7}+Be`-DYrAhg7DqNWII)rWg z;@q7%ARNxcGqs%hRA|kgpPpOk=e*0C0;PnvFVA(l#@NX)4e)d4IJKd>9L6C(a*pDO z`+ShVPncr@#_hwoLVmnl7x#S0kYC#WT{ci3cKjsYHBzuH;Du69p;Qko5!^`!#{4Wg z=4f-rJ+oG7seiaz3g0b7=_BDMDf}lXN|*c_Quqxi3MJiKea)c2tb2<;~@c2F?*v{_bYdp3Oo>kkKeSEEGDZVKtJdv+xslllcXs0MznlUW|`6*g@ z?ezM1L{-r;LNX#T?i6fd(fy?8gFAf~VE|>|NB=Rq>mLtpICfvwmz91P)4c0ZGZ)lY zS?LS9-4MS-)Y;=R)Na3T&TrP3!6agvV5ho#L}crj?J z(^ctIeE;>lbN<^Zy%gZ7Tu4-G&W_*EuY1`OqZ1b%@DCY+l5ZlZ_louYD=0fRMQRlx5%L5_yh zmkmSXCKfy0^LWAm%FM4z!5pHbzVgK`3%;)OBJt`ncs)dAb_PoqlV+Eqg zeRoPB`bwl&3M!VKLV7%-4muAe6}U(U8RJ$Xc<*eN2VrL^+V9lmcUodl*XsUvXX#d( zqmpY`$d9Q=|_Ve=6G^rk0w2q6#V@Eenx4fWEmNB zblmw0?|#z|Q}NLsmS3p!WBJ|gC)^vqm4C6)7xbU3?SC(^?)|OO7j%EC%hSJlH~cCL zK<6Bncz6MH1;5A*$JzdV>Ohxn+OSov}_udO&g-n!VNAod=YJg8_VEBrw!K9SpB%o9{Thi z+FU>0aE!Viqc!y7Cs(N373zb>87};NFz-b6*}t7uVMFVLzS8#dm+x2j{EGK4K|tkc z`*nB~dQME) b`@490)j1DtDqvC0Ah<`6chq+8yajtTUoTb#fS@|fB}gL z5iugdh&y5gB@l%;20?Jt!8lBUMA2we9FIbjIBvld;`8;?kD7C)hQs!~{@%UseRp~F zDm)}O`1D|cm=YKAX;QpCmLv$miuuv$wVLzH-?v{0n#6cNxm>jYnMFmSQCqm@rmi$QV;WnUE?I znj;(47L8?Ft3R147ElbK5y(cc7Tgt5cZIfylD4@`a&+jzQnA38p%emH2x38lkZKSP zLKK0K^{er#AGHiv=>W2Wv2t5T-Nsf5EpDH?|MJ!)vA~G2k_BWINCZ_vs!C{utSoe` zccn#vcfQ`i6=H8A(EfI6{J? zARz~a=71eikAzCFssw9fo`gEEssn433gNT2S5!WTHD_5zA2X{NNE5W0C*3X$7dIu* zEPmbO@m8H{92n&`;1Bgas5DfD zHcvws8D@h~v@}|VfX-va6Kz;)@7&m~l0c5DsXgCMtIk3UF z9i;6bLp4OhH6X7smHe)z&>orC_17=b@j~&R4^6SmwP(q^;bC90nYFD0Yxu|3WwNbJ zH=Q{nw>d+7Fvr1E#+qA|mXi3Org${Z)I1(lYrE(1SvSrlJglMhur z*TjR*^xrBB{Mfz{P?c-Tu_8u+Sw6l84 zM4s07e%l+WwChvwG!q_pqkHlgaR8@IwbH>IzS++L7+;fICb^1Uk>@Z8O^eqi`zR5~E1d$UzuIE27_@j5Ndyk1=S`F=JvTp(LOo!8*YnBdtQK z#4TEHs~?V0DwS%9Q3fb7K#ALR7L3Y*F&J+GaubL!E&xRVC~^BP1lK~4W4sfDJAuZy z2&f{k#JC(3<)Fmvy#m}Tzz5@FU~&v37}tWL7L>T%p8}^-;Er(vC>lVCl7nV)!>tj# zF>V6mCJ;N~6uLE@*EDY6A&YpbJD@%+un#196X$(!;@e)yF)m)z|4n*ZGga z=W*7X!~BTnS7nz~Jbek{@&m-RxoTEW-UR=vzUXh%QqCoeUL7#f<;duz%rPaikU63b zsO^9ytq=Aja?bs_fI9y1?-!DIE`P45`kvbN`(#dEw?Z;s6+c>#!qZpm_OO4hZ*JDH zq>`3APgPDKSMs#(sOr?k-|St_vhK9gIKk}mwhY#AR;%;isp%84IrlyBld5mSa~pFw zNec7oYugtXZ7Sj$(*l6M~H8va+FPG?@| zn|I{)(6gKy+}Nh`t}MCTU_`<+>uK+A#w1K1G~Egv#w0|#Mvg*Rat}FkiFbs=$ zJEl~Gw{3Fo(VL$mC;!aT3`#mCI{k0xP;AyN ziIN|w|Naisyb{C-Rw(^$)Ge5};BfUXjMM+^?&!G2@xl-7756!XON+Q}KK@TtU7V!f zSAO^Uu)gIXC+YIC5vz>D1G_m%s0tYg`rkn!3BHaQ{rZQ$Uwz6`;DBxB`dQQV^s=(R zKKslq@k!5TJgutjR@||BG9s>gl2~uladJugz%)6a@}O+S3qh96Si4C~1@vN=+Ix<{Dd+f;6l(U2Bc3 z(~t|&TyR27hK9Xhz87rKsZ2u^P*sMPlX{@)4KF9HK(~SvUrv~mzXMX#ISFliVr>6$ WqSLB%=KcSGCO@so?dj-9g7^cq!HYZq literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stringfwd.h.6515E9CFB6CBEC88.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stringfwd.h.6515E9CFB6CBEC88.idx new file mode 100644 index 0000000000000000000000000000000000000000..27e87dff0ca0ecc726dfcb8e67289e1cb63cf9f7 GIT binary patch literal 1098 zcmWIYbaQiJVPJ4h@vO*AElC728H9njxTGl4oDs+X0UHo6FWrv8Q31kI$WK#nNLEPB zNG!r8W@r{)f=%4m2vfWqWC&0=Ei)(8N?%{Uw75t=GcP%(G$mC(S=Go1i1ZB&^^-D7 ziuH3-bMuQT)5=ryGKf+SaV&226&7akW+u8hnR%rZy6JhP7#2buker{FmYEK;w74Y2 z$_gAddFc$LhGq~87)p(epsaEz%}`vKo74gfy6IJFACFw=a^q&;;bdTsSB%#J6AYXT z48WjfWMmEIblsbqD$vKxzy(y`r{JdsCO`_9zzU=p%(>R}KEKY*zzb9mq!6SICO`^U z!3rYpYgX+E@qf$BzztLoqZp$FCO`_9!3v5}(~7l#hF!VdqkZDTC3Z$Gb|nra5pdK3 ziGOY8UTe(12s3fAJBc{SS9Cvkr#(-inFq{+DT-@)pQY5~X~f9GuFasW0279J4`?LF zZ!oi@%)!G}4>F zTLz|D=Z03?TPEE(KqDo zD@Y6$Z#?WVTrpy>NaA6S=ZY7D1>2;)f1V1()8+%6lERQ82eSpH73gqKe8X%}YF_=} zS&hpBpbJg7O^_^i*LSyqx$N#c$(WgMIv)d#^pN#Xg9%r2?W_vSoAMec?8@K@w+ZGf vpiQ8J1GA|pH760|nBt=3Vr3A6UGu>6bC+&!+rq@b#=rp*fdDobgMk46&gLha literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/strings.h.9EB46A34EB89BB5D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/strings.h.9EB46A34EB89BB5D.idx new file mode 100644 index 0000000000000000000000000000000000000000..e38432be89270b1a45e9963b2b60b6487895b379 GIT binary patch literal 3392 zcmbtWYitx%6u#4TX}3EI_6eo7y)Et1Ez=I&7Sfc5;x5&S0cnd5V$x1$XSWmPQDUyVKR#(b48dC>-rf%7Ve=AcTtG)eTLYUIK#o)YtB9Zs%1+H!wfIX}Cde z-pAnDy`fBHXkT#gRP%gGyQK1*B=i~>ga<#Zi=*aQ<$s(s!)U#K81{8V1u~H7ZAcZP zcO}GDhOA>P?F+|glQiBop2ATIky!+t%GNWR#M@)~%p) z8R}*RXW-C%35;1pr<#kPlaL;OdJiA=Rh^h^9AfZYKI|=xXK+e16Q04d(hM=BlIsYm zR0FgvxX)}f$3=d#)mGM(M!i%xt<|rzbRS3`+;1r0` zoaoFb7xtgeFT($W+D^qaIFgaAt}r%K9NF64gX<-6k6jDgqf;$4U0NBg8D}V zO+|crLl~A$c!yBxHx%IW^|J+&7x6#>K_X+vQJ)yyv6y5t)-TG{+XWcm{)$o zG-@J*us>XgytD@eRsmt+rR6__sI#__brM{|lbwIdv{M^x=>$je#(ON?2 z_4gK~EzHbrnE&LFU3+MR38C6o4KWlfSz*QSY*tyz**AWEnMT!wP)FB+i^ALr%f*pj zZ|=<9viby#S_xr-@=Z`HkoTdSa?8ft%=zL#_wai(Y9d5W=u;xDLl@)3hO-n{bNY{y(VMKgyebcphiI7!byoK~;c z`YjzfAQ1Xm&ZeJfwJ;4(ujy=rl_1Ls(_d!QGr>j!)!h2 zFHl>3WveUi931)a#F}_6&D8j7s)!MqiTEQf)aUPWA;WLDP|}}tp>fJTPPyO{W`&`Jth6^Qe z(uKw;JWjdrB!wr__|)f-xyLV_nS=O!Nrqt3jX`9i;P+|zUx#;7o_u#f~q`WYNp18nQb z_=4IRTU&i+*VsF6{k{LX>6fl5B}Tw69d#ioPjVcP2?R^leA{Q#+Z&JVoV)l9ZTqs@^$LVu&l^jST)uXzYhR1NBq$lY@HpK>Ni*La;Zg*E1qdK!p;P-9wT=E^V6Uwh@3 L=d#x{G@^e2)dyoN literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_FILE.h.2B6C435DE91D3DF8.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_FILE.h.2B6C435DE91D3DF8.idx new file mode 100644 index 0000000000000000000000000000000000000000..d84f20bf75c6ecc50365d90d434c1609df98dcd4 GIT binary patch literal 428 zcmWIYbaPw6$iU#7;#rZKT9U}Zz`!63#Kk2=nWaD)4AL@lQmyp$^-GJ3^fU94b4pWE z^(!pQ;>}ESb29TvD|FNIO7)X6ON#YNDhpDJ^)eVp)S(Zwt~9wM-p$j;6{wq`xH2~h zWOGq!TJc>V{r<7=&FClbER0-C`5gH&U`GK76Wb$PH!7n}ESb29TvD|FNIO7)X6ON#Z2Q%kaP3-mG=h}Tk5S&&++A0Jfp*6ym8Qj)B&Gw6DXz>-0=d5^HLX}2NXNKs$nsk-)t!-xS(rmu7VI^M md`=>WE-p$gRt7PE;Q<3oFa`qyv*)Zu0txO5HZw6YF#rIvzgD>b literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_itimerspec.h.7F2AA6FE7224B30F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_itimerspec.h.7F2AA6FE7224B30F.idx new file mode 100644 index 0000000000000000000000000000000000000000..1837e5d121bf4ec17b4d9f2ac71058ba91807c5e GIT binary patch literal 632 zcmWIYbaN|UVqkDi@vO*AElFfyU|Xhxvm6$Od~4$N>2mqymX)WyMfjnVS?33^WnzZ8?X8H|X*) zuyHc5aEfrsg9!!>aF8-wT;G4USjFQE9|Jp3noERB228-DukX0!IjiUNeKwE)3p+cz zAedm_WMBZs79%4oLs4p4aU+sFj9g&zVHz{-79M?JXxai4X5?U$fmq4_w-zW2vJf*A>PNlqe&Q(Tl>tPEl>g9r#< WiCM3@ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_mutex.h.A62EF32C01DB3505.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_mutex.h.A62EF32C01DB3505.idx new file mode 100644 index 0000000000000000000000000000000000000000..dfc4513bb990394c57e2262eaf4df71d484867e4 GIT binary patch literal 208 zcmWIYbaOkwz`)>~;#rZKT9U{DWD5gvaY<389gqftw9K4TD}8z44kO@VpX~nKU+QT&Y zc4l!!6eAa-3a5$^*l-}x`c0#5)AtiAfWpEY!U{0q>5fn5`1#0f0t%aRnybKsfu`jo Yf;h!R$;I3t2IHn4rj$%}mMIJj0CRyeCIA2c literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_rwlock.h.76DF445C3AA414C9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_rwlock.h.76DF445C3AA414C9.idx new file mode 100644 index 0000000000000000000000000000000000000000..52fd1f759da518210196c1a3ecd256eae522bd74 GIT binary patch literal 210 zcmWIYbaOk!z`)>~;#rZKT9U{DWD5gvaY<38J&*>2w9K4TD}8x^)vdF?YIIM7yzalGlu{G literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_sched_param.h.B3F662015F7067C8.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_sched_param.h.B3F662015F7067C8.idx new file mode 100644 index 0000000000000000000000000000000000000000..79b7ab475d97aa9a9104f2fb0af3f9d5f8c66c2c GIT binary patch literal 382 zcmWIYbaN|XWMFVk@vO*AElFfyU|^$*IM~>I%il8L26yIf+S`IhiGudI|~*X_+~xR{Hw-rNu@1nR&@M zr75ZU6&7akW+u8hnR%rZy6JhP`bn83#rh?c1*ygQ5G&%r2E`X77A5BDWiTM|kl9vN zFkVq+ei6_@pqndmlN^8!ULXJK6f;Y(2{s84Fu}k9_ANtEYFe=?kZGvB=o|BmCV56KCSeX?HHaj_c%U%IY?v_2 kP@pi#M3^IhrsX7p)D#yb7juIcOc%GzZ7KAhQpLak05G;@i~s-t literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_timespec.h.0E09B6677A8D6A08.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_timespec.h.0E09B6677A8D6A08.idx new file mode 100644 index 0000000000000000000000000000000000000000..e943096304ee16524b470578105956467d57ab9c GIT binary patch literal 774 zcmWIYbaVU1#K7R3;#rZKT9U}Zz`!63#Kk2=nXQaK1_;ZcE=f&HQOHkI$jwYHf{6o7V@S))Nww0~*DozD($CCG&M8ev z)vvHHi#IdT&B@Fwt44gn|5fKq-FaeW(e1GfDxr_GRWMg1wU|{89=i&zw44e!M zz!bp9$jVTZnpV6XXx8VQYu+$E&5>Z@VHM&NQh=DwzyRc_2${inJyTX%9N)?n!pOzS z#K9y16W00tb?)u03ey;QScTby1z^H3rvp`k+zoRJ%*jAukb7amFd8Tfawp6XxmDFh zd;eel3N%}gMUW3B40Lx+B8XF5lw7P2Vt|q{6fnaWKtJ>U*#4xxMnHs_g_(_k4Iu#l D)OFj% literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_timeval.h.4A17C4CCB9EE5883.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_timeval.h.4A17C4CCB9EE5883.idx new file mode 100644 index 0000000000000000000000000000000000000000..f9edf327818e3bf3b690328130306862faee412f GIT binary patch literal 520 zcmb7BPfG$p6o2cgYl=$|A>9T#bV&yyq&yXZAan|Z4#76AqYkXQGJix5Qm5!rAE6IW z-zBK7eTRbj0KHus=-M#zevcpT{obEB>vlSj185Jr^9k214*;9^l$PQPF*_$jiwP$) z78y?Tm}w#uVPR+_(?}%9aT0STxzgo{2xX#pn8X9pH=3|WC1lJnfk+mQI7x(&uS%CefU{VCNnDhf2{Norz`+ZsQ!7G64ulu#kKxws=@8wPD>HcA>2)H!Y^E^K@ zum<4Zbql-6?ep~Vi26{({A#7Tkr|s0k`L9zpE^!C)3>@7kxs=|MFFfT(y644%D?S@ m-ktYOk#zCOO}TwV9}oLu_v_WS@2r-^C+ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_tm.h.472DDF26D5924DB0.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_tm.h.472DDF26D5924DB0.idx new file mode 100644 index 0000000000000000000000000000000000000000..f5a1e5aaf308ca17a7319189e3e9493e61f0bbe3 GIT binary patch literal 1088 zcmb7>PiWIn9LIlgUDiLz>s%`$f&_$#=oXc2%rOSKG1x&wnRxI}+vLT@HR;Gp)>ROd zAp=nl>J&lnq9Q6@26_=svJEeu#@Jy8@i@VoqA2)#uls>lL;HQN-_P%*Zh$H`yh8uYeJFy?|5tyv{!tz6>9!%GG%&oXN%`L24?)f2i5n01> zvbQ>7Rg%~WId`$H@`zg%?vxY3vvtop-*AK{=l1nl7I=P*581Yzh{(o!*Akc8vx5Vr zfxe!aA11Rs7sAA@__46%--+Jp|DLe%SrR8M#Q~m;1N;mPVU#WeaozLeu3Aqbx%$Et zvD^f1xv5q^R7+hgf;;k8V+%HECq!DNJtf_+VAbj!G`kTJz)&mBeh)vxzRS=F3EMLoi9ec_kk2tUAO%;T{9gL3jSKB@?Fc2HM zVW=QHu{pPSV)Wc90~2vtPa7%-Pi>6eIk|TA2ZQa1i>$aq1>uN$;`l%IwQS3J%PEj^ ztfg>zN8}o7DVpl3J;6X}%57k+rM2B#_W)9lwe(KYq#SGMn`%;xwe(CiDaKm*rJB@Y zExl4rO0kwcsV0?JOOI5OLae1fs(+uk^6b%{>l>Pp>PmNY(c_R&oR&IiI^wmm91)Qt XcFIkgjMkMZO#kX$dVTwo)&_q8N^2Ue literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stubs-64.h.C743FD695F310B00.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stubs-64.h.C743FD695F310B00.idx new file mode 100644 index 0000000000000000000000000000000000000000..51528fa6286cbee77a2f1c1b526e1883dd252ebd GIT binary patch literal 318 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

IV}}-9Gj9+;*U_C8wo4Ot|<}w5@B+*&RS( zLrz0b=!3yB1qJnmYt&Bwh0Qt5^fz|78nYcs7n+2I+`^SCF;h9BGTFsa^IT!%=677rt literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time.h.EDC06F0AFB6EC7EC.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time.h.EDC06F0AFB6EC7EC.idx new file mode 100644 index 0000000000000000000000000000000000000000..d8047fb75b07f6b237dd33552b6cea4b1a49225c GIT binary patch literal 12630 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 Y*;?P;W_KjuWt4}I@Rn`fa=o|wf00>Y(*OVf literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time64.h.1807D6F5124100A2.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time64.h.1807D6F5124100A2.idx new file mode 100644 index 0000000000000000000000000000000000000000..c2909eeb99593521b72f9df3ecf5cd6169e05fcc GIT binary patch literal 224 zcmWIYbaT7Gz`)>~;#rZKT9U{DWD5gvaY<381&{`Vw9K4TD}8 z#VF1pE(SIhNVsP_J8rDnWDFFR<&>3x3G4j+I`{Tgg=vgDjM6O9d@y0pAJQ%7LMAQ& j3JY-viNb`7QgaeP?Bb&2Vr~$F(M5fF(gA@@-xwGG+6psk literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time_t.h.CAA645D29A7A0EF9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time_t.h.CAA645D29A7A0EF9.idx new file mode 100644 index 0000000000000000000000000000000000000000..1e74e4faa303450f52555e5e908f24dd36fb71fd GIT binary patch literal 296 zcmWIYbaPW+WMFVk@vO*AElFfyU|>`lZE1 z`k8sjIi)G7`V|&t@n$BvIhlE-6}stprTR&kCB^zBl?AEAdKskZ&86b9*r2^Xd2B!bw*MajirK_-|C(3*sKw!13>RTUYT7ywJHMuz|Z literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/timer_t.h.3EFB88CBA2B5B801.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/timer_t.h.3EFB88CBA2B5B801.idx new file mode 100644 index 0000000000000000000000000000000000000000..852dc0a2541dd1e8c0d888014f8aa88ad2bf909a GIT binary patch literal 328 zcmWIYbaQiHWMFVk@vO*AElFfyU|zd=Q+Spw7vWib?2<|Ziu9hqFm{w3Skcr`Zz&$ux)U;wfpvw2`@6wVk>|tW$VrJxEl!W*YVE|AVq#Gt&l$w(WViy-B Z7mI@!OdtXRm{rqwCpCVQf6B~;#rZKT9U{DWD5gvaY<2TK9B~3w9K4TD}8uZheaO~H9kH{uP0`s)ofRY8G;ofoQO^*`(Kn5ICD6OMY4(s z27|#RI}MWEY;~2026ud1QQU;FYTB`-c9+2IIOdJ-AEGne3QdVOtouXNi;RzABOtL8OG>s<7 z$_|Q4hJ%S^Qj8K&By$CbO;p9*rwIu}aacvC(QX#uO;p=VYx@y$)idgi5!WL8c;cla zKG{OHP8CA?-qG{B8y7Sjx*g1uL0~5dNyAh@dqZ*1ver?yP@Z^$oh&2|Qw8lmy0!-9 zx^6~$lc9w84D}i6uL|)c1eWGFuc|}tjz4u=B2U8L`t-o`5LNK{t6$XJ+V#PcX*>x4 zdx|h6TotrWL?+F7Hra0$PX>UUDx?lm1#R+n^OpMBefc~Y2zH{77^Vu^!*9jxD_woh z$&(PUX9zQNs-V3yEOec?zEt4}5B8+NlLS@J{;d7>bfw_OB|Py5d#W&1rwZDSv-5wy z(fQ?ip7?=1U6`&@1?|a+4b2aRZ`sU~Az)_+8DXlRo$Bs!#HG<~JQ2W7@lNqq1#Rc< zUyhDw`)&tM27{d-B>TeLUscd1PSGOwcoA~q?y;&JYc6_m1AP>#4DPGNSH%jL zRVtR(Wq0uCgO^(U083O7FdAzYFe_Y)ep0)N?pe1jg!A`F_e~GL5^UJ;;$Beuy%315 zp*7l)SmA(Kd1I1~`EPn#XGuE1RkVtYHuV#foqhB0tfsMmS8#L%r|qR{QQ`{nR!uY* zHfjsNcuWVFbq8YH6JXX881;F}p>@~At|Y(<=mIVGyu6myevzK3fU9Y>w)2_e{*sdR zH%tR;qNWJUjXedJH5BH?UINS-32{_N*7uz82&JRM2 z9S4}T8zv#6$0^ynDvANG;^-<)+oJj3_8CW?Z8CvT&(V5LdoFY5T=3oNPALPUjFxG4 zx-c(!Z}IK`8(=dv>u_1@WWcPAaartOz^r`{#~-w z&?VZEsdqM=EgJdq>DFsU^qZh^!$*dX#q2mtAev1QOcI%~ zb;zT+U7G<{(n>AKyVqBo?%(liGvHEMs=ZMhIe^)`!6f4!G+zIwxndjO297px+AVF| zQ`a)Qw~ZMEv_MOPqX{sZOPJ>Lpw1Xwz{Rfs=h9p)`f*lIVBfZe|GHLk33Ds0q4_vElFZt`NO@tjjeze)5Tid;s^!I<|pn1M<-x5Hxaj#zW6C5 z%yJ6wQo2-I5+^BOHbybJqjOBRY5VarfbG<-Eh!&Jhi{n9cEB#`(gx0NvEl|_C$x4KLWg*qsuw%mTt%#hNofOUW%*;>uDn literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/tuple.11670F49A1019C73.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/tuple.11670F49A1019C73.idx new file mode 100644 index 0000000000000000000000000000000000000000..7e271634281f808a155cc0d5bd72f790634b1093 GIT binary patch literal 26626 zcmeHv2Xs}{681T_oVw2;g4U!NDE%YW>03Vj457CDrF9rw@2_z&z0Y$0;QdCd~ zp@Sk)eDoGdFi7YL5T!{6kt!ufQL}ZBvr^B=ybAh=_?vOz)Xd zr%s*0H6G?X#Aw$SgnJCG6%qAr{pKC}r==tT&cw$$rlq)*Wdh-pbxZA=kr|Qc7H-)Q z%LIO_2zZie;zeHZ73q)4sRCc-0MGM(#vAyb9{dl_xgWz)m}Pvv^cV%cqxPs3;WY(( z=W7M{f`7Y*4NxnB=RW-I@bI6#S}l(?v6|GF|3-MgpGyy{A+&UNf{f%rNeP(|$%9)# zpQzuQuZ^$z(q{he9&vY!KYQZO-s#_}|1)8);>>|*NqrOhBt>9d2e+andKn$l{`9NT zm-V(9*3;*yKiH!q6z1;O&~aI9ANi3#*4bUP(n9DfKBD?R2$w3Zhpn9Ox1_}GwIUKa zCMKu2>k9UOzX=`V-QU%Be@sY5SvQk|fAT2yj#fUM7>$j#fL4AK!Au{yKWo>RvPIky z^w9*q8t^8bZ@p%O7k)A&CAAx}-1On@!hhE>?I9G~5hplznfNG(`541np1W5(qTnCo zXx;y#sy~RhmGsX{PD#!j*h;XTY97(1LqwB$jp_&;k}~_J_l-#OOfBh2J(ALs`gTi- z$V`pM?3EOeoY^ZPiO&5IsXe@Mr3IAzbpO7|{rV^I3f!iF&XoqrG%U1KSw#BVi7EY) z{x5Yx1^-ReO0`G)SMT@7DwX~C!=?Y>iT`L4to|dE{78D3HT!y0K7s{&o1=8yEkwCuv8fZG^iKvEg&;FDdJ(B@Ld@inlx!p zC*p;~-pPG?(i$Z9?3OYa=$Gl_sr9$hp>NK8vh87Op3O-&KH zHII72dIH}6iI<;9c=??~n0Vd+J7qvsfY%=WbrtB^T55UrF~;-tA08^*H9dN5P|YL1 zX^hZ4sauMB?8YYc&rGc$^hi!gYF@W)-ToQrb(8ycOX=S|scyIE`cJ{%y7BRK6VuZZ z2bLw&H90c_9)3HucT$~Rk0hLtnUau}n4JEI;{7v{G7{X@?UtCC`Unq|_S3Q|;+aK- zKlI$5NtpueOhTW;-bo2P(o_3T15-@3r=}&PyK58qxPTv9vQO+w?i2gi$}8FGalvf} zZmljIPOx!@LFMK&Z%#j#mg)mqw(^DUR;`_um<~Im%%t?%^=iAf2M>Q2@B0uAj+Wl7 z#2=pcQ!S;N40rMGB&G@O!Agx%`hQCtU9dK~-=O16|PAy$E= z7ig6{1V!?DRnNK5ZHG#PZe0ZHgyA@0C>|oHrqnH65NkU}&3w83Gv*M@WlK&JtOKfe zK$ScM_3T$p_VsDo z6bKcmZRShje6S5ADAKlZ#KF_+_EjRn-=Q`i=#CF`*+T?1yh8oI3Bs2v4jF&TYZgrF zGG7trE1;#6pq6iMzdH287C9b~i>i1LEJF#3d^Dol{4rr_ED` z#MAKF;|>m4xV7WDSX$v+Nz8=`Q-XRH{d8Ql zpvb8u_tpl@4{b!XTyct5oRUQeiga4yoYy*dd}CVSql$PGDohEAC)v8r1hn%f)SJUG6x= zJMhw!ph(rX!@J}R`{p^?trqBx1<6u&Y^xgTJAiE6o^h!^0cDM69l9V)I~wP)!|M0f>y-a_J7 z2tAJy*7M#FKbrT#-7_7jo@m?pp>AN zu3Pff%zZy9h1TU0Rr~}jLkWt^`F;K3A?tRe(1Px1j(boLC4w61-?)_^m~r#2E?xQ0 zzEsO-RU8dkC_ya;lx6W%6BE+i({yDkSJrZ2nx+IrW}7cA?fk;Y443VVe+t$(QyOP# z&kwgN!|en`ZhY}n_U5n}{fY28G{I8hSPFfZ64tTSNV~&>S4O`>Yg43%MPNKiP*0Zl z?AeypKJkdmSH<~IVM(bdR%dk#+@M1+^1s6yf>Bo#eGP!+Lx4|i*Ce4^K?76XC? z)1nrs;v&#P3F@iVb?oSZgP|beo@@5X;$E0*C_#~C^X z|AU{uDj7l>;hN^S28}?8pjHiN@VFpUo_n_NrJ+NH65(a2@DHZr2Q$z^1T{8DXyUH$ zD`ke5mV<3Wu|(mMx0k7TD8Jf+C;I`KNu$z@M_I z$P`ta0tHcmB9(itcxuD8+tX-ue{hOFz}Th)MgFxSeS69DnCV352$tDO99xO$A?_Yr z=PkEoURwLx*=cX>olS(^Ae3h~@(ja61XXwRPIC)=-9C2nlGC?9s51y{AdU?%>?mQw zZc|YGV~*p~zM?g{>GZn^U5gT|(XW-GqSwcCT|k7^?!rt*o~e3>plWuZy}PivtG3_o z)wFQ2dz%_+9n$ne&@CuIJy#cexO(to>Jr!}z?j-9>sw(mp#(*q=}@(Ef^*hVYQiOo zxCC095)^r{V&B(O#&lRt+iILFjf0L(35vXb_uYO!=B`;mwQNk<=4aiTCm9$Rqx*&`-GEh>64bIWAaZEiPbwdzT2|}zh?w{2xeHwd6};K4_r?Me<@QKY46@-W6Jx97W85wx$F{e*3sf z?tqqkZcr_=C2=-rp#(*mhu;bq6Y}5&3=`PHF4v^xn&u%W5;iJpLj3Y7x7~v+%-XK$ z+hMR#f+8=pI`ztXH{0By1znQFOHdFcC?bF_HDlMag79_IzZX{fdA(qBSV#1TBYM>V zV^3aRF!^jVHrtHD^@&*1%&ODOXofeL`X^=4r1+a`tNYYV-F=(q0_(68IPTsSmTrmC)5F(7IlcK`~$8TX<%J`avpnzhDM*O-;Cj+?uT9Nct! zQ@PwVA38YTji`46U-kXx^WJ{C+CEi;c6C(P;i!&`+N0{`&Cn`qz?g1CPB)^Ffo>46 zJN1EJ%cAoG7}WED3~W)m=5chODq`iEkL8=yyz8TN)C@XmM&gz(w5R{{g9W|(%bmIR z_B`{dz0+oY=;WSB#nXep%9^x83&i<{pd-r5_pJCHjE*3%DRuv#O_A2tJWd~GQ@X!H z0peLJ8K%A)hUxBrVY-MjOy^&QeJetsVpTRPkyumW+0!xkEsAT4QW>{@#N(4-e0siP zm>yXerp^+E>5-9PdfaE29@`nF-XVsmlYwD+U}Kmb0~w|pP=@KwmtlH-;&GGtYD+w7 z5zo1Z@fWG_i`2$=gd!e~2IEt23&V8Z#V|d3h;?68@2e)mqqQcZwU+2DBi2N%#zd_S&IT}jXicVTE%EF` ztgo~hUukvF4MJdL)|YF3xM-u(5_&v!RpPYnbyaE}2PNzAZZqWhTeH#~E+G8qv%t-84==%o-_4s2|(BBWLsFxorkMkBVsBa%T^*@LI@>bR1?d!t^sGd;I z+jD1TtJ9~SdA9yv{;~lX)f)`&=ii{*^(+j6fCXvj15Jye4`BGN;TZ6M4Izzo;1k3; zX@s0K!f?AvtW$<|$}kaQ7z8xZ;0Hd4!4F{2kO#KnoQ=g+o67fF{N>Gsu@vZOG?0Rx zUW}kXReV?S)N^l3XZ8$z0yc%+{JMo=&m>m5Upj{hMZZFk!zV<)6AWYU1+>$U3tHgh zweK1Qj;hffx+`@$;E?FGv8^=M|EXuoUBB`Mku*=}h*_+BE%+Gff;RKrdt!hK7&NSf zy%xh-!0_GOK2tm_?Z)xhFWF(+`vDS?-iO4xA3x}ikhP-Pv45n`QD}5>P1@oBCRpo zRcD(@wrQYy=gL1r{kMG)-Whx%Go{d(QVhD$h&5CV9jeA)A00Mi$ZyV86FWPJ)uuul zuZ0LiLV}0MQ5YlvFOM8NPL4ufGQ6)Ed_#?5r-t9v;NR6KJSAYgpiO9~6MH%e0D}fN zk@4MoZzw0ewkJT1^UbJyvoY@^sCv|Fh)x2Ggu+Bj!=TuB82tp*zDK5}pTE~%`Q+Qg za@Xa*YqxJ};nA16wkFo=L9bWA7bRAopgtT*uba+!%?1Pw;CT6BP`=3FBVy1I9-k2F zo)EdG&xt|jc>Y{l;9MKmE#}$Gc{a|Ax!z{3=kb19_Pf2L9p)TVqIRQ36*hAs8HS<65hg1`Kah z0yiol=;tQZMy1w9r2)e?l)xKG2%9!;D&(dT$nYH{@QxC~rjfe}xvK;+oTY|msWBKx zBi2+kaH<-@@EkRKjv9jzJz~vO1LvwC44+ZM&!{nM+BvI|vuYs2m(=h}Y7Co(F016S z8p!Y>Eqsv{gTtLzi?uq7wMGm-&;lN4!QR-qHChiCtp|J0_SRZGV67hPjk8zr&0V(s}aqr$%o7sE@9(4{;-$EcWNRA&4g zM$`@?&Kn)HvdzG3GX$qmx7Xa5W>#c)qZzT$^g2z6waEW6d>$9tj6xnCwi$d8Ov)jU z&m(`Lx-iuTqCu)WMRl>caF#01QeABBo3G0ARTuBLl^3Zl-cc(rQ(d@ehxnB$=cq0` z?-2-)%Ue~~`<~c2*i)5vt1jGz5D1sZ2UHi^@*P#>qpFK-`A)0yY1PH%+KZ}uQFYr?yF(mv?Y)FHp6` z?$~0ljH({AySO2Hr}S2tPNEtETSrBIUE?j#P{*v}b-&lk7#v|XbmxK!kZVSd9uOK3gs=* zihB<*70p>g3t&eEhHr?%yP9gA{Iv4=>Ns@a4Sj<$os5+~b!)n>Z<+n_70Wm*r0`BCW!<5SdH%) ztudhn(YErUv=m$-Ap=x-eh3Vlt?TQ6C#1(8&kw79vHsCJKRUYR7x`+Q57x% z@B~eB#8yJ1!4tk##c3U$pec>`gg2#8^CU828Rc!F%FUm1a6*3bnD!sS?3|c%1qdZ?bSo=Nc={Wx?jT2D$%&!xZN+|my~Gc zez~cH-BhC3x#_MFc2|jF=cMn|xbM|?wiX{#M#U zUNj9A?S-WRgC?J1*ZQEKTBWu_8jmh>n*3h;aP(qp<``(BP$krbBYo7ML5)Uq{c=pX zbBv&!!6G!}7Uza0|5&!M!`Q83%Crb3<$^_MDlR4mh4egMcy#!paew*3Fl@r4mwtTV z{J0m0^@j9D2(|&S62-(IhI)uSIMiG0&7m|gjYDsXZ*ypeDD4nAt$RgrugLKah~fbr z9}>kwJU%9h$9Q~36wmN@vrXJ=BDEave&yLgYs zBOT&M2Uq?$hd7SMpE<2;e%i?62d!N~| zIGe`{WoaQVpC?OsJl-jbJ9+s%vbcxG!&GsY%IP1ailcb^u_}JdGJXOr&@h(-|#pC^|xSz*IRPhLpPpRT59$!$!3p~E2 zO4n4*zIRpWE{{iP;wX)?$ETY3DUYXV;xr!5*TnfeUaCn;HBSEzhT{jro9GC8Ji~F0 z$74)sjLFGQHl@i7qtgKH}YcGi)8tU+1j3j_1={YNn5-Uo%Xv6fjH^ zs~Pq^nvsVh-{hekjvH6G?u^7O5F}ZZ-VZdNFC$?`(&8Fk)||VoXO`)P4cCd zyzk0=^Ox~=OYys<#>|(sPpY<0ieOzbS>@l&Ugc8NG4CtE>~oDtSpU{bry~rFRSBali?|HqbYK8^av4f2>EBpE{5mGb>_$o@EQ-q1!R4$ z?8oq8Szj#sVd4g{R>+POvdYHm3ORU%9LDe}*|Cb}uaZMo$=#vcU zu;JOJAWkKp@r_ys`6>XRSGn(9}dn#+GCeA z&UgHa7X6D>(|h)Wqo;CBGZ?<5#of~Cd7WtBLotGdOc0xXj1NJ2E+HY z==(f>q#id?ugBs#AL!->dLYB2^ypD~O@K{PlAwho1hXt)y&~o!63FmUQgJB>Mpp$S{SsptON4V@g%4Uy zLNE~y#s@LikU)kvkf04D1QX*RZb;0HB#_}eV&;)R78lz_%xyd_AZ7sxME?eXxS6q! z1TcJ%R69sw+4wk2?1zcM#?Nt5^*E`{_$P^ZlDT}qcSWk)CS3o!OU%1G{{gA;fagCT zwH}aorf--LJItuf$}2R?LL(4e+r-*$82gO?hEEvk36>W|;8sJm6GklNi4n;DQ_mYF zrUSZh_<19W;d@5NJtLfzKi+hVH&yg8!KD>5Y`j^G;Ve_nGX3zJ3G=5}Jf_7^ z?5Qb}99ur<9a{vRqe(5A#1rO2a{aKsoE1LON%cu?ovUTurC zP5aA@k5_r2MBm*u&SKz;p|^K&S~&1_?{}9p-7x(xugX^u@AW*lZ}yBb2VJ`jA6!kj z++$WSv7XVN;j-^aM7>1h@CGe>gBFdxZ1>%^pj@po-h?97aZNw2aq?$0{S1#UX!->n zU)A)hnm=2wi#5Gi^JnYx9ZkQZ`Lp$SgszX!{n`3DNjE3y715BynymXx*15chEM0;L zgYl>8`c$2(-$LDQq3&Yq^D5nMmF{BebFS`}tGn3xyj%C%t-ILzT%=bo(z*G)NN-T2 zH)G`;Ao>Bqm3M$tKR`J7b!OZ;GoHy8m~jORPn>YSeMH9OSuh+_64$K4%Duj`{t>b<^e=G4|L7s33x%;CSx z!KM0aaQJWF@k(dRN@ru7e=&Ln8tD~3)QDj__iR^sqaWjP_OGwi&Hlo*v`q8koqu=> z-@ANx`~wEP-;b41w1y2=j(&4_nX2&s0~&m;$fi>4~Ed(=2VNTO3P1dU58S2fT)%}WR2|0iHVu8tgU=!b~l5IY_KdWo>pbaqD zY;%Tgb4IZ{(tDhtdz?{tNBY&*gMNDB&A5$_WZSlCTP{0tgd93Tj%26$338p=HO;PPS-bzA4+8Ikta*Oyf^~`Vb%)|gg}g?I zP2&p6-4cU?75WJMEfMUM-o2CN`2~^k+BBG;0VA2-Ji-^j=?-4q*S(JOA~1aY@c5f1 z!0>grV?5WNSgT}hmCR*uuam2-lerAs(~5Cg@n@L<7Zl@y;?FVzt|{_0MQ51-C5l|4 z=qxj!NHvO7f0h~WqiX!9`m@Y{(`x)_wGqnRWZ|)!b!WRV3yQxet3FA*Or75O{o(8w)!Tp<3D32Z}2jl_}_wT!) z@g3HGch~ZrdsmkAoDzK=Chmvxa(we}@Xeu(d~cScGaMMc-f}zz*)-2jeqbHlnMEN- zv?$ygp*tTm`1<=XKOPvqzedozLqeVXHxhn9?ZxuYdVE^xk9k z!Bg$`fBoOR5YNx%0A0T4G6=8+Z&5!R)rZ^hd66>cvPT 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/typeinfo.632314867A8F1BE8.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/typeinfo.632314867A8F1BE8.idx new file mode 100644 index 0000000000000000000000000000000000000000..b00f71872dd72ad042316cd95562faf9cb9dd58b GIT binary patch literal 2518 zcma)7eQZ-z6u;-u(Z23&>qhCuvdMFEkv-y~_-|u$ohR)8S$XG{w!@dkR6c1x;9{zMgOC1n!VSfCwye6upctV!9B{j8>mE(CW zmEA3;vN2WDc+8NE-W-o9x`Df4Qyphb&F5skFUE65O3mti+}@Cod)2(G7zWSe3|Yyd zhrLQV6_?k<@&XncW` zG~d0QkB$?IAKE1Ay6c_h}- zx(>gQ6)Pgql%YpT^$REemwr;wlReR1gX{loKtVFgD5l0a!wzt!=D4O9s&@P8(sI^n zHDV*))@F~C-E7%Tl6Fj~CxxZJjnbMGl8V6&lC{0E?btzAi|M_Y=o5&-bn4TlQ#Ci1 zhXhZ6iDTdy1Id|~&&KHBPk)ab`}Xa-146Lc-VtY@ZU!1i;pZzqT>bpPD-Q&Oxiw7G zM6Jpi=vdiv;k92M|C0xViWfrrFZOq z;c~4IqOMMXH0632{P6U)@{SXK1%z^pA{vMWt$`x=y?_7COCLOa(~3YGf{GysITNX9 zJfW|^XOA!jeg|39EJ7BD4x*^lgebHy;Y4k@zT~6vFTPs#5NJTR&p3QzZVBr)0;4ZCVuSi8@a3ay0>SL%b- zJ}AjI{%Bip*U@P%_{ELV#wD&AFXN>s2>k$}je1IkP%j7;+G*P(9)`-p5F(sVNiaDZ z`ukqKe0AyZy5}SZccdVR*t{vIC7FthhBh5sL!0KLAc@F;ahOjsu>>Qw*+B=L=byit z{v~ljkPwZYe()1eCGjW(jzWlJ%B9?I(Z{{GyP`Wphmxp;w1w1ZNi5VCnyDrdGNQf@ znyCnqcoLdU!cy1P2AnGogJ&2jsMr$Ldf_lEa%GzxuKoxFN1%~tM6^a=*_@^#5}C0U zCW*(2>nsI(SFiaqir0$1Y&)MxlNbnyIJ~wzZ)MEp#J=gq*lFW@0oR z*i0r5#AJ-oW-z((hr8PEdHCbs=9({h)fn92B6J+;#$mZDPe98Aw7K#m)J(#it~>?x zQxI|G8EBbt_35cVsG08sk(K5s!8&p7Di|H0$oj*J?P4Sbdo1Z=VYUS&K L*T=k+IAi|+9C_%o literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5A59583DBE28918.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5A59583DBE28918.idx new file mode 100644 index 0000000000000000000000000000000000000000..24e69bcc187b3c4398dba19870b458762cd66399 GIT binary patch literal 2396 zcmb7`drZ?;6vxlOAJF!8N)TZVM7L#2V8u=*NH#GhE-d&OL*2~cBNdA4c!({Hpb@nK z1LhQ3C{W&yDx(B7#gqxG;utP5>xLM!OSHulN43f4FIz`|0W&vL>_sj0^`eiz20gu>rF*D1=d`n zKF??D6@)N>PBNeNPpOhteG;5ZO@Ayok zp|1;7g^`cH1X%U`k#F^JlN!`YK4dSMS_5wubOSpZ`c-X1>d4?DgvmO@VjI58edABSh!GX-d zJucp_IGSC&IFW==WTQOG*|jg;zYv|JBcTylBL*uMdvfoVvC8u+Nf<#kg7M1Yw^~bd zWzqf=68e$#W2_<^w!OW4U9o2k39ZOlaj_yC8o5#({Y}c*813=a&m8%bzG*2dF~9P&=DNGpAvin?F5Ke&s8 zT??|Z)7E5>{RFZJzQPIZpl#{?6I;o?64jOb5ZV&0J5%iLo#fGptW#Ja?cGQIZI=ur z^dalxp2yS0}Xo#ErT^5|koII7@rdnKocYYP6avasid8p=E zN9diCN$-(I3$hk2oQqG@g}-s9mIOaCKkw4;?YVh_tGAsZ!H&$%J?_;Qbx|!DEV{2TlrHf$9pLVb=4mi|I9k9Td75Su-zB z=EK;Ez}EUc@`zEz1h3clrtF8YKh3zw-iyr3Yw+xqv&Y;|H=ZH;BkCjE{*zqW_J(8+ z+1DYf;|s?QXC&X;{o^1BO~{(KaCy`Dp_Kj==bzI^)u^uK-6ltXI@Bn8l3M`kMYbc@ zMRp)KL~cN65V;Y7O3mXr5vW3(n-H2rZboPpxdov`WEX-<BIhNPt$vpYv@sNJ` f@_ItgTVwY^F>GFF2q=GvNDWbJ0K)h*lu!Qwoj}4C literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5E7FE6DA0F78AF5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5E7FE6DA0F78AF5.idx new file mode 100644 index 0000000000000000000000000000000000000000..0ca52ef9f4c0bc36d6975dfad7856e1cc5885a22 GIT binary patch literal 4442 zcmbW5dr(x@9mmfB74M!4F3Vk3KxGwq8DRwx6%sY^iKGw_ja5@z_TGinWmos^2Cz_V zQmvv9Ba#{G0|S{R(#nLfVyKB|eFR@s<0I9Wq)cTr&e*0kolFw7{oTj8$3K#pm^1P_ z_k4e!bMD=<=l;H6Nx`gHCD8~?7Yk~tq@Z&ELMR4)(i+p9gnN`EM54^~QcweDBD$FI1CJ;R`v+Jwe&AGFS=EBpNA8}wAcDfkIDRVKo@`LQ#VV=PNv z$@N4tjJ=c}JH&2%pd3>f4k|s|bfD_WcAyG1YQg7M-vE!#4~Z30Ekv*1?S`((FDfsB z4-O9OKLSxDwd6{5_NtImSuY?}c;Hn~UKd$^edLfVx%@s+1}#+Pf|mq3I5S$z%2j0; zkI$x8>f$OhNtL{QUj@+mEkb2-r9S}E)%!lSxLjLR{t&9dTlKy2gu3T2LGcI)Q_WMY zYCxP?E-)UraKWkKcXOW_NKiHaMdl)_8W@nYD%E<j2ss;vp(YlFi&-BLm7rJ zM4tJ>Ij(R5L74#U#+KbUUhfnr3?cYLH!&6}kcB0%ZU={7Ym;LAVGZ_9qGx|E;<0Ng{|F=}8y%+d`<2d|zj6J!J6Cbr$g zNqWbiwRZBq^)(H@BxpE5ndVHZ8W?bR=1Y9rv4OuLXfObI<~*w!7|`4LKHhdQd?P^_ z0PMvvd+{*6W6(D}&xKz-$ZsMj4WNxUb|W6CcMOsbE?EBcP3KmEtN?w2ZJ)pcYaN5; zFD{F{JEyXVps@h8;FuP;oz^kv&Y$}0TRu44Oi&6yZJ2Mvv3kd##JczcCyx}qLC|=B z)?w>9_%gMQK|^1fm@~;Q>>wx$ppll5acW?|`AP3&zI$p%D?!5mm|&R@rv?T*-~IOA zlWo>_2ucNDg=IyY8W`~Y;%k$|INVOqH~^Akk`vUxfO)e%A|2lzdXJza07}iJRy8o- zQ}ei4-0r`h_PTY6=_(g(70#INn zh*JXt+})1zo%frs5cCuPdvMGi*mkXB(CyPRmUkZ6d6l4WfNo&x4cJkwV~~AJ)Yd)K zS8ftC3ZNyHC2?wCKtp40*Sy}G+XRgUV3~QDRSgW-b$a!f>U)8I5;O>afF%&81_oT+ zy;fXA27N_P8~`cNDK<4QpeXm_uDnMnj|dt8K#jS^ss;u?1$N8zuvxyX$68Kob0BOI zw&1~AFq}-S)t*@M^cS;VQ4+n_)Qe#utoevttE9oFta23Y$-D;?gNDAeT0a-T5P|CE{v+wkgdl%Pc!_&0l0j(H*ebw6C zlB$pP|GO{;_@&%Z6&!0PH zhw(xej_ks4u(ZYteK@@jPoQI3++n^}*=eF;+LTd49?tn$I4|VzIZ$o2#tV!2#gC1y ze@xSjF0{&nlf*DvR+gv557upL8D&>Hm=NN9#a6YK9>+8$LndNm}P zaC{R6)6yC>7)U7YLS@vEQg|y_&lP~pefy4=HI>DZax*H^PPt&JR zM}vg!V|s$R7$h_cqxYcB1qt1+^bBP#RjwnSy>M<6R^MCC90 zum0k8=YbB8y`0zh4hnBnTuSk_c7mMGw0A9|F0S zt2Jcma3Cx8MsImMe@B)ryQv%GY1}k}4qQI--Q~hJy5UU{M~m>wr`C9(E~yS&nvS|~ zau)_`*V^9i1oXi3pB`8XzRd=9K+mpjdGo@7Umt@+?BG~|^3+p7Rt%NO)JZ{BY?R95 z|8_6R(Qxeo$f>4OV{@pjf~MtXrs_p#};G-8S_EHBCq;j!74Kuwc#acRgJ9 z=|El>5i!E3k-XrK@IN-Hj;uC50580bBVK3qlo$5ni2ZDQrzo$ax#=ID!=19ZY-7)< zDTAyyGJODQ#ULv_Ol4}oAS>=m<-KP=o;oM7?;DW2G1tvrOX|mvP|TR};KE*~GLQo< zxly?=D?w{f^a3H{qatLu7D9&QY5&`y<3rdq?JpU1Y*ZSAObp=JrSQ!8`cw5CZ%Twj O4KYVsxJXkBkNyucV(;q! literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/typesizes.h.A6E116B64E63B90B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/typesizes.h.A6E116B64E63B90B.idx new file mode 100644 index 0000000000000000000000000000000000000000..294dd7edd607d213d668ef9494bb31371e1d6c5e GIT binary patch literal 1126 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 bE=n#I2Qe5y1OzY{_B~LSUzIDv$jATyoE|{> literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/uio_lim.h.DF584C6AE54BEA07.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/uio_lim.h.DF584C6AE54BEA07.idx new file mode 100644 index 0000000000000000000000000000000000000000..2d24569e6c4b14ba7cbe236e24e496e09f437b6b GIT binary patch literal 180 zcmWIYbaPw7z`)>~;#rZKT9U{DWD5gvaY<38C6ES#w9K4TD}8*AT)hmS36;4?Al*f&X~lX#I$-6yb8omm zPiN#}6y^{X2OA6|_@3KL&^HYK0u+|zkQIap7p3MTg4o4H$;I3t2IJi6?h^#3a&Bf| F005eTEYbh~ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/uniform_int_dist.h.5937C8C5B8D24592.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/uniform_int_dist.h.5937C8C5B8D24592.idx new file mode 100644 index 0000000000000000000000000000000000000000..2b77968f28a63be815577c0105daeae169ef3c70 GIT binary patch literal 12628 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 KjDHQ{U;iKO-&CXk literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.F95B2A6E27B9D4F9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.F95B2A6E27B9D4F9.idx new file mode 100644 index 0000000000000000000000000000000000000000..a51ed3f2111fe69fa656eb43b09d26e09079657e GIT binary patch literal 1576 zcmb7DPfXKL7=PHK~O8v$(oB#)mh?ZC6&`ocV`Uca?Cd zOsXQmM!7;{45Y>|WBh@Y)faR(M93+oAxNrPmL;=HP8S{VF_8=`Dg}r1LPe8JrL0M+ScC=~sw}E0 zn!dEZ$>@TFVaf{>1DMFM_n%}vUqUL;1=bh(fSG` zfQN+*Rz)=xILOGTmU3HgaLyI+uohLz`5GF0q?+IJu5=r)1jA{uJ=R0 zp7+ilqh(y)`mr*+l^F;36q@2Gn|A5;)w-iSv0TEN7@(P0F6~Jlr;$dhv*D4Q(G`d^ z8JHZRk?!37li`i~kHNiw77oh!Fp*k%G|W6>SZ*dX6ShOnh33LEBz;3G)<)4P)}Ah{ zdVbULA=SnnZ0x)>KmG#kbbLBRSuB@~CsR~Quqs*g8$>o9 zTA<5X>JN7%yY?yg=3Ot_-PP6^>|lNE0lyb@(C-KZZP;l;uMJrncH1yu!!{eX+t6>r J{j+2_{sPS-w$}gv literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.h.91AEB6757C0F604F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.h.91AEB6757C0F604F.idx new file mode 100644 index 0000000000000000000000000000000000000000..94b7a976e918e4d33f24fc0d9e8b13475c7c04ea GIT binary patch literal 28122 zcmeHvd3+Q_+W&OVOidp()18xK5?}&>gdrplP_7UWZ$;O0b$8Wl2!ljJ5|W_c$&CmC zf?P^Kz^EMIGU1e<0&*y)pxgrCzVAx{zo)1ANp)C%8~1(RKbMcrlbYw-PgU3P)KgX8 znx`Lm@WHJ;Y_|KlKGM5KpeWN}v)RJn|H7hz?9m?h!}zE8d>y+KWCyzW?)4QGW#)Fx zEa>XX%F8Xv%+3uIz+XM`^9lo9eRJC{J z^~n$T-pDTM4(LEIr)0$_CD<;=>y_{8m77=4HBb=fnt_J0Uk_wd7r8J9F3Qg=$n4?s zWjqF%!@p+@qmYSFmb@;n2C|9@lMSQQxM%YXST(LkW`4f$)_(+jIJ2-jKn-EMZ?|5# zSw-1-xh6PR{v==5K(|b&h(cdcp07I~(=z^QR6%;pT%Uy308@s@&Vm}L#Tbm7eDBvHNEiCHVu3e__sPRl%Fqxm3U62M9U04*X z*Cb!Yv-#=pM)3UOfq?O@&|n2dHz^48fNsK?)t8p(>s}D()}cXBW|y2mVRHAP9ytx~ zzNwnKFz%5Hw+Q0N;Ny?0V&9_w2<6f-li5KD?We zLy@mX9yCT??w=WK|DT}-cK$oqg2Vidk!!Tmo&Ww12Al7X?EZJO`F#IZqwQY@TVniM zE!r`^RqaGFU{I#PFUh?2XFcxJn~1`{HgL`ty=Q>Q_lr6{LkAk$#D4KA}!g~*6w|v_5S6dKUK!w ze~{asdeF%7KPVyO^B793|e5SIC1Wa01$rk~9ZCR?`43MP#S zHTXp<^9v&a3Vv~y`9&~Xc_*FOG(y7MOqgQ1+3K&rGN72*;CN<#8l#%$g?}5_;NQU< z;L&PJ!KbTJhJosYQC>@unW@&Ir5cR_mU|Ut=VTZ4Nw-zUQ5nWFw#*`1m%uC8xwbBO zc{#Q&y|P{lz&Akwacr;L>O^7on*m!^yDsqm>$WWROjaPbt1T-hkXc|0_R@^(qCkNW zqnSw~V#~Sn%ly3TT!5Jn2*x0O&dmbb!Q8rLcQe0WyJmEQGDE%HQDZFhXO?Av7`1r#% ze?SS;34YjQ4;5`TL37Ss-tgwK)T>}41#B#}lcjcQ3bZliFO_l1uz@bscHg5m|9Lt2 zyxiIp2x(vM=#`JRPE&L-4Xk`mgzpJ41wx`9)V~>A+*yqjpERr}!g(dk6bLzY|3&F9 z`2kfGI{@USOmE5&ra;K^q56!>u~8mf41mhwT)D#H$xTpH+viHivbTJOzXrPNgMVkU45xbvX zTX8KSf)%&iPRgN;m_W!s9_ah&l(|Wfy4V=3REnfhludz<{xdR4?yk7M4ui~;$V^H0 zGl7r^x1Zl|?5!P9x|j%7jycIOr)mm>JhRL_<puzTOVJWe?7z0+8X=ItEm;xcqw#?5Zt47AEw)$YDPm4b3 z!4FiQ@g0n;N;?e}T7r5DAzKJF1wt}D{-9Zl*0<_HwHZaFWGaQC1_eUePy8_M*N@`r zF-S2b#Q7t*2rv4HU&cZe*JlP!opV? z>Eb=`+EYa`RrHtwA-y|X+!*ynW@D&+u(I7lwtGTMfso@bf7)Qo-v}Cpc8=p$#Q%UtRfsoDZPCafda%Ej7F)EA9r7YydCE1VZlicmJ}{Kd-h@#TH;?us{b3^-O_~ z%-$1{7wB1c>0)z$Omqqpogt<`NLcu7%{6OC8hBiQ3=-%dA;J_0QJ#G4Zx_Sc-oqT> zA%z?QN5}+14)yq`{pgjBj?DWnCBjnh{!Abw?Xi^B{(rXa#9I0bDttj*ekKs|!3Tpr z7?gAoAjTY0N`z9d!URGVbzimk31_SOU<^U09OWjX+^Q)MaxjoIDC_)(0BHwSHc4cY z6k!U4GzUI4! zPX1^SKw_aR-@D28P!=W-va5Jj|JaRVAJ)arU}c|O*av=_34}~N)ve=Y_oYWwTLXaf z6I%8YI+>yxvS#ny59X}x3>_0PTB(thT8JqS@{fYHS&#fa;c@7gVCAStj*5yY5YptO zf%n<&Ir}(k#vKaT0nNw+Lbiks^-Ml|;R)6D5LoFeB=;3sn*t%u!Y%JqCU1C37w-kg zFD~+n%VP?Jbbj)^r^kg2cpjn!fV`RfX6xVws=rNpVo;kKlU`uun5mGNP!1*#@=xN*hCD!BC zQ(-;yI3^I%v)g?|%@<9683rq4G*l%+RgWnUGXBE&-TyeKXEMlmm5c`n69{Q_EH^Z) z%NBsN2P^YbG7lh3AY{-nwR}j`oG!Z96dO$?lllo4_;0LPncg)-~dD|GUV0415F0vIm0TT#G zcYT@q)X~;CEY>KONIAqBOdw=I>ptn1Qa{O2ZK?1!7v*Lb<-1IQkRBJO^f;O}9jr70 z$QLU4LRC$HkhjJJzKdG179fU480#iuVH7ffkUe#uoA6Bg;yj3w0rI{^-iL^V354v; zIDb#uK4JN)tscD5du`t99Q;7_FT>aSCp=c3&)o4SiHw5Tg9(IOINN6YtY6>n2~Hg{ zIjWJPn%fiz`K_erar(WxfO&)A4q-UVhfE;k!phg0dh$d zE~%0!5b{!4pQ}Ub7QW7W$`XkzkrY1@2)TV@?a{!EL%nse36y1?oy>z#$OJ+H(`LoC z?=<}_U3?5O+UzEq-HIs?GHm*}>}K}M05O`d#7#<|37J61Z-s-#{`Tgkx1mEC#g$Vp z$sJ9Bki8TCy6(q{=iX(LU4>JqfXR*tgxp^9P~Bg490Z6F-ClQ+>k!>CfsnW{L%S`R zwWKeLZr7+}jY|DYAf%wngYMAuVf~;pKv{}4Qmm<_K*+L!xBr^|Ktg}!dJa=^7{VGR z5VCgP;zv?b`vb%X^){i{t# z+$u_{AR{Iaa%yQv&zqCq8>EZ(!%Ody$SznTGJ%j6ZmbJ^rbnBhFdu@I^B!{E6KV>C zOuCdeXS^%z16Gz_?7}ZFlQDr1q0Q8T-u7u9sJ2dE<*b}^R&HqugbaD%)(bc7`##jg zwosN!E^^5gX$pjR>D3o!&5s|!7RE3)?X@} zq!RiI69~DH@X40JJO4Qjh8nz4Pk+zm!4FioANH%d?|jxcT}%S?43W$LcgzGro=Z8} zY*pI*6Il~pqvRSiArlChbxz7lIyz+{dz(c9Sp;vx1VZ``d&qt0aGOcG_#o8DES1cH z$dn0$e4DZQ+QyH|i>d7~Sfs4c9cy&S6gF9Q+MbRUbmx=bi1{&}{B1Iep4LcY4Ma~& zpq)k$hZfv@d^JFfwZj63u)yIm1wwX3j_>JwCuNFiYXzk_E;l}hh6$Uj5LTL=TgTa@Ynh+1mCOMTIRGmeCeY5fDGzL0d-*GX80(=iA{hhm zHWLV0HvHy8wo#!a%u9V`Ctrb=Vxk&S=fwJ5W8W)LZBK!fyyUz#!4FhRHwsGT|M1WZ zXhwLSDJq$whM58(FCLikaGMoR&roeXfLxGUUVyoo351NgYxPU(u6_honn5N%67nMn zGX+8}ytHYqJbm?S76e>X$W;gem_W$1@6Y|_+5S?gY72pkPROYzz!frq5SrL2e%->+ zrPP)VEqy|FoY1K$Y_jCAg-5}@&)?^+o^Z(hz#NuUsX|I2D<;s+tNNJtLK~;dWsuYb3YO0~5HE0^We%g`yAK**Z#Ur$e4lD3-7@{8SMG0gHzASC+X zF6ZoL($+9P_q!nc4(oU(5VF0)+fnmh`f)7`RLJOvoP0!XV+w?XHBIY$bXw2#tk<4U zgcGpO$OJ;ZD1Xiw(x}LU>{rNs=-5mkBqVXGy~j5#HnLfMv_?k5EYAc&#y0wG^VEq& zn^`%yNO#}zha8c|w!#Df zR?0z+Hq{OlP*&OoPT0_{}1xV`5?_uO}m^|h0f zoP@r{1VXkXw|mUhzVJLN@IiqbgaR{xkTwU-4sTI5^*n4>Lq|F%w>T%Kn*t%Zb*_#6 ztZncAsmId zhY5rXd{c|wH)j(-jD6elZs9!a+cJTWdhR{-C-nN{cUTetWRFJnz=D_wgm{x$3hyud z1|V?&nd>2QJ*p`X(o=M<9IbSyVj1mn3%ejACJ+*J|4wDV*Bt?3Y(ReK6h4H`!~{ap z&u=_%{M*h|tV{M+NPp;(Odw?YjvN0}Cw2uZhSOQ8l9k|em_W#r?avmc58Gmv<(OMI z24!IaAwzzU9;tWe#4VQ5R7IEy(*hF+f#b+-g@OBQw&I`O&i(q3WD_0!nf9oeb}xpI z4*zKyb((sy%iuAd0CRWn3=fan@bFF$%_BQh%xLq}=7z_X8m9N@Vf*w5?8OfMDLw3z z9)ZCdp6!8YcCd#QP(GvtPx5*X+kd9%4qah_)DA#2)OCM4j} ziJB`6u3sdCFB0N#F+$A=hU?i8n>FoSBP8Hy9BiKkT{PEk5yH0!ap=aWIi9$low4xr zNkKX(MBs4@H4g!}{+uA46C&`ufSQh;>#qv-tAdVm0yQHGuD>NXZwa9ogiv$ajOz!A z(m*i+ci8A14NLtWh|&jQ1hzc&j}XZSF$@m`D4YUBjuad6^k|Wc7Q=7>Lt)jTj}hzg z^k*XZObo*V9|}{kI-Nw}EKOl++*L}#ao3#s=aQtkq%BXE6IVG2$JvYezadHAkhZv2 zPyHvQ(34XAm&cyTY@T<(NByTH^^_FF)7K@(bt#1RuN#v4hUDexo099M6wcFwWyfII zf*&HghsYNEP}wz9w%|v|juBS;NZCEoiXSDrMp^L_WyeG-{u9~tiBwTk-ZB6Ou3{q&kf}0q{qRB!C0s z`SeANhYWJKYIT-KBLEAGLx9Jot5S9~J$+z!?G}(_0DDghiG3lFuyZRW*8s~z{VR!m zC6Vv}Q&Zt+#L z8Scm-PXS(*krc3K=ntVNH612$65t8OM8GGIi2zS98UmIP`3In=>HCp&0Hzq_0G~jv z0Vo*J0P{eG0Vo)+02Rn9fYkyc6`+E`)EG04-ubO2cyj04OF z$p-K>V;Z0WDF#NFgTw+fgv0_+FggJ$aQ=cut2x1KY4029Y#J6<>&u{}hh_i6%EPgI zz%C`Or6ig=`0t79dlHRfKrtB!9M8fmGzS4haEFJdS#-qH?3B)$u0K<0fd_gpAq6*) zxV}`0E>)W1MiafG_fm7^!STzL`pcCTxJUs97+j5U{Td~DjnWiXY}7ox9AKWY8`qPU2v=V{)3E-fEoF%Tmq}VSh5$Ic}xlzaU zHx%iH;>A5Z@DRa6J+AMoN_|x?9{f@NK$Q$sqj3F1VbK&hNKNGF_f_(~8ij|J6izDj zp=tx39;cFV@Vt3qN#U49-R!Q5Cor(0^d7Q@s1bXPw;nx}{9 zj$yh5KU|lG>lXY--8IsR|5$f?Y{ie&<*`=$INdeQil3}ICR_1Sbk`KC{wv+_l~q4O zmuFb*&C*@7toZr5W4;x?K$jO-@nyQJ%!*&EI~H5lQO*jI6 z-Sk@Gh}FL}taUAfF);W{#(2W4km>|wU_2)@jRYr9Fj^BnfxX)f^I4G7ginBbaN7^L zB?Q2P@3voXOBjzK*$E;AgXx6!U|HiLTU;S{CJy_>F0$PffcI$%1+AcQ5Xy%e+n!x@)QD* zH3fZvQKnEq{a@P2mv#+Y~S>{>y@NSqR~KB{v1>rVzsSM*54S zzo_xOkoQIMzNqoNk1~;zi5ea{Q2!EKkEAY!Z=(JiQsWy^3ZGhs$c=}{mh?!u@kndBL~dMSP0x`V&#|VL$&Hus^iNNRFD&0M z@5x#nI?hVawHS8~dr(Z{w}&<_Zt*P4*>goQSF9fY)L){K616&w>^>L{2DJ~L$3*}b zuDMER(_q1|A0B)9Z?$?fB>jP5#`wctk5oTUFrFXgi3C4TFj^lzfe|qjhH?5(fuS)d z7=;fNNZ|uhjJSu2)eml2wR!iGUBV$cx5o~&H^kF8*p9O&PPeCE>5M_&Y=^xSAM^+8 z>H&KwAM}GA>R?AGl6t@iIMk7jP$Y#>|JRO&UpxHBuAu&%jwU-D&GEDuy0B9jYwcNO?D>m^mopd-#ObMO$xlS)3?%@z|$L?$_8f$p8rt) zCZ}(cGl8cstFf2WhDaQP^3cRlGzA%JF!RxdUs6BL7u5eFZT=%|jg5p1NT^{(f5aNb zYU1q)nPHg^}QyW{>5a?<>3KD|;*tJC@qrOYJcjRv5G~cYj9=?|j1@ z?%|FY-uX5-+#4J*7&RMbm+qe(F?g&Ao!cSpa76OXSm6w&8@AUD`Qt70X zPA?LuD6A0ZFyh4}gOQFOMpAkDG$E%+I3Cu)*@H`8b@bi+7M$tKlR$x=L?fI$oSp>rg^2FN{(~zSYWhXw1Bi;2+<5qFE&2)evMgm5|NCE~0V*q18p5HKPZ|Cy0J!|!4I3mFUV+NyX>|dZ@ zv|u!id|*&87BD`6EMTA+FbXg}LH!>p%7==M^e!VE{h?Byr>84)x)O>frZCkhG1HYe zp5CP>yA&PcREU0*=v_*Eo<5-X4k(SS8*j;nlvcQAfo%aL>9mr{H`XpFF&C6LzL9oA zX>>zr$~Vq#Dbcr-`Z!a-iqTE3yD4(Ma413zFd{R)D7KgLe;bh_?-{EWmvfLKV>_b) z_u61l#Hh|#6!7r6ce7rPZ`N$ll`Xml)5w7ai;Ve<4`vwBNgguE z6OKF?ST%X{{hoTr0X5RT{hnk@<(30&4~ojM0r%iHvSgFgiCX zkjD)Q#@D*v}ak*wb$e|p%ep|x6Q(e6lUY4&vk`0x1-80|trh zPsEsHa_A3?LXL&MGY-Ls2=Zh^as(og9K5x`BFC?(f4o4)3!!{vKVFC#FU0Y5so*IU z!ud+SRH$1jH00?+0zD*z@|FJ~A?A<}$I~Z;n3F=Bbtj<786k!51Y8vot_sbpI{|fX z3Jv*Az(CPAP;88$He9R`W8N3z_)frjLe>+C+-D@j!}~KDJih1?YkIuZVW>X7)-H#E z4_II+;}vN+<16`G2-!wf7niR3O`m8ayOqW~eL(RaP+Ia?`H0f^h>~KRmG3^S+{0((OG@e`rM-1lPPw79;j?mI zwP|0q6`z%FyUA_0hG);CN8EbES2%7845H~Fw&@}Da1h~?2UWxP{#cpl*+IcL{#Z3g ziGh}7%zmuQd&V?v9CN7o)LI=HE{wo5BmSd>WhU{TDnY_Oer=GE8XXi;_%P`wHtHv) z@NPatY&1kn;oW?y7&ldHiU$?Oj|qf*;i!ve`UV5mJ=;+S$+6Tw&*7VAUF~mhz(GYT z>jEtPXGbz$fc@(5{p#@Z1=s~gy$g;+JUze*3h;jHb^=x%UP}N4yNrMe9FU-3HxcmF zoB#dC$rJBMn*{{cc@Ax!qdsi^ZD{pzUC%TPkK5?Y_HWY$q_9j%W6!q&U*e|k~_ zadsH>CwY?^U@KF92X6;UDk~zZF6Ir3D=FflRF`A>$r1fzOL~m#8Y635Uo5+dt?3!E zYlbyFPfnUAS94fkA5Tsyx2BiN3CsCD8Z54~h^v|X>Zl3=%-8s#g zF4di-)^wTPqD*hg@k{g;ORVYd^rY`N=LW|XbaZy<16vC(eLxh*u6m#XqBunvsYG!v zF;el3RFZkRM4=^$mwSm4r9p|(oTtl_`ejNpI&=qbg^z05_0UR1o?%UoBK>q->X1ohum zl-o)a_cD`JGFc7B4v&YIP-E<#3syC<4nR?pmT+!lpO)|c)N4+yJ_D-|EYu`M*k_ze z`Q-D+d9_-=%P}y7897)_4e(FsA z)S1e6Hh*#^|Kv>Nn@_*GqJMSO#l3FWK~dt@DT%xbuUA6XE0H`sjryk1c)mmP15Nya zCh>*Ob=u}SO~b&0`ft%Tw`dwh@JP6`i{@1!?1Hs1e9@6YRkQ0u*bngf5GdHCA#4M@ zGz1EEV+fzXt3seK?g`=7ctr@lW*39dP~D}Sj_U(jRRs6RgqijboScpIi*TA&r||}n z3@f1E^&zwXu9}8lq_Lb2SKu&vR#zF75wGIKi-~@HRZa3i@;ASEy z*kvZHHN4COi+Fa037>$yF^znrh2z~I>Yt^NSz0&}9&jmZSPb58!Ur*023NwaGhtSE zoe9DZc9#jCfYm$n3Z)hIt5+466IyYGI*3utA5}1}GuJyz6LE#CCYAm4?yDWw zL38~36(c%+!(rE;Tj7iWikdvG6lZsG?1|5RthJ@1pIOxQ{Ddcd`mcw&!$Vx`uJ(rL}%zkr9?#7RgciAIMC2hJqq42k9k5CdJI16^KzAU)d^HQVJw zCMxU*yP_7meCR_coI}*v>Z*?i6Y##SkY8NUd=9E~X_c-zoCS0gPOmu&$oSQ^u)$Ic z9$4ckBh)v$@P`$PH~nCgu={P3`Z^rKOp#tVb-Mdb&hl^XNGhJD) zdoYbBAYhT*@WWoyc5|%v(H$|{YaQ!2gM$Tj0T8ps3xILp(}K7E(6qrpjUKKvz}O28 zx)d@^(RjGJQ*rE6+}thhSEBbT4bXWQ9M9-ON&_Blo>a(5MMJLxq%MVAP&6KHUQ-;` z6gPLPw-m=M#m&RbnJSs7YPf{}r{gM_t7>>&O#Pp`$>(m3&w6t_WR6GUv)VZiIp@)E zOAd$?9&*{E;iLqygooVnXgE8 z*i_9uRg2_XV6!!4wibpn6da^!$|5a{Z;36_)MZ*YZiyM!z}$PZNW39N;T*$rRI7sr z8&F;?;g;4M{RFg^o-kauq{jjQ(VCv2C(N*>7w8EKtmzec!U~?oXaaf+yX=V_1A|NG z_cgB(;l>mw*u_rlV;J6nq9%{{xn>i(<{x=2tO#qTXzG( z`-$<^-GJ~RV!U-XK%Xl5_-?=jhx>w~F0R&Lw9BD`Wy>PCR1Ph*rpx5eGHZIN9Jja8-%Esx;xfxJrqxQkw8yJYLnut3Dna9H#EWv@TBGa2%`G8Kx)jR-Lcc znQu)m*6S>`rYrP16+Df%Fu=vIYq8h{cV5%DlM2@J%cox>7X!b=P=7Ojvt*usO3Rei zJeBTGx9B>y>ez{T_9{N8>T`5Iuf~Zpm+$ zo;XZT;`z_l6X#pgi}l3C)^vrQSi#e{0)x@X?lxn^V^9wYcB2`GEuN@?g56`rC*Bye zz3W$dlMce}U_)EO2Dtpd>&?)UjJwTz- ziGFe7siBoF7%nl*;(0Ts$D~_QT_d~J=T&e?@?Me}a%_Lu+h4Y%uW8pY8R&3WlnKfVkb-N9=?mP-A=aKJ=U>J_S!vsZ1-~r{TwonD2F+OVGfz^GL$&< z5=WGE?CY}}QP#2Vp6`g@WB(@y`N`qoJG5IJWUIr2W5U=S?eMGP0bJC>%;+S;ogS;N zAQPM(?kko%h2>6}N383d!aApn^$K&2lN@w<@W2RWVkbH3^x*9&3YVwoF=seWe?Z6w z#KS2y2MIYyJUqgk<clEKMaj<}b-O$Gt#T)w21K7QM zRNxImc!J%=$Ige*H9Wy?;Nuf7hPnGLNE~*y)+reeo52FRppT`*Aqjc1Yx!szujRuN z>`p#Dkv9IV8EcESUxKUeO(U9GZl$C}q*+p3BDzGQEr=eahzpWM+gEPeSMGrC2ho}A z8ZE0lJxO*=vZm+BzIn1`sFusVa%=jE7I8(h*dL^~9i&_APtctcbeY?qsynAz(`9<2 zGQA1cFVPz<;c5K+0oX-0etdwx)R&6+wSpIKI>O>epj!nm#&E!96X+4ai*0748ypdu^YjU!$qAt~cdKUw zdRFjqw|YhJToGcqTdfj2RYELxs{=$jK=g9AI#i@XMK2G}z7ok-VmO{fzFo)u&P4mI zEC1zq`u}$vPuwhmvBrM30>>KuYy~LTk5ypT+x2no+H?7t*I?lP`(H!ATR3p7q2@Im z;5Y<-;sUd}^V$xsWFTwy3l|8)B^oH$&s(4Z@54b1!hX#H6?bNRXIALy!6N&O3w%rb zjSFy2HLqMEcL$zezh{A2;hnobcwP3Z76`nv40DwGd>xLjxCOt3eMKi%^l*%mk1KL`r<&J9+l|cw02l9uxWKbk73(@ijGkB(5sFlUwj=*{5 z=mMCv*}+Q|H!7=W0Om7yuJ8X|Yla9dbS<1sZnl2=$IZ^|K@V1QfMazREJ$XQMbD^n z_lpnJC+s^AItQnogD!$e6q7~Ii>MKjY*K}Rx*^jI$CFeL>V@NaAxrFwzVxI%KRelk zufP}clZm<~llhic-@leZXbrQ*O4OP+(+jhBr1AdEdrz7oCWM9{Hw3E<;xH^3h7$~Y z5poxE?N^}r3M?UZ(u#bG-U6aVdO3*^A#b^N7O4(GK9kR8pip^emfqc&RAyodO1 zn@D#ZrGI?=@0r1`DJ*X^0Z?RY(ffyUmwu|e`-mzk1it`n Ch}yUS literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/utility.85FA95438DB4CC5B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/utility.85FA95438DB4CC5B.idx new file mode 100644 index 0000000000000000000000000000000000000000..e8231c8fc09f263ee3ff7ace877fdeb5662acfcb GIT binary patch literal 8608 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 b@S}EZnbtH#2m1ISeSDujcBGGO=;MC@80?vb literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/vector.5540A75A3880CF9C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/vector.5540A75A3880CF9C.idx new file mode 100644 index 0000000000000000000000000000000000000000..0c66eaca99c4ab68659af36beb35e1920d14cddd GIT binary patch literal 890 zcmWIYbaN|WW?*nm@vO*AElFfyU|CFZ6ogcQ`; zG1wq+fxNQR zBaCL`0&8?)GKjo9nSVlD)B7x?CQl=v>Oh7-1)zQ~=zbWYl{3ZAkBO5fSTWcPrW$CZ zTBtS5D9uWH71foRSwOx1eEuL;g2AM|f1V1()8+$(;~3)PV8YRX3a@q7z5M}nfH{Y` zI7}Gm?wmvrr?@D&I2**^01*(t1!FKU@K`VMUd{epC7Oecg@coeot2w`6CulvV1jZF Q6mY{B3=FIYCL4kY0F?jgH~;_u literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/vector.tcc.180200071CE817B3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/vector.tcc.180200071CE817B3.idx new file mode 100644 index 0000000000000000000000000000000000000000..41551da7d3e7f98f3ae50389f7e1080b1bf8fc6f GIT binary patch literal 21536 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 Q9Dm%`X6i1_*9?aL0D%xPp8x;= literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/version.4CDCC1C10BD10FD3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/version.4CDCC1C10BD10FD3.idx new file mode 100644 index 0000000000000000000000000000000000000000..dc7d915adcdbfafa4442ccf6815164573c253465 GIT binary patch literal 2228 zcmZvddr;Fy5XZ9!<}TpWQqkfAAH1|A1Pq8GqEZLtEe|Om3dkb_6Tpxl5D-u-4@CtA z0U4eRsHniyj<(b)gH{|m+M=ae#13|}6_r+n5z!8IW9N7Ak7kl#?(^N-+uPk+g1kIE zPZJ*R(>SjTMZ7A;kjLYFgugVEQnm~KzWXG|J?$ z327sI9`C0=M>;wRGyno<0n!2s{)>sn({3LW4^8Cjgm4;e&tZer7tN#UyNwVB)8M5X zj6@=*ZL|hRFLmjd8qr~Y>Tki} z;0U$TsIBE3#AQIrfL&vBZhhs>&S~Z-WRWa0&OW)b$nt(=-8{tJ#CtA>JvEv&DFcZM z5J%JK#T>R6-00(Hde0VdEznw+#|aG}iJo5^yA*{G8p5Kv+j(Zo#&i=Q;=@1=19RkL zJ}xb`uNHy{w1Q!)-qG7KP5+?goCtSp6>PQP{M$FBYN8f%)>GQ_T>0Cv^@sy#0P}9z``A)e*yM%yAdrK= z8c6O_`+PiSN++}dY11ETyz#NDM4z<&?pqspzBfWqC;(cZuWhz;Ocdhx zTqh)w#MxX#I}NmvlTBR_i0gsWgDod`^4+gJOD&B-!HGIaIBa(L+-JdeV&f230jUC( zW^p(%XsLdo6Al461gv|O|7Q0j*8WTa3Uxs0z>0GfY*W1|%C<`<6agvH*Y}2rLAg+lJaWaQLYI zD#yp_dL8y49_*}Te_2cWXJr&)@5%Xc=45@~(2}5E!%B=yz}nDSHxb``Oh95Nd2i)r z^AHLrft&<(tC9At&dI%9 zWhgWNY0%G~)b_gc9}AyUq7W(wW%r=9dxp&`dTJ0SkOUzYRL?}WVn)`5I>hlL-kQUE zck&$FzTek~_&Ctx`obFCk5hf3>CxH}I>9ODeN-n@1E~g<#-FDyzixVUwGV~ubUT~I(>zPX*PMmd zFH`!Uhy#n~7o*#OW7Odx;vAa8O7tvYG$n7KW(4tOx|v1uM_7$jtC7nS#9qXU ztBp+yI}ESb29TvD|FNIO7)X6ON#Z&6EjQFauU;v^)i5FROTju^cSV36^j7v2$hLHl#z>3nL`<53mBZ5W1{~zl3xNStj3`x026-pap!}o+%i3&umpz$KTKHok>n>S z{}ESb29TvD|FNIO7)X6ON#Z&6M5j)`Y=FY*9O|MlVV0I(6Fh#u z@&*b^b4bI59Ofc0;iwXi?KhcsHUfp^ zIOO1}7hmz=TN)nP1QfR9u!Nf}YLd;c(sRWOps)#t3EbU$c7`8a}kOmTaCw(7#VRt5$D(F0&1 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.27C0562D93BBAA12.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.27C0562D93BBAA12.idx new file mode 100644 index 0000000000000000000000000000000000000000..1e97b97c8750c5c6e25fd47c2a4188127752f81a GIT binary patch literal 202 zcmWIYbaOkzz`)>~;#rZKT9U{DWD5gvaY<38Igkc}w9K4TD}8ujKm_n450qX+$50RqSUlvS0Fuk?RLp(#k~=X zT#SmGiXvcRfy61ZBiEDFPObwA>vHPCh0FKr%n|zaW;ak+m_t|;rW$BkP9lg?T$EhQ R4Pr1#mo^zTJnR5^0RVddF`WPa literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.83BD995621576773.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.83BD995621576773.idx new file mode 100644 index 0000000000000000000000000000000000000000..05379976e470f5e1c5c52d980a4ec2077caaebcc GIT binary patch literal 27834 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

*sJn$OixyIO_$l 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wint_t.h.DAC5928CF0BA7895.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wint_t.h.DAC5928CF0BA7895.idx new file mode 100644 index 0000000000000000000000000000000000000000..9523f12bef2a1d9a44203425d74de63705b52893 GIT binary patch literal 250 zcmWIYbaVT}z`)>~;#rZKT9U{DWD5gvaY<38E06|*w9K4TD}8*Ij#Tz literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wordsize.h.23D8030BEC81E6F1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wordsize.h.23D8030BEC81E6F1.idx new file mode 100644 index 0000000000000000000000000000000000000000..75e065c267717aa52ed9cac80da6b85696951b42 GIT binary patch literal 204 zcmWIYbaOkxz`)>~;#rZKT9U{DWD5gvaY<386_5slw9K4TD}8`qLkvys#LuUhT_WHB#`c+)U;w(ApLpgnm3G3 zb0iqK7|1iy)vVH760o XDlSSc<_0kse>5LCz1XSQnt=fT>54UU literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/xopen_lim.h.E4E4BC8C11167D14.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/xopen_lim.h.E4E4BC8C11167D14.idx new file mode 100644 index 0000000000000000000000000000000000000000..28a2f0367da9fd9c2c0b1bee4c4f8f4ba71942df GIT binary patch literal 548 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeSystem.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeSystem.cmake new file mode 100644 index 000000000..2ede6c38c --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-5.15.133.1-microsoft-standard-WSL2") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "5.15.133.1-microsoft-standard-WSL2") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + + + +set(CMAKE_SYSTEM "Linux-5.15.133.1-microsoft-standard-WSL2") +set(CMAKE_SYSTEM_NAME "Linux") +set(CMAKE_SYSTEM_VERSION "5.15.133.1-microsoft-standard-WSL2") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 000000000..9a5e8f8ce --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,878 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + +#if !defined(__has_include) +/* If the compiler does not have __has_include, pretend the answer is + always no. */ +# define __has_include(x) 0 +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a version is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) && defined(__ti__) +# define COMPILER_ID "TIClang" + # define COMPILER_VERSION_MAJOR DEC(__ti_major__) + # define COMPILER_VERSION_MINOR DEC(__ti_minor__) + # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) +# define COMPILER_VERSION_INTERNAL DEC(__ti_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__clang__) && defined(__ti__) +# if defined(__ARM_ARCH) +# define ARCHITECTURE_ID "Arm" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L +# if defined(__INTEL_CXX11_MODE__) +# if defined(__cpp_aggregate_nsdmi) +# define CXX_STD 201402L +# else +# define CXX_STD 201103L +# endif +# else +# define CXX_STD 199711L +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# define CXX_STD _MSVC_LANG +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_standard_default = "INFO" ":" "standard_default[" +#if CXX_STD > 202002L + "23" +#elif CXX_STD > 201703L + "20" +#elif CXX_STD >= 201703L + "17" +#elif CXX_STD >= 201402L + "14" +#elif CXX_STD >= 201103L + "11" +#else + "98" +#endif +"]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeConfigureLog.yaml b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeConfigureLog.yaml new file mode 100644 index 000000000..9672cf5ee --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeConfigureLog.yaml @@ -0,0 +1,360 @@ + +--- +events: + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake:205 (message)" + - "CMakeLists.txt:3 (project)" + message: | + The system is: Linux - 5.15.133.1-microsoft-standard-WSL2 - x86_64 + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:3 (project)" + message: | + Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. + Compiler: /usr/bin/x86_64-linux-gnu-g++-11 + Build flags: -DQT_QML_DEBUG + Id flags: + + The output was: + 0 + + + Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + + The CXX compiler identification is GNU, found in: + /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/a.out + + - + kind: "try_compile-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:67 (try_compile)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:3 (project)" + checks: + - "Detecting CXX compiler ABI info" + directories: + source: "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-sM7VJB" + binary: "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-sM7VJB" + cmakeVariables: + CMAKE_CXX_FLAGS: "-DQT_QML_DEBUG" + CMAKE_CXX_FLAGS_DEBUG: "-g" + CMAKE_CXX_SCAN_FOR_MODULES: "OFF" + CMAKE_EXE_LINKER_FLAGS: "" + buildResult: + variable: "CMAKE_CXX_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-sM7VJB' + + Run Build Command(s): /usr/bin/ninja -v cmTC_7d2b7 + [1/2] /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG -fdiagnostics-color=always -v -o CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp + Using built-in specs. + COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11 + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) + COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_7d2b7.dir/' + /usr/lib/gcc/x86_64-linux-gnu/11/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D QT_QML_DEBUG /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_7d2b7.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccx2j6QG.s + GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) + compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/11" + ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include" + #include "..." search starts here: + #include <...> search starts here: + /usr/include/c++/11 + /usr/include/x86_64-linux-gnu/c++/11 + /usr/include/c++/11/backward + /usr/lib/gcc/x86_64-linux-gnu/11/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include + End of search list. + GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) + compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + Compiler executable checksum: d591828bb4d392ae8b7b160e5bb0b95f + COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_7d2b7.dir/' + as -v --64 -o CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccx2j6QG.s + GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38 + COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.' + [2/2] : && /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG -v -Wl,-v CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_7d2b7 && : + Using built-in specs. + COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11 + COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-linux-gnu + Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) + COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-D' 'QT_QML_DEBUG' '-v' '-o' 'cmTC_7d2b7' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_7d2b7.' + /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccI2BA30.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_7d2b7 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o + collect2 version 11.4.0 + /usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccI2BA30.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_7d2b7 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o + GNU ld (GNU Binutils for Ubuntu) 2.38 + COLLECT_GCC_OPTIONS='-D' 'QT_QML_DEBUG' '-v' '-o' 'cmTC_7d2b7' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_7d2b7.' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:137 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:3 (project)" + message: | + Parsed CXX implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/usr/include/c++/11] + add: [/usr/include/x86_64-linux-gnu/c++/11] + add: [/usr/include/c++/11/backward] + add: [/usr/lib/gcc/x86_64-linux-gnu/11/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/include/c++/11] ==> [/usr/include/c++/11] + collapse include dir [/usr/include/x86_64-linux-gnu/c++/11] ==> [/usr/include/x86_64-linux-gnu/c++/11] + collapse include dir [/usr/include/c++/11/backward] ==> [/usr/include/c++/11/backward] + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/11/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/11/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/include/c++/11;/usr/include/x86_64-linux-gnu/c++/11;/usr/include/c++/11/backward;/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:173 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:3 (project)" + message: | + Parsed CXX implicit link information: + link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)] + ignore line: [Change Dir: '/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-sM7VJB'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/ninja -v cmTC_7d2b7] + ignore line: [[1/2] /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG -fdiagnostics-color=always -v -o CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] + ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_7d2b7.dir/'] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D QT_QML_DEBUG /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_7d2b7.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccx2j6QG.s] + ignore line: [GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/11"] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/include/c++/11] + ignore line: [ /usr/include/x86_64-linux-gnu/c++/11] + ignore line: [ /usr/include/c++/11/backward] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [Compiler executable checksum: d591828bb4d392ae8b7b160e5bb0b95f] + ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_7d2b7.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccx2j6QG.s] + ignore line: [GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.'] + ignore line: [[2/2] : && /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG -v -Wl -v CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_7d2b7 && :] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-D' 'QT_QML_DEBUG' '-v' '-o' 'cmTC_7d2b7' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_7d2b7.'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccI2BA30.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_7d2b7 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccI2BA30.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_7d2b7] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] + arg [-v] ==> ignore + arg [CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + ignore line: [collect2 version 11.4.0] + ignore line: [/usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccI2BA30.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_7d2b7 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] + linker tool for 'CXX': /usr/bin/ld + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] + collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11] ==> [/usr/lib/gcc/x86_64-linux-gnu/11] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] + implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + + - + kind: "message-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:210 (cmake_determine_linker_id)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:3 (project)" + message: | + Running the CXX compiler's linker: "/usr/bin/ld" "-v" + GNU ld (GNU Binutils for Ubuntu) 2.38 + - + kind: "try_compile-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake:101 (try_compile)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake:52 (cmake_check_source_compiles)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindThreads.cmake:99 (CHECK_CXX_SOURCE_COMPILES)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindThreads.cmake:163 (_threads_check_libc)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake:76 (find_package)" + - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake:36 (find_dependency)" + - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Dependencies.cmake:34 (_qt_internal_find_third_party_dependencies)" + - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake:136 (include)" + - "CMakeLists.txt:12 (find_package)" + checks: + - "Performing Test CMAKE_HAVE_LIBC_PTHREAD" + directories: + source: "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-OucvjQ" + binary: "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-OucvjQ" + cmakeVariables: + CMAKE_CXX_FLAGS: "-DQT_QML_DEBUG" + CMAKE_CXX_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6;/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/kwin" + buildResult: + variable: "CMAKE_HAVE_LIBC_PTHREAD" + cached: true + stdout: | + Change Dir: '/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-OucvjQ' + + Run Build Command(s): /usr/bin/ninja -v cmTC_3d9f7 + [1/2] /usr/bin/x86_64-linux-gnu-g++-11 -DCMAKE_HAVE_LIBC_PTHREAD -DQT_QML_DEBUG -std=gnu++17 -fdiagnostics-color=always -o CMakeFiles/cmTC_3d9f7.dir/src.cxx.o -c /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-OucvjQ/src.cxx + [2/2] : && /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG CMakeFiles/cmTC_3d9f7.dir/src.cxx.o -o cmTC_3d9f7 && : + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake:101 (try_compile)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake:52 (cmake_check_source_compiles)" + - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapAtomic.cmake:36 (check_cxx_source_compiles)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake:76 (find_package)" + - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake:36 (find_dependency)" + - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreDependencies.cmake:35 (_qt_internal_find_third_party_dependencies)" + - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfig.cmake:45 (include)" + - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake:76 (find_package)" + - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake:143 (find_dependency)" + - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake:43 (_qt_internal_find_qt_dependencies)" + - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake:43 (include)" + - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake:181 (find_package)" + - "CMakeLists.txt:13 (find_package)" + checks: + - "Performing Test HAVE_STDATOMIC" + directories: + source: "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-5qGokV" + binary: "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-5qGokV" + cmakeVariables: + CMAKE_CXX_FLAGS: "-DQT_QML_DEBUG" + CMAKE_CXX_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6;/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/kwin;/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6;/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/kwin" + buildResult: + variable: "HAVE_STDATOMIC" + cached: true + stdout: | + Change Dir: '/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-5qGokV' + + Run Build Command(s): /usr/bin/ninja -v cmTC_6f9ac + [1/2] /usr/bin/x86_64-linux-gnu-g++-11 -DHAVE_STDATOMIC -DQT_QML_DEBUG -std=gnu++17 -fdiagnostics-color=always -o CMakeFiles/cmTC_6f9ac.dir/src.cxx.o -c /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-5qGokV/src.cxx + [2/2] : && /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG CMakeFiles/cmTC_6f9ac.dir/src.cxx.o -o cmTC_6f9ac && : + + exitCode: 0 +... diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/TargetDirectories.txt b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/TargetDirectories.txt new file mode 100644 index 000000000..0da3a22d8 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,9 @@ +/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application.dir +/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/edit_cache.dir +/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/rebuild_cache.dir +/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/list_install_components.dir +/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/install.dir +/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/install/local.dir +/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/install/strip.dir +/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen_timestamp_deps.dir +/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/clean_additional.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/clean_additional.cmake new file mode 100644 index 000000000..b2e53edc4 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/clean_additional.cmake @@ -0,0 +1,10 @@ +# Additional clean files +cmake_minimum_required(VERSION 3.16) + +if("${CONFIG}" STREQUAL "" OR "${CONFIG}" STREQUAL "Debug") + file(REMOVE_RECURSE + "CMakeFiles/qt6_application_autogen.dir/AutogenUsed.txt" + "CMakeFiles/qt6_application_autogen.dir/ParseCache.txt" + "qt6_application_autogen" + ) +endif() diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/cmake.check_cache b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/cmake.check_cache new file mode 100644 index 000000000..3dccd7317 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenInfo.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenInfo.json new file mode 100644 index 000000000..0bf7ee051 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenInfo.json @@ -0,0 +1,559 @@ +{ + "BUILD_DIR" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen", + "CMAKE_BINARY_DIR" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug", + "CMAKE_CURRENT_BINARY_DIR" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug", + "CMAKE_CURRENT_SOURCE_DIR" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6", + "CMAKE_EXECUTABLE" : "/home/austenharrell/Qt/Tools/CMake/bin/cmake", + "CMAKE_LIST_FILES" : + [ + "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/CMakeLists.txt", + "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystem.cmake.in", + "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeSystem.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeNinjaFindMake.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInitialize.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Initialize.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Determine-CXX.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCompilerIdDetection.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ADSP-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMCC-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMClang-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/AppleClang-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompilerInternal.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Borland-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompilerInternal.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Cray-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CrayClang-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Embarcadero-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Fujitsu-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GHS-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/HP-CXX-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IAR-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Intel-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/MSVC-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVHPC-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVIDIA-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OrangeC-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PGI-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PathScale-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SCO-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TI-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TIClang-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Tasking-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Watcom-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XL-CXX-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindBinUtils.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-FindBinUtils.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompiler.cmake.in", + "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInformation.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeGenericSystem.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeInitializeConfigs.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/UnixPaths.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXInformation.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeLanguageInformation.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CMakeCommonCompilerMacros.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU-CXX.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCommonLanguageInclude.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCompilerCommon.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitIncludeInfo.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitLinkInfo.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseLibraryArchitecture.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCompilerCommon.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompileFeatures.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/FeatureTesting.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompiler.cmake.in", + "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersion.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigExtras.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtInstallPaths.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Targets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeature.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXCompilerFlag.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckCompilerFlag.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckFlagCommonConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeatureCommon.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicGitHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTestHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicToolHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Dependencies.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindThreads.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckLibraryExists.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckIncludeFileCXX.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersion.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigExtras.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtInstallPaths.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Targets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeature.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXCompilerFlag.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeatureCommon.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicGitHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTestHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicToolHelpers.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Dependencies.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersion.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersionImpl.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersion.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersionImpl.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsDependencies.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsVersionlessTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersion.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersionImpl.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreDependencies.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapAtomic.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreMacros.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigExtras.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/GNUInstallDirs.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreVersionlessAliasTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersion.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersionImpl.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiDependencies.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapOpenGL.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindOpenGL.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/kwin/FindXKB.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPkgConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FeatureSummary.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapVulkanHeaders.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindVulkan.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersion.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersionImpl.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusDependencies.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersion.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersionImpl.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsDependencies.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsVersionlessTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusMacros.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/MacroAddFileDependencies.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusVersionlessAliasTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiPlugins.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginConfig.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiVersionlessAliasTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets-relwithdebinfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsAdditionalTargetInfo.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsMacros.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsPlugins.cmake", + "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsVersionlessAliasTargets.cmake", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/GNUInstallDirs.cmake" + ], + "CMAKE_SOURCE_DIR" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6", + "CROSS_CONFIG" : false, + "DEP_FILE" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/deps", + "DEP_FILE_RULE_NAME" : "qt6_application_autogen/timestamp", + "HEADERS" : + [ + [ + "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.h", + "MU", + "EWIEGA46WW/moc_mainwindow.cpp", + null + ] + ], + "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], + "INCLUDE_DIR" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/include", + "MOC_COMPILATION_FILE" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp", + "MOC_DEFINITIONS" : [ "QT_CORE_LIB", "QT_GUI_LIB", "QT_WIDGETS_LIB" ], + "MOC_DEPEND_FILTERS" : + [ + [ + "Q_PLUGIN_METADATA", + "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" + ] + ], + "MOC_INCLUDES" : + [ + "/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore", + "/home/austenharrell/Qt/6.8.0/gcc_64/include", + "/home/austenharrell/Qt/6.8.0/gcc_64/mkspecs/linux-g++", + "/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets", + "/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui", + "/usr/include", + "/usr/include/c++/11", + "/usr/include/x86_64-linux-gnu/c++/11", + "/usr/include/c++/11/backward", + "/usr/lib/gcc/x86_64-linux-gnu/11/include", + "/usr/local/include", + "/usr/include/x86_64-linux-gnu" + ], + "MOC_MACRO_NAMES" : + [ + "Q_OBJECT", + "Q_GADGET", + "Q_NAMESPACE", + "Q_NAMESPACE_EXPORT", + "Q_GADGET_EXPORT", + "Q_ENUM_NS" + ], + "MOC_OPTIONS" : [], + "MOC_PATH_PREFIX" : false, + "MOC_PREDEFS_CMD" : + [ + "/usr/bin/x86_64-linux-gnu-g++-11", + "-std=gnu++17", + "-dM", + "-E", + "-c", + "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp" + ], + "MOC_PREDEFS_FILE" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/moc_predefs.h", + "MOC_RELAXED_MODE" : false, + "MOC_SKIP" : [], + "MULTI_CONFIG" : false, + "PARALLEL" : 14, + "PARSE_CACHE_FILE" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/ParseCache.txt", + "QT_MOC_EXECUTABLE" : "/home/austenharrell/Qt/6.8.0/gcc_64/libexec/moc", + "QT_UIC_EXECUTABLE" : "/home/austenharrell/Qt/6.8.0/gcc_64/libexec/uic", + "QT_VERSION_MAJOR" : 6, + "QT_VERSION_MINOR" : 8, + "SETTINGS_FILE" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenUsed.txt", + "SOURCES" : + [ + [ + "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/main.cpp", + "MU", + null + ], + [ + "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.cpp", + "MU", + null + ] + ], + "UIC_OPTIONS" : [], + "UIC_SEARCH_PATHS" : [], + "UIC_SKIP" : [], + "UIC_UI_FILES" : [], + "USE_BETTER_GRAPH" : true, + "VERBOSITY" : 0 +} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenUsed.txt b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenUsed.txt new file mode 100644 index 000000000..d772d52f7 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenUsed.txt @@ -0,0 +1,2 @@ +moc:a87ad0d1757acea1a5e989eec06f1479a98584cdaff252b689ffccd3690984bd +uic:55d75f6c2343143e74260219861e386474a5bb3f2c7a91517ae794743f6723cc diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/ParseCache.txt b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/ParseCache.txt new file mode 100644 index 000000000..2338bf2c2 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/ParseCache.txt @@ -0,0 +1,414 @@ +# Generated by CMake. Changes will be overwritten. +/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/main.cpp +/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.h + mmc:Q_OBJECT + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20functional.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20iterator.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20memory.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20type_traits.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q23utility.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qalgorithms.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qanystringview.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydata.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydataops.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydatapointer.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qassert.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qatomic.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qatomic_cxx11.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbasicatomic.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbindingstorage.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearray.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearrayalgorithms.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearraylist.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearrayview.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qchar.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompare.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompare_impl.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcomparehelpers.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompilerdetection.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qconfig.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qconstructormacros.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainerfwd.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainerinfo.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainertools_impl.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontiguouscache.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdarwinhelpers.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdatastream.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdebug.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qendian.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qexceptionhandling.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qflags.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfloat16.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qforeach.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfunctionaltools_impl.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfunctionpointer.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qgenericatomic.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qglobal.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qglobalstatic.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qhash.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qhashfunctions.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiodevicebase.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiterable.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiterator.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlatin1stringview.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qline.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlist.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlogging.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmalloc.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmap.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmargins.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmath.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmetacontainer.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmetatype.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qminmax.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qnamespace.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qnumeric.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobject.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobject_impl.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobjectdefs.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobjectdefs_impl.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qoverload.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qpair.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qpoint.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qprocessordetection.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qrect.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qrefcount.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qscopedpointer.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qscopeguard.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qset.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qshareddata.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qshareddata_impl.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsharedpointer.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsharedpointer_impl.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsize.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qspan.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstring.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringalgorithms.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringbuilder.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringconverter.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringconverter_base.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringfwd.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringlist.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringliteral.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringmatcher.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringtokenizer.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringview.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qswap.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsysinfo.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsystemdetection.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtaggedpointer.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtclasshelpermacros.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtconfiginclude.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtconfigmacros.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtcore-config.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtcoreexports.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtdeprecationdefinitions.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtdeprecationmarkers.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtenvironmentvariables.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtextstream.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtmetamacros.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtnoop.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtpreprocessorsupport.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtresource.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qttranslation.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qttypetraits.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtversion.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtversionchecks.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtypeinfo.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtypes.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qutf8stringview.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qvariant.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qvarlengtharray.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qversiontagging.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qxptype_traits.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qyieldcpu.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qaction.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qbitmap.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qbrush.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qcolor.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qcursor.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfont.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfontinfo.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfontmetrics.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qicon.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qimage.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qkeysequence.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpaintdevice.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpalette.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpixelformat.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpixmap.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpolygon.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qregion.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qrgb.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qrgba64.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtgui-config.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtguiexports.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtguiglobal.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtransform.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qwindowdefs.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/QMainWindow + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qmainwindow.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qsizepolicy.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtabwidget.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgets-config.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgetsexports.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgetsglobal.h + mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qwidget.h + mdp:/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/moc_predefs.h + mdp:/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/assert.h + mdp:/usr/include/c++/11/algorithm + mdp:/usr/include/c++/11/array + mdp:/usr/include/c++/11/atomic + mdp:/usr/include/c++/11/backward/auto_ptr.h + mdp:/usr/include/c++/11/backward/binders.h + mdp:/usr/include/c++/11/bit + mdp:/usr/include/c++/11/bits/algorithmfwd.h + mdp:/usr/include/c++/11/bits/align.h + mdp:/usr/include/c++/11/bits/alloc_traits.h + mdp:/usr/include/c++/11/bits/allocated_ptr.h + mdp:/usr/include/c++/11/bits/allocator.h + mdp:/usr/include/c++/11/bits/atomic_base.h + mdp:/usr/include/c++/11/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/11/bits/basic_string.h + mdp:/usr/include/c++/11/bits/basic_string.tcc + mdp:/usr/include/c++/11/bits/char_traits.h + mdp:/usr/include/c++/11/bits/charconv.h + mdp:/usr/include/c++/11/bits/concept_check.h + mdp:/usr/include/c++/11/bits/cpp_type_traits.h + mdp:/usr/include/c++/11/bits/cxxabi_forced.h + mdp:/usr/include/c++/11/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/11/bits/enable_special_members.h + mdp:/usr/include/c++/11/bits/erase_if.h + mdp:/usr/include/c++/11/bits/exception.h + mdp:/usr/include/c++/11/bits/exception_defines.h + mdp:/usr/include/c++/11/bits/exception_ptr.h + mdp:/usr/include/c++/11/bits/functexcept.h + mdp:/usr/include/c++/11/bits/functional_hash.h + mdp:/usr/include/c++/11/bits/hash_bytes.h + mdp:/usr/include/c++/11/bits/hashtable.h + mdp:/usr/include/c++/11/bits/hashtable_policy.h + mdp:/usr/include/c++/11/bits/invoke.h + mdp:/usr/include/c++/11/bits/ios_base.h + mdp:/usr/include/c++/11/bits/list.tcc + mdp:/usr/include/c++/11/bits/locale_classes.h + mdp:/usr/include/c++/11/bits/locale_classes.tcc + mdp:/usr/include/c++/11/bits/localefwd.h + mdp:/usr/include/c++/11/bits/memoryfwd.h + mdp:/usr/include/c++/11/bits/move.h + mdp:/usr/include/c++/11/bits/nested_exception.h + mdp:/usr/include/c++/11/bits/node_handle.h + mdp:/usr/include/c++/11/bits/ostream_insert.h + mdp:/usr/include/c++/11/bits/parse_numbers.h + mdp:/usr/include/c++/11/bits/postypes.h + mdp:/usr/include/c++/11/bits/predefined_ops.h + mdp:/usr/include/c++/11/bits/ptr_traits.h + mdp:/usr/include/c++/11/bits/range_access.h + mdp:/usr/include/c++/11/bits/refwrap.h + mdp:/usr/include/c++/11/bits/shared_ptr.h + mdp:/usr/include/c++/11/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/11/bits/shared_ptr_base.h + mdp:/usr/include/c++/11/bits/specfun.h + mdp:/usr/include/c++/11/bits/std_abs.h + mdp:/usr/include/c++/11/bits/std_function.h + mdp:/usr/include/c++/11/bits/stl_algo.h + mdp:/usr/include/c++/11/bits/stl_algobase.h + mdp:/usr/include/c++/11/bits/stl_bvector.h + mdp:/usr/include/c++/11/bits/stl_construct.h + mdp:/usr/include/c++/11/bits/stl_function.h + mdp:/usr/include/c++/11/bits/stl_heap.h + mdp:/usr/include/c++/11/bits/stl_iterator.h + mdp:/usr/include/c++/11/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/11/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/11/bits/stl_list.h + mdp:/usr/include/c++/11/bits/stl_map.h + mdp:/usr/include/c++/11/bits/stl_multimap.h + mdp:/usr/include/c++/11/bits/stl_numeric.h + mdp:/usr/include/c++/11/bits/stl_pair.h + mdp:/usr/include/c++/11/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/11/bits/stl_relops.h + mdp:/usr/include/c++/11/bits/stl_tempbuf.h + mdp:/usr/include/c++/11/bits/stl_tree.h + mdp:/usr/include/c++/11/bits/stl_uninitialized.h + mdp:/usr/include/c++/11/bits/stl_vector.h + mdp:/usr/include/c++/11/bits/stream_iterator.h + mdp:/usr/include/c++/11/bits/streambuf.tcc + mdp:/usr/include/c++/11/bits/streambuf_iterator.h + mdp:/usr/include/c++/11/bits/string_view.tcc + mdp:/usr/include/c++/11/bits/stringfwd.h + mdp:/usr/include/c++/11/bits/uniform_int_dist.h + mdp:/usr/include/c++/11/bits/unique_ptr.h + mdp:/usr/include/c++/11/bits/unordered_map.h + mdp:/usr/include/c++/11/bits/uses_allocator.h + mdp:/usr/include/c++/11/bits/vector.tcc + mdp:/usr/include/c++/11/cassert + mdp:/usr/include/c++/11/cctype + mdp:/usr/include/c++/11/cerrno + mdp:/usr/include/c++/11/chrono + mdp:/usr/include/c++/11/climits + mdp:/usr/include/c++/11/clocale + mdp:/usr/include/c++/11/cmath + mdp:/usr/include/c++/11/cstddef + mdp:/usr/include/c++/11/cstdint + mdp:/usr/include/c++/11/cstdio + mdp:/usr/include/c++/11/cstdlib + mdp:/usr/include/c++/11/cstring + mdp:/usr/include/c++/11/ctime + mdp:/usr/include/c++/11/cwchar + mdp:/usr/include/c++/11/debug/assertions.h + mdp:/usr/include/c++/11/debug/debug.h + mdp:/usr/include/c++/11/exception + mdp:/usr/include/c++/11/ext/aligned_buffer.h + mdp:/usr/include/c++/11/ext/alloc_traits.h + mdp:/usr/include/c++/11/ext/atomicity.h + mdp:/usr/include/c++/11/ext/concurrence.h + mdp:/usr/include/c++/11/ext/new_allocator.h + mdp:/usr/include/c++/11/ext/numeric_traits.h + mdp:/usr/include/c++/11/ext/string_conversions.h + mdp:/usr/include/c++/11/ext/type_traits.h + mdp:/usr/include/c++/11/functional + mdp:/usr/include/c++/11/initializer_list + mdp:/usr/include/c++/11/iosfwd + mdp:/usr/include/c++/11/iterator + mdp:/usr/include/c++/11/limits + mdp:/usr/include/c++/11/list + mdp:/usr/include/c++/11/map + mdp:/usr/include/c++/11/memory + mdp:/usr/include/c++/11/new + mdp:/usr/include/c++/11/numeric + mdp:/usr/include/c++/11/optional + mdp:/usr/include/c++/11/pstl/execution_defs.h + mdp:/usr/include/c++/11/pstl/glue_algorithm_defs.h + mdp:/usr/include/c++/11/pstl/glue_memory_defs.h + mdp:/usr/include/c++/11/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/11/ratio + mdp:/usr/include/c++/11/stdexcept + mdp:/usr/include/c++/11/streambuf + mdp:/usr/include/c++/11/string + mdp:/usr/include/c++/11/string_view + mdp:/usr/include/c++/11/system_error + mdp:/usr/include/c++/11/tr1/bessel_function.tcc + mdp:/usr/include/c++/11/tr1/beta_function.tcc + mdp:/usr/include/c++/11/tr1/ell_integral.tcc + mdp:/usr/include/c++/11/tr1/exp_integral.tcc + mdp:/usr/include/c++/11/tr1/gamma.tcc + mdp:/usr/include/c++/11/tr1/hypergeometric.tcc + mdp:/usr/include/c++/11/tr1/legendre_function.tcc + mdp:/usr/include/c++/11/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/11/tr1/poly_hermite.tcc + mdp:/usr/include/c++/11/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/11/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/11/tr1/special_function_util.h + mdp:/usr/include/c++/11/tuple + mdp:/usr/include/c++/11/type_traits + mdp:/usr/include/c++/11/typeinfo + mdp:/usr/include/c++/11/unordered_map + mdp:/usr/include/c++/11/utility + mdp:/usr/include/c++/11/variant + mdp:/usr/include/c++/11/vector + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/time.h + mdp:/usr/include/wchar.h + mdp:/usr/include/x86_64-linux-gnu/asm/errno.h + mdp:/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h + mdp:/usr/include/x86_64-linux-gnu/bits/byteswap.h + mdp:/usr/include/x86_64-linux-gnu/bits/cpu-set.h + mdp:/usr/include/x86_64-linux-gnu/bits/endian.h + mdp:/usr/include/x86_64-linux-gnu/bits/endianness.h + mdp:/usr/include/x86_64-linux-gnu/bits/errno.h + mdp:/usr/include/x86_64-linux-gnu/bits/floatn-common.h + mdp:/usr/include/x86_64-linux-gnu/bits/floatn.h + mdp:/usr/include/x86_64-linux-gnu/bits/libc-header-start.h + mdp:/usr/include/x86_64-linux-gnu/bits/local_lim.h + mdp:/usr/include/x86_64-linux-gnu/bits/locale.h + mdp:/usr/include/x86_64-linux-gnu/bits/long-double.h + mdp:/usr/include/x86_64-linux-gnu/bits/posix1_lim.h + mdp:/usr/include/x86_64-linux-gnu/bits/posix2_lim.h + mdp:/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h + mdp:/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h + mdp:/usr/include/x86_64-linux-gnu/bits/sched.h + mdp:/usr/include/x86_64-linux-gnu/bits/select.h + mdp:/usr/include/x86_64-linux-gnu/bits/setjmp.h + mdp:/usr/include/x86_64-linux-gnu/bits/stdint-intn.h + mdp:/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h + mdp:/usr/include/x86_64-linux-gnu/bits/stdio_lim.h + mdp:/usr/include/x86_64-linux-gnu/bits/stdlib-float.h + mdp:/usr/include/x86_64-linux-gnu/bits/struct_mutex.h + mdp:/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h + mdp:/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h + mdp:/usr/include/x86_64-linux-gnu/bits/time.h + mdp:/usr/include/x86_64-linux-gnu/bits/time64.h + mdp:/usr/include/x86_64-linux-gnu/bits/timesize.h + mdp:/usr/include/x86_64-linux-gnu/bits/timex.h + mdp:/usr/include/x86_64-linux-gnu/bits/types.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/FILE.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/__FILE.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/clock_t.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/error_t.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/locale_t.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/time_t.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/timer_t.h + mdp:/usr/include/x86_64-linux-gnu/bits/types/wint_t.h + mdp:/usr/include/x86_64-linux-gnu/bits/typesizes.h + mdp:/usr/include/x86_64-linux-gnu/bits/uintn-identity.h + mdp:/usr/include/x86_64-linux-gnu/bits/uio_lim.h + mdp:/usr/include/x86_64-linux-gnu/bits/waitflags.h + mdp:/usr/include/x86_64-linux-gnu/bits/waitstatus.h + mdp:/usr/include/x86_64-linux-gnu/bits/wchar.h + mdp:/usr/include/x86_64-linux-gnu/bits/wordsize.h + mdp:/usr/include/x86_64-linux-gnu/bits/xopen_lim.h + mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/atomic_word.h + mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/c++allocator.h + mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/c++config.h + mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/c++locale.h + mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/cpu_defines.h + mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/error_constants.h + mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h + mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/gthr.h + mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/os_defines.h + mdp:/usr/include/x86_64-linux-gnu/gnu/stubs-64.h + mdp:/usr/include/x86_64-linux-gnu/gnu/stubs.h + mdp:/usr/include/x86_64-linux-gnu/sys/cdefs.h + mdp:/usr/include/x86_64-linux-gnu/sys/select.h + mdp:/usr/include/x86_64-linux-gnu/sys/types.h + mdp:/usr/lib/gcc/x86_64-linux-gnu/11/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-linux-gnu/11/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-linux-gnu/11/include/stddef.h +/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.cpp + uic:./ui_mainwindow.h diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/rules.ninja b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/rules.ninja new file mode 100644 index 000000000..5e56f6d92 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/rules.ninja @@ -0,0 +1,72 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Ninja" Generator, CMake Version 3.29 + +# This file contains all the rules used to get the outputs files +# built from the input files. +# It is included in the main 'build.ninja'. + +# ============================================================================= +# Project: qt6_application +# Configurations: Debug +# ============================================================================= +# ============================================================================= + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__qt6_application_unscanned_Debug + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/x86_64-linux-gnu-g++-11 $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__qt6_application_Debug + command = $PRE_LINK && /usr/bin/x86_64-linux-gnu-g++-11 $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for running custom commands. + +rule CUSTOM_COMMAND + command = $COMMAND + description = $DESC + + +############################################# +# Rule for re-running cmake. + +rule RERUN_CMAKE + command = /home/austenharrell/Qt/Tools/CMake/bin/cmake --regenerate-during-build -S/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6 -B/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug + description = Re-running CMake... + generator = 1 + + +############################################# +# Rule for cleaning additional files. + +rule CLEAN_ADDITIONAL + command = /home/austenharrell/Qt/Tools/CMake/bin/cmake -DCONFIG=$CONFIG -P CMakeFiles/clean_additional.cmake + description = Cleaning additional files... + + +############################################# +# Rule for cleaning all built files. + +rule CLEAN + command = /usr/bin/ninja $FILE_ARG -t clean $TARGETS + description = Cleaning all built files... + + +############################################# +# Rule for printing all primary targets available. + +rule HELP + command = /usr/bin/ninja -t targets + description = All primary targets available: + diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/Testing/Temporary/LastTest.log b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/Testing/Temporary/LastTest.log new file mode 100644 index 000000000..5048b21fd --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/Testing/Temporary/LastTest.log @@ -0,0 +1,3 @@ +Start testing: Feb 11 10:21 MST +---------------------------------------------------------- +End testing: Feb 11 10:21 MST diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/build.ninja b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/build.ninja new file mode 100644 index 000000000..eda43f1ba --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/build.ninja @@ -0,0 +1,247 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Ninja" Generator, CMake Version 3.29 + +# This file contains all the build statements describing the +# compilation DAG. + +# ============================================================================= +# Write statements declared in CMakeLists.txt: +# +# Which is the root file. +# ============================================================================= + +# ============================================================================= +# Project: qt6_application +# Configurations: Debug +# ============================================================================= + +############################################# +# Minimal version of Ninja required by this file + +ninja_required_version = 1.5 + + +############################################# +# Set configuration variable for custom commands. + +CONFIGURATION = Debug +# ============================================================================= +# Include auxiliary files. + + +############################################# +# Include rules file. + +include CMakeFiles/rules.ninja + +# ============================================================================= + +############################################# +# Logical path to working directory; prefix for absolute paths. + +cmake_ninja_workdir = /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/ +# ============================================================================= +# Object build statements for EXECUTABLE target qt6_application + + +############################################# +# Order-only phony target for qt6_application + +build cmake_object_order_depends_target_qt6_application: phony || qt6_application_autogen qt6_application_autogen/mocs_compilation.cpp qt6_application_autogen/timestamp qt6_application_autogen_timestamp_deps + +build CMakeFiles/qt6_application.dir/qt6_application_autogen/mocs_compilation.cpp.o: CXX_COMPILER__qt6_application_unscanned_Debug /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_qt6_application + DEFINES = -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB + DEP_FILE = CMakeFiles/qt6_application.dir/qt6_application_autogen/mocs_compilation.cpp.o.d + FLAGS = -DQT_QML_DEBUG -g -std=gnu++17 -fdiagnostics-color=always -fPIC + INCLUDES = -I/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/include -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include -isystem /home/austenharrell/Qt/6.8.0/gcc_64/mkspecs/linux-g++ -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui + OBJECT_DIR = CMakeFiles/qt6_application.dir + OBJECT_FILE_DIR = CMakeFiles/qt6_application.dir/qt6_application_autogen + TARGET_COMPILE_PDB = CMakeFiles/qt6_application.dir/ + TARGET_PDB = qt6_application.pdb + +build CMakeFiles/qt6_application.dir/main.cpp.o: CXX_COMPILER__qt6_application_unscanned_Debug /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/main.cpp || cmake_object_order_depends_target_qt6_application + DEFINES = -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB + DEP_FILE = CMakeFiles/qt6_application.dir/main.cpp.o.d + FLAGS = -DQT_QML_DEBUG -g -std=gnu++17 -fdiagnostics-color=always -fPIC + INCLUDES = -I/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/include -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include -isystem /home/austenharrell/Qt/6.8.0/gcc_64/mkspecs/linux-g++ -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui + OBJECT_DIR = CMakeFiles/qt6_application.dir + OBJECT_FILE_DIR = CMakeFiles/qt6_application.dir + TARGET_COMPILE_PDB = CMakeFiles/qt6_application.dir/ + TARGET_PDB = qt6_application.pdb + +build CMakeFiles/qt6_application.dir/mainwindow.cpp.o: CXX_COMPILER__qt6_application_unscanned_Debug /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.cpp || cmake_object_order_depends_target_qt6_application + DEFINES = -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB + DEP_FILE = CMakeFiles/qt6_application.dir/mainwindow.cpp.o.d + FLAGS = -DQT_QML_DEBUG -g -std=gnu++17 -fdiagnostics-color=always -fPIC + INCLUDES = -I/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/include -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include -isystem /home/austenharrell/Qt/6.8.0/gcc_64/mkspecs/linux-g++ -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui + OBJECT_DIR = CMakeFiles/qt6_application.dir + OBJECT_FILE_DIR = CMakeFiles/qt6_application.dir + TARGET_COMPILE_PDB = CMakeFiles/qt6_application.dir/ + TARGET_PDB = qt6_application.pdb + + +# ============================================================================= +# Link build statements for EXECUTABLE target qt6_application + + +############################################# +# Link the executable qt6_application + +build qt6_application: CXX_EXECUTABLE_LINKER__qt6_application_Debug CMakeFiles/qt6_application.dir/qt6_application_autogen/mocs_compilation.cpp.o CMakeFiles/qt6_application.dir/main.cpp.o CMakeFiles/qt6_application.dir/mainwindow.cpp.o | /home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Widgets.so.6.8.0 /home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Gui.so.6.8.0 /usr/lib/x86_64-linux-gnu/libGLX.so /usr/lib/x86_64-linux-gnu/libOpenGL.so /home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Core.so.6.8.0 || qt6_application_autogen qt6_application_autogen_timestamp_deps + FLAGS = -DQT_QML_DEBUG -g + LINK_LIBRARIES = -Wl,-rpath,/home/austenharrell/Qt/6.8.0/gcc_64/lib: /home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Widgets.so.6.8.0 /home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Gui.so.6.8.0 /usr/lib/x86_64-linux-gnu/libGLX.so /usr/lib/x86_64-linux-gnu/libOpenGL.so /home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Core.so.6.8.0 -Wl,-rpath-link,/home/austenharrell/Qt/6.8.0/gcc_64/lib + OBJECT_DIR = CMakeFiles/qt6_application.dir + POST_BUILD = : + PRE_LINK = : + TARGET_COMPILE_PDB = CMakeFiles/qt6_application.dir/ + TARGET_FILE = qt6_application + TARGET_PDB = qt6_application.pdb + + +############################################# +# Utility command for edit_cache + +build CMakeFiles/edit_cache.util: CUSTOM_COMMAND + COMMAND = cd /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug && /home/austenharrell/Qt/Tools/CMake/bin/ccmake -S/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6 -B/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug + DESC = Running CMake cache editor... + pool = console + restat = 1 + +build edit_cache: phony CMakeFiles/edit_cache.util + + +############################################# +# Utility command for rebuild_cache + +build CMakeFiles/rebuild_cache.util: CUSTOM_COMMAND + COMMAND = cd /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug && /home/austenharrell/Qt/Tools/CMake/bin/cmake --regenerate-during-build -S/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6 -B/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug + DESC = Running CMake to regenerate build system... + pool = console + restat = 1 + +build rebuild_cache: phony CMakeFiles/rebuild_cache.util + + +############################################# +# Utility command for list_install_components + +build list_install_components: phony + + +############################################# +# Utility command for install + +build CMakeFiles/install.util: CUSTOM_COMMAND all + COMMAND = cd /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug && /home/austenharrell/Qt/Tools/CMake/bin/cmake -P cmake_install.cmake + DESC = Install the project... + pool = console + restat = 1 + +build install: phony CMakeFiles/install.util + + +############################################# +# Utility command for install/local + +build CMakeFiles/install/local.util: CUSTOM_COMMAND all + COMMAND = cd /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug && /home/austenharrell/Qt/Tools/CMake/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake + DESC = Installing only the local directory... + pool = console + restat = 1 + +build install/local: phony CMakeFiles/install/local.util + + +############################################# +# Utility command for install/strip + +build CMakeFiles/install/strip.util: CUSTOM_COMMAND all + COMMAND = cd /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug && /home/austenharrell/Qt/Tools/CMake/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake + DESC = Installing the project stripped... + pool = console + restat = 1 + +build install/strip: phony CMakeFiles/install/strip.util + + +############################################# +# Utility command for qt6_application_autogen_timestamp_deps + +build qt6_application_autogen_timestamp_deps: phony + + +############################################# +# Utility command for qt6_application_autogen + +build qt6_application_autogen: phony CMakeFiles/qt6_application_autogen qt6_application_autogen/include/ui_mainwindow.h qt6_application_autogen/timestamp qt6_application_autogen/mocs_compilation.cpp qt6_application_autogen_timestamp_deps + + +############################################# +# Custom command for qt6_application_autogen/timestamp + +build qt6_application_autogen/timestamp qt6_application_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}qt6_application_autogen/timestamp ${cmake_ninja_workdir}qt6_application_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /home/austenharrell/Qt/6.8.0/gcc_64/libexec/moc /home/austenharrell/Qt/6.8.0/gcc_64/libexec/uic || qt6_application_autogen_timestamp_deps + COMMAND = cd /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug && /home/austenharrell/Qt/Tools/CMake/bin/cmake -E cmake_autogen /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenInfo.json Debug && /home/austenharrell/Qt/Tools/CMake/bin/cmake -E touch /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp && /home/austenharrell/Qt/Tools/CMake/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/deps /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/d/f094c9b08365a0bafbf51585d76ebd73b00fcb962290905d1a92d0fbc1dbe1a6.d + DESC = Automatic MOC and UIC for target qt6_application + depfile = CMakeFiles/d/f094c9b08365a0bafbf51585d76ebd73b00fcb962290905d1a92d0fbc1dbe1a6.d + deps = gcc + restat = 1 + + +############################################# +# Phony custom command for CMakeFiles/qt6_application_autogen + +build CMakeFiles/qt6_application_autogen qt6_application_autogen/include/ui_mainwindow.h | ${cmake_ninja_workdir}CMakeFiles/qt6_application_autogen ${cmake_ninja_workdir}qt6_application_autogen/include/ui_mainwindow.h: phony qt6_application_autogen/timestamp || qt6_application_autogen_timestamp_deps + +# ============================================================================= +# Target aliases. + +# ============================================================================= +# Folder targets. + +# ============================================================================= + +############################################# +# Folder: /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug + +build all: phony qt6_application + +# ============================================================================= +# Built-in targets + + +############################################# +# Re-run CMake if any of its inputs changed. + +build build.ninja: RERUN_CMAKE | .qtc/package-manager/auto-setup.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/kwin/FindXKB.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapAtomic.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapOpenGL.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapVulkanHeaders.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigExtras.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Dependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Targets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6VersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeature.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeatureCommon.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtInstallPaths.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicAppleHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicExternalProjectHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFinalizerHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFindPackageHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicGitHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicPluginHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTargetHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTestHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicToolHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicWalkLibsHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigExtras.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreMacros.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreVersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusMacros.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusVersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsVersionlessTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiPlugins.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiVersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsMacros.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsPlugins.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsVersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsVersionlessTargets.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompiler.cmake.in /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXInformation.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCommonLanguageInclude.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCompilerIdDetection.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompileFeatures.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindBinUtils.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeGenericSystem.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeInitializeConfigs.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeLanguageInformation.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeNinjaFindMake.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitIncludeInfo.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitLinkInfo.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseLibraryArchitecture.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystem.cmake.in /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInformation.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInitialize.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCompilerCommon.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXCompilerFlag.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckIncludeFileCXX.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckLibraryExists.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ADSP-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMCC-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/AppleClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Borland-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CMakeCommonCompilerMacros.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompilerInternal.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Cray-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CrayClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Embarcadero-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Fujitsu-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GHS-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-FindBinUtils.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/HP-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IAR-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Intel-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/MSVC-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVHPC-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVIDIA-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OrangeC-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PGI-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PathScale-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SCO-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TI-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TIClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Tasking-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Watcom-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XL-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FeatureSummary.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindOpenGL.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPkgConfig.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindThreads.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindVulkan.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/GNUInstallDirs.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckCompilerFlag.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckFlagCommonConfig.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/FeatureTesting.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/MacroAddFileDependencies.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Determine-CXX.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU-CXX.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Initialize.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/UnixPaths.cmake /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/CMakeLists.txt CMakeCache.txt CMakeFiles/3.29.3/CMakeCXXCompiler.cmake CMakeFiles/3.29.3/CMakeSystem.cmake + pool = console + + +############################################# +# A missing CMake input file is not an error. + +build .qtc/package-manager/auto-setup.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/kwin/FindXKB.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapAtomic.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapOpenGL.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapVulkanHeaders.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigExtras.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Dependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Targets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6VersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeature.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeatureCommon.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtInstallPaths.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicAppleHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicExternalProjectHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFinalizerHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFindPackageHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicGitHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicPluginHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTargetHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTestHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicToolHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicWalkLibsHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigExtras.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreMacros.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreVersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusMacros.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusVersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsVersionlessTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiPlugins.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiVersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsMacros.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsPlugins.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsVersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsVersionlessTargets.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompiler.cmake.in /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXInformation.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCommonLanguageInclude.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCompilerIdDetection.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompileFeatures.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindBinUtils.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeGenericSystem.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeInitializeConfigs.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeLanguageInformation.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeNinjaFindMake.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitIncludeInfo.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitLinkInfo.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseLibraryArchitecture.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystem.cmake.in /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInformation.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInitialize.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCompilerCommon.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXCompilerFlag.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckIncludeFileCXX.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckLibraryExists.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ADSP-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMCC-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/AppleClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Borland-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CMakeCommonCompilerMacros.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompilerInternal.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Cray-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CrayClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Embarcadero-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Fujitsu-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GHS-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-FindBinUtils.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/HP-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IAR-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Intel-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/MSVC-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVHPC-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVIDIA-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OrangeC-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PGI-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PathScale-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SCO-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TI-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TIClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Tasking-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Watcom-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XL-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FeatureSummary.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindOpenGL.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPkgConfig.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindThreads.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindVulkan.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/GNUInstallDirs.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckCompilerFlag.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckFlagCommonConfig.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/FeatureTesting.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/MacroAddFileDependencies.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Determine-CXX.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU-CXX.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Initialize.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/UnixPaths.cmake /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/CMakeLists.txt CMakeCache.txt CMakeFiles/3.29.3/CMakeCXXCompiler.cmake CMakeFiles/3.29.3/CMakeSystem.cmake: phony + + +############################################# +# Clean additional files. + +build CMakeFiles/clean.additional: CLEAN_ADDITIONAL + CONFIG = Debug + + +############################################# +# Clean all the built files. + +build clean: CLEAN CMakeFiles/clean.additional + + +############################################# +# Print all primary targets available. + +build help: HELP + + +############################################# +# Make the all target the default. + +default all diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/cmake_install.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/cmake_install.cmake new file mode 100644 index 000000000..16bda7d00 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/cmake_install.cmake @@ -0,0 +1,74 @@ +# Install script for directory: /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6 + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + +# Set default install directory permissions. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/usr/bin/x86_64-linux-gnu-objdump") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/qt6_application" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/qt6_application") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/qt6_application" + RPATH "") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/qt6_application" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/qt6_application") + file(RPATH_CHANGE + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/qt6_application" + OLD_RPATH "/home/austenharrell/Qt/6.8.0/gcc_64/lib:" + NEW_RPATH "") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/x86_64-linux-gnu-strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/qt6_application") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT) + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") +else() + set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +file(WRITE "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/${CMAKE_INSTALL_MANIFEST}" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application new file mode 100755 index 0000000000000000000000000000000000000000..f8aec8198abaad25971a6b1318b138e334bdad23 GIT binary patch literal 1543648 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

WwNc6T95WIlW&i&Y+md^4V2uks zikW%EN|pa#we8Nmv0aqd9eKt6-%AYcj|tC|04?O3M9kNr&OQZ+&f_T5@>cyn2$Zdr zvYLHbl&W)zKv=RV@an-l1t8Rhp`Mg-n)}co#qJHJEMhz#6JOIx>8u5K(FS2*ogSn3 z4%Ixpup^Rk*RsY8<}VTQRaA@dVDJ^>Pzy;9IYRR+?WAtE<+>SCL+ZJ_F)s^wmVYq} zIWI9i!}Ik3-6oOEFgI$}_=e%m4&Fe*p`9pB>MioZIJ6q1p_TRm*6-k(i!7}R4<2|D1BN(c0#qMOaXR|;8l2L=tC}47RsqFH z^}UPHQ7NY_@UA9Dj>0HTXWyrI_lx8V1wP*7$Q-fKzQg)yzPQ&ciZc)R3X`McNKO~u z%s((BLptvQ{;kPTa%gX2{jR>nt@OCA0{_kAC^?eT%@>RIx|Cx*g;6~mD(yr*ozQ|Ip+pEn>#tl@J5tezjVZob|xBn;a!aat6hf;5z3d@Jl8~$$3HQz8bf$ zvCjDyI6tkYM!(yVGdL~?4Ron<4Dg~RN8N47c`YtGLzhzcdR$Y1zin_>aoRUge?;t{SFj8mzMmS1$~gs(j9rF-kUfCDGhr!Q z!J}etV(j}epxY)aTXDr{zN`M|*vc8`0RRfbh_t+^x^M}PiLIZG*WdsuX2MFigvZAI z(gNKeK#fgU3b#%{*{nY<_9F-;tHyf(&o((K@$Y{G&iL5k=v7G0WZ>_Z9F>XfQRmj5 z5PJe+nv(Mg@Gne`lC!D<9^r|x51pz3z>fg`(c~yObJju5B;UE8^`ibe@E61(J0*<~ zC;2SqUm~t3)cB?*%e#-@MlgBOk*_IPYnK)Vn>}UpPKv-L9kPaYc}7jfbKH5^!o2O+ z1bC0OW6^~i_Zod|x*AQkj(!^tCouy@zd03_6=!Z1GOG+;pb{QM+);rYLU>n1{v#x$ zSvz5@RDhh06nJ6-sZ2n&5eTCN5gL zn&M)TXCdYpQriT^L)v6d(VdW%;wq1eX`TrrAT9VB1ib4RgNcvSu2I#2%=5I51kx?K zAug7Bu6M;ncd5>5&ylAPkZz~j`?;qw=I>H_IB2ACn`bP#5~)3{ z#Q6$UM=5Quuv8PHz+GAB+B5{5tpzQ^Kha0#Blv!yZzWdi zrX_JXl)alsvW+AMqUn;^s66{Bpt+G&La}ZWEAN0emsHy!rbGq{5-!zxe79-&cvhPMEw$GBjN> zTXS$j-I%FQ`&J7Iz&}M1jDfBEOy4ombchmFi3oW${h$TS#6OAZOiWW- zMe;R8zbI{>5;fE$C;>qqAT>v{APfFUzz2D8-=rf5TUOnUEriK2dzsPlUM8*`g8b?w zi~DiHrJAGxOZ*EjAx_JdlMug|VilB#9$ngG3E3{@R+%L(bwi_6DX8hYn=bx&#E$g(q^Cg>|v(c6L*1yffD! zFRY#i=>K+c%8Njc3mxb#LGmKVGyW?e!ScfGY4(!zs!&c`0mslE)Y}(gS!Gn3CV!mJ(Zp3IVCzpOUF*;*5(%4sx2;;e&SJ5u(spFE6_)lHP z{Yk2rK#)I)68C*aVL#(?W~xD+u)1X)Gyx?9OD$+>s?SRZiKVd>E$vOI`INjd$V~Ee zM@5%bNSUSuM4+de`7U64e40gh?=t1e2Tg_B6%IlGm#SZSncy!sA$Nlm;lGy=))oN4 ztq29L7>Sopnu;QUjEg?6T9pVCJ?#6xK?wMv7IY8)RKD8#v6yr;7Sfi-(I2sg7?3oT zOuBG+pWNfhdA0^f5EEg3s4Q=yh@QM;`ah(3BiWb2;x{qk4J%ZCrSq7x?fBtXo)U)XwH;t#peDxDH`u%HajT z-3o}2DH@AFtYtn#BcWR%G5n-{-3qF9OB7AM#DoTL=3IqPQ7fh+@@{1U5)pwCQBly$ zrC&ri6 zVLU0K6hcL9mm)d`tTRP)7k@ri6eS`<98J})rHKBbIZUKV$RLDT$zSU`m<=jGSwUB? z_8P)oiKSGbE6MMCtg&vd79$Pm@;+S-_EBt<6RhG!oK@UI&QWqM!m)L{3M(0eVWD<3 zHYAG?mm^B@lEyJPeGrM+$^#x0hPtBc4UD)Iz`B?2ukg^ReQ-bBP6D+~aC*^+3`*no ztW-hb4dS7_PT*bQZinQJ1Lv)Lyc%edcOSq*>%f|7ZoA}t49-TAR}SWmmFj>AqwYC8 zv>^J3nmbVPegNmZ$$KDqztjUSn}-gsK=B4h-oM~*D6jN;M!cE)#-QN60*~<| z@e&->ij{AuksldO=^T0+V?@+r;PZelCgL?X%-YQf8EM|hL-Y?EZ-wtyChUp8P)T1nJB()f{A9a5UbBBiRefR zOA@IYG*(J%gb^$#PGn+MM^yOPhGlT{xq~24VJ%w8;_D%_2Jat?~=<_qIhnTt_@6r%wR#{k-cZpP2ufg_RJ~7g|_p!7yu6M(o{+XG^sD1DlD(g$# zRq<74dUt`162;RTP)ISy(aAv?luLqVeyrr{c)#j1>^?%)rMQ#B)5q6@;@k z?qc-!jj_7K9sOV`-VW-HW_7H1FrtJ1#8`_vI->~|mbs&!H?uL}j;K7$p%c#!|srkM)ItVsJ@X+qfF%@gmZT!C3L$ z?;2L%{k|1ad9*hKBDLt-7{$O^zSwH`3yhuxHdH%`8AQ?vV~beJHxd0;Hi0>*F!w!$ z)fH=a(H!jmf(q&@LNxu)!stEx+GpJT7K$LXpZNPkp!T?qea_vly{}^%jKC}`8>1N7 zCcJ{JkZuu<5JnPMnC~0N{F1xhc~^h6->)VXpE?Qpe}V;anz`*=LYHZn~_T9dFz z6A|12X74c?f#=)~f_N#JBXv{>MBp3tJhF1RUX>t&8;G!vh9^C6PtZj`ENm zxQXZCeFKNq`ctG-W{kpr;9fgggO7n(?-)24Hr7jq$1?qbm{ExaR?xtiWzZ*}p5TsK z*n%fVB$I*FA-p~0GmBIUU+#%trH_cG0qbGn0RyngMLWeEJLbcz4TJv}6Dye22lWBB zmqZhr^n4%4Vgps0TjVXh&ZD>7$Ji4LHQxrpZiB=uJ?}vL4IVw>Q;a|neh%1WKc0*c zJq=&E*)dB~H~JB<|NQtcJT%%(o{-*0Ev4b!-_Tpap(l^(AMIBj`&$XUxK#sI+mFiv zahp5$eykUW&cJ#bxVotUR4BAN+%bAB?#L*BQ%r&^8x~nMe&f!B#=4ZnAgs?r(nV4E z(C%_aku0S302s&eu$YCuU#{Kbk2XZ?=qY{WKV&byBNPgwE1AW>s+yOnZrS5e$h{}r zQQDXZN&zd?V6re7=YRNcE^L@eGcYcrlIBh}S;Ay|T=UfJsmHe>FH6NW8HG=?X|C{T zYVj2R3atJ9xPDm)+@VFDL$ycNm0uw#^7ZPLVoRZCoaQM1zMl5S!0h)CK-vfSigT%p zSW_>tIfO}#Wx14RGRa|2(caK@X`We4b?R1=s_KvGO+eVKdH$vi6;yv* zGYKR?Nma5|tw9?0Xr7B`2urF3jRZwdvZP-7G|%h_I-x8Pq)PH$Nr5T}^6@&Td49U3 zXHuF;_4DPDjxhOrozpzuX6RC<{IAsZZ$ZP`n&;eAow_QYhV4E8;eqBUj)`BHgm3Z@ z>VJrv_eAr|d!ZBV5}`9y0Ww!*LgRZCf`>)MS%(PS^NH+1npM=C8OKQ^QTkRu!2h)6J1lHKUXgvL?xiZDMi~p6Xduke zdjcd_EG1_jKe!ic+nIlIF;1@%(&NL1p|uM?ajMbM3s8R?N=v!;N-Jn7DHUT*x*w4f(86%i;q)v}4czU14=q)D6 z@WiLwbo3qGJCmgscThMBbDkx|r9<&XQJ+FfFJ16AtHxS1#li&Y=%kl*+yE%1qS|NT zm2auRuAQe1K&LU@8zeF}!8nWTLKd_{zt%9lBz{GQ=CkOG&o%b^MRYg(J$n)TY$>*c z{1?6N9aQHpqH}iGSc&-PN>gpDczpD_@9|Q#LfuB7PJZzM1KTZ9OQ}9qdJo5%zYz79 z11N`L3CbZC56F;+x88>SV%0Nh7WYMI5uzs)u!*l%(;DdiqVWz1aTvP-?4rVPY(E#h za*$dv5}|^`xBt;bp^o*ig;8up%h)9j|4WVOvb`+mC%xMVjejwry9NEE-fJ!BCzahr z8--R@p?=b5rI1Y`^)hW2Y7YNs@kb2{`biIJT3DmReQ*z3G_u z5QzwriLe}|L{xr^$6rkFP$ItIl!y$BlL>JP?OU68AG>t|MDh*v$;I0vEJ(x?m@kK@ z`!i-l#SF*^5=Rh8uxK4hiMWGCkxQ&aQrzO`UfOVVd?RfxYmBj-Fi|s^BN4CSoZ*{1%*8*s?SYMJldySi+Fo{8BDG@EIYv}l4x(pq^7m!&{v^tFE9bHot zHt`qM(jmibpM)XYUn5yPetEfjKi!=l6b2Xbu0&E zQ^)cr^hK(QRr{$6UAq@`q3NZu)kQ<}O=^gXSc_3pWTK&2OT=REr?#k{LS4|CoO(%7 zk(|{NKS9I#Vx=9;BGKhKmcfhKe`u_c=z5y5#-epUtQQqceu2FZKTgNHLxtr4Ho%HQ zUW}oNi1OHtBJLlwuvWrVKx3^%;udVF5bcUQ5x1*is9MabiZL)z?i60pAlfv-lP=C5 z(O3^r55>Hv_$Cu0R-#FFys=2MKwa8fJi)AbA3-*!ub7RFcRw+83*J&9-ge+UwBio# zW0qL=6q_bR>6(n?h>cb7p-WMql*R^%ZOH9G!i%?(yn>yBoV_ZZ^|i3UV)JthgNvOd zEbKM01LIah#rGIK7$%;KWo)=OzY6_BF$9AGBgJn^uns`n*o!3u!UlslM#N$AV63PD z>+!m%S&6f8Vq!33>tQFM!i%@?;u z;)Ug+csC1MC{obIT_k!4yxUwn3DnpU@n<@NZ5z5$W6Q*>0*oyehi7YSg($s;v6Zaj z@Gzks_qM#!BRuZO9mr<<$!{vHPVE1tl$h*BqLf8{ld1PBqdhiujrJY)gFiN;`{ zaN;K0#l}Tsv-XA1Uec*9dfYF9A1tm+S+J%~kB z9@eqAO)V!$AIN{9$ZJ=o$U|mQMIMXWWEF{@!3?sFQN{H@v-rHn2y~?w z)jh9$NP&DPFPiYwM8iqcze*Z!FH9PD$GJ_cx<#281DDPpS@poi9&m%n%;wIckVcks?z(O~w zY_SdMM~j1SV^|>7o#~BY9(|7{+-J~v6AtYUD-x@q#xZvYIt1@i2E^Oo>1X9+&?eq1 z-7&ZU=%EQW0L;nJWi*YsNHS=3V-yZ4p3AQSDH+YY?*cCcsEP^81z`$q?wtgyY|S z0yfQ$&)WlhCl76f;Zcb%2e#Ue(-chlE*^Soj*)&~hy1v2A@JRJiPzs)HH1bUzXt4< zAFs6&_}4tP*a6PSaBvNEQXmdJ{jw3fkH=0%%ZmyTPXJcjkIQE8eqM0&mloL$=JkO! z&4(Z0@d8~b`8LB0V3~x=hc>JfDzJ2XLVL{@ditjTQw?y-l9`OP2V?6dO){aT}>A?E<@eC)* z#&I4yqLPk}12)BvPlK&aKfzcVU|BHdG z^y3TY*}KRKG}(m)CfV@azz&#r!6C1VVCk25fjKAfZ4uy?09`lXfJLE*{xXl9Qw=5V zG5j&_p&NT?4+D;l2H^^ib#?|J24K;=gfN)_Kl6lN@Q}#_)B`~o#xR-qUwFcjAN9m_ z_hT~Qw|T$b2gs9wrG-dE&pn>4d+CAZ-dcEG*(xNPoc-&!gie!?|Gf_0%L_H&wbtON=Rq zRwT(R<;P?d5U3^A-lbOoP5hWN|8}j|&4Kt50h#~aeoUHvhgRYnG^?cPAMeMc*>`HC z`iJXge}Ny9CO=q9JT@GwHAt7OeoUJC5G|o|T|I|R`7vqg-CEHN=+n{n3Hk4SY!I1w zk5=jqnu^lQJ5gr!v`Z5orWLA%X)CJ7c`-jG&3m|(`1~$f#e_BRW74!oXo=(J=~xdx zCe3=JmiPpdcQV`&K)ykJgHeuBn^zO@2(8@>s2Og?QbRA2YEU zZnX5$=zz-jR{Ak% zAIobACEDxQ*M3ae#wuFEMVNFM?xG))cCnh4uojI^i9PaT(k52d61F|mv2ZkF^t4NR zSW`==kga3oO)S)dL5B3!T0-n#g|+ZQUBi&~ZL|ce29VM9^Fwp+wXO8FTEdDMD&-UX z(6+u1n4%@vH>ywz{m@TMAh4q*f>A$_{<{d053-yn4E>}c@KjCMepPLfi+S-1!+O8Q z(sQ&B*|uX&3TcxL4M^F^w|j+Gtjt?20H5y>vsE7dKFGm5qnPp1N)#sDAr7*kWQjs=8Mr?NGcgYU$?~S z^w0a^a|*>pOGN7&3fx1}R7s^m>D=nMiY{tWX%|gr1-h2*2DPlKU{N*ywH1u7aA*U9 z5Ql348U#s|T!|?3L_Y)M0-=KmtxlhZOiFfq8>jBnUqBxF!_wy=lj=G|jLKUNCRw6r zqD4ubN(wh}G)4|n&X)sHnNTU&RSV-RNv#|)=al4DK-&Am*7yuMw{!K#Q99=U8E%A? zo32<4eKselOMI7T+!0icD*^N2P+INDk~4YI!O$R9t?eIz=(@*G*{9ft^0F1@C~4Qm0eG3*Ij=L;rCIfxH7brqD zy4|)EWRY_o~y*(P=pYs>jzV5d!-bTPMyRSUukGXUMk!O8ib+r&y@dP>6XK=ej&Xc?rT zu}$pkNep6B29*O;onT6Un$9t{iCIqRoc6%eO-`O|Vk5DxTgn*$e3Ho_<@C5Z`#QZ~ zin9Rt$0kSSh_Ov<*EEbokp}d(sqajVlA~`EyL3d?=Q{BFCP&H9w~6gVLr=;Huw!%< zhf0@{qi+*CIz#7_0$#=BC^<1(v2CV*p{C#C^<|X1ZGd+qj>)XV_^xl$vFf3s>xAu^lf6l zUBsJQD6YrAtqxsNRo<-nHnFi)FcL|eIN-%ij_lGa&fvH;2B#kImL@09HnD4cbba~) zf7RqDee`W&n_B3cw}5|Oa#XtXZDNZm==yvHe3QX3w~4K9iaks4J!v2+=ZtM)3o!t8 z6VRU~EQK4}#73goDV!Ks!XfXPD%Hj|v5j}o0{~Rcgr)il9uxcen`nsxYHh+wxV}v+ z0&!*l8fd~Q6ZLIk)2r&`Vk+?2CPyV+-zIhzV;{2YtOdTs%!2$-7N#V^6&91|_5sJ%eAu z)<{R+CMGQmwu#B;ofLshI%Ey)@=V%Hs%&j!PAeY8NV%=D7lUfY$&qK}aaM$kvyB`( zIaB!Hk*~6z@i7k@VyrqXoc?Gw>=-HGpLLb%wG}5dgg9i>|00e#f2*(Ae*(MSYlU31 z9}*0l8WU>ik#F+?M6rU)S5XxuOx`!&`!=kS>7%^sk+)o>FB>6=Zj|<3AIrtLc*b=hCzA-9!~!he2*Di#;)*kJcMuxf5i+h z@t6xABlZ{J^hX~5nZZ@;5`G>+e-t_nL&Pd=D)#-qX{=XE9!~!hycXefqOvPg;>~#o z{ZshvW_TI9w;S4PV79GV!BY6?;DM$hu%ZuWk7!uG#UX=IzL;{-1i)x-D=eY<4@}j-xemPvUlNTL4m(C!b4)UU- zrzHmbGrG!)PM*_Mfpn7>sh+VUt%tnm>b-leB^IqB~2xzX?~PWtrTKjFe?k-GEs<9evr1*CUU>-$uD_-xH0;=6g6c>B!3f zEUdAwBIgS@HtERAdj;S(1MNfmJUBM#$jehc_zgxM*gg)9O*-;&dps`76ap~3Bpf=k zSrg#MOL=B51E5_MICN&aN{+mgXWa-`RR?}E(5`gSOV{n>XRA~d4gq#~My+!vz0lvb zi~IzJUTky8k6t%xCqLW!b>R?TmuJ+4bkeJgy{9ma;_mHmKf{Hm?!Q=!6eKr6GEW2s zDS8LHXfG(e{T0)uy+bUgLA%Nu9LFxmQXw^i&cbwfFbZp<4WjZLfV3G>z5@{P1>(Hs z$d3S5rn9z@VAsK!B&Hd}Fc$J7l<3nTlyq>Czm2w-_HOZ>#`=U>Cc=Yf!(oZ%?t=G) zv_^AHUtjHO;DxJAiR=B|ndou$iB#SPP4C1%TEqLMlySlI^^N`(lDXP~_Q3Bw6w{P_ z9x3k-^fja&oX(hy6!lFx1VUT&KE5O((4(zNomAOZvLFZ=5235JMDUvg-|Q4%D>P{j zhZ82PFBxa`7Cj~5@AF{Um4vx@B&b~RE&CQJI;@o3Mg$6{-T){~lW){RNO-OYr%eK# zFtFnTv-UE0+%2t!-?tBq~+K`UFM31BzFn5q3^Omf*bkwbn(2(?RR z{WhHKA?G+88+|y(PTwxFkz*&zVWW@3*fX}nk!Q>4Yy&y;bsBpT99t?0CA2PClYb38 z0_V*XS`C}2B=j4!I5kl>fvTQ4O z?^7-;MV8?e+Hm@iT8$>cDfAVbu-$O(Knj{l70a`}zV=C&u;ZivRJ z!MA~dsG_byR(AC`f{>koW#++ild8J@n2&<_ItVlKlBjE~M^r5&9JSdp;Ok7z*~+FK z$=(|?HTE^2BPJ}@I$D?cutK3`csdqQ$YIYL!0!-eKc&Lz#lT-??bvPbk@m_Gg^C1+ z4p+tlmRToy5C%#{P1n)pINWO>!=Q-@ScGB`Qh$g z1Fm1<>&>ba$HxPD!w(O618{>9FVc14ivg|l!<#z_mf5I8$!{2=`BDBAp#6T>^$Os| zCH}^2s)R2By5@%~t%c@Ii#cMG?ZokOboJ(9 zq%!kW?}ec{F$1I_CNYb(kbh1!+NEVt%o+;)=j%O5e?39x&N5TXShU zJFfEgda^Eo^dK)Wm)IWk9DNYC@-YLY#oU^Qm4KMg z!l6=~E9#LuA#sJb zECwWcla3`ps{S%!v)+)nD!Mra(gu^n_8|3s8FAxCNc<$O?QO=c5pgU?Z@-K<7G28B zH9oSt_ldX)q%AKaPJp@2{4{zDJ*9MKegNrw9wM`*EdcmM%!LAI8xiLL@aK6sLBZRh z+1E}7*6d&v)GH9W$9V|V1rMTcx@YciCQ{GGIw2Al2YfxxF)4x90>1$cnRm=Op5TMN zK^-g#?gl8sgbVZ?)Q4q$<6FEPFP=jDqk&8?QLA$nRQT36aJ|xwe*|cW2?yOJrM`2n zgAWgSKo^Id^zKt`y)gyp`@X=6HW)M_^dy{fWzhd_|6W&S8*!g1 zJGrBJ9tsS^POr@K<+@`QfS#JMV7_gz{WCtydeet+SId2k z%atjG_q$Pzd>HuYe4GvCpx(W5UtZAV+ynmTWt`v34Rz>pJcTq?2#0zeWU9zvR@wOa zv)r%=nu@SGNR9FknN_yH{wn8MsYjR&JS!h()=DV#Pr0`+qb3!f1bk*bPQAuR+@pkU zpW>@VR17}`zL7Z84%Zt@lJg|N6J=4H?|}c5hogvrlQ4vx`8>QpQCOAVL3omf!~zr1 z+sb?q{#tJ=!gD2H(IJjp5m~11M#sOHUhkoZYTjqF#4(iCrIS6;A$UdgW{T;`8#M$22EgmmM+nCVK$ z;XFcAauumN_YLl;OyOTdqV-cs9Vt^*7YUW9rQe6k8CI6?5TkIJeYvr3oO(x5s}Esf zAgg1+r^qOx)4E zz`rHV4GM0h-b>b3#hPK-QkLcUrD%+No=2f2_!%N{+oK7Tw~I>CIJgt@NB_os56`0V*TPwu&ItA|l-{l{CdU9pChc z&glfaUmlK5q=!H2Z0Yq4^jOD(G@Xca_jC?fzpS51mprR$zXJIBd>pcVSrzs$f-MkpX8ya_~i4Sbu-+FOyjOZlv^CR5-06P)~)c})u3TH zVAb>DRERe4|FLwocX`F-IS1 zs;#pCq)%T)q_$4hgQ$SgdPnX6NT**$q_$4h-`=FzOtp3Hf%N=kL~83~{p;=97cCcR z>qHjA{1*;&TXHpusI8OrDEj6oO|^CEfYjz?L~83~J&BvO&7#^mnIMgP8IjsLS7sr&09*9e03qFb|PgsI8MFcub*m3^@_$3J7=dk*Ft^70kUw z(A1FK1Z#2Z^TDA~OZSjjB+11S0vhV15+Ed*Bzl6Gg*shXq1@YZhfZn@LYhfZk|Zgd zCscby@0z^^!Z?$pBvnNVE-Q-1jjgS>vFCxX+9b(xCF=l-WJdG2{;%uJ_I+T{=i`+2 z%KA`+ZK2*!Rsrr!>!e3~7p#XSQ)wqjKJMLgNl$_Y-LV2V{Nk8}x+__Qc-)^DqLo&) z3JCQ~l9D7zg?U_%S2w*~LCDENQV*OGSCq#s$=1ca0oI2mGglI*Ly=XS$2~x?lM!zK zYlq2H5ld1@9#?LX-U>Sn!WEOGXE3VTtTNm^14A%!2;wma_L4?AWd_Sy(K2@_Zbdm> zu<$SXP)=d6N*GKg+sauPv9gk|P>VP#iI=W|)uhDXZQ*n>$pxv+n^l>YURVn6_<;8- zIEI<9g<8y6Rd{JWP!B!}*oS_c8pT;vdFl8zI=%te7894P;;cTEWJB0O4dJY6Jn18> za3>DG2-Pv7JV*`XaDvew+sQvYPRPRjK+o!ZX59@5rLg zEHuKG)to163DEHZz!Lm8jUQ&U;Kh34%@wjR)&y4Hk5dCVs})apgc(_xzHY!W{J5;S zTl0i7E!F-~J{H&{6R$zNg{-!`?2K{h0g?^NtW;j4AOfrgZ=1oD&yjkVWFszXa_&Z4 z))XF1&8$G?q+)GrO^!UHW}NLWT-xcHoGp3NNVtSCju$ zgXk+Ha3NLbKHU7CZS#Y6f;{n1zqn2 zU~eP9mN>LGDx>mHNKtVb%jtW8KTg@o1>z)bVY+h4t+q*~=kP ze<#EB=3UNm8hMM>!uCGsQwVTr95QLS6VOUzpth|GsD%lCMCnr!I*8fGIFisC@Swbu zph{SOkrVD)4A|l%&_$n5&gm4g9pm5I;X4n0i;Y0cMc+Ki=^FCMV~y;_3vZjHXg5DAPmkc zNj}`cw4ym@Gk1l7NIug+deZsaa4WJDK%X^$fYnqQ8v#_t>^^HFi zEoRQy${k(TsPcLR&@X;Ct|EkPs|@)MkhPK_G?*4U=WOSWYM3IUmT?@Q!hX0$ zO~5<2gEm4EToX_e16HOXm{vsR?BtHNtyLqSC-8m-hXvD;=$u{L^)4F2l<4t*rW>#_ zWWlruJm)K3Y+5(k*o>{fz}FZY7EWvRa&~h^br)m1;eD7OSqN#_I1B&4gDCcJ$FXO4 z0}`;?dGTQS{7=qa?p%*~UNX2E3~V3{DT9TVgJwDVxMK+{YaG0b8<1LE5Zs^$#2?_U zdzj&*6x0LWggElP1b@>F${*pbdiwNfPeA=lIP}GCM1G3<8m?BQV+J6ZbE^1Ik!1Kz zNX|p%fSB3QG51)ctPdHM*<=ri5~yp7Bxkq^z~=}8z9OM`|K?A-?I#$XbYV9MTSXPA^ZtSx;%|f;Z6`juCTt zdPgjUXFI*YhiHwoqn4-NnyUOf1$?&FNIPnI`Unh3vYmC{o3%#TQOncUf2lNw!B1$7 zv=bbG_fZT=zCIf-H9(NX4e-09k*~(9NI&Idp0Pn0d@}Z)jq~+;5F<-_SFZejEk#^Mb^x8RLL++bLm=s-mZx(GgVK|4A4oTFg$_X>>4#Gqot)oN zNl8VN^H*HvB#D#CN*DhchxViEE~txsIq8>k;Ai+#?8k|J3Jyt%fNx|YJ3w|&{|qqH*xm$a>70chihdeSgn z2YO56`xHL2e>JbB!4~!bAM=%%{i}bWw+9k5`&Xl4G0fi>Js`OKYhI-LS3R*KAQ3bY zg?u~?8Q=2SXTk@(h8H7(J_b^kXnFjh`&aXu+KozZ=m^qXQ?q~dLPMJ|9Ij)D&{Op7 zU)9c$$$u{JVtujfL5&S~2A_GL$Mz1$R?~p)Uo~Bcm*jvR0r}dxR`stY)sfd;1);i2 z2FdJSRT?g-e|@}c1&0c->R*jGfN5%2E(=nTC5) zgDk50SA)99YbSy{uc_I;I$c&6%i#J35sEB9DMk0Mrv567kAQZYSog2i)U+Gl!1b(2 zgv>Cie-$}j7{3DrqE8|1T797Ecyvmw`d2pwVloTL$NodjW_AB6a+9n;+d$d(Kh$K~ z>R)YHfMfvGbgksf!y@iq{ay<1EJDs%0m0iOqG;#bBeM|quYP`CX0N>veC=zA%o)0W zbzz_EKwX3AmMOIQSCgNY?RXaws0W99#@xS3LNBQdoXU~246)h28veVi8X5pKv9Q^{ z`m~Hp&b@*96Xt}Y`&X&$Bz_KPs)fz|RnvPiI#&R#H?b_+bpNU?5-!yjd%zEv8moV` z2TOG+8h!-2W?~t8x_@OnlKm??T751Y(v!M>)ePe$iEyq!h!df2|LS&oyHOvkg)i6r ztBsiGqyo1u_+V3G^{=X7-THHIo?#*`m<`>(x`l2WgDjs zSX5s;4Ippl)4y8tBVGs$Je4qAY}G`*{i~A?@#-w%KK-kSyJSiAkxAs!H2YV12r$Km z*}vMSlC|k^C)IOK^1X{HS0`19F8VW#PRV26Q~fKd8_MpuVujd6wTF{Vt{>m8NRd&Oh8`&#CcJ6yqw&gds@Ztb(he(P;5lHU5IKW$!F}DR) zdE(kxq@^E50Gaeo^dzD2FJ6Q5S{$}b7MkRVL)sDB;k@5OYHkq<-9n+`$76jSf;oV4}t8M;FFja2Y9>3dAZ3xBm3_~U9rXW?7!WIGS2(89EKz`G;$L{;^|pM^jx zO)Q_XAH9{wyFc+M3>ovPhY!JbnHs~d0hT;_4r1z=;JZ?hiJDzFxeoz`e;}PeU}oM<|yXd9Q_U>W;)$2=+X2O4`x}FE#M~7T%i@=W?*M zzMPjDcyA^RM8|^fu^ap|(#Z5pOEtW|$FClY61N|Wo&~y6!USvX#BXz9wGU}TGpv8a zVR=J^r`Av;nt!5pz!*=MWy7-_;-kc9k6Hyj z9-^1D&{{6eFYopmB00Z_GPw?_&05JTo~6hpqW-}{WDg#J;0GU(T=H!H5fh4Dhe+Jr zPbvR^%4l9ZD00Hz>yNJ}qw&EVu~-N)d_>9|Ee-IxMA9OZqpW-qs?J(z1(+8Rc-{{Q`{U}y3n5tJBT_e}l>}aoh<<&XQtpE4s8(`{P;=O%3>8Uj zF=fkMybRT!T3O7CY!gcu_J5?j7>WWp9*2C)(u*t#7ts%}kdVz~K|pUowM5E`v^v3y zbqpa_)gpjrpc><=pG+lwcJ{d%u6M_Ng_J?Bc+T&fuD|}WMY@fWRWy&rHYD1P<7DCVlhk0 z61-RsG2j`sc3~J)MOsEge#k+TVd22M=@owNM(5?k#M=ZGW-Oj9ksleXIWWA zB&@*qZ`i_L=VVPNv9*EeSPK9Fh9Ij zA|dr}<&W`DP4`h6_Pr<^y&Xh!U9_P%tF3}yy(u#6Bk_s?ZzmCbJ6Z9)UIaH_rOG!)Cyw8X-zu@We`usak+1r|r-&)*er!{NdXGL1= zhH8O+0#ud$OG%5?ynRL42dnTN2=Zq$sJi`^auOyAy!}La^=Q<|RIQJKYP^q9E?e{V z7v(3l!k`$5UWQ;*2~m5ztHnD|q%~Ws^2ZJc4rmd5Mb5DQ5sx4Y714cdcwsmt?4Ka` zLyI_f9@>M}vn+pEo+F|Yu=IuHo_6RF;3$^&OUiRa^f#lhn24;`hqSGhb50_;TqNb~ z5y!1zUL@sxNu<=kR6D7~7@UgC%M4y5<((~3LY_02F9KSwF)xzx&Jih@=ymbs?}Kf( zc;H-wd9Fxl5v}-fuv#QWP#KO(H`j^hf4pnNXk23WaJ_Z zkPVRxmTqxcB;{QoGWxGn*Ea%dW^r01@I>5V1q{RBkXCaco(k)KoSKiek<)4f4$%{r{%`8sqCA@1y zieHW@U!DaUWN}(#<$Xh>+#F|yA8fkCX_1w8tw?_kB>?+x71(-t6>VbY(iTL zZ&nF+bUQ=Pk&7C?4Fl)d&HekKNgvr6kGn=s z6lNm0*(5(ByItTb_#?f)k=;4;BrY++Q%B;B?w4()s(gWWKBF^H3Wu%RBwQiG^c&(L zTL|~e@$xB_1FuG!o}{5)MkMVS;uy;I7w+R2#BT-X9$I9@kiQp2MYabYggk+ZM?o>3 zRD3)3&a*6t5RPpb=%9ivF}d*=qeu~a0O)Nve`q4mv~Krx8Rm z<=F!RD@=q3+i3+W3`Gb8=M}q=ZG>Rddt>^ou>G+=L*ly zudC+AYFx2_uA;a%?9__Lo+ms9Dk}ad*ddEk2FjiXtp_&% zY+Yy;+_dk1ei7_17VgI)5TS{1uRzR78&dF!aL>W|3ef4NCJq;IMfcsU=>_$VdcZ7QcT1p%N_O56S;!qJxqp;bVL};lQ zssu{~t88*Hke))&vf2>!3H+N9l$}P0vNwxT)ptpu=mK>Qx`Lw3;BlqwX97L=Ly5PD z(ycK=OByi+rx_%c&zHuMvbT!T`|c^e8f=5+{mwYNf@@t-XkJ@zziHouHv{$QqIDh&4Y$5br{*t1`cD7(J)l@e&LyeRoNsIaosTV zjicDZx3lPoh&YZFLS$7mgrF6PEVKUT@*3G+2zRXnc=1`l;o1skM=5A%FZDVqTQLQ2 zffi8NA`2L)IwsubFnKFBK(SS;=$8>Ra4gc;pul>_w8+(T)04to=@OBoP|**LBCRhE=r7r{lSf?2*3(l4}} zW3HIt+ambduS$6ds=s}eB@O>6f~#LqK8|<_gTOfClV`&m1JcL;h+yY8O4$Iac3R0c zrE+CYJR7Gi==@~7V~o<*5U2`#mD01U46y}u$M#}YE`(~OR&tT-zwiQbMY7HP8LDmZ zKHz6sUBRxhvJ&ANC(&KQSC*a;(Gu|+p-8+z8k}B+v7T{L3Z6T3QVzDJOVgycO zwAelut;Os*wvYq(fG6|0V2dptTLXNiJ#5j(DsDD`ePVJhYL$1ldXVbc+uR%Rwi$5( zil4NKBFL~m^AiO9Z2s?5lP_r%48o`@otFW(3Dxy7kFkX>L4AB#o|^9x{CElw@m>_S`kY@`k5_MRyJ zai{{ATDaLow(!h&d3%uxRzY*#e4PDHV0$WcxI2+O-WGX%2U>{Gi1s*jB{7%C=q4dT zpR+}Nhmx83NU(g(xo?vFFtCedY=SL5AyBYJyb9qO63eQAjZL)0H$|05HpDKR_F0_z zCfSp0@dn28nV$u_U~%f3WKXum`&UrcKLoS)()LAH3b{R@XMoDx31F3obM?=WMJL0~ z%4xQUOIz^%cRXRy462SkO2bY~_3Y_3Pdjv#xQZDL!Dv&Y_zYV_ASM#I%6bWG0dX1J zc&xe3o@tBNmIQB6mG(B+7K>9;KYNzV^V9?^gQOzn3$Sm9%eZI$qAlXURYVJ2{~OqC z>-vuiVfQ6l#1?dgmT@ z=;pshHQGdecW~*g0GaZNWbv zTrBzwf-g&mXxbusu`T$E%~&OiTZ*d?-2E@n5?gQ&w82;u+y^fV!@)7Yxm{&>|8|J$ zaVwP`s~ITy;pnI-7ewidk_O@Prn~qCOJ6>Fo73cZ26qZTt#& z@4o~aY@yxy;ub;ApeKbxdPLr$2G(3e)c9?D2?`WD{~0g2;wqvQ$Ig@vn}#!J43d%W`fPNu4lf*7N3I%=Z4lsuuazW zG!Brx)fSmrQCR_DoBQ~8@Vnz#bb@fGj6-7t z*&oWj!4GYJ8hm3D8RYKZUWZcyk54D?JU}5^SqA%M-~l*V2l=V zlPhC*YustKEuwN=ncnAsFCz`zNE*sy%^q9uo((d&Zvo$>?F@v_kaj+`MO4a^3Hc=W zd2NU9CGC7>3-0(xY94?)@Yv~t8#8|Wyg56pq zn_Fz@D_dk^6#XnZ1;GVhQR(o{k>-xuB6^fjWx^u}g!GEDHrNSUaG76KQ4oWXgd`mD znU`LcizoG+Eq*;l(YUBUTf)5d@_){zp}p0X#Os?fRX-1pqEW7%Uzm#&pMUS9$)n$$vdDQl~7RKlJ!HHJHl>I z41NXtlaEAN;&+N<{hU_2meh&+5cv&Ifm9mWRiAY=Ev|}STbR4TOi&38RV-PzsyCZ} zVLS45Bkw|0Sgv06xY?qi#s`UDn;|dyyL0*c^zK`3U7ZMY8TyUw|Tw?OK51~JL~VVUp>TvXnIx;z#RisB2oTf&BL-smnuyncx4}r z6#COUL$Z)k?qOMgcoK?sJ}SeXUOJLx6XE{UeHZ{Z(pSLSjI$gf=`pOC;R<3F1oKG5 zsgAc9XXVCGLKEC%&MGBRCZKam8u1}cyR?{_%vr%ArR&T1)C-(X;y9x*H<`0M*xBll zSlk2q$Kupv&I%DJyY49Sk%KS^j6?Z_UcQqxrr0*)tWc5B7bOB|L}Q#GnKFpMzMrL2G)K9@A}D#6^V|a!l;yt zA|n;7g2kzJ%t{dH!%-@6?bsNsg~e$EJS#<{>};$aY(KCe7N-HYtW=RQ?K{P%g3Yuz z4d7*^iS%dhsoHl9*hY)jLgLLz7g4mSj7N$0fqiRoE>g|Ocv4mtiK%;(@;X!xwX)a@ zG~28y5^0q`+l(550b?8-C&dLT&R&q~<{st#INY?hX7J|+@-g{$Qr!=NhC zN_vx}^5^N5h|yXiX~0I+R$2_z>sm?vH0&&@Es|X4Rcm}Z1pBp!sud-wBa)sNqeMSK za7~NIcS=-OB+Xr?Zs&)1^5BqxITd0TR>${nsNGPM{+!*&n77+tnYv-aqJOXB zd$--5kryl1NkxT8$hD^hhD_;F`EO6`V+UYzepm|DEKq9t6P}cxoRefh*aQqy6A2v- z!U;~2g<%uX0U(EpMCi4eMrDe+oaNE`u$sC7Tsz~i{Y#_J{1SeC+{qL(0W5sgb9*j& zA48xTVJa1R%`*fOF=85==bA{iN#v#5gGONBN4x>HNpnu0lJ5xGFdx@{2KJ@q1K=%X ze`n-5FZe~Uo0@Ybkk^0bc@5M2!Ve-34jBl}NxY;l=W=2^+C;aIaMFQmk;Fb42CWp$ z&5E2GiIdS6C7oywQ4b%XT+)~GM`Ft@(w4{rpIAae&5E3VGLLjunx)`t{!8<3W?f8c z^1XI~f8nE%wKI=AE7L3RldwHk8#MN<0$%%o8Kbb;U*5^<`a*fQ)a!m6=<%Hipds1Sl#KB8i6 zi<}@4ezq~5&FfIS<)e~qi=1E)ZsbF-7w`*Tft{AY=7foqa+if{(O!b!Hxkj~GkA_E zCtRd|{EDi=oFmZM#-Vs*OYGQ>6ctL%wDT7xL^-fb%}Y~Rm=i5B7tK)%>NQ}2}P8F}?nsxfl zcB;H{(nad4yQ;mb4z%E(53&wJCDv0#d>T34PKn8T;P$8$v zJttG7*GW{o3|KjfQ{|phQ>1KqQH7}?SW}Br<(`v;mKM6z+&Fm#Y@o%da?h!S#>00i z<|l!@p!r3Shk`h#g-HJSB;JyUXnq}Ro#v(d(Rj*fiFb@(7>?|J0<_=4$FPPtrxm^z zi2d}0&jDSu@Dm#lyRAh^=_e$92xLdWB?Dh-DY_XsZA69J=t@y35D%1M;ei8i?{*^l zNz@^x9ZXK>ZmL^S6cs|i0vPKys-R8(x zZE@J122rSGa%4-OesIn)k+35LDc&mCHUc?#D%c#&eYOt!4MOq12JBtUKRbfb#N0YO zrvXwY&>KIC9I~~A#Y7Kc#ZyoO3QP~*-K1pjhM$E0lWj8H)_qd9_3gA^p zBco4k9j=TK6wc?(f!bPFZ5{3sX7KY7gMdbxSV&)}t;5yPb0-J!BKXT%BYmN^4nKfT zS+fazyVgiMYU}WRyhnmH--4gh8fiyu9iE0c4c7cge2fZ>dfIC1@GK0wvnCF_oYwek z9d6cAraRF9yrtGi|ER6QQ#vV4Kkyu_k^WIzhrf+h_nHnq+tlc-!ws4n#wxhJZ4w!C z=GNhvjj{g+=!nK_+}t|+_#(Up4CtE1ycoyaI-C%T&j10r^37;q@0(kP&vv#O2|(pF zmd4fA;iv9m8w5}@joG-L+B*E!G1a+y27H*-$iSlsFTlUk8fiyu9d6xJWxZSA2J(fK)P1)O=XI9pJ&E#81!nNhlQt%~CWgQiy=o$|+M5_vd>@vhNAE&G znw^-~7(>>z=lzbc%4A2?Lc3x63G`PSw&oym&uP%F12EQ^%EOViK!Sdq@g}3}w7~I` z45JO{B5{hRA9R(%WkYX1A&idXS`#NsL1O5burR68;w=IP`H5wuVmqtD({MZ0=F`EMUP6v)^Vt7 z=_@jhAv`QLcSSE8h4o+H&uESABdE8Gs9n*KzX^j@qfLZR@QN6=WA2I$t%6zz{#gRN zTH7iXfHsamENJ-vXs^aG6h3oTv=@CpvTz#sqOZi<6`crd4sqxddP^;X zuYCmKC^7?V?u!0C0)ynRoB)!lsrlBazbZ=0m?SqE5#<1zyP`W_Ss2~-DUd#zn!BQ( zM7AY57UVgLs$J1#Zpv#HgS?`txhuNXU14m3>vkd(S%RLk-W6RQUA1FC$4#tvMVCU` z@d{k;m<0P?=|Z(D`fUvK`D5B38HcoM?TYS5w~=bKD|+cl?EiM3y^P$6M9s&_?aVp@?>`$C{)7N+%h^wy~+k+PcG0<_D-vTW14qWioh zH7CK(m>O$WbTh1dp-}w+WMBfrib6y0iXK?c&TpNH0mph>BFWN%y44_kHWs)?XxEMwl+PY9ilV(G$^3-b8$O5PWF9b?W!O zWl43+B(hpEcSV;8meHkmMW2w}ZqwsVs^^?EJL#lc>}Simo2N ze~M~}vPrkBu)C-pani~4JN;r4{ENytC(U^}X;rq1XFvHD-7k&)jE>ol0HN9P08+Er z^0o(SvX{VNH4fV&I&ss|Y_=?N3d0si&}_D>e2CwZp*sr4Z_TT8vt=wg<}Sj&0o^7X zjKApN(Pm&HklyI;w4mMKVuPs54Zi7A4oCD(bc`kTa&&CI8)GKl-`ffOERq2i# zH(XgrVY+7!8nm338$i@q3$6Gmrmo-_gi#Pyd!c+zt2vIOaH@ePmQm{T3u@o~%Mh(F zg@&K^AaKRdk&mMh+87?%2DHP%dDx3NvT~XI8}T|IOgf6=K;LT|N-z8ySuMUU#dheB z(I|?l$B-@{bTZwxMkyNO2?>3w4aj4mbc6DtKVc!{$eMu-a7}F^a5a*OlTI#5c`p8w zenr0frX58Eel={2eo#C7;1B#gGNRl634bDIABUTnv;WFOwiyM7@i=U!>Ex5Mm!NdC z1rjuKcF%CU!;p0Aae9Y-&{aBT|AqLvK&}UH`htF3A&d+}K{5i#Lry-CQRhrLk%yvf z4dJ^{4Z|Cva4t)N5YIb?F{*QDd2GQd{X7_-y1CX3HX+l(2Z1x*i`@Mhe6U*0HQJ) zhvjFb+kxKZsDUvP&*S+bI8~u(LOPBdPK|uxd?bS~JiLZit|aLN;b3i)v!e80PISdB z823dGCIQd$krco0$e1=|v9moveF4GznRh+Hl>V8KiZ^ zZqB+Hq2H~M_9j9zSL=%1mp1K=deL+8OIaeVhi0d*j!P67d=}5~)W_N(ay<^=RW0V5 zmlV(Uv^=T`r5VV_IEsa+n7Ap1ghws*G^!=jePsw6YcYGbqcMT86)%wU9Fhw^opbeo^zzTbTnFz5W%(Pf*{|SLFZCz{SnKP}kLD+Ar$fYrslv!Z*;u&!9VSRduUt50?@`W=MrXsfeJM~MBy_BF4B)n3k!f>^_7?d z7e}GD2NE;~E}q8h^cA=sgxgW`BKM8y@Z+ohl&o`E`Zl%N0yefDoB<^)xbsdA242sYukc!*3=xh zcq1Pl5rbngv>B%;Nq=4Xz&1iudy|7 zA?D*YQmqCqo||qrZa`_DZTiAevrrFQ%swc4(eY4L`wunQwgxW3@!r3tP<7Qx&O9vQ zfs4*xqf3mOGYod2U+05X9i#ojw7R`g;bze(dOzDA(?B=pY_!y#3OriBUx5`^( zxpoTZ9ASROJa91{FUPwHr$4N#%z=yhXc$wq6+8#ye>h~pRLUHxo^IwEG5&8~X_+uon6bjF19L2aExVW+&84eGw z8h9;JV+~xqHx%KAb2k%l!E6m&bjp<>7zv(F8X1M=z(xOs@~O@RTCA}ixVW+2&Z%QN z5XYQMKE($v$Zyub1r-th$H2v4IdCCc$doR7&CAEY#U@I!UVNv5UYAXEL)nl!R-eE{wTF{Vt~coyU(LU${BkZqB6H5g z2!o4$x#(9K{fctZ8m7^K{%<4ix61!j@RIJ)A?^bF?YPhg4GG8PGz8Ld2HW9njv5%O zv^x%biN1>CiMDtajy4yuu-h?ui_IwGuq`xk2h5KSb}a3O9?(KK zti)lXd#N7M;x(8*jdyH@3+9%R@L$yC4KR+kc<*}Inu>pWIQX}qr|Hr!Fh{4S;yd2J zXuu6P-#3wUapQ-p0C_Y7HusWLWJ%wPKQ}G)H+YRzwCtyLR z|DB5e<}D%d7~mo@^ELUjw^bFOCs&Dt_NGL*6S5yo%OHJ8CL^$84o(4&F&?q#ZRC z|I7^K=i%UEwMN=eQ}I_&F>$!&fxn_P(#~!4CkX(AUP6XD=H$aLbTrs8+w6;W)bE_f5I zk#^Kn{A=$kO>giaS|dZFrs99YAQju00zO-7%#$ zX)B;MHCqcMlmoQmIqmwe9zTBI?1-<*oy>cG-ZpsgB9<7z6t5*BP9 z1o}o}8Hs8te!y8-d5d4c?`e$;yqb#t{)EzaP?*HxkPlu)VkhJqOvSq}X2|KQ26%m~ zk#^Kn{F32 z^?(xPJMuB%DK_aF(qp7H{LYke8o9Gv)6w>#3?(XpS0jzQ`@&50XkK&|V5U$sg>wgexy*id z_QH3w!}@<3K4h0{hHF#qVZo!&4VRyDE%^dJ$T62P)j?~Nz``NU!1$>v*d~a#y zg>CJm?3@HYuQfkfn)zY=Sl7e;c>wNMZU*_HrCAX6mwB&5@CsUU)zU1C=~>f|cAfxl zqct}y&7!au&3g?5AEh;SEY0GugXqDte`bL%)|$U8&C6lWH^as*IEZ(_Kh~OumS$;~ z%k=X%;Agd_)dC&QE5gc~e!d4TUNOUd2TxMP^Q&Q494zk@3tm=h{<1VH!|IMv{;3b% zLTfgS)plMBd-%POcKU*QwdR4J*1R4TjMYLMt{1@PYfbeC($JR1+|^-Crz_2y;M=r@ zXNsg|O<3pv<>zDIr?uuejL9oIZ-jkj+PMw>P-|vdnzdo~SE+DCu0Z{dLuQA?mS$bp z-9hSJb-|lx%_>W?KCGWN$|=CGxC zGwg9wa~S-D)||97Z-qU?qzBu%0e)X=Y6a`~*%8*<^iSBUSoncMhMnG7r{ZvD*b`4cqdWeiGIi8?M>TYVdco zW*$l+!|(V~6kYqmCcLfgbpZUN)=)YWHuM;j@JQI(?XKKU%Qi6V|r^V*vBR}{661?eDaMuGfy>7z5zO= zalk@um3V#~{kDVWIzGTTJdx{731~)MfDN&mO9@ z!qf8yj5cyFxTp$>4jt79*IX_|c{ASAs|#em1x>{`2F2-p_{aqhlzhOk6EXUgdp&mN zdV_VT&{>1D-I6Oc`s%q2t(RGX{Gl_rpHzW?C!yU?B8Xc~rFI z^e>!@z)#`NsJ4?)^ZPaRp9{lP@=?6|wG95D1IE8$b2<5H5r9}mw+$FWxNXpFOjw9b zVB1ZuS~oPD>(|+n^ps(&p{u?HKTVnqbh#gWI??axfLJt+$ey?j^p}OH_vF{dy$bV8 z+`0`#IS_?IUY&cb3~>M8jTj;!Tm_`2ru<%XzaasxwaRu|pw1e{4;qkX_~itgMIV%I zJsf1TrhYV5?3e3)>kpIE;}26Ays@Rgt;zY;F>d!Ul~ z18bsCXOu;SuTpxX8^#HK2>KjEm|p z7i9z&)j}?+W?YmFTvSoGs3vexx6(z|MopcDF`T^0{+-sMEBJU{2mYuU)E;>|y>GQF zBk!?LuI(lXLU}b)UquFd64cfmdO2QUJY~x(3LFH-OMoOFY#uZ%5?3As`$ltFX?>g{ zjJy^>VQ5_Pn^%7Y|D7~_$-3XqF?bl-J(^dSfcl#C0TaPTB&|UqMt}SD!j1Aq$Ni(W5{V4N zT2&k}e)>>yFeV9pMw639`rD0W1nJ3%7-B{snQ_u@C;y_<)Z+c&!Wa`3=*+_(-7KapZlLhVw%rU-%Mv&DU`3M#a@NO?hi3oebwq zy3TK%x~3_!}U&Y8SV}bh6ABQcUd}xkE-YUWfB^*Qi!-N$_@B z<1-d{_z!%mo30!To~t$FId!k@i9ejj9$(VD1inOTI7ZB|NXJL&UhjeL&>Cq+jYY2A zsx-&Jf7BXjM~y`eDXs4H7r1?c87^r@jYVcpQhtsHPuCi0C;Mj}i;UZ%qOT!%Q_{%j zQ)7`dPtCPyAD{siR%4Opu+EuoDJB5TG_jDrP-BrV2cViE&1&#>v_|?ujYXz!lFwNj z0RLKRq#ZRD`T1K)a}E3tt&w)rSmc>{%0IyyG5(E%L!+Ly8jG~oSDNbJ^|Z!kEb?bO zCH8Yy@MpC~`bUjL?%1R>h2YO?jr5Nii@c8+Gq$r5{0&p1w*^)C2lKyh-DeURbLLp& zkw3Bi8R%z?*|<3tnYsmwbASW}T#AL$9E)so3*RvXDx)!b-yDnV{3{j&0yWTB8dqbH zWkWE;57b*@IT)hGB0t4@y*OQr1)ridGVp3FGVh8?JFkGR(;69xYAmvQOI0g<0)AL) zq#ZRD+46zv5L^Jip*7Nu8jGy-hsrYk$bV5dWHu)|zGIQWYh`-RqI^0PWeuOySR|J) zXu|OA1L+3N(J0WJ`50GoJwRG_wZTFJXZI^OQ90!d`4%VEQGw~=U+XZJ=IZqoR>tx# zIyvc2=SoPpF#nM5{S?NH1plHJF&Jr7GN(}??CcA%D+cD%_!pg=^r!Pj)4*Ta09`BC z!1#)2ZrL*JfiCCUHlra8D@5W4FXM9?&h+CjI-E}Q%lQnQ=uc-D=6+oCXVmgv?M9jW zh7tel!EB3|hEb(}fc*ABqV7BRMStdZ3i)X!p4Twg9fiZz^&Wg4d+$lZ$nO$cOn{|4HCoO#qeiz{s`B2Xln6wBTGL6E42!iAjG5M z>9SfAp2odLhx5?E*k1Dh`Xvu+FJIdb9lP&Ugl1St?Qk4S(*ry}BYb`jK4^8-Pma*%&u!{@4?~foCcvoUY0TV;t}Sx%FbaQd7jm#; zVg??MV*<_&M~_#Kg&a56*bV=#ZJr&8Y1N#e$Uu&Jn}y+a1l32Q%TewvrxE0+{w6+w z=jegg_60lc)v_BNN9JKnz;^92dbknlxU~hnXvfJ<45PH8-Sb$?;TUip#hzpOKD!a= zsPV{YL^)<1Mi<%RbO+2v5=U380!fQiMflU6BZIP`~*T25;GVRhT$PGzhIOgA|&QwQ$HgzB<9~1PQwur za~Q#m3W<5Gr^7JH^o*^JW*6o$dd@;pp)R`-K>0cUdq>CHC}6zfyFm%uzXt0R|B>>rKmFCYnMmI!~ehz{eS~QXG!8RT_ zj-c!muYzsRoNE$)<}}Yvg57|hYXR5AQXqsQhXU{;;59Ay`7Q!01vcTBNCE?sOo2E! zgo3_hp#*l}s6e+!2F%m~s=SoIPdMt5;0eGsTEH1v-ok-fkf0x6juvp=ObP;oqec%z z!!*FTTEHuPrNAW|?~TUeSqu1{7EGgfk^;AI{DQd+Cy2{{x3yr7 zB?uOdYGdHZfGzm+GY%OKJgp>ef%n$OAm@k*fRAaxLd!yka2!V4NVEj(q6MohK`0^$ z^`969n6CxvEkT%Yyo;eO@e<$?E%?9^lopPW^$}6;0Dhze`z=AZaGXV!7RLZjYr$bl zfS2okj{$jc6Yzl+oVEm!!Z8-vTZEty9fw241FZ*DQ5_{5E@Vql4e)U-;5DT(qN0T( zY$iO}5wMpQY`v>3#0W?FEeLV}CuqSr%MS^{as480u?X-rEx2w85{0AsSqQcP?$LsO zEJ2cR+@&`2Nx<`35Qqk$3PrMTbVf-h{v`Om8O%k8wID?}@=*wiXuwo0Xmv~rQia2f zGEvk4d{PTCzR`j-;dm0orFa@}fEFA(t_5X}C82hGqEfK9Ohf~{J_MWwXTMg*m-Lr6XcJgx;#kUylAcEZuxfj$RW zxdFj_UlD(zA-{tN4aVvm;rRgLe>h}(&^3nr+$n0q30E)%*myAKF$n6Cs2THljZrIf z7Ot`n6z>f7w8e*3#r0i9Xu~%6=p05EL>^e7#qASteK+B`7bjZ^ViDMKi~o%hF8?Xv z{$Q+X^uG`GiOIQcG3?i|`6a)HaQjbDqSFvuBoS3zO0;$(?$k@Tr*%`^kbfa?eW*gB zM0~rx!fnIA5%*P6A*ifHTnowD4G`{s8Yxk82s)97Zzn}L>v6jwBJ{n<%1>Sha!pHy zod$sOhYEN1B*Zc*7BL%aq2~OlgZ$z6jzC4Qjd0&YjH_b)!b5(Ja37nE(Cvr&5zXud zvS0oP5jq|EXyNX1&@Mkk zl>tG`5+eFyRDQ1T%tLmi%2l+3;OP<~`dCzco(TCXOvsN#Q=_<0PzSn;!p zi)9eJW{Tt|qVn@a&|WxE9Vd`Pu$4rhae~5B|MNO=0(z+0Ke;t@0lYin_O z16BTWqEx|L^-k5nU^y1gK#iF{L4^MOncM~=W`NDH_-I_0KT!mRy`|m*wE^s1i$7R| z`%e;qWd{g@+5_Sc*fEQ5?*cwq1dc;(K+OSh1?+~!?_n4+e~R#IpJFqX5)aspNWh_z z2)zzBf2xSs8E-f0L?O?X2dixH3)SGiX(C}xIV>|y2X7A6*5c6^|IL41B-W{f$y7XA zF&Hez;@wMu&k#Wu1F`)Tb%&S%Hpk+r2jRb&qSP;#{h+EtYyf-L;?v#%pCtnKC!z86 z9rz)zV-~OeGWd%kFu;WcC8*uR6|fr?Z?gd5dr1V2ED(e_@4nb$KvOZg!31Q=$7Z~2E7PTYyf-L;?Zt|?`09zy(*Tr{t12v?3l$j zq8*XHR0KZN4_zYSSHNyq{1%!r`OAen3T5{Ne*QZVejFbKY z@m+Ip{VEZ90*hP)@eN?_TKs$u#LsFG=U#}uIPpVZ$29jJ@vpGuSYZ|DlMkhSg$R>kS8!LyD#6p(M=TEBMb_OwS8t}(- z@;?=UJqDqxi;)Jg8f*jE<$~W%-^a<{Cqfrt>m?0Th)=-|5toHK4-o7Z(K9hX!u)5j zE1LUXnuO~g2sfGphWHomuH9z9WUGP&kA(ZwV`$wZ0cL0cw<=0+p8*RUZ4r-tHjFwn zxY7!OVqH9bJs!TlkdTAc&3@WNJe&k%oli!oAy_}1pKA+hx7cpboWt|r^XM)V1VJuF z*l(NhgqPSN;`(FBG4Ar7z6nn`gjLxL8%y!hZL}(gf2BEv+V~aon^@9WiiR2tn?Da1 zt+Kgm*T7xwLhAR48EUQp`5LKOZF6tCj4kG|P-JM8)q}N{D+8acvANT3$m-ShBvkE4 z$=>H!lnsP8@M`|vN;Cw50xja3azN~Lo59>#n|n5z-BerK7DBa#l$_cuWphrF8*M=w zC!iYy!9FcwOOn55bM&nsj8kA2G@pe2w-L_QZ?!r453w76fdyd1PTr&qux$R68g>CW zZ<{Uf8cI$wn+#E=7E&}A@S#n%CZ~`EHvd zV4Gn~275{KKdtLOu{p+~bXx`Xw&pwN`Z5FRBg*#MBIx0YK%(}(2aqTa*dj{xgm)+v zordd==5@yFf&~X{aW8yi7#$$^gBWKSBaqV1T=62-H;!!{QXfNy^2sRoE*4dc?c^bs288HjI0v1ft1u-wwl$-t3DL=LlCs?0Y{MA4HJBFCj3Lw) zdZXMua{Z89UnEyL8P2YBLF}uz&9u^FeVs<-mM($6X0Yo{?V4D}3vI3lqO@{~ocTn5 z;RRJNmJ@+@%!*IZ?Y#VhFnaX~n=#ceo{B*G2Vz@q{6H;n7QdtVzlo7itjkD8yTn|V z@l&BN(s6Nh9JWjVQ4J@(E~8gh*lq^a(d54CGK&5&j4Zlp82BjCWYgv5x{Oo|MUy=- z3uvB&)w+!SyHx{wBhV&|&2t+n0cT)7V^>vEl`M;Re`m zA3A|Jl*iP%jNC=4)t(AeL1S}WM$pU1GWFryf{+z0=DLi1=kRqOx_4jj!KOy9%NU9J zM?44T872}!I4Bl`TnWuFI&00ergjFz^XqiMg-?os=secQkER z+`wFnE0Tdg9FaI=U|51l4N4ZgE~7JD6X--NI{8GvMJFdEmOy%_E&?w4GmU;lpTmM< z;TIgR5-ttuqmc0niS}k8kKk{ah(e0`!!_1@7_;mz!u4ewwlx~7`{N6RaB`BFsKHoi zA2Ke=e>PfZ0rbbXSWm?rcov62zrtZ#0HRQwXCJzH;uknSG7;CoB~At}#u=9o-n_c% zenjub$Sw}s60*jx`5l*3`fk4J;?@GHr*VAVh>^y)GNr$)Cvg{$9-8{mX9dP3mtIpx zb+__>3N74dEnbI{Qu;nzxUgS{AImfj=o|o?7Cr(kLGdn}KPE(Bl#Pjig_z45S2jEv z%NfKmu+t^@>~HMGxN_kUf8dH6V0542*QcHYPY#f;=O%#!)=0 zEdIkUG=-8yE&d}Qw82`C+Wbe55x4<~)yXGH<}Ui>qF;3)AuBVkl<+S?r^cWD8W$ow zj=e}5hrz$1`%VHO87|Z@?IhNc242(0+*m8Yv>y6yn`7)UWOV_N?YfoJXQWM0dR6n0O)3B#rHyNuou> zxhd-MygOhMSPmJP%!)y3+K8Y9MLFEv@ zKM8*BE8vWhAi^V#AjYBrQ%eXqrzDE-?t@^V4&al%0{(o?xH2NP=MRQ4i|*VTf+1Qo zm*a`kc(RB++D=H(R0!sj5OHQn5wXdr@7dA@2)1ewMSx*vOQ|AuR-s*rjzVy%gou-Q z8bn8wrP~lZEFt1_URK0bF-1}EY6^~G5on+B01r4_B)y5Q6s1VZz8LhmnD2bV%#K@lbn1XKx81iw#UhaAHBJ{ zASrGJ)&((+0ZOtkjpY@Ti3`JYG~?Pp^(|Z`z-bhu#I~ENiui6oy)69A`wpWZHMS)x zJ1*k$fyQebP=t14L0a6Y=}6Y|;k<$n1x*$4voUj9P&RHj27Sb4u$?9N>1ps>Irkw9 z8i=pKzB4)2m%azn=^3RBA;&>(0o^0ap$=$+A;5wPq04{7oddr>*@DBmvy8sJcvp}i zl^LN?+3-V6sG4YHBl0MV{1#ywcR|INvD@)!5k#-(4N)!$>2B7;D6Yqqqb+^Hi-842(g^87eZ1cV^3|RISqcXgr@#TB%x}li!i9bb{>KU zph%Y9qcm;!+1o)=Bej!xuVnDd5}E;c5CvIr-HU{=Q#wiAeOd{!H`x^yaW&M>t zIL|2PCaW(akfPAZC(55LKGC01FQ6wIQt)L&5C--F=#PSLJbNo6g?XXNCCi~ST_n-B zo=Z7 zUQzfK&^-%twmucNuA9Q1FVP6Vp|0j^{e67de-Ud`=TruI%)*?le~2%es;aCuK%F#} z+4@Y}P^3&T7|ywbDCn|A3gB#gHm*x7_zbXxB{*m6bM9{vDEwgWnp|b;A1gk!Qw?7p z1UgEXLoGAw`A}PB-0NpJ|7l)XtnM$Ct$z+3`y!MnNQL`!^xDqCN!IBGI-7#^E= z4}3=n4QK1CXtE9hw3t})7r6avGYC?{+4@Gp2UxRNh5{B3 zoN2@PlK zJBfCTQLvrW;O}Tnv21-ee3xC>IRO5(uf|S8-~|yPzUE*x1pX@ozmtg5NHxmW397cP zMj1O%Rn|rz#gLOvl!aY7zF3BCbB95gZo{DiE-s>s0=s{qL)ed3E7ArXB3u+{iHxvn{UH?i^U3z!sOT~ z(`B#e5ZsSx7SI}_9)&4!qa$(e3vj+ch`gn0)DFZ`hQ4tW<9-e6BUoi) z9~-PH>~!!-q+xGyty-8Kd3~yovlmT)T5B9X8s4rDSK(7Tm;e0$h7javi60GrXT(*; zSUgn@lK@`OkULw2nTgjh1o|2I_BEh4O)NgAIN`dXuu@_grbbw^5ByjO4JD$&Dv6gG z+ok3*_-(C``vX{0HF4-Fd|{LB6^K(L4jB);kj0NR)e?7NITLHDfY;R;*=eK3V_}WN z{&O)Q2P8V-)LUyf!8U&GS9E!6CfjPsr}Z4^C^RZaG~H9!Ei=B1A!mDD23kQTIJ(ov zjWh~-s4A!czk8Zh5KSF9`9z7)MZaA1E2=Z5Ktl>o`9Jm@(kT5=_=9KpcBIi;p!djf z9T0`icxodfiNF&GKMqFHWAf6oo|sGE6~XX{NX5B6khzf)%a8Fl-Vm~u=nT=*B&<*O zkV*V}Xy^GViRS_pXiQ1`Li{hMWv^x~+!tF6N#$bvHY_us8@&bh&6>$1{!83Ps}PF^ z;QTcq3YDr|IEi11JNPcLz$LKXeYs4-SE6c9Rx@nwlb8g-A$`qh_*%m5o)~ULtfm80 zBFNFkY53QK(HVAzPXe^mP^RJQNmGJ^(U`o`4=BgPqB+M2bzKT?B=wuFG}FNsl+bY6 zyP33g85Z`FowvY0&>9)_oc3-d-I$5@(vjv%@b7&!GVR??JvY|iXuJ>1zK~wA(^O<( zf{1+SmYRwz4MQ#FuWCla%_(>vEE2CY^kubmpR8F8UR90;^L(iV`AbQwN6r zC@SM=TLx)p1n3yDy#Pd^WX~^DYt4f5auXHH9P;`UPooNWkeeX*#8<=(Mkz}51m!|> z9D*BK#2pUblT4FEW#haEJ9lUNPvPxHIBZMEU)*XcDi`-}Cxy!aWm=e8O-1Q(K~3b~ zt7rn$%EB}fP*fpyU3oR2)gNf6#ynV7lo8vZwZWaCDIha6<-xL|im?&Ns^nb-wBEur z3{aFAOPg;wOnZP1Sa=y0m={%w*}p|i3;zi8i^j-nMO9*#<;ZLQhPyazhB>~#D5@H} zIA3<)qTrsO8IQpgRf~)K3s+Q!b3H=z2vv1LV+%#q;~K96R|!r-3q>{J((2-h z(O}P&;54#O^jKV{2}mLfz+NrEsX8mF8CM6-Mr;AwRf1DqFUpGhJs8)219r9q@0N@t zSUc`w2=0Fy?4jmdr34(k23{xbMiEj^*!KuJ4jDelzfMQ^>c-h=;b(QQdL?*FW%xfk z?hGcoL`Se*zTB_F1lX^aFlM*PV)@|XNh6b6n@%uaKOu6R!i#}kv2fH8T-_ic#*NS5 zp)3;b18ukP{x^UdCfqoyuKpJ2w1r0pB5oQbynIU4)whBE(m3Eg1`UcD$4$i)iYWC1 z2CZ=vf3$ye27fYc?qx)MC9v8h_YA&Evj%2L5{o?4uHV5nei5)FSQ<-cu=#f}JYCYqUk&wv2m= zwvk>3`>O<>jhXzSR&gPT2w$l)2tSVEk3K91vD+rDHnvoWN?`Rg*JX+kz@oNs6R`V3 zbcCRn7I7f_j$$IPs9lB&AjD|FdI%K?! z={h#H5BzgeV+3qQzoV#ATubUTo`drZLOQRi49lXwdouLVWeg=!X?Q9Gzk3P}bup z@ob6(m%j*I)F=L*s;Xzv1oBqqC59jMnv0%^{S<9zj;;PcLoH0b=Avg~%Pvu4WmAD> zYRtXnqP}q(KSt!Ng!4v1`uQ2$YcA>+cfSy^u^a635}dxIR@6W4LI6E~u&bKOp%vO+ zRx~iM>sFP-Y(Jvv!y&`Fg6lupt5q~8Fw0L>Bjv!WmC(?xyQ0CR$0Pr&qEy@xybEdA zuhP!KUP$*tN?-4(G&$e}B{cL#;G$vf>JC+zE&yLm8csiCM{Y&(W8rXj62^qM&fWph z5iO*=QC#Q^UAkOZya>@8ho8tRl6jY;^|d;mAWACQJ0k~Mi%l%MeW8Z0)T*e;Dz zB93C3#!o*7JL9V5`pJ9MBOS-MERtxsSJAYJ_a3R$UR}X^k_oQg(#KUZil&?W7yOZ2a7B17V^xF*`WfRtIM_n5CbCpr6`oQk z6-9L@T5AvO8;s?RoR+6UFq=eW$@6v^ zj4!$_;$A@I$9z55I~L~#=nWBFPs=`m z@V|gU0EfIk&s7!O7V&G*0Hz?71IpCcPIFa7cSL+}O*Jmq6s)zyxsiHT#5Y^1%nt+` zu6Yugq4z}m0!oW8J{4f515q5~C+Bdwo31 zRdip(Z9W6RS->kL1l$yTAmaWXW9I>0Me+UpoxRDO+-wq3AOun_9RcZ0igb}KMFa(; zO7BfjFd!fzU69_SBZw45Y0^Z*0{lP_Q4z7BD2Sp+_5GeR<=zDNKX0CAcW>tVnZD)h zoY~!q7$_HaAO?QOngZLRH%02--H>PyV)1MM8>6>G>MsMZ*VTg9I2*v$=xveuA(_LS zA@~BOi3$`w-fv zA)PHk*UfnAVV(X@(0&W)Y!dq1jG>rA$MO9?;-P;mDu2o5a-^HuEr1#pKzK>gxRv?# zRkFS8cT=xiMh)viY?cjRgIT(%71|<&ZV(4#1K47Ya#L3wLkbfh&d3I^T^jACesKf9 zYKWUHpbj!NOg%SsF+H|&2;%W<09&RpZfgGWXrT)b|H=liX&URMHlK$S0zcvTKP=%p z6WgY7ZtAa7urn2hSkVHi9oRU{;ihg`j6ybs_(V2XrBz7;v7Y$xFx2%ghLZ2RZ$PrW0q9Ov5}hBEwO5q zJ_GdvFu*{LWCJwKP0dA5MomEYYoyr&S(lorbT@T`AK9!2vCUGd1K3Utx~XTXqYFQU z_>%=}<-^J@*-*{rrY_upmbnEs`GTooajIt4l_S|wE#Rj1pM&%t1Y4i@ti=pZpH0<* zZtC??s8)Nh!~gH}*;Xy=roNtx%%^}|{ePzKV`H_5TVf4N7H<2!;Lq4R?p0_0+Vk@d zxap-aGEW28;wtzXCXVA{bG4Y8Rpj_h#;bEzZ86++iWF2ua|h)9`8 zk8*#!h#uws6eCVD@^h@CBLDaUNk%$XFc~wF#*4kkYs>I{pvcdkqer>RKaaDH=M&yObEW4H;!-fC!&0o= zCs)Biotcp9(q$T+#Xp%jlVftCSK@xhPJqSz3yPLtJ zURMKMJ0a`~iMYwgOwW4b6xK9#+aMR{Zi&pL$5=GeD;aq_$KE zDW-Vws8&KTSD*{XiU~`MjKa(ZOVrxus8Pnefbtp8iOQUght^6ZNSy3NMFiI(DXhQ~ zNH3kRtTmEv4Xsl){RD1_Gs`60sfQhM7_m{pPDdygbE>%4!PrL5ee!(t}%obA(0Nb6KSh4#z%GP388;Tq(kmx+CzDiI03@s zkVuEzskAdo)g9n+2x~(k9df7B7Q`xBWDkUcVImH>FVk+6QZc`VaNdd$<=?>G@|Bkd z7Z7gcn~=nxrlwJ|xN(Hg;>vPC~I1^Rbhjbl3ZkV-y7mdt02=-n^6putvE@b?*N#9*Y{Dlt+ zVc{-UwN>Y*UlQhER<9@otu*P}8f>#D{nvyTKaPNU&>pwC-GlY{>9-Oya1+P{?gwZD zfwbc(_oF&L{a&IHOh0C3LVw*dVTtki>GFeT8tHr99f0;4P@kW!B)kCQPn<;XIg-K( z%;%>+6Sj3i&VNI5P=s)u&rg3PJb`z0id@hNXVFz*qxk%EHQ_UOt3_1+k6XwVH2lD$ zrzkUT=K2%IEk8ur5BLy@!UtYiK0n2YSh@wLPnTe~j}wXXU%cZ{WB6$mpfi-8&P)MX z`8Q&f9FYV6zKW-Fl5-{@jK0F*r_WLNw|fuef@cuRCT(o}Vf9Z&lg&a-O34mS9%Nlo+RpH zO}`Y+Z}3oPbp+;qa++`+7_%o=#6LK7(m!MN=NS4F5*`h8Dn%m&Z@x5nDd<3s#_yn= zmm_$Kg~|}b8AQEZ6ceaFi2frHA%_rr+(KNfqW!u%V-Ceos!q{h9buo?L4@L zGv+W4HRdbYwWl-YV~-LnglC1IH+*amtgJd-t5O&-ezBHU5JjsVERRcozawU)`044q zK&P4D`E7yp%U>Hz%NA6Ju$KuoC7RxiFKKg zy*(;aDnNu_qYkqGkhiW2p2 zr4nK4)(m8 z7_IFS%<%?1vCl#rO>wsUhwRN4@NQ0aoS6t+WE8P8BtMv=#&?dh3DQ9;?}aS*F-iJ5 zl*3=ZyN#^O7x1QU^Eu~1|7l}f1_`p#D^IJ`W$S zs+sX1Hcud-ssIH)>dBd!FW?pW%W)2(JS`!2uxW)=plRf-6nsn)(kLr`O!YHgz}uV) zbwj{x$V;;#<_ma7A^SWM%@^<*C-|Jt5qcP5M@=OA1w8)`j`JndpP~F7QuP<`ChW#d z0@TPG*srm;-{T+q1-$O)jSC1U2&I@+%@^>Nl=C?cBeVf2)QhV7bI|=wpTW_UKT^h4 zC&=AxWb*~Qzi*fpUvfuCVz6o`iu!`R2Td@gFR@IXdh`_rDO=ZkkfdL3t>o z>M!6O{@mfX&7nMDRr3YBj3I--)F)~Zgs{oc~O^J^) z`vp9AyZXf4PC)w%82SQUy?528!p=ZCM>6*@e*rHa23D>h=vpY2`2yYvTzaU+@wahe z$D&S5_6vCQ&ODM!L#jwJCu+ZdH@2;c-3-#>A=!KZuPbIAQtW<^Mi^P0+w2$cT4NSI zF*BjhHB9IWcx8&H55#SPwA0AyL}tH$_xxy>B(QBihknK|p)cTV!@2k}f^U$-J7Lx@ z;GM@UTMnE&^I{3p?HBOAh2=sg-15+?7$)=uJP&(UGXy_rBt9{RzJQl-N_E>{=p%?x zO=!M=Hxs@f>gSn|=33c)0dGMDjw|dPyC8APsof|13wTtv&=>INBygWE;GM)Zz+9$0 zO0>i1bv|d*X2j3(1-!L**oUqcCG6gsmigxUd2!Tofd^Hb>qbaD05MKM7C7NS-4zu$#nOV|e)yOJA}$Es^Pl#0~;8&V>j;?m~~c)U7ZDG5_L6G=?K;+{!@g*hNC z2JRdDnuDO%O|aPUIXd>TSdItg#3qF9v1M?Vh+&rbZE`16+&Mr4`S#5PxUFvDc?hacRu01M{}!_HufiPlJ2iO>Eee%9qOA|G<20 zxsREvyAkcY%uVzv5SN#^>tG@xO??&j56(*Cmb!^?PY{=fx%^-rwA|;M-oT0Ambi)4 zo~HdJg}H`c9?!kKAE}sU{+f0 z0&^|@M85Og#NDT;opUj_56q|8xQvr%mw9et)d#73Ihp$f%++jM^Pf?^xo+Z5{fJ9q zE&(H2X;{>L!1>m{)(n?yHz`kZbuM+|6A2a7fz=_DPu}%Uz{eBkCeD<~*m2|WSt?Ln zK=cez)05%NaT6ji?}5g&-S~K>UIsDCP-?`bez{o~Pj-{?S60&u-S`}gZUwg8picc| zTZALsq+l`i%&8k6$JCb~zO__|+hfoq=SAYMhSYSijNF1OaWzs^r4zn0Rm?btzBnBy z{hT=$#t>VOFs`QK(f|ENRP{SKFvYO<3QVdPKR@SNKHNc~lic_UrNN4}SUpXV@=?$I zArgw?#J4f}RlK)LxbX#uaYtb_(J*2ffxWw8>|y+-=;)wn#7IWh0NY|wK1zE31#4-1 z-pE&0o07Vm^KoE5TlCyPWXR5gM^52dG*ujr#~b7FM!r86muQ@M-FQKIeTJHq_17L@!V?SSwtL7k#i!l)0+zAYazE<)NsJ{N>MK zyo~e`sJY0N(%)SF3Gu!|u<1k%U`|7M_ivE+0*=Z;xuUw+fUBIS!0-oHHQLQKr=hn<%>KCo0^DVm}hkgOokT zTMEJ{Hx2851*JDdY{o#SuW&qNlrswL5{;#4=U)BW^y=Sjz_a+L7QJVg66K*h*pQS) zxhMqG>Irtf#@?w__ytWUS-durI1?>9){`JT2*mZ(`;FaC0m*U&ced43~U|_@y zIZYiWoL`asA6VRCiKwy}ayr`|V`v`U4~~TuQ7R-qm}3*noq~`avT}LIg1^nlccnb! zG!R*tA*b>O(FCBMu`xEn8dkQw8FD(AjA_8or&)$?n0cjcG4znrAB%j>VU+nzfZ`{z zmN-*0%hrlghi08FKohuVA$?lonPsLr%X`^>NC*pbQ|D zD{O|G3N2LXL?~0OnnMpcm48%l+*MH4hg3b}Gz9}vROSOv4qMd>ImtYZ^9@2TkV54Z z)X#Rvsly|}xkXZ(sZRXqNQ~S~i>?!gTQ-E|H;PaPj2?120$Zyhq{plr8bs;|Adu_PZn4DpcD*&Bk7oO1yF zAc&e>jT!JE)blOel>LI!3>{vPIne7^R6B7>4A~*4KtXjgUJ6hJ1BQm2-oPC)MQ94C z70KMkJmhrhMc3(upx&WaX2@yXlWI(99HdDhIlUZ)8{ZSr=U-C0^KwXQN#;cDkW)*V zQG;{%K1hc`vKeyPi-%-LJ_qTdk=41)4mmvti-4GjcppADU~{Mj2XUWWB1c2mIaI5H zkV+X@oq+6+Q_>K81Pen>k3w&1n9z_@RYy2o5ZsR>-U+h~IlVexI4?q@ckzblcF5^M zM;vhIxYf`%7$!92w7-GR*@xgyjl?JB(2!H&C{=?Wp+zdIjLTTxLQ*b|B=loRq09{=DbWse@zlCU3J@PQF&2*jc(<%_8U(E3@I#c;) z`{|;Mfu;cc3ec}Y9QMc+T)s1L`S!=djpE<^I=Fvug%9wrwd?R}9bNUmTaRD#ufO*i ztX7b~zs_yKzj?OeU;edxBYrK8N0whf2++TNdP7=ZGljL-fnW5m|I9o1b(F%ANTq-M zWQ=)aar((b@yJ5;lg+)7#^!q0L8QQ&ef&}s^;7SL)ft+vtX16m!Y z)j3*SqSY;0MZ;7omqM!|Sk)>F<9IrfW19;5NG5*Y5N$@nLLU=diIjkEgtmgpRX~i{ zf{fIt0T>K|NVg^ft3uC#A2&t$H!-XhpPLO*KMlC~t6(%Nd2S0-?*|a8#T*#BxA4ow zT?bpQ2x~nX*9ZKcY{QcO*Aj8*e?OW3{^F#L#At=T0{walgFybq*hBnv>E8<&w(&Qm zU!P)N#@~j1O*@HSo$1#o46gY5(67@)kiand^#%q={F(G?4JA5>eyztKhkq9RdJi{C z{>Ajmp9ysh{rU|<7XHojYsWf-?WA9AG3?+!NWb33fPw!g{d%AR)Gz5*N!-l)zo%ax z;5OX7K>np1{ig9{u8byEg^BXR>}feCiRg z2J7a>g;tlR3_|@9E05yzIpq`1WB3o{YC@kjLcKSNx&tsNIl%YKXveq2{6~FGk%1Uh zScO^ffLmkXy@g_WE>_MaQ4_O5d*Q}wrOp!N)LH6;dp1!ic0%wvu?O|)04Fik>m^;U zo_jI*7^!W;;;zTaKZAaS)$7q_!ubJVXDJc<^;8?|Rsp2t{}z%*akyR&AjqBBKxbb| z)$1j$mv82KnYv=7imHkQL6^e96{D!$86>1DR=*J5D)s+Uv9;n5ZqE*PQsoNm^)Dhp z(+Q8&TIoTKCPjc}X|V#rV&g~`Gz0^2Zkd^&F3+}bf~fW*Jn4TY&! zl7t*R=y&~uj3ao11~i-^ouOFVauA&yw9~qc(@taRGpSRsylU0tj*ky?D3Ph6W5?nA z3peX{;>k&^uz#%sshvR)6~ zmh*=2wt|=A66qDaRNhwdit@IySDv?3ytkOE>h0uhHIMek7=Lx|1aE726Pc^&4d88U zFO$RTc$0Zs*PF}Rdfp1&*7s^M_o&yHw+*~Dylv=p@SevuekGhyZmR&bWz#v&IZg|-oop7r2xA@*`!KrcM0~t}T58Ex*c~E<)IkeJ zJhK_Y*Adl^U}mlpPm$ykvIine6BFQkkoCl6?427$=NF+g5ow*^2^x!JeGwx6mG%g0 zByx?U|EG)ckAQznJn%7MJHEQ9IE~7dLiWWGaT`HC9PVz^DwLvbUXoe~xdbJ}QRU#K zNJ%awKa|dQvCMxU3A%6B*)|ENkm9{=soVmJRy=3`zdA&^vT5J zMg)~kF3#skk?`#^cta?(^)?NzL+nwiU^^klCE<(msKN)(KPD!PilOAEg*^2po*jYw zJ)~bq&d)NJvWt+>Gkh$&IGkg#a3ctn12esZY%p9UQ3QHfVz`uw**_Sy9Vle8E-IZy z&|BMdxW!_b87gGl{}j_7`be9OVm`#tAx8)q`>d+XtI!u`ONW_JLY{AonxabEpzq6; z4(ByS$l?hqoiotSnRFagl<`6~(M7oq=|7W%6U#ZgEaXx6C@BXxa`ELm-6~q1BIK7% zlw29o!z5FKII;Bji<}{3Z#d*A_7jjgo7lQdnVBu*vx8L<&q1GHlF$sjHb~ABa_}vc z&JyVBvZce!A|d}grPA3C{j+T8&;w3#nULj*ss8&3`ju?yFtbv~b1(*|%+av;b72YZ zV|toOt`&0YW|a;;*ymIsh7K5AW@a`Bne>`UrzP|b+0vme@5)U=-U=vYIP|gE(qZOp zA>Bi2Us(WsRkm~{?L@ua6Y@GP-*jnsANmKxs6C(My+XFz=Cb?^r0+@QJwMm%xBZU% zNXUu%9OqvIN6GM-2s$4*3i@2g)p$xE9Y9Hf>~621So-{i{7%TBI5AP%)d$pqKq^N# z^P7-=TvB!J4Sg6fR2a>ipN2EeH6ag0srH=)eF-tPeZ#^3gj^4o4rTZ*phE;^FWK2I z(L#P#zO@Y3bhOYpKsRiPMNGGGvN~;!67R}8`|w(RL`lK`XGtt7?fXYbb!E|~RFwL_ z+ffuQch)FQEN4*Am7^b2^iYtK?vsHNI|$BQS;Cc5TdEo?2f6D$Y3mwrl!~tWHd1A9 z68Po&WDp*umMe?kEJ&4(3gF_7<=!>m3>vtyFK*e1t^~3%(cJvm>)W6e`k<#PZ}(Dr zM>mi|iO$}u4EA&7^|w^7P6f1>!0f%+3Xg8e!LIxVrXzL#Hb5WVD@6vMb!F;2mEyO6 zF5fG~USp8rC|8cby$hunh0AFQmb=Qx;8<7wUSFkH7Eo;hvzM{nQe2f@a^;Ji)c*by zpx*aNk-^EXYzNl_Wjzkitb3){6c;c#!j&Eyy5{l^y0G#Ox<>L3x|Z?}y0-HV zG6afHVs(qoLsM4sNx2gTgold&7Ca=4Yee1D;rR4Kb)Ov3+i`{?c&w4Mb-_^|_Q{76 z9cK=-*Nra9P<*y7qH6eZw7~VFB0_dRKX@;urZ30oIKj+W=)VwC6%kZAxj3KNz63n8 z>fC`AK$W?Of_^#ar(lsqJ>*NKc6$E%NobZweW`^G3a2Cj1e?jK3Gblco}*QV9^|H~ z8JiyGIJtY_cU0ghF9-ffn2(XCK>OI@unwIPqy(Oh@AD!)Y=fM}QohySLb+IuJBy|Z zbc%_pjc3InEi|$d_dP}I9P{!eDMhH5&U>n6vvdt#)0j?D)z{O4<0v7pxwFRt=#zC zEP-;U7>Ob1gvVkY0AF$VD+q6%G4lj+&U2~~<`j!J;OlCY7L3PTwKoK6>x9a9(F3J& z9;sfy;w~gysZS&v$IU3095MV@+-0OzOfQC7bV(XTCGjvIl+ZPL6$#PrBcy3P+{V+* zTSE7!ric?!9$oE3{CWu88{uD#o4kl;k77@7a_`xJ5yphUfjgjPiNY9D7}j8fa4G zbP-O%wdj5SsNGu}f&Mu$J1BbnqP-CPRuYvR`%&HR0blp_Koa%K4}^3(={(?g?5|Xv z^nxG3<&;OHy@V>}K8^B<#8KYj1l;Q5Uc_MF6(i4$w1DG@Ln^4P4%Gds{Ai5umh{XS==kyJI|yh1?kUgwcG zN>mybh_W%8!%7tMCjR*t%rS~sJ-kF!e@D~(h~PhrBx;A3=;ucOi%lNsn4cSBT6Ta4$W)0gwyH=}aXk>cc@4znRX zS81;i4g&AS0Ni0z%DWhQqDYvFogr7%#Aj#>(3>cQldED1jVR&9KL`G)mXrx4Dy|ns zpkIO*$BV^%TCU0}-6)PwCn2K-dj4C;Kbja$WJUNZb3H2O z4#UZeV&B0k0tIu|AVDXRrUT?^EZ@e|Y)(8KQb8-HJk!6Mlj|{g?X)UIH7K>Mn%wab zXU;LC5>1T|lU&Q|^$VIVd8#LQJKf8JS*KPw+FqCdHbPvk++9D?+V5L$Sc6x!(Lt9e(ZJQ?I+#@-hS$>=Iv+R`@B8k zozdItygllr{7LB?^(yoBnD>O<4&&|ryxDrYmAA*e<9hoKw$+k7k(~E0`Vk|NEAfw5 zk=%xVq>4DIOSR+-5l4+(Ejho4qgJk#Tu8)G^HxiKK*Xu&#YCKnUR=ac^qAZobIPr> z?UXa}Ds4OG%+3FI$(hdEt~m>0oBPA5@cZC^+ll8j%mH^X1;>Ip;7-xt`8^M~KcLtH zt|eTL8AziP7WWTIfPM*L>;cE=ngebgUN$D0gL%Tlum{|cp_rwCh++VwVI=>J1nmL0 z>=TuZmO*f~nRes|Q_M^uXT$MKOmFDJEb}ZexyXD?c~{5-W$}d{ zXs=nFVmP?jDCT$L$T4_u9PvM=G)htQ zdJ9O|ANl(%ydegme;Gwx#8kuskryAttuPWw#KI9pd5YbUEBQfU`KiKr2m!?*SImke zcWiCS*V>ein!fP7@;E=!1)&!r*b4%;ZQ;*mYi&Zf#_bxDr>XZOvZC#1-ahWV&f7NL zF5Y(VPVn|=?=o*YdO3o`cl1i}wv*RXZ~O7Kvo}?5H}JNL_le$Kq;1}co|lidmAn@D zX5Ye|2ZBJ+x_ zjZPB1*yJeFZx@^>raXe_A+G z0mY(*f_{W&lCTg*)SE(1!b^xqD|au5n`OI@&%LCeHWuRSs4<+RQq(?p^tuk_Xi>;u zf?h?EPWoRM#!qc0@>5l#DLm;%nCz*a2zg;PoVW;BO0X*S?V2d|Q6VS5CqNCm$E2eY z>+{Tj?#>BO3HuhO^c;+a)Gvhm>lKydF9vtgN{_(-j^1(#PyZKtV(Pad=F4=`%NK== z+Jg6Ery=9H)F_L%sNBoniTn$xs3cM^Ulz6M;Km0*O$aAa;nd52iJSkZUhb7uRK1Kb z&mtK2r>ajQ{dJ1WtFT^<#267~GgHVq1LS{E+J9p``Di$h->cW$BZ?KKKFy zdU?8mbT7yIWVO?H7doQ7Z6wvpTwvA9d3>@L?%wtQ`jQ~}5uOS6auJ_wiNOid?%WIF zUM}yG^>AS!s2~lfa7x_E)EK&#F}U|5ZqX>D2067c?1%rJE zR>kICuIrPz3aEyiY|>GQaW6mWTc4sLs$OpFliNzGEZ;G>>SgLJr|`wvNItc>FJ@JK z)5~3aa>8Yd{}Fze8s!KVm3z6RFaK8RWfG~EyZf%q_a4GrywdqLdGt9-IMPNoC}&{irX?qzBW-OF$KWb{J3 zTN@#T2>J%J?&ZgQ`N`WIP2sASH~VBO9IzD7f?!o_?&WuUa>;siEDtj2sKmIJxBE)w z!}LN*iI3&oKKWZ=JWPs!g$7r>Ougmgo{5Wfd|DUpQgLm;rVWebqDOh33MXxpyo8By z;&VhjgT*~hr7q3Vn1qBzkS-(mhLOb2q^qdoWSQ4+HONuGaq?o}sKQw&j6O+T_yjFp z8d}XPy4Zr`)Bs1?23ZILqQ4>4Hek9~j`QK0)U-jdS0D?ICW)l=jin2bh#mlvZ$8sD z%i}nOQcSS`t7VkLKU7M#h11@VujEwndr;oDYGfu%;I!?s`nNjr7m&UQ$sXq6rR|n| zFh`Tq{s+=6D|^4;wmfY}tWyHnM*c7!ExAwj#dtm;qCi2%c>s$lM&B995ky~0%>JP zCfg_N3)uwYR4ng?bRZ-@fSd8OuVky^c$SJ{e+}t;NIr$Zvb6J(&Zcyri<^){AyY9g z@dD(5u{WuEB5zbhP8a0k`xGLIf-7fO)#WLjhdODO<=IaZ(h%z7S&7KhW~l9Tx$+mC zNP$sm)r;?l0x2?pct_O;9d*M{DYw5 z!?BBNU^hR7@b5^YBR~~bPR4GUmJ1$!T=~Q`5({Sq=w>7>4<jT@?k zNTHCBm)79Jht$9i187MQ?V_Rz?aLfaE5~TH|iq@tvo_Vp7J&HJWS-s;4Ex3d`g&Az$yN3;QCdS1lP2vT`*B!dncOJknwNAR zlm=DPl3|5qa*L2T;qu^?eG*iEOJ*-DdWh;TIZ^^L2GWio` z&&<><+X>V#OJ*-D__`KIi*?<4j4 z@40Z_%}Ss|FfZay7zuG(~P>!YdWX(MQ3U;Ryf@(m zkDHgyl~>8UFOyIdF&gsA7Ji4)Voy=r{yb%H#O*-9GRW(*B9VnKPciNX+2~EdS&0vz ze@x6CO2O+hFVcxyRPHdFGk&9)e0!Ui1_~52FjZOgKK8XBSso z$iQ^WU_f!jSO60Zr1eTd_CJfNP$I8G+hBB^NZ%$XbzLF-|kbJc6($)`&KknH21BS@kvM6_8(Wek8MAr zCu*_@iEN{UoC0VdW7{8s*)2Xn@F^pSNYagMALt4FBD8<3Uh;F~tn^7Tg@#AGQaA}> z;iLuWVj6I3+c(FvoY6?NJeV4m<9v*5p98YB?P>TyL^lR$Z2OVue2OWCV>ODB$VsI% zw*B$?D&g5s7FgBT_BZS6$Xg+856RlLKOcvORuC$VV|Cif#-5v`!g6eW@+uwd#rBWDbnXH7d?LC|}IhBUcA2UqIw*Pw_-djMq^ny0P z>c+O`9md-Bli$NTw84luSS_-!we8m=l6{8o-K5bGpo(j4`!6;EI05l&Ho(~SVkCg8 z5dX6P?b0FJeoi%^8aPi`SiM+OtK>09gUZm__G6!Oow3wi4S=?_ICl}PwAl{Z{%hQq zu%$d0)M!gm#)X+aLDy-AEw-RV)-LOc)N^{-?)vnyrBLyAQ6*VQl*cm+ID@2!5`O!!4?s zk4f0}zn0TG{$^17EXn7XFcP-?^OrRF6{tTfY0qcjMSyMZ)zU?XE{~xPETN{*q_OQ! zt<_`&Q1vVsR#;=(-}+LMPlM`j$*{s2+upYe1K_m(ybNlwC9@aS*!JylO=J9Bpoi|p zL$>`-`}Aq%J5X0F8CFJs9a+t!bc^STd}z#q9)%1^^qmR3Ttfp?>Fe&&x5*V$?SzSwtdu# z8c(Q*N1w3VwHvTu4cmV26kUXBpc-2;tguYNwqHI`x9l^ZhFLPKuuQ_XFF8h&(?PAY zWcI=`4%_~_!@3CX13hv#?pWKt>xj7e1)vNfq_tY1Vg0clLC zHkcz#F~wo5j#3iUsT9Vfy0%3n{4k$FD&AqNN!72FV#F^1FI(7}RIyRiiB&O24GSLus<_sqihlt>5r}280mh{A zcLMMz#FiGIT{>h^CI5!OSn8g>0LBtTyQrv7D-P#F!kSd{VWiIqUkG%)#luK5T)GtV z2-sRW2c|14ya6Ja<^s(Dj%nt7_>AwMjtuvzi&VjGjHNJpJd zOGN5mBl0=HnpC@EHS{ciDHaN)9)`oDdVILH8CL_{dmmi&mmMxGH(Bq_XTbkz<8X^o zKB3{#&1pjQOGI@Hf?`os<#S9J36tuhPxJv+3RGQ7QenfJ!VH&AZ>baR0JPuTcxbq^ zZ(g17L{M`r8CFJC!&yrzU(A{{*q-t0~x7T-|u2?dxu*RgS_o6xf)qwqn<*wbpm{iG6>D()VYGldmg*7JC z7sYkL-GC0g8xIYa{#{qM!Zc7zEE!fSj!rds&D~a*z=&SSu%TJ zjY$=GSQj>-ChR{fckKpj&tSOpQiM*p8mPvW3@fZLsg9S_)p`chFiVCN)|gbg{-<-F z4r-+(vlrHwR1f~C@%Moqxf>6eR1&W+ptIj4Kw*dKeM~CKPnlFyMmDKvY7nNZ7Y7`U!zoEXVm6`>GdY zYhRIan3_T{MX}l_I~KP;mBQFpgCAE3KMJL(RgHbs1J)Nu?hdJMNY?h% zzFIo%36LgR+1OVvqE)SZwGv((Ld0gQ-nFc;uTFK-@-axKLbA56UQg2UWk`RAWNlyl zifaZZ9#;of0xYVMJY5{_=-==R0X3^A38{QY*7nt*bwbHaAhit1+P-=>sO3J828Cp8 zUyb}oO^*<-K$>A?V_yxS?lJaNT5iFJ*amK&VO5uF`|8{pmC9+T-)AL^ef2N~Ln$M1 zi}bptw$>fp=W~3mmh?1e1*~rDE8bzOeU*Yq>BNYJSUqN8YhM)^g5CTXgbyT*jsR6$ zYhTSj1K=fyGqVB4zIqUoRm2*ITP#4kbjZHyfE%IO)IFa9_>LgjMa2k{m&(xES2Hlp zy8_`ifqL}}&MD9;G-NeChc-V7gDPW5iX5`9j^xzCK8*l$w2)0sgyFESl3*gUIW`jL zy!+r>VqI)wUtN1q8)jP&X}68Y=LBnC{k%~Z<_iG7StwMPFdX(($AHHDa0KSVqFOF1 zuFGMDta41#tz8v-BO8ZXR5hO&vWhpyMK@4GEy?GYFcS9F*d6)+n+9ryC8@CCO=0Y- zxo|;o8FvHy>~1_{U#&cWH*TT3#Lu9vSu(7!#=gpx7iUc(6EFy$AB$>=u)-Sqs^Jiw zW;IaFEt$Qr#=g3lPuHzC(C6;PL-y4exTCoUvq7!2WLRO1eKq`3O}-E6h$X`cYwW8W zTXj=i0Cn4v*$ZpztNO3#R>=LR;}pfBTEXHW`>JWWE<$ZkEi4&USYuzcZ?7Am52)uY z8CFpjufR}(jD`~#q$-;Iatt4j~)R=5P}jwQniYwW8h=IAt2 z8o>31<*wbp*jFPVa&Ohak2aRfURYyawP>K*YY@<}cjKWUt1T~Uav`YomJBPbv9Ast z)8s)=CoLJ)vc|p=%XDEcgNnd)HCw;xmNoX(r}K1sWdJR8Hy*ODW+tgKNHaiThw6Ro zD{35NUr`y^zM@IFPBc|6&(pA%W74~LvACqfq<8gXLHhq0FP*pDz0$nx;XT6Jo?d(2 z_VR}CwzoHlw|%^2yzT4l<843hJZ}eicX&J4D^!Tm9qK*8+hJaJ-VXOB@^*x`gtsHT zcX<1PcYwF!ypy~g?_K2W1kaC|iZSUEy%gTQ?3L#2WUn=Er+Qs@JKYzQIb)@Wr72TM^$y}e8%%A-D2~$)R^I}${AMGP*nnS7`a^g)Bx8w)rH3G+ zNld4Q93nvW7WNzX?@Du;>X@J~}&>R2hArZi@}E_hC3I?Y|nSR-P| z!JGbNqU&Vr7g1CLXSR4@KjsgY618Ku!RrHWbOHXGq{jw1BitjwEK?u5OV%@tf9O|fv*r}hta zD--!PY>!Uy!M9}^T;CPnS^(yqBzoYt;&Mzn3T{iHaP_QIuv58o!sE|ldSURnax`fo z@6=NGJwfJdfG=o)d<=`AA5MuJt)R@8w-bC$R|E{f;%=dG(=S!-)RRXs>=c|5_a=f$ z&_BUxo{UEe;s2!+;S5FK^b)RM-bZkH4FBUK9KV78Hs+i_wMl6I7K;5=A{8~N`waxe z$0apF&<-hg;06rAzfoeGJJ&z1%o~v3mrr39n9~&X!=hxaZVryUU-s^RZ;Bzgf{=?5 z@-DSxj%Ii|GWenVxrt!4Hk3zA0uCFA!DlKaP*W-Nm>hFJA$@@jwh6`E*oIP^k*x+} z{1>4!O(KFz5m(^}G{{+b5u-G#AZ^Mj=h#pZ@{e-;Wo15p1o;Rds*pY4dkOw3_f1xX z{0YiGq;ezdqGnZ@94LxZewV@VIJBCf<*+d0#I0+ECcY~7Y{kT8gqAjnikPeBUnqPu zW;&sw^`JeTMHe(B$jOyC7NsaCWC2Vq?FC@uJs^(`?_kG*lc9-dBH~|u1R-rxnjz`f zWq9T~SVYJkxPje=a&H2#%_O5`Oefid(e@7^ABA+1WNwDo>oX9$hLAhGb{Tyg&4k=F*;{GXqIvVBbBjn3%g!Asb zfUg!H1w1p=>_N;~umG2r`=IzE7|;w(#3b9^u5;Z2{EJrV5y@cpdi`mSRrF*b*XHv% zMVp%f@h@7b2Oonyqc&`_^b8@-br()+OY=NfS~)7Y*+SNQ(shPgfa}K%z|*>d^MyP! zK@E(~A&5)Q_0P2s&z=NV3t6Ko&VSIhVNpBrC+KY_SIa@@;B`WFST3ATp#5ldn+W%t z-fQo)Mr+}@uEg)~nJ}QyElhG2cO;*>-W5{7dnEFKC}Jq5JZpO~84tT-H3Zi;k~*cS zxOm0X`8udadx$+Ozy(&oNg-c-0KjO7uVw*M-T9pX3jIOINc5ms3vBm2P;MrLVs>27 zaY*$9u;1^4h8GiWiMl)#N&8x2JOhhrSG)6tqj>(QO+(y9S#Uni zDvv?zXaTywg(vg4D+_!BY8Z$KmZF9Ur`o!*^N$Ex2x7gZC^JpP(Y0l%D;v#3&^{2K z8cIFb>7yq%gKJzl?G2m_DBe#1t{6ygPbg@!D{E923i4XviBl}0c5oE5%axV8x(X@- zpqhpF5L3`+t}I{2r=ZpVI$4ODNkIud`Qaj6rsn`mun;ws<9nB`t$0>x%^`I`6-xoE zB8bmtzA?$zf6Msf*Zm!JFzfZ=wBY<7dzl{J~m2ITpqS9sPG8 zMPLX^o%5C4z$eG`!IL^TJklW*B$;#fXqscNcbSNH(W^dsOd{CACl^0~r=`G%Mp!i` zn65GS0z1LIDh5LEQ$E>uG2V4U@UvKrCRo*r9;yg-^~v^_Danb=g|?Vjxy7(9p7$T)>MH^@xLOP9<1(*0_ z#rM@kLp%#@bVw(IGq}Phr=3^VDKQt?VynyV@IYt~j~Ug$^-OF<_yN-RV$Rv|eyFJT z@u1jF9I9V}_#q4B$o(Bq%nyC?6FfUBZa{RNuuXiMtdV0rS>kJ5guKx5k?KGJGF8V3yi=aYNi z*K^lqL7Pvy+Uw}KlwjA&73uoqqluNlxCr?fb{JyBUaUSbuqp{pfDLvjS1c4G7$GnI ztU&Q6=-U*-HlLG$M_GauBIIp6A4I9(Sz*YOuaTM>%S`g0Mo zXeFU4zZ=?tP<(pBWbow(`9cAGM*9ZZ1ruMN_86KOA+HwF=OMQ(9@fXAYQmRgo-P|) z5Ft0h)yyZ*q5#TSNS*dLr8N=q#7PY`0no-m>WtPe8fDrYA-|Ct8U$dJh198-p(7D; zFQ$WWc5?u%&jP6nBVX-&jGu{+P1AH04gx)CaeD=G6!~+6{PPQ)@MTapvXC13H$r}7 z&ha^)gw2a3)VIo>Rmr)LvN;CJxSTaWHMAtxSo*0KAC8o_`(cOe2(h;XRJ+krh`}b2 za!yHIsPO=%TSzqtLn9+){bD++bpYPBkh-QYG$T^J^MZzs0QlZQd|~DDgK9U%mqp6c zc+!uHe;a5loO+?IS3A3p$xV^6OomRlD5!E-NJl~YBBfJRLrnm*w@~QBq{wfO@l8z* z2Q}7`YERikcb`dqc|dAIbs>OF7UI)(SelG?_REjH(U-!Hfu6~Vhb279FN@(_c3kbN zpd#9tYIB;Z(K*doewlPpmoo#@LwA$mJ0r(=!!Hxz%I4Htg71+vPS_sF_-?8R`UJU=~O) zDa%(v#_grdUkU|#3B(jbIlfun)8!ml{i3VB8rn{yhgx5s(iopC<>_eMZ6|?Vy$>FW zt@BwaWziKnpSTXV^}~{_@?p0Ss%*QZjDm&D4ORzyoBPDkS)7!zAl@Xw_#mK@?}3MP zCD-R?DZ65-ILBE9eus_2UCAr8*D`)n%Hk#TF7-LkOZULTc0-Pn5GDJL)N!JohQWhH z)jX7ix*jlIBuZXyt?|l0TigTBUW<-VGS^_;xP8D+xJR7O{i15z-cfQiJdRxRrQo;U zBMw(3tZc)gnxn*zmJmBH>)gqfgERPZl}stT5J*UZTE;0 z>c`mLba}lPCC@Zgg*poSTN@<=^0TYKTT!wprY3W~*FnW~LXFAxP~#4^JdPyiW6&Rv zRbjY_LcmHB%C-)*vE$1J8z&eakSmr6euzah1n`(i4_^jogp*8KK;}yVjWJNs3)+Be zdeML^m*I1G2bctHI_Z>&<6A-FKBWV4P(ir;Fk&OtL3=9{pL}7#ngMw*1<$NCfqod; zS)+#zSbafbylFtzo1hKwe}P7IHr2ORN;Nww*e@XGSJ$R|0Z`>E8P=qn<_iH?^c77u z0oC4;)TcUk@`VK_2jqcBo%?W5FIh4ycP8Hq$dwq+;A$-c^^PTN?%@gV49HzD@)$n~ z^xL~}O zqUEcv>!!K^Do0n-0ND%6c*kft1w)wJUd4b`xf^%*0oCA;XgTS+PPi4Qu9gfdEcwEM zW25DauDV*IK~1$}SYer587<47*5n#cyDXW#u#9hsmP2Q1{1nii?#7izF!({Voc2Fm zEeB4Ecr5BP5LQ_7g#}N5G$)MWpsHFjtguY}6D=2gtnz|9cKiF?8O(Lezqh>rj^4p1%g#P zxdm1g&qEN;VCpj#)c{m24bAan1U%*p6#-DqLN+;Vf6x?#;3iL=!6*RZt$_}`4<2rR zaK!zd-1?xN6fq5v=G%zWa=I{QJo!wlhPDFu$U>pQgyDaC@_(3k!i6~x^wxcFbsD+* z0og~+ZNzSofCh`E=FI)ov%(=K)$TE2PO4XNq9{V|0X0sl!a$oNuoD*7ErKftA?jtK z#z{5%4c8fp(D7Lr3EDcTC>BPLw3BMfc3eH!Nwp8*#z_@}2*yc8;nqp@G2zBZMUMg) zC)NI8_Csj)X87EcUDY$6i|9TYR$)bqB z=@};#|6`q0#VIS}q@tombzh3Lby5}IjB5cBnn{Uq?p%N4q-u8+{vSx2tjyIlPO1TL zd=UQ;dhZi59R2M0|pBh zjh_K_tdlAL|8g~Gf**$D$9=eetdr{0ldjYLUVw2@{gNNw+O`0fm;1mvshZco{9g<3 zFIrhARVsFYkdtc1415~X()^27)=Bl`E=$8nb^Cb?{aBjoK&z0GYM_UA=Jm-^KdPjf z>_JYdLVk4yu0{}-p6hR&R0}Zv)*M87I|@ z^}<;S^sT$`kdtZzrsj)-AU-iv$Vv4?W!ORpzGx(MN>d&iIH|T(Lp?-aT>r3y6<7gq zQq60M1}p%vauz_V44gV!}!F#9W*S z)`Hz_dAsw4qi|9sot&{3jF_iEH5R!eyX2XCwZBk+Pn zXP|*qNsN=~R44|VRL$rLK{4iHwVYzu=Ce+!X&6|dRCi!GNC=fcC2E{hrAD}%%r}rP z5E4qoI;j?|z*jG!33o6|QY?BeW+xV$RNszvRpARjdw_JVDbJE8C)L0CRGmZ}XbnQ~ zjgx9LhSs?9U7+<0#Wzl>eYx~0=0#{zO?-XYGft{AxUb`r)fxa>ETm3*48ch?HBz6^ zJ_YcFh16-!IH_hG&?nF<0B%`GozaYwYS1+eB@e-HAQshd>Qro;RI!-;$YrVqpm`QZ zT^RXlXPs1eFfzw@Z=lav++M*#PO3{~bc@UewKNMEa#H1}uanyj;IM_*kWe+|a>7Y9 zxQA|*??GL%B-hwFsn%myT0{)R9Rn6sTa^lXfZ(JWe@v%R3_t}7sU~3vPO8TvbfKC7 zc+x`Zn!*sARGkj!>J0(#vW57<%Eedh#yFf*tyk-=Uk-GO#lzZ-NjRy7_;kXbg8Cv0 z8FEt1#yuW)!xaExn5k@7yK!=GQu%OJU@{d{5lgB)g`F~RQtcb zG7cxz^?$ToI{;{ARy-_WIH?Z8sNme^gIZ@vPE$2HrwJ$3RoKc*9su>t-DLRA$Z_DL zdT5W1a}9jV@GPwm*0PMlNtJ)GZrLJ0E8UHUoK$~4rxR`t>Y1!$_V$32>aACG^JM~^ zZgKjhZ@9FRiW)TJq#BQjyIkdM06(Eo!YvQ8bj-3^ib>TQyRNa;G|l;M&r)`oqr!Z z6kF#5C)HcS^+C23kv_Xe#IO$J%;2ONJ4R>rGx%HgiKDZClj>nlXOTPt5By+J4Px6@ z6-%8UI14zbKEv~~+$W8|ceHVABZgNWPO6hjG(HmOtb5?uYXK)!4U9x{7H@*zf1fzI z7I0F{ucz^^f&Oz3JZy*LTEI!wp|x(P_>nMpv1Hp7)IBfXFIp#6(jXnD9{8v45r?Zn zE3>mi$zSpKKUZZ0_*d@{Cv?xN@`00TA?~|5&Ia%w-Xjj5b!esYfs-n5M<0*p!2fOI zSW@s=$2zHYW-2@mhw%eg?%(g$NpPPFO`T+A*s3JpwkGD}mpmkDJ zE3PfnC7`wv$u~otaWfO8zEf|ll*P$Q8B>-1VdLbv(t-Sce z1?h1ZBglzG+dAyTf|IIwywBmxOF^qZy0Z9og{3^}Rjo1;t~0`-L@!1r0Vv%PID=!w=J2yu*OMMp^8rU2+*^4 z;~^(ipou2`1r_yzX@#)D8Yk5R%m?Jc764Vwl3|54PO8zFnrs59vn8_^);OuU;4PV) z@bf??-;IZyREO|PK9j3J(Htjr8VD<_aZ(Lfs;hMr)VG!lE39!+t$IV}ejQXCPJ1fN z?1eQ>suC@A5gq{g(A{{*N%htTnrsQGizUMfYn)Wy|B0y{MKCspOKFyfnT4>_rRU+#1MMoy6s+*i<&f)LS{+SE9yj$xi` z9)uRl%1kH5JV`~dFx0G_RKM=U)q|Z>-4Sk_RI?GmIH@SyI;q@!z>SlN-lt%kR9~0y zIYU6s$0F#5byEHDlk2>RfZbT!l}K37FI8^qq`HP6~}4zS&Sb5}N=VI(M$W2~us`V_OXXwGx=CYl2k6u-7MkKfr^C@*%aP2~y1|t?D1ns^J){ZQBh zsixvN0CMfbjY1?4hf_!=NL2;iD5^pkAT+9A`rgHgk*wL$AKw7F-(xEJj_jkR5Ln2 z1?mTh^z5QvlIpVY(S4NHrGoB2~CDp!x>pnq&x4Rf3DI0|)~{ zNhF&gNVUw?Dkp)t@ZW4VNOkoq?R?t^(&s{?mzKCes^2!))_Gw1^-}x-749DiQWZJ_ za7-oy6Qqjs;LV~!;PP@GNRX-@?jx-w1U{o52~xG7i(8(g3dap3FA1B^=tqK7)8Q6z z*a%Yj;}P=_Hoqc^e%v5c8?0Ww5CYea8$h0<>W6uahSc*!;?i^dB}g^5E5<)6z*u9% zJLqzgC#l9}#pfo0l@?r-D7QHiOpxl^;kH#9)RzCIyFsc~(@>V)U<@!UH%Rq6o*f;7 z4Y(KJnGk}mI}hucN>5VZd0urJG~c-3 z$_F)*rXony7bBX=1zM&5pavHcL8|%VQHsXkb``#~RxlMos)vzijn_aMCDdKi1v+m8 zscz0kG3NvPPzcwzK_;j&2vXgEn_hhm#&^P^h6!dNNM+*{f9f(Ae+r8-b66%wHT-R` zBCw-N#K8kXh9FhM`?j^0T&} z@g*ifDn!CHX)y>N35lCYf>d>$RGPFKgztnzO=Wq`Y{rd|2vSwprzcc(4TM`n;weLd zRJm$77jxDLn2~Vk;ZTB9`FA>(Z&6^S31@i;QsqCT}BS_V>i{_{=LEI~vbr1?qQu$ZfTG`LQu8J}V zQq^pQ=hu;})I?Yw4yRpAkShH}r{4L16?SnGqf_5!`MLmm-o;Ij zs`()Y9|3Hfi<=--f3zzPJWGMCba4};dVjd3@h^exb#W7q37ZSfY9$D349R_x>V6KV@OyzBB%Et1L8`gfakKnY zV86NYCP$pop^z3!0CgYahv zN!vLu3M5GNV3AXW=&4xs;n4Mz8O#k*ZJX{Wt^!u=5T+ZXs!+kHM@JA|6cS(0y2d6* z)xMy^91qq^VRDV#AXPRP?1un13PEe(kPU)V{hxPcf3|dhP{>l>9baf;ij`4{kT6BSd?Z)aTNR`)NegW3E!qk?+;Tr_04z0j z)xzzzrpHgi^KUqG-I*Sw7(uG}MV$7o4ptLkvQFLTtP?@1JT;wiz5v$9e=~y{m1Pj5 z8VqygR#*i7x=@**mSsAERGaXo6{dd+>gj*e-5}M2oK9i>1j|3&RFI3Eu{{u^T36R; zkAk395IUXdU72~3idx7GQk|RS6u%vaeMC%hu_Q=U8WTSE&ls?#36nB#NC;A8-Qg@y zK0@-g5Rzi11gTcl#AR|Aj1z`s;toFF8a{RYmOoxC1AHzw|$3oT?y5^*ZipW%_ndk7q&; z>PpT6L8{AmFxnb0%V0zs;--#J-q0{^>AWZeCt1gRb#cC7Il_#T+1zNp=rb5-ca z7)!YC@t=-NF7PX5BIE9PB}k?4ejaYJ=HU0qM23eE`f>6>km`j`oP5TBzd&S!sd&_p zAk|aOJi7tRgTj{UN}D533=*We2cHg=>I&!Dw!ouQrW8zdqY2{nIOzJ`rIJZ#xw`t z0Bmap96_q4Sdnw)M}hr7IIUIOC#kmM+9s!vx&!QQSKb7vvf$Q8E_e1h$Own7kJOyo z*9}s=ix63qZ3b3b$H)l&H-zMFsV-+ohC@t z6yYq+{R^-T3o|Hp6Qp`F+9~ICupSFjat~IFAl1YOrwA!?(f>Fyw1OL?>eABmKUgh< z8B|ykr1~27cyVF-fi+B+L4`FzssV6LF>@|htA&}duqH_LZ4XEB*Px#GH{Ie-{n3+D z-E%t3-@&rxnQ8?U)&!~A^l*xh1FT}g3@WS%Qk~x9=&TLav%<_+SQDh`G1TdZL7YcR5kKD2J;74S>~Gt$XHktq)J-q zv_f7`%lw<}2C3#`A3q@r{QQdK3o2~t(4;RdO$ zp0cfEFstKGbRt2j2c0n&AfYP`yD*iT&UCpYNVNz_CP=lgzp_T*@2Mp4DhaSY6Qtrl zBuF)wYGZ;_RMhaE*N`MZs_j)U7a;jGDdXI^{w7Fu7f;#U0(4(suC57E&BLuZ#E*Li z@gE#^32I3bq$+XCX0!~DiiDDW2~w4!rZPdQ0|;sor5%ngL}f)LNM+-tRWBoTI3Zj} zE`CbG>f zodNh`!;v7>?%p0N`@6XH8Anj*BuLfiG`{}_tX2rF=yj%Ukm}6>SP+5mLM9{=q#6QD z`H5kIRDIBf5~S+zqOvNY+>1e2Zq&F>QZ+e)N09*U1hkuAZUzZb)jxr*K`);L^qYaX z2{Ht!B6}&zUX05U2kX!zlFbmLTHeFMD$9Ubbe`lc_|Kba9skg5l62HYzIE-&|i1gR#T#I4^#;4}J>Ak`$YSP4=! zNPz2qi761D(T@bF_U#uof>a7~Lv3O6d&cR<4N@h+ozz1JTt99A2~w3=p~v?zMB>tO z{Uu1%HCb5;fGx+N&9DYtZW5$=yP<7u19nVsQKH=Dlpxi}YqoU_)W82tcY{=Q`_VOw zc|QS%zP#mie}%`{Rxu<$VIV!E>4*)2RF@{=5^D&swGg<#nt&kH0bDn#FTfEY1YLI? z)-@GDs$USFQgcCDoe7njNmCJ|TDun1U7(%$4{C5R5v2O;NtEI?xW4yHyGm;XQxT*( z`3`)~xj-u-)H>7!I&TE2j$DMU>HwPvVg3#jC#W(AQdJy|r0!r078W&3FbhGdGq4^t z5sU@GqRbqY2~zdIyT8;YU~D(63_+@cH*psN$sGsbydf#>2?j_m&1z{GEcs!FJRbB+O`4avZ*hZtoeUhqcKIig11nii|OOWbJUoHO|pgSTiL8^Pl zw0Pt)%zij@?j}ezZ6~@=f>ce*YL2P`;*&(y6QT3Ezu7JsL8^wOapx*HswaN>5?R;F zJV|xAi_ICTvA`x1&dMZ6H32tMu>1;Ot6g~$q-t|m>0#?@U1gTn_u{C}L*bNsq zL8@AvobqK^j@#jJIOQ`zsyt(z{0jjq;o>Gpbz`EQ6jWVcja=LWsrEE-@Sec>y0{5a z-T6SzQ)(=*$%0FeDr_t+!uOEAo-kP~=;>C1R4E^V^$i$DLs)K*YR(XhY}WwZG6XkB z)c~!+V`tVCSnS}?O&~$4h(nM~LwXs)qzG=1>J|~|0&HXmZjh>cJ78Ur{(@i{4HKk#hUO;;QZ24-Ge@ljahoCY=xLcCRb5vCL8=FME}n?$XZ+kC3AgMf zNY$*Q*6Lk}s^j1iXr(4dwXX%fbq(plfXflZ)gnQvLh(*kjX-$DklY~EN1Z*o@O^;| zBwSww=5>F|4(dGAWMDH~c@v~sKgf|^4Q#zDZ-P`alAUqr0I-ur-Wm2xkgCH^N{>T- zfbfry^sr}wRD&xxni64{`Ecm!>S50WsRGR%QZ*3j3Q3P>CP=mXzB3ee2BD9T^iXVq zRO+BprZFHa2q6V63M5FiXup&3Mo@PPU1l&hNcH*_C-YT4&bp$38QrjT@#FbP4b zULBo6%>&_mA?Z1VNeEKKuW`z=1BCB|#1pHmgPf=mf>aH|oMyfO>OVpcYByGlAl2mO z9A+XM5czQECecR1B)snLecXk`Ga7j*8VZRs4yrMNRN;7pkeNNe8X!z(q_TIuWGmddR6! zwpF;&aRgaH#ztis1gZAmy;fYer@(I=DihSQOh=Gv$`=lO0I0+NO?QJ-okuy$1z@cW zWoB#-1gX+%cy#ma1N8@?)0wtn6QrUBb%RtzIyhCfR$~W-BdE%hiyNdG_m{JgCmu*n!8!(OP%QmQVlrbv~VF%Yh*&tSPKNHa?fzGcnibov@QpF?CN>ynK=0IU{JGnnROiGZ-S5Mb|66nh_5pnxbf>bY8)`i*$ z`XLczDyYkSaS?xA~-gV_okm}&8 zwqCA&3hbc4-3wN)-uPpvdGI9F?J`dFuY!6{=rX7~p(g~X)*N)!!LjQw_2JMB71X5W zNve@%QC|(LhQg#ib#gaBs&^YIUDzIAy)4Y2+)a?G%mgR*x4~K_Ovyc1F@jVrVKLl$ zJ3&44Z@L?#TD;oyKUjYWGpMj8NcGVhj?TFCmX#leZh)Y|njqC%*!Obo0kE12Gh<;* zkZPpmbXgxzhyI)H2B|(xaoTG(Sj&YOR9F+FYSP3h?B`&8C(NM2njqE9eokSpf%Qn3 z84GKIR0(*%fa{jL0j>`m|1tw+;&p#lesro;6Rc;18B|ykqzZ5B6rnFzZwND}uqH@V z8?Qj-+~D|M|GWQ-2&^eFoOzff>f`jIz>p?i1;Ut zf0=;^Qmt&@=&S`+TVZA_tO-&@U3UsQ5Y&gY`g|)CX>m>YZ1dxKP3-cztl_x{Eqz{b7PspGP`D zs@kA-`wx2X`ojdN4)u2ghe2q(2vWP2?{O#P-{X%--$6g8}&V)Qv&mc zS`(W3Mq-mqdH;^%uAqsX>R9v|Ny|?!?M*3)R|KZiKJKy74jx50=yPTCoV0wdjGh6O z&y{^r1@Euig7?4UP&cV=?QrIPu8f{c^Ani)=gJya#=AO!P6-iL^yhzkuB;fg@Y{t= zvN}ikT$!E2wx|pz2)aX!BcCh#7!Z}^4}s)!WeZ^m^0_j4JWoDX#?RIz)$(Jl1Y3we z5YyNKKQ3u(p%9uVb6cnZL~LPlF5C->gg0^6O=%TEXNovt3#`}J!jJXg0$Kuig^>_j z_y>+G5>%h#XAi+G=}I=X(7ld_vr#_*x+Ji%g_^Kb%KINeP%AA=wm@xR`KixS{!GJ9 z+X1Ni?FI4NSONDP|d?_$st$`^yC8dyo|@k<7M1_PckXuh?=81y~p%-o=3AtDA{;Y)aj zkbHpqhrCIRtkLHt5X=5U}#KfHnzi z47%Jf55ot692Jxdn%cthQ=g|C_y<4L8YwI078!Ks{4~`2e+511r8BTRnCpbkV6NZo z2{P9~QTU@El8fQ6uLqlJuFqiOPa?U2fpomam}?>UWB&(%u7LZ6QjEEtdfm2$8OWF` z%|mH(aEk$tzqGp&bETbwnCr7}%`SrQJ{;%Zk3w zi(CugU8m=1Og0`KixS zzQL_sDP=1uYqsjtx|~(0y&a!=7{LnVKO1=tLNW1qmF54rxChg04Bg=3zfhc(C^3EJ zg<1ZK#UC8S{5q>W^dZqoor+MD^1l_C<8!=Ax^-~`VxtiB>eO-o&;L0`e}j)OBJ-S& z*I|@_M9!F+SSUh=)wE03K~}!!hpoc<%;2yt4+V-&9H7-;Y_VoRv=ISx;s8xsLPFiZ z>yQYb69;J65kM|n@NW`8Ck{}r0f3|E$GHU1i36msz~W{KRDVJMoj5>cdJLAzy^jDo zv6^=8^@^2!-QYwll2FR42GD5QsDR*aAQmIj}i2`{_tAAT*7TKRaI=w#kN%k0?lyPk&Q_^ zek_ewQ?YfhsO|x5fZ#sDv(coMJQm;J{>-*wkum}JEa6PvV;RnLWOQefO%cxx`S$()g0SVIpFASxG6&!*$6JPR`-Rt43)JEXj zh;x%PaQrK3QMoBphp?`VQ0m*hO6Q?TrOQGQS-};V6K0dvZ5aOMjpZq(x9lw zU5M@C(0V<)1_F*%zISmEQPEThVC4wsR?v7Z?2Q!jz=sv$XeMdd4U-PTH`16yQpM@e6*R4shs7m+s3X)_345{X(s(U}!N<3ZHI zN-tB@_ybl^jqx4JD331tFW}rE2`amm@Vr85@rBNVYdl(QHrPTkjv%$3$8SJwH|6`X zm!qj12FSw0RlQ4Fxvi`j=EVGp@f0 z`OL@lc|c@b?|BT5fg#}pW%o5Hpfg1r8P{2_8P~T@f<^xY_>qy2asBT*$|6CPghJ)Q zVSfvSmRVPS)5^oysEU9B0-JID?LTaWTLO7bP#V|UzzQt?OVFHp;3=s0e;-MgoF2nZ z1dZV*i&G2fG5l2VyJigMW=s9PoF2nzX!<{m;UvLhIO(vGYW0R_@{UrkW6Y?%FbcO@ zd>M8wi^qBlRbfc8?@&E!FCb)B*r#4hKu9fU5WP0hf?tJ|n}jeRpjrl2f01-29@2Kl zRZWGf6$$MC_Y9>Zc4}otqgG}#qS~Z&T7dG=u)F{QGA#2*n%1B%T8yyG!5ELCDbZME zr0xF55k47A;H6*cUW`#Rrhoo5hPe+9294?STcXTnOs9>2JEpfpKc_&TAP&391ejE9 z{J3NKkmqfy3b5LOKTWud>8+AHRtuzb0RDn-+8lyKY7WNqhHY%-i~v4aID?2IWBQtw z9&0JE)q;~&J*HFfc}%CGTYjo~Ql-aqT?~(?u@99UjvpD*=Olt8WBP^tsM38Xwe}*l z+Z({ln4V?3ZN(!sk3kfj$(T-hlo``|l|v3s0d6GZ7f6>G(;Lmj$`=XU0rwB3m@&P< zGQ3L}kQ$Glsl*vb8qAp9o9bZ3^ba?An4&gp0TI;sX8DuG$eOSA9qPE_5 zs2x#gS3dQJs;DCtsM{eLI=J2TfEcnsB{e*_kq&&Fqo6kXN(W%}FX9>(v!5Pf_I;*f zocII!?@=xC(WPX}{+S1G`|ii3g@X}AXJYoGN6bEEGybRyxR#I$kuGEQw_`k3aU`?@ z+%uG7%>Mdyot1hE_!#1pAq~dt+fp5j*^j{UokUTq@Uzb4I%eO9xsKWY@{ETm>Lhq) zg)3%X`%iqJ0XeCAz#bCLtsrLK4#PHefJ*w-vhw55Z4tVZ*|P%Q!XPC95NaBdYxWzL zJ4)IEd*0v~%>Es6=21=~K$uJszIC$Q0M1U5pt5TTG5fdfJ9(c1 z;UbY-wPN-U@#GR$;2{X%Fq&XZ#_XHm=^k$O{2-JhlB5<0i7x0$Wn&&nx#yX2NwMm;C)6ymNI9L zc`OoC7x427!P%ftmNGNW*_@41D6nv|X-57(UG1cXuXfU5B~`_0m6kHKF;$wSOsl@i z+7DHSsi;p-JP0~Ys}kb27?p-Y)T4Y4ACq9`0JsH&2*S;`#v2r+LY6ari}l)_6H zJqcqeqbFgiP1>Y7s2VL-dO$#yGQ5CDdo~rjAi_ojW4w4sx&8|L?i=rVL0A_a`JNEg zhbQy(mv$E`1{U5a7`Cp>e}!>W>5Yg-+MjD3?dO6Cqr0O*DXrm>NcpQBe%^xjH|-{E zizy%fcczfYC)YCcXqA&!L8$v2t*JmL9!&U-dLX3-F0zyn(KtI%1bczg)8S5wZK5K6 zKa5s7d=#1sHI9K*jXMvg-T>vJyXjOf=;@EcuCW6;H1?|U-KvRv#vpx~!Bij$HPVEU zc>mFE5LN(OCxkk#hFQ?i8O^d6;P*mkKm@)8ITrVxFU3BtDN@u85bg}K7u$cxwu2SqqQ2?zP#v!Lg-Yr5ZEe%tLLb5i~WYC@k}WKW(V6>D7(k< z{}0J~!1~rOtz3hK17Bcgdlq^NOrHba!9qKM@Z_9*I(sbdZ4a*Cs%VJxUI>S9*RA>< zU6+QPREDlA`YO~HJYreJaM&ZLpwe~SacQXk5gt{V>4 zSi^L?ZUOX4*AcF}E}6UTPjqEc-wqgbG3UI8>&?tL`5`59&JIXrKIfbSB6H3ptc1g$ zBLRn9m=w^NB96>Ctk=vr5f{Lz1Wvk+Xdt*q1aTxn_JlS*h>R`+cC4E&x`_x-wB(b{%qu z(&iu*BF!0;lANP7vS1+M5gd?_1=Az^xJNv)VD*TbH|hTx5#zqM@&8j1v-tm-5o`JX zS`qvC|Jo6k`Tsf*5BUGO5s8S#Mi#6WQG)+(8j;HSnnl#a-yLovE}T|3+m9%cb`_^} z@Fsqu(ym43`2}g#EY-3T3i`Jle+PfAQ;qRg+Nj8QtHA{9o6{<0ODj~*nRJql2TcZ} zFQV(J?5gFp(t1vI2$h2gd5U2iN$U2!m+i3F3D*vXKve9o4rDU7!%jfN4%@cyT2qkl z4i5V#+_$9YOc6)yko6in9JLpP`W)~cBO!JexZ<%$Q2m6TO9WqpLb1cd%O1`~Jp|-I zxixI;@b_+BhEsv$6O`=mGOlmSPmPe$5)*YwbaOP$v8GPrv;tSp_n1mOSE%(~*$zU- zIu7BLU_uI(>Q>VHuXO9ZaMEqPzb^;1-YCdq-g@r(cN@6FY4)E$xE893Hz90WeyT&Ng)SnO1=(I^E(@X>mqi<# zyYi{UHjwCBkuO3tbQ43LPzrTfkQ&~^kPa&;aRIbq_U?QdP3GKS)W08^#OxS{LTBdJ z{cIp|-M4?qw!T8bQ5^PQQb1>lIC9;yUUS_)pA}cbpMW123Aye^ylPt{sNzwm960RP zp-`^-ALb%BM{s#SRRlKIeeRq#!_9%T5tOd`>+jKZPmPqa9*(FgkFZ~;auAF1v@MC4 zcWIL`4FWQBmhF#RtMtKLBWViz4JND$CVVmvgp|aE_!;~fqNFMC|D-&d&$j$ufL7%o z-YZz88uqtIwW2Y&6doQi>nu9@3a$@TcvRMGXVB3U_$xfdpB1+UV5t)1T`z1AH-j|A@Q!fj$lZ1P%h$R`&L)~kBB$~*e* zp7A0uj8R|Uv)HRDe>BRUuPf;20B!toZo&eE)BN*M&a_?ysRfp($nEDaNm7z0JLmR+@_qKU&Tc;`9ZcD2 zXqED9`Bvw5nV{DRN{A|p{61E`?=e8$N3sQl_L~HCVQ9Vb75mz2B_KJkfpi1bV*E4Q z-2?myU^N71)$PfYi+rKt^Of=9VP}u^Eb#839G(5w%6ILs*Loe;Xu(HO8GK*EUW(+k zeW&kxEqejLC;}T8Ml$;Ux=Edu0M}!y~y^+9p{ZP?1+5@D~z9^;wq^b zPg!U)`6BkhGhXWfQnP@~h?+vMHj}Sn=Wp>^IRK>zJi~=|$1W=8wWB|UGz2;W)UHrtu~XJ*=V$~qzx=K6HfDg zfvTh}y-F=$tH>(2o(fT;l%;gXRwCgksiO0|OPW`ZGHol-_8PF<%a%IJv zgNuZ#(xk{w>DgEBNB6`j-+R-&)+gXpC$iSVP=fM}yW_Ps0eV*S=uS^kvAtgPS}!7b zFb;bgWua{@Rrwy^(wTtd`3BVPKKa#S-3Inh@Xx6r+VJKm-!2T3c6KyhZX8@lT|c+cwc$~#8|&MJ)=Vq&J1$Xj z?9o^zPQTrxJbe=?9$w_QC!*R#bP3T_*N*eilo8%sYaV!czgo|WhAUFT8(SQmI14%! zQvnV^Ua=C5*Yw7&xZ$-n0{dL>eUu41LyFw-`qEo^t)nFN0|=Ld)Cgw|>5TY7>^~#cfw^#$tyuvA4^ebSm%1-B!LUolhAU-_ueR=xe{C{;b>Ye(CY zONjsCu)`p&{P;oB5RQ8xt`$NyRRPv91npJcpvyf-WlzrLwW3K-bpfTXp=mwbS%oJl z-?EAhYb*%Ug~U!N58cU9c((FQYmd%C@zg31))6V53d1ioD*PZDtvZy4_7H{NQNA~Z zd6}b5f%ubFcuohSAC|&?*V!!a73lNsMy17G@dFyrF-Umhm?<$?|NS}1y!Wz zWvq*EaC|+kFgavi0Q9239$q+XQ@+s;5wJpj zYCN#1gi~`{K3;h2R=(aBp?Vq8*BVR_U0Z44gUYvW47y?uz{5hIcDFVv?#yG#cNkN? zx(f8RFbWW3lkTkJD*Kn~oo>hmi%7ddI?!asRA8`Tg{bAipiVBsze_X5&iP}&z99tAD_vCy1!YNB?7^#8@J zc6xBNCqgpwYA*vK)joCvdvhdQpp0sg0yHeeSuB2bH!-5GmxHwQnjH`g+Qd*&%W=q_95X1%BV9bpfg1rsW$61)oxb{)qX%6dAF>tf;DuA98*i?IJ2MxCY(m_zFc0KOx!O)!g4sH7oH(UWiW^qG$%*4bEi{PBM z+>~ggblHsyF0dWNqYG{?6vzcPrJjuo?prTz2-?!ZA^Z|dm`j9|ZL9Iq7Pqday!SKq zj)Nm`>3ME@t<>@ps8nYo1J_NdLT|36XETf=ppq#SC0eQ54`7=L(O3UNl4t<+;Jb*}6GLzM1FHlmk}C?#5{v9~GL?<0Q`(a<}|C?;u|aUsP}>26>SRBl#9 zVzg{#%};lk8@cl)OG>n?s>;5T7uHK7dX|+)$bzo4s)qY&{7zu_JO5KwRoi#`RgYEG z>#KuAKgB0Os78bs-=>d&s4R<_7j_N-tS!nL*6YQ=mY;k~Rl~y;9t9&jY!3Yw6IMIT zhNiIY6|lLdhf}KBF{5unE8W~x)f@bBJ2(+o*^}$%8veE6s;rM$6ic)l`iY7EB2AO&5!*;f+pCM87Bjq_vYUijd=;16a zP|KKp6Y&zPw1hsC-l&pg6)Tifi_YJD(_us@Z$f`LN!Qtrq_Zo!9Au^ZId|Z~H$X z`?St?>`bK3)8$FUrB!TxDszV8S>$4i^!eWfpnpjYO5di!V_w1Vh^wgO*6v6~2Z>ERmus z*%b{}B8RTnS~OOPR9%@1XsnXOlSfj;#-o8smPlDZ=aM~+TQp+HayeGe`6@JA$?`dN()n9xtdbRSoS^ef%Wz&bkvn@YZs#i*$j*)8 zLtMOMx<3Ez9%QTQ^Nqx>m&^w7HSwLs%|iSJx}gsdzo9-=N=@2yn3Acm*X4Z_23 zVO3kU4;E{UVkyRD#h%HQ#VXx6$^tw5Euxif5}m(;ZQa9#WWSD3l8!C2j~6a9qz>zm zfH|ZxG?mF2N&k5py^#gKNq3=dr0V!M%zDe)yj&RCF6K*AyiAI(0SY#(3OY-R6^v|8 zVxR8A`vtAJs=NT(?8w)Ej8p`Tc*~ln60vlRDZ5=o6#auP(|1PDCP~HnQFgDDYiVWt z`ISnZj60Y7b0Jw^ST5TtyIUnL!yn=0NxJND75CwO+d6=hlQ`^gAS)tUxd-;>X_Y;% zqUQF}q1oS&de?9)-`?3!c0nc7#fnfxVvLHz!Seb^)UuaVLh~diAYTGlC4;L2zo0RE z{zxdeq7q`tK|y1H9fa@+m4aEGOGQ!2J1S~GO&x+%uYxs_n4e2geF;>RKULP3G1}Pk z0KRWj>D@&WuIoLOb>UQHeG2R=gR9-pV)0J6Ebzk-xFHBBXMkS~<%o{Dcqi6BzHT$F|Dl(0_)jx7D;-fKyfe z-grhSQss-eh(B|wh|*gyX;s*e52|vjxP>TKjH=K+0$Jx(vGmYNvdZVl4K%-ssKwkJ z-vTV4;`V}@SLJKI8Tk}c5p5aV))IfEspv}pi>Q1_Cy`4b6)}*(zdr+57_$SaS4QP4 zUleMK7`2~_z+XjGWNv_!RleQv$fcNyn9P!e^5U=JDyka58YZrw;Qnb)TT;ce z1z2C@JN_iNrBuX6ELnI7{wl4qzYMUM%C{6xrIjnABK9#D^ELF8RS7cywpICZ_k^Ny zD&iu8Y3=b>c@@7FU}u%D%Le@Ugo-GF__L}o3~{$|6;nGA zGeE5gUe3~E6D_NJA%CHJ4%{Em%L0d&{R7HN_*?YEa&#h+rxC>Yh7WrHsHFb}Hc)Cg zl2-{dUlpDQt)&ylJS_h$RBMMi*iKnb42t^}MT|);iE%2qVruwpPr3<1abMWAy;|vhZoHRP+>oZPft)s|I)VFsej$0sk(JF4`xpu+CiT<0_(R?743?;htj8d&p?k)bqg+10&AT<{v*G;$SX1K;H z9`N6O4(~z*-p6pPsIP_qIp$yXw8wf2sbgGZG$xaZkNqnkGasqT45H}Pe=C7r!BsI_ z`SUcxLJimbz(JHq5zY$4-JY^k4pPn(G@POjM16W;DF z?BxJ#BO&kxn(S?lzup*S6+miv9Cj)hjB61ID=@cLTa%ZS zZm85c{AJ)Ad8*Vp2S0H(O113Y$LjP-YR%TT=3ua^|3U$(Asb_`?;^hUKEysI)opPn zVyM9uZ);n-0DUhoKXA)i3uCZ9;5pSR!0!r&n}GflgWcD{HP}Pj@L<6`lmmy(lJ*Sz zJxMXxE61_i171fsAqE@%o3fq-)XBhNuqR*8TaZ_QOg89$8Ek>cwzUMLO+w_7a}~LT zqu8=1`v1YkW*2bYFT^#8TL1>j`Wrl#YFm{PB9h*K z>p#3oyl?db%gW!~s*)H!g2JQWt%hLONr_G>iGlAa=%`0}#u8MHq131vMLbqJr1mt3 z3X;qpmb(@THWb*T5M1rVt@Doh!eK8z3-wDtSS6%Mlm|ymtCUJpxNB<~c`SDW|1OlH zi}*xXM_S%q0(MLA*{+VNY2&|kbcElB>k9{0Lop}3B~|mOu#vN<6@isExL%Kip9({u zxt@Q1W0avjuqFn_D-GaLsM6Bk_IqUC4aqMWNVh}S3(4?Rbco9v?!g<8AwCZH6vMH? zXxgmO)gN`iS$VDiw3^@rRCtc7R(U?Y{vu2yUn2Q{kyO+k7TTMfdt~=q}XK{gX%cf)x^608mkaIdd&NAh{a`g%1g?38=mc z)0?oW42*kcm!rH3pyvr@`v_xrP;y(msDY)20~#yRZ(PrdiocxPV!y8VyFiu+3j2H& zIa>aBbY|+=>UdTSW9IpXxCUBayJ^PE*@+(OB!n)IVBTL)M16fblYGDR9_uckEdLmI zKNbgyew>9s9e)E%uQ`Ah6AoX6^rwuOKVvCpCi(g~@X|Mc&k27s>7*YSGZVVO41m8b zoRBdy@U_R90%)dzWz3w@!DEr8RY1Nl=zoowJ{+pM5_=;6@|!k)5@GN^ZqT2f54j=j*OWT^B@e2)ZQ-QjG4u1+t!;% zonR0}{y=xkyf+tbKm)cxaA{LrKp8X77q_i%z&a&NuCp04`40KC(&L>mv&JLX%Q_f< zjF~w)VP}lgWE^%H8H{TYGG-ol4htd>Dhr8Q05+-hcf-tb4q zj}^l{z(0uC9#=Ong`V{I?{38V4?uV%Bvxx$X;mXEgwsA>PPNFX!jE93Qz#m@UnlU= zxrp-DUk(oha;<{HzF=x$CGchSg!1qIpKUb()=_Y-ApJO`ddi=5oU#UiK*e{JDEiZ> zTOn2Lou$Z@m(Q(~zezZ50|2~9B)D$$V163g8QFQ*&H~6N|dp4vfKXhAJ|rDuxf`gxfQtrx<4A({zY~18eFh? z2{Wia_>$>m`wOnZ8xTMkZAexEFN_D;{9+$O^>1L0uWtRc2Ki`;W46gHTjRY^z3pYW2E! z@c_o(&K{`moga_rJDaTc|MpsKAk>uv{}4klo2-Wjhra@7tiXI*Fa5~)+a%d*Edc(J zaJZG}PZ@vz!V<%bzgWsx`vLwa{Fk9l(T|M3_i%H`P2hhECuIEH_k-8UX5;-73%rV<&uXPcmzl6vo=PGjh8FM@iVkDX_9}c&b z^hCw=H0C(%8QlK`QXL_3-Lx{t9M2%0{VecKh9l;3z#LtR5OW;68aL~KP)|tQ0x(C`U!#TBV^y$Ak{hSSxdpaWhR@aiL%Ism zV+HB?zfJ%DRURwmL=JrDKEIA|^+oekE09c4Ek8MQV=g1)Sgjz3v)G3lQvy!7YH1vP zi|JYp?9w_;wtXbt8C6DWc>{j3YGtE2PWA$p@zu()#+X{&kzPI<$H~e>BE5oEJeG3$ z<4u6ovs2J6X80tpRqe@~9q7CmJVn)>ikVBC8^^(^8T&q+rz1{LZGQ~CJg928w=p7m zsSl@On^f&|5(PkF8rA`RI>6kcXKkFfA{|!Dfl>J5LdmP7WEp1qYL|U?aPFsWt?Kpe zdQn+B)g*X@E9B?EOIFYCharc5F%i}AecU3xMqv7@;U{S=miozo`o7vJ@L%Kq{PXer z4*tJCPyheD^Z)xW3`$?-;IBIWH*o&{*1?NA|37llkKq5ZAI!m!5>pS8Q=n-Ct<wyju(t-K7PPx*&oNmByJ0U_~4#YXSz*BiM-tFQ}C;9_|Oj1I)&?6^4fn2?~t zzL>47fxuofxK*B^L=}}|j|aAycX(VtcXEsFy^BWUHQ zv`7IJd7>eT^E2=pB0^8I>iggV#Z>ewEAhHOs&E!Ro;Spy%giLL zbgjAw?3&>G*_6O+<)6L>0Df!;mXBO7fz`^t9L_qm8|nK6^H?>2tx^7_7`?dxE&;nvxNhKT0ock~6vd;b*T+x9IDti`0ZWtd0Y=Ypvqj=9jU?ZL@*^YKujP&J%>5Srj zLB3rh=s9ggpJ)kup%NaK@-SsTXvd8jeev)!Nr5gA`!TlZkI4k~sOWJ&+DugcfbGlX zDAyAF#hJjjDj}t)&01AH5K0hT{?gf~t+5mcry~lIfb+$)o1ub|YrK2-c`jW=8sNDykmJ$MknVT_bdE zxgf>2RaBMNog(Z7>r5y!qvCris`(Fi;1eu$7e85|P32iJw}3A3KPoDvw8P8`RvBTk zPR*nZX&{Roxf9M89zz>|^;{@Z7nYeZcI0>YozZqMSZ@hakG3-};;P7J`-fo~P_qFp z7lK<6AG3*MKs9)xbTZ!4nuT)5L9TnQ!lPWzExciUffBQBzU07hZ})w3QqvsN`6?&rWD zJ1WQbjujLFtAt@%{Nc2~U_0uGA#fSNl_a9s#xZ zt9JZO1lb554QQgk9{Rdj;59qG*;2hGQOkgRXZXap>alci#g4M3kXXhrj!VU|`~N7!Qe~%HpRI zk$FV+(5Ku2!|cQ(d9XGnyg7c_2p&P-g$q24c*0fork!*85o(@OObNb8-4^TVS}Ib9`4@%kKoX+r{a-ZGjPX&ZlrQ3hVy~*d-Sye_>##C)aB= zonhk$YcnlATZ& z3l)|>2<)gUzZK>gm~1C(!d8ay-+3Qg5#!+U>2;2W-d-J; zYR49-pQXn3e?#kic>~_Vkyy)Fy&4TUb1G@W;ghD{Oy9+(e;P0o*JEJ=7;QK^LyH{cqAj z_W;0?nGrs)W2a#FRKEfIO9(oP@)gmJAKLyN(a0hyQCaagw1N5lLWn8wk?ntqyf?*= zUPdtfj$dG{9XkUz`?2vf0M?9fZQQ9;vUPT1OYDhgS*Cge8{o<_zTVFHCi;<9cxocB zX|6nd{VuS9PfPLc1GrrNzd9Jr3zaQ9Pk@xND0QpU}f9SVpnJY-Y;mXqY z7XzE^l-|>wEk>3k%mg@`veT#T0-xE@Yi2vMQXybv3FjW<%M=>^Not*HJtcH-g%4k-*=+@3cPJ@79*>j+j@b!)ra71Uc@T6fd$Lppb{wrdz!`b&1GC_u(0v|1e-L`= zq@A<*MF-Cb%#l6u39f@vc0vc-ddUM)MPLDuH6Z~%VM%Y{rX_NITq_EjIWz;^Y@8Iu z;HB11iuRCoofK2{!3~O(nXFMfwBn?=ip3LMVyl5~A#cObDsC&df(AM5Zs<=4fq}ZQ|N5_HXGPvuc$cK#qZdA0=4HT>!PKtRmkzEUb z-9iY8{uC$0r#F$MI4QbahR9gp(?x`yT5z2d?^VF#{Zz_TAZ!jLiIZX&)=KICz%xSN zs)sr$j&8wNa2t$=!XnMClVT%WaU>^BiV5#IoA)BA$|{9}+un6j6n&rtRDEDgT--P* z4#U611$hD3i!N@Q6b<2l;n8zEu&IKJlj2}clz17^*Am8^Md~a~fRkdvS`hXCJRU;O zEiO)qB^dD3uVCB_VYyC<2G2V6h{=h&e{kq}ij!h}OSEqZq*o#=s2s*gk?&~`8Ut)$ z2(FXjkB`uMy^!8tFmX~e*yT(g6M(%lVbTX5QYI9FNCwyP2!|@5^tzb z?*jZ#2%MidDIV@c`+g2^zYw@yp-zgOTM-!qL0!Yo-@@c;lIh~4Slr&$%hsHt8yz4G>(or+q&U+88v``2x&_wbP^K=daZ-GB&KYe}@?!mqL$?AC$=dw@ zC&dYDu~k)o4TRuUM4S}87omeXgE1hKrMuBMDLf6KYb+RZLRqBHbyB4KjFw&v#(KlD z#7R;2Bs6@3^h1IfCq;vy5ECawL3qcBqyEIt10jo(V%|UpPspdNR2*D)%VV4r?{;un z@d;pc49-KXGY=Xk#iRF8^>$$N6c*PlNih&1BhsPn;^!a1jg#WGs|-$xzo3jbsz3qwu5dV0gK<)< zgcE}CTEL!mapR;oa?HWI0qf=B#z}D&Qwz(F0ye?Ljgz9}r_QkPKClgh^9;a^K|hu_ zDYDjZEZ`tmr$U&nlVW2>L>Op_xedZ!hU7Xa9z3Nip0eT!VkW@hRM$8uu9Zc6n&j~S ziB;Lfjg#VI#PnGIGr-ysuG`)?DK;aT!SVxvz2?drCq;?wj{X_I=DE0WQoPg6iDs+^ zw!`3hog+?)R`6T$YT+aZ7eYzmq!@>X9iB!5J^&t(=2TP<@%kb)PKq`)(XliWrh!!^ zgy}jdI<>`@)riypgjN|y#z{eA82j%AAS??ZIhVX~QiOejp_hiX zonY+?VOk#Jq=+hudlHFs5rjJ-BxiMKoD_rL%2rtm;b~wT+RAu1*F&&zQmkDIR%tM* z3X7)>aZ)U-4?;75?S!C*dgG+{2X1Kf62LbyBfv>fEFAVV1K>MC&{-HK#e8fG)CPcC z4Z#v8#m8MB{2kJd3nosA7e_j)$XmevBwVjDjg#WyU0biVq6_0j2po>_8Yji#AJLYy z04fda3Bt9!aZ((|qa3_iYYMEDD{q_>`|*e=%l8NNvdD{*!nYc_Cn0^hD{Gt-cX8oz zcdP=oPGt2~9!`p<+B!4#x4=#qdA&jwC&eCI@Vo%{9fSu$;w6_jDZ2Kv*h=HEtjvRh zE2$NUlj6e-+DIz{uSFallz43?PKrBNV34)92mZY1;k?92(e{$gYdG*pqK7%+q-fm2 zso8Q6J`s{$uox%B%?=J}KM2P&Bf&{gCe0z;0^z=pxY!=!q$p>!g^eGB_#nw{k{^gOE5%Qq=aYlOnOW!etQ`xjMIN%+5Ua3wGt)PS20cTzl#bi6dBfK?z|H?VP1Y^v=vP!nL!8eF~FAH86l z6eaM7>!fIpAU+Y*aQuuV32HWRQf$H-9vw2A6bX~?j0lm};AaDob@s+dQFN_G;|GBq z6*=W9TffmW48PVU3ew$3#nywmZSvCrloa#Yr&&bEG;4@RktV ziine<147LztSnZ2I9&5px*Ls?;`IpVDh@`qP!=h4ofJ!#!$zBf(Z;Y`Cq)cdW#4ywDVnXvcWjWXe!!c{@#d4LVtS!KH5U#6hoD{8pz}r#?KMCxtiyJ4!Q&@Ae z{(Hb460Y0cI4MS+z>UQupY#OcUpO57#z}#>|uyhwUPKu%DoP|OgU|kKa*E!;( zcoFv=@p9@75XOa)#7U6{d$gNaye|R%iEwxT<3UH?e1bbEI-yC3sP=<(JcMb!=%Fz^G5%WI|uDo+0GYL+Ltp^=VRX}(;gyb-dlj7w>TaO;yzu37l68hNrWq&2`uD*)2F5vI>2(AXa3@8V zVHmFd1ZY(Vbj$OrT3LoC0!n4uK;4mFZiBuH$c7|(C8t^j2VY6e7I4Q=>aB9{7gjPb* z3l`&~7>P|a*Q`GXLoy@5NwFJuuQ6#B2#bZp#TF;U7R<>^+6uyMAqABQPKvd7?1M=^ zfpASodbwqs6r)Nynmq6UMB&i2W0E*2cJFblDLM?Mt$D|VNgJ|1>Qk$^P2hay5kFp&qaDHdJ}(pz+H*5 zi_m8ny_Wb5LO+BK0W#bu&@Z`6-y6XrJl}qh9;u=mnnpDersW z7lgyJxz3U%ru3f5w>PIVG5rHpWO}eRMRbd|uIU3*cy_$vk(UdFz$!~js-aT@+61Q$ zRlb6lFt`Q{L1-PK&hj*D0@835GYrA%M%XN<0U*3$NDe+u#muYc+;ub!*g}Il#fkVC zN~Wr)BY2>LFQ`o*Y&RtB=SiQfqW^}Qg{|c{u=56Yic62xq%Ts@TVpIux(|X?-Kjl3 zs&)#QELBNaF){GXqB(%&b@AMtfWN1blH1|q_2@!X6<7@yr=UstG8J7Iu5fO%=YVx4 zTw4X>%T>bv@M=Bolp(-|yYjRIOJAX)=i&v4EWZHQ5?7w_l`7%Nd}j%^4cHeVuQ$|m z<92!*JF4pnTw}o0Is9BE5*LCW>EcaAdRsfb=1hw*<$V(OKjUyNfDTwBrax=Pe}%X` z$*O|Din%!5pPl}k9Y6hnBVQX>1HpMylHSgaS{i0^A-VzTMKG5^!|m<(Yw+8X`jLRf zi?oOK6zLu8_=z_hC??&zM5Elrnj`K>?L#ecnjdKE_U+Bmo!N|0cJH~ z>#ltr?(X!ic5?iFo0X_mz}g9(FF@K_*mVxL+Pc}fyM3ogY803gh^@!AfmlAJceit& zMl_a`sQ2;np^I~FJ?z|-b2{>00o&)|2ah4Qo_6l1$Kn+{NLCl|b4~CP_YfCLf8O>l z!3#%@{)uc6_zcIPE2H5TY=19&3Y_44fC>}Lr7OkKczeNxQ*gBbt^ug7NNc#a?JwP5 z!<_*25NVFsruVg@YW=NEL%juTq7hfr-+ITC{*oP4;kY(%wG4!fAtZ-+aX-3oq#d=O z6yA(NmU;-RAB3rgJtj@C<9ngBY*2SVctj+35cM1$4Xc}G#}C9UpG-(hmq3P*->8{amsWAgr7q+Iin~ux7tycN;qx*0IV1+Ep+L*);zHB z9N=U6H@3h22(0D{fmT+idJ1I1IorQ@H|E%S0G|=U5i|!rtkxBVc;Alw^%o~{-4}#` zMAC+SLU0dfy1 z{waX;jz-L}5Gkgz1ypKhGYOm2s*(!wYt)m7@iHyRWH95 zw9KIX@H1UYUuNW6Ur@R42(7!V^E^fRa>KR$FtXH(xITe2N@~@MrNxx#>kQBF28ic; zi0@l~oTo_t-0)OefY5)2>tER#H|f&9Fg(-$Qcb$!&`y&s15Qo4^o@q=jx`Pb7c@~< z=_--wz034XhO2otLYD|JnE=iR1~uu@w;Qe{#Z^|W0xiSR)ss(6y7V)KGaqU&ZV+_< z&?^k0CSCe1!}UIfytzp?4!~4`D5%O3wN=vZ8?o~+ZpRJcWdPRYhVsm=0O(&MuHg0YLO*6R{19{7Fx_oNwW@_i1)hTI(CDA20ODM#-!Sgz(*+g=Vkmjh7ncmRM zbL0(O8&BD0Er3nA%*jS%dQ&qFYlUSa^B90r7NqoMX57}MO1}dQ+pmU1Q8TEKncm)X zH{7Lqd<6g$vLG$kzDobzOqj96U`_Y|WD&&qB-p-6-*5Vo&r4180MOUA#G|t52Tb2o z)H&obKN8OrxfQ)|8er?(zDnO~Ry#v^p4(UHKbWbDQ_&+QdKOL#h?Y+u zwRqA`n5p}*l8^OIp>48tZeOMEF|*DEt(`QBeeX3G66Zl)CR!!{wXf2DG>bj+hcqIL zhUov{P&)f|3OZh_Ax}gRXeEO>wXf1oo5fP5Df^kw8rV8FpwiEnuBlhC<^pYwZjgGD z%#o4uPo}HHc`1*BG}(5|4XE_9rmGjSD7k(g(lXn%lz%o|;)ry;1=23tHMg(Q&zbH` zV`SD4XQ5rOoC~_2nn6`+`c1P)Q>hNxTPdyV~0N4=*QHvzKgu}fzTa!=c835M^vb~dK4>xYo%Q#%)?&AI$DD>Po zB*itZG4w~IQMMzx2bMu3M*=DVpe#Y0i82O}p5w^7uQ*;Ugl^P4il{bs#1ut^O&j@$ zwtzba9aJT~g(Loz1%h>M9i_K&c#bEkir_WCZ`cn0vrTgtjh?4hUB}OcJoQV2mgFCs zkTnW{h{7iEPLuYa^S2h4;ocmRgL2UP8ZVIxv)S(mvKfVSW2X7ZDLm+!>kBaHe-|?> zSA+EYjo~T*T_MdBI1BUYVeHOk29_bSXp!Wbe`#!a}Xf>q~OA)g%_ATpl>3q3kdvB!4001Lw=uZPSq`tzj{tWbK(B8FmuK7Zsl`&`6A$02j zd~HMXp0ES*q5E$vtvLkgv@PGnJgxF$T}+K8@Z%3?|JXX$GLc71BlXtDJlYE#KV+{J z#KBRNjWh@S8kPSOcXngcvWU2-3_V~mf`cfT4ekug;4sq`dJmgne1C-{{#utu@dDT0y+o12u&G0Cof1_(DUIP=qK)Y(| z_2Sp;Nm;b5L`{za!tAeL~8WAXN{_ zw2a2TD_>nCD!XnDsclfER-^wL&-^Z`Z8jLv2wRS%-A4T1x?(V>Ag1B+T#_hzsrc$HK6qb@@P84ylhV^RBu6^PX2%A=qPZc>+n&u!d0z z|F51Voz!sWyO0*!E*;d2_h0b*hJ@p$^H-3*wPaaQL{cl>f6?Q|DgkjC+BwqMdJ^_a z@n1^nY8u*9MCv{SGe<>PB{;P<{g;z^XXuQGWauRx$6P7A9m9nuDVNrU-iVlBo^{ZS zl>cg>k5}WRBg$Jnq4%@wXi~mb_+$@5nwS9THOqwNp!q2O^+Hv!9GYD(hO{#1n&lgX z4|i1o*bZs8?K-LJ;9i>l58s#jWNZFsD1Tdy#TqB_0&TP4hZK545G2w|rMx5%Z{|HHx@V$TmNun!)tZ&m) z!~O>yEqtHdm$#uS$YC~3bzBJTtx^(CN-^Q}rOA+pIY80)$Eoi%6u9211QZwEh^8|6 z#0Cp!t{GKc$CFZ0#P+~c4wsPoA)dEA<7o5safe|`;-y6L`IQQP2sCdiE8ZNoaQsP; zy#JiSO9QQKH z#J;ylksCnm$xVhEt{{>ttybYU5A>Feb1Xv)R}#rHlNFh#HM;&dWIhN_4-Q9VkvzSq zn(M9!w2_T-dW0CRB9c!XQih)eH7Yk59^z^uIlH>TX8~Pmh26i!rV-t^<8!;~{Cxq+g_Vz(Ok~liHx@#}V>K$RIEo5UI{TRV|bO zD#s>6l9$QaBK1m=^1VN((KZ4 z74X@%n_vro9z$JI>lxiM}R$ zN6=W}G7Ooq9V*Dsy#W2?FoxDw z`QH$}4>5B`cIHA~{5a-K;j8pWM&K*x`*JZVP&1am*xSPQN~$z=0np7{pjMUxK1cZW zV4jOSj6y@hiz66AttWDO`22_=L&Cj+phsA#H{fYD|78T)XqDg0eQKY?}-zs%YaRKelLmutkNl zAE;3_84^w=KN3kLF-E|?&jPj7CPTu>nK^8tJ)SxCU%jWPB&Q35bK^t{J3+h`jD(U}J_zLV%k5zMM zy)B(@Eca3c1z0nNQ`hS=;rq0xDoVx!o%7%D(wFe=iGQQ;jdM%uYe9Zy(OOxSHzC86 zmGS{d$4KTbPw9ME5#j$@_OlE$BblpS>a+GhB@3x0nuONPFX1_oWT{H^d!Z6IC03TZ~r z^+VJ({yoC?5yoUF1xfxO+`nLP8k0|fs+*e(j&@1>gh)8{sxsUK=)l}K z<$Sq|r2nKysJK%Zeht+8+$80EMgAzSmKN z#ti)|5(1SJG#bEU8{1hgIslHwWV6_d&crtWOxPPpwpl<*ivLP8o+U?W- zt4OGiX<)YWJAl7zNJfz%{Kn%-JU#Gq}z`~~%dz4ufUlR=fR$q*<-PdJW& zZuT<+Kw}${>A;p!^@QJ1k1^B>z+fAa>A+ASJ)vMd1x*Do$A)A&FjQD~Cw;6^bRB@N zY)Ga9P0#wv>h3N36?7cHMH>pXYQ$TMHlacLlKLy_?h}}Y zW{(#GSZP6;L3@+>pVr;idn+0^}C^{Lh0koNoGZ}8Zp6;HoRN;MrzMLBmx86W^=YK*a={%qx+c>9D zINnfqM`KMq2WB_WGr95bz%H=s_P_PM_eZfY(QReLFa zA0*w5N=Q1X&C-1%`zWnCX*@*7$>yy)2+1~2_b&cTrEROAW7gi$eJ52DQVb7s-0A~3 zUZH!Bei4h1t`&|4JbB*Ii5&ep*6bKUr%*Yj}Z|3eMoNwfq1Rey~Ua< z;4cE&VX#qlxV(j;;r%+@TRByEk=Pf2UBqZ!_Tp3BOF!YtVW>&~=MEWr_TmfOyB6yv z7-&nt!M|{lxvCjn*zkX)=R3Jn4cQC~dKp!+T_<3^Zls z)(}K>i|!Vy)N{EJz#g(fxho{Z#_e1158G+p!FDA41fK_W>v813mtk|8o{)~Ev`psd zhmjB*(q=G{MwPxu#~pgqSLng;IC2$G^@t2U@Urk`a;F}(2?Z0AT|o`9$&fOM$z6I} zoft*F4r+l-QX4^)>r8&5M_v3#`Ti-WT{g+(2m9`2a*v*P@Eq0|(D?oDpm=6ToiwcHM+B&Ewc9^BYSA{4Bf(5apj_7fJu2Qx-+O~o*kkm0fZhSvw>lLCH z2--5vqTS^`p+~K+WXRCJ3u*<9U@B`8I;qFq#3(FBaXWzTZHSvzUbgh39%n===sJL4 zI%pC&qbFX%9c3%A1FQhC1*0AohxpIx(K~h-8qb831W*l!49hc=Gsz)3v{;Jb|3!}} zo1kkv1JWE+_s5Y@RLY#!qw0R3?#@e~rag|l^fhc=zz?bYgH1P_@M<}z&mTvQ*aVxu z>8`qHEKH(1ehAbrk0Tp&ht11+G;QR{GfodcML+kL7_GxFjsL11+gitVTI72%P?aA? zj>h{X{_A?&FQ^fCrmQKb&W|I<;wksv(4z~^$0HU=i3e&zE>bhvEVQq!)0>LCue;C9R^hx1>b_0d)0&F>TTl4$f$}|m zAbLGGWZd~?+0$(bf1tawuqcY7l>xN1jq_~_;@*?!xA-6G-lLcj=IUVtP&os}k(acE8>#g^gzJ$I zC)xmQjV9MI`&$?#p0x7edjLMPA-2Mco&6n*5(BEJ3T`KW12!ZrasRoeQQ}Opx=oh> z+_oWUiJ@LbiMWj_leh86}Rssl00gpt}u8 zOSC@CKfoxl!Wy=C3BWWPqUHj(tJFZw^9cPCl_!^j`aCx&ZF2v3kWu1;H0ALjP^WED zhK`{jMu}SmR22RKAco|MXJPtn6aNas%PT(kB_aREMnaylxR)SBNu0`APPD@G<52#U zMgeXrNqUXpdkW7bL83KI9f{_lLSFLfUu*a#z9)@{;m}?R>K(Vj?{$W++$5#Xf%dMg z^O{!wdLv;vE$hJL&v1N2GB>TI{E6Xv1xupI`(rpxkt}_uC9nPshVPkD%K9B>4}v-^ zdG&v4_&nHvn?s*~fe;@K>AvuvlrpQ0GMn}wEqEUT|7S+N1KT7dGC?*Vnghf882CRo z@-4iAA1TIV(H*BgwqBTi5yJnGQE?|mc9pd+jDlaG{vt@s#Ay!EGVHXGfq$b>Fcr%H zSYHS2^Po-}8Th|63f4a*JrReX{See?BLn{?qhQhwO}hUB+Fe`c&FlQT49{mzW35=8 zq1gHmhs^%euF@p%jp132FQP2OYBs<E?*G>CY^3~!rw3 zpf2VjH9W;g{C!6LlWA(I89zm;Mc|Oh?JZ92@I!|0>{`{?NrNWpVA;QB{D}2V{=-I6 zhp+H*EJkodO=uZGx8K5z|A^t+>r!p_PUN-$yS>y6c8?nQ^P@}kB)J^{ZA{SZy1Gcj zjRi9w)c^*zHFJ zVfUor%S7k?_f2qn6WU+4TO$oUC;urUvB+TTdKQ2lHyp3g;859bLUq`_YH}Yd`>RIM!0Br8WFWL*wk~Ug8;0Zk>j?5xTz`i& zZpd(P$XkO|W!vZ34PrfbpkBY6JB1{iJxf$>oI0r z*-f&Ga4?6}6y!U}7@+w@-gS>}p6L~?_LV@)S5zSInui#5F_9t+AkakyRFO;A#t z>AhW1N>7qR?zQ-i-@}#1^uAeIwg&13U9ptc^uCRC6lAb#&=t*p`{PY-%Np|08Xa`S z5(1HaOiFWtt_FFK?g^&1KDMqWgX@E?SjuO5%U_n#_d!=P+QL<$>FvBt2IErD6-!B` z_aLVA$e=OOj@MVHAN={v#65@~4Z)<4#6?v6xE~=EFcVi|H3do4g04=tLPGn@#Lnom zkklgRYL^?X3Yv){@fI{mFOU>+kE$I+FbkRa@?uzyZpb{+?cobC0^<}~{J-d1_zRo) zI=>`)Bby20u4AwhCZRMlaRwl2x1G-oQFBuMmZLwzEIRUiO}hsm5<%kUT;?#&5=J+g zaBO7e--DTw`!ooa2C4*+T)oW~3^X=VZ{r<cDlAVAR83es53}X1 z`xqLpP7l;`O#^AZjs}HhR>Mk5VYXgs;BzrdCF^F935cv&SJyRDbF~J!O*A{HyCpP0+m8Sgw^;$)a7tf$Y>Z?A`u}GaufIyAteSRtdh)nCD1^gcRq(xGI0`2k@ z$IO?wi7S8M&}q|rCAD{~Nkq*PJsK4{4wga&xTO0Ijw;8f`~wiMA%2vowXZC7bWEUS zd@TX=%nfltR)Is($^ABJpBJG|uo)g|lOA=Bc>)EMm6DN z+xi?zHEH8n$Lc3Fx#e*d^k%skUV|R!Gz{ap{r!Te5WM|0^y-V<6D9vI*n^Dc~B25>tU zB$tH;p7+#9RPo3&2Ay*pGA+0l$G-7O?7*OWV~VR*!_$Cj5-0;pE3pHEJ!RAIWM<=X z2it}WEUm;24Dq-YA+Up>4Yzd7ap+qFaac@h7BcDrIDZ4uY?9fs<5C;A93ImYOUT-- zfxHINr$IR%rf&l;=6&zFrd6Yiw;$3`k~w$tLhZoFq!Jm(pk(|Sq+3DPv`{-R%F_l7 zQd!TujOCCxRIKPXHUpzQi73j&6S!Q4BxzU+Kzhm3XuP_4bs;sfUGhThz!*<-l#+Ww z8feKfAM!%&z*yI`p0GX<+UumVby}z$81FfWr+{w32M|889n1Sc3$+8Uc%FZN_fIL_ z-#|a~IA%hj{aZEduOo>373g<}Ay4F}DzC&2OiU_-9LILt7^d;!P^nMrxC4_4HTzhZ zC-M01=7mAz#FlHCaPR|8qif649U(6&W!!_Ej;?|h=mfi(6q!i36tN3P+ z+lN_Upio3wpln=1nnHVt_z=~XUWODD26qgFz-(}jD``JS_pY1A;ARC z;V>Uf*%v3HwGHyVFoeT=JjL~*4A8HTZ#)h;k#YpxUh>F^Zge7!phq&yIUMF6Q>K|R zwabC2o{Q5Qv?MO@lWSLAwR){N^iIT35w4ylW`1_vnWvcH(8t@1%-pnOEpW~??1t(} zEr7o4am;zw@oyBf1^Ql_kq-bZXbW6)J&!3Z?y}Jk!DWll9JHP-@SAJ#a#iqhult&~T#uyS-QgFc0ykXZL*(HO(0b+8 z`30%KAD$0W4B2!T3;p%SF}FP4$%Jl_LR&D`@kF~j_b}GR{u>o zi(RMb7GHsK)3T!R(zt*SDNnd%R*S;WQ!EbYxGXJ=3m770R%0obfK--bF8WK;>a~DF zq>T7X=8Jle8V6mo>=Y^QtLfNhA@vWsrqyeKD3OwbBAtRZ5z^~H*DObi6tC(wEP?c) z?b@IPhXJoh`Qkb0TI_^&(sIs8BdZU(`*OiyAVH-3jx0c)iCaJ;C##tL2To(6fkfe{ zQ&#<+MHxeP@$$Oq9)~3eVB8Dg#{raMOnPDd81xfi&T1 znx+Egnu78lM`%20ST|5aB%Q!82?wkk0KW}|#FNRQ!qfU|Wv(r#9yTfC$xw0ODKTD! zehh%=xgZr!CQAs?^r$&>-vc;dLo%MU{3}pecxIuo!qA@p z9zG5#BRn(k&KX0A7|eSDNAS^>O=@1?7^opU#okfoYJjl7$Tw-TP_Q&o(s0c~L8l!~&dGni~6JgYn^ zGTlMFWRrFfLVDQJO*`SKj&+k9!8zcU+ioZbq1M|A&wi|vVsaa(LpI6bkhhd3Jpvtt zXZ~sx;@?62m5bDP7t26r;YmiDgw4evem)#B6=eQoOI?L$=$|S^l>r27NM=ojx(m;5 z@yfe)0D9VxOhsA=6?j%8?#JLP|3<~j0A3@A+X^z^v{ot5TcoVR1OgY>O8~5~A(^je zem*c%M8EKqnxEeT;G_)&hlY55J}^wgoOwsh&)))NOtbt9A!&X-FkD1+MlnpIE+QFJ zna7bdKOYz&Tos}XIX_iF#@Q zs8x?6X?{L1O2k&Zho7?|au=v$k0WV*9-}pJH7?3wF>wRbzmFr)O+t@WM9+v&8$RU6 zh;>mM^3G5y$@%%f7!gwfbG1DAnGT>q7<2$b;(?b%+^{n0_H_sFoDI<@EqX3y_ygIF zMbttx>g+^z!X}C33&?him<8s2+l9;({mTLxC*n?`9^+i`C4d7qM46C#)~cNT;UmOn zf=KCvbIk)MJ3#wLSv z;gWn^BrUUS{tW7-O$H~$B{@}icBA{szPsMQORzX(+=H{@lAI)S% zoMiANaOj0-W~mrXTK_ABz~97=vu~7R8MUF;Bc>F|rMuy6zrZcsGv`Tple$29)-s{w z+j?T5vY7eDBl|L>iMH!qf}P*d^ZtYzMq{nw9owzuqL_InmxTxKi6`GfV~L}>2ZUgj zixvsIFP^*@hYEqx;tBy=K1iU(53sOE6f>}uGN)KH#(_eCkIJK{`9Ku=4#filPgsEF zZHc+^z+zGCi$baxs&8qs;NfKifloy|k4N&tfWRidXv7!H2QG+ss!_)O&I z`z7hGg!c*T!bp%Ft8XHchQ1cA-My8_iL>pwxGQ7-A8 z*9io+2zMO1&lH-6IE=Tgz({$k@V-+=nlA_`jb!ONEh7kQ6W&D&ROo6#%LwYUj3BUG zc>g}GLe~LWH(Tdr1c8mB%uR$+PW%UUhOO{^HqoGZ;bio;xPKv~A#g<`zPDaI#n+&PEM*A%EK-(Oq|0D9hbRDZ>NIwDX zC(`+8s>m~1k3>TJ7lw8VmmgV@AZwb`H9aBrSG)!{7g-;N%)Vcd&T9w)Pw6f(OV=tw z%d~ZlO>hlCpaOnlp^v7u0nj}cq$MmyZ5yblyM8`mXd|G#5~eS|0KKwabgxU-=0aOR zI^E1*4^HEG{Xn{&xT3u*fWHSMxB^M5 z-M}m@yO;C&f!ccF7_7q~DTO5IistnL8G7OZEUqD`TF@0u!v`|;#Mf~PNoo;v#ZnzT zvEMx@Js)&M)9`^TJ#jo1o{+28Y*z~eYjyR+zE~7Pnhc)iqR)-@0-%L?= z%n5v}>>)5x)Sdh@!ud3RixYLn7IA2`tMIoZF|huxNT2HYk8H&P1n4MDf>#*D!xiwiEl$!me)_B~p`?peua)FKq6RQ6}auC{NOtjPiM}_Qo^_zGvdl zk3EN!e`Nz65-C^AyZ2{JYYnNJE%V9&DLEZT?chGyS}-Wn{2{N}easZpz3kNO7*JH9p-+=iHQ0*A z9-sLDH_bB*^Pd@YA}OAlyA$RMGU}(jc*xMIgU`aD|41poD=gfewvZd7eTm7SwvhVR zGB5g|eE~K1uBl)ertO|>XfHv3(`Gmu@ZN!x*w~BsHw62cw5bg-77FMy8=OOZUOH*+ zN#_yIMrq|XVks>2V>Uyx#hQEU7?^0Bc4QM~03hAYEmxpBozc|2{}gi6yD0c@$k_1x zlyWoozb7^A2}l)eneV5Rv)!BUK-PtnZOeQ=BiVS4qYv__coy0qTR%%lDfQ-#o7<7d zlc3GC^K_UYE>%=qGK4?L2lEoFI32A?V65`jBqc+`d=I}706r7u@(!AF#*P&%}@P6qrWC#aB8WxlvU@|77qjy75CC`8~D=2f$?d0v4tc-sQX`>~} z_b(jGbdI`=Mk|*lhoPS!<}xR9RgCXtba9QPr99Vg`Cgdwb%hXu?yj>)ZLWAd@1Y35 zp`8EP9I4mCm5Dx-D2>ZiNa7q%wC0#P1kRsL`tqTgE@}q7RnYmA=J36j>+Z*RMEc?K zurTNQ4#IgK?>$Vy@J*fpeU`;&j=d!J^?rbR!}7#up%G;}&wDReOf~3rY=#?{(#}9{ z&8L-}j?jDC3=OAfk{RTE#$v`npK3D=gUn!W(eIU=rO?;f%<>>J#QPTdshl)>pdYoF zPlC(~-t@}K&Nb-wY=$ct8J?lu#unpQg#9mZ$hcEYtHM0YJJ@0>Lq`u%F_VJKaPK&a zX$!rF&D0DsBfKlExW5E_ip_9|Cd2ch_X~?z1bwy5ET&RVG9$f1C#bmZf_~6u_ETjf znNi;SR(LK$zil%#6r-5Y-rLqa&GP}q0C32-(@2A2Uh>Xut{%aspx3k+uC=9KW4s4X zD5fR!E;d68`jnlQz5U`9^CI*KHp8n7rJb?f<=B#j@9DeHSJ(`{m?fEU-Vs)qw?W@$ zGyFchWX5}+&adwK1?V?zhF)P);d#Y-6Af$jD{3(Y7jVe9bE{9pZeXy^z&ad6`f zl|z|#Ir=)WE*I+JDB5W^@zH%OWz39o-Ugo5N6XABn`x1BJ=0rwCW=7O6k0nR`hBt~ zpRi7ivAQUs@LsfBxPTr4=|y55;iO6DsfAaQ^Xa%Uk0f@^Z3?LuDvZrg@cVDjHrhHD zC{iz6xb-tAV)sKkY3np9t93e!X@tzQ!uQ6>q55kiv(K6<4WA?UL~)9u5geTt}pPri?^eSoObHNNjs)bvzp)ahETGd`O` zFlvI9P|sh~n}}N6UL%*pP4&mSJZVb#^_W zTrCIu5e~gQR4uage#pgKCHo^yw&U{mBz1wLlDy{M(4TN7KChf#gnl*X{P`*HwS?>5 ze1usnLyr|lsB^kwStT8fjw|QIpg&0r`_8S7tWwUHNR^GtVkyX+6ARxax>LDevD!X>wR(1LXIK5*z4;cq`{J0K=s{p>GIdR^32YnmJ$oTg}&f5B)@Lru;E%s+iT>ck*48 zSGK+kyDfaH(Yc`TJG>Zc&1&VmHdEQ~tVI2fBN%(lac(P^HqOtn?2f}y8G0a$`Lqk{ zwsSu7t$JqKLhljAbgF=`ba2)Xig^k8lrW}0W|*=%JJ(H*vZ{a_fANzX)gXQii~Cha8r>hH`%n}zMX2z^2rGhrs~=X1_l7@lV4UFa*q z7*A99HOSfPU&U;LzAua^ih{rw()c-g_oBx?*03K0Azgt0R~4DrVN3&Qed>;aJ%;Si6Qs2{_ zPoYY=1l6~7{zy8KM;3D>sJ^Z9XWEBoQ&2J2jjGH#c|_7d^waqQ)tPl-McO(cE1+&v zu-B<9l1_aoO?0D@z0T7j%{M?6mEEW)tDY<`~h8J45dg>S@V6IM4C zq;`>+uZ;|H1T}9WD9GGkjH0hm^flrmd>YUnBQ`Vu~yobvl z;?N)9BokZei7|hp<`i3Sd9ST&H0Z<4le)Q{+&uES_l)1NU%($wk2 zE8b!;oUX*7|8@k?lTwZ|IuF{Fn{j!MC5fx7HzB8Ooujs(D*p-EWlNXiJ<;><_I3UA z0z5zIz;-@b{SMAPcv+4(5xW+P0C4Dkz?Ps-T6Dj;4y}Hm0KY^Kz5H`StM4zsV|CJX z7w3Zh7$5^G8spT)c1@qO=)9K@oZ1B*kUdA8U2xsYd9{xr-`5xeWI8#Zs0sQcxC;_J z*$G!QQlEeY5t%`*COG$W#h0~Uw%RT@668#C(3`FG=Q}r*FxaA?9e2(WNHNi3i;=v` zIp(4C@Gg{xwwkYVi-G(CgytHDR7mW34nE;lytzJjE8ak_QIy5Ksf0t1Jqn}Nt%$q~ zya6t^uq5GSUEPYEui!5Bf%bx>=e`xR1&*+8#WUyt5+~;4w3HkaA(=kex1t1Hv2F!# zl4IQp+FEu!xjuo@dD}I8vTsEd_DJOBSR`UL;K5PgsT{}!Eu>NO_*QglW9Z`z~JFfIPrDAZBp{2J_wX|T#CEhgWC z=mNK}kUyU(qMzmu4iViN9~y5dE~i%-JQZ2$6B-bI9X&pC(Rw&Fi_XPlhvstP`fhQ# zDV9D}P9{kARf>Y%u)OQJ4G04MZ)}JcH1L0<`v1H7AM*^#*3S4+U}*qrow_E|evEOL zKzbEsgoBdD-)lIO9>vEG)U_pa)kO(QC#}ThiI95v8kbOoe5W&*AnNOz`<*P)OLW7# zstpJDR$}Qg6~`qG;1`k`4)neItolB9GTaaGEya>p(&J|JfL^t7214b!4Zq^3Y-m`m z@&JS|j-K>})hjoJ7)Os|!y1)W({(Bi8m3oXSWMUA=;3bYue=zaeakS^DH;xU_dpuN z^>9HLQM&^i2OqA2KYtAOh^!XI4?mjOrdk%Gb&8mi92G@auRo5(>ZLc z!KAnW{0=!OLDmXWeBJkr3geh|y@Ve^N;I9-(P+r3ebzHK^U@u4g(A55nd|&2(wglq@lU9P3No#{Du>5pO_BdZ41&0zTH8-*H`d1yc~hNr12A0>+TwrdoFwt zl6!b8GMIb1Z9on<3u70^poemYoqOVDXxiVn?D$+s!gxM3_w3mmntSq(K%oXwl)@VY%nVSQRe^k}(bk$4k(sVD4GRk+X77p6`^u zRRLv^6AHX^V&|SUgV1HA7<2^Cn;=Rr1zEXgemzYl!*~GG!Yo<2=au8i(sBUn!z@|3 z$BD%#bo<0U0EaC|<{ruuA-RV_<-5CB7S=wrjj53C{kbfxORE3#)&EWSU)+t8Ram#Z zr)wXe_<9;sDx&sLq>@!wzgGRyV zrK`fa8S;8)Vf_aJ-O|n71sAc3hRedSl50HMJozx57NLY ztfRkBg*8{dTv$_VwOW-lR;yJZ`*kU+{68)(jS#z+4L)dR>$Y!N=`1F7?6j zf+dL2_6L{7Pupv|@Pu-wzFlZw}R0ACYC z@e=eYn0wqDIV<XN#pLh|#%N8Va59NuF+(Wh!S8N80u2}NcU{~xY zhRVc7xZOhTn-@n5-Rg>Mz)F5`6qnChl4!%a>WZbVfqom>zm}f6D^@oRy44l)Of;Ai z#W1u~9*5o$wgi2$yJ8ElyPw?^tMR%N@vt83CyDQd>>{-3ydq;GQ z{eK(C5^_LM6ZGkS=!#v$J5k~rFvo2dY=oTIU9tJI(3v1RH*mT`AjQP)immD-N= zIolB`*Gc$g)tlE4BCFm!0MV*9OVejnZ;nNXtWM5EeD>{XgK(nWY=AVd>dn(|5KJqs zHz~GStyiB__2$$aAtfK(osg2R<#0rQ63k7-q4&U}5iI#Wn4@cpaCx;Qi9V#;CEpLZ zO1@wBNKzaH{v$bgj%lmp`z}|>_d>FSguWe577j_q;uHpl5c04 zrcq818PFPAdRWQVd5|WJ^a4OXFrtibCkUOKN-rxTlcBw7>0u>bm1bxVlTWJwd`=L> zOVFoa$+sm}$yafO^7kyDE98U%FP+#WUn+VR90L=#Cl*JDUAyF)Jsw3ixh+Zekf0Dt zR>?Q%Yh|ekfVN?ltdj5e%V-3Vr6B-bv>;jXQJ&zEZ#$ag8b4vRzF(+v&)!`jxrY~1 z1Y2G6%OgMTgt5J3uqDg~bI;~zLpzJhS1d_%dlgyF&OKdo<(^*I8j~XLPD}#f(A$wU zyVcb)SMI5S(MN&=mgsABZQ9N~)Atx!XNqhWXwQ<)VY743qTPlz6X6nLp}lVDVYz2c z7S^MZk);4uSx~UvY+gr`Ms`6vXz5|O$I)KJ>k5E71W~*MeG2BD2Dx(2gaOLmWTbov z92|J*#LhkS>SDXZ^l?I|qL#txxx$8~Zs>`l74`8hsaiSwmy~)8T*b?-~t~Y3^sVE;09`wBi{uiH)i&nkaX}N}`x~46IX>o%*w(8A}m`d74S8r2H>15ZN&(2cy zpsF{2y07||s=s*&K?)rl9EV|8{;ulH1?WkK_BRJ1R4xyKZq=LbAcR)EIR>ItZ=Ry- zs@^m(SZ>vuk@)PRH*=}p97l%K;Na_U984>&Hz~GSt&T1=yt8v}NXf^$!39gce^IK7 z%`mqUhdve0bg<;>pM!V9aQRnD5;IA+OTO6OLwgL1lXWIV3@XsPIP}>}TlJ>FwAEu6 zi6tNeiRw57Y}zjQE>*--AKZ&}(7KS$VY5rV$(;?2a)KBMZK9=zm3#^Fl#%xUEVZCu z$ya|aN=-7d1=?Oq4=edT9jD27QN!Q{K@=}RpMoXd-CQN#9<=i~@QFzIG#ngw>BKJi zdJR#Y*91_HprBp5}88N&E^k1$-5NbrvK` zKFSkZ^7UFk^(G}rt@T*($o)+n1ON8WG8Hi)t*)kZ@!b4F#xQoSkD&W)4-Wo=HzN{p zIn9#9OQhSm=N(QmYiN07XGw~Nz?+ei@l0E}=MAQ<+_M2obqNw9a2jLNcJ3MXr>0G& z$kLepLee>GcJA5xhopio=}aKnOR?x8#pl6xpgw2nunqm-^1 zor27>N5oW5I))irE#eGKTT7;n>6k27x+GqkwZvGq`+ z#j&)yHqLVxpO?hZD%!!3jcXde7D0UB*t4&hrZui57f<5ljsaTZboq*l7Iy(mW50vm zHX0n)xQ=o3Ce}OJZnE5yP!ws>O_YvR}~3`=dJ@K{KTx z`c|TR9cS?aLVJ?Fls}Pl;sZ@P2)zr?Cg?MS(RK z4q+cY0ke_J3??6ph2+DhqQKNc*jgEv#SxrN+Im;AR=%~Kl#CT3*KzqiNyEcJ@T_iy z;C0B28;!zvHttn+LDy`A!K8iRHS^3Rgv*S-2>0fJ2K16yt5vvc&gen=l={2l>8LWe zXAjM3evGFs(iGVHBFgNBj)lwY*i+Y{%`ZplT8w!S8%gIe@7F-v%e>~(wODh_B;+u2 zZWQvD*|RumVe`$`FchIR9)$eB0eRW=2?gZ2MHG-uT@etCgVt!;YDHw4_la0_n~3`u z4G`uVO;P5X?)jJ>FkLvC=5J^!In38^J;Iy{m$6!-$d-omqO&;~V+Q7yNMtuNHiqK5 z6ASiqvma8!Fz>&G<ncwW!0Lw>AZ#x5VEuR-HRWn~l z6eMQhA{5usxZ*a8V0bmwq!%9I%(Ljbc+3O6(2dd>IsQ?}J;5w;7(u9xZnI`q#aWn% zwI~Rgr6~>tycCDu@q9YW(@8pl@HTFP(=6MVl6wjQ9%WvC4^!0U;&Bv&e`=s*Y4*kV za31s1^_Vg=XWl_q*WB_B1!2KF9YGk#$(?}oiZ{C%*!69=8c%65LJ2q0>o=*chv6 z69t_|<9ozre27SmLxn>n?5DWIC2Xt~(HIva9?@whuC}Lk`x$%?d^$&;ibB+)$U+oZ zh@kZ?QMAM;f=*FnFp3J@2%49VdY4Z0DS{SXMA7<}2$~IY(ZGHLeT|~85g*Vs8m^6^ zPZ2at6jcs+Jc>R=P%u(YKZRPZogPC)elL)s1S%UX{_CD7UOMY}=|4&1ZK+IV1-N)N zmMYA-bd~3G%XFrzeb~&$!K*#!YJU&ahdb@7sk_I)cum7y3K6o95 zSvit|K4}pY@iOyCU&m=&A(t-gmuWH?`lkh`vd?*po;vMAL_1N&s*eR|sYPm%S(zHI z(Pdu5MVU#Z#-j%a=}PI2*8E6-CnZyN(kM8R}GZ-FJl-fJAG)U#2 zCVO{u(>9EEAKH1e3t_QgMq$;L(hREs9;b)L8HL%Lb$hYL0o79R8%M+ z)hKY;2VeulEjB5xs1j8FMQw}dwg`Q3fo0rX)$%fU4pyY_)6UE>65c_>s z&AFU!F3Q42NqZx>P|Yc%e+ALphgwB5$GuL4>YZdN%3GJBisE2AE}Jv3e#Bw!t4)<% zncY<1y7N0sqsn^isyCUC|fL77g*>oQ2)aBIDi_F#^c-Tg2F=%la};R3aCxxpoIYvEi|N6sqQ~w6eGspZ!*P8*zRy;jjm@$RX)a2q zVtFrUNW`XkOzMw_WRru2meWj+CrK-Ed@)RA>k0I;dyz$GSL~b|`7JJa!(Du9t|uLX zR^(s2+we7qM+)#D>Lj)Yk^4i%xcDNz588snAg#fw8J9aMktLwyi+4y$I# zSRE)0gX%8qb&&HTTF$>w?_nthxm^fl ziLK`8SQu_K5j7oM0g}Ilv?C}tdlz>>h^Pf6hmWCZTa~Mo{spUJ{I3crFb$G!NRym7xc0hAeA& zrl8==i4`6<9u#8QLhljAEO`@gj}x)Uehi6%c?tTIFy?MO+$E2Qj~J_Ig}^L=zB-Iq zhqnWB@(QmjPDkOVYrCKy3}gPi4?FQ9J`v+BWal#U8y2I*k3I+!3BpqpWgoTIV$u4R zbsIe+O3x=e^N`g^FGqSQ*x{2Fzx_!>H%TP^Q5Z`~MS;&MqA)7h1<5fq=VAWc*^?0Zp3?CyQ|C_1Q<#^SpwRF6VXK zHUFF}M!tl;m6*n0H0N`p;C!0y=)M~PJ&xDwIL(F)}@ zk)j_?gUE>tFo$Qp?x>I2Lrli?H%a3N_YV5GKzCHXgZ)IvYlNePPAMP%@hOC(ph$exX=rpI&(8=8m6zNA3i(9&Sd=4|@vF#9A#C}VDbu>j ze{rM5=R@x=2ipi|9F}C)|3;Q7TLjsnnDErvrE4RI;$pp24XhH+!A`#eF~T;_x-5gX z?-FvN1hC8RSp;m04N$f5A5HonXw^hpOQBx9Sjk5~Iw%P{!pg0K0 z0PztRu*oT>$L)Sj(pNyrTN_5=x3O~C=*~sd2J^PMkL>$`?&*rR94U2;@@S%l=Lp_d zsuDec)#ya+Bjs|q?s>nJyxm4$+vQ}+JbYsw=kkzPKNKl7Mo%aG(?L8?>?d3oLR~F1s;&dmQSE0YLIV1Dje=d7>?r5 zzoth=N(~DS#pH;%jLWwzNzkaC(w`~(X-Rk&^()?g#KBGly%ewX#`#Ko1HB})O14g6 z(Mq<&&|+q@qH8d=N5dRVAPYKaEgC%cg4Pg>gZ9+T%q}o@fRYD79!6%iQwSaOeqUyb zlsOl$k{=hu3`p}yrU>xuRZPp2Z5Hzh^vyQIn*>NZtyA8>7$@8L0s1+c;V~G=v`JaD zQZWypN5H7`i&Mlw?-FLVO-UYtb@dd2ROqE_M%rPfUCOkZnq)GeH?bLMhu$~LY@f2Q zvGS`I^uabG?J(0J#fR29`}I2X*)}8XjQId|dKDgv;We||D8_RU?H?TMgUlz60;90Q!+_-9 zOf1A9JC&gaY)0B)=DFmOLNRTj_plimn|~>|1CzJcRm@A!r`Qa)qa4f(N{$(WW)Jzb z2>NQ9k$0P!A<2EaDLcEMAG8@69%f!hc2$*mQ(T6A+h$~V9#Q%XO*Tg=zw-Qs`Vxms z-JlP6k&%CE9+;PXB?>FXh5Vj?L*96qh}ir{%N*-Fgb_`)Qxww!kAi&UZIj zHULBp^o}+o?aW>cJL6MM{Gzh@FzAzr;m4fp2(qsg_=~{Bh3jHAi1PbVFyd>JBYfgr zM?Q?=5(aN@viC0XAc9X+8b)JhfKx8 zNo3@Z$&=8|z^6DZZblibVD}~xF*vfNTeOGg9buu1+0tWV;6vqFE=_BhH=c;fJ20ux zGTucKW16QUHj`)>>*PD&8Qv4!V6USPT$oy1M_6f@V8r8FTxWc46_G$jU47`nn6hY7 zI`U7#XI~M&p`B>+RAipt(Tk{hOV`>|R0b2!SZ?!l6b+U|dWzS?mn!@v&U2s!-ny*H zUy?k@SW(xe8hAMn2b^cPqQ)(Q()Zj1WJ@w&do0|Nks%O$7xT(co0-l3}1^7#S zPZLC}O>O?t%yV@Sf|J2t+IaE~f}1+|cA|&X#p7&+;MDc*!I$2i(iDRF9O{9d0S(}$ z0e^YHGa40nn}*SUU&VSIPZ6wKYtuL{ZTK|S^U^eYX%gEHU&edh=?7~~BlpAFE1qJT zU@bfLCw!UW8A}G*=7~TWyx|#z>5De)6E8uT>uH`3N{9S^;>-J<^X>7aBL`=N=eq|m z&?$;;?^;h~%)+(l?4p6#FFd2q;Y$||+g6YJJACODc^3wDYH?5CHner}ElK?igR||D zMJ(l`^0+OsR!aT#5-wlT`EotFOeZa3B&gH}cy+Fw!|>2J?*P(xz?U+Hq*AAK(6n}c zNyo1eK%<*V>)8=nj2!-4N*WK1vh~zMXs)ztBnQ>Ek;XoAj!P|E9c`}WQv1o)$Z>Nm z{=>F#I8%>Vg#U#98wR9apy*tdA<9S15B6}9s5TT1Z^-MZORxsFT_wQ-*;xefcnXiI z(^oBm@^k7_Xl}GCDXD=(aqPp;)SuDbZ&yqXPSfl0{Eoa9F_bKvL6@jqjKuU><1eghIIbEx}Qi0(sAX}&LMe2>^Qebpikp`413!-RXgZ}k`_ z{*xDPKZZ;_Kp`D0O?^oKr-L0*!S>>3W9p&Zem!Oy{*$S*MB1U1P-=bji`os4rXJXU zG!XMPV)LCIW8gm-@LjhIu%0^pJGd=^yu2X!qT)b>HRo_s5Kj05oT~5h8o*_#aVDiZda*&mcw8RIkRxt zb{0%7x`r9I8$vrGUKpTNZU6u1x(@g#itoR(w|B{1>V@>qQ4>N7B_I(Hr1v770HLLL zLFpn$6+r|<6cJHCL;*zwL}>ydpfo|H2m&f9QdAHH5h?%gdo#P6{f@?+pYBM`t}&R^zen@y^8*C?-0HS_C}xs-8+;oLcJ3)QqVh$ zFCx92Cm>8XUqpK=O~Hk12I9R>3;`{Yk!0^(l)>I!zDW1Jyb98yL#HFZD|_`AUF#ha zK_$9|=J^BhtlH9tcmF-7^DRV@U#M2~(XmvxIAiwET`Q;M+)34WD}nntPtTd5WLcnW z(5jBy0K5-}cU}44@M*7fK*slwuR4ne{HpmE=cBCV^!}=5q5AjQ!4YgrOsm9cX<-p~ z5#t0;EfrW8{nA_%b1s@dy=ELiXc0QEFf(kgx{5F#bvEsMZ4O-9W}%0H9ch>> zc%F|o3y{f|h4DCHn*~oV(*6N9rV3-%@`%Kzg69{<-iN?@#r3Hnwg590Vdg?J`tL$d z-uO|#JT^YAPJSP23y_z_MRUv4+or@8onM4XEt>epFxZlWVX z#z4%es6FZW6bk3xAZ_mryWU7WO7e!kO!Cer&|pK|>g!=b)21bTD~!Y`B4h-HGLDEv zSd`e;8*)^PuBr7c6BW0mHLR7saY028R--!h^X;4L91AD0Bs{goOE41pmUWK)T3xq8 zRQpzRw)hAQ3vkVog-~(JpT)!bRt;KXiO6>Tu>}^eB_hW;<5Fo6xz0Q2l~c?$&oC14 z0mq_g&=pHWOK1OIp-4fIv1sQ!0Q-}#IToFr?HWJ@vxs#hg7#?;eR~AeLNaAS`a1u- zEh$n&zVl#rb)}`3=5*>xr+l1TV=>$6A}^gsXbg=Dk>K$pzNAr1!QbL>Z2+85 z29p^c`sK>_6Z4^bA_?hqS|FB#XA-dlC(YRh>qqlt3?!F^|uC*j$Ga~h1hzB#s z+1*7wQjA_0%ojN{s-+tj(eyiviJ7QE##1;ujo!!xm(g}0 zGTs>X4g6z`%gY^_&lueb`-K_4F6cBHZGe_Do&Z|jcyb)(Z4B56T18_=3(U3}w99=h zBO%s-@3VA&AC7#+TIhl_k6Hk!i}aU1(5Xj-x{XBM^&H*O!p zD>p(K(vpq?&EaAZ8Fh6!Jg*|7AV$+8qr(1#4?tv8ehYY4MMm9j<by7BBR>>h1`ma zTHG34@yMv1*kHvQ8TD63IPynE6(2=jMMe!hiOh<>VUcVIi{#smX5j5gz`XuVg0B56Dh?}$ia zC4Q$HvGESAvGKxX9WHK{KZaZp6(0_vdent#_-8~V)x*EwsJUPxat9A_baKDJ&Bjra z(UH?8X&x%h1HXZjLG~(9p%^ORCTa(5cPnTbT#Kd+=CQ?DP$&f7?k zh)%|8l5?5#vc~MIwg9_WQ5%ts{cVq7EIbbhaIO#X7 z1&2Q*BGL|Hj1t&76W1IiZzD-x3D0>fGUL&?1Hir}ybR=P4vrSSNt3=pjSl|??5c$a zJqmx1>~Dl;^CIZB;9Ky2z#+q?77o&~PYZYE19CE@B9NLUDr4^8m->@P*zgB@dV`T; zZ9wQ`k~ByEixB^_NEq`Dsv_aVz#g~p`WW5H#`jw`&&7Noy^>kL=Gpit)ST>d!k0Hl zI+cibfUUK0YKAZ*n{+8d6}bJtzOr#H5*I|sr*EkuaS7OU6PLvzh>OKV;Tg9YZzL2g ze;f|Z1NO7i99%dqi4b3NC8Z_^4+W5vC@vts2~YV#6u<6Z8wEwDbiA9Ep^tL!Vn^9$U*xC|Ty>zK*Z9B*Nq zC;Ly~X@mx!@hiZt+xV#Z2!B<0Uc#Uq z7M@l$R7^Vp>t^HRHkN%&czQw)u>8k>jkfVk0}#I(!V`yu1dKlqY^jNh7e2&m;rizo zb_ewjU&x7q=4Iw)u=WKqxjsAoeFC|6Q+TpIQ)&Jgtcxa7i{@wE!53kn#blcA;$`ro zSmE*WqWO73_crdYo>w=JC7(4Fg)iHsM?}w%ZbYIZSlw{Q{EPnOP2e6q_FJ@lq+i8w zk|IBbS!pTanWB4Y%vWiD4%lJ}%ld(L@0Mx*5=}{Vs_qH>T*c)hu(lGDYkD+G^66fI zt{tc7EHGgSP+FL!Wa!?npzN7-hgecW|Blg!>@B+Y47|h{%Ybt;w+Nj5@)svL`ac*Q z*;{q*+?I;k+M>!9|LY!^wJIQsZzEfNQ!o4*BBb0SvmZq*TMxN*m}C-VU`+~m zM}K28RK6Y%gMrgO#p5(bgQ~E3Oh|JKoCFyTN9MdkXn&{x*94Y>gA1v`osP`t&X{K- zyc4kQgmcj>!wM?c;mv?)OW89Vkl?1R4C^Mh!#fr3o&?RdAy!Kshxa_3LkL=FL#&ZP z9Nr&~OXxEj8bB>Vq$Bdt)3Vh%V?kjIc^&T5r=;cb51`vPWGvYeDLc)P$q~~$^j;Ds z!OZZGCs)D~NLxZ&TZ~aO9|J=+7WZ6K=3M>IU2-{J#fgfIi$c4|#l}VMO>REX<#9o0 zE~>tC`k8bd-2;*54gLwDs?bGVbXqtJ*g3d<1&4kfC;0)7i1=3cl2}aA!(Pk;!?IZm zKbj;aR@h$TIf1g^jW7y|px$7rrS<4ZOe})yHS1c@7CR@TT6BA?wzQebMUFLyHUlPU0OzZRITYQt#W$Qy9eMHQg-AR zw99wzVxYHP_bPZ2nZ$YhJP$eX>?e02X~q(iL}6ToHqnil&mjfI3bfvaF&O2=Y4k@7 zT*i)-WKQ2nz*Y&y-ZkVBToZimm0W=!%@D%N3S$1w6S za^y75!_IXX^YI3PjQT&r8aJLB<3K8ILWy~d#y_HmZp?z5P-8!y5@xiIqEuXjX%u0s zMp`0`gP&sR(Kx)87ELwBXh#_%w>~^MjK}a+VvK!7ya#hM z5qu0~7$wyx6>T2S(Fg3=h5CSZAv4Wrw^!gDPeE+U8h^pN#Aocrv{*SKEJi~g_Nyo1 zlWcUx>#k_5M7O1q@gHpW%Em32dKt#=P(_)>ag@6%#E&d#){9VH{Eam^`HhLeyWFBexcO zyN$_Vnl{mxjmkgCXoq~8Y`i}eGrLC17)E+7;nPndfs?<7Ix1t z2GqtEhmB=UO`C6sCYVk$-YlzWFB#7@)U^f1UG)E7Hm+=PXbX*{Zul7*6*f4uMaKED z=-3*S`#7}4MkiRhuNnQIeqJ|j2J6}q<4^3kwbU5-CVX&>xyjgN&e%Io*OnVu+coV? zt>I`a4wF6kypG~as_^x@lG-{q6s@iC_b6Cr#!Z|ZMwPE<<=|Ni3pkC??WDH8M>PvF zLSPgI8zFejZe#6hq_%d3(<;g75mez%fgfgkypdK(&YlBRZ#4H(g^xg`^%_f2WTT9C zchf*mL!i;dnF3N+KrJlHUn z^`^)zc$Fe|5mR=s= z_t)37gmX7sjl5dJ$}X&Wk;>37rqSaY)}hCT&!)$}f{LRX(Y5LENqAX?QE?5Fq1G_2 zvK4Hus2_r0-&dkmXv9ktEEVNOH@vwtBHrW&iuI;)6zjhD?J`!JrxeFQLj@aUW2q&m zinGV4k8_9-yo}neXq>~0{ARQgvJ50g7*Q`!mbO7z@fz#VxZ45-g6y42iK32}m$@^Eb+zxwAk$t=dL*PdC=$zYMywJphDap zX+nZOO_R+*Tf~3gSJP$yT4=$ML9nFgq-3;AJVi3rfUwab@#k-(j8^f_13v)hxCOJT zl!RNyPXT-h&~*!Dqgh72P2z+n@Vt;vq!R~6UfhL=pq}0~@g&(RRe;sCaIzy5-Y#*( z6Dad-fOWHQ-Z)Ik?^?Ce0mQx-*k}tUn*_rblzH8%j0FBHpqDI|6QA)93T9FPee)Z4{9QYf39v`~>WRjh{y~%G)HO8qJcKDjZNc zZX7E8v4~gRW)U?IgSH(1a=Xs6j&=8--)InZ>xwpzrajCutFP8 zT?~AiD6{r&G|W)9Vk)qiHvZri;5$T8rCsohqx@eEY?Y0(J-kySO@#?Yg-Cn`Y_E;8 zMf{ma8~2feO=9sAunYI#yF|JZ{VLwQ&jEGo#vva&+xQp#5dIsH^a|uKJ`vc{Hr^H{Vcrpul>NGyeqbwXyya%#M@5qVd4+EWw%f)B zMd10zMbf`$BW3!5{bJ*v48ili6-jC6xXAPabD|=v_vb$Y{DerFhDM+9G+-5M{I$u* zzmp>AR#TP#jes??@mHztof63{wxU@f9o`SvU<*$jK5UGZcUmMb_!?6-z@Gv%&4Pno zi^Aj2h@=Je5OfjluON)t64@989UKS3_aZ5z2MAjL?g=DBa|ZkHl-gYYE5@Cj^aGdDhg>TI&C6i1vg`LYsg8vl0hJPrToo(#> ziiqqrQL*Pgn7SuLIf5`!-%^K1GvPl`@%kl2c##OKQ|P2c$2ILsF>V5a^@y^&=F{DlE(7v+Sd}N~SvAv@Du2wv znnc3Z%S+L-UdWJGH0#bZ-B<9QDuSALUx@u~=JvN6_~6?I<)beTDWkJ=dP z%SyWMr)w(n|FkjIm6dhhhnP9%aAD}3sLWtJnW6heKdi!K*cj``YP#2*fLm8aP7B zE7rr=w$nTm(#0nln{v}#*X64?Z9+$`Rn1|T#;p?{d@dflCOGFwckVigo+IEI)zPca zjH}i0e63v?>Ku*8)JgOFNnlJ%>P>WmfdTND$K_Tfb;`TL;{XN^g32*gLBpdbM)YsR z>*zbw$&8_II^vNZ4918=W#>&i*5gA6FU?@psS-uM4et+7F?F&cXr?PTVktTcb*e?A zRghC-gTW}qp(m!|84<6-I;c}Cq9SSl(We5LNoX3Ox%6ekI`uuDr^wf~49MGdSo$(z zoyHz#qRi;+Kz7^cbc%2@Pjh59y@u03ej=15M?822QEcZ){8mc-4~RfwRID1TL7Y2B z^edKeP5@G#PzuXyle9$oW=x%4>Ae!u)ZSWV@EOmj8WN{pw9IdIo&I+W~674A4pe=!#QHErrHXth&g`XV=a!9qgGSVR&~so2Yj)`k#f{( zs!w6{F=qqt9TrE*QLCvA&QhEcz<;(lQcmK>SY0x-Y|8@}@IkhS+rS-3R`#jYRF%+* zvl31Q zih~Q4N|#zqwZ4twK)+ zdlAqQ3ufWwYO1lYLDvJ?X2G0Jb2Zi4i|~K|blQSBJI&Qp6Q02`C_uL?SPECGsbbLE zj7)*gAr6^%nTcvO)w4OOT+{~M$l}PvtJPG;F%ZIKrw8zX7Dv9+E~qzHP4)8UO3rxT z&sZEON3EvH#<(%dSql6eizDTz)l`QtXv5WE7w{v*Aw9*)C~!5^+WzY5KK3!Ke|q9S4`TqkXEgnzS+WTfM|+l)-I^t*dpL1unrsd zZQn{bI~lQgk@n%Mc*JtS`!#(-7{9l)`7UfLFi75}{Ya%VI|r#6iPApcE%pJAz(9}< z$)_c14IuL8X!=J1su72u$f6~DHk@GckZ)&+V7SZ^qaeMeh^GG(%5Medr%SxL2q&Dv z&$hxdp7`Bcc>3LF`bRh3wSvp1GkiOo{!!@tR%rS3&n}_jwH49ypMqbqg3G5f-dcpy ze+nOxUOEG`B-+2Ae}1jtPGw=_ltXFFmrKnwZ)#aw$fah%-ZSX2zIG57&G;hSn??ef^F?KEA_-{07d5;mNkB`!sOQ~}0loZIe9_puuMB9d`J$zF z2oy?wn_wF2>F6z@i?)2x$vf#fp3|N$I(sA0uI6{-i!RtW zZ7~aw-TMCch6~boY)YY5n-3hc}d@4d9EO-ist{AYb(Io*-$1`J%VCB}sdf zFZy^7lQchH^wp~Vu^w0BxJ*8ZjN~%OMM!%_s#yK@pzZ63zS#V5X; z2%j5w3ML-hnK-%l#Fv9%8oC{+I7Q;*;uBxCL0{N?flk+Pa`A~TYnH|33Y^@3Wa31> zT;qK>@g@J7Tou5+x;W7I1%9HU)1gJ&_2FN-(XNBa-b)2H7>l3uft6-l-CMs z-k4)hreP7ZWRf;K{TEl^jwzs>5KRwbv0#<(`k}`$39ucvT(pjoH_D?mgS=55p7#-c z*B|=|;GgJM$5^m`$1f%Zl~cqrTI4ZAVo=v8ii3ylyJ#im&^9mV+Mp;$b=(l~IB8YC z{SCZztc{vkchef41ut5z-RooDF1Uuvq*E7)2a(j%CcW?xv0V9Fm1xskPL; zJ<^TaH{|WD=50a0u$3RqY16&{p`*?P?ko|gYRgi`QBKQD13?$zbajUaqzz<=Oq-Kak3kE${-X9wAC@#u7juOtA zuIdXj5Nsjm@Fn~1Z~ZZWx`^+(&_lCRp$&a!2B2^Bc)HDL9=Zw*=b)CNx_O7QRZHuD zS-U}Pm0x+57+^#(%LLhz6R?hOOBQdx;=petJu@r*d4^|Z|0AsOC!Haa8GD<$% zy{I*6$=h_IuQR%}4^e8LZlh`GyhS5@5YH8l5lwe;Tb!O~kJEHI(Y8#uP1#V^SfRi(g`Abrir^~of#Kc&Z|7UEQe zPINDwP&c0{Zo;n|I<>^fMPH3^(}#OpbaIpCaM71h+$ZV8zY;g&S0y^pr&-*;5cv=Z zCA1A`lQ+$H1Zl3FKwSA)Ug{n)8K=)Msq8*XC%TtTsGCp!V0ha_d+)pH^9L?Exk=Bs zNfo(hlX>?{3=O*Z*IxQ{j83%6y*mXb*GQ5_Xd4Pvsgj))w9&XLi1IOHF-`>-sCJK{ z6WvQE)XkKHjo^h)F2rL#$#oG)be)1g*C&X%>y=M%nzaq5d`N+*lwCs`oZ7cGX0eAf z33&z2YuyW0`jCf1v`A+IOz!)FR^z6Jkhseje~Bze3))s2{Z+ass1Y&X1r(YCK)=SJ zj~S2pl+94B`0D6lpTpfhO+?lW8M019zx@d5s*I^W92~M#eUPM_h%1XwFsp#jAdo~| zYxSUd;nA2&=m5Nz#UZzH1=o-NdA6>V0D8iL*$vXUEER4GxzTyB$$1R)1>g&bGoDi6 zjMuTKykXKt>SB|=S_|l78?K`v{f!bzFoMec{KJ5b*)VN|SI{`=zriZ>WkA<#_yXox z3LeUsfaZXOhi6~|Tpa4zeRlwElCk4MO~O?H)w1E?PXlh6aW_v1Zwsii4S)EEQ!8ke zk-10HXtGok1A5$sBZdKPp7A%PRvCU4(DOE2Yc*otvQkJfT$qr{VilnGZJ1`F3R*|c zt)luHUjX{jhDRO%+$Q=48XoRO{0iuI8$Jf#f`WFwZ{eQ6uqzXT061j2;|Gk?3OZ-B zybg~MM7$h;Y9=U0f}HdL(t;itIn7|(QrcPo?|cs@34R0xy)tSvFw+nGag(DtLqZXU z-WkhW3Vs&Q^EOQGoCSU3UdJpXYs6K6Hkq)v(iIP-9fmb06Z^$ISE$w&d=1iBi%2!5 zG;u)cl2;V*KafJIs6>leqXLQfWhcTLh96xXr0N!t#wFEL2gRlBmFq1Uyeg@K)7EwlzIsW)L zFskMI2mVh0M@5fxbirfs-;Gqn$Shq;$H66`bT%__cziXt>b%wmsg*@66+I@7^j$xp zi1{G-EuxGbb4JHM4V}r+n+|+I0LOf1vk<)}Qf_^&YQg&;?XrlRdt5tIQ6Tn{DIaFb zAxv=^%&Qig<9IK7LQ3U1N_B)(MbdG|q*FxYkfxL!7moKhDSiwp5l6W`n5`^!srSgl zDe>#^wMQoAgEZVCmdYq5PK!U-R7so#(yJDcpD!QX{Bcx;XHs74r;_y{NV_azsYf$$ zX3EP)REkc6bTyDzD*eo!m6C_KM7|qR4MsQ)nf_7{W#a6V{%FIPSR15Pfy8^o&P^!~ zrO9{m!5nU}?@iXclsX4gvSxv_G>}+IY(J_;FQ&XXLW$i3=3a|kDifHvASDtV0}g%` zq^lOORI-@3Fl7ZsHkcTKNrNODrQW~H{}xd21+OLyKIzcN=SI{9>0ygV%Q4w#)0|_z zL4)vG;`xOzpMr3=FG&9T5ouSff+cak-BR;+(?MErKjL{93I)sJo6W}>W|H_mNZap6 z9J>V)m&aFYfQ@x1j^BcG{(i((10iumLhDs|o-a^DKAPu}9aT3&Z!8-|0qL$Kj%3?f7&jb)PXHT^81?v*O zONL($30n&Moj^`V*e1kmN61Fp79lr>LFo37$uJf~2z}7JU~@=o>iIY)#o}UDYX5IF zmLM*H|EDQRb5109cWOyj%)OE%4@MRuad1Xx@qVHqhPP72j&VoaJqe$%w>4iHYYEvJP^&#GmMPLOds`te#0M(jIFds14_GFLdJeP`aKUCiV z-xjW2T|mkUAZpI?lfgMxy=oO9Ib(oNxrg(9bwuy?>K}cl6o{F zLHJIh{IL}5fQs8;=tbBGmXYB3+Jc@U@`taac~cc6F^l5O{pvC_-&@dIq-Cf^zBA#R zKWs*G)=43KL~7!*QplJ9A*G+xSEN4PU#h}oL?UM@#-&Ww!sTj_r9VjU469b|AB@5k z3>N0fa_Sw$t^5KtxbTsfsSV+nc^LUrI5EA?Y1v*}Cb=9r?wN-?x({%VD0U$85SaKO z{QU}NW;SYp7XtxFbr67lXu%}6aCSuR`M6U9x9j52XWP)+2xmRiZJI~yW#uGDRXJ>#Wr zqkc`{wkjPR*faxt@i|Tht$gFePMibun+=ooUihi+w=Xas!K$(@G7bmF zO1>EC0~CJl^DTtOJSdfbW(P8yRK*JSW}RN?(5NRT+5qo%4~ME);r^^Y+v<`t4EVTv zI8^To4`wxkUnI+!5B&A}aSmm5#)KVnJ_i1I07pjKN%gGo>-6WYViu9I?FW!95s}_k zY0i=KmNym0$U(0Uhs{w$s{Dn=v)+S+#!syZQavKl+fy9UeuXEqGLNg+cLLt$9u8^0 z!c$ol9#L{e0iP7eVQpJ@ChO@_*wP!hxe)Nm0E&Db*Z;zE(ILn*@d*fD5Xnv)>yN_o z(c9`FhNpp@55%3M9}0i-6^CdtO#;Lq9I8Z;tyB0%!c7civ#pa3sD=si))S>{ox&@L z2XA2U2sPBLKlEHfjToS8okk#axF2y68jr#|3FBvAqkpn>3P2hWK-3&$>l8XgV%a?GNJWpG4Z^~E zNYs-n3={F?VQO%HVjT#dSR^VdnuAFZ!WZB68Ms)j@b0gpVx}XE3*lj+d9>Ra6&g z<$h5^IbVTw++=EOD;MS`aUpry%n@1X9TeUd*gy+stGIAbEjEN5WC$156SZG~yE}2j zvp79(ksV~}7S-0es9dcazBvM|A&P)KX5(ax7d|X1Z83Y*&jNei#%X}Bu$Azw=&r^QRs;LM#%YAF zu(j}Q2vYbyV25p-#t#eIh)Vsjs|6Rvi@>hfIJe&IgzpAsWI25vv}utzRQkB(ZZCXC z(R9o71FK=-O{lj}*ilrQ^^~kYY*-d{7v<9spc{BYOfJ_WS((^~E1X)|h%1~X63EO7 z);v_KUAO4OzsQVpErZqKrb{=eQ5T)uq$^!iirnL?;zYk(^eeQeQfNo?#zTv$gwrRd zLW`<}(Z&HO8JrGJ?p$aX^4L!6@{@=^|+)(-qRcKMeQ2NAFXi?)(`kYi~ zQPWWRepG1D!=d!8sL-Njq4Zs-(4rQh^!caIqL!gw^Z(YNKk)xHp;!5T+t8?EgtrUL z=Kt+OJM;gJq4a^J(4tPE^hKq}bu)$5I6LUuMlfTGuuLSrI5K!#bF6y$57S%4X%R03 zY1+R4@8ZxKz~EI#1?Les*q3Px{~sKTh{iUY74a={IU7(53vLEj&NQ+b??zv#nTSVK z;YVeMSAR&;27x`&3gN(@x-1QnQ_neOJ=Q+~f6d}>f#s8Q6HJG-QrswY?Rj`*BFWgn|e943OD`K7|Vvc5t){37U!|4B{yXV;qBTJ!!y$`-M8}4^FeXZ!rBop036;^J z_M>=Q@Qx-jY%Y){gmMwerPibP$>5aD(yOEwkp31L!C}XTf18fVdU{#yh(WK6-)Rqpkp@N zAQ$jv;i+;{nn#xb-85mT+rr2#x_FE5bZjpzfilft3F1&sAiwD1ts>%iSj3d7Y(Nj1 zuvBDWEgVqWy(5!;35 z&@JqM1Z;629!4L^DgIQ1yobqNQn(v{Z!tMqOm)Ppc&G3zL7Q_Jx4$zX>0%Jpv^>P` z5)r@0%GdTc@SDVuS-7VUBEMfmJf!AO%Rqf6;E-^cyW8;aZ$#?DD`n|u2#9k|79T3^ z8osGf{ErBsxM`Ih!)LgPZ-`*>ZwM|&Lmb8b$`(H|@>PuM7AJSThM2#H%oZDe9^eyWD2lQAji?T^zuke?hr?yG>1i=*8Zj1yI8?it5 z67QNWDE&lYAN<6$X7CbU5%HK)Dywh`X?crlmC3rP^IrP#_oeYvnXI)s>(jfUd89a) zad%Nu=b{9-seN@(yXdCNbUIad1D%fex*s`$sd=dQ9|mR2fNp9)Ty%0*qhB1Ff6*|J zd-*Fk(XVtmx#%*kEDU7>Zt81bUzu*|ecGXW^BIKi#i1VtV!5gJhgBrb;PwR*65S!o za#O#CrFP;DFn3E8R0O!G?<@yA6#VZtBA@v(NBg zz{Mnnj7iH)Jq=@HCvihe14O$CaRSuv!u-B4s~<^?!Gb>KtOUN^;sm&k=K%2I z7Kb8dxv5`<;me#W!2h#2oFk^2dS|%AGbg$g9FcIy_((a*P5sJL73X@un_3(xN4cpF zgQ>=H`T!qlaikpOrvCOJ#hC&RlEs&HF0G2DL3_NKdT_r#JcZ=0s>lY!BV(#Q$IIY z(>?~Y(}HCtDmV4T`&EbbJK*Omj!e9AQ?C)P23hU`_n;2S7cVmrijv&aw_@ImED%u+ zcr}Y7m#gTH9oBHXxs>&1tf08()r?`*_3Tu7zV^>RA-WL&k47!F- z%1xa$474Xd-a`*??Ziv(=QkOa-9Ls z{lspZ_}3)>>D1J?=;Y>K2VjP|NO8MP%)`^@^Qo-3O!J&=D-N_~*mfLVv#B;%#_7b4g7Q7O$AfH-k zY;YIrEFNWcu~Htw$CJQ5ZiP6GG)c1A#Y)8_|0UqGaGj$go6=J4sp?`q`n{%6qS8PV z(`g01dF=uO^PXL}4NHM!u z9|LxH2sFD`k0-*j4R_zey${VmRu`)eRt6jgdH~4RHmbT>H6wr%6$m3T35f@e$ zYaYHubPhLyJK){nkf_=#i~~#i+?k~ZLGj%7pp(Mia@VzAdo^+ zfM#~Fn!k>He}PU0@{Ao;b+IPZmtmIxSz(1WyI55pmFOoxKC@7>i#2QyrmG?OJ0L$2 z$_X~RSbbpV6Z$WZyB2D8vA%+P520}#u^SW)m07BbH56lQgw_Glz(UO~)`<#2>wvqx z2%*dp^q#FQ*3?TvD*-gpgf+8^wY-i)n}NIYO+?5Fqqi>JiL%|UW*T>~&VDGX*BB6<36w@L<%pUFPdQjp#oPm>(c9Uawv07lry(1chqYgQNQidUwfJMg~5;r9||cCmV)8%hZr4QRXtTV1S|byo-3@#nIO^$J7;bg?F39E+NaGFE{N=wdDZ9>e*7 za|x!vc4HLS#X5Eyo1hUM(8ZegiBwjPn}~d&W*2KD(o9)mcCkKFCEJX?h#wkuV%w=_latoIoq*1#ji=|G4Y}`!(i^%LsJM3dnu}{*7ge_Fy|% z+!f*7FcXeLJ@)WR@Xg&+v*=k&!I12#fNI$=xe@rclsj5OZ3NU7PU1{gNl@g7i=TQMx$!zs~-M3oHhhC zn4d8Q_ypp}@=abF{y&r7D8R7$CMjB+h2w`vN#BJvl`vG`Hfm zKp1t5#7`joMMQd5X_sau-bo$OUHNc__Jl734oPHpCg}jm#Jj2S5y~OF4oJ-`qU|}( zTYUR9QFe4QC9)q_MHZ8sU*$gFeqF@f!b{``P6Oe^0Fv~6c6^VyMZZ&|ZX2kW?}4?+ zVp2}Zxqp8UzB>&2gZpCNfbdfQNr@vb0l!D#^kBEP^qUzsO z0xR2M%5<=}P!aFQRS#|pLZ1MVdN4T^_#;I8(y@v;8m#FSlS_n}&L*Z;q_xNFEhlCv zSRYtS`<<{igCE`uyEm#R?gQ(n#gtLx2SkcEN7NrfQe$#nQNY{!1AtdU!S+Sj6UiuishdXgyL%CDr40rfeH&dDl8CpQOw ziir0vQ~C84s2^E$j*Jw{%rp_-V54Fl2I~ilSt@6lSyrS?dtGJ4O|U!|`n|WbJIF)9 z57&sn{bg$?%7azgVwQS3GvOLB_GiUx4_2PVEcJ9|Rubi7MyL!J3)T#aS?ax#yM;eP zq=bK_a`p|d)>+I_PiJNok+LRQ$vgnokAcimnacF4BIVc0O7MT6hV(Tvpj2d;SzV+o z#>aA4Kn1WK2xQ(XxTYw-@OQpNZwu;vFcO9|#eR!5}d&s6j^ zpzgHjjmMj1vIBl;?5N^zDpGQ~D=Xm?sDJ*ybS@ArMEu~os_2B|VJriOED$VR3g(yB zMx>PcPsO7SSd9ain&VR_M}H>~{{U<#u4=tN=x>rV$74^Rf^`w`SIa7V9I#0?PTL&$ zyNUQt&no4#2-s2^r!A8FJw&_@jXlfX3~YyuljEAdw@ANQNqMfF#Epw4UdnULL0QF;~yw0WyixNBAYW4tU3WqjXl`>gGA*?ZIlOF z2M~JQL+XfaTl_;r`4%fw{TKj_^3M~QBTxoNhB%4S4>nHz zQvMf2=AhSA_?y7Ae3b>7gZ!oZ^F`*vQ3_84mTu$ZFXewp`1}v4`uhN|#x_p=QvL;^ z+`NC)wwb+v^|x{Im-4?X$_?G3@NvK<*|@I-!oMO?&wPp@H>5!<0=Cq~X$H=}SX659 zkWxaMf$gwy@)7Va6TU=4z6)^@*bg>NLsHoGUcejI?eqfVqoX!4~ zqFgrYelEU?fGxFf_P6q{7S%ezH;?4AE0rIU@pK{m;r$y#0`=2^*%!;dQIsD#U(?P) z##K{}v|%_%*vA-*@qa4He1WlWvO_}XL zg0^?_?-r>ub|@cTuC6vi^Uw`f`A2Z#U)1S#?Zsu>_zf64&utk*AAU;ciZQ#I(P#if zWQ$3LmfInu3od+vF!bP^iy&G|xyN)Z_g6iv`T^)K+}VRek3yA@wtv`f8pbJv@XSOd zr?>b$@QcKWBM$x25@`7l=TL5t@EpN7zA+g3ABQASnxwQKKQwP{gm4Z#iols*)FBo> zj-%6p2{FRCArl=`U>!|dtHn^P2;T#UJe40aq0+LGh4bx5l=bNV7X%OlU1}jTU!FT8 zC<1!zbb{ zz=$DcqB!X}qz8k@Z6>#~@cerkxlsX(8WxKrYg`_4=ZN%SdD7Z&&_sXkToG}0sWLx$ zBg6m-MR~8WS(*F1h}cs_;ZFjaY~xgca_5PNSQCF0*fJZZ3Ya@zcn`zlgDdD3V4qre z(2pq|b*d}*}i1`jaB1EA$H>YPQoPWqazr(tZ(hq*zK7|AJs(*r}A*Aar@P+ylaslY%HF0<1s;mcrFh5*j1PX_DC-tloi4)+H=m(tj7>PofEC!J|NZ z+M;vLm115M;TNI0nYje44+EL^3jRlgXP;Lw{u0zPfppFR8HHOS-1W6$-T*7OI3R73 z`FbC`8YiO_wuK+y z1dCuNM6xRDo^Pt+f%Cyw9>|ifk#@7mO-4Z|#%tUJ#@;{{3Dkm~M$?#^;Rrk30Icu9 z_{C&tL9M4CaWx%bWzb;||KYxPRAqt2YiD!wLTJBK;kb)A?%aBMWbDHb0*e75z7^O`8z&1l z_eniED_K5XoC0>%!g(EX?yZoYN$YTTB6qwV`}-DHh~Nk}?A{0*GAp<{kvl<;Jr2#x zcm}ZQ7S4T>+}j}+Y++C7$tfZDt`9h(8%}+QESm;e%aJ=#Pi~GTk@3;M#@jgcO>!sc z$r{G<8D9Wwv5iyTBzLl&9F(ELe*|o+jf-xSaz{#^U{$-10Xs)H>u%00I%y7OPSaz~ z!A+kPj5Z8|Ksaos<{(o&_ZdB+1G-Aw#8d#Gib+!V3_T_UbBWw!H3Qa$aGBiXXQ}Y( zF&ok}i4O)=Y~y6==RT`P^n41I45^r>fz2YETSEuqv-Frf7laJI0@yot_)X)G+~@R| zb?6H5^LGQ=Z{svDn>$> z(bPunOM3W$wVEWo0m7R5kzUrrd&34}NuPsoJbI-}O|x3}bRmO5AC8s~hbny3&(D2d_dWp~$X2Eg zSY^Ux;ii6m?pi(eLI?Qq6yV`afVH&4GrmqwEQ#LvuIio+HN*_iebp%MMFp1i2sS30u*;@k=`c>}M;i zqce(e?p8fw7!)|S*mr=rF(fVDAe&o~^obtvAqE_oR1Sn{7Ku%+tVi48N!#?8Y7fZr z-U4`M;!q|@Q@a{-cIe?dR?6aD41BaDhaV>8?9^kbX32s)7x*Ge4nIrE*`S zTZ{V=YlkCq`UN$>$OC%~Qr=3LF*eNJ&w zfmaLQC?d6YIe%w=iqgQsT7c9!fGD>Y$+@2W0#rD2ih+;5heLDkIXALfz;I&DT;PlD z;n2i)&VLmS-`2G^>0PY{zKu9kNK|~7bGyR9g^F_=_^$yRNerUxLvrw;_3Lm85Vyey zhOR6nDTwwT$4{~&kQ#ZO+jcyBrbKl;y7nS5*0MTCUZ`h z@I8gjEpfzSIE}W*Y%=GB3tzVdg7LY4Ub0{|nRBqNeM5wV#rwcE*f^QYIg!Hm$zMwR zAz()>oUPQHQKeQK=XgbCJ~RSx#4RE|VMd%y-kd1-xo;N|PX^|*ak5f#%81OI428p3 z*P7TkS*bbEA`^{^4BrP>zKv7MniDI0XC|u&xADNH*f_PEIdLL0t|2!6q1;;x>_q z$FtRJ+IV2knK-Ldb26To)kJE!9g6uDSRYx;Qggs8vxZ2mTwgH{gY|>OB%NJaX0}NE zerS@R;w3rl6 z&B3I4BF+7yvc^Y%@RUWOC@NBYk=A6CA}s`AxkaKmWJP*Fq|JRxJ?;|_zOYEV+a{08 z<~%5>C8MuJHc%PPqK8F=t?$T$|BC=Jvq|H~k?@>1MERdCzylf@B^3u(W!4x{ZSZzG zIjcniH(5OOkn@h5dceAElH+cTUbgtMpv$;6)0|plNovsAsc>-?T?Y)+ zf`VyJpOPHUO)!nuG5)O05Y_)i;^bfB8Db1(pVi-_8DbE$rB+}Ct%W^ zb`>h=Ct_%S`awTEhz(2oix`^67_|2#JYj%HAm2f4)Q4DLQod|^q3y?m@5;YM!~TQw zbV)|y{A^8|Om@SlN)sGf=JVUILpxo{zs95P{EqM8cJD6(tGkm%jZ4E8ZzlvgayEBI zV(mQ;IWNiwp9LySA0U$QQ*;t}A?hg%Qxmd}5H4^MnIAO~9RRxVGaEdth}$hqNZKSa z=;qL282Ax=ffZOdmrsdr30*l4;U@r_Vc{un;@J}48heJuBwhoy(!#kCNc?!j5=2yd z0_+P5=bFSWeI>u9Cc`FLh2ro7;44JgLh0lr(n-4XmHd%98GTXW3HL;pemHERG%HH3 zrM6xtWr?c5>)pd4lcD5R*8U!f(+PN=`*H4MJ?E>M@JtQ(LN(_;86paa!E`ad&JtVRkN`gdMM>GUGD1X8y zp~B*jrGhic!6bN%-KwZbQY{dg29RXz*|sPN715`g;@$KFV^9D~W80!6TtsW5K^O<{ z=|F;m++a(hgsYAQHVkjpvw3qD7@muc{_&JFwk0P7@j>u_7aErh`8= zA-)Ipi-kv%E-Z-`Suf5}4s{`uk!sE#KCx3(G->RT1X1js z3xU0EhCtq>k{tKT9R)2CzFe zPHlThT^L&ERkKkSKLsrT4i$fD+e>m_I~-RTUk_MA3qLJJLJya;5@pXG6WT{8xjlg8 zS$J3wY^M_JR&t|@Y`Vq(nqb3U!iBh`4L&1?MfLRf1%MXYaFdnD@3z8Mrip|%0NP^1 z3(?CcX(uwSq9;X4;0U0THaui7p4~w-co@An^40tc(7!f(>nFgSMBSl3$PM$NP}1UY z$dreb3`f*Di}G_H)HG^lY68l!;F!hO;HjjGh<3b;u^`;;P7v!WrIC z>2z{6dlHw_2E>)AC>IZ3oB@mf5$MjQtzv7X!$#DmK?)8%Y9^i`q1I(%TLVhM?TRKO zHbS7acvv5Xy4e6&a|;hxJZubw_U{dBh=u23TEbd9Jf{&#Ct^Jbu%OfbE*`G8LBVeT zUP)r&D2C=YuC8MMCK)%xr+^L+ObG~FJbb%Yaee`Q#o`1k9?tHA5ey3Hej558hm=E+ zvlb6`?X2Wf1zykMaE_RZhtqc|Ih}y_u{ctWT0Hz%S&X~Tvqk}*WO1aN?#-Z8d#8@R zj&Ts;yaN19izDSQr%&qPtBUgp@GmTml;f|!i--R{qO$Kt;J*?_W}jL-TrFRjklJ*- ze;f){i-#YH()j&|G(edqEMzRy;^Ay`-06mB3cS6=k+I-~!Tyw+h$(Z10v~R1q#U() zcsDkaV9qSy3oMS5qZSWO!;}Vd-Uq(f;;@g3xp??ljJh-D8{lUwPQc>f7HA)s^AF+A zsAQ{jsl~%nprV+Q1iYffk?~QBhrfwe&uRp`naQ!fan%SbS$pE{AQO>KFc%NcY^rHv z0Zp}F7H%#c&V5nWUIz4r1#>#h#ltCy(6E3$wP1>^W-cB+-PNHT1@wajOW|tqa8H=U ze*?N}!7>xo;^B9`RDHX6D2j48xLnA}?^KJ2|H@WvNG|Xe7KdZuMCQRbNSX^jLvBa< z1248XG85I};e-Du&NSe2Esm6<77w>=uBzTj;2Vj<)tuxAl5Z^@9tpiqisU#rVi|M| zpVZ=E)-V{&ZV^V z`sG>$p8Mf1apGUw(XC0RrBW_Bx%t-wi~+i6U6Q-1529#OjD(u2F{t<`YI)M|Pmqw@ z)YSiQQT_QpF;rRBS!0|-(--2#avbm#)=F&; zdPO2s-!c(VsOxO%KolF`ZgUb#u#BQ9(nU^ONju7Fye|6M^Y*&vDm8>Q65u!rvjv?1 zYhCom=zGn<-B(OR?6Bdii2UC$4FqVX1@ERV1Us^DQ`?QUp1O%gnd_n-Plf*%*q5yk z+wi8Ot!l1|o)3pm2L|!tad33(E`nU!mY5!b9ZMRe#{MQWaz@JmQLsY{Kh#_o?X3d(O>z@a-ZkZ-Mv{@jmmE#XEwkct*+ zu8S^Q2#0vwZAJ*a#lUsZ(dZsi?d%J9pcU9$7rg@J8ojnBflM|9SnHy%E!8y2-&cSv zvBRo$(d%+F4*M~XPpq)!y6BTJ7$!p4qd>m1P;*`MjVe;|UqJpPloM>Oi|z!kFnX?c zHq0d)Dm!S>9a~R5d`5NnFpYt*3rL2Z`=%1ZkT|wAV!+fMO!}IH1!6^E>8s(Rmde+8?;} zw;jq{7rpr-nc^@ECzrt?6;qhGF8ZB563zmYO)v|!)CU33e$zEG;x0NQB6QjuBfqK7=_;C0bo0Y7eX>~+!8 zPdK#SaQh#ExDW=ei;he}zCwA%;V6Y$>!Ls0gN`hHI!5@hQD7n&M`!izX%T z|E!Dt0BwNTOnFFXt1f7gY3r%A2o$g``VLw=YBH(-kWUO)7rp)$33nx!0^5yI;JWCE zu#}4k4_Fud=YLXJ%`_4DLd|v2>ESZRtaZ^xWzXA;yNjAS7d7B6N`;#mSr;{qF8;t5 z-Akuag{kQ6@g`K%P*nWkww-)8H6<=OxmVFI7Qw$r5xU6EaFJiOo993I7dlnx=QgjlMYa&2$Q|Tv{avSS|#bmdoq6v5KE~GjN(iKPZ%Cxr{;I zd>7q)8>cn&V=uwT16mHOd1~Ow#U~Q#DxwobDCyvO#BNx*==SrGW+JfVGOV)m#~4KM z8g6Jn^e%MbC`POr@6d)-kM!-5OO4}!lq0kUPJ%Wd)g+~E-2d@)9`I2V@Bg3KE4ka0 z%cUomMkka|L(zaB(xq3W3WVMh2q_W*s1y+q5JXWC0Rcsjq6ms8h>D;TL3%IJ1*8e` z|2#9hv&sGW{&>B1$mE;kw-< zoaRmCf`m(Gq8;P5!R0Un*Okcnq`sKrl1iVW{wAc(jt7ni93l=yUXYcd1c!#Fb)Eu2 zO(i--v32!K#lH4LN7Ds(+HVfl(d05u9kd^PWOC$%TG)*R4}2K-I8(!=jWx$%qoh95 z3mY@Q<|{7egQJhbMk)P+c}UV{U|%UN65{wd6TFOPIkvV^6Uq00pCZj=3Q^<@xicv& z=NW)8tq?wd$ODZOTKQ8%o#GjQi4dVK4`m&trdcLgT^*Ac?pTH3LwKMRGnVZj>S79+ zW7rPhir$gw#*5D*fyP=m3vXkNOikXt+{P$5d?wIbg}wCQzme7A|A7nh4jRqa$m+4A zb9oCX*c!nUWT^LrRv#DzP{KVa3=4*Qwi9^kv2{*H5->ZabQwa{WacFbsRIFw{k1W=7f@aO`9)VxX zAYC7v2GSqoOV#Xq$glUwwGgM*=#RyOQGqB)Os5Dr#fgkMpQ95+$fq?x>_#<+_;&$n zHVHyJpW&;D9lho864q{9AHsnjQi4hp5D&k|*{IG@-G|C9=5OG;rbO21Q7=T4{|UbW zgMdAl#*4$DImiHIs3GYV5!_1N;p)Kklte5_h?ZegkBD+u)FCUKfO{(mO~5hFe9X&? z>g~PM-Nv3qW{m@$q$Hv$NJ$^>qQm$`3?%OYuT&BW$Vibe)i35zkTmrJH2aiJ6iu1( zO`+Iz(Lc7}6!H_vxeN`%z+GmJ&=nC=`!{N6M2%r`FG&o9rARC?LR3W=zu_?zzrfdj z5WlB^TNaZT@e|>WjBQm03#XS&l4D|1Kb4Vu6T&6M#YG}1Ea%3) zISk8;u>1{#dzDz|idd!>Tt`jvj@mAVXO|#+Kw^=iBH1Z)uXvMCMQIop_6}CPaacvb zNS4q|@g7_(?L7re3#BU(F1@xpYP#pZZ?Z+|15I{uooG>H@`d;fPkrnjBG;J^eyqeI zMgHPho))`gqqG^qJxVN6R76Z~F^`(-X;@p9`@bOkPl-iz{l)V=g{7o83YDuOjv{&B zFMiik9`%%58$sAriT$G?3hRe46ZXkMJrcq^C8ifInMd5!k784Iq8-9roejL0B%-{C zcQYxv%p>w@SyT;}qHs4sv$L2f*(7^J%9lr#MB_=iGtk_6f=;zHpP)H#iW4;|ZYtZp z(Fl>g>9%H(HFwecAjZFlU@aWl=#LO}^P6s^b8M^yTsxVBXIr?E=S@t54gwmla6T~K zj)^E4WifZL0YRB_7d`$%{fBy`@}d9cKX-Bc9>z}K`;|uABXN=gRb%dgzGdWr=oSvX zUj=H;UGxmcb2#D?_#WQ>!y%GZGy$y~Z=A<8Fi@JpuTuKVxr=i9rG-|&U5iW1xr^!0 z+jN5F+{KGnpI!>riEx`@dQx*2M{l4h1^p0YsYQ*si_KX2Tn+jy$Tp(uaiQie=61m( zF&vJ9oL1DFyBPceV|U=n7aB=527t6ghR~MUG&GQAJJVP`xG_5=@u0(>1B|=Eo#hNR6l|e1i$Y0acgi$%jVq0$75}*6kJn@ zP?6_UQq~L;39!)IzA{E@teI57Gyryz&G!*|z2`BJlA){sHEEaLCk&$|FQ#?xN!!3<*$c z%0f_!M3n8K%F22xzUfxC2Z|mt+|WTwX$8C4fGCS zagW8^MLxcew*pS9Ennu`#eEEnsoVM)=r;?Sa~Ji_$X@Lt&^5xssG7SNiRX6m9q=Kx zgWxc*Id_p?SK_ij)l4j#1~qrFA5(HLIIcs0_rEroRh_;=-dUx z&6>NQ!2ieG#X~uFAxFqm?{t~{$U(|#-pGP@!K8HyL zH~rn{3iqP)Cd&zF`_`H|9?e( z?@BIlP2i_+Xp<<0=8F7N=)k7Hfp-AvNthB)d`149U0iCi!6zzBu@(8KJBFQi!Ivrx zMNX~Ax4&g*wt)YlG$KdL75N|D!8SmO!5Q#tN+azUEApFW7@B}3NIDJ~XKBY+k?%dl zh;v2oT1q4B7%TD@v78{nY6JeF(nvcuk>VFg(r4l$~UPwE}ihR#7qo_Xx-hwounvjorbg2ALY?UTXdS7I&U{J#6b9_aLy!#nCm4QnR;MTKhot@WBcQe0 zpl;a^FJ`w{ao4sE{=vbYy!A66hIb6R_#s=*{yJcTj5_(pRT4U~_&@(d~ zJO>vM%P|RrLmR&ifmRnNE9BX2jHSZ0u1WYL!qVp$$6pC(YFdN!RD4QP7^AMh5RG+= zodHoM1ml%R?uzXljHG5eemM+28|;0P8#AfR7a@8%q4~dZMxpXA!M`ER3=xM%e*@?0 zd&eL}d*OV{^e*G*sQd%W=j&&lG4Agj@Q2E~gME!(Whn^CMK4B~%_CP}q78>(eT)az zC+PjY0;&qWc+gvOEH43}G4XQn)jj zujthV08NAQT+=5fHFK22zMst3JfqrUYXEs)1-{Pm9)VJlIYn>rJ!`R*-G;f66T5o9Df_GDzd31NAW@gxF(@qw6fzrHZY2FN5+rh9iAAGUWEV4AS z!UC|vN5qGA^zTrbrIzNcuzO}$C&4c(%}Pr%JGOfolXmQ%;?WO>O#5m}Gbe1i8CH4l z8cMU?(##Fpfd_dJpXb55D9zWF=IyXoP!)t`BzT_EY_T-+!`x<^=YW5pG`1xwpWh2B zZ^rp6@E??BQGJ!q3&XHWScY{J{DRV~v^4LBJvGLN5Bm%gA2?*%2TWCVJ_vhsm`gjQ z!K*0EyHQH>VOU6pp=k!*L1|8wB@MmXnE6pylh+K*Q1EP}5er6AvpCF~VZ`}O@OPD_ z1*YZ=J0FK_GwrMc-=Z{~EzOd!`xs7(eEt*sjMDV6G)u#74=}=d2p+J?OglD$n_(>r z>ucIc2Ct|zxt8XW*m0)jIq)`0^Qxs;9##&GtBB7)@JywdXK7Z1rJI`9!RIN>VoS3! z>=D*Jgq_vko0KL!1VdPvhnvEhneo{VenM&J<8_8+bJ(+HKHmekeQu_meo@fSd=s_> z4>uyLc<^#cL$84tns39r?Tz>}0B@-@%h1Xgnk`|^2ZM<6rZRM{)H-^|4WiLMr(Iq9MeP>)| zJH4!(xhssmhAX0HTaBgEnH^)>FDv4yn|(cs}`5wqhy(f%U8u%1>Yyj7|Sw`hEm7u@;1SoQsyz8!VL9x z{StPLiwmzeeLgNu1W|nr^ZtkTV=_;Qi*Ro#JgQ`#_E4u4QF3g?XqI`#O{p#G=s^zgMLXd>qS=_21jI%uLJtp!t?-@)k|Mg#<NbU&wOIl+aE2 z8|1E{;sfbfgIw+NedQvb+Hi3LHhDU8wg;-CN|{AUQJk|jIVxr^+K;zS_!<$>4&OMf}3 z#JCB#>91rVp(5p+Lb_u|FhfGm0B&+~QxE8-D&wX;%uN-+O}&ttx*0cB12=UPZt4l# z^knHKztNK>qhgOq4G8}dBiZym4qQ|X@~+3qUY}~U*qEAL(c6tDGA6CmLexJ8pcVtU zoUvfNwJ~{t<>7dO3orT7%ZNi5rHrZXyYLGWul_I>1vRE&ROM(I|3lxA3?;x2t1i&9 zA&2k?Fc7YpCgI{6d(vmKpvh72IR$LC;L%F6?#T6n@HM6F{;6O3?nS_{>Y(8k`pq6(4@sK%qoMy7^R#1zCOz(E@DZ5G7&9y> z1>LpKy9&TZBrV=A?KyfNpfRI;4~=(<_+`ZJZ!?apKa~bHUfiO>q>%ym!YguB+&F%O z;?H!l>ZHG&;x8&oE!GXiuXjWTI&0#h+Xg%|Ho_nLQ~bf4&G2WZuI4qbfP`T01v!o` z<|tmb#QrKGuNNoM&n!50qnoxuQSpW*otX1;^0!S9@s}WO9YYl7Zo+327G1pbc#+7X z;zR@(UGEt@6=O2e{f#vl`2q5WC*hf|3=XXth?1=}pg_qh@y}KS7H1q8jU2NG8Q%_BadIl*R!Y` z)dy;BVlHE0Oh&%#!ZZ_U`hX8p8W{^?GP2y~@;>ud!DlIrv|~(0{=CxAtN>rHG}4YS z8F{px5ue@Qhm=M>#S6`-1Y3PWa})fL(iEGFJdL{~;vBUJ^Itebt{CYuCL=dtNG&u^ zfj3qf86RUZ@_t<-te)WgOpTh1tnv^WV&FQ-Br*hZGIHl#jPHOxQdk%_CnHOJfi3Vr zTNM`RG$$il-N62Lppy!V>@+7MJ6=Zr5A;}JY20`{s7xrn7_b?ye&UdcmziixMt+aa zdx>&U8~j1ZBeO0VWv3f>f2EN(wFBx6CL_DHFgm3I@M%gT?HH4hEgl$;1B<~| zDUGyaOh#7z$EY$pzz>o}RCBUZd@?cwlL*w1+<}Hi?!!2gPR3-UXkjpb5y9&efb%~z z=*}P;1|TyyPN#5kUW8RAwNuWI;MXa1)L^>BUr%AN$bI8?#*)QfbaK+AvnM2?G0&zp z;xuNBxcDm{mn@lD=45Jwo&P}WUJ3Kb;x9Tm>C*XuY2Yhmfc$b{Ag3Z;MXO%P78t$Y zvJG2v8$?dri<{3Uzk`h5g4b%-FXflKk5{5 ze1PofV<6{5IK5}e;$~xCSa#>=Hdvk@huVbc4+9S#58NebQ5ph)r_ROkGqW&G$nF|> z;Wc~&)ilhea{4Lg>=%=CBpzECqoL^*Oa;v@-Vw>}5qSXpG-b^P@U#Sn7EEy+NxLwz zdwTj-!gm#rXB&x#RG_m)icayu@=j#JOF{haEqDZt$sXa>@JE{PH!?g7M$&TTA-$vG z$y?g^7ZLR62=VwoqQ{#6eM|IjE5E@I6ZgYHq-{V_MoU@fE5nlP>Ak{UX5fB=kMER? zg~cp}X$Jn?G=8fWMj_&2>oi^x#b_*D)c-z&qLw`_d@CMV$G}n^4y`1ms-hq{VQ;)` zV>98pz$7v-&wRWfnVlc`Rb?i!s32GC?3Y2u`?|+ECdfHw$QM?O&!c08df91&YYoP&up=?fY7it zgB;8i8g~7mow-B9G<;844-NY<)yV=w7xT6m!&y*hSd*u0EI2f*%`NPL2@PA=0>2^_ z8umjrHj#ve-A2&~3k@6k2T~LoHV|tb5ust{@T4CZ8g{mcokfL){ny;d9HC*qAi2?@ zVIOpNpuT6tRmb3o(Tj2a$j^x|7uDwM!;bdYImSQ6jah+1t3-F)71tkk{D|WV6idDZ z&cB#QK228_UXO-+fX9FOnEo{rb1DIH>?zG3bBu0)B5lJINeB*Mo>voL2pf+bJF%|7 zOM#^-F8YH2!SSWAqa=6^u#FOk9#slBcMPWlWB`s-g3s}k#-u>wjsg#?+tR9WqQxUM164au6k^-GO&Y^Jg=K;GY!PAx?h&z%{6ZkN|aZ1p@5`=I^ zwK0g~8-VX9fmj-nLEt0wv8XxxbHJ~aps{5klskUG2#5a;cti<0S^_UJ3VZ7K-+&L5 z-~~$%#vQ9LUB$z;;rSnj%!h%NAe=i!)<;Iw0IaVB*_I%JJC31B^NxVMlpx;{;7j?3 zF{#eS08UVXrdV|}ax#iLvQfSH+klIdK&(16-~c7au>>W!qvI(EUIv_^1Z@tX>6NJ{$sJ?S2=eyPY%tpu*~Dv0vjQ6KFb?*~XfN-KkS3At}rsKg!Z(Sq|=0N+%C z@m5Av=8m0%f`~evIN%^;phyO0zbH^u#3Oo)h+2a4A zh0A_{>l?C-q5D%{jZH547G}GO_gJ#KaXnz7A?gLeU=mT+Wr&t6M@T)mKDmqWFfkc| znSPc;aDBM0VfIHnaV&>mof3&&NCua|^@j}&(QXJ1kw^q5MZ=dNxIx^zy3mNzEeP(L zmY9tuakB?=y=#*3yb=C0rXg|2j1|9IkUbPX3Q!S6xeDCVh>5OP{9Hr!aIWv3ffCdb z?(Gz_F;u_o5!^c?)_5Ko0yc`cykYd?QrV-py8{*sD5iWm*xM!-KUl?V^t)2oqq*K` z2fj3fZjrBsV3VJSe*P&tlY8Dob*0Xg{{g{CKN0=%Q+5^)y%&a+0}?%e!10R_9V58& z)ez?~`1y&`MqVUAP{tH7@q16%V|frwx=p8;!Oa>K|3bnn^OJg^Olt(dp$2f+wG zQQv6@X&eun5o%*Q$kJ2@=J<*3yah`+JhVXqLdk<@6$I-{5wlgHGM&dgy{_T$Vk&OI zZm|6pr_V`czs!SkX3CdZ_%*QG7O#LFGkZMu{)@hVcK!2^ooEDb7`JFN{ACyLz_69Z zSDjM9YFhlk9E3lC2bRGqFpURzYp{+M|GE=+ArBn46!wV^2g|bf9ZV)>PvoAjCn9~s z-vFCqar(Ax_9Py;IUcVrr%?LA)>-^aHN$y7$Bl|-`I)8KFLpo9u&b;?E;VceT`#NPm$WASpBqtAYqhq{k4)|>b$ zuyq!{?ne0U;U{s>NDia;?*`j%@w2s&KMQ$ixlcIjN&FhvZHu2;0RQjv@W~gkLxJpv z>_+-=80r7!4ftQgy?ImYgU^Oj%3il-YBkt2@Gq#9$Yp{-r2aNd7!LpZf{V+Xv z42Js{Vxnyp>yZH)v0|LPjOz!eZJiGIw&__eSk@5F8K3cx+F#)PJg^PQz#TlwGMjk5 zUBmT3=)K5={|>TV>j79aPJ(vMM?7%yct+);<9lU69n6N%+&D) z9|$&F@qqIa;Qs;FF(hDoGTdhp6FDPC6+-Zs>wnfnwk`o&tps9J5%KjDSZJ?BK0eLZ z)^8B;JrERm#1r4T%kHiv49DoE^+8HH3COy9#tR;VebCvNT2Pz0^fn!5fxlzv6Ng9w zCl?leWex7|JT21K4-<|Er53mhL@XSHS6Kra^YI03j4FtCR$MGOoW>eu_J>+9%{4GB zKui`b()2nt5K1nj(Hn+3#tHu0!xxiA1+65@LI*DarC+56{sj|xTu&y}nd4Wz6q7&XFhO+YQr}5>jwIQ@u;$K34 zLC-4RA=fX3t9Kt<>BO8-gc=UB;m~(E-g4pu41toH$R#O}OW;Ks_CY)(XTxKF<#rAM+34{I!Wh!{v8k zVi!VALPWFb#+Yp%aSx$2JZ}lV&-H%29 zhvB(22F*Do!WY*y#;8?*(k$F?34E0dzrWqE-5RK)!mf@kxR;I?f$ozJf^!xjN~3In zU9{6Rr%Xf)7IOJiusMEw#$E(lHX;(U{CqjsIzL|O0C>5G>KG>QpTYJQ=MMV4hn$qy zc%-chg?bhIp3-y|+4DFbnhLSoKQ%PoKky+x95S9#BkWX+ZCRR0J89qzlt$cPhp%Eg=QfqH8y+>mzqW3pZaNpohq?kb~5a2 z2mf7ZXgJLr!cNuLeX|Wae}Uij(_F{6D5rXAZf6XSD1U-+3dbRDzV|GZoHVf$iFs>a z*pO38T-d!OsaVt&7cTEJR0!&biy)@=MbUDK6BTne{pF^=>P118oD<9gYGEW8Kvy}T z+~c5`=2yU{Q@BryDG)><_AdB7lPqRMES>T!cr+7H!T+< zYZ6U?V78w~6!X#$;fY0vK7-&ZKanWsWq4c_Q?wU?V}7D34^Upq@uU@4{-YAf??Uj1 zM4|wc5+%I?4-}CrC5n1QdF3i4%6cVv6{K+D(7C>96R1nBQ~d z#zbB{ivQ^%*XQ}TH9{T*nvFxd31Xml&x+x=aj(PqJrh~Yylmlf6MYlVPKx5Y9->Vo zyh}D5^zq)@B;OQli4b@{&|wSH1W0bOFU)+w=oZj@3n#mrEVpD_n@MPQXc{8yFg}Ne z!!W*gorC3;ifhpiIY_t~P;G@>dFX6&OZ)zO4d{6|cOgVcGn)7rSnkR#;~P2$EBK*TLR0Idf#LhUsz@!Z9Wn505K>)({q{cD2I1Np6aF!3l)?Bb<+z zKCPVNrS_t*No56ZG@cgu4XD@=GmZ}_qC(`DgV$JdE5>GjZIhwJLX=8E3eDf7R9A{k z9bm+*DU@B5x`^3!m?_RptuO<Qc|VDcXbTS9PkhPH1w-mxz$R| z!IPM<^A-3HN<(FuIc#m9sZpwf8P-wo3x1jm+=$#-zOI-}$ykLl$B;TF4p|%>=b~^s zYWpspF>n%484FY0&aIo!xIOOHF=R`9pynp#lx!wC!rZ44dh9YZec(FGPeV03_vwT~ zl@SB7^D6i(r4hAIbYQvZ;ge$wJ1fA~`)OzbA-6-t_ut2OjqL0O-%lD*L`r7&W4WDW z|5b8e7R&7-yDz3w7COa=>Zel3^$Sf=8XIN7X=fm`kY@5CHq;PyI1Z;@~hg(0i; zL0_+T4ZIR)jfF+E{?oU#i-CUu`rX2!S|5%t^B=ZHQILNDUAM5P)<@#Ylrp+3*KsTY z;*ep>YJJo<7$uXJf^#Y%O1g}?OH}J)zD{xAjlf#_aZ#<0>w6O@{a}MkZdB_N6<^qF z%=t_NnnGBlT2|ImUM&@2ErjzIrq3dMf01f^+M7L{Vg=Pfr940pEmEz|#LeDql#m+` zIZha%`J0s0`fS{>Zw+-Kl&MNx#H^^+=PRaR&R-O~rVzC+CN!$`g^HsJQPz<0dE{QLS$#zPy!7Ocn_QgDov4UeLLbCn_;IA{Pp4*8_gT$M)LTyfyTVyQV2dJktieOs9q-+y>&UN z*oj7G&2-8kr#Mj+cFPmWznk2m^29$eVD~^@EZbg6JOIr zmpTdVQx$VPzlpQFlD^TjEBJjlFDFFNGJ4c@#7p^BJ&RW9Td<#tb4LU0zsM^SS974z zVV?%SNE#6>(W~Z_i@G|AvvbHH&QD`Bj>CxcXhb{3m-4+$bPtIDr3s2`i5ZP}SMa57 z!ZSVkj;8?{DkvVd@+u`>n!;HD#r8#@3={LolqaHZ$g7-K8uQ6QGah`ZpN0xiUX{f2 zjcii$5%_0HBX>p%P1VG~i2);*Y#Ol98XsRV{#vTw6)+O+Nltw8L*}Ov+&c9$GC zlI3+Xx}Y5V-QDbh&LQ)i;zWhfO@F!Rujq~q@JYA4KLf6xLm8!uyd$0kU!#n!1YJXx zZ-W@#GVH~4|YfKB3+OuEGOcx;cG|2)pHh`AaH2+DGbp= z<(=|&oMja8RG^v)QxQKCf9{Zcs%ZiDwiZKCIUBzoYqMmxKir2ZCX4tv-&c!}i-mB0 zoe-tU=v_n+KkwVI3RPec*r&z0EW;P0>)liA-mlD41j)5L>^)$dm z(*P4?_;SMN3N`^B12_<{%u`v0uO>|l!mBP6okW~cOw4Uq;xNkawWPkU8JcIoTlr~3 z*}I;!_8lhe^amfMG?XLq0X^?V(lxAGiLj=D&n>QzW$$LGB$dAMs-2{KbBYs{GdKO^roW>9z>c-TlqVEu^2_@E>tNthKo=}bqo(|FzM#g& zqAa_Be86G&rkQ~Jl(?nkWo73{KxGsblV$l8;@aVTC5l!(kVc9+XdWQHVq9biqvh=m z)W^a!4Uk_cuHiz%b{2?_4Zm*U!W3B0cFS{_QzF0eoS_?~h|-%~yt?UuU=cF&K;rXv1N z`;PX6{ouclejGCWvdd~W9`@@cjQQ56V%5NFlSUS|RvlozenQkz1Gfe0Y~kpg@cm3e ztZrlHsJ9&fG{(Z)KL&1)a1CP>aRoHcZIB+B1B+NVW zpWwWYP?1~vPe<_Qd^0Z~>o0=c^5e@mlHS)Q&3(7Wpb3lmLgp9~g@9s;(;FK?bblv}H-EnyU@~cOMzIBZ3+y(gs z6~dE}D}ECYKAyNdQ7hf$sBsX4!Q-1itm3-3ulWh_ij&G|3Im6>PEmDLA& zPGRxXoZrW{d?PaF1vvL3q%wzzr{?^=zWcdUa=<40ar!Z-{C>VOF1r6>_!><|R zka3lEX5+2z{6XPY@$Gw|Ndd3vr=c&R<`2=UJB-e>6?hNQsQAdYFdRZSR8PX3km$3= zLiDNnKDWr`;IZwS|7Z*pXQ|ru#*}873#96<9)z~ zDUDoEn)M+xS@9uQZxEVS!Dsnt=%GA+Ou~QW4Ojubo;0FBNjo%+o!^KSAq}||$ zifd9{#M{&PYB3jV&@>6o_aXvO<&`SB>SrWF6*_%W}D>vGd%LZ13YokRsMPIxk*bJ zuRuAS!aM?GunXLi)DKPEBDk+HnH>Cz2?=T8BKKUtQZnBG#lhk#F78Hr9(eSXUXb5Jp5QQ|F9xZ%d3@9N4f7?y z$|;_RVdxzm{}#qFWV}AWa~8xn^e&HQ_(!lCz)K2>Rj&Md+*jiWayA?86N%9smrs3S zl`H=~_pLb!!F<5QegZKReZYNbm?-BP0k`=H#8~uS?)#@7j2;F&=O++@(TCjk7wv-i z7tndDcpSuN^bz;{_z{AL2P{`yU=zc^$2{@JYR2<^LkOCZNZx)i9%Nc#uNlU(=}TY( zEG`CwTualyYJfi1JR7!umF#4Kz)68^V>?NB^G43{06 zub&$!JO=lR#6&L33L(bJPR;lCb)@h=K-z~|R3HY-0h+I7S6D~_tl%dQBW9Q8Tk<)O-tRum42A8GZsWG7ZvvC2Amt76Y#G6NsT{ zu;y!vJtTY^;BS5cF*Xg+e3xEFVLAtRLkVO)h{35x^L?=pk#zop_jhm<%?B|$4b^;G z@ZmIG4zRkPKnzd4n(w(Dh-5Rs4t@eLJ`K}+b!$N|2r$b}AjX~%nlB~>k(>s&KnWVz?HNcMs9H+%-A_fbqM@xu`u}ZTj8)5MzC}?m-4xoF{!jZhF<33D zRa}N4i^%&t=;x|1o|I`6;v*jinSm~qVzor2(spGXWxYic_C)0iZ3-bek%Q8Z3M zl&0xlGh?t<5rSGuBu4pqwKPN@K(NA3BnF{%HGT9JBVyYi_{~owMxjq@34{JNa`Z05RCbPW;1ocTIvfbJll3!m-Y=(7wac{ap(AQ5y+r{&{ zY8AA4#t{2u2quw;iUPA~XTV?3Vr%1xRSb(4!g;acG@Y5>Uz3|O%3(S)e}KGjmCMHC zjQl&a+(10G$iHcS1{yi1IMJxnN%zA|f4RvmwDBW5dpS6Y-hYkmQo+t#dxnw+IfkA%5$3;e6tVBf-VEL*>epO56IosfygF%Q#tqyA+%{_XUA*>A zccdjyI}3OI3;TQ9MZJE(@I4r4q=oNM*=QfN@-qWZ1)6E$gK!_;A);>sI}`8yd;+w} z!h5>{4~SZL&(7j0>>WV6ESx+9cxd$M`LZzZ^FUWDoJe?L^k0bvcAy{x;xH1HJso(u zr#6gJ5$C0WDp;64jyC?ykPUca?J!(_1Gs*t^5%*% zwd2U2D4lT~P9vKZRPOMeBySNBx7YK74nOafOL-_`xdLQ01tW5QWF1Pwl5$&6g{cN@ zQ-tYs?Gz`f%x?NCIvB5ghZZD8WaE9KIx!va@;BA`f>L_P$L3q_wc8KqgSXzBWsb#L z@A_dov*GWdcYwcS#sn{kewD6E;jh=F=gkRaAPG0 zj>%vJ=f#EQU5+RfTo4y_ZvbAiFSsZ!3_E{`3)s0_hS`kxToG=}+ov6pe^p#)-X0l< z!ZmSW_kNv=i|gXT=?%y7VZjY?0XsK`DLc1>n-QPe;=+i}KjOmfy|M_&zauV;_}mp2 zuycPs+36b%!2{vOya$%x;$Ly0c~kzt#Y1sn_a5Jfi$~(Zu=Ag|aIv$L=>><}{a&=Q zpJDMg99ll^Fgqv6;rI%Lc6NqbaaRQ4qPjfc#L`O7K{#guTOrHS_M3fx77t)Q%D9PU4V2_X-l&}Uhw zyko>yK>2Wf%|u*m+LvBaJiWVszX!HKaW(l>bbeKYRMpW7Z4loH=>a9bjb6@(Ni|2) z-Y|C=?2h78D-2#eC=bmH57hA41so!#;+NA{bz#3oWDiuf3P5QJ-{`2k*9@xh9K5#x z>!i4NjYg&>E$B=w@WEhX6c;bpN?yzH`FQYYU~?6}f||=xPNNnU)CnK(hMk>&!{@-9 ze(0V#s1Yi7D!9*OJ9`@$%YOper+kaNbkI~wLAoA*4?l>W?F#r!(!5Kz!qGhtcd35x zQjcB!a$BGc>Bk{3r*;7!I7~+bp4G1pKm;p-)gn%JQs$53&*^tA!KEcwXT@a(3I9#> zt(D<_2-sM~MFv!@F$?ya#~gmsE?z)%ENF%6mfp!H?2K}Ne*paw@*|@xT9nrAQ_byi zdiq{BP^n1!lSFfjNzG!fL~@KKOwn;~GyYYOlnee+pZdmYa6lr_;n zIcOwaFhoCg+Qz6ws8eMw9aQy~CCx>gmw=Lfy zqeke#l<)2U8;igplOlbKzIK#5uZAqMm4K_0M3x!R`Hps9deabjTBiGS zwt)u&(Pst?-|@c#XSvIEHSkoRnHCnE`51R9q9$(ICqSz#tp5Yw*@60ZMuFS`w9CTp zW5`=DF7Or}FT|}l4|K)Cg)aEc2`s(P@a@2YQy>l_YHyVW&JBDOuk8rmrGY9~IIjnA zUSQ=j25tn@Twzy42Jp-J7lV+gJ>fjgL{BcP@705Ryq;eL@)?jWBe|;hR$nLnVy=c; zA)lbv&4he2qz9Ds;^kBnTjpByG~|VP#W=_>L+Ze^=>Jhz#h_@Cd*KU4t|vlXn!Lz6 zE`~{y-Jf9)AZ|)MphgxJ1E*Kq&Myqy9jK3m#Zc;1_d(ng;X4ng(87mN1q!AFPRGbu zu=yE z7y5TpI8V5H#x0!q8T`!BGmtNQ74*AQI3guaIHA$$3qP~nsTk3TtUeDvSIn@OV+)>a z3g);U#2DCtkw730<2H+d>s);F%^`i42C87;((~YZUf@>5O9b8ssJVq7i~^n?*a6L{ zzorASEO)t_%juxa3={xpP5n)6B-3ygxe-ca{GTqD)AtMYr}`2MWRS0U^)NEk#Zh} zaDDjnf26P_35%!Dx@0Lol6ph<43uFqoAW=+ilA6Z620_= zHpocu|1irO6COagDQ*zP1{6L&3*~hjvZPbInd8h*Xg0^?UpC5%%VT5VIErdc`=I$& zuZGr2JU>(dudOs6iie2Zk-@_A((6j~b=BJs3Knk`xTH|3|ys4iBo@;7YN~J8A z*zUdbsWdSML_S?evcua60y4geh1sk!wO(K1^(HuIb(h{OAR4?{MVxqO z(+PH#-X?G`E=u-e=^ee($aG{WtQe_!i}*4!*X?#7DN$D{xN=`hiqR@F57!78gk?&AFpdSy*`h zsE3=05=j@IWfz~~N^j5g?PytfG87e+iY&8d9}VU#{SBUc1P`m^Pb|}=&*Yw^82Jf9 zo#CT9`J%jMwq9#cjNas)(`g1D3zl#38Y__5v$$so#(2X2+hFfmoc5HY&*t6^_l!Lw z8^AUz9&l<7?9b);;%12PUbr74W|a*oc$e$z8bfdk&=yftAagvRC01h77jgZ89jaI; zN*7Zx+as)UrGLVsI$=~T;#nVp=SU>d8IXGk@w}xuJ&j=CMYv}aHxMux`wh}vw&45k zLy!kpXbPD4mR9w4Y~_~?_k?Vdapq7DvkKSOZplfJP@Ne5^^_Q&i3FC*~S8weTls29Y`;6a4G(R zhi`t*E;PIrgy|%f!PD1Z(%16v=IFG^2Jehhcg4jg#M0MsJ+Bm!HX82Zh|&FFfngVs zv_64i4_x9)SuFiK9=WovT}T!}_K9gmR-V8i^BpYxr9knzitWKu$j|NE(+Gob67t`0 zI!r#Sn=eH>dE_{hP70Xc#_2JMDE4NZ#HWnXf93kh$8d_oyGO}5q!m#e1BQ{Hfh~CP zYe+*az$QvSZHsJRq-rI4m6D`bQ}c{0ewb2}F2OaGLAcXp8t&z&3Qu%&&+#9DBboy_j4NZWma&e`MtWbt(LF3;slue;(uau%m4w!ugwW5Tkx5peR z9|$;339N)jRe4SC&;+VCpm@KyO5Vn|rr; z$O>zl`2h^o)k4_~gEs z<|vg&kF7T%l-^ehID5q|-w#*?!N%gEfFnA>>!;}_sMY=r@I*0z49iBpL7tweg}jaV zHc<-hL-p8Hvc!zx7;0o`A&c;=M?3~^_9o&m5-q%s)goH_i)Ypm^XFGWIC2re$or7Qg!!tdKy%+u_uO#IkD;#tO9fs%;ED3M|{= zXDBigwD>{{NreAdVDl{gm`Yor7QgOUgRcSm(&D@`rQDYA)otUx?g2YRT=W1|(`*yU z$y($Ei~&Rm_!lZ?d{HH{t?Pu|&VSfVHtHecbXcK(87TFUs;==xiU`s9k8*`D| z*R{xrH*J!C2lk`Ib7`bCL-W3{&lm`t1iNfLljM1 z;;=!e5PNLi-Zk)HR+RV@@VZJP8ZcQ&MV8IdLXuJcNXR=t)w7tA$#l)uLUNEUAsPq4 zBtOyTRgk#3TF64oO9|0J2tIj|Xr2}_r2XLT9}hTH31m|r)f%^OnWi862!am)S3F7ZiRPVu1DX9D;7%ow zLDZ;)d|a;S13rX>Q-Bvt0SmZSA1%!aO~3vp*dw^xl8jU^+krla`{$as0-o3DIhZGa zl_D++w~u1BMvLm($rx?b18ZdY7yJt?{yGYu7-;nX>udQBq`XSJc)00>4aksNLbOTTMT38tmjA(&TO6cO<=%G`b} za_tW?2l!eDWG>t2^RVfEXd#!;_lWjl7uY^BAj)gRJDIps2etTwv*>cDWx8(pJ+K<} z;7={`*M|mkW4ghEL;6)S739xJGat^9bfQ@kUphv8JiSI@2IOUF7Ng3h0>q@2BMSvn zYY*2RWQeewM=`BAX@bLd_kx|p3<-4wrPx@=zf&+jkmNZs)y}2^<g%01Q&bv16B= zErIK5lkmM3uH*^+&Ca#~9a8upFc%MbqJ8chhUpG3+$xHos)sZ^iTN+6ou!PRcr-nX z2(i@Ean$NzXK~NN@F_~4w9wJ9?u1QP_yl-uaY$JBmZPg)lrsJ3;>i;ib*|mVSFjWTBu1g2sX*5e>zK z;Ws0q9sEYZp*Bc8MMECYT^#IK6l!Pf;M$!C-9>r(J@kp~A*1!Hhh=}81)Qrqi=TWM zlI_y|urs=CZ-LA=4KPW^h3v!*EXv>2AR8>dG%g*I>v|rMCcnEu_A9^XG^ibt=h{9} z(kmc074-p1X^rj7V;-v zMIG{new5kSmvH^wBwSXQ$d_;vw(5^AVpSCAhQj-4hq@@hakzDcx@1kn@o=pD0lI;* zxZOBpEG)G!8~pWA#3z{RtgXCz)uC+q1U1=ak!A2Y>5#fyU;d_@b%$!GQmP2BE;P{j z8sitLIfW3+A`z7{8B0-xx{@ekv=l9cU_)_BLKOTVhH^vJanBleQ{xF3s_}$t_ z!bG!&*3)hQ@pk0a~eW_~UO8_&%Q4@NZcMtxB$uBeSGD4fxX5CTkzcYcuXn>gt@705|ooPU;ukbeT-2GE2|| z$JE+jb5ZwDwzrL|M7ya2ani~C9sMPIi@&J(OQr`1rx*;-N`;&La?@YQ^jCEKEihXc z6;LG=s~F_MtB_M+oa22wvGWWBHUx)O6P&pO@`Ywxhi(F#r<+KQYb1{k{S-qJ{vp^( z#l`4K@`Qv%vtjx>u-_G@S2X1-zfzPKcIPrg=OFk;iNwm*{au(a5fU~Dkv2fJO{>&kim4ebQ8jpqL zp{!9%&0KpQ;1*Yo-uoX?)(or%@#4uB@i&yI-a8MW91YdP;z|*B*S;f&T$Sir=&kuY z2$mHW$vY-QRikSqL9`iyy~Rap)v^O~HNYciVYTSJ$&g-v?BNrn(x^~YkDiFuihC>L z=f!Y5DIp>?rsW#ZF;uo1Lfh>L`bOs6V~*{ih)7!Wice%~&a)t&OkTtt7SkO2=|hzc zdPk_RcFMSIMp0M@(I-ks7MXZWy|7No_w5bMR`6f_G)FPTQ&=~p$5}&j4*Z6nhTbA7 zd^&o9(}EsrFQN?%DDf&zkY6^M< z9I8r9K{XV#D&$ny*O7Pw*)<>K9rUPrQ6OoZmJPuWa#*&^c)7`AV=2 zidVOI|Ad1hz;}WjP+YuFCG8JLsEEdhUk1CQxJaRF00w&ZO#~0Dg8jcZMAUdX*_RE# z;4t@mqXDP_o<^F6B6!gN4D}wU3hyo8{G#%1z4;}+Fj6=yy6HxUMnI6OMB*JXS+7S# zwMSP>xy)ySFD4CzQREFpDI8g0)dhJw_-2T9D4{eKz885t+L!u*aqCZlpEotk(XSS8 zmR``xxa*IB9Jo_5Jr2=)jE#NudAocKFA=D;g+)Og7oAnn@Ldn6m5JrM`9%tHZiO}w ziX`=iXp|B*5m`&`x)tVCcrV1zOaq_mrx67?zru-IMv7N~Z!E6qDGKuV=!NMrQoD*{ zrc(r*v?AfGaDXvin*q2DwEmBxS>;W<9hY9h;YBN_>2Qd|p^c_f@%4Xl(FvOC|F&-U zHNO^cZ2-q6gvpm$|9>A1osV!YxMmPe#ufFo^v*Wc{}D+iouc;-MRmdYzZbk(8JyJm ze?MH5l+qm%wyQezCd#FX9d;7623q}oAybkcuM8lfAS+u)D=H2Xh> zW>3;uJaq{>F<8YZg+s(t=APpV3TtmtYs5!r(!rbhX^xYfeM#>cTXuMF@F9Mha`DjY zPnw-z*qIDI(@!JP^+(ds6hrd~_*$irxhv9jAjyelUc~2D@PmFDk*C5CcR=eJgk9ab8!!j??{QDTopc?SoK#xr0wF4F=Y6CrMV#5Ue zgmU_+xKl0Vh@5u=?@t;k>_!oymub^)C67gaB!VdbpQh}HiYz{onSMKY_K${UG59J! zjhJBlC+RZAN+Lcx!1t0ygeC0s6!E!}bZd;%oG*@H#p94I1{sl+ zOl=0rS%Z3B9g2FS5^c{kYFE@|pfZ>MY!BAeJ<%|JKXA}7^mpriTlvK9PSzJB4%|IYBSK9Nf0p1A&26y1Tx3f zW}tI_Bmc@mQLUKD+6?q;2_v2@A!tV;kxsQ4sOvunW&qqr7dN0b15KR=)uPgU!uAduAB?EZB9E%Ymi28AyC|RBZ;Ty~r+v zJgP2g0uGTYYBP{%kkn?NYyU|NZv|E`a+h z#OVI0%|N2JGdBY*>3|7hNLJujPf`j-RvvRRkobP6+6=S~`_@UwkK%NJd{{SMZ3bG8 z#*nOX{uC z#Y-vHLW>rM;-$DtahGBR-sjBh&L({M{yy*T^LhW+P3}C;oEWzRoqf*8q8JOOdZd zg1v$IJSnT}qyA~Rc^LUQFlJ!(*xh6lLWEKrDVY0o2^W&^_^@W&Io1W%*uqWwXF_@p zAX!I!01aX|lN^|&{WCFr1=#GeAx;G}(}tz}Gbw!<7?U#gPk=U9a7z0pF*502wVEi7 z0zaoYDeQ!#$Xw{5WQXw#`1=ny(oRT@jGSk3LStb6;F2jdtvP8YOpfeX*W|)cy z8M*GZ$!P_=>jxZ}uP-A*EPHhv@X4CP|C#pBm_XSiR3^WQ997yBx(1ZZsUtY0{quF$ zZ5Xc++%8W5KgS$yrKbHeE7QitSm{Q!i)Vn|TX0JI=bNzXtxOT2(18eCrU+^O%+B<- zr70pBP(=$)Y5&X#>z8DX2Q7hjVGcKTvk6K2=cllCSTU0+9Sb~J%SmDXtPC??vP#ZE z;6H!Bk@nBenZk;g>DdeXFXqT+rLcciW!jEmg0p=iHEg&!P<#G$#ULaLC#W3!A8^^7 zrWz2n=ij!+CbKkH^-?pX%_O@>?fIAGZa|sX)?bAYk6wshl1hx zci_G1zr;>ZkEf=~?oNCDJ-lQx?}PPLGo?($v^@XX!X}XhQ%HIEKjQiyrC@pf6~^c$ znH9jQrJ2(H(w=`s&?|`!00(G-oe}N%R|xY3kqE{&sadMewmkm^^04qT7+X`bSfK6s zH<-Krzri?bv24%3wdl9RBZU8}G0XE$?xdzY|Hd}M8)9%omI~+uami9JwCCSYBv|5Q zfW_Ll<@r|=50Yim8dz@&m(9pDdM(ethMAD0crd1Emdua#{9Aoa9Jd=u`o~1qig43GK>nT{TET--GcM$6etO4GN@czSPX4>-n8-+1bHrk@VN-!?X z9qsvd9lOjhULR0X4QtQ8q?~5-{=kOXxaIk`&x|gn1Dj>zmgnE!x72EeSOaW>ja#07 z$4{B^j{!TSam(|s_bHed+Vk%fEF|WLceqik&Z~6RgXiDgMtG~mcm%K<8n-TKCGEL7uc>Y~jY+4&(AVgUt6Nl&D zqKoEQPAOpJ8CTi0Jpa}vn5#7{fVH!6%k%Hzw{C2tg0!n)^>c$^RIa&GyYIuqwV;X=iiB)X8c*e=IZ#`^REyO zZ|e~LyB*i^{QKml>G^jY*crx^VoH+>o`0>%nxoQFVDA{0H7Ms++Vd|i#w3MSL&L|V zNOFFqJ^$L^tvxru7~oZz!w*vPYVG-#W}4!(1Kv~1kq^_JfB!8~oCM&XYdP{++Vk(v z4T`f2_&O~|a>Nh#6<&%X$(wA+KwOOuqjWqJNZ|7uE_2*UK#B<=b48Qx7vbzcdBDrN2Y zmkCoSiR}e;hy}|%I-N6b7 zz{wnEF97ZN_v{+BfkEhx79tMXaDl+=)yUWi=(vWD0hV)e)gwvIKYxT-o_{e|Lw*Fd zQPX^sXv`}QvNN|l{|*Z>f`RAN9Npok_Waw1Wi5V1Qw>DfnavQZ8aSPA`hGnCco`2t>alA*6v#wbHhW7k3Fj(+X zSp=XQHf(wRZM~-8GJs+kmO{1X-;h@dZUv}=4O^anqs@1WBLPjcVAZ#2&%ed+DBuLl z1HRbe*q(ojF}iRuYz4I6f>r5h&%b4uSFq>bRp7TQj_vuEIi8HS2==XK=3b=s{2S9B z8xv?%uz*XdH&7w zD0m*A#TwS0e-Qzyb^HlPmYixnDLwx{0id3k%Jc85AqwuyFh{lrqtu>%7hvX(WIUDU-%l`1Ih}JXL{+He`FAO+ zDiX`{uhBjA+e*8OhdLK$z>mjQ7mtg6{4&Hok00M$ya?p#hDmbB>h4a%H!dvr zSqrQgG%iMl+;uZ9i+dbYo)+Vb5`&tKg-u~p&)FG;9yc=Wav({9J#*tmWqJ4ngdpP; zJjO<6dIurChA+#Ei*z2oi)dRx-i6D@(Gs<-peW~_`+&|M_@xEO70M599e|o~vN|2> z5XaLHRzEH&PDp3M6r^mjN$f@>q|=LfdUj_Cj8~#52pu%Z*G^py=h{)g zhXRY!xW~qGIWJ(2A!Y&lLE~PD|1*e;xZKWz2Jj8Qc38L?Yvq=Rad`s9V!a?MB8YRq zZ&(~5)1WwcorN)pmYny%-Hogqt8}n`dR#vD_igc80Bk}x~_#}#nj`No7h0P3b;e|8y(D;OqEh;i~D9#VJ}ViQ$VF{m{)q@qBH-8*ElkEBS0-| zm=|*5N@V`(fqK3e2xzzshXepFK8syV7bN=|I}EsVvI z^9As4HAm)5x;(~J3SX4X`fL|IsEg>Cg(KpYnr3vus2y;mGDET2>Go4 zfTw9{WlqTnM~336hQ~wKBqs`Z{tr0paTZtIUEnjbHYx$H`!P-pxAVFAUalMPftsVz z!`^mrwfxKXHl1~+0H0xTa5VfjB&D|d)8eSBr3l`@kgQOB^q5Ji<1Px5LmUL*lqThu z+W2B9gwzdf^e?i(Rrm<_zsym}ns+$hdVXopHA~moz-I6X!DYg{d4F63PiAx%vNQ?; zDrv!Hm%^`N;u?B}V`?Zl4S=`)7^jhE$pDix1o(K(QKi9W0K_%+{E*$`%mKbwb5!j} zP7_ZDn6C0!TY>M_93_X{UgDa1Zb2I*=PK~~nxo`|jYP>e^Neh6a$L=^9WgG|%oT@^ z8;ENW&==jY>?-pC|CBkh3KWOeR^nO)^npPyIdy9o&@~nk_sR@FL8S-GGwA-e++ggN~;&IW>Sc{(!^&^KqS= zGy9nCvweUMvN%Ry5RNvF>+hL~bw#eKDL`guRDSLhH^99Is<;H9KQSW5`G8+?BMZab z{^`m11ED7@L`$cqFc+hl2AoF>wqRU5diXs(gB$X@iljo{-WXmrp$)CX^xL>8}7yMDW)Zl;U(Q6+dIfO4yA_tN>xR zCTUOil)W;Kz44*p^DdaDQCtN5I!9^Dj|}Zs#E1{e((s`=PVx-^(aHvk8u8&-cE3_b zQHBDDut6LH7M~^T-C=e7=%)Zm+u(435n<)dDzE{7W;Td}!s4UCW=v9GUjTz`5GRMl zXAS#0tvYRQ3V<0l*lCy%pFQkw9~E;sfK@5L;YNIpu!UxV_5e7jK{*u0=L*W63mLqE z;Cl>lsjJ~s;kko4evS~)8mf;=;ks1SP#B*#-@_xYZn&iKf%GX8xh&0bnZMnL&zH}) zAq-gN)B)Z`b5aQ7W1Hd&XCTJ3lM^kj}LO4vMpUM z4SI?E$FB*a1?M;)ZiP9DY)jet4MMF~NXxk~@B zz|F|$CIla_Amx3|FOE#ozKoStz_hyz!fQ>^Uim59>eb`+XAHr2!XmIO{GV~j$BCEx z%)Emz505{P)n~3Mh?0O)M3-k|#~%tF-_1OYr2+6}EaEN4mO6JNV#;`R+*e-!gHwPg zwxbc>PFAmJrT~~>gRFCZWhRsfCwn=7RW`^vcRcfwp6YzX0_09qI~~nOfGl)0yXZ)Nw&s0Ax=ALg&t8eqB(-ECryv2A%A-7=O+` z6TVH9rQ94)TMhfp>;m|_yI3z2@*o6{Wr*uk7Ny}_j=5m`MgMQ{(Wi|54e;;n=yzBF zF1fEPMD%qC-uglGol}5c@h^MSeEKQiSFPy6rz2{@S#C3wz9|ea2in3ug`r>b7+=2tMx}rUal7OmPuzZ4A;c(`2A}O~bo~||zfa?HK zZ%yRPDKk9&cF@;NkexVSQyG_~p;|D1R}z0GD6I<*`T^KljmyH3LZk^Ee=q+Rux+G* z9subi6S?6@eK0$*`}seEB`!G+fxp+B6vAW&^{~L%8s@Qdp^y=QOSKEtK|Kx{gY%h0 zF$9-oC`E#02lXUqeLHke4S}`!0GA!q)1W3@5Pu-B_*A$`tgq~#o&_B`gXDh$!dgwz z2~DYZ`S+rr-(+|Ky_KEs0nm?e6sdUl=o2auAUyK@1Ad{|2M90!N@uvaFkF1|<1Wg@ zU6UW*LcXg(M!kge!G68bS)Gh9S1b}Tx@({f(Q_<%8MGD4K!VC+8PA7mR0oA7%!dh2 zrw(EX!zjuk5+XBXtU^W`MCy*qCkMnSk78d5N2Q$#TThGumSEx7Z-d%{}=z6a`HL95|DERGMt^PBz&YGZHYz&-nJm2aM0sSWaLGPvmjm`9k(DtOiGcU zk}&+_ zYJl2zB?5luo*>I!-a0&M>Jxo}1 z#v~AzDLnrhz$M)s-B1S@af8&LMzXh@&C0f)-sNkRRrs~yy2eK_CTFgkO z=s)STLQes?kOD0V$+7-PnA~y;cn;)EN)(bS`Nw{#(DYqkuHt{wrO>)S8mB}dxvGC~m_mC48JH4<BhpPG#i<9piN!ITe3oKDgNQSjD@hT30S&fc z?&lL41-akjg(J(H2IzZ+Wq+ZS)o|9X0y&L?YM@z4;s%iRevJ6TbEKz9P|0p4@iIt{ zK1Lif5yWOe&9LkwCHi$khmR}8qaWj=RI?}~yG2kZEEh<2G?-QYC);r5#1ucFWzeKF zCb1nzga0Sd6f4=SgW91dQ27V*`~S%{@@8udu^odR#wfMi0*>I%2n9zo@^;+_xKmIg z%zIfa&wl`y$GeP#&Or@+Rj|?BifxOKACe_>cQ2e{Dt;!Aa^O;xtvV*2@+S0fS88Q) z$^ftS0f#D}rg{a1U}-^SsXg#s%#l^9F<7B6>WSMg8yWQA7O;{Zr{&H7~ox(6CQCe$gcvqZ$(s70Yw?; z9n(R%{y2MJ%8EU6;0X^Q+xS5by}+oI#=S@UZ-BdCK&xD<1(YSx;EeQNyxm-qiv*tUW1LZG ze?zAx&#H_CUPp7}cgKqbSHkE?%RvD$QlolGDC}?T6?u%nJH2TjF4JVK|MuCY=y14w zjSKn%zB96YZ3q1zN6}q|;k<(CP8c6l@V?ot`~&>a2OM6yN{9=3g<_X-{CeU0Z(J$m z@bTga@j*M#1|;Vb;3ZOX^3KKDV8VoupX#d~t|?%$&cQ%9lm45)Yg(ad8I+R&_0$q8ZCE|X2GQQy-SQ>M)M%Lt_=K__Rk^88- z;bO>-Z&C6;KM-7e%d`;9&du%4uOj~}8jPQ{_`fG;bM7V#wB%b=ytB;|oE|UKN-V^! z&si)QwL6DfKmIuiYgT^zU%E=@u_tWIG#hbT-{aPDC2o8PzF|WT+|xNSfV3&gY5boc z_ThdUmk;0MG#3-Gp84M_x!8 z4nl$^$!ulo-Nl%&H!Vvwvi0t0OxTx}Bd5#Oen3}a!hU(ed{nlM-HZu;`m?|shRXv9 zHR|>^jENQfTNk{9qqNKWpFmj2$YK!U3i(zTE;nv|p^JnO#s9hZKi5-m8aw(TWxF;Y zF)dbMEcbIVe0U3L;*YJ^kUkySKsHch?S~ky-3W9&-i8}@$bNBu;jGj@24Gk9=h3Lz z{z(X{3woyff8w254gBY~pcbCok;7`^tYmi^4jaHfw_|5|cW?eV4J&qj6~955KU|B6 zVPfVC{G-J1Lnve35kE1%J9!vp9xJM2<`Er>dB-nr08!U};08;XOY`hw#A`yoFfSWc zCF$n_P&9gbk>?{{|B58hD8zKr>G9asi>_c;PD^*OZt9`(*M$*4V=&dl(AS~(euIL4AtRD{O&}wRZl1uBGlgSB%SIhwY-Xp$OW@l~gQ0#o zX>$-pRay&EAUB=53CB2UgB~_7#bBh%M=^n9H9JIQX81bEomIYw4w$jh0&Vc-N*Eke1`ZKZRy}8r_qjPp@Fog#$LRcrs$Gnbfn7{ z;6_2?u3(P>>WC`pLUXXsQCGT{h!?KpY(qwOnv4SOLBGdiLnB&+0_YW8y;EPKH(gqW zLtAN^lZ?LfX+<*n(K{Cz{plr4!~tlNWDKN&XeNWG72cB#rq(E)A(RES!ccm6h>T%W z1UfN1x<-$|#t3R20*?r~UxlzaUC}%^m6r~nLdMW1ZurPik}nzKsBBT}T|uYT;1vhm z#Cx@P3ddWm1p0CZoMx%lKV(d#M*D>^i7sMHN~HH|VBOHLvScLF49o>4)2dlyOreG& z$(TyH@8hcrD$;?B&uJJ&r!S~@7c!<(b3Atjox6lD@#r2J(U;V!F&SS`o?md%AZ3LT z%p&hyj2F?h+V?eP)1)B7m_vi0h~Lr>G@S2f_IvEyM(I!j-;)!KYaSI@LB@O<{tojw zdJg6f^cAL`3uzQeV-e+z!VZVgwFdV!mXP}%8B6IIn#?l#(nH2_T7U-iBe~F6R?x13 zWc)-Up>Qjy-%>JurrOnUDk3EykEf5Lta{UM8 zL)x}eeU!rvI*^Twopc*&x{Jy;AY(UuzmJSPwC(}MV%m(_+(&8u!MvOn&LiVbs*2|x zh_2JKuW^vNL)szAIh%~bbQCppgn|O#xJLCcaX&^qasP|DegT7k@;b=)o5rEsPS9LP zI7w;mz_ufL1V3MDffjX!wxiz9(zTKJ_JLL`!FG%E?{y#J0`-7WUZlzm4IBkHaUdC& zDFR*H6`D{E8~)QVsP8qpfmqk+zQBh9ba5RSH|Sv~88>MXa&(LGS0LjyO+tIVL%EQn zyR_{V-X%~pYUDn>!2b_u89JMX(G7;S$8O-wGm`O`HYJkrgpQ6S<0<*RhWjCPLi>D9 zJ#hb*T2CQN?|Y!!UQ*i}a1x}(U4-$PR-rw-p|z0wA7w_#yrmlWM&%uCL^u52duK2@ zf8jmi17lx!r&q+nlkjFkvvCM-EVP}3cP0wbDZFEmQKzPen#z-K%Pf@~Yh4=6|j0M7b5~;@O*w5%A1BG{mABF=+L6Zr>FUa%?@9-=vRXAyrFneEWDQxm{E8?pNKurg!j~U7#4(=pgfs`w>fGlOnBFnz{nuH^U!)S z3-7H(7#oCl;06p1!u$7j!-y2#M9i?Ggm-91!^kSUkr;-u32*<&7$Jl=Z7mED!rOZc z#t0MvT2n6J?Tkj4TX-K`#rl-+ZaIZMq#`V-tJhiEh@a*(J2)Z3q_Om-HqbH+j=hs4dD$~NycZw zn-#4)T6m9T$G9Q91-{3?A-oyB#K>R?15etF0R;I(fmRgW7Kk1zytQ#OKqcX=iFRLEc=Ms*R1w~L%Q1`y?-kTQHDnOg zSzUM|24N%--r#QVwH4k~P}W+)yWojE2HH3@K|Qybqu^jfHoX0dGy=efa{zitxst#JD1;1F-WnW0wyG@S$jQ)#+L( z9nX<6? z^Zai%f37xS^JgmbA~)@XA&`giOS)hexsbvt|jK zKi4a<`LhDmScc}IM=DFNk;ii6XwBx&^o(r&94N%*&pN1aEY10i&7Y~Lugdf}%BKo_ zc96}Vw8&RAT8t)8ovvdFSA+IdLz|_B+t~bRk65*7yb}$U3g<$5r8#ake+D5{_30@} zrUA7=%V*vHkOYI>G*_j^4fVZX<{hb zKbN1f{o_L2^`IQnuxBf6D**e4cB0&RQyQ!U_o1p7Df$x30N6iG-?9BO98VuW2Y+Gv z=P{l>i2A`w8BBRmQ$y%A(lC@JK*BJ}f|fQMX~QP5G!oKAk_XID^cHKlqiGY=XbeTp zV8v?RnPC4QF|dCU5fVoeP%`mU9Q{xN-7d!V&sU4t{`nsDJBf6 zyPG!lVuic|ep;$mmFFV`i?TuvK=TTuKqNXHg+d8~XzWZ@$jIZYkl!1ukS&L^LS{vS z&Pb=wDTGj-Lp&b|huUPKlj~R^2r}4G7!~Mh%O+cFr`I9FG3e_FG>rM=3>;z!wQ+B4lCpsNdAmUAs5lK^;cHN(#Um5 zx^tct@*=9FH2sc-8$(^*;$t&9IhqynM15AsH7Jep)EC`B1^NbguSlm#vqB#6vO?|) zWQAP%kQK5c6t60kKuuMnd9_&~KkLBrk?RFnAuE2v3b_ZdYSX%}Ss|BH=B6<3Ei2^v z^sJCmF*rA%*(+HgSEGYyM7vR^jp-0dxCsro$qMO*@Mg3Exo%GLF&4C--%!gf=}8k- z$he~fh3pP~8=8t5Y)f~MqjvNo!rN1Y9;}eMgOce@pP*j)(D5UzkPSPsLN>#_Kg}D-6OzL}vqF}| zRA&%1g)$7L&)#rD|FRn^WaB5SkfR2%LgqoEA3?Dg5=PQ#)ZHjL`!7#O=AmT9&?B_r zvGmCdR>&xn%y{|+-CP`X!hjS{wTrPrX8w{Da_|LK$i%-`A&;S(OQfQ+S*bRiWrduK zv`wboXmwL4^AJ|Z2YC84YKJoXoE|;p2}zyrctYZj=gy!6l;liml!GTEy?611L_l4? zrU{qvxir-%hY1OtMjmI=))RyY$)iR*A$bq&_>N9}#S@a9cX>im@E}h}0!#3O5Q)QIW-;@z`eS*T#1DqrWbmSC$ot-ctIqu;J z$x8GRXX*Vm!h~e~?`%k<z3kLij~miXQJ0%|)4CrteS=SEw)IUL_C8_8OJ(BTPsR zy~N5rl}F!ogBEw<3CW4$JR#ZAlP4r~YVw4nGBo8bZ9!|fM@dU~LUIan9#HsFOh~B3 zMz|u=!fQMsnT3Af2@Sv`>M0ee#S@Z{2|OWbfR_I+IUGD8S+kfYBuhu~grsgXVM3Ca zg(oD7piTb~p*_5%7ijtKXeuUn@4X4gDJCRsFbBefq`_f1At{Hh2@{gjEieWM@9+D0 zLPEhlJW^a9!Tsdr(%cUZL8+FdDk$gjbPp*kNlVdwex?Oz1Gnf)wDUNciT@{4+F)*z z^DlAVxCWfFG!Nylou&=sdTfiloT01G*2@%xT-Ty=$m2Eo;&U#aA&B*a>bN;~UlvCC zy@|*j(%hk~oG8V$=08T+3#idF@~eczPL6Ex7~2{a;S@hB#$#Ld$82n-Uyc8bvhUH9 zOlmJjRiSGTbcmmT;rOoFewVVI+=mq!TMxNZ%jX<{MYfWwbTQK75GxMk>wY9Y-0yeP1Tz zA{)r7F)2bqlHcouBsxR_NMZh*go+8Agv?Vo!uWOke{FOySg~Y5WvipnIf>s=B-W*- z9IO6yj&*GxGaunj+}7a1GNL^sjH3p(c$Ck9zFkneV?2U~Ao+oDA_EFytl@S+M%gWf zofaC&QmdnC4O)$XRv5mqVdxzroYxxSNnZf{8kf(mQ&_+)_n$w`%8hVV!y`8#RIKKg z1l>>LCf}qSyoGh!+oFzufZSnO45u+3N$-_Lq~X=n#IGFA7aj=x2T|{8p~WON%MlQY z7Hv$x*6+CF^F)?Kkf-o(906OQ15v>8Yg`__s$|c0I7e~OQ~+3C6Q*HJSMX0GYnjVP zR2zps&tS~-%yBr!Peq);AS9=b!;8Esq7whD!?}?Qbv|e-G<6ij8}h8n#P1x=^5dZg zC?>HRgrk~tm`hHP<~jlnLOCVr4hYXRNlHr79E~>ddx!I9SQ5g2BKE(4;&O%#cNv;95!NyzpJB-Ai9iFu4A68(wT^s{; z-oix^8nxj#SPw#0IXo+UP13(0h)HH5O;R9wgv2!t&*=Y9;w&i~gsc|HaGdE5e67P1 zhzX6vO9QK5;}tO;C;sa2bc5nayd|*qHeR(2n(}WB|J)d32cVUTk-#QfxNLgLr@%4v zINI(;N7~D%UwL%yVz7Sw7}M_=WNvo&)kFU$72*h3mp;b4wFNS_I@|$gV5{Q2f_Md% zU!qk6-0;n(58DKpe>mJujC&I~o!P-E_AzGlj*z*-;eQDIQCXH*8?4qJW3CwnnY$c; zH#WdJVCGP;CVh-KDj#I-aim*)5E{?S1z@fD7;_v{HF2NA|A%Q9Rq$R-902Rw$C%CW zUMKNSN7`nSFov_t=U_RLK9YA?M~58#>Chj`I*J6VkY=*_r>vvHj*$!noeaH|b+i|(Qy*i>I{M4u zzw4S=M~}f0$yVM|n2P^-_n6i%kcBC8k%%SS2GFXj2#*}q*!r}i_ zFSCyNf;IMIOj$=K9ckymMw4|k8?5CYV=jn*o}G4h*8XVf*-o$yYbG}@!y!p$9G*Wd z(k&34Y7)0BlXTYM$!C!~ld<&?F4=bpE?ARv&f%$Ok&1#)Mw7VRo22s&Pn<<+3PJ}> z;-+MhE;u}MEYc_tCTS9Dx=Fg|@Vtg4D|?XzApE3B+<;8dC5OjrN!kO#F->CqHc6Kq zo=T%lNq0dordYX?h0I2VdV#A-?25zl^$#XJ4AerJE;Z~!`acd&1}mM_L2a(-pYb>- zM^h#EhQrgbxG8ubSn--!`UB=ohsSfv>|y7EwNf)Hf55!$@O1yql(`qIQ<^ECF2`#1 z^g9mE;DRReF<4@%RSNRyDVTRr(dSKOI9T~LQ$9Tf^Pa<#5oU+1qsm}4)=c?yHYLqE zxbN_MlipxJ~A4u$F74e0mDzGlwU%lgZo()@jYuc^9YU04z1( zxx>@yhDm<{YMNIM@sq&ho^NmlU@(h&Z+6Lk5P#^ z`v_y`D~D%50h2x!)MQOp8H{CX?lnjOCTS4}t3DuoUKgY{4$r$&CTTwie}6#Qi0>s5 z-#h$|!FrKp{Q!h_nj{B3^-Re$$bWjQ$qfA*uNH8ru0S$XbAJ6LWTqwmL+Gev;Z+2y zX=*0RG}TJd1IXWt)-UP(L7kYIE~P8Y{y%hM; zVbYI)dObBgg>;#i4CMb0Y;&2Icc6xTkt&x`I@eap41|#X|GtF5r(#9p}U6$T;B?xTUKZXAbzkq>l69b84U&B}S6xtj^X&N z5%4JTtbuVV8}kET&ulyym6Dj1JnOMcBJqIfaDu{R8n6G=0-lXLu~<-$ctK#rZT#+A z;MvJ@u&9aG0oKUI-`~bim4iG1+f2LA9+Gvn9KrT#e9sp56gLp1t|TiyVwkcokp90)yiTTj#y005H3;bVT|Jk@t4DjNVY1Kni|8b;0<4mj@<1*VpMtr=I z_!)T$r!}Ad8L$c#ZjN)e_P`#ECePsdCaEO|T|OX1-aty>b8-pOW|@<5AWYUIp6g?) zy+4thQsjB!XOb3!@T(?C1DaLAWR@n+we=?R2w0aiQyS1Im@(wJlG$Xw0?Y49tJEnU5=QN9{eT}gsv2PZmTJ89TVgV zLvR+@3W?n)37~2zjQ}Are1=Z@r*XBcw z;QsxA^`+qZ$gE6%cE)(-ZUjfe+Dhz4>7Q;k=kn$3czH3kP8>kNC(4-dS~AA@HiA2# zauNqpaKbkxHk2`yhdy5e8$!W*@|f66##B0exmy`V!7Z%reHCLeEgf6@f_TFz9hSd$ zbEsU;xFb3mSmq1Py2aG$>ns%#ycK3p;us2_jBb#yQYJjJaFg|8FTn)g z!oZanN8yPl@p_C|c`cTaX6Qj+6Ugnt;3LW*yaq0{e8m45Sw}EosKXh+5glEy>XtZ> z(&ycWagC)6z-<^uQ41vLxkpGQkH1yHGl2bI;c8i+71pi{hh$E{OG2kvRGYy%sF||S zC}z3Sc;+_EAa+ck2SM%Z-~nvSHY%}vwR{}@V>$4ptw{vzB>inlPd}dn?dfH zE$|);(~f+=KV=T5Ta|b2PFVY)Jg<&}Z@9T<^*a;`f5s-DWh#lY*xdE;pI>MGY2Y(0 zcRT($h=1-DX$*H?{*RWzOEHoE>pTlyk?~BK#Xm1DfPfkNa|!=^ybFtz3-~9yUq0$3E_@l$TWCHL3siAP!c>wUf+8)AdqPRIBHzRikk?XUM7exiebCuxq{ z9ZcR*ovd5H-!OI|b<02$zoICV9BY5Q98V47Goq2?_t$e>H;fuU8v|)+ zqvrm46Hxbcfer*RoY6-3q4(G8g4$?~faySHY1Gpk@v23OlXAWtj-dVjr`&cfjGb$^F95xC4`nfvR7?ox5{04d0*Y(m!l zdaa^-q~t06n0)(-b-% z$Pybh_t)G1w;|(h1+q({*8X}C&4qCqq1PDU^a^e%dVjq;l^w>xFkjp+IxafpC{eTU|w4#TpJ<^Fn6b@2r_f;!u=tdn(*!)=~( zJO)sL4O{!`JzuHzub2yHA;VIr-d}HgGZlL?pdB`B?XTByqf&-*fNof@>f7}GdW~WH za{}H2ch1vKuuj%3oJ+_|M*zxe!K(E1{(2)vLnE-iUPa*5ERMau-g@-Ktr6UfA=wC1 z@2_`tvoJ;jOH7UH{q-*4s|)UM7XV*saqRu|{L#8LBY3X`$&T63`|AZ^4>qpN%fN3i zM-`#9zuxpB3g*43oan+8toPTO6X7FUM?OHZ8O67f&o|%; z5*{jCeDe$A|0GZT#~q!E?Fg6r;Di5*;#;OFg<#|iMP6L;7W@iQetLr&{};tKm;A}7 z-zetE+f4p!MBa9zyrTZV&BdlyrfS7->(~+o5~Jb$u$m&0LVe#O=Gc*)uq8p5`-Y6Vq*MOnNBPPBzD1bdrb|dW z{};tK*B|)l7l0@FZMn=jb)xX?^In{(tO;1hs-rSbXc zP%SA)*`3t}gY+W^8#T!TAt^~YomDZx5Jy0`q)AdzJGS;!N^>~}VeTrPfk2DQlnN;+ z1u3`l>O_z-fsjL!Qs8-<*@A(W1XfAoE9^YybG97|yg9H=8eeVW1)P&+0v`@6LF2zl zJQ9l&Nd=unUBG7pTV&zN+L5~#CKd8r{|yaz6$)t!@O>6X$Y&@{VQ0E)Cg%$9dz$kS z(bTceNkxKw#B!1li=pHFJe-_@pKHO!v z8Y%&*p<&+)i;#vHjAzFs_`{-V#SY;6?C52u11{s9jVZ9WfZ$s?x~xN|-vHp{(jM3d zj~R|GmLM6pRNj0`V5uyryt`yAM9+-i+ziRY%PMwCU9T7x0!J3vy2=BuVn=^-5qXJq zcftyTXo=u1Iy$orUx`-=x`em-VkEGM8s}zcIHQW;@l`TrfnNEnM(XAPU(6g;@@3(I zlT^)J?1>t^#a2MOZ1`$8V%Ko*ZLemm;sT&s7HqZ;{)RiLW>8U3*#Hm%6_Xa1e1hW0 zoyU?IyT{`VOBA5|4BHhLa19?QBsFm#{vNKFfa+@4)?EM2Wl<2d{kaA?YMEhfZ#c{#|8p$S=%MpKYh8TvtB-o~!s03Y>nzT7(ZZ$Nykn90X?`$(-TN zunf#|2r%f!M$G)a1DHmMiCDQ&oZ0Sj%(;XYSq41_Voni&K6C}`5Yp~%vzQCqt(iF+ zi|XWO3o5@=bwP~&BYSh<(3k#UgDsBXF;K6PvQGSry= zliCVp@uP^i)vF}n`8Z^o{}ZC0}Da80c41khtFbp=x0HS9XvG@4z9x4*#BHU&S% zr;M}=;lWfE`N}}gp0n%lp1JJHziAb_4p)m|*Wp!f*>yM(b(5KPzQX<|R0*vmg04av zB5C1bGzZ#?wd$;NsU15Fw}q-^r?*&2%0V-b!ko0N8tRqGLRwy`cLm>$Q^&*XD14?M zJHRzx#xBBxuu5KtcA`iMQ{GG1SdaR@W}p4%)!9Y3C-}vw2RNTnWk~ppisxV#;pj&w zWx9!bNeaEkF2aMRVjYss-(;Wtswn<4M1kyDmu@z@2&V~S2fK3kxTFHTLCI94aO6Ff zChTVy;TVKerWr_o6>3tIor8O!Y^zf&%CjatIKl38E|h$28i=)|I`rdHv~&9PD7yup zL;2UI#69e%zYo1hL-L?KG@>G%*)8~+CG4l)Vm`qwc+VJi3wBRnx8Uk95?W9tcI0KZ;0TmMM;bnu-GVE;VYlE$_tC4+ zaf}pQX(Y<68~G%#LvXs|>=1nFQ+5a*hW?>9twlNXp&9V~=|>BZ=Kd6dHaUQH;U(li zDuTQZqBwL^gQ;{2b_HJln4N$-u4gCUVyKr9^r$(1mAGpZI{~kDvlH+SHym&R4lcxA z`IAnOF^*Ot@8hWv$~m5n$FuwIFQ~N%RO1f2|5o3Ql{k6>9ZaIjNMSPd`h{H^bFX5@ z-;Mp)<#+f7cKN*&%r3vZp$pULb%6W^5yRk2>Wn9TNj_e7`OW!?Kdq_s9e;yZqBpzz z`c!6@-%qo$%Wqb+(r;-wO7%N>T8CYJ@1X|2r@d&6^JpxdKA*ay4J@F>|FFw%;$(t* z<;Y6x@_Vu;yZm1G7n5!J`EPdl-HMuBMlrv$%Wv;v?DBiQK2{TH0wn)LTM%m{H6O^1 zn^{n^tLQGCzM4Wuu*>gcw1l;^X%4&m7R$#jzadEBuf|=`8hTSWsh98GWxjPOs zlKNY*I}Ya`X6!B!F=Ka;h>D&40ZJOY>?|uPdu5~>zY6fLJdhkZP?WPI4@xO{kSRGk zZ&;Qz$V`~g>B&v>_kD%`VC1G#_Ir>vK=^akI=RN<$6(>lDOJ9XNr}#@Q_%m7LP#7g zpMLuRNnb}mt5GdW5&BVI$28p8Cp8kzU3j%9wt%)%3s6{N;Y{}u*cpUhw=lt7vXN%b z2}EupoUOjb(_aI0{%k&78CVY9zbL7haHmO!jdd`3h)57}GKoiHBh5IdT~Z4Xl-&sd zr4e4m5+Hc6F&s6ngV0i>eYy*-$1I>72wiLe6)qgopP~hD(F26e84qw^+zh}at3fc`aI7#u=qy57M4>Nb0eL_u$Rt$|chKJ^brJ4) z&{0td;dQkDrW+1vigXihcUNn8xv8|tYBlp#rA_ATPf*6FM^y9kp)uSEIOnNs*_Kt-|`2Bt9IK_9_gx% z!?;t|e;$5h>tw_<3MveueMiTLsZAzg9#G(e@9t0(siY@d%)>TAIi;w+B?KAAa9 znZy4XnRttEeK7UY-RPMR{HrF}i&W|i=Ro0nQ~}j+0F0B&l8=+gsoEPGr^aLu&Y0zJ zmk0LP!tH~pTLW^f!NMP|6e(4*aWHk#J0vVO!01#2!9VrE)Sv7FNkz#n(&o;M1#xc!e z$@an2m$E}guo9#Xre6G9Ep&+gIL2DD>ONXOr3^Xhd!8k z%yXC#Ac|GE{mL=8*!02F;Wl}#NWT!1B<6_oxLswkdc1Wob;5NeL;T0sFBYy3rXB-Z zNrWOif-&_V?=57lgMSrn=GMW~Cp*D51|=3(9i~bZ<`OrogQ>g7gvoP^cZb)Jo^7$3-e{iY9@PGPX>h4fl`(WzR{LsR{OKY~QG9|8x!_y1}BI*Nd zr3pQ`n)Jccv9LMB0Dz-4K|W6(Ouefl2r~hGuL&|=nfQ!peO7Jln~ET|fOSYSRp$UD zHkoZ5B4i^BKoG=D-2O|={E&WM1a!juMA9?jOr4C!`{%XX&$Q*Q_(!%RI0aTTJ_`+Q2*t z-wJ4#hE?<-KEc=hF~?$czXSDus*AHa8WaQ7GT+J+&Zf^ z51NV;Uj|sLjko>-jbwyR@E;3Iyfv_nHg26&n-fz;8Gkgec#T_U)sB)Cd_4g@?kJy( zJCEYSQgFnNxUFWg?2#Svcv+lP>r>st{{(haCYwOi3GNW3Yq);4aPRoe~IEZJ=g1vZIs zIRePS;2XXl#Fof02|gL_LT4p&0a!n!V#4jMvD1jbS+$*V;uB#WV)lS=&?1>Q&Z^C{ z80#B6WZeLEk8zb<>#W+rFp(wh+60pbmx)_v)t1O>%FhL?0OP9cB|h0FL!(({{3^g| z+3~HjYF}dpEai6r*2~7NvugkP(lit%0-J8(s>^X$XVo4>BBZsj0)+LcN&2kX%IWce z1q$#8@JpH_drhUJ)>*aXP$WzgufU?sW|mF$llhwI6EGb4lB5U_@_s4`wMps*!mv~%^O@FJwSCK&y~hl&=B8pA4oNEIa7X%>qzxeKO+_+0YU`}p z)jy!0xd6s}W@$Ua?9;5XYO~;>!m$POKU|6>hmJJXS+z^If{+7XAx%(Sy>(XYN-Xn; z$^h$qjDWLh=W&PE1z>+oP>-FWS_J#7T5k(r3lY9tWBRPxo0y}^cCi!K ze#TYfw$7@(6K7gm*MQx&<6CFdcENHQn{UFg74tq^W_;_c+ETZaStqgs%geZG{MK2u zkLR25V}VuI@%34?>(U_YZ4uttj%%G&TMUa!vT=?DHbKW#C%WRS+TUuJqtZNJKU(pX zg{;r2&0EYQ?E>M5CP|Y^pH*8OmIpWGTfm<(hYLvw(r4AypQ|`&w_&P_OEm;(+v&4v z|4CGw!oW*2N6L}U(r48^o~<~IfVb6hBuAfB+rrA(a1atSNf|8GS+z+Q%$$7>!t#%i za8~W!?Ivj_2!}OECfi}1RlDD5l5T37>$Uj+od$V8dB}Y_IyP+FYeg{3|=IbyjT# zEUC&4X%(x9RJgjVV#m45ap6L7V7$sZ=9g;lan}g z#Uke5M=mB~6&M_yTLHtFa^Q;$9Q`S_Wdpc} ze1STA=6Rb)$F?g`B%eIhJeR5}346NYA%` zmuOijGEm!DaRc^<0JK}fIXQopYhN+g1uWqL;9IFFmTO-=zz#QqmTTXimr*AO_3nfc z;8G>3j=yag;L3s5GC&Ih`OHR5*S?_2*v9~99UzSuEsG!8wJ)kGUc4Zn7mxuOwOso~ zphZnY=yXQ77FG3Iu6?hIsBV5a;8i-Z<=PkX3U6-_XD^ULmH_SAcYG!syn+4$^k^`vcYj&6LU`Nz%3N#Z?pvG-o{sdzi$O)_HNM2H^QN8XlOxioia%6`UPVUWR2IOV_@Z&oK=|PD=RK08hzMVO$ z2rbvX{s$C%7SLr4YuCQBzo^#X*5j8#hLQsuqeKj z>;RMBk4Fv{-~68Qf08W!<6bdJN@3f=#cxdf_&-1S9|KVmkZ)i@0fcm@>NL_NdxN_i z#~XeJx_jvJby zr=sE(bGQ8yao;~eD{q92ClRG%>b1eE$bnWh)5V!Vqq>|17i$HUGTNohy|EHI?<4QEt0Tk5Jb^<73HN-GkBY} z!YJBcT8J(;1Lb^-T}9M;&*WfdeKZX*2x%LE%cm!DtloP9s@et(6QLh{@9E2hl$_D& zt%mr&fVEM_S5S!a4TcqQ1i@!5NWD!|c&M|+6W|Ylz1Fz&IZ}8gXODP@4m{v6B5}#2 z$@nRSggJ-40I4_#T{Vf_&ZOVa|HaKv56j}L`VNssLB?V&M>-Gvf8Na4k@A2d(TX8M36aIX7~P zivX5a<0JSPN=8m+0i;37s0h4vYL4&zpOKE-?k@%)9UXx6);LE|4tB|(IBR1$NIKX} z1U`j1V9&?!C1`C0Jh3PURhgup zD5aV0gdNr~zRuSfHK06xC5btPhB?c@G3>j3%b2i3VYV51TbH3-}Koa4unHmfSGx z`b(^Xvd(P+zTM&&&I8$GDf=IIO*o3BLmL-iF6uN|f9rY$7@V zDLnKD-UQ%MEi$w>`pV>{Vb{>E8U74Nj7FUsDx-617S?c+8M!f_mNuMY1lmONuv`{A z2+#-{eu8l;xkcFFF=p(UfM(lpvF?CdhV?sV!fOHjX2Thv%gL?6`oIZICj1znQ#O1H zYMR_SEM}w``w^gjZMY&<`jXp(IWWDGu>+4{TW4G<+s++Oq2#tY*06yYyBDAVHe6{7;0|HC)0^;QK+|n_S1-UF!x}6w;U595 zw&C1^0Cx&2j4ni`d_SNgHvHQ)lzHc{n;T8|7N7?ep*2MqgoB7N!?t!=9XNKoxLjRYd^ZkGPxDQ5gLwfrrPjWZI(E16U zT+Dj9np!3&y7QyQsfy6r8p+nlNKVd}gx^NcUs#Jso}7-02S=lF9l7}C$JU-7{}(00 z_-Ce)!Ei-Mz<)!23UwN*@XuUP5soyIuZyy1Bg+urQ|d9K8bgMcavA*H?NU+nh%lxE zIR^H}`Tzos;X2R63?Qmuf0y5HC|LkEgkUHee5j?=)MIDevY9e zmvttOMRcE&So6XqA1ZONHJv6^aDF-sq}(7B)udmgkfl$MhDz=QIe=FM));x)6jL-Is9U^O(JZ4vw%RQ%c*pFKhOv<22f;}bFaHS#uwPhM=j9Q9D2ys<_C zV8J(|QT0B9j2h`tpuA^ZZ2d476hp#G0RO~dig5~^Gg~9^jUpDk$2trG#BM-G8RiVA zok0|*al{dea~t?G&5>KADNfUf;enn?Pcl7?fw$8fB}Z~vMEF^p;lL9#N6Bf5^T%RaM$}wn%9#s%ndT@tlG7?8!s2WP zeo%9ioYoz&;M_IqS~838AK-VHql%APdu+FG7dm;V40IOtkIRH_)&tx#OOZONenfUa z1ua;pR7g&*EURmqoT|VZXpTxn*hnmq_0CcY?|nFu=m~s?<|sLm(f==Xn4#6ct9Yun}w(+D0ouLHDO!?HLPJTkl=;4^@(Ygh@F zu}6g$#q!TfKn`>Svd&GFNq7X|W5WI5KPcNpX5hIsM`eEIY;eYg4}+pfPI=%pHAhuy zL+o)8J1#tKmD#>J0q?6hO3va&P~q|64Ka>MIf=k$YL1fg^-qu!7m@op*2P${e*(Ul zIa1A8j^MaP*uP9%m^B&mTJA2+fg|psulYZGod=lJ#Mj0%_wMfOZdh1)5$R33)P*Zm zK#*P(r5EYFqtbho-UJbmB2^Sb=^d3KMMXeBL{Ov%@|OWDULC_d40>74K9(}bxP6Q25dXs%+H{B$gXq=LpGSlOOP~(2wH;zd z0jW54hm0iX>&CW2JoymWHh|XL>R}z?#mh+F8``^8ANq%{L;N}=URi|eb07;^sSa`W zcV35h?+9K4A^A(Jc3=rKBo9r8m}L&0uTo8&g7hoNRDkdf@fE{7f*y&d6^aS#5dTb} z?PP=gf@R1#+aY!_OjYQ0EyFcpI>a}h*LFHW?_(KdM|X$?4KoS)9Lp#>xgu}({RuIu`gDgFsIL#k^c3B~qGjD7&c3bM zN0fq8$;d)^p*zImw>0wx^!AofUg!?-mj;>{0)4z?lpWn6E;7s#=xZ#a?C1`0YDsNp zKlEdk3F{EI8RjbV|5+xiL;M=U6Utnqz`bflEL?0|F5Mw+Jg1rB&_k9{{^$W*bec)OuUYTy>A;udpvGz3#qmV&5EI#9rx-#6u?g#D zgr{Fv0$r)&F=NHtwIS8U?$?bZUh$6=nCD4mJG+kr6o4E6$&hT$YPe`T$gm;Zs?`bCeZx}*j zQA}9Zc=jL7l!IQ)GUS}?8XvrlR}0B{OX!^~!!=^M#tdCGGZOj~%P2d#Yb-KdGs~fG zu#B>!yT-EDHS;a>A1tHn=&teSYnr(U{efkaopTSlYa9hTTz#n#<;jReSD)@0<8Y(N zhh=d{WjtATjjcwi_7U|VH8ZkMUg)mTy^RScs3y@5`Y_8VFLc+qVSu(X5BgHeC_B1q z%xaiz&<|Qh+0k8N4?Hd5yncax%`#zK<2=IzufQ=ZTw)Q{HEzXgoopvR^b(d){^+i; ztzl|If88?5AKf*U8>{{41$}^FY}Z(|JKnd#-q}V`HD|iUlwac652TG&X5*%7yzx8c ze?U5E<*=?X|9|)b45YuU%!6wG&=*=p+0k8Ns%$0G8ue z0=IFFsV6|i>Hk`uHXuF)PH$?lPXt++Rx+}8PrR9FSkYlUo(adD!it;KiK&P$g2!b0 z0UxSayBVu1U*S75{OhyFaQ)&_$9ZnWhqz0|RJ0?w!!c9Qrj8a)ZMfJFOJM3PcyFen zUFaEbI$&>aqllTFTsYMRe5Ga#qy<)<2U$#b1)tsE*(y90?F6ziQ_)HuaGcGc584!8 zqgEAcrlS3b|Hk$#^jntU*#^ET2RU3!a;cQ<_9EQh0ZRENGF@adHB-@|js~1X@FySS z7qM{B`~|2RndwW+fP&P(${$hr%v7}IEAb^;?C1=+UpQi>qOE`&j3v=bMY|dbIBT%? z1MK_QB(h(b+aK*X8=!83vd2^PRJ0E(;KON9&p`Qw)UEi#PDM)_>o~ix<35z9Ry9-6 zO1BN*|4GNAFDzVCbu5{wXiaCSo4!(z%M+qZ(-YEegQDMkh>zr=1{*LRM zGs(~l+No&oOjVyny8}|*Fg}Od_NJmW+=#;fRAEc<$wLk}JQeN2Bf)1*6#xwhqH0%@ zdicEMsc3)Vqb_uMbp$Xl+!8}}Dq2i#H7jcxpg9I~>{PVX=)ow#dPti{<~HW3Xs1R6 zoCDZ(*h^)mqOE#UeMaswq-&mRrlMUMrw->JE^#qflu4%;kuoQcC|IWHi?Fl=wRcpunli2+TNOY0~ouD7>PS( zZz@`vA*uv5pw}UW+a=CSMLYMd;AZOpshgGURJ6wbsiR{$B(6Di`1q%yk#F8qH0lJN zF%@kKt^v4Wzlt24SUTitb^FZWS!ferB5W2~ErfpPk`b^6teTyyXQACGrQ|{+Q)2I8 z6g~@WB)$}0h4iplXyc{o%Gwx3HK>_|_Su;LSBaU0*0{5(BIA1$UFxE!05NoZjiT#f z4E>pdR^=kU#pRhU6;ZT`89~38<6qQSMb*lT>-L}cwp6iXR>YtDtLG*lD={pH;a_j!3x+WzXs9rA zCw|eNQO|9~stF1FYsNnOdFTNCQS82U5n+e7%(n)U^b;urlHHTfI- z8cO^2lS+SJ43f~JGZqZ;o*aiS=o8cX{IeT83t9mFUNe^B6*p)B};FZw|m zL?PGcUKj>oS0}$dMU-5JJG}Ue9Bv(S5t(hyjStO$`N(jT*%VPC2My3N(vWP5cwsjE zk;faF-4J<)<0d&Wk_Kv5+T!LI{|>1QEkt}2)IAg@{)uOEv z6;H(u&X|tB201b%l`lAB$#AD!_jiQTocgLv6t-!GkNk;(7z#Q!dDzUq)eg*akHpgy z5xpy)ga52<&_u_{+0AvF@qqDtM*HuOr2m<%U;nq9Tp5JB3fH{cW1h#LE@zb#O95q^ z^A-|TD?&oLPV~D*>TKTyoEp%&V(E<~@C8IC9euViXYH(~-*s4>0OdWarfJ=zw?jsr zZ{2zz|G?|pr`x9e4g^| zj1>U~sUgK>E z_a1LcxieFfUfNyE+cNHI-j;PY^R}E@g16<}io6ZEuk!XK_jTS@bYs&{`bzE{{=14B z;B8emC2wDLv+%Z>n~%3O+`YVg#r=-AHQlqkt>ymC+uCkB-qvw@^0uz~4sYwZ<9OS^ zeU9^M=>ChpGcKEtW@#Klwb^s-JC5@MYERUQ$6hD6=W|p+@X-6HlHlT>@ip#XzpB^~ zr0;7)1Ye>j1(W!ZX(r8*MRyyQn)U$6Nco7@ zWqbTSD8>$j`D%jh46ci|qoC9gS=(es4rqX2gn04q7TEWyNdE+$1-}+05v>#TMFEU^ z;Y-u!-oc5}NXYJ)F=|4;Py$P!{RKGQGz&?MguYq;gVMhz#@|3)ye2Zl<814TT~h$eOBQ-vWJuFPL8u#NJ3)hxLRrenIlU=T|I#7g zoPdTKRpq4MQlvUYMQkqQ=(NJ2JqW!xcpm5khL9slZYAU?e4v+PgwyfCG|1yvW;fdj z89P15G9EtTdt~7`Fw;fIngf-IrqJ6F!(J*c_V$Ity@jmTPT6@EI-bF5Pr1%gG1Fhj zlqd$J!rd*tQDy8X<{(A`Vz7{LIJJn`2OW{dFgwf)5%N-PhnYX1V`78$$CuX#Aq(O- zB|9z-q|{hc^D0-y2w6wFQV>#clBq~eD$ZeokjE;i9BM(T@1<5cC?v_}ZABaf(lb z-1wQY(;9l$M0S{2D`eU^%Fbx$?fA)mx3W+n8`6WL*AlaPV0)vA zCT>Hyz7q0beq2a#R^Ebsml$>Av%Fi#=9>d7r^Mwg9Ts)uXPvz%$`RiPIerf&IAC`< zlIY~;+85LxISTqg$QAzzryhV-1lcN4P^w<2aPg~<{n0g1-3td}5Axy3f~XkB$${nnDFG*` z9FY0Y3sRDD!0S;GuKDmnYoBTcWcQC%2Ax0-c}50Ks+x__2Au=)X%}^L%mKNa=)|qc zV2^-&_^E2uoq)b0FmbCkehn7;2IRdB%Hkh@?k8uF!9fA}+f8U`b-J%LrH; z5|ATWD~sg-)gmylj|`3s$eT5k#dd)DCTFqQhqx+@3&>Gz)bTzU(8A;_GB`OPo8zG) zojjWW?N82PU0lG#^nkorOj$e+=w@;j8JrW43yQ14L}7H00ZZair%b&c14Xp9c|jf&1%AdIXqjNA6pqst+Z1%sBa7iM$!WePFf)-E2MFpZ=ii|bTNn0 zs{uy7iosM3aRqrFyKVw_kStUwnCdi&Nl+RT=y@!G5Albxl$CR;5=CceEuf!EwB$is%4=aYsC|E&G{Qd4@4tTMF`sKaF?X8o)F_=|x6rOxyz4%$=^}f#*dw%y zP$&1QkFl#jwb)dt9A~{)^*3IZqoc1t?f5&;gK-Hs`5^=fD&d2R}!IH5r0r*DHUj<9%y@VlYX-aVsmtpd_>}Kq*8JoN4cA{U6 zodz*?qeJvZofJdx#|9qk7pznC9D?_~Dd`m?70*#^JH^O&`o+J&MxEM?@Y``d6K^~h za0*q7j9Y=f`<_Ix3zv7DwnbiuaMQ*F@S|XaEAiufQSd>)i7#3^=03oBoiYcUqIFZ# zQC;szM*Oaqn)0X@8H?F|^;29!ru7C+!u|%?GT=$5ljBqwvavc2p~9k#v$l@M_{Z%B z{k7C(hpDq87xopv639Ubl=^z=lenQJ%ax(jAT=+k^`3tL4>sGS{fc~Xd%;fo*n%Xu zPq3$FH9QKS8^EF+qo*QGuq4{t310ge%^Zwcf&U9BIOrI5IN5e>4LF&K_Km5S+Ht-W zdDA)0fSQAm4tV^xViKMl4ZJuOCBom)l?g6-D>8czwB9k8{gK=$Pr1sSB>f#(^BC&- z8g}0`k~$9}zi$Vl_ha|mQ^&bTiTu)G2~?uw=dI)QSv3nTh zG>#o*=|g#<0i;>jz1T=%GU?sv{;JrrG~=r{&UEb940%sD(s?T?q}Y1dXD{9sFp?^! z<2JyKY+WwFI6Ufw%SDZ&*L)tOScgAiu{$11V6We!@;6c1yx3jbNaAb1M}HvJas)eS zLT((67?0|?h?f}2cytLK#TOs$*2FO!Uwni+l(*yDpJ6M$_(b;(Z>P9%dFk(|Zf@Sb z=a%E`G`Bu)XSnb1cD6f@w{zX~yj|cP;_dtH@4Q{;%6w$!1GfNgm$ zdAq_L&fAslhrIp7-NoBg?k~JuCgOO(k{v=ka8{X85DCCaB+jxhH!;p!JJrWO3OtD**^A&p$QYK&Q%}{KyPvW7=J*_TlB~^77M4a#V#Hd=}I?$eB~vVxR6G=}@j@Da>c4NnJ%BTPt zpkIO*TWq##iXCwh#l8difk|PD{od&)hZ2g^a4I8~KoJN>50xe+B7CYChD9%RYhg8JMrr2Ls zjAXewl-gFMVrNE}&vDzqa(v0k?%-y)SeBgXrsM52w?GT}d%9bRw=>-4yq)O|;q5GU zK5u8cn|M3NJp#rZx6YHczf8L z&)XyJ7Tz9pPxAIV_mPcuu6Gva~IkO{ApCZd)>^NJ+Ka7PkZ`se0R%EFe;<3-pD`*c^Z&314q?rJcGIPko8!nK_2 zJK-*7ebx#02#P)78X*E)05%e^1lo}S`Xz|5Cmh=~C*1tsz%&EX#-y+(+;{!)mMRj8 zw;>HDxf2Z96K=_2m5rDWX|a{f2{)xarmAD_W-QySN+(?ViFCq!56ihHzKLR&{yxR$ z7**Ez602Z(`c7!+Gwzh>fYQ_d;8gmoOZSM;O|M>doYLh*>RS&m7YA%cEP=sU8Xl1Rwg>;?}S9+X~Q}B#xANDkW-rO=B@qj@yGlZOtX@|u0hd$ggqln2$ z-xewTrI7nx#9T3GA6lJKICz5eqC@WEM+tstu5#=2?_D0jh# zM_4)eUPSXoG!r=w(hV_*6GVqTPG|8=Z}r5yFY$ybeuC)U-{~%@RZvgJr-!SV%i?{~ z2t)$AAb>#+Z@wV?KT6Fjy3uhm(|=wNF;U36n{dm7J;x2?Wd040?;>UiS#pPPD8*eP z3BE^Smoxv2$089Q3Hd`SxIR1JWXVZ|#SecbsTbn;(K;a~RsamGQgRSi%oZWv8K|QaCA# zjlk1vG?|lU+5;Sp5xRY06 zRTYA1Nj#y7=cfLjczjPa^}FG!YH9?v@*%KGM8*##|f^zt^|cZ>!!XWa?)tXrTwa@s|RGCV8Edr^9WXMb5qv} z$axq_QB!|u>?mWpsp|%0|Mr5@X6B}D7?8C`s~wk33f0uqWKNz^N0CFsg+Pikc}-K_ z4#?T(@YpR6l*&{u)!AEa>WhJ#1*xe?dZme1rO!w z1G-HR{qSePO`R_&8{JS)dQ?Obh?}}(P*%fLh76Rq5H~edhi+;_aIWCV8|`_GpeCSA zQwMU=R2i4{tER3Ll&f&Y(T-6BE4R6+Uk=Ljxm3+AHFlIS-PErH<(f522CEfQP2DhDRZZP9D68*PO+AqG_LQ1ezNUT~MY^xf>KO*oO+6|o zpI?fHNJzHXNUEvXW!2P^gYwBQm|_9wXM*U5KND{1`9WFnm|)03MI?c^sh0<3NA#^^ zAg_hEsi``2Q?Cok*o6VEy~+gj0Ii$4NiZkPhH`1YYUA{9$`ZF zIJzzg_dSsOY%$?8c@q68r4(DR+C?VDk(WF`PWVDjN~h$Xpq#gAKR6`pk=;K*`~!%ng4HXQ zjimo`A>n}h`%U~e%_O(Ms-q|WMybD*XA*Sk;gH69GX0MW2}dP9?Wj^OhP2F+>G5mA z_j2h)O!K1l-vMc#C(~#s;U`(=8!exMbjg$HGwlgK%f=@WAfVKbA&G*fl#!`{oQ0j{B8Rg>pz+uupJB`@HHhOBhP z(l4Bdq;J+IJe14+)K;cIpJ^B;f<8%~fUrrwLjg7+)TxUaj!r^Pb-+Z>>naIS z$VX!pBhCQ)#lq1!`#_Hq@&n9!7I(4VDP#_FK0>1>V^>0Y%;&;2P-K9ZGZ8>{C<&P{ z#qAn^vJk6UfDUQ=kJ%U}Cgc(Fua!boa0>u^2%`^jP$ex%&ibo@UBKkKizPK)7ii0*xD#=SoW&Hp^(!?w2-J8>`kZBQiI5+?rJel< z)Mu9TIm_h7LT1PN0PO5xP!}zk*jdI`2-$SH#vcKVEoy4P;!Z@(jyNz^3wfZYb|DX_ zQkL{N%j9|lHpl5Us0XT*C4J5^`MHqk5Y=X92ZNewNt?TFT*fyGIpDrFyb|b_NpUBl z>qa=c7580hwBZw=ezl~}StfT0`DsB`*HZ7>YfdzSP$%j9t(=f9!JPe6TTNngz}iCeu#xVCZ4 zo&@!WB@;W#IBo>v|JKfm;+XY{Mb(1Eors?4am-#2vi%3za3N43OZuE;@;4##*3mWl z8mJDI^f}Aq@0cq&L)YwZP_r#*bJvFfzNq$dk;-R4I+g%*`~vL9vO&;J#=BfrEg2O%O=2|OUgqS*xrDAa=D zx0$7{`4#$CX1c2o5dv4mvJo_OyHIK&E8_!ftu5(X3rc@p$SVCDhlf({LK|mv zL6-?9f~HLuDkx;kG(6uWBTE3RFp$>E2-)*OKpEK$?Xc0c5&BkBp_hd`f&HA*75unO z5Y>R7Urt=Q9LQ;5*~?V42%2hL2p6@x168$(jA-UuSlD-!B7)wXFZ8C6zs}NTUjpz7 zL7v$NnrvODy^yKTYfEhbbSH>vL0h8XQ=wi$4q2>PMvMb6BivHT*?1zv$CgWF$o6Cc zY6N5ZKVN#r*nWCvl;jwU{78nT(~!iB?Z3vbTU^8LyG9aoNH=5qn9k5+OQBt{a8j`` zkJTs2On9s;3PLL%ri*njXUFyp7UCmcu-XVrOUrRSW^DfhO$_1OOWcX$z-a%v8#ttacTeTHLNeh1PB zPu64mG`sNsBBNTx0!SZvvL4%Ce-u#iSCDpkvL4%~#6%}f{S&0~o~+0A6&9-}3*sK6 zCssCN`&HCDW^CW=TlAzrM6NOj{bAusP))AK_D@?WE7hRZ4=2pn-aV-h(HVMA!+2x+ zyQ?tbqg*CHd(Y}-Y|jUb9otX-D!`2R0^l|a+p+!1G&DZL{&S?!8KB&?WBZ@h1Goe6 zX(GUk?Zw*w(w4>PhDBMRL)shL&kbQx95qh@fVu?HAu2w^*}{3L4DHx{6ppd|?@hGLzCfou z1J~7O#`c9j)U~|={AQcRy6uhaua(dT{&7$jEy;b1s%W-}vHiP$Y4Q=MROL*iP}%$~ zXvX$#W$nTXK+7e?y|MkNPc+#WRC`PMoHb+nCucM{6x38p`kXam``~uWE~VpVC8+I| zOzf-~+qb|qjqy`Je@}{gWBcFt=x)X-kLwf`b!hmUHDmi8ZFPMW1XbRWK4;C?zEwBv zY!gsjEScC@Gq(Q(uWhiiqk+y!ihE;w7f))KTnB20C4J7Cv3HQ;1BUr-IHUc$hFCr~DSTw3W6I)z*n@L&W>U_D(4%#f;M6%3gwV0TR; ziH)S2AytO6aIz(|&Q|}*(~ zq#C~lpEDub)gZlUWizCzhg!8msyVY2B6@=xXjwC)dh?-R3t}3iIi9SCRF}WksnI5~98B&dU4WAMRA_ibJ!mz5z^^mIU>k63%b!j+ZhEyj~ zA>;^2Y{P1gVZ0&L)mA!}pP~I~bu*;m1I7-idNfvyh^~zJUszP(?T{)i8X4um{$ixj z8KB&?L#p^;0IEZ5kO(kCs;D*qIzsGY0Xn3;AytMOj;jC30G1F$hp0GZ@=_VvA=UD0 z0q1|z18fC)$l~0BeDbIf2ZmH1VrBu4VlIQaWl2ix4XNhc&|{>SDj4-)QMp@l!iQr> zHGhh>nEn;8MyYt45>=cY$H0_AA*mmYRbzss;ZAkJTCn#t59TaP$ezNeTW4TN zSHL4ssa`e}kl0x>q)PEqK;bU{EteGchE(4-(qv;$?JenZ)(ol2=f)98Z7>wnR7?7t zHAAY=7^X3~64Z7}CU({gspypu#!mtLJt^)DscIF{_2pE<_z#OZ?0wFfAyu_ex>yB4 zmA9nNSu>={&`jsv1XLGGCU({gseUS`4UYyoD=F>`sqVfURK;2cYKJ9#&YB_BQG8g2 zE8r(ke^}DztQk_}&83|cc*vUpi>iRc&YB@r2uZ$ zsZJKr#To-@wk3VenjzKp6FT?xp!QiZv9o4KRrrp^&jY=g6!(TyGLPy(;^8>a1@zqE8E(oViSrhNSVNs=s)Z?pbxMr|i1X4*)*5j)ictwn=Rn&ph$dmQ> z>g!cP$=x9J@nk)|`ZBwgCqbI-$$EVC_BU#VgjfaXQ!AVCRd5cP$BeJCX2kSNAmT@? zE*e%fxgK9#T&b+wC$*L?s3OexssbK{vX$qc=QNBrzUuZvK3!_leU)3yC3_%1dL*Qly!Gro#9=f!AHvnbAZzRRN@zpYXD2&M{gf=o@QHO@lSu?&$ zp9PcI>8L0Usl=%zfW*$4@l}mUx)#a+t&tS>##eQp*DkaH z)!ULjXU+Jk1>R}lVod_|z9oImn(lH%U@>aPO2 z7UJsR(+^mZ90q25_4-_Gvn;4rEa`LBjIZ8C2g}833u>Sx6FY0hR}E|G`kD@ONmAS! zUwuA7lUqR@vZSwO&G_o;K{w`oHgSsu|zwY64%t+Sdu>s%=qfad|h7^fYwcl zd*iDaX;lx>1CZ}jea85TDo2g4$VVPu(ezx$rNZTCh4FHHxpr<=95C_a+Pm}6fybBY z;I89sM|U@GJGrNL+u6Oz+b(XzT;jUAS$NyceUZ1_-A26a;r8QgA9osW`?_E7w!eFd zw*%b!ydCIfnn!j9yTy3>wp)X@!`vpk9qo4F?HG3`Z^ydxc{|=+!`lh&KHg4t|K#md z_a1Mjxhdx3ErZTGQ9V*f9%B zpawZkzm(&-e>{fqacD})qu5o3{s_J2%6L2h#NWFpK~GA+_R{~2i65b9Dfka3{mDo8 zYkj(9D5{gb#iwxl(=_C2^fZwfoA}geU&X$yQf|f9ZSe>!4vWg3Yan&;)sT0}W*O<@ zg^p9$%3R)boO-Y9iq{Bg1vbkXO8savyf`Zx_YF8JvG;RhM6egBOTCU7xgf9OIn6;xC&J})Yl}d> zBG=qf1L!{?-y%dg*$L5?&^5VdvT{=5MkON_RS6BKUR5Uh(2Sv*GW!@j0fzpfVVu;f z8l#T?k-IkHGdS4Wz$hwV)=K|_^Rbxgv`IJ}pbZGq1x*TavJM{!FLDc+3zJJH0eC+d zD2`6>Q0v@lp$V6Wj1#J3&l{Oi-4;%&CFzk*J|R2dN#|?u`vicWj2SIsLdk|r0jC+{ z+mP;&%+-+UAzrNtRTOgTUg1!IQ@w_{9avcAk_euIk#!L!)r4wdy5SSdg#%D49HO*} zOttC*)EMSIX5AiOlkGtEO-ehdQsCYog!v?YqobxbDJBD&YeCMoO3H;W)(+F#@ZUOp z2~Eu+B~4XxmD92CtDBG$nhNK1a=_2;!vfx;s#h2v&$0mf%WY7lIv#0;#$%doSG@m( zLrP`Azi6f2&<=I1Rt&W*6g^qUPjUpEnwI8Yv{LUwhB`<0xMS(*LSF2MFSb~kXTs9T zQRZd~S?SGyGtUBCKCS?s*cDnJ152>s1F)=m5?o$3g-s2sHR4@M!4Nnb!Pn+H56JWWSUV5~q~N8hD92EU6D+_EE8s^VXBGgk7~;k-K$V?8 z3Zu}=LPnwm#kasNB!hA_DHQYL@{fkqe}JWY!_)(1>(!{=O?(ybR)3hz1Gb#y?ZM|q z@j6t~TDTFd53HF*-=Zc^c{d2i+zXIVZ-^r-K$kebnI-|5>pZBrAXZq4J@gg%jeu-> z1=MyBM=V8|XlxA{90X6#clux3F7`Ng1*2KDjt;Qdg2qVINZfWXulgHj?xqG zQchNV`Z{=M8-+!sFG!zg2~`ftksVd~?2z)3OxI>d$u)y=bT_>C1@jdlRkNw%Xrg1N zYwBr9Tbr0_mz==mn6_fS}BDQaLUjK>OFz>5*G#Xiz?E zhff(%y=7{S!50>to*tBi#sy`>162l*0Ii~@)048$w4hwEOy~awv{s%@kIF)L1*t2h zp>fAE7}_vTr)OoM#X(tmr@Cl}`Op@7It@8P9|z@om(+Did@vW1^=qW89hn+JpPFy5yX&q2&-04L%pjYf_K zWubH0g%GqVq;nNVzk@GIg{}tWkkhEXrr6)kq*Z;Z0{#xlcg_G93~`tNoapZl!}xt1 zcNlXEn)&#?)gtIgVCcV~+`UuJUfTq1E9smuKMD-BFME$hR1q|_GL$kx9>oDejQAC+ z8wOUM@D$ikyAs#D6xk!>^*$e8BZdJOV<1QAZ$-%0_G{-CLt93=I*RFym{6|> znde=dekZj3UV7HwiIDlr2vztC&@OxFX_{+jLWCTaOZRC1LW^l-ipm!to(mhA5h4G{ zqx+%U0E${jb$e{-{Rp`p!DjCEY656%A=T|Mv@$|||D%R_02pi`)uZ)@g-<&o-7~+!|C@OLB>$qo@@tM9QZHv7^)K~=VD$1=eHcd1`DYwVd(8hS>pwr)gb^sT1Z_}7@8g_zZj;WTL2>3 znBwt;mEEV66T$eBNO>CX`fF!Q_uo^8RzWwT^)LHJnUbAAdy2A`5hVJO=8vGo_?o>aHx# z-GYklpN%Rs5FxM*<(9GlZW!795&)~(WSjx597UFq^7i{ejXhd`>SRgEKtr{p?18S3 z2Ph-4dqx-}n2au21{t@IGG|dZwi3iTL*cs)zd;*-tnj>so%$NuIiq{EubYkW$x@z< z)y;MfX!`c1=(Y@ud#QCk%cRWzvCgL$64gp3p|1fsvmH`Kch9Tx84)cnj?!rgfUlZN8t!#yrSn-3 zoxa>r?OO}*eQX*_3hs4MU7Lko{XHz z|0$UyUOT4hN|)E`(ei9<<*U@ z`MFrPfjXT{u`I4)f}tZZvhS7TGHn%MZ-d8W907onydz@i6wo`GWj${EsWJx(7v>K7{~KGcT$gBoK= zpR*JV3yqAG)7$G}Ee5sTl0IjdTox-!p4Q|ypw3$|v9pYS9xMCL(D;3zva6{Di>sJm zXn(AH?}RQ^PEape(&sEi!$RMKG#y55P|YprbC$__v2xKlZF2yqNtU#^>%)L?eBHX& zUEO5MfNn~PtC(OYgDao=L)Ywgpe|U_=PbQ!AIj&-bhGhw9bA~j15nZ3Oa*WQ(n?KS z2$gf?=NMJ-OoUvZidd40rJ=d5jHs?>2)qKIg@vp+J^r9c3ZV_IJd39QY;z#cInThk z7Ial`!o9BCSXfVs_!Nn@+Jsbd+L^Pi>=37+9{~JmATpIg)al zOSjI1s1Hh;Fx6~aQ08Fo@^EG$)w>B(Q7SxY)?uoCchQfkFx77mOqgm3QkXCm?YCj7 z$;6v56}=5$!c=<)1fAO;GxUH{^uva!iq1!0h`r^p1U8W4^h-Hz!&LpT%Y><3o)UDL zyZB@ z6Q(-yH|iUE-!w)9dtt&<-?hURa3Bp1mraT9Qr&Bku_r6h7LK~(U_od^cz~jrTSX330VL|VXcwwsb zL+~F41E`V=WWrR9p$V4=6QDm}=c+ z)j}lzRj?qvX5-i}RSaUxt)QtFBKegcHe$n6r``-W!;=F{nCefwp})ie>@T;04O2C! zh_@arz`tl^!&K+!h_zv=t<&+}MO&JG(aMIYvOKUf!c%|! zMGJ8GxB_gLDo>Q^gIf{A-gEhFnCg8zf$Ilt7#4MyeM={!4O49|Eu2}<)>+*e;rA)^ zQES3f)7J=RFVK@oaW70Y7}N8`RSxL>vZt(en1-^P>n;rTHGUaSxd2XNvqCHG#5)FxBX2>ehXCI3EWp0gsFBc z1XTe`M*ob2?LqXj6lJC<6Q(NC5Vj_Qm~E&;VX6`H(798(^#HaQNN`K2 zxDmosm5&D$^gVzJ7UJVmK?qZ=&L$M}06?(6sR2I46ofEUY21x)cFzMSU?Hw11tCmT zLTF1>0o1h+Rh1J_5O38`n5xDfg0HBe6M!BBaerpRRKwp0sFQg-w5i63W5ZN`rq!qK zN@(kBdK;#SN5#3>~(hR_e0E@m5 z-arqEFx5*Qj4;)q>-bP27*PqU>IAEDnK0ETgkdN{(HdF@(&?)0*f3S6OgjB=Xk)$f zCQQ{Vn{r%y2yMBin=n;Zgr~VP+Xd}_r<*X<+8x^dFVL=dx(QQF#UncQ|37Gv1Fioi zOf{vlx+sY3(DHh^2~*XHRo5X=30ieeH({zGFXKO`rt2sE_g1Ha)oqxn;AI@l?_&RC z(s)F}I3I^LO!ediSojFU+AzusQ;ql+X7)n-#sFTJYC=Wr!X;=|N#`cAVX9iCaMJyY z{V{|5E;u$!HIabq5c3+q3sXh^j*LUtU&U%ROw|M5*rVwjqB*p-q;tk5O!YBcpKO?F z$y~vVm;i8=fmJVW!c_CT6bMt*qbmeJu@$QWl)_e@4O6{`M@y9Rc`R26ArF*M6Q(LU zIKXC{!5G40@maB9szo0MRaSWc6f%$(rutli|RJUisRI~Q!4m91{m;{7H)rsoSOqih-OI1C!tr&a*^g+c1V z$X7cXrpk~`hmsm70e4${Z(Ao$d{n@hLIXVm?~8bZSEX^8y50TFdL@o+eueT z)H}FI!{RHk4O6YbgK3c;VhIbVdgGuC!c=20&z9Y<1E8seRFyDT{Po5-!c?!V&`o~;=#Lin)f^3M0KR)$IA& zTsjN`^I-AL33VT!;$sL?1#!vY5?2IO%aZCy;jj$CRC|U7)wQiXfWa2xZrj%uj3Z3- z@SYym&IGzN9QPSUnCigKI`{3Mj#!dys!C^@2vhxou`>JlJ1A#JScwu>DyKo1DghTd zPLleHFJ`j!Iy+~V|0 zwT1~(QH6S8sxg?n%ekBZ_@_)`Y2kT&(d$KsP6YCoToTR2A_onyc(M_$$vyqf3D>)q-jo{|{*9 z;ik}@M~O>;FjdRfbVZc}UpJXF-uE>r({utqGMO}76kiPwh?dvz2>>q2LhxTC zlg7K}wPC7-xbNmP$H4!YOd9TWXr=1_VXBya_4ybafdMZT)$o=S-0Rpd)izkAEM5dz z+tOT5-ij{_Hca*P1eN41;KPzh;I!e@#F@J9?N7vIE2DfPqJVpCh0Fi zE1O71n5sd1(BaG*LTgI88u6PjRd#&lgdPfsKF|hv=}nkwI3_u<-!q`CFuHfo&!@W% zJ|RqX3Ab;I?*@9@;J)RH!LzhQ)_UhJb?msY3m=;c7seB*ncj)z#jb>H>vnEWne6`L!E2tMOnb=tqrYh7(yHFcw^Q5>J zruuZhCI^5TYe}E8CQS9)9Za^M`{xfqeQHTADXqLP)zb$0lOf-N`oWS^EH6w|@+%#t z`U^l1AsW^A)|?)Hm@w5I#49*5^gPg)o`L(vA0|xIGLH@^y^cg}Z9=L!FHE)djCST- z0MjkxIpf0-rW%JY39vJ(f$o0>uDTKak}K7w{n`_UsVD;FxKy3lTJ8>Vm}>k-zA#m@ z@fhg#-{pm=ZZ5@lV6n3RmOwTN-VlQS*&4+#VXEVpDf<%k)(K~5j=K$0Q7SJ?wdM)> zQ5B||1i^%<3Lu3EQ_+4KrrJlm2~*KW6-=1wT%n*d59AIkf_~UA)onbMIDs9%VhJRW zumqk^0=8$uRQ!hxQ{6%3+b|WmiZE3tY;2e+=N!ZY zVW~M;Hs(mPh>@|rN!(DcF~ekSDkgjArqG-0Z_#gw`M%4TE0hN-@! zx-wy^8b;j#5Tq>R3WO*p zb(pFgo<~s;UW3xX8mLP3sxr}Gs;aR8=WXc24P(PpAC$#o8SGtb6qV41souVbVFySvdB0=SwCWWrRBpb3`<6Q=qHb!fv>Gh5=V7Wkcg5}toy;pX(hRA2AM zkq@~dq-rE{HP|rKI9wU2z%3#5Ffx}UQJAVM9@32hFfSaUw2HK0s$~IXas$ZSNontG zsz3Ir$8To7y2J}p-Q0+8eoRIl{E;dCj0(4p4O8VihnGT=15B7IO)%iRVgdG- z+rWmYdSEVTXAAHzTG=pFx~Di|ZI~(=lSt-Tnt##ChN&9;XK93~V$P&7(C!-Bhjf=tStI(QQ z-5L>Ib=tS74v)a(GoWuL#l0}qpuF&98i+ZD^1@WNYvKze*!_i(RG+3|HV9MAu7gwT zFvL?9V22feFxC2xP=PlfimCn*sj_p&u26cL>IiNXG6E}{49eA{P`pjm9X*<;3arI5 zP`{f9Q!SVPFZzNVZ+Tl=eiUJ1=ho_*!M6m7>jCe%1l!xOf_N}sNx_(hDsEsazDmYK1%l* zfHnpa+!8iSwc`dZ5CpvgV627s__SfFqj=qsp$`G9wh*6UHcW+BxPtZrIA$TPCL5-z zUJ26=DZ4)b{9_@iDktLHW=xJmn5xvb>WV5-PDAgHMfGPkO!fTB`eZH&trY2Wb#rW( zDi_{N;ghx=v?eya4O8Vht2oChOJRllub#P0xaSj+Zps#yGY6qKQen(jC$u;_Ae7z=MxRmE&x%0uLX zR+x0|=Oav*szOg)?i$eQc)AHwP0OqGj?lV$x(QRQzoPvc2W^U{n=nZg{#0Q!SdU(?`uf`LU?-*)Y|k4{_k+!u}GZ z@rZ`a@o{LwRALOyv6>(nhf!XbD$iU1T_E-{fMegLN;gfrFcI1`(z%Llm@563IO&#S z{|1v*jRMwl4OB{rF!~kBHstVpT5tp$4s?}_mYCgh~9Ht7)M6ZHHWo*J!KhucH zhN&KiATy#E!14xGo|rJzF)szeR4x1C8w>zNTdcZM3R`_POx5~l{Pzox#$cI72o+r! zHDRiZcq@p^tiNh&guw&lLqp_RFAS~=Wjr}L%KSOO_*vP?z!336tnOW zC>DJdm@rjV+%%AzqA;`)q^tBMOmz-3l(~zk1Ffk^ue&`HraGTr_lng#$PUQ+@Y3=7ZB%F?KHQda$Sx^X1HElW~Np z7H$hDyd2P4;keH*!c+_JRUyv3J*a+`WSgqe*(SnN*{fnyjjv`+nCc6BZ-w#OK%IG}l9H+tCR6kYM z4O|Uq`)A<(w&R2dQ`Ir!#GyzuFPVhC2IMq&o2m@%|G2_F1Ap)tX}mDi+nCkL_(h

LAE!yT0Iz;vQN`z`Yi>Gw_YfMx+(Y>kpbiZ$2SRwYYFV;hlgEvbeocdSR+Ek$R{;1Jp;B^i`<|Q?>k9liNTYwj^Ebb?zoi zRUZK@cJ>OWyO#9jZo*WRQfWU^eSpvx7S&8PcfVnTsV2GFg^EDyCB?lkRof<}{Xq@3 zq|aFsraHJqlQTgrwWQBk6Q=5YPUpTI)Co%_cGiTc4tLOouLFIY6!*eZZ)MeF`o%aC zu&7$_IcvgHO*?28DuJqRNuRSOO!e~@+GZC}!z`KDSrew}@UCu%`9MEOihE(IS2}8P zFQ}82^f_z7RHdS{3pYSLv82yg6Q-)1OCK;95G*Q$CHcd^gsC!qq-&u%(ASdUUYKhB z@0z42)No7soHb#p3@LT77Jyo1NuRSOOch$KZSDhg+LDQD)`Y2s*3z|bhtMTS%I1Zs zX5!v~Pn)cu3R}|WtO-+1iwHVb5ET$LK)r5BuVdpcuhQF8V=)DUqd2`my=zG-mKUZv zjZq9ka{#QikTs{rA0|w7eT}xcALwt-!2RP76Q-)0T8F8gB2hFN(Q9TeOjUTdhH?QY zYa!1Ws%VWPOw~TO_Prs{ZqL9~H^N~ms!jU^Z4OgW1j=!#IpNI%nD-6+fZTeT_#Mmuot2(_8eH8yOI>HBlg0Csb=mBINKl{43|xqYGhj#1i1kD zG9k)I9j4+B$-&7dP*N;2_76})s7!R2>ShH*OQGj8j15!m?~2DV*jwEwDxnQiwf-4_ zFlb%FbU~jr^}gG@9l5NL^slMs%I7gEMOqi+zCItRv z0rr>Mz=o+N{e)NgR+udK7p-iVst#(~3sb$C9#KzA^DkQ2Fx8|eOCwAraCPWrY5v|g zt-LT*Mm$iOVgW86SAY#u6V3EQ(c~f`soXCs0G+z1t3gy1m}&I1@V(GK$V?4c7-BLb#)x-WGArilR>$f6pAp_ zr=J4-6Ik#QQ!vWbt5Lt32vcpZ1Tiz%qL#O{VELmb8Gd(u_Cm@rk- z>FFj+m3^Gfzb>@Ko^HZaHzuizg6ILQpQoEJ)qy%%p9*c3r<*X<|8Sgg$F&aHMyuN} zRpdCFgx_NS8Pe=vL0xWbm@4xsP`5xl3ZuL*)!cW`v&FAx5-}x#7F;b5zqr-KLdDSs*=s2O~n3bRUp2~&OEPpAJL+8Hms2~*9?r2C=&LHpOF7kmM-AN^~2L8yKx z(|X)`U{UpR(D*ssNy-g;cj^!c;Fc)KEJBJuIYpG!v#;{z!Ml;{nXHkn+id zsl-w3(^>#~!XWPw=7p&i9nu;94D`Ci?G?-mQ@#DA&OH(r$apON!gB6-n=0cq-jb8+MI~?~JMwn_+51o7LXSnKN@p=G#Zm>;+soH&~OH>L} zy`-f7VB|CiQysw9t+;HR!4C~j<2xc5$JcWZne(3MGX?`^6!qcyn))TwYXaeW|6 zRiScFRo`u(&gZ6-^h;ePOqhx))C*G;XsL^wA7ELVj5DB>_cqn|2l_^$A*dFXqzt?; z)vM!ls|>{Mabb{P(uS!{zl76d5s0OR(h&iKsb0FJkL&HwP8i**ecfyvs6d!%J_b76 z1lNJaZZt)=WnkP(t@A;cs(LX6h_Pf?t?S8t;D5hN*s}m|2gm@$t3aG(T1r8Bq*n@0KaRKc%Tha zMK9GO&{Ufd|G=WgINS!-DKAXb?mY}8%LA)UC=WQPUA!<=b@T?DO=|!hj6E+*b?Ci- z(uYGEn@C5PDlJCjocV{)mXl7II1wgHH3_c>(nBG!3)%rMy$Mqt9fTLv&_9V^p#5WX z@19>@&=^OU>dybs_8w4D6kqsgRZm)GHnRyBmW5rH1tjc}BuGwzWR@T~OGa`|0)l|# zoU3-*|f-CMV-t8Z0T7ckWi z-o{ug4ynGrQ(DthYmb@Z;19s6qM2z-s-~$%s6l-zuzF}F-R#ZM)il+DYFt)!JXrHI zGfnAgnySE9v-GWC9nnl(dRoDlrm6>z5mvYh>eF}W)-=_^HLCr$V-W}rX@E49Rnt_f z2bnU9f%TDQrm3u&rW%UpUQv2$u=;6c`pT+lsu9d=vMHc0d6#ZYQ*FnmXN2HgU>()W zG?f*zN!awSMh&yF_rQ9lnQ1C3nAr61Q5Unap*t}3g+m%3ePsn5oBl=O6$4R)(xBFS zmu^i{-Meh6)d8&jnwh4uYMLsbx><#(U@g_mG?i7;R22{b7p3n8>$GO3udJG;8X0X` z;UTE6-=$mARI4kQYDM9xD-p*#ZlI>A`ere!PzJ18nwh4uYMN?gRa0h1u!d@8`pT+l zs^H(u%FYIL)w^_SnyMu>K^Ioo2i6(QOk-I!O%?esXX7y|!2ba2jb@6>^kdHAV47-8 zLAfrTNAF}T2M((vu%@Zz_c3RNN`g>Zle9Q<{Gq0)eh4(DsXBrB<^Q0k9e=24s^i_v zjLVSeTb+?CXH8Qbahf&$8HDSaWK|{&9n(}p@k}75*j|7dj_D<-pf6o^BVwA0tf@al zCZ?%q28wyeoGi98-b4yb$?r+rZAOe!iewhM21d>-i=~pq!^@%sIa8EUI0id=F&=pX z5>rZKYz!nItiu5tODPq0K7zBcNSI9(>WNp^IGu6g$k=j9Q7P9YGL#Ez+yR`OfcK~z z%t6tXl*+DL*wKqJ^2_+SNpL@U7fyVzHKm&C{3uxr{}<3(4T}%9rqpzez(Y2b9Sx1L z;*gocn^$DCnI!WR0v4AG`vk^SIA>!C$IhT0^w~0cS6Y9zjNSv*pDkNo%wXjqsXGon zf^-{!GwZWu^mdwuK>wdDtNsBO**E)S=k(|Q_-t8jJi_17Y${ros6Sg~WHuPp;SE7w zka6^9%hmy+y2L;o3F*(4(R+1?>a%6^ik|*#8EL>`%e(Om4PQvXG-lAtZfO1@nZ+xU z$``6brhi{(4@CRI_^fyX1PRM=7`JJ(M`xTk+82ae#sHGBy@ zTq`3DmVch>k!9vx8gGT^(u zluy4KWn=l*Vc&Glo+?O2$C-!bpA*{DHyxT*RcVK&6+_ygJt3GaLxs!Y;BIQ5x;V2O zn&fy0^zYCg<2s`3qi|T+IsN%R96D2CDhZc(~ltahDME)K610dR=3++L47zurF7>~(b zbjFFJ9a_j$4&ARG;8}nds2tj%FJk!>W#rrNvzy@Oq^@%4t-TCU3_lO(s)m(Arwq0U z_#YrIHA)UmwqPD=^SGn0@l)bs&Z7S$hi;LBx_VDIj1c?TRd^oUbv^#5G>JnK<*q%0 zfmB0sZ5+lBs*`fpth?aj?U4MLg5-RSa@WK|oQ*+-v4E%fQk1)1>~FAT3R3P$_o0Lt z7fpAirz`EQ^yHx3wGl$I`@sDR2cLj~xIvRD`m>QF$3vihcdfIWi|mDv$;!^@&;Q}B zNf9>IO0%hGS)z8=@*DBeEeL~&G=*%X-E|UXM5!*bG^E{??!?+%>87sTl{8?n`LD}+ z@kUIosQy}z ztvobbiS9HDoZESZGPm`G(?RUi>aI6(-Vn8=5=6{FCJLC6C_=)^=m zu>CL+RYQX901!H1J==8X!wPJ$^@@UTqOv&@BH@J3=fWAXuL%e&1t4)6Zl2lK21JW- zQGDi>oP`!X6PS1qT|=fL2(?6RPIa)tmptRYgW8deSJ+tL%O2XuKcK<=JB$@B&cn*# z^{QczH4cZ-3ZYNl5I;=fC3sjx473*k`$pqU2@jzgUE$IAKKCw|7AgCIpU|8`DBa{t z=B{&1Bsi~70RUaoQ;u{3mMF1jVTVio} zK%QZql|Mt->xW^#V%rUa<(V2r`Z2>r-$Bc>(N*aJ9H=FPwkN@bNoH{YZFjMz1{;Xf z(F);o#)8&{Le8wL;)4fL%=fN7YjA;m4S16#7bjVw2hFoLQwEp8N+aP2;Pbu|N5TMn z!}g9V`Jhb{#s38UlsFYgf|wJ_GcV;3>ELMfF>3wT6%&iW0Vq7nAuNKzVRGq$$uqma zF2QvV<}A;Dt`W!afmBdIW0fWx?J0WK!08gCD*3*o{F63@zA8yi6;mGuR% zDGKNGgu?6x20{ov-N}BJ`tda&Y*Zu@FT!0(zrkiCb^S==$>2DBT z6NxOq>5K(YzmR8c(ex^dU?MAPh3K$!0(r>>|iezs$gic z02Nk!eKe_~`uZKn@4v4<14Q@r?ard+kP(K%@R9&Jlve^F$_!3`Ec=J@%9i^)7h}21FJ_i+~e)&B9(*3gNN)xK$ z;X`1L(_*39Gif^YKM$hPs#B+@1FKW7 zhlWl?h88%C^=?RCfgh_=AJE=ly@3tW_&0>>PCYf+#Qr^+A=P7xzQu)sPJPe`D7yFAr3zF{C zZym;EQUqb(k~oZ;FMz2|-MQ0XwUF9aA)L;1r%rOX>eM@=poGDI$7u3hlBGKJk7pu+ zj)X;kzwxE0PQB_fj5`4F{rEXdoIgo|>eN?|4ysdMwZ$eV{4emHSzNPIpChFB+i&~%v-UL{Cg{SM(r{UFm(vJ@Z;R{8w zI`uE^;Ibzni-E0Cc)Cvg*if^i10b9t5?O%LneNoTBGq)Ko)`B@QS1wFY=A`FWe(k` zH_2(1ofU*6B3WW}ryhcrK!v1oAXHB$Np!UV)lc{`gD9p(94B&ym%)cWcuJM4yo=i4naU$-sv@5~SPrJPo&BjcZ)H zz0Jq%JK>dHp7$iC192Fi)1{=`zRoM`g@V*N3gL97-JaxVw-4QlKY9Tks>x$WmU8>Y z*sN^=5@rHk;!9C(|J!e}D83W;9^ymR0z={zrtf1Y#@y79# zWV!w3<))BXz?LdJo!ig9&SgovK{!MtvH+(u?e>F6HSP9IkC?^&3C>H(L3NiowA&AT zX_g%UU&w|djacpWZ|a#=CN>Vlzj|9SbOd;BFA8$1+oH7@`>dA)xXaR%4l|n{nqs?#4h`YLvz@9P1yj+cvQH zF*u{K3|(^m#xi6fHI^yiu*s`km@WRNE!0sA4Wv8r|J~J2ImFdYGFWVJ3|DC^GaR={ zHI_;3%$XB^2jVbhlAdZTvk9a7IHcxLi0@dYXEnx31FEWEK96$ivCPrcSkr)%*1)^^ za>Q6h-i0xik#}KICt+Mg=tg6iCCH%1GGYXg&?pO@g9!UREha_}aliFJG=B3lI|v&B z0&i%-#()^{Fp=;KLk5xgmB#S!dX^qE8g<0fc*4_fP3hiqX-d9v0i9%AeFQ4vUNpwf zP&_CnJVJz1lv7z#QBJ>WkQIO7SNR~E|2+EBV=g>js|Vq;ctc2!nX;letTEHpI!-ng zvZmoMHnngtz6w9qn91ntWUGK}*7!QY^_XcvB?sG%lw-gzYR(`83#~EJ^Zt_aH}Kb* zGmAKS%yeprlZBz;UL3L>Bvp=?sQO~eL{(=VQaz#4CvYb+cr9d*tp!88FI=rHdK0>? z%U!Up>trDMx^9X*{;%u4K=gIJ;IM-&N5U2y#`&zU4V`h~=<8a@RoC_V6)Yo-VqEi&ZBT?rpI3%pD>#AEF0xk%om`3Tk{$~`d=piG- z4G+Q3`6OKZSMUZ;T)rCI6L1Nx@ZbuH%|9U&ntgGTvwYpTE9z?`4TGT3B<#CVFssD+ za@U{bV5xaXU#T$OGZ-36!U*hmwI77t01s)x50->!kkA4Se;wchP1sKavE)1--ZfZ^ zXY`+u!fhAPkKhnh;6jQd{fdX+$A%;&flyGB(nxyBU7p@HNvaM)LrszurXWkcJVxN% z#VD#P!2X&*rL)QWw>Ugsmo!3Gjg+s%Oa);!k&cV{4r~K+RW)33%jDL3d=s#J3g=lK z;JRH)aToi9BruyAuEdNsmZL4yzXsNA#bk*+hXJ2s1f7B0l*uy;mT#^RNq9_fCoH~= z`We39sSR^A?ywE5NNu8%x(uI(OC zC)Xd~NKN3SwFI=?O++;K9DvI;!AS(&b_EfN^B{%)0K#ES5>j;Ax!;(iJ0Se2NogdZ z?e4lwQU+)mfkP-`R#>%Ni@Yc*H^9Q0K&7W?yXBaxrrm^Uf{;q2P*GpicA0KUn0Es< zRNH$=J?K<-E;KTybhZF%J!-JD&5% z<-gZ=^O7_moq>d&y za4$MATo}ROIH8Lp_&R>5fmr-gis6(l6Bq@r&i^B^^GuZ&-VE-XiRPh7`OeQ)+0LlAe7TaC<28q34A7zm$igy9zB+#`6mv z+e6Eg^*j>)m-A#mI3cu5c~64)zk;W<_`jkjRs3Jc(_Q>u*)v-FU(<6_$gAa|+R*&{r-*A1Adq( zMTStovurlQ_#vy4{f>6{1<&@e7dll934=skjk zz99n6XBeXalkif2K2orJN(rH`ZP^sV_-~06(F*vdio+ya%rH&>CK1B{jaRTKg5Du0 z`=Mb3-IOAh17EK>!n7e2TrFF{Fy5OZIX?qGn~q~I3sY4yjK>F@!n%I|f1x?2guQ-2 zaJFn6!x-q4oG|!=7l+W83(hb;-0j5f?S|2Ag|ymO-laoVR<@^M{IOT3wCsn^0U5@V zH8N!*Z{EBID?1Q#UNFBcxb1L-)^sxRNai8^6JC!tz0p9L_Qu~In%?*|>f+BE zw~utP-N5!yUC#?|6OIaRe1VcKBKfw0_!WUGZ*0BM!CnBf-88eN_r?K3oa`pDWCbBf zk))6`-bje{#x-S~f?5lS^(o6;VO`~okFGmde-zmbP;U!X-uUYk34aA>nguIwwB2@y z`m6=CiD03x_QsvJWbUJYE+{yiHyVFS5q|-HrZ|>2j{8fB2>Ass0pJiNr1QqgTcuSB z0xzXG!nE2OHxH1U2EbdT<0x+&fzdu$cOdZ5n)92mm-5D|V`X(00$=URvAl872&XWr z<&8UP=@io&KQ1LxEN`S{v%E2wys@|NMrxmjyzGO(Y{&3-Vu|tSyK35mlO`6SKR&j3 zh|}oPl}`BW)h8H>mv{3(%Dstq?cIfi@w!u;EDBxcCf=rPR~ErDOp|}NJ!80p_wzq^ z?dkGDz>`$eeT>yf#t&&^gg zA|(CAtK+Y-p9e;;9%EPI`YsZbkXYG#IDAdYiP=j$tGvYWaMoyVc{@vJH{K*(61?%G5#{1%}58dhV9zgpV`%%G7I zhs;c4ipCuw#Y0AjtA_{bxRBZ~&e@u#af*Yht=GRBsEzvU1ff|)lh8OVAuC?MXR)*Q zN$XX=Ygw-wvTEyniah?UHv)*Z-i$~)TaSbvaTqlrn$sC4j<%kVtE_jd1}b$6FwHoN z9NK#MqoF_L=BShlhf$B}szziLGT22iJPuHzhL!d56_#)*AQd!9)_Y41{qqkvLUI zf(o)4q=O2wKJ8@}6#g-Ibu6wKWPJvuxx);yelyK3D7+tdLo`%Ki60{CUXH&qUO-4E|;Fv`gP#m`%UUqPV0?k~->iDGyR z>Kuzh!s@z@#l$<6T?9x;jnZ{rI{_Md$VhRtM4{1ti2gJ>hS7AwwkSMFP>`%QGU%@J zqz$Du>hwJb9Ix^T!i=pff0iOY&mZsg96S6YwXR{2mE& z(A0K?5Q0MJr`{{i$;=XR}pjNBUn^RxsM0wZR|A?zTP zb=+Hl`tJx?6lfM+5O^`gVJ-@iRM_KsItAHlAi0r(IBClwcc9W0e$G z%x3WHfDz+|RzvQJH3A1d#A=K^f7n>XT44!u?Q9{0Ehm8sP;nEf8@4#Ro$WyCeuZ$- zi!~D&>xX5_VP_Ws-PZ8e7Th3g_!c{RP7ulxa`{?Icr(|tt9BLzC{e@Fh-vbQ_+c?m zn1fXuiGK$WT|$aB1XE2oc3b&dO_N6^G{(PS^Gx8u|ysA$af>bdDm; zGX#}M=#W4bSi}RD{(+k$CD}5G(!S=dT@z(--;&T>RGfsq;jV2*WO;`P+Cz{xI2q-w zk!J8K zSL|%4Fcb3(Lxtlv-o)izacAK2N6H^|hxNfA<7db?L2^z~8PbP-47*jw&Tb?1kwW-6 zf~BYI3!A+SHGrTX93msXY{C1(=B3zKc0liI_=Y9?i0dH+eq{jF(r|iDdEk1J%g*i~ zQ%7+41IjHu<)P~t8k{OKk`Pg>^prVfLQrA`Z2n&{fD1t$O3$?BFxn@ayOvD0 zvlrkb{;A~%D3ZIrcw%R70F@<3$dRoc&BHqMwX^z2Zi2%ws0%RNE(>?P!sXKg=_3>- znj@|6<>X--4%*pF5SD0?D8Tf+JUrq81{$Q+E)Wj-lB5IY<*xO=+t^iLziQk?Rgu0o zgS+;kuQc8O41f_uHKnC2vzxw0hF1=_8rDfD@E0yrnuenuP2SHilNLzQ8*hQ`0Ts{L zJV}3}Rfx`q@n*AOPLDn7+E;cFg6v|4@hX*jXB$)ZJ0co9Z56?ux1|Na1Z6InFzvMBd_9~nV+yE#)b?(jHJB>TQ8CUcJ zJL`tT0aQjYs&^?WW3%W}Dx8gpz+dHYOa;Ecm*eNYkuYs6)uFmG@I1J(4mF%nRUkmK zS?v1yG&p$diTOv}iC$!Wl#y2lrJcojs04{oPNi3;<%YtUf3;PCw*9@gaC?c4Ukc!Rr2O_ex( zOznY&gNnvMu{S}~r*aRa+h?6X%4&>(I@?)GQY7*TB5^o`Jxu&t?#gfr`v4JM7+49y zMeXDaR)tMG^a1)|3bLmHYpij*7(jf-T_fMvWQBVJ8%Q|Wn+1pg$bRnXcpJm5$w;54 zFitj*Zd&0Ocl|sHg>MA7TNB9e>@gRud6v6Q;?~d40==Oborv*7w$?eGanDAx9bSUr zfLq8$7cA{K;m!5%guJVf8&|9+E654$e?kE?nk|pN^k{a+m#TfoJE?W|j&!icKXU#KQDi8j}&-X8(?$$?$C2lpsvPB{~v>0Mm z;xM9?K!n7$8)0881-2XMhZM$-2CM5nDbnWJU)RC1APc_*!XLh*02;F;4YRqPl|l^5 z_7qPxI7A7Y@-X3JNi%G&ud6y)kp+;F1VTO{#aZ|qo2wo}ESK;qz-lNVtOPl9(gK^S z$R-E7yx7j#1L~r)OL&RRHKMeWodY}?(0HA@l*qlp=DNGn$=*YG%K?3p4qk0@MHO+f z+<^B3I!v&rn{>ydwYJR7+z#Q6cYyt-ar?N!Fz)PgJ$=60ChjYH-y;i~CiNtiE_{@;2u%siwo(OHFaF2pUFd3vHb8?X2n9*{JXdpbUcUsPL;N@J*aX|sbF z=aA_NWjuoVv4E44q3~MnnjQ!2Z=^rhn7v73r}tkl*>23C}CAzR|RFb6(NHndS2SOcA3S6WCm~G>&J;sb{nh*l=lwhZPuQU?ykY#JJ=hf2D~s4*{z3(j3Zrbi#nMX z(EAGJWF7v1L`cq8u9B4;tPJp4zMMy*7$Ik-YwWL1)&_Vt%@HDG{pPwlc5|}N0ez)m zkz3vqlNPv=?>Mk`t(~m|zEN|82$QqeRi~%q907h_bA+5Q76N6LyB6JYVzDOf{~DHx zl==_wX4liKh)AO$B5(*RagjT6<0`<9V@JVEEVAS)*!iD8GK1Z_sxBIUb5}jcFOOUw zshliCcnn6No#9b*eY67fX*xKRyFO_n9cDP7F9?1?X7dVPr2*z!2b+iFB|4{eCFbdd z3MGVRClAWa14YM4Ne$-BLVfdd*CFO&myq!WWqw0)t;`A8Z&1EQM&J(gwfV^z8_b^w z)tVY%2Bs9lkQ$A{FsP%GP){T5<^czLAIU`(gyFHqdl_MMzjLsUfi=*0AmMU`GpVl; z-DfvsBk3~`25FKIVv_n9(Xsm^X$A<3HAzTH5sfjxh}{6C(&*zM_2WA@UD$=Xf%^?I zwZ(lqOCgnW}A5yJO)dPs4HQy&(K5AVx>P{VX$FFs>ZEBx2_^p zZUFuxRS7_Jr0Q};2djgGRyd4FB!JF1adf0g$W@W5O_)C9BLRP@a_C4^*eVC3jC?76 zRuMcM0-1_XN7|gC7`_+KAq}fYRfSg)z6s=>Mk!L&kJ`mUhKikVQ?9+d_u5kX_?a|n za{&I;&H_ZM9iGR|K0-nx9L5rqo%6a~6vKA_`a#1=?YVm;d;!Qcjgs02@xabJ|G*Tn7r&JA5!c>WYClY?_6y|n zuXZ@HXtmFt!t*Z@YT+>cCINKDiKEpPa+TW6@nFe&0Pd%9XtgJNhwhtlPsYzof}f>T z`_DplQ4C)XXsd>m+F3&-d>qJGjgs1LgxbGDq1Z7;rP^ozv($E09wy z?M6%OtSAyH<1j)<0G)B-Xtjl0rFP@;;B)}oP36#PKe=mXl#!3Y&sPLTK%j2zukhp~ zgs%j&R>Ml|ubN8uCm=^ON@|xCYTtrFvGtlc#I=3ot)+G{9>w&veGfVPtId!_t6lsr zC(DO~QaFqvB!JF1akSb(u2TCE?n}G{;C3p9R=dt=2cpl&JrqBq2rdDETJ2Z)oT3=M z0MIfGE42&Gm+&qido@aGuf_J`%yS6}#lGGr)!vILsxGZ&TD7ksr+>Ad1JP;^Z-sFj zWYG2+Mm-WhXPh`%Z6Q~w-PQxO8-UYP<=E zHLTR`{DD)zn}F=lD5)L$7pZ*`l4Ex*kUjYhZmHcRt=eai)4$q}fM~VXz3*UN$ao)z z(Srog87GcbTgX*v-`obZYk*Tv<1U0tYs5RzkqOebG&SZX)RiW;dK*b(IPul8LaTJ5~g94sSb#N#kplK?v7 z#L;RCxk~NkeQ*OqFpgDIIkeiRCOH^o-0ue4ce4@#@{UgY$z_EjKS?bUZ3%ncctaTvo%0G)B- zXtjl0rS^kha7uzxPUX;Qk0|G4l#w?E)RN%QY1Q7E-yw?O0{{)vuu}V5ELEbiXW>|& zQBwP+P8oL-_SM=B0Z#-nU8AIS$x77P zYaluHd-N!J(J+0d7k<-80hk{Cp_g|viO2_VD;{_VsPj;r`t9Eb~QK21jAwUg{l zyebu@e6f+>;3wcL+~4%+fcgn!CGfDZrM{tkpjN9=f?bX#4M z&^j&Q4l3zHcH9d9~XM2pF_pl5oVGf?fc=j0qfh%;*nE@GT&jRuA zA~r9GFF2O!e=YDAU4P&09B5}CHIcnr)t?es{LZ78W<^#nUdr${2TpsisI1RsnW|GF zi$9B(o+xXB|B;pU!%$iKV?z&NHA-ahVOT&<2A`s{`Wl?xeNhGv8f#`1FT}(rVJ`s6 zN^g<)Yb)C3L}l%zN~J^=dy-rR@A-7V>mBMnpTs{L>=8u$gTt890?wh{^SK;?CqghY z;t+@o1*mtHmp^v0oPbgk%okE_{hm+VhYq$3Db;}2_vMK9eB_%Wc+W?^IYR0rG|P#r zj(qw{WY9h>-g-$Wy2!*hvNOB=)g*|Q6zu;FO7>NRqeylYzw8YBGr?|v8yIOB-bL1=k6*TnuMq6*rtCcD zBzu`(b^yO3*zQOvyWc>`KJAz7=AoTPOJ^p@zEf4!n|b_c8OAFL_C-_nPz1F|%Y1&> zfqZ~qPmh+eGi8=FY2ue1%)b?EH%6{xlk0<}>@WSYBlsP`-fz}>!Y0Yy?w1|TGj%2{ z15H1PijnMle%Ud+hG17W{iNP7S?`EIe>Mr>p9}W(VzS;%v8;-<=8F`K_q~$k5rR>6pw^L1y`eo6NqxU;FMlT32M0@bx2BRk z(l0wV&(oE(?AS!I=VLTP_1@^09miV;_JzihT?w~%V&C-3&c>$;w#RJCuO3O+!3c}J z+xtZF!-Cz-yc*WsmaPN1ynmqg#UPW7~kN`$emdWijVQU~qfRQNE58 zI{sZAb5f7rVOaT5~fvQwq%tHtb4Mk!0Di}jOeVey#}8E4sxFblth5$QaS|iOVYQXQFMNqSxZR)hc!TQ{%pw@*qfAnP`!LE!nPsIDVTg~i z$com0L950{g&)9(RWnH?TfuNuGfTz3g|Vt;k;>eHv8v^XaZp)fV4!O6XUak@Kk*!SOUd)i#IGD99O3}+P2)O=UsW3VIPt5=^H>as zt2K~$v(ot|GQBbysao5}wy1-LUW1BmhL)<=XSA66f(|m?jx&tDS-o zBa7Yx1Juam8i%T_kU;0}aK6mzVV ziMzW3wez~go?siF%<|6wevnTp4>$|YaT42Z1oGt2+xRmp_bkR1{=Dv{><|^p!*fN# zb9mh*9uytN!{~k-!;@{XKy$#I1b6olfbl#$72G(UTpN3#)Jou_ZI-h5Xu(R4BRp8y(=_;um9#*=8TuZYUyp=eNa6BC|$Cw#5 zRy$MJ9jsv$&if;v0~S1|3gpDOCt#(HfNuc0OK`NvJvs_olqR|ppPTT1fb1w#!mi}M zA^d%J-F67~WSjn@M{Edjv|hvHR`QFJl2g$=a~YNa13#-dB!bhQEPAe&A-Gav*A5i9_XN)Cxbu#~cn6?8 zMioihopG^CT3BLRa2mKLVXvPU;PIM6!xq60KzRz5*ASM;~Pz+j-h^lJu~i^^o~H?`k86K#J2Hz-8!+ped5c(p5(A4 zyr{rr6r&t=0p7$&LADQZ7~i=eM;h03*gUum)dtj3!(wA&5kylCduf-A^#(plbA$=# zPwlYTus@q}*y9KtE(f?p^C>#UMTkr}?7ee%0}l9E&GB*AfIsl+AfQJI)((5&Q!E*Q zI48E2$$~@b^gkRnemu732C0H3ikb@*r5Q|zecc3cB9OZH5-mNI!(M4*W5Yq3tcgN5 zDa>@(z4%!5a^T-6j&|6P3zz{%>Q5G8I_y!r7jg-ycND^D%N)yL>$k$q6<9FZSE{US z%0)wHhuwC_VDVrT)J&m;a#*oXV8U(;kA%a{C4UKom9@i8X^CwxklK^-?aGze2QNmu|5E9Ce1B#Xi7MS5ZfUB@6NHNsUQ8)rG&u+*r4k(dBxuG9h8axha! zbY661Cn4iJ$r(#faRFrsE|Y{U>yY|XAv{ga9FExX@F;gy%>UpJIR(zYpMyS1iqGlj z-3a3IgHT+PX#QEg-;$c|J-!DTAc5Bf-prRHWfXQaI}RB=feq34EK5f5_r@GBWy}P= z#Fyi$M{1UJj3D>l25hgw<&eyE5z+tD%I?|KVdV?Jt|^>}S6ou-xf`BF@sE-GMnTdJ zj!$E-cR|zexB%=uOe#dhq789KD>~@5ncB)7e9Ihs76w#;;Q3T}@diw4`-m#@Ft);2 zh&5I@IoX4W_XJbBgpciMuq7nD7w`d!!^EqBsa?bSmBeE*!BYXvwqRNenc6L8WCyGR zC3qvC?F5U$W$x}Vt#cS`4Z)`XU9jM&ss>B#5k7yfDf}-$&j=R&;Sg}on1+9GnL7lo z6^TO%|LiwJ8d7`5)IBT}&kLlWM&X|WP$Kgzg;&L2!?!1?&+L{R*T8oe2C6=DdK6X- zBhzP;@#hA3QjyoU*=KgyXk()QP1kU8Ml>M(m;-@|?y9)Gt^&S8bHr6hf9gK7N;rx% zZ}L@e30?yDK=ZSbO!{G}&x~x%*c;#hajIHAeP+o6Hs%GCL&3VwoY55T?Lbm-AT<^G zzi#qvu>zwtNc}WX)Lf`2&0zMK`O4s1&>$`LC0cr_J~R6=?EMMSPnsxnlfukC^Cgx+ zTmpVWade;gWj3sZM(V#7V)mK2D;O*YZAYIek;&_eZ@V$ZRJ{A0{M^8{G=%b+22pP9KiXETwylJXxXhp{|D_nAjO!5eTO z9MmLX0r;ep-x_zen7GkK!1NrDPd{E^>5GOtvXzZJN47vD8k3rv4#~wPT0)3q{$;pR zzQ=eRtRlWlp$?_7L@~mgW)u&PM*(6OmSl4uu8!wlz@O@DH1i|fURtTN&HZdMXM;hQ zph-Sf5?g8|{IHy~@bZ8b2o~h;q;-MRGGUoe1XiUI#u5i!s$;_w?tmT9*<(hm6gifH3Aqb1h|6EA#@W{TV64K zZqMBlM_@V>gf^Nat}U+^K!3*Fdj=S+Kd_++Hyh^_cjsGgW7CklNMRm6 zotiRDQ>jsH*lW(#g0Nkags&?3@ue_fPW|tni4flr+v}_Tcj>=&b`P2Uri^p6qo{|h zH+W^q@g91891<2AFwl?ge{00pSuWtkG)GvO{?z^N3-sfv|HZm-)(Bt+&HtS?i=ZFf z|31en2!nx-(Hx)t_vcG?HV@De1?&EI!Z14{N#6lEq0s-;|MIGM{|}@WnkZ^6R223L zGyC7QcmXvKrpu1QvXXQ@p{MG9k9>tq^FgYpi9$Ci%cfz?&HIKRs)?qjQX%^+u*)lyTWR?l=H%#ZCjXOv7SF3;NOSxa}ccQU`uWbA*EQr*_9@ zmo0a^^sSxU2lztsJ3<_%AMK7E5I6};!UG`=SuG!Td@tV4@&HO!uy)6&>Ug;ml0E{` zOrihF9fRsKZ&IM_`FVWIdx#Ofdc>e{YvzjP$lfq1QyoxuD z?gM|MINBZO=EPf&XrTZcLTmlZzxpLQeWd182=D7m>yCqP`IZD$TjScMTr`As$6;6{ z+zzZhnklqU?kF}4N%-P7gj~oSuY;AJd{Vn(muYsk0;yXm|0;4A%OkWqj>gjPBOsjD zBw+!#qm=K)qIX_voGs9m8xsIDM3`U;ehad#FWv(Y!G|^oim`-CIf>}D2NqDoKzlIW zGI)phW-V$`E7Bg=ND-s$!L|JmH!LQJarVFwikQP5JirgJOau|v+XA;L;(A+-RYd%| z7OH4_fk>gQY5&mc_$#4DdCIfb7WkXWv)7jA+W$Gvj&4+Q*dk*d%N8D-Tei4@7tUG2 zXSYmSlvG66qL3fr_Z^7{TeMX~*rKT);uspukuAPbMA%}qKVn6axXBiHO%b=-g0~Qn zY{7*su%smRrjym$W{di#qC;%+cM=SK6+S}IBvQgO)2h!*GljixsthyPah~3^Y4V(| zM0sGQ;wleZCWZ27mzj%a9+uEGnv_DjbyY;PTT4H}iEdUXp{7}(B`OapH2wdaC-oyL z2d;TU5WCZBmI>o-nsw}^h^S+GKg2gKvyQVA5p|s8hqxYVM?@X>C?e{(!w<3HTq2?w zo+=`m;XV=5T|QJ(vl*I*YZI4Gu6&kXcya!J$g^pwX^T244{TAD^5|x0hiyt&Lh<)W zMO0|CBBDb5{Rk(zS)n^vr68{7?^GW6#oGUKo*%KaRQSbhl?OJzLV40v=!4>>%>(nB z+QQ~`oTn!i2qGfw7v!z+Tk$ny>pi@ zIK{yR0QyqH&nlou`q6j!E#(|+0q}L2BkmjYr@qSvA%hxphCFbv;{dN~{wz1An7AK6m+!c=0x@00sd#M6LB*ek1mABT4yzR8Z*uy30o`aI%IVbg|YOdLg+1$uUQg6+Y75LW=)m*R{Gp(VZuGlW6CKP&C zEpxSIOeHC`9Ns*o3e@yNHJ56}6z(qS+AEW!4)8-Y*J;L-#(N^DYyV_PUG9f!F4BxS z^_igloKp&9d18f*DoNqyyqYA(-=`5L`3Dp2$bS%JjD?^?iIn;EmFm!O_n zCZ*Q)Lp2v>#%!4;sC%kNse}Ab%~hE(qofaq#0KOiVl)`+7H!S zj~R1irl3B?dKr@X#t+q8j2V-+x1bKjx?rLv6?xYJ=1R<%sdohRz#B=e>xXJC!;C5T zgOqCe>kvOwa}8!pPHeD?CP+9VrLOWrH5XvUw3liX!2pWtde#rsTzwg{^A}NptA!-> ztsknn^fD$t-d{!qMwk`IUG!ZG#L0D+F-LX?>i12h)KouIbJ1nYE9qGVR+v&E+_@Szfs1#O5qXJ)_ zloeR(hpIZFA0%}We1N20^g~r0QTx0?>SdQpP;JHDwSek~8l?#8;B~SB`TS5-M>JSk zpd7jbsz4(@RMioc!JQpyRmS!KL>=jesyd<)wFR|PElK^>4^?$U843z&Tde&hsh9mw zRY!EAj-bxNBNtH}#ox7n>WJItdm@g@UR zV6-2q>WF@pYRyWN)D3>9sv~MRM@StrKvJ*zp{kB(V1Gf~wm?!{CEm4w>WIc-$v9eT zKYBu{YlWJQ#YMsWgn5a$tP*q3dnk}SO`CLjJVv$Jy2%e!bwmxR z*Z#i1%O|n|*ZojcN7O;KR{4pNnxW*o7Em40U3tN5!kZ1GRv|xBvm@HVcaUps4xjOp z>ZV)--`sB_w^b+wgv?kd@Yw)7)Vkf5t31Ts_hnC$%zmJWM8oVbK zPe->(0Xx53<-Bu*jWsABrO*d$8YG8^RnDIxSk)j!NQ^Gu2I&QZ#46_kfk-bT1s^2A ze-8mzO1wuFJ!~BIJ}T|KiE2dW#@e0+WkW9#=ixbU%7xvb^AEAQw87y}`igF=0DE<; z$BuvV6+$izu0+$q)#z#!fnO;pxM!|mrteBB$zah(KgS=p@+J|fRZ|GOou?3;Kf`oe zgFE5X>3kXHY#Q8kQM!kE`BrxO-maXz;^VNuuTBoJkT!!Y?iA$VU$mzbV|9{T%ZWY> zKe6Ao#w3cjifddQtSiI+V>4p|2mIgC{J)s_zZ)}UlhpBnH9Z=*pO8@YeLuoEz3!cwaeNrSNtz&3?~J7ka?dYs9qulOWte;g7#lQ;B(vskI^yy1D;}3?Ikr53 z$?UX@)jN@gl&WzYr@KCyx?jWdomAsGSLtMxffUt z3-5Il@~85!t_Y)x#g!$2mD6~@FVi4@I(JXr2E7_0y)|K$Z%D#i?mmFUqr5-Bu|5Q8 z@qlV2A!admpUel=LNHeQu$cV~*3Ejq=20g**OYSSWK7 z>A(952pEY4zTN;^(Bw_1C@;&I3x}vE3%KY&<~7{CJPcS?q{nN_&LGFTmb+^*^J_LA z0xM6rG;j&5VDWy-!%{k!cvE1XDx4RmRuEg+d7FF0G^w4IpLjR$pdS`uk022FMEp#r z9Aq{Yv~nA4(ZVC9LnV15&zQBIO>p=w5cd*U7XJWSe0ewVjLvO_#IFLorSX6>c#Fon znY)MXgk4@B{XfEFLE-nIS}PBI!;I%{*^7C9Y8+;8b`Uia#bYF z1-L>>5tm~?7b29g1$~|k#q0ujR1>IgksXX=9p~;vZQw$;!1zP6=!^xm>kGTK_msm$ zi>sPsp6Bjmc+5I7AbKUQ;-2I^^xzxiV&)Ixz2Nf#e^oh)C@jU(=2ajgVtA<=Rcb zApw^W@bJtNl92Kn!y8DqGn=v(7ny=hYl>2a|eD%yztnDW?+f+UYn#uSwa)#+!0F z0`HxUBlMb_tx$luVbxc_XQ$%`y{2S)S>G&cBk946t}nTi7zA~pcprC?J8eMZJR zC-Y^LDej=>fZrqzIlI}c^i3h}n#`%w@VOvL{TH|$mz%tvC>wLoH-)@wGxu9!aho=;d3ZsSI4yi(=AlG8Exhpl#)E%A=OHAG z18pu*b+0M!h?3dd#%E*e1i{<_)?r_!&|CB+lKuw|u8iJD(C>iykEV-$G7a-F4=&c< ztU_=V-0*P7DhOtJ!OwYc?MpT(_(M>u`_e^!C#&$92WQG}GTVdIS2Kl7$)truUZ)ZG zJr>Q05z}O_7W*<~Wd$?T2t1L)99!)K>wsp80a(D)+i0EahI=puef%oGhniq1B3Vg> z`@fCoj*XA7{tHJMv&&9<${2Wq*A_GwuT}9RFh1~Qkw6wO>L^OgWeeKX8>|{&)Ke@L zP!$g^-eg-4p_^t7W(&uAr1RU<6c6t2(o{ zxCugQ!?go%%Zke703ok0Dc}lLa(mkt?&Qt5WtIn6*M}g>vJbS zQ!!cYwq4sWZ!aUbFkZkQM;#AniiTzOK1M_~tX&tbxCYop!o_$;X76i6e2~9PAV3_OeZ$wnUbDI$FsfL|!aG1lXravP803+f)o;8*X^Zrr0F@9H%x6aI+7e`8{m@ zl@XRy)Fkx>VWcl9cb5*hAWqrB>VJfyU&MhPxSFe&de;zR?8P)koDp6RtGe z^w|lXu_hudIAl3#2wxjv6VQF~LI6u^f-It75!i8+;cgp(B2oc1Rs`&@i*+yF)rPz5 zU1a_Y>3ub3Ki>*<|JDeb5^cVcI2qVX!liR(p_*+lqUs?6BA%@_0NZBe7x+fQI|S`W z&vX0~unSgx57}mu5p{j0e2C+J1AA`e7x-qwd!wV7KdcraAvk3D0ehPw{}#hN5O2Kk zyhtxdn7nY3BB1kDBU8u8WShxyV>)U1y-2^ z2!G8oyC;0&g5j-w+r(R2dC#xMb#T#$Y>Kz$MPD-**ylPgmN8IofDas@ABr8?4DZt* zgjt|9x|+ffXl50XJcC7aG9S7ejv>l0<@}G#!%chae^|1;$6j62*z?=#b=LytUR0SQ~{~A<66r z1N2AoNCl;pjgaK5sVHs^z|}qkPJilS1fkYu%$W=Qe`uyY#MA<1LyP~+c`{){lo zH*`pH?6)8Urs9IdVG*Robx3j%Iy{~N#)m#EDHyE-itg$02<(Vbne>$P7u+-hw(LIiWEVl&zrcQDWr9qe7DRMa5J|ax)x< zi2Oc&o=^^}@pVYDc9JZZ2Q|Qjk3-a6U6XD&1wxXA@}lkY0W3xYAw^t{IwbiUdJSF^ zU~^5NzD0I0Iwbi|RwVTXW0+>qnGQ*&;-a-ek_8K((51lFX|`xG9gy+Lxq*6mt;l=l21= z@FB>ubdX~Cc+17zAx)rz6v2N=_e%y;RKq$*aS@Mf!f9&*Ye2Z@0d3kmA}aQ~qIKCoNnBDe`VNyN%y~y(C=p z-NG33V+AQPlrcRZ0uGuDhsCsl6q}o2FA2KE6a%5OB3VI-S9k^!x2#6MniDS7RY8ge z$u^1i2R78gRghxcEJMnl4QwId;%+D(<`JaWin&W6e+RH1to$lS@qQaq{v}{HEL;UC z=C?NICjSLyhcfbBCwngyq)0{FQj8X2LCEDx(m{$ZdfM0|7_c1hI+`OoFnN)RxDJ98 z4G<L5kghUOhRyd{=%naLDIZYBnE*+$3)rARHZVbE~ zamYw=sI7w(t2Rj|9SZzQEk_ilgA`A)NpD{Ye4Umf%F;oKhIeFH2Z5i~as)>QDXL>j zZZQ^l2*Ptsl9#*+QaoyElENq;g+r>JhJ+wRf%i;O5fI91lC+TuQsibfSzKcf+G$dn zIw45$d#q{5VIYjtBstttL5iKP3@K?j24$Jzx(> zfbdrxq`wv^WH9rpAVo>cg9y1ffFI!Ljqp1j0n0bfd-PQ;kb>_ASxqW-Afbub=i7D={(6jOP+AVm&5?FvB=Z4v*+A#862DWdY2L5xDc zid(n}Qgl9M=C23r6AM>CiZ2j{7kAZOzy@es2Prr`s!c-rT*55h&_Rmxw29*efO~uh z(&9QuF#*GKegTYIJ}fIpk@=Qd|0M`YPaUNAdpj%_(+)#F9BJ#J)=e!4LJ7qHmR1BS zNU^LIlt@K-V~yz`#apzlFhFl$0|_VRW_A^%*iykX&~#vn6wW`xq75CSIDk#qtsq4c zEZHFi-)@P9yjNn}~P3R2|4otb3ti1uiI91_<-iefW> z6+n6s!el{akb=JEu7eblv5g{88slh3RB;K53sVIt)`^O#AVu;u><|PZpMalPl*4L# z9i$lf#t>5ZMi6!r$r3BW0SHp$egG+F0AANp#O0`i6eF;41pf!1{Zmy8^)0f4(LstU z!_mN*!FW%z=u8JG#^9p0f)ugU@mCe#bv0WwnGRCeHiOUsU@uMRP0gf(6z5}5g)ae4 z*91|X4pPh?4+-A@+^PveFW(@=;4_9G@N;0@)l6|s3%U+c{ASoB^DS5r9h4~qGd&$a zih8^7(Je4}K2S?(y0Bat!3a`JM2K538-mrvmziELf)u6dne;C}o#{SKV8y+2Fk z`3A7|Xr_=UnJP$e`;6I#UIFWOU#6_A3R3L;lF8oI(GlZc9MbPZm#l*n!*P$~i2#de zf~ANKQZ&U>GyfQjCcZ4$j4DXc-ve1az!>4nB7s(rV)1hL=qxZ6D3%qZ2qn+ljP&m` zrh*htaM@Wwitj)q4*vx|ziP4$QY>0y;=B{qf8vlAv|R-$@+X^C%nmGB;i9WG?}I8x z(dBcLQW=aonkDqnL5k9tH5HZX3_@RDk`7WVI10rk0G#hbkY(v0Mbsarzib0*w_;i= zDQ3V)$^Fg)x~gFvq$p6rCI%J!8L-!ciylx1DZav}jGQ{MGZsPOkgyI?e2i@th0hlT zR>HznkmA~66Hf)!*uqtiVii`6i2S{Q4YY6-qxo2zjZq?k*+jt)}H3dYwZ z!Qp%HbBM^IN7g}#=a`@p_$^@fHLijbi!5Ojq}U`mJfsV>$6;#DXjukUQq;ocJ|u(Z z2Ugg^Rgl7V(9B;GSgM7qAjO4vJk?YFZoqn5xC&CxSKLImF%j58!o?jx7>jEaf19fUiIWCbbm+7T+DTh@QT>|M3GDo9cP5|el=umlTNL5i{% za|`*UfK?z|+Fq@s7;)Z^`I`Z2W93&tij=Ho`9pw>v~U%q7{0Y4T zsR#&V(~(q=f@W9*sWAxc{E-l(*m2C1Gz^4EJ|y#!S3!#2QHJb2R)e+0hiR>(_ywUW z(Z!qq;f4>%93844#ntD~@hKP%Tp!ZQENkeM6dRX0I)Z?ph*A{(pJ!%vF3FGYpVw=b$$sAROxfA#yC-{F zuc7fiy6{?)6kje@9W6h!?4(QoA)zQ3*hw+0BYx2lJt$rtT9u%Gp<^e-&-hUX>i+T8 z(2})(JxQ?+d;ItyTpu3vYfVyYouFR5m=A4<_Nyl;ocQ{+7$1EPZLj5D_K@`?MQ%(r z3+O6rtx`4%z^59L9TsbnV$4DXZ2_?7T@WTIe!}iG zk^CzF?rBIwTkoX!9&NIK7)I_PIAq#V#0irW>+tfIfZ_oZ(U9zJS(6lF3o1)>0klXB z=}C&8_NzLf4*+$$tVxQC-^g6%Q=rWv1ERd?Ns7n#;-IKc)&~7rlN4pLt7_yRwBy<@ zCMl>kU?Jo$c0aakxDs|aBZp)ETPK#Vs|n(NZtqOuw_F2{9nRB z@p>H>??fep@~{TjfItj?iqqc&3tKiCnd-DU49zxAOt)qcgWHX#dlpQ)=Vq@K_QSvs#kzvn0hm-tqu+bo61 zO@lax02u&vn-dE1us-8t0{L2KTP>Z_UPO%J@af)!YTTJ0_d+xQX8>GF14VgEme7*B zU!wjH$^3_afhw8OQoi>)4`vB%dAciMa$BAsdVbA_{(=mWnx=#<+<7pwYMN?*YN1K7 zN0M+R2CoSpa#zOHs>9G5)DR*mg(?L!3{DuzojK8Dh!o5Pur!r9W~T zyobEn24I&3DSaXjUr zZiN5a&>jT+3wta}v(Aw}U zvl}83-$2?(vWSC}lMLSj%-oatqc~2JEFWzeRV1`Ae6c1DJWccsRQ04Sv)TP57Yg!V>;l`oXu7+OoM7p=7#NHd_w-m2509kvY%EXcX?Uu=ltqIdf_B#O&gp*2 zF;hYx!&BnCEa3bxfd5iKioAUUw{eW&SyYJ0;vO{=ufF0CX;BZpfF>Kh?$1?$ssNxC zL6qMLIyDZZZl>Yui%p-RR3!uGnFe~X4-ht8_uZ%>HUYpaf+*{hB>{bE_$GX+f?ES% zOBzc*$H3AG!}HSx74cI5uB5Rfpsx+zdxunbaBG%A}w0bDoSOMgNeI}_q!4V*)E zFwwJ5cx8AW-dAhan*r<~NEYc77h(4Q)g=S^{#Kh4-{&Y!gAR z0NBxJrnq|<>Y)jwJ*c_^^)vcZtxxYl2P(0I>HG~+t_*kaap%%zNHf&EB|5Rh3TDVb zOy{y*Kh8il)G|XC?8FWb7;ZzxkCEgOQf)J|>LWac{cwGRrE$?=l0ZY#-mw=3Hgh2^ z)j&g<{&wvoNgP^9+a`f<`ItJT~btyCm#FufP*Af2}%KCl3}Qjz$*=`Fh$v44x}_L0_o5?#8) zt)_SS->OTO65N1RCOSl409c;}qAp$HGt>P!CcQ%;5DDbw`O?VeI}zf%`=X|paF+8BzjJwZf zem)0JL22k!-^E1O(sBF@4>7Hwzn_Xxv7-KCVqTl`y$IE19S>@zCgt-gprSTs_s!m^VY3m~Tj$xdcsV_W#{MoO;;t&XLq=wv3gwt4FAS7W}80J>Wc3-+%PkJ}<< ztTctjCjppFkSHg?{#D`$n?K8KsqwV{zSEY(ylmo0n}6y!{NNfc^W!+34eD*s|4KY% z^N+!&@P+;u+B2<-4pic4TSW2s_?qze+r8t8q7I?XoTYI9@&=h!?=A7|}8V`l5f8__Hm(-XGEkuMe$hP#2+H zfsR*eg#Vt<`UZ9CUnO3(#m7!l_NPLdt##3XO1x%sPkqEh7ibNn4J3=iNck6=JI`$? zAAxjA`xYIj#OpS9R}6@#1N8vX6YX2dH*9WxR{C~fjOoFl(nb^0iMMQ?9V2AX;CY}G zCtW;KbU&Gmn$*Onwj7PHr=bxwsSN-mXh=R&0{Y8V__I$KYfeyK0K*ANTTl7zk&n)( zCHDCMmRJz8QP(Rmv)%LlJ{6tsq3tDIL`Q}splo*E9jAI6t^)YgGNS69Q+QSqbJ~5o zm#SxiqoxYQkuo~eBT39-_Z(@$H}a9L81_~>qB}|dxm4Vn9yw%&LOGI?4db(n~c7s#Fqp9GU%ZU z>CNpK$1X+<3|;h&5?k867ot={a2D`o?cx9SY5ZvS@guLOvVc(DoiD(;A;s0YoRc#WK!jUOV)W;*N~vzgyr0fS%D2GjjjylMIBV{{;2 z5f}I*bjW%(W9O9O6!H9W4*EaVTcoB@}gH}@O|WSQGW@+evMx3>h)iz_z7zQoKf7Y5?uct&ck#l|$3dHsTDMoJ3H_ue5{nt)?tBUTyLU0CJ;m^>3+5Q~tEm_n z89Vi-T|Y;j#n?gQ`*T3A2^6=*NgqsdUGZLgiJS@l7)!r6Qsx}>rd?OPi%ua^ia;x6 z>CE1HE|U36%p81rNIa^IAhjS_-f;T9k?VTK|I%ZZ89m7#Km%ky}u&kMAz9q1^XXxh*-;p!b!b&*FA3~>=WSe(DIWmtY^pfkzDtqlWq7s(jmCU20=>_>nBTJR#dKkLJWTv!=<|pPmRUQkNx2?n`}P|= zMpU-Gg}%wM!=(H;`{hoiG;ti#S<3{o(~6Yq_iUxHAzJu;1nJM9Zy`U)ekNH(AY>}$ zuy9zZ?Aw*O{_t-;ipR`xyB@!+05YCJ7%w!43ZdbjUO-9l<0B zSBiAJj^j(Ej~t-i(>~~Hh3}5le{ly(%2>4k-CO&h?-jn=$J@9QDB={WiJ+HhAM}aD zv_A5Q+~wR~?5fPH?Z7WNcxiAg%{?~iUE(ZfK_(loWO|A!9Y{w*)% zZTK4GE=^M#mxA_}&Wk4{p8Nc9GA8^6Q29N|;pm<+e;ERDai61+%s&3c0?;Y8mBwR% zAAt$$gtZ(|MMh)3r63Mj+(o*@^@waRCh>ec%k8feUJGcF#zo}P;`w=&6SovT5a<+* zi+oCp7vNbsphXjxzW};j<07L{;5GZ8vMI!~On#%Rp96YF<09@d+JY>~!Y18M8{?8Z%k-RTxqAZ8Pc$y_ zBZcA8Jj<2S%J6zn`%{x?4VUFvnv_%cb)Zi)E^;n~;qpAo!~3eUk!}_`#5m*)Pn*Xy z+v2LovtGkD1x1rl254=Kr^sVLR^nNcu-8hE9YFQfWQw#2vNF%={8KeUQ$c;I$rRZu z$SOSRZ_z6BEuao)GDWgP534HA^2<$?tQ(-7YBEJU1zC+}Ir*i!2kzO}^@=0d2;%3x zsjv&OI?r-uvnn+uKvmadiqOSVREuYMQA?3+LG{z*Vhp=QkA&MW)?hYKzMAkXcWo-N z(||7jpSZ|{W<0u-HRJUI&||4_X;{R#InVNPgNnyJP=BN%nXN!x3`g4YxINEg{lY`$ zpu>+N?ISPB7YVFrxhi z_{G{!FpGkI%HNAc<@0@9>Rrq-?q7rf2r;{$ zpG?Kb+^i@fzJmK(ERo=SK+jTv%tqVoT&uYI3VH;hs!IO}UVXyxf2sgMuIAA`OsxpA zG^kpdOi=|0@+hD$)NgZGDW2($gi>WB1Tn|Q$Q`&WQwYacKo^UP1e`DR6I9> z+ONqJRjMG@^60#nBoOhu4(f>}Q^Zq{>$rRSLuE7FeEgmk4w?28@f75Gd;kD5HNs|b zP}MYPOdR?$2~sJyuJg zZM1Y*bBf?78rZi$W3MgTzd5I>N{#`&`M>b;_wo9PYa92EhG!}|uRyW|D#5IxkawWK z6q0fbq^u-UDQ4v(u_eN_ll$*rPKbP$fmAW*Tgbb(zvnaQyA`B1LEn4#;12HL{tfG; zJP^{bpl>1X9?Lpr{KFIx3>qy^cAzcpo{turG za~$=80Z!y#t@oWmJjV7tQD(DxO!z)w*8U$dXhEgP3n7htB-_%g#GEm=WQl?ly zH+V$l5(+v1;IxKhVg+=Qdma>JGR%hn{??F8r+{v8&(CEP6pm?CKMq-W%Ouk0eO-5W zL~X1Ci`bV0P+3DVi2}OIBfi4(BcK3)9vVuKL_yx;5i8O46y!KiGc+laD4<_?#G6(s zVqXE+q#>C^0o~^jkH@LJKLOyfhGY^2^niQ5#2#T0+%o`gG$fNquY|ZBa?b@!dufgjUtkWp$C_rVG3> z_T=DO`2tS@I`AEMif2LisbYApVd7l)nF;=jcleQ|LEu#l&qaJ&Q~A;}KkDP}wUyRyRB!7Ew1MH#}9)9>pz7ao+@9!|;qn>nEbs z66pJ>@f0^t;57|TE>xWY9}jeq#s!(ydM(2b?lPrQ!Vmt9Jt51@xT8MP$?B z0mB>LUg5t3eWP&^S;CoZAzoW`4Kn=Q8_P}tk6wnizH!KSl*UpK{~H|%X4{UfA+EuO zf6OgKRt42Slk&+sH4o5GBV*-qj5Tp%tk@MmFAHMjqw64VMi{Y&BIWmMCP131<%&Wc zWyBV*AmuM0tszxemxrQ~U(!NYJ;C#~HER;^gNoZbNzy^xZHovV4LO zn;$jQ+)XgL9C5)RJ2VxAJjsadwNA>}A>}4ngl#)XF`r>%9bC^~XD;H#RDo7Yd-vzZ zUIW)`!#5or4(e_3j?j3o)yO)j%`^N%x+`rQX|2!UB(lw4vk$Uuq2XKctIFHYgPw)< zso}q@x{!QN8qY14!}FJh@4{Nyk>l5bo`tr?@GnMpfUl!1%YfK2!4a%E16XVkxYQDVwhh9vDxr-{!0O42oR+s zMG#vJ-+FAE5RqI#Kow+`jDxK)-q~>dU_@U2LQUE11aJt4ETl^@o5uXty5R=xH1f88 zpt9isS@{l{vhu7SlDf| z++##k#9mrKwgS~vlfgvVO7}oM?laQijanuql1GD@MP%@Sm(xyy{K-hS0~M1X*MQog z$rN>xAom;L)k76|9@Je;QXfIpAA&q!q`S9Ph5i;)80u9Sda&v63-YiLb?O%0l*EXM zmjor2hU7`aQBuc^s7*7Jz1Erv#!phGjHsk}Dt@Dh5bwy?=6z-BI8g!!+Ol0ozsq&WNVlQ5ZOTxJrwY=l2W*$@GSuENj46tCv4s|+@JnyFtK#= z2PnSUN@R-AKiUDCzZ&kE=q!k(CqJnC?;`7Tgv|#=NReoK$D;zw)d1DvUE~H#)3_cP zVXX|z!V=jV)W~;{!|;NM>vtpkCRzlsRJIV*SMMT6A*)h&r`{$)grLU|EnGN?Y96gNxWZDI4d5z#e5g+2w;VomCGHf8f~bnhdT&CQ_p zYf`ThD)JvABH6FV>!6-!Qm+px@&!IlWsPOheTDfS95U^CeN&My4bLr1BZ(9h2USgz zdRZ1FXZX%xO;|J! zdx6R&Fp;4Wcw_ilHdVlF0)qJ{fwzV)f1(0xUjqncp9Glc>u4$-@pG<^x%6fli|G--8-y(y@C@2qY4|Aza^>1^+pTaxFe(;M!tFp4=lLJ`Lm? zqGey3zCPgk-i-Y0H!Ne}GGB|+cUmt>KMLVmYZhn6wY9Bg<{!|05yY?HbdzWqcVTUt znK>)=0SNsyLEmbfzGdLrZf351MFztC(6R@0`j&xfhnYEgACvyeL#v{7@oKnhzv#K$kZ%LIj+mZq7z5Cq=dYoKU@1(-Q4}URDe|Zp zakQ%<<3SZkMKT+`vh6x%#$1k5OU-owG$u%7w?9`mMCG*UzrJ1#c6vhNmljav^fPUE zI%7sB{a~^xyO0|bpiK?>JqSOpv!?%uTlL|;B)`{$-}@b4_na9MQv$yjNq+Z2I~4T0 zp(Zl%g6VJGL;1Z!es2lCab02eqUnFrh_R03_YE`~22?7}>%N2SOQydUUO*7ldp2mi z{X&ZK+RU(f+4NUKk2%9$_$>#mvi56>!^p{X#f-|)7ip>qJpiqJP#;$gwjY?@y_k#= z%P2#jjSA{}!r=d*>5j#aO6ZHAeIC?591Q=D%;*oNtHqP;&~|HGwg^v5`{%zS$`^3` z9%-WZiAqj<9jumUSe}}m%5@og4ZyL%f?8sj&eGSyuU@)VWFEg81uTR_yy4^e*YuK; zWe&NEd;ZpRSNz^!WpSmB_AP?QI~f_3d16mQl-b;~599mq0J^7wSXhrx7%^;~XKGe% z4D{KW363aZRu_XIhb_DcJ|03X{2oBT0c8r87>h_eoh^JxL)j63ni{A2TZ{nZP$=eF z0<4GH!VB$?LxfBl-))`6%v*pvxr8L0u&tlpfhcBf`6Z!Y#xkij)UUp)fwmC@#FQC>b; z2ZFwYgh*68FQuD7UwypD_XwM>Hojg@2LBEE5>lkiSLA_|qVODu6tb8ZiSQL=^R?R} zqfv|`nJytk+kB_mNnZ_uzJ5Ua;EJ(D9Y*?Sj-^}B*XW-iWwJ$mh20b+jSc#`+7cP< zw?(zXn1!Uzg1+|S{<|{UqK4oN6_S1=DLAQ$y69lt13;s%pzQC4~H4TH=SjaMv zTY2Nl@(~I&vu(!fYK`6p&~*)YTrq=osIOU$4XX0#50npy`;MM|BJsI|KqW7^n3EzC z2t?)@0I?LVRKQ{ULY+-1wYIN|LL!^sacjHsutEVZ$Z zdkknXfHkQhQHhlkF=^|Wi^dp)P(`+)JcA>dZN%8B@e$%?>o;jDJ0S>eeEpi^Q zeGARKMI|J~CiOrE@5Ue1myUBlFJv)X*bp1g10B6DFaj1|L#_qAsb)l9v9gF}r_g~< z5s$9W`fB|#<(jn7#r{oxCT&cC{z+;^Y(Nim_0~m{`5I_jv`)b?JM9S%^l%?6q#A{j z(9aV?zfZu#p76l??(X%G)ZcLVx%MuKsMLG9Ul)dX_xITUghSj@S&rpBp*`V&UhWY~ zV5BgBa;YG>Cp^>RuvqqZ#y$nh_&75t`VB9q1D|BA4nh(Ds=z1j@+LHtaxOZ=pCm zmGg0VxwauAOWUvm{k-mFi0t>!c3L{KpFW5v4h+p&15esHc)tMYD#^mK{eA*`4hn4) zZ7}}>$j>3Y4$6^Ox(y7@u=IDven2VYzOBd!9I|xVg*+rWPgN$37l%}qWNDmsX$OXS z6VMqIVK;@8pk=X3J21=}g=(Dl!sUJ>iN{9l(hdyw)*qv8-c(4lwNJ52J21i~Ac9T?-ijHiHZ!F>qNv}bugXqR?ithe`TY^I}h zhhp#+g+nAv&X$Uu+<|e~PGDFujAp8eKrc@W1)><*r5zX_O`GL}o#xO3mL0iEJ1`+z z<8PITevk%RCgd*dz{KbgWmGI?Ls}5@O}n%Mld>J{q-}Y z)Qk*}w*Cbcgnf&_x=7{?=npj`?FeRJ*bKj7Y&$Rsj6>dcX@};21D}RhI;dtf^FS|? zijn=O(VTYP1-^{kR#&doGy#;PK~d1gNaowvKFcLD0Qx9mf`w=_r=53!O|hBr*$!&q z7eZf|){bDd#|}qPB4#J_L#ge&5j*YzyJMGQzcVrX7Jxrf8IoE4R+4*Sr_NKKK@a@_ zU%0{%jFu!vbK2q-*ca>hO~$PxpvnYN4PY^}#VxQuw);XEZX)zfX&Kt$7C0EYA7zW; zHXQn-cQS`#hoWCf%rfX3QZZJ5w8brOG`5;UX2uaf=Tm|BRFH`HiP$sf9+9!%p}!<1 znDJw{i1@kKW8pG!8Fpe46h|sXMEpXmd$5dDDd<(+$y|y(i}5do6@cC&6(b`)hKq>* z96QY>^L;F!>8U_wr_FJJU)=jMsC{g!p>HHc{ z@QE5!J%Rq}UCeFw1*|5DfmcTOiN%pJEZW)@xaaPj)!P3D{XL6ecG}q%_|?5)wc5(p z5>ir7o{uHhz=LRCI^}x+q@h}N(z{ZD-`)A?!}l|Bc`-@BJLIHyr2t z*2TM0fj_)o$KoT6R3Ohmzy2=fnb$W_F)yIIcBKr*Dps@+F7RLM`YW<^Ik27S{`wm>=_+Z0ti`Mv__X3)2gLwKxD4Iy4Z zV!KriFdJs(ai2wDwFxMOM`x?8dX-B6tksaH&r^_@xVP3_MIHooMw6odDa~c(-o0p- zMY(tc;NMh`yyudP<=&%HRqP@$BbObAjGdex6|u|8z2`=$B2*qgO$~`>QtXBc#BpyU zbmByq?E$>6AsKs`;tk~B(U&k~BB1dA=4mKJIt7`Ndt2d=734Zl+chcEDWF{3n`exQ z{W$=4Qb8)6g3QCc`*JIDZ$PEnn>w8W%FDe&F}fCE<^WJgLo%JT6)aGId*`8dBB0s; zn!O7u$h|Z00-AtmW9)DZrAQ~uX9vo2Z~Ujq+KIDx^Yx2D=V83`|#--9KlLRWS}Vja!Nf=g?ks{vxXvB)qyro zjmsM?3|HgcN2^o``~cM0)THP$Q&z|wGl81iI|ze!VR#A9wW)DQ()O=FE$*FW#rPno zGpR@>wtofcaIdSox{;3n{AodQ`&XbY_YTJ3K?E226Q=fXh-5PxZBq&~Az3-0anzOvaK{D61(k#|$zExEVZRF&cxK$mKqa#8Lbk&#K@-Zfs8 zm~EiWYEnlb#fV$_32<*Y?4cA1d<_0S?T4a}(t2y|J%K$_f{faaS|3NSdQvyPX@5Ms zZMb*QH!8+eK-Eu0GVxK%Ks)Zug06`$*9AZy4axE;EG2XAfIn4=rU3XvL$YWJs3Z6O zno$L}9>5L_$y}seQGqTz>O?N}lNILy+#pC)-LfpwzNJ7n9=idH38KP&1;Bp5f@Ha( zwfevS9@4+4TC2|rpsH~v#I=mt%*XsL$8v8Di z*6ITvad)v0Q?Au70k!sBB(2p426OkiQEILJAgGJ)BI|U7%^^JG$xJ5K>i+=64_e7i zks?~F4-DmDWnLI^t=b@JcH}v zlAOY$S6MbofvTy=-~zcMr*iKh3};2??LmF0$>2)4B&Tt2QnDgH2DM0&!6kD^PDkj& z6}bu2VNJekTR~t3_g3qus*Kw}UuZndQoD_|g9T=ymgg!LG91CD?{LUm&=o5aOZS1< zJicsoRRpVnO1l9eFo(zY#g=GM#dIPdnB&sITpqu%u>!^u5X@)^%;WLZS}0%@0m1y0 zz$ZNZr!fjRNI)=KB`}}Ix16Ye`ve4YQvwTk{3=ukB9fk?0Mg`&pLX*F7V>yImS6={ zn5bZ8j4~E|Ww304J4QzS3Q{v$4b&dL8sP*p-YkHvbAkItuB-Snnu{-{1%5N!S+Zh? z(+~Uz9LB)ic)Et-#Afl|vcbbs{8&4tWvGX}0KjJijUv5#2fX?hcxHI#=a+Zsdq_Ji z8%qAmh{}e?nV#7TkgjUqqYdHxxslLa!)~EH}`#7U7GI)X|VQfqdf(IJ>0i!v5MUsXbXcn?I{TC z<-S)JRP4TkwoU6|PXT5d3+BgEmE2Ph*vBI$pJW2!H$nbNw1|xOd4#}EJn|lvK*$K^ zC-4#|4wZAXry#JM7te~fW|X!4JadDS_ z3IYdt=B)+sZ6RFdy>S{4)M-ya;1JLJ{EgCQK%1v^v1K4|246?Un_qklu5TeNIAoN- zIqv>o0t)pph!-^=dRY>s3zZby5 zY=}!VAmc#$8UnYtyIV0>_zvPW3y`}N0=K#6a&`0?sC1u&cH7dqD6n)=B;I3sT3S6d z|ABIyvXUzy+Sd@c%VTDt3n+T`aRBlVByPFb*AV!PM=jl`p5p4zQtWF8JmlW1Ihfqn z&=y)J?YA9$E-3JrXWOQxjK$}<1Ap?!?G4o&@(jT9vVpZyrxBCU(m1UD1}iW%l_|EPJgv7P!UyC3s`86!>A8|H^GTbq40x zm{_|Gga69HX5p}F*I;K2=na++<`hzquya44SRTOT8;jfZj0$sf9#2bicDe+f0FFPuSowY74{)*;vc~|*5s$cyv4~3%~p2 zi^~`A)h8S>tV_quhQGg#m}m17SllE$sicHYAf5 zdI`-4JI--FFW} zS(MzizBXBu@pPB)OL#bB9*AnfE|_-d9#mIvkraepoS0rBo6BI5FR8tI)FfncZCq}a z#`^}0X_7j+ucP74*N*Vwn91$vu3_ac_j2?lKmEaftLY z`52WIjEXO2v`U#k%UOvBd1L{L>r5UkhRWcv=E|gHgdQ2CE`#azZbxnNmTfzpr9RWv4duW}1=3N2F_juYtw%gg!_!)Y_`B z2KxG1%uMKuHA7PaiW%e^Z84jm@6yb!pq-C=Us-9t1pT&VM2#lXHQ2Y+V*Z8hLxZ+-{hrUBIw8Kv^BYp2@RLnW(*EJ(HE6Q|@@~y@+Qpk%k{Rv$$cl4j=(#l`UXYi}7+AyPucsM$r%lCYtnVp0*CMP=(0gk} z^cSU_alXA{R6b9FK1VZR)FYYkzS%RBoo}FjuNlz{NoIm?*S{+5r=VZaOg}vQDn1i^ zgD`*-@%an-Tg@B`GLw8c<|sSS)I-4`%SM<%&4wt?(|mQOE2aYUTAG8 zn2L|)QWv8OWG+r3x>2VKqt1H}(wFMbkj}WnZu<6a?3Hu?oQ-ktd~$bOoW zuKRu2XQ2w@U&GX93avRHIoWA%+W@cVMPxsMo(ny4`~>uK#3X`Y(tFnI-;nnQxcry) zF8UNw&z8LsCI@*s`0(M7=0$}f_3YVO)k77V7g`Ce)6^{MaTRL`{Pe(jl4*D}>7z9Ut5?+!}gj`**SK3W3M^CtN zti_iFcx-aUQ$Uw-sz73s3-8AtW~hKq`Y~qBNK2K;rA*3TAhF#@6Ov3`I8ryOOTWalFI%H zub}64M)g+S8$fRs^xk_CLe1lTu?Vs5hRglZc&ED;lhU+b+3xqf(z3{9VwWHA?=SojSNNh27yOigXKphxflM6U;sd z9mSX;?jg91r1JFWP-Vm+(#R?;M6rq~=Ff*sJ0w>!@ub8Q_rIB+Gk>iDCQC8(^rkdtf&;3LgMy{JX&1m?w%U>%Lk-ZAJME(6{dbvtzn7ro8)h zHWlX3EFnJ7 zzOvIF`p7g)!3zkhn{z#$UlE@L&{w2k4(C8vJ)95jsr>l?`oT0z9Qu1PJ)PCie-U;q*==;(z19pQM z<{XPbjtJ{2^k363ds-kqBb-O4tFYKz^nY=rOndvPh|efzE{rUMot)4Mr(yQ?MOb5< zS2HO)wV^k(7-kppc;{VolZ1(`kosD(YCR4Ng^7vI$U%yk0)3XnU}>J@$mR~WESlP~wBW12+ z-iDl;?aa4JG3B7wNW-+EYI&~n3v62y@o5Xadupa~JsZMWU{6Pl>Ii7#ES))pv@pz$ z2Zb-h<&~BslbcoOi|pX^w%y{zH?_;T7P?{Ru*gvArrk8bHX=-$1|BU+@ z9Sf@KMsaF5W7G5KQ)R6y)O5y%@wg3KwnL*hRq(MTdGwX-(#j}KReWqI9_Q~R>&#J{ zD%IG=Jo*t{ERmL}T8(YOqoxJp*$GWYLB6Si~YCG9<{vJE*f1LdkVd282+r$4%MdCc#bD9MNzs;XT*k zdvD$?&}-6F?##h)AtG#+9e=dLC{>$~BSvome7WcC+e zY(M#0fz!9C8GVb&;JSlOZi;}LTuXS(+9qq$`vu%J=>qR2E({2pe+W}SxL}YZBf}g= z;C75e@6u5d_sC7By!5AATpN!+9r2j(3Zee{Si?c1g$;b(4#wh&@Q}kUgY~_2hq1Qt zA+hH^g4K4VLk|6hVPzxqGukzB`tW8s?*y+sa2UPt27!{AIz!T<%Q_O5Kei;^SLhAN zYoc@LF7(=$Li^g%<*ZWrg?Q<^UBygdCDdLC({SyQoZaz`9&!8>PFKjoAbMMYTrBa4VW& z>dCqlGjk(`PvGS_d7DQ@rPS2vdH~%05KBKegv1vKUEPYG#^NsKgI3bgQ{M{u@(#Cd zMLi5NiQ}zt>OvmABAHzJR(wlWtXm%F>pUDFyjg#yDb1UAskfMLVgd&He4`GD7>0419la#_vJfQppQcCo#XfnVMay2M* zv?^`|syfu4$C1(DMGl2*OlRQ#OCiN^2f~Zo4rwI*zZ23~{C_uOy!ijukT1ml_d|B$ z|9+ji4`g^nZ77;Q^1luN@Nk$FCl+4(bx7e(21_n(<018g!_Gr`!tuebTyiC+eNopV zcrtrUL7dHH8*z)xoD1-_9}78*>*I_EjW}yxG7CXQj*sFTSnsY98uu9Q06j}WWm+vO z%`ABekCJcoupCKiVZs&&ee*lkEocL*t&8*1FbAs(FWiHf7@m=)W1@;~#S&3cS(>*C zA+2BMKFrp`Ic%Y?HCy{I$?XC=VM*K@l;o`Xz(T%=>buHVE_By%jEDM+{ zNF66f$`HKRn_zotA5+C4m@4mLM2@_+XFDeCbk>Xri!y>m7ow~g=bYlOi(DH?OdP^e zS>C2>D6kN^9DR2L&`Hkk<~tbu{WYO7!v9r5gr_$Q1-rExCaBq`~xC=i;k;VU)8Z+_#LiNA9iTpc1{x3WN7o)$Z zjMA5!x=#?lDfDjAK;a`jYF;PkWlAO^ zRw0`aRur`j$z@AUMGT{;rcW+c@&kxbR2?UmFL{)%Q*)49v1Bo9Hi)9iJ-JfJ(s1Wk zg$Z?@JjfG|Jc#P#hVW69q3|56Ts=3wWg@k#^{l*jxi|kKGo;&}nDf|d7%cx2(@WJk zGhD^I`17rqsdjIqyaUX2!(n7;Z^x3j&`g^%@+4!!ae0y@@%62s7p2(ce_<9obcCKZ z+PIWIgUvZ`6kZPo$=Bnwg}lU(wW5^X{4dR7KM2}A9Q9O`%~=l9Aq4SXaJr*u8}-Wb zXSO+CCNq{B{`nhdwm+=6Nj;~{IXDwK{Nz6tT3$<+Jq8=~%k$^6Ih&2fTpbyy2B3}w zF{u}`IrooJMmj?Kz|xhGSLnaxFJp5yn55D*3BVkJC|#Uftf(&=Li)!nvtA^Q`uh3b zvpIiXrNZ3-=m2@4jFnz&Jt@Dc+MHwOpqx?)ZUA^lP|&W8Mg;k5*_>zk;F~by*N%G_ zjw7X|fn=$^&AI(AWhozkk_4r&lyiv5@;9+L=Q#{Uw~sdh(87Y4XD%vIDifZ+5afK6 zCG0jstXluGPL-Zjm^;#?N6dH!OHYSQC;^|t*eWu(ol1u;J>fGL+kwjmEQwE|DOFv1 z{{1Os>52IWbvQ`=J5GO*mtCT)S*7Qxpsms~8ZRpn#4|s`PDmV*)}^OyHIw~BiLC&w zD(NC_y7YWj#bmw6e-gB=mY$~cT=_y784X~f1qDlw=Q@5-mW(We_Kl^dDLqf9Z6fFZ zfYSs~x;VLlrRR=FoKK50!}&rH5?g_-BQztgk+omGz9B zvT|;${@Bs2(LdrT=zy@S%DNh2XjRtn5Ut933|&{1_0$xV z^(?Bat9*=jqOv|ihE!!;44#ACFHu=jYO&Gd3btKPWlg`$ryn=*y~yC>Hmxx%hW(9B zFb<V@Frb`?Y0e7IcFlK5uv09loFhyz)tE9>tP&;tg^+u+oZywo6Ty0U&tBSV|@ zxD6S~1jMI+oTX{~xRrQ~)|G0hHPAMYF5;#ix5qCTqmsanLc3t;X&$%yN!X`OMxFxr z+k%3R+vxzN3&=?LKbZf-Ap%MBxK+eDxJXw?0F?=%ba8S8AGc>Ban|ED1z$xJ;dTSm zkGxRir5F9Ug^o02;L`vsASh^8KW@`7ks&N?1h6xWCF^mkbxP&MMF6+bSh60sLuD|L zMD@hK1fWF7+aoG#Dih*ytB4^XWIYy1L6j~|u3+i;P9)AMJtMzV;jRL-fxJ-Ur59a#hStW{8Yl%v0bC#` zXjhk>&bhIPoculo@H&kptMrUorz}O_MrXs3(vnqrIxRI}^lpcyz z?3X{HSBatcFRz0`@pG7jd>$@;Zb|%+(A7{p>pJM0q3yQx z)I;$LG;*?E&c`Zo20CDGucam$~@{T`U|zPgC=?>w|768OZ~nkOc*6z7ivqk=oFjS$dk9 zuQWccPC3AP0r-d@N*5NA;Yex8s`)Np?wxKQF9D#O1<9I^%7m!-?oL3# z2_ajpkAJ30&lD^~>RuOBF)2#Vq9Q1d<6&$H8Egde!P4_%h{-<35h|uZZMlak@-inv*r%>w1-{-7JsUXM#95=ENasU3#V;#?MSsVzWcbO}dDiER_R&;U<*N%E>5ms z>G?fXyE(3x3ilU456BBeUV71`r&djTvWik*;`VrOq_C??PY2BWiWKAlP@JF?maNkA z3LD#nr3L^J(pa)ePlZN!N^$#mUjQFjkSsk^CQ_6hvK8CwDx!vVGZK5jttsrS*Klnk z{B9-xov9+Wrm&mi!xsEFE?=@F-b3iB-P}zJ5s#t0u=LdJCVe4Jx0@%iqmeisi+P>A zIE>z~#mS}H&Hi-7YB$AK3#}>aEZEOd3Mfy)sjK!)F5PYpCf`=O`MLpS11S7yK$egP zN*X8E|EJw-fhUdc0&`OP5Jt$GZZ{K_FkzA3$JO5nq?G7(b7^i<$PQ$3C=RKLc2jI~ z44H{s$Z?^oY&YxMFn^79Gi;x1H&5-A|5s6ecfkLJH{+t!Znj;GO-uN@D@^mT6tLB9 zw&{*ff6>)Rlu|nBcC*X8)RTk1yj0^$H92^HziL-iyE%G5>dC>yy;DyPEkGJx$HGc{CF_z`p>no*+sWCs(lMTbiofJp7{y z_Y$Dn2-4NU`V%psxkVnvcqasQIQYqjrG>D0;9SDx+m^%!k*-Tml~ko?NIUEl2FXL52J_-Dh6&m#Jtb3>o=w;gP7p7P zQzcF7(lh!`#zs?O6QQ*uUBpe7o+E!S_A!Mv7}_{XPg8nUHo+Px8TkyrN(%~>o_39~ zYD`9cgm&1{)0CcacoaptZUgw8AW9b}SFrTtO;vh)!&JDD$ocFzMC7FxU3&I5$Gd72 zczFOd2@2ZPrRQcxWvM-Y_tRLiO3x49Dof)5%uHj+Dm~HYO404(UjtZgL9+BvnMhH3 zC{}C&KRX?hmSsY2fSq9EEf*aYhN9(&!r9T3PER0AH2R)z%28Ymp!^NV`gXvVu-duTVXg1G+S3R_+ zMj2`4lSxmF#UJq00!*hS_Q}8;^tM>kn9nc@bY`3v4)<$Bql-JkGPpxdg2=J02^z1i zAubo*0*rWxIfJg@p`@~i{phE5jfhx}KU}O3En7x|DL|{Aru;jP^|w?0UB>!5E6dfl zgTXo#F~e%$nxigGQ$;y!2bXBPWee`8lL1RT#+G{qYcQVE3t^Lu5q^{Ym<`2DXMT?9 zNBVb$H|ftBR=S-7+hgit{KXqqcZOikWGVWi;ic$H%Ng4Y#qR5KH6*Y3l-neiS*2Ik2+ z^wML?HHd*ZqZ4w%tke;YQ2oB0J29vE?SCjTCdbEE(wQAF{BWCXI%9d=+&+Z5Q}^(d z^YrG+@)%v3kNpMF8cW5jocmtMTS$ z7v8(XR&reVpwDBus^4v-`v)RESVmE8n~bQkkflU~WVA~gGu?SGxG{@%BpVGPQFWM$ zzj7ckHFD6|%x6bpS_Say&*qXk4n(NsJUh#3PAu$T+00Hm?5whRsi&Qdip+?YBpHva zI@iu_aP#CeI~&JB_E1=Jj;Z*baJTdzthLc-U(Ca^D8yUS?Z~nNdmP9tzu`nSrOW0( z1}z`&K-QeUXGf;=zi&r&G;82MM!XzjM@IZz%fYgnar5o0in(-=oxP2`jrbt+T5a&3 z5qYvRLa;?1lmD&6UIKg$|3j>`v+&5P1My$B$UGJBU**W+)8S!MWTEZ&Z+B?pLAZ!K z3f(>deeur-ewO2yX%=|pVDaX#xek`gtQO;7xy^lj>@1JD5jmOH z96QLt@|g*%uv~2Zec8bZm}Bh@R?z&rk%JX7vo^J}!sgaDc2>mv5$B@jPdFDdkKkO~ zJcV-!^8(H#&8s+Br+Psf*8S{6X%bIsKJ6Jh$lgGizn}N4>R>7=|^6;M7pqQOi zG*948RWh3lpwjXe_$uZroU57)WHr-)b9FNm=Ne`PoNJoVIM*^y6nC)NW-Q!w%$zva zHS^(I&n$v-eX|tK4a^ESH#Do_+{mnrb7Qk1&P~kbI5#!xz3*Vn%v>cLthw0{S6Z0e zac*h$#<`U_0OtgAD9(xIXq*FPjnjCw*L?CRUKKRkK69`(=7CIh*47->*umPFF(G!= z-t-o`pxZZjX4>w5PxHCYh`C^&6^n= z>|1ltDF<6;zRBuf>&*(?9BhLbil=p>S*M4ceP=d!=wO@7uMRobW;4fBJI=Q+I@lI7 zx82FUH zoQ1tBznDjIIM{V_NKFU(#~k?B!QO@rM%{&fJk%VFs)ihs@i?M=;Gsj1G?N^0s7Y+( z`05O*Aad+X=VW*wd1!BBi<2DoBlsP4auh&8qOC8X^IJL?Mr}NFcu`bS^5hr|M+I_B zhT}bQY@UgSogA}pr4l(7!cmzV%iyR&j<4XTN{*XwR3pa&I54%vL;rxI2032BQIi~e zfP>W{M>;ralfw%~9dg9LQI{Oq;iyNB-Lp_FkmDMzV3LG~-i4zfIUd8&h#b%1KyMVc z01mXlxVgwx^lf=)=t<_kjT|G#{r#vz$YHOJeQD%4 zi&`a)9Pin1-^o#~9_~9ivY~Z~C&%BY^K+4-^&3?9x^ObU}@dp{H;as*K66(z^T2PjD7m~+&@ij$*r z7zz?Oj?{IqlH_>*rGu3s$4BouSQ&C0MfR2@N3~^kR*oDMQ6H8kM?qAcmB`Vj8S3o} zaLn3`s+%0=8lmg_}Z-y6Eh*Ajc1=F-XzrX*=RfK zK#p;n9jqfcnxP);M-KXy4*oBIy2RXvg z?7mNqRmk3+$x#J8$xh_>3etz}%Zyc;YIqWD21IW=IRVDVa;)$E-V0h(&herPD_CJ+da z&;x`PzV}GlS(YF7k9)s;o|)C?eRXuC(VS5qHi{gJKS3stqyDGJ1ajnmV6w5~xD8V| zjvPj1WCA$``63g@QKYMl%^*iEJf1Vj5z^YmW|5;A$X@O zC&#Noc%hTSHxci2a%6&IB{{Odv5Fk|;8;zLl5n6e6J;I_49##yJvi2pqa_^c$%Q~=14vkB?|a{M$4)d_N( z!b|f6IR+L+rGgykTWstUIl?NM>=$xeMcRKQMx2qF+M|%$0JeAAV>5N8#_mi z7BFb%$&rNIxIm6xB}{ga96_&9>mbJjWCDh95geItg&arno9rq%4mU#$gdFu&nd~=m z#GoejJ2}4i*<{zrF&pLi2030#wy{6Ralp@HH_4HPD)B9H1bu8{f0Co;B^$dF*N&-b`vOpdyE(4LTEP$QH5Lymh+lRYIz3@V?`qyq)uIXUKcv9W*2ac-l@UXbHc6r`8r zc!rn4D{{1%i@De2ID%T!8**T63;T~81@T6EOO8*w+3*KP6Ob{chROiUDVAK}aX=J; z9G6fH!`dfg0%~+N>1bhNCOM+e0;8Td$9cTt{K(M~?=Q5IVH_YCb8%r?mfKhWIpR_2 zb&zApV3P%sV;3GGG~>DB5FF?U!m9+0Rdlkz`n5sjjT|}fMnm@oZWA7>Oyo!oLFJ7c zKYoeI8#%J{vatwq6p6MmOsqjMhN@8tGFdb^T*!nNa)d)47di5NW@DMjaTx^?eNrf6 zolO=;j@7GB_ajFk6zr_zD1)U*3FPQ{+{VyHg&GmEB|ABW;{EmZEgTJ}nhd!~Zz43_ z$e@2 z4nb`Y4orf;vjYb@CAi}UI0QMuk5c^^j-T>S{TYr^XxE@F3^}MH`I2J@9vMG!T!B9R zi5?nA3j5Y zBqlAn7Sc_|j?&xR|;>D+! zh%f#-!y#ZCI(|&i17k71B1aEsCA!zZUgRRYg+Mn_Vi>yNL_}-!TZpXa!wMAn;S(gX z!6pWa(aUh_#I>r}g-D#}YOpBQ)%IHVWR3IboCPYB>5G(#QaE!FS)Np=lAqEL6HaOP z3kA<6E=QrqQp`pVm#-*ThkCLmLUDg_|1$$BtQbuyyhgjgA-Z9LUZB|a6?&V+OiYOj z7P}Xd3X3o@7ApGWq@FA%@+*_*APg2RHegz`Q(T*fxs;+k`n;kWx}HI0Qr?Y|K3j-V9wm&4yk)2xt5H1^JF!icxvt@;SxDkJ zpNm9%ogH_zcH>4>Kx}Xm4}f@!Iyt&_kH68k=c*5VDNgL4hN-sV$wSJO<4>r6ujMcw z9nV2TZqin9>sFqk(gqUdNO6`{&q@=4)FY+lnuSCuy*RZ7qQ- zaLq)w>!fi0j(ECR*Sxp1N{ww*vV!sx*;aA(3rbDVdvtd@MPO7*%o&ddNOU$0bTHMv z!&xQq-E2%aizvB)^oZz%F(P!U6(08U#{TSO>$+6(1LC^VH*0oP2eMi>Vx{zwiUV|z21tV!R-FOcdpF zFmNsrh(eWF9Gi$`JEBGdEDsfbp;DD4;^GU$i+i$TvexG>TUXL25~T_q_P>)pQ(%@1 zacT}}lKLg}s3zhS8zKg_gEbWQf=pIPM4?x3R7B13D4po4r6m2#J30`8R+FZdHABXe z)D3v<8OwPh#AKk5l($!J5dGQ>tB~eHZ*x@_@0FQDAs2{Ki1@};hXOX3RKTxPtj$@h3(Ki zuxic4J&_CR1G!Y$7TT-c99!C0n?ZowsY}0j!Cy2>r@H z+Y}<(1Mfo z`&_Mm+6(Nkg@>icP%Pjiay4f(?p5k@o2@;z+F~Y+E0{EvV$z_7Ny7*x4L+DO7_gED zpoE9wFzCe0=fN0#=5*$`HebVGwhh6mX&NCa11~v36wJ)2@HElnXJ!rfPT@4!y(3&) zo>Ixx2^1_Jh6p=}Flmvdoz}^kbh48~I}Hk%w3Nzzg-+x$X$7I37IB)iqA-AFC!2I> zr%N*j`O%zHJGo4n>uyK$lG&w;hQv(LCGm1$jMlX<98};QlR9_l1r_~$XN;eOpQcP)&ZzuBY5lX{)^(^1S!=oX*oCw;8R1GC> zS{AELavwf%T=FpF)(?t#9J7s>9k4( z&iw(x3?8%*8dVcD38d7ieFZ(~nQH8zj7>KJ+Yp7)!gg?uT5YF;Tq-pK?^;|P<{3mF zTgQ^n2ZAs%#}|^XREb>7q@*V;Bz%j^<=tMmiXf@(1mN3ZXwdT72k^wH>yhwCm9A%Q z0!z$>?!Hc2RDML}LcA0imn(8re*E_enyypfX#J`p$n~v>`{^ch5OFk6OKV!+S)ZEp zdkO^i%}(RCoe5GU=PqNogyA|D5GFq+->F@Gg`K!-HsadXE>* zlInK^lo37-qAz(vEn7SB2CDm`;d?nZ-i&lrH&nzNYk-u#1=S8;<9D1m83;|tEMf-5 zlcf#;KTaGOff{d}Al!qU zlp&@(Q4VB#lOR~Bv^x=b@XqKOh3Y;P!L)dzRvx^FenJ%uRrF8jrTsLPYB5doQXT1J zCL~NuM}yKPeyR+4qQGIQyau6FyWlE! zk<W?hu?!I5f5KtNoCr^?32p90{dJsnQ#05fK<;|b zqWd8DfxSI?yXo~{;XZ-eg$&DgC4*J!D+Ak9oTP#&__U?d(eB25cZ9K z`PnLLFj`4Y96BQ%c(u9aj4QDt#Js|7Pg)BYm0y@Aw|4A*y6)0o?xvIx2}X9QcIyIN=G9gFcby zn<}nlz`uBpQzj2MK|J*KAi>6B_UC@!CoB$0X2BC-IMaf8Xb>J0;@k%Qb z500$}3k;5QyY?T{Vg zjQ}z+ct;VKHo*wGegej^kiiP$Fm_Uuk`O%hJW}+DVPAM%*^!#SQ;4%09Ol<+7=lkV zY#k5dHQNRLecj>J#A`n(f0|*7haKV*08Vuin8KzTwwK=nTLJ$~ZjA3I={~fXc-jmj z^jKreDkq%|gYc_2sc_1VNYGp({%0ci6r`(phOG$V>M;_o6_)xeG;GOueeg*5 zClDqRe9;rG5QarZpfe>6U*JpnMKK@$pO}>k zqS2I=gNK$sfL@=%h+Z1@%4M`Vb zJVkUG)r0l_OKfc(^~aZLD%~h=u~Oy#S8ZGKC|3(5_7`ul|MwDuyJA^Jny(Rb5dCv> zYyX18Y(-I~<*oXE5GZRa1r7g+=o+VcSPsJI%f?FJzq!2%K(y&V@hW759PXvq!@!h9 zjK9Y$)`_JxGkg zDo*3LrEX4D;Poty+*((0n#SG4fUuO43cSC?A?0*j&Ei7boGHNPSsa-oHrjR1)jX~~ zy6~i&&A@kA93@9`TEug`AQF0`wSL|{Oze&zr z;7=`%lJl0-?Gt;E~q3+TE9OW_J0;)=(-w`YKODX(;9p;`H^p{{PrOy&d>Z^2T11rKwL{mf*=09CYL zC0vFc?s_xA#u@@@W5Hx7nQh!d2p{R%isDCBjSm7o#^R{Nf4Tsi4A=B2y6h|hzS`ob zOl*kf#x=@ydV`j;8~9O+qvWh=ghzO^tLqZYxdHsX#ZhwRZh)LIad&#_N5&UVcO(w= zn3EjYjme^(5phM<{Le8Ej*?b_tiT)C5qU!ElDXFVOACW731##F6oDyEWDV`oMN^i| z>9CaMXeZ321FNygTn}i*=f_3;02c zBXh)UE@S%(CFdIOyB0^u(dKe0ilmH7ltt2UD4mrYZ7!GA(Q)MhUc}-kIoe#hYHCg` z;7u%!k~8vinBA^fM`1)sW?ygM1Bs)uPn%1=Pt|$&G(fXGur`;zXbMx5d?TQ5-7r^L zXmgpXf##e7e%azEEws7((?=*dPl2;?S_>^lo69_0bE1J~w>V0UHkW&=X-;|I$reXF z>DpX6(4Qf7ZV$YN#qlzi-8yJF9|NCZaa6jrxwPZKm2%br-)eD`KH6OR4ApTR2mY&@ zW0}idy|E1}d>^|Jm14KKT#lY&6J6$^IOJ_n50~3q-ogx&9Dr!$h=OH0-R81*2Ymkq zP(2Hl>buQlQX7ng0P1DIQga0lcipUoWuSnjTCkV7T!5}EX)ad--(qo8;&RTL zsp2u0F3dXO-y_66Qey)U%Uq7a>=S+--Z$J3r$rl5A5zt-yC%9Hoyom+PZ6=REKm7Dwr$&E*_5IkCWVTO1`v zo6G7$bX=8z*S0uHjy9Jahw4YBGw^}Lk&ija@ivz?(Ws*GJ{uhV7i^6@X>%zp49umB zK7b-H=@dY+Ofrdf=|}6(%n>k`X75PY%%3n%lWgXtWRJ~UzY&J*5kfr2Vf+TfvYBrd z!zMbaq7sZlLY$UvSvGT54&eELm9%g#o7w0VMArt^)PqA8%Vy5}*T!gCMqj|3PXB8& zqpFw+{uJ;65_6X{blc2~wV3(|5B?RP?+K;^c-ze7Zq8ZYzgrwHo4Mg@E$1b08(PIm z4k>5Z%)h_VoH*clERM_(x6S60b(DV` zD(y-iZ8K}3^)Gc!1YW|;v8tFoG1;gld>gwFm2+;J`449Ar2!gX!BV)}X8wc5_W?mO2I|%5M1uNm&W^TqJwVQw*TCkVRJp7%ub^a)W;W*w+ zytbLs@bJsBQvi4=i=#48+sp=QwVe9ETUi{HiP~nC{#|nh0v}~@lpJj{eK4vP8^EkWixF%FfEWm76e|};*fHd%^d!%<}?7_+TzF@aobGSMa@YE zKHB0aIof7^azS$z0$*iulpJj{+wRsn{{Z}m#Zhv!&17!Qb>R0bj*`>n4{0-3W8S6A zU9%QOKXK^n(>C)VDqOPM=Kz$?18bXkC>Yagkp;Xepn7hYD=oCm+>0rYl9LL&zr|5n z=z8Yz&gwq%DZuAh93@BF%tueOoXx;@SsW!t+suz2YdNQZU$Zz~Hgl7k^Dl5wTc=ok zV%8?*^pCCP=41w*%i<_~w9PE`NXJzPcrA;g^wBo+N4%J1+B*U7=H^&7vuS&*4}|X| zH==URZ8K@dm?ePLTCf!EwwX1WU{MdCLl*31Gc)Bf*(E@?ELf`VwwZHsVvz?R8~S(T zJy%bzyIH=zqm4xa%5K44HuEAT?8|ad9(c0FQHj?!v+7x0cG?5)VR2L@YMa?%rsjMM ze1^qQa0e zZKkv^u$eOY0E)nrC$ffi>7o?|W_MUhvvoAg<(i_(TvkAG+`X9LrZ3}-5TXSRqY5Qd zK{d0sp+TMA@E+=hI4wW0%w_Kbz^4OSXyIPwGHEjKFM;i}aMHyxmp4!arD?;bad0~Q zuetP_gQ?5}Kf~!Y4kMW~beqc+8?pW#9^6?E{ogob0=&)TUN@&S@TwNa%UrI()OjhV zHSko6L&{m^a`#)T=%u(u1D|4XWRAGa<)0B+pH;v&TO1`vn@e9e=LqoA7Dvg^=5nRK zj_V%qe=UxZqs`?4Kg|hEF<53CD(y;6jd{{seugzpzEws7Zu^y{-=_c+1e$e75Ioe$ATBkYJ zfZw$^N{%*{gO6%`M16Et;gG4(cUyA$#?E(hase-5alERSOIK+*wSYIVI7%OFE(6`1 z-oS@i9HoyomtR%YI)4g$ftzEQ%gG5Q+X&xp-H6ILx4Ar%)nq>bI%mOBxZ7N2EsMo< zfSy^fm$}US8x}}4!22JE$_A;v+gxryqdpIyViv4~>ndh^H7sQZ)X;*x%w>NJ1j};K z1Nb0|qY|&p<*r?tGXwY{i=#4;o>2_?gdqo{oUOojTO1`vo69O#Lm@fmf#0w=N{%*{ zM^IIjkKSwG4hZ)Yb#HUo4fRzj@A>FCJqcSQPug5c3j=d0qYt16OnD+}XqPTpEn#+m zr8FDGz+8q7ROYg0Gmp94fMx|Bix87YjebBZbGZjYQ+z4B*SR51YbPvodH(@wk3RrA zV&Puqa?MkOzY6S*g_ACpx%?CDU|JR+8X<9X`d@Qd^E6)a1n0mh9}Z&>Y3MeWC4?^< z4i8=xP(6Yv0p8}av73_$yuZcqGM8P(VB--AIR*GUizC-8sJNQNedOkB2ENPU$Q*H- z%j|z@Ij4bNvp7nQHkT7W*PMTWi^gu9l^ks@Uwmv+`eX*4%i<_G+FbtZ=2QY+%i<_G zo9|&|WY?@e*>(1H0^W@{D*Lp##Pmf~RL26Ef_lJKDXrmkEN(*f+g`0B_ z_$iB{w9w{~^;P$o-v$2E;wU-VT)xe%IYCX(|BFLvs>++H750gpnpx{p1bBIiqn>na zE;qV4O@OzzI9}$mNJzmrXv$ zqGtI1=|)t}xy|LI*TklEBLv2JtOe*zY{0?J{*UgmO5XKVohsHz1^_1)&OHsEG} zI$E&Q++Dl;bf%3B0yM^gz0BnXbZbZxwg~uYi=z^+&1IFgnzI}DQH!H85f3$)%Sy1y zQqB$F_brZ+qs`?5)Iuc37tdc94t3*|9BnRdUek|5KHz1EBOh~;<83ah4MKe%k5vnB z_#xODdD7-mS{Rs18GQgnV9FC&L%Vd*tjdo$8fS6}+VtKn`L#x!zzL9M!U=t3+T@AjqE!g!ZI&@OI z`R06s1@+?*2Tuj245QByEZa)$>znBb-c)qo`50gmt*}1yQRvjczA^to1&MzSY^{aQ zFix-ZVW}g0?Eypdz1!^uImLw;TJ&ei6XoJeBjBoFQQcU03zR4BzecV0h4cDkwUp9l zHJ^eO0o?$<)qKKuCY>QHa(V&G+76GTQAZ9Z6=@BaG!&SGu9bRFX zh*NjpLbP=<*=dVG=4_3RKKBUrm1WyG2up%`gxd-tgb#~sO=6rP9#@fV;qGZVNov4g z@)%hVpG&eu&w)Ezwu;!vvv*;?%&ky2DfPr)y^CsrPE6MAUBaK1>-afymcvC!c@g3~ zQ5IjDFC{OcoUs{<^)4+h;+@^r0VyLday#>4fmZLb@*>fhj5vFjlNY6&KznIf?`{51a%6Gn~T~AWX~1!9eCa8)8;`?^e-caIwsJ1FI!_x0dRx zbsl>K0d4&0UT=05--e5}c3SE5t#kNwT(pzA?QsSj!$k+b2@tTKMdre7=;JGIN#dU_ zbY;i#U@A=&aa&ZePWS6k@dBSP+Ds?oG`iQOcrj*N}Sq? zvA)k#;Q2(L^;JqjV&~St9BKj9R>I`sEEVq53t+X?!oHJ)$(Ut{OUzn^v%U=#cHhD% z@K}7~a(#1zoM||gGubTc_%NwE{;5Tqp(+Qj3u7j4DZ$|tK!iI9hcEsqjx`@(CY~T&`zcY!i6C>r(v?ej(R0f~)X#>4=2eiW$HcVMRiwn^=^*t~ zqJrAG2}*!tHd1rUa0vX9fP&t5;+SIyTTtDQdW6Y!gDR_$u`FqQKV(>YS>(GBF4ZIr z@WrsYfV#<*kRMxO6_oQD#EzBFviG26A<(F)6u9d>fm^WLsqc5P5T5l8m6)~$0voCI zjjyd>p6nt&W-e`qMH$9`o~%?qUq8BVMtmn&KYwj&zpjgqSKH-n?JP6q0{L1wt(Lqd z&0Gt-r_9qA?og^MP&Tln0o#DLlHsG<|8Mxj1@(~e&D5=~NCbJSrAy|cdeG_qCFREo z_r80if^CUul{l6d7>pY+6lSwLzJG3E}^Bgm6P zDIoDEh26;I>ewq@VYPMcH3}sJyUWt@*#AC2NXm~-cJ-YgHIM7y6@$#A#Ma9ZLsn&+ ziW7mJZkBinJGAx{%DV}9TPfD-jlT;A!Iw+b2YpEJH(w)n9f~mjLxlC2K?qTV9Tq`8 zX-c&OGA?>`_b+Z8$i_c&AmkjwaS#9W3_o}WjB0}_L*LJ1>5p^{>gZOUBr^psizJvb zy8yv5*A+amCqf^Lr9TQ?+X_urEK0)rBk7LeI)%+ z=yg_T1^??ndQZjDAB8?_g;v5Pd?J$mDD5n`DI=!22b?2GLTq6*AT(gMkzSY$$P^a0t0r1K10sFLLR!T_Qv@53*)|wm zZcfBoaSkdA1G3uEf6>=@TC);y zj702^BAWTuwnVhHJ$j=kN<;_S@uvD(is)*q2}7w85`<8{a{BIZugsJcSd+^8wC~4y zyC_v?bnv^Y4b~?YDM(lMan(1D;-Y+D$@Sq%ZcC@0bQ*?}>4QD1%=K`MQ;TTmiRN-) z3$5+pw492c&5jhBCvaUg(`9_)G!?Clq8kMp*n&HAeSv-0i1`?&e{mRck#3F5Cg$e! z=3(PI;eLk%P+-H^75)D>3>koy8L}E#h}VmUwLb;_5WD1+2PgSGURl)L2ln7$6=8CX z5P!+*3{D@5Hy;CEtVW|n;C1I=Sui)#2=SA=so>1FcuhJG?`CE2y74etLuQ2dO5Qeb z_E@}j#OwIWdGPv&`K(gYIE@gQ5BxXK9$HkH9vQ!H9qg|;aFo65Jai-4kWnExRC;s1 zKzh6FZVG&8;1Azm6Sa>y%TBP&G3+OgJTkut$0H$6bZ7F=={PTlrbb-pz1T-9t)cS_ zg80%!S`){qVaWL&@EA^VF5;xB%JO6JHn~E)S=gO*su9ZP0AEDJYdA4ms{qJo9yPWf zItWn3)CGt(`L}4NZ2r04$Zf z(mFcUKSj?fd<}w>YSctRX`*Fvn1+g-Mq&Y(v}b@xtK3am+;5hJ-yFIA%N$w`1+*5f z$8lPa^}(fHW&#kC%4N#{G?M*NnsVnz6tA>9*n39pke$+!U+4~7)B?*jd2L#@WQe<{ zSqYJmmv$f+iL*_#T!hF(?T!rF>$0u$z8~{#~&Jb~cMRl?qKnVRU`lMGj0aaEQX| z@!cM=ryr)Ui>Fwx7%cJ~#T^!L~#LcjN+odOJJ++8ZnrLCcei5Ur`*uP;6fDXurVL-d9@*Y!RM}9XWB1UB-1bCzQh@BnP)8xZjmy2h~2)8p~jUMD1iRm9dzArXO(u+2kA zLub$nzZ^Ao|Pg-qovG7u>dO01Ag6u)zRyCj_%kF2RiT@J8`0&4w!2; zwoysh$U`Qf6iTZ;mk9I(Yiu(Q>Hn$5zH$dq1vnbu7wqDI)<^7HQY7`3w^mOGakQ`9Xz55-tLkV-qVuOw+N(s$FpRI&6kTt z6FpeBk-&EIu;5o*c9-$`ZcKggV!#GGgeiM@JbF@kSdcU-t}&w#_5crCi5(KihtKjN zXaRLsVH4rQd|OvU;Ds~S%6KH<7!TdPL{I)d;wG@_WLQ#;^Psl4k5}P+2Zu4S0@5n8 zM&Up6DF16{3jp)Sy;C?DIM!2!Kf!~uoP;e0mfejrpI&Q_q*L5}d#qkhPytv~!lyz$ z^O0)(!tL>^P;I66a~oitEZnaLw)9B(mD_hNgf>IrKgz=LrgdT|SGa#()aFUg`9M~< zQKh+$ys0;M^tSt$RF8HP{~m;WZW8lpcNgOS;L(G=z@|HdUjcT*gO^4JV#-Y(y>mJS zg{eHe0VaA|>JP+|lX8nEv_Vxs-tJgn**rMChf@CJuD`I}N*1{Cz^Zs~StRc8fFD=u zBGDRHsvB2#)lU|SyWBo>Jro!TaFRukg~LY{j=y+7LNzUA1qfezk+djTK>p_T>}hx~ zkAQL7i^Y6Oc0+>h@rc*$^rk@fLHN%iSzA&upPcbX+I?<68>0(UR3A)z#v$*lj88@C zGhaaFLvFu`y?x|8P68|0&162S|3Vpg#O)RF#+P^pV5uH_U}=PZ%1{{B>ZrJ@}6H(C=Sv zk6fzDu+bM*8HY;g+u~#t?!bol^!^Xe-wSRJgXNW)<_D{sH&flR7ekPHFS$McKAq+! zV6}2HnM=m`9}k@aE2h#6jLWE`!ISa1WPIERt<+A(x7M4b;u?#>mtvw1Z=%{MhVKRI zuqUpYD}mdMi1T>&k$vTVkd&Ty(=wl2%b;hhVNd*2r~N-*LH&?+X&=f-gDBJfGhQVr zafaP-Nb8attb)XpPr6G=N-#n>wvUl1Y6Og10<;yDQt}v~G&NPS`VdQ5=zHkwN!ewD zUj0gAiwKh%%W^4QGRdx2sC1-!XM|2q*3|DTs(OQzsSd&qM(97-%Tvblr$rzMN~)5z zY8|p?w-I`|u$JZ5-yN-zCH2~Cgw7nL2}Ow@Rg(8g3RFpukJkYs^x|!uNo_2uhcEZ9 zaLMQEyb*c`eGpQ^N&iP`!%5KajuCqPH%(pto`wx(gYei0&5gE{ly&SqLed=Eyq8Ak z{I{C$hzPUj6(Dm}CbV!nil>kfQ2!jPM*vXW++0{&-wzEiON-ZBS_{}ItKQMQ0!liU#V={O29@RgpK zCs0MC0=xp)Ivlc)YTPFBhBv@EHNy7+J3_cDn$glg`H9dxsM?aIe*oh0)fO#n6ZTdd ziygfPdh3CtS+a}J+js^Dib1tNhmsa4K!pB&PC>;zP*2EB#rcj$})oZFAcSd=!iFVMy6noa9IxYT-#>QR#Oy zbj2r-;}FLXOQ5J5Mya@qI~FX~BP}7~_>Z*l@=5F}6DF$FFp!FJr8!d32Y1COIzHw| zMHFI*6n|Buc3&-^(P9&-qcPy4axQwIL}nJX%HRPO%^Ol1@GWF!5p|Am+~YCOHmi7& z1v?Ol0~mSCCIX$*hCMZmqYc{tw>zg;i)KqM@e0K&w|MP`{s(dIdz43U4y$$ZiKojs z+LH4JQ(LkIah76yBx>FKWS24XLswbilnrW>?y^lCP z2X)~Xmh6ejDCh0OLG-J(7u8#H)N5rEt5FSaZpv$Zz}_Fs$-rU(8q_<>^kxAeijsnZx9_-di_zz5@@4He5!WW&UU z1Juz|0cg0mno4GCDL4_>vxvF78Pc2b-K1PU_%JaPR)>q@=y5SbW9*VC#5zRmBbKA9 z&?e?CBIWL4MATOVCR6vrvNLFs)^0ek1C*l=00xNR=zesFOW%@BHNx)eTV#UdU=cQpva}Y;N~ri6ZR$T=n}kdxgp*f z-IJ`03|c+vT5HB$0^uk$xOH{jxs1m%GNI3Py#97YA0>gUcH6 zKAvUhH$qm4d1GKL-^2IwcpKVPfhZAtAh2PC%ZJvL4==LxgFN%PuXOt70aJBxpK+)Z zryu4nR#)GNe;pVCOvexAlP^$9{Q`$^6LX@>cO3}fuG>6 zbC|d$!}kR?$b)wXK-oCSU4x2hd?v7Y9(-aF@KfA%VWDb#@h!l%d+>T~q2DjubsZhz zQvNAm=REk~wg~?#cP)S%m40B)J$P+Y3DZw=SCOUe^p8dQap?3X?*x8^yL!&hcwt~A zJ$NS=o%D0u^#bomDZf6jrXKwJE{Oj;cV#hj{`3Vl$bqWZ1vCSp0Kih-1eeT!-+97KJY+HfjX+R_ z(IpdqlP7$3Rwu5H2a^fE!xN6w(HS?zgULkS;|UwrX_;$1*sTso@FSj3;l7r+--CUb z6Usj2Ih#M{j7&4XNf?=LWy4*P@QUYr_LnA@AA=xm3Z0nC*$2|!@|+j`Q>|N`Km=*# zT?wy&2_t7r7R&%9nH4;kdgrr&PlIf%-Y zH2t$Ym^AwVM!v4$+U#%gVAA9V8aYp-qqRc19Q9z*+y@y6%_`{}y5+&7sSh!7e2KQ5 zH1)=KD}BAl%!eBJ?xMmd&3v2(lO{fsk+nR`r|bqRxkY`I{+Sns_j2+MPzu zjQJYt=fR{|k1%q+j6s(KrD2)}lO{dV$oa!|jji`!(ws*d*=fL4n)8DmOqz0+k-u=f zHs#kXtZfMDdg-x7{#khx=90EEi;TruZn6!}vjfCIO5S8(5 z_h8aKCK?HOFxn)sUp<(#jU|kP%V=sz?12Z9cCnO^upX69i3Pxr=z=b7Vi_ah+vgg~ z<-w#qEN3JX?xwLS78V_f&W7~5MuMxa!e}H?iHvTU33*@7NMPDZ4Dmp7H^IWD7zryr zQ7ND8fxhhwf%T09fAlqwl3#kDi`5~pv0)3u`-z|v1jz?k4je|WDFVEyVKe_!b&?0( zc(H*U`?K`!Mv$!AVHy;kep8;PZ^}--*h~edF?Kb+GX0 zbRqgYV=3AWBCqr0RWvqOI-G zqF`{A9BOFn92i${7*l2-j_^gO9f+dAIq?J#{V9-Fgw7?jUBAv<(3G?vidDBQ6Z#{f zapmk36+w=%U^|xb?h7(N?+x>>mp!U96>mr5qTd1{5>}@zCji zmjdSfRKtmYOW-iZkcRH1faiX}{*UnB^#HXXm=d5ydK9N|oIrPz0T{k3s7x04?N9KroDd2Z_h$ZJ5@VgdA$3*h^a^$ z4yCh_qn85yh+3bNlM8qei=*V|rGUpj(VSYqn^+trCuTb;6Z?!l|AH5WCNnx$eap1qYIo49Z zP05%B3*X0XM5Wlh6manfJeKH+3&kOCi+Z@+O92O?4w?f{q6N!zs>OUmU0d#A|3^Ue zELf`VUJ5v30``9d)XRdU=I*6{PCJ$X0-9>UDiif~xsyxka^mraz&)cLs--g2|I7Osb&ma;1gAQa~Af07YQR(_oP8(nU5ifGnv= zZ(NgH$#w7|Hn+#2gRLRz-*)Nx3YU4vLYs85(`h^JJGc)U93S<(DrZBQhtnSomHk7S zct&OABxc2F8bll#D~m#Bt1|JjiYqxuFJat=tdPqGiV`j-e#kmT;?_loVg;Aq=Bi1U zym^VAn&_|Yq`bS3w_GqFgCvEZ$PZa9=h=_^u*!;2ijI=-^&t8q zq5CZn5{@1+5Yh|taQdg&Ur7)0Me$?TU;_OBjwdF;9=cs3hr>?wc z;0(dbb!dvbXz09O2p0|HMI+~xGl-{=ylCvKjiG>{E#*ZM=V^?>3~ePZnmUJ*w6^l1 znbSei+RKaP&buV7qr7P0yg<@A%ZrxIWRliHUbJ$aBxyb6MQfIH|7%>*`v;jHuw>vkM+u_kjm&!Yb>Fqqb? z`mx9}7-=0AB*H+OZ&W#nfv$W(%^l~EclF?9(n41G%|u$XDZiPB_^QF(eDDIm{mGR= zO^p$7N#Z;=F%yeC3nhj(3L_l?$ls);urqiq+`ZvpVh?=yTAWzYc}&b0{*|;-XD#2v z3fI94SF0!QdAw7f!aG8F`^>duJgf`vTT(`h<(oM45F~T8POh-Wdw@T@|5e^~+}@mA z%p^?{#~lVC#gIj@KN0AmSLIQvoR~KY2nG+LtLa3LwniF*#F_PhtuUme+(ww3%s?ht zT1u7Z#D6Y;<*y{1^^%|o%MT$%N0gG!i9m6wk0mN&J>)qgyitTq^V|e-F>?i_;zdnJ z_}P$as|vXZEO8iRilM?)v%Gik?=yk!r~GH|;2yZjF1ivyrYmXIM1-3!vv`EZ_wRNX z&|D~e=evDXfEoOYiNJm}zOW*h!PiAYY%<^H_L4cv66;}HZ+LCB8taZ1rgB}r(01_v zG&hHTCv!b%0J?vNAD6etF&|3OEyA*{xnL|-iO5aflvgT8?K@KNq#UHvwg<2WKjLJr ztdIAw{9xxixXjW$fR<~3)51nLt)Ub7u!AE$|s@(b@82uiR6i@|dzZNcx z!&ePpk+!mE*d_Qjf~Q2{9-!YQBqNJ&>Ke3j=^`UBxcw~D2GcGupUjyxH2^Ebh z)DNZ&zKh(5dIVI+;=yf?A>?LYd%W;>NhO0H0^?_Jy6H`#Cb^ENR8V*@s=>g07HJja zbaV}uj`{=5qbNYxELcvTv@MSlETdd_o6LHctQ_zp;=G_#*rL$IpHac}ZG@`+@Roqu zd*I@D>@q4w_d?IB>>n5kXp{%0H82^KT(3Io&5o6+eCs&=n8d?_NGY-1T8<;i=HF&bp$&czu2!l4ru z+#7JUJpW)wR>H*qmGQtu*F*E!5(-3=4NHo z3jg=1?)RJtXr2c?i#Z7ybrQ}G)UA`vfWEQdtnCM|j0Sm4r$4{}9a`pDZfdv~pfVnqrh#U( zj$HackA5};)X@#|T8Ak^G=0meg4D<&zLO3~?4Gb{tS0sZX|P39>Pb$|sA;f_viUg^_;N3f&XjrR z;mqh0b!mVm?gZ(mMSMp+N$eL@&|f!tZ-Df~BEF-ZBo0V;c0m&zpJDt9hrI1FXP8ZL z(xX29MrTSQ@Je1B_dUblcE*s{*N5~|&>W;*7E!7vpAKCVh&?QJYZ1MYVFH+oEwa$|x>{d63KL?NwAIOK15z)G_)gT4I4O4CX`P}8AT9PL zzLS2*{v@^y#vrBdHZTuZ>~|EE#Hq3EcIumO6{IKL#P`KckIfFFDSaKwk$xPW`>*e< z6gxAv_)j`n#X+j+O?*deTY8RW$FA(J#dZXA#__u*{z#_hr|JBw?!HB&<*~9V$83Xs#S39c%xw(I(ZnF` z`#Fj}4wdwGi1fL%jL#zfeyzv-5<#l;A>wUR+%lF&ee@{?I!I!3kkURx9J~t>S40&= zABOyB`52I9eTZ12BP6bhuDK463Q7C|q+K5(ZW#=TYhqLGF!qp$r$PGTL&V{EA#q(? zc2u8V6Y&j5fh#_c>QSgHWPA}l3{NS2Yn$f;sjwH3*_tncUSGvr%8c<9;?xA**qaj= zxC5H)3FrWC9{3Wq(~R8#|Dm$L1Lt(Y#m<1^)FiTv!XQe<{$Gvv%&)iDev&Te<_&KjHfej`J333qW^Y#-X^Lo0N9^5uoQ59QZdW zbu_?dB`NioE{+6bDU6Di?T>Lt-%puW)MJv*^MaCyLlzNcyFu{r%u50_Tmw)&4~%(? zEaT_QX}7rwoeHRz2Y&k*;1iicO9%x|05sJD=MIM=r*cJZ)ern?KpQN$;+t-W``3cB zaUMN5S$ksfSjL4ytucB)Pt9pC|8TQCBSp-1D-Pj)E3^l5V&v2H1|+{#?)y)om@WHg zaBdYUkPj1g>5ZHfc>eb|UlxLT_X>S;Nz3^Nc*=)34+;&iYdLAahj?*x1w~fA9u*om z3Tw$I!dW0K@gg#ttbsi#6ueSL_zmzM-{VlVKjUekNf?QfaxMbD`5vcoH6-regjQc* z;OzzC`VYAOYGeS_!?iw=^D-ec5`$XANdR8Ni=&9XW6<@T@g_WT4iw?)AT;nIG2fgR zz0G(V-oGPe@^uB)&l~rd`~ym+!E^Xs(74P%=8DZJTQ4XLlo+n%9aX70+7xPi+LDD!CG zS%`C+g4?L|Vt${ihN)jcr2tj1;J`K8p;FuEd*CYDW;TyfwvE~~<`4N&1g6P@&->yu z$O>qqc8$3^-;>r#9G?Mbt_P;tyZK|n--j8K8So{boo-m&7-|EUhY}Lz<1_HErl){j z_GZ}V5i^hEzp_>^YRU1Zz}Y&THYG(qV&<{@k7{GmI&q?bXMc}F&%Jp(|3{clDLLhV zCx3`@B7cJzEvG&3zFr(1Aw6g2FY!|zV`Pf5Z8Au6h)DPAUC!zFSW3HT3Q98IK$ z-#nLpQxzTSIgqXsk?x-6ko7Y!=FfXhYyS$kiMHFj9I}4q<@`BdS!D{d0MF~qk=E9{ zn*Za=Tyl~CH}ImU_~i3%-U<&urtz*I^dpidangR6x5IxZ1q~+vo8^t$$Uc~VCv*?M zqGY-wUjW}i991Hzu4CSheu>_1S=TuV=%O2zTYf9M-7M(V{7f2&NM5MZo z`ET^CAux#~aUMu(K18Itj`=cn`nN*Wb@qUC@zJ?Og4^r5&K;0me27SO9rM5F z;S({}hUzh48!-NdLlq0k9_B-J9n;2RvbMn_bt07nA?ZC5wdBk|9+e$c4cU}y1wvPg zME8*SNK!CQ@U5yzqd}Nrk?09#KGf(k!+2D?otm^7ge?|HNs^>+o=~c{Zkinf;jBec zl1icmXGZea;aI3B&GbVM*hY8iWVw>>03XSW=CNHz=xTcmSa~g`v_6VStsyfrk80jT zM_d)GdKOb@CrNQU>gy{y327htCv!SnN;I{2T! z?s;&k6q_Y^{`h(t_x%zr0UXM<$Xc=4si>?7`%p#LEX9j0K#PhvyckYpEV2((b`UYX}Em<_8@sOlfS z8Ouy?sLb%8%D7pT=i23NRTl$R#)DG_pIL(^tZJ(J5gGw&;lZhg&#cK4w)tv&0I;DR zoca&VT0B=f?1mu=<7{9HJ-B>(*Wn5OVh~rRZ!55!9-J!2W?i0erZ(mSQG4n%u!|Pn zmRbvD3NQG{Nc8~8ily0y=ady|=4 zf@?al5pgZ}G{Moi^Y7S|9z~>uddIcvZ$pJF8Q*RKbH!I+4g_n|yUhBE`MYG^?15Bl z3Es9J%+J7D|1Og&W~*tCnYtqjn4bnu!6#w%ffUqn4L$&cbSsXhTFV0H=`&Z;iCh8n z?lq~(Y1Tpo$WDHCGWjN*>}1zXD)IJ3H1tX?lUyOAayc&HEf6v)U(jRuUofaumDzcG+7s+@xs^3nfL>0iMyPySbOY?A*~97pAURmUy)|B=I2>RH{9TmC0I+Q|Q! zjvn&AmLo&{*LHj+|LZt*%m2ELYw|zE@l5{LcSPnw_sCb1aC3|J7W^6`1KqF`Cdxm= z@8k|l9D0QjI{z%evwX2e6JTQ;#!S4rG?K%18jA?h;5)#L@VOp1fAIMNj7P&TFb)m7$=Df0RYFEpB&bkj#&&{z)Cy4nIip?!ic`uq=xfHV0)Jw0tkTWZG{<<< zto$p+ZMltcXOP0SB2rKB37>#W_x~s=M|mttgg$uz7snx!_HF{|*gBwkPy~op}T0%YmJ4ImGkds?=o2#u~L95Sb@W-mE%9iFZ(4mv8D--R&D`Ip@V}=^xsnc z4gfOL6PDg}{zLutB&o2ofXuhTwxc(l|1iH;XhMUtn}K{|q2V&@@SyYYYGCJQAg2kH z307f81YJT8D8>6XkjEApPGd&?BZHO&s39f$H+Tkd=**%aBmayb-&<-#DL0UU78-hF z6Slw_ZErdh)j;^xA%rrE(|u;4zaB$&Otc@t8>>B_u5Orxp2y3^f0{k)9%IAcJKl|O z^}smW<0kxQw@<$v0^6_gN_%Y4`L+iFql_9z?Q_|otL3cAh)MI zQB}5QU+CI?WzNw7?9$v`JTHm?Scw)>K0%}a8%AwG$5M>O;>r04gvLaoY*$*! z=XN-elI~+OGmyH0Fw|R;B>jJUod)hqST`WFmwb&KtKg-D2Q~Bu7V46C`{S+CMm?Q6H`9j@&G)YM9fbCPy)#G7hd; z3wVpLN@Fse@Do7IZ7hohA1(ck+$yZ*&&pOyU+@98#_-YF@5pV!Hw&$IigY&6TpP=R z%tx!;Be#p<*&R`S;QoIAzRuPd0a}z8xkFere1>rVm%k&#nUL1U8-aPT@M5R14nM&6 zzrn7Ba$f+8E+Th{sE;r)O$BZgmE}0th7l-_kVWnm)-p_(7sKU>Hj;}Ze2-_q{9fU^ zj44@)K@;%iq~ZJG+usp^KPY_l)qHPXpaB{uJ=y`!zZc03SIgWn4~SDvW*^Fu#$$N$ zZ;L1joAKDdp@WUcJ0gM#frv^p920q0woYOSEXEjgWS~_A)B#vmNo@fmin83m!)QLo zxJO021{39JRi#`|KfYG8FHw9!?$H@G*UI+==4o`j3702Kj-AR#)*Wqm&HJ+053`W_ zSu_iQOiXzKgNE<;2AZ<4>S+^sL#t9t%>7a7@wKv{SCv|p?)9myP(4x#+F|!lRp+4y zSX94ys9v<_&ysY?SWyG*NHCMX=^y@W^epCS)o8)%qy-$YmOMS*@YK>81Er zYAa16@D^IbDPk|hZ;569Y^NXiFs+ex)KdJb6I7UIfG^S-X-6%^AAn(0wzCd=yVgiM zYAODz!%A}u{G8TEJKhAuy-$(LIoOQ>(H8f>jqN)5)KdJL7gg^x2`I(EYAOEUbC}OS z5{PO*kK0(tP^hK&`%WuONANycBSWFS%CqvSyw74B_;jt2cGOb*)#y;LUvGo2)f#C> zEyaHscbhd|fPb$w++?wr;=gNa{sO6)*Kwo`)F1WxpN+ zud6jOJZdTadrztGv<2^MYxGk59jmazJFbqliS)rmVa5a_PP(zyDF*{{9O``(F?1&55hOhmO5|4p=L zxbschY1Yyj8F{r7ze1uK5NZwHRckmDW)^ZAmf~;293R^m2|iJ4q#d;szZ$YAYnFho z)*5L?EyX`mMLjaRz>koIA9J!3x)gu!lQO?wg+|0;E`d*KDL$7lC_UNxDDuFH-GD+e z45yNG@*JmGIlA4!u@HT}`q+L9>ayBJ z{zG}YSjkwBP#?UF){re(gNJmnUi`^0C{n{96tq}bdTMvEQoCRe5riiPc%inHD*{c; z0u2r01E7r>N5g^cV$I6L#xA&U82DtU#O`9n0lT9J+Fh(c1ra@54cm?Ti9@ES-NovN z7auBtrh$}jsOn<%S|*IDp!Gl+5v_$kbQf!OBezi>7dnIV)YR@`O|FM!K)5=A2;Ifd zE>^YvGW#zEUalS6U97J7um;_>%^*8%1Gh*;se6R$?d1v$*<)O@w@4 zR2R!XTNn?43hcG*I^Cc~@Ik3n7whld*jEe6djFwjv$~7rUn?unc2M^J4>j3#x>)P5 zj(q}DbG4G6AQo{K>z`=BPtIxxHj#*uT|Qy_+;SJ|{HOBq`Wk{Wp_W*ryI20*taB%AUH`%nqukoTCoSSjxsMj2eHM3-fZ?Jm}f|H!K0X`mJkw!2unQ)PDU z2Q-i{XB^$dN^d6dRG^s-w!2u3Zpq|a4Yc0IvTV~`tY?vNslGS_{++FHx>%p%jS!0T zpFp>4EDIpr#WK)Qpe~jVxjX@f45aR2HO7!hDO}DZ#F;R(i*>EJ+h_vTI+W`!)*4LC zQi0nae5kE)x>yyl2!ARr&$AI1%!ck_T}4lhV(=mOdeX=ww7XdC(G4Yh2%=yI4aJ zXY$kTV(n2m+YY;jsyYuvAc}6MMU||FDo2a1m84U~2n?ZfKa1*!@-+k8&*GR{REv1% zWc^0J*fsy6axD3q!gyUi_-y#*<78mD+XxQvcPcFV`Ge{4<*jRYVMDNmpDc4yIA0;;A@L0^pRkcy*g&hcgKN{4 zu2ieGuYuno%@^dH7d8YxE4~z#`6k7pXIub>#JsQ}*f!~FXyw9&V9TU`v+)Oiv>>># zNDZ`fNH3b;)Lc8{g$=E|UsgieK9nt;-o;i-=R!mNs~qMDVZp&Nsn7 z0^1zQd6`7;N=k2ZFxZdpz<(r-%-^)kB=}EY#q)UM;&&MR2k1c_6Rf!&*bs@=en^vW z2w#i9;RHj)r)ocBng<28!Wi|AL>-8pB_a8hcd2{u-{juUsYT~~AR3{C&RQv6ogRFY zoaj?4*lAa}x3th%>dt$a2MtkV_!G+H7O3`VB`tzAq{t--Jitxl0R9BQl@O6!(i`>@ zCPRa!NZ!#yDI>o|!x)DX6}ea;7%mcPqY=U#vT_jA2@xrCw5%Z*DN^P&P~F6~P(81e zPK0>@M9>n6(~7B1UJ$Art(5U#bNNJ~yO#2J6$BeYM9O1Y1rhX##J65n$|F#n(@M?} zYW|&+u_EPJOgD36?n4#zjUD4$L1dd)ez9+p3Sv>HDrlt)B8%ch;yo;aWOGd*Xdfa{ zL8O%xL9D@u`9n6o#89ZFhAO$}mEmML7Gmtg#Y@d>E@4prtd%$Y1x z6z)D%$s>+n)e{bx4HjQPHeh+!O)6J7*pG|CRi9I>gsPA}^MA@YLo^nNy{f3J(;L#^ zp>k=MZ{E|QaQb}}j#*GG4pACmyHGd=TZqIOXhZR%wgG~zw#Wz@I1&$7mPou-MDZWM zPC1?~3iu0#I; z<)K&))t>)S(rUY47m>1IGA2i;Re1)g%m1aM<#xfYBJ~&4XT07n{Cl+eaLC*5tO*RG z^>)E-BBNS8^>RT)sOtZhk`~+ryNjatmZL_YaCU&|h5u60io0MBQM^(jas_n^CP6hT zL@Aft1$&AT`xQyEixLvqn?k$5S-K^`e>gKb~At|^b?8QU05G? z2O0YY1d&JW$nw+qR+=vNSl(YG7RIt2mZw8nP0P8A$}1lt62BXS4hdOr32ApN=O>Be za)DQ{Lm_Sr^8&BnYa*>OX5C3Grs6cyc4qJbuV9Wyiy3V&Uk&t;#=O8QI76hBLGO#5 ze*yN5!)bw6aHdFmDpB#@!T#2q7kC9bRW`mxqly=J1!sv;3+70TNcaKyABW2Sw7@Gk zTa+4tJU})?CRj~}(*m#H98s$0QsuriSO0rv+lcw?*2Om+kn2Ep|995DUH|ijQ8W!nXlztHZhJze=P( zYG%hD?3BZ~*}qz(SMsaY0pT3|6D75cpPD~K6+`a>?@4{i`i)Dw;1 z#bd!uBBRe-!>ElbO>xLlgX;@+;@gN3ncyyw|BF4cb=e!DL0ZTY3;bq6a4+q!EL#n) zgUcqgvj*pgpndFu`$Tf~=W0QfhWU9{ElS| zt(s$;_Eo&wDGD?m7iI*SMQy4%quPHyShY3-5lQ&vE&njbuor?SL>>#UQVr1N=_21G)WahF1g8FQ$lwHiK*YmnF;t+G@ZD}Jj0qIs>JT&x z6-g^k3A1-oSZNQ~PYXEeFH$)eL2G9MEroUW42u47P)ye z%Rcx4^`C?T9MXQoxp}ZZUs#VNAVDkPdTnA(-jIUD!kX~_QOW}B5h9Q&9`ST7m|2cx zBU4~zBoq@vR7Tjt&*1H9;h!^9J?Kjzc$-8V&xlv>#!=w9%X2wD3~a&meW3;-CSHeu z2zPY(LAU{@0MFS1BZ5{Q1wIg#I|Ghy7!% ze9NSukvsZYGk6+x2D|R#ka3$sw<+SGfQ3`SDta9my9{7eEnxqo;JmQrU<_I`1#GJY z9IsS*>oaWI8%W1X!aEhE9SOt;oTg|c7Y;0!$}VmZABRtOka9UrpM@&($}bD=tEhrm z{w<_GYdNP}F2mP^_tKwAc@HYzSv$I{%xn0z@K!?Q!G=phT0KCK<6mh7*>Qmngg$@;e(?M1#83v z2&Zas*i5t*1JzwI`|(jzvLRODw8r5DD}zsU$IaWU(q<3X_crIERt0yx54o%R8G;_J@DD4>jcJ7!7m{!|F*hPkS@5r?%liB@tds|=8zPW?aeF>6 z#N{1&S7onuP<64DvOOOd>hhj>Qs$DEfyQVooey`#Psg%A&Wa1cmJ;U@kh=qc5w7^( z-*+?L2((>e?hXWAcEu;72xjNU!Ol3Gx&wicuJ{pX#4x`N_R!(f!VSFQiqB~$+ccuU zIh6l6Q~^va+`y}@_%Z?My{HOSTXTMKI`AN>2$eeAod}F_`7dup3lSPYAH?lPVlI*S zeUZRum;X3QX66&YrfJT7lfc8MVveyfu0Y`^!5Z-igd0gLs|M9-`9EN{9Zr3dz<5_6yrgm;dmcSu9Lm0ELos(3?iit-?uuabiE|CW ziAg6TjFl5z3BRrrvK;6DRqqg`5k^h*z!aCS*-||DRK<*gV6rVzJlmBJg$YHjvfcuF zm$-~>0L!njjxk|FiXr*uVEY|TP5r<$m#^IzL)!lt>{sG4?U_$^CG7u0NcYACG?#HG z`t%Y6? z3=9>OqIcE18k zPsDpmT(ms{)pH?ABaB5g+*W`1$D%UIo^;th+7nxYq}4YzvHtJ9SXfyyvpAsKL+)*L!FdM*aN2 zT375yl!4sJ91S*sxXj$t&kuZpZ!0%L%L6SHu>@?T6+s%s)k0fJsMo{}9amtL=Zp?oM#O!DSsij<6@;dI~Z5;LsRB;4@d! zHdJq%Ije)!)o#ODA{z&`xqJgqfOC!A4y>o`Ubc{>XuHezDFz%_GzNmHTEtDRnlC;B zpLVzs%GHqheFgZ3q@hHThU&29bC>t?)iS&92S1|iaNADW+3iXwTSjK&OW-%P9rjDw z+3WJQd?YpA-%$VIklBtkGSK^7{>jLf9O%jr)X^f@V41ra(f`8bzn!8g<+c#?_%G2{ zE`Q5+m8H=TWNQ%zJB%$I!uMMnAa78NS3vNg7Uc@lH!lARxMM6j0Ks=!B%51o>06io zaTNV5`U`^Fp`t?ZUn0*PbtQC2Rb@hcH2Bo*@>B!+!R1Z;Qxyee!7AgB`L)oZA-Ge= zU4d2mmD^^H+hZT&Ir!0)@InE_`hpG6Zm|x5N&_Q`iWrLqE*80pPDhgfvg@;x3PLqM6CwrRRdY`OVvVmI{Ge38C(C+U{~y=P-t1k&7l){mu{`Jya;?FL?SKmekfVz zGpbdUIuU&d$%%s_sWh}BK-M1_h05b42?|j~@LG8^RA*#et<-o7hV4kx8ocX&X|7e; zhbNFVBf+PJXq1Ok-(}sXv^TX%32T*6asAl1D>x?^$;$HAcgU zHJ89|=F!l^ch>!)-#)}}7u_o_a(WUDnG?AFHCgkp=+|fsu%;4tgAk1jcm(Ztl7-&G zt(nN0ZK3E9qB0_A!;~zSh!3ak!$`o1p#pwII?EI(k73OWR}f1fc$-9=>-ZJvtRaOs z<8YHXD_W$DLFbk<;vh~(w3wUBSzeLW=5@jR63|tRxyhV`7x6dvBo@|Rc>fEB^ec>- z%vmuaZTod)z7$vm&AFADH7wUF(pj;hRCkmJq!G{I)JcoE$(t1?N;TPu1^UEC;56Fd z)Jo0DFG^J{srUl0B@U-nYF4}`g~~;`-w3wd;Z(C``9<1UWL8eN<6vhTPBmv%0a2M-6 zDlCe>_^X8;5-6bIm}r%?cv9 zM0KSs4OLC8m=T125! zq8cJ)=DW(fMAS9uIApR=z~s1WR&7x(fW8)$4M`lGhN9@U_hrOe!GTO{DskjUc-9J$ zaRG&IU$BwdAUC17eBu3pvfdL(TxIdpL)QCp>LJ32B0JWj8yL->_9lklCL|}&ADJhv znexlO6N*?@VAOpa7w{>X?@fHQa{qSh*6JSr5hU(4M?CmCWq4^1)+p8==`m8>?GKtp zJtOKvxXMf}=}~5$w34sF%%vARFf*zj-a&WId67QZnUifAZX+||bz9lYdXkj&caw*8 z!bxcW3isio@YaYTJDGF7vE>u3K_u^+NQMtYld$GfENqJF(F6RZF`=A!?sypL#xz&B zF`+{I+LIn*IG}hFrxiF{*G^;RDf~s!RJYotFk zeK4V>_4Il8vjgl)&B?4`PQd+|P&<0|D<0W$IS>9jX=EyXg5j?Tb*wqZ;Kf5+j<}XP zEex~&Dg?8>)#{Sm>sJ&3FHRbEZhDeE#)JmG8TU-t4X6jy$iWNW1%5nw*}JCnybDk- z2iIzYGLybnt|Iz>Q*e;ttQl^Cgx5t#t6kR2XkpxJ9JLh`forxDDu- zjRoIIey(odehC6b^!fMTq>bsJ1UK1zx59gNn9}_NNc@;F;Hb%|w><96Yfr)b^M%j% zRbG~d{Hg!HlZQ_t68($L|I&kT6nNVm@=@B!e}&RyC&P<=a7a0s5BXZ{giG4I0UJIK zzKkyVXn`qx`2zCu|6eEJhYlbvL91LM5b=@$*qaP;0jU${0>hBkf;g z#R;?GUuZ0EXce0X`ej7#i$^e~nyD8N(X=Wfpq*bRp`X-tvbDYJWHW%0bf|vE!^g%Ow1Kdvro2~gB z;<79_lw5kMiIxhI_dW0pTEjM^=Ii9*Pb|u)CU*S;OpF z8u2)i*z{AGkRlFkj6@tR*JZ*BPavJYOMg%qH;A6Aia=EzypvMl`(kIaJ^Uz&=0I&6 z?D+%u2dfB*3vQPU02=1tT_}Yn9J5Y!PYKjQ8ayM2iN~|G;k}iXP_F$I$z; zXuZCNmikzu4&y|>JoL*$dog-wb9&E!m1t*CQ_yNg*Ql@Vp|+QY#vDBD(SEb&&*Y~k znnsL2IXuk7*W6vLy7e)_BWRmOe^qM)GL(BMX6TJ=qC83(^{?JGF#_xJ)W31t#8ABW zq5getEOtfsJBz3f;WkImPLcjDB7r_rlp`+GM(xy9B+y!q9P#CR!|-<#N%Vq+u}XZ3 zcX2a{JS&W6;rS!^ukKsoK3+8Qmn=B95}LFC5EdVeZxYYiVX#nnTW^*4_p&g`Jl9pa zx5Ktdypke}vL^%r9-Bije2wEL`HdHWO?WR3F+( zg_imH4usX+xcs$^k$qGzBN@Gz3(r+9J{=_EI#_5Ynb z9ygqHVg^KuLWJ_=2mj6FChMdvu?~ED9t{n^_#c!x*j8zdfuH*?&A(-8)K!{$;MRlx z4HVDO_%Yl4C>B#66sioU%7-ZBgoEED%9OdN%smA`t2`nag7JrmGC!c(&6fH@Ffxyb z##j8|BBl9A)H{?ub0JttBF+_@P+=^>`uYdO@Cp=(HbL-3h$z=6j6a`5%~>e^ z2vNyV7{6D<8^a-Z1ZZLOC%0ep!jL~sq!s%OpAAE62#bob`w@xg_8Ghy#~&|>Z(giA z`whXGINaX^53XO7jGl_G?%~dgo?!hnFGRgYf1)TeZ-#pHU=|qHNAkoS;6l{5^(Tq4 zyS%E~`bmh&SR{(W^;b%)U~hrgIe|8|9ZQpH)gxu|^(qhStzagqMw z1o>2of5F23)iI-C6n_bkX1dfcN-|i6!&_t4%U@CyPsgG(&c$`W8akYYLHuPz@#@Kn zcLwX}a2f{jXNt77(^Z_tfK7Bb4TJcrU`z@V5OVwr>}`kBFo?e@hFOlQl-~iiSM%dy zC<4J!3bJQkukHjVNiXu5oo){fj6;vr$0-?yBDAZgv)0L zIgd}^l}+HSM0{FZVO#@yn1`>z7^1(8$jGUT*BjA)Ov914u$n2ThLejU{XIlJ3Pwa? z#i1z8UrjR_cnm7FyTGCM3f?@U`XSe5Vu_mzc?|#ag*+LuTRFwn@g~8}a>nra>tJtZ z$_y`B&F?_;F$r&u!uz4mVbp-5v;>VTBYfd&ER0!?X6-i+ov?*{weUL@UP1#L7Du7K zAZ|nC!hi)^ER|s=QaE}nM){^P24c>-uFhrwmVP`FTmxaGKl@?dR>%|bgYYP)CJB+7TxaSiV)|w5Adm%b( z3+rf$F)vVL{z2dnne*cyybRGDTbSbxQ;~Ush0$mlL3naLgnpOXD1w8NXNfWD6Ga zx!pzq931O!v~Uv(eW`45TO=%ILR8Nd_QgyCoOk0IJ>3zM|)H5NXHhY!Nv+d+5&qKmfh zE~Zjs7r~!doo-V;p-u9!)h-8loz;aI+Sc?oW|PZo^)W z8Vq48h`QLq5<25{W#JR(aUhK2hrsL65M|rKsoLUv7UmBRC*gTB+z{_V^ocF(tA$^& z@Yrz<y^HrUp0;Eq_K-9nKDky`M(d(b z^NbmFT}C~i^Ed>Z{&yp(Y8x%n(ujkKdS zk{VdVE&VzUeqL*&9kr3v@LNJ^?t^=Qr3J4epG9u9kr3vzQ2{`GWZ>>k#^KZQWLSVjqSunVA3B4$41?4)(k2S9-; zt+=}1CNkyhjijbNZWt$le$kkX+Z##MLMQqzP#C()x#DSWBvrT|?L6c*(lzGb+Z#!p zLG4r(sDZ}PxY|gn9s2%lfVyeS?|YbPBdPblQB!=cfKSpI8F{sl)b&cLeY_NWjn>FS zMB>p#QZwg(G|^DFp2S|jbKjijDwq#ivB&uBp$@^K(Lp&LmJ zZ6))2b$XW1pseAO+DM8^7%b{w@1w{APhY$PSJH#M6)isH$1hJMSoKgj<>~i5POPH> z)8b#ZX>?`?s71d#^vm-Lbk_KzIPtIhSbLx6aJ!0_VsIa!<=32B% zVrs?rFbwoPK>FbAh)p0lxjWu@sWM1}c z3Q+o&zacRLm6JE%kMbm_w{U*cg1<5 ztZwki-Y9EOvSBoWx{Y>mAGb^P#_hd`=MHik{lLd+4R;^;6tYp4ACqMCV$xCw1-~4@ zp4uB_#g@kgT?o%-z`L}qToGt$M&aFtAAo+=xF*HV-i!Dp3~rHyJHYN}I|*1~ZJmo48VmcAUT@a8)fxfh#jzS^#dYw7v=4@_actRARrY1dx5{wj_r-I-pO$rblc8@ z{7#g!fxQ>;&9@AL(%0}J7vfOCQX6Hht7@>@WRMJ^?AG2W>tq5JN5E|@kOrFCdlBEk z>O->J9;7Q#jo2-M$X;rb7o$!v3aXy{T8E+fPBZXliei zRrQ82zQNTKL@2z1?z7$~s|3cPE(2Y+vEC>v8lB^CykZ@PLptQx#;T37KERrfVnFpY zb~efyO5RAd+9+$`Qem`$vhRPWS*SP4+W&>TdqF4{{D+!sI~!%ag;vW4P;Jvnet1~K z8)ac?o1dH`5S$|sC3~*1M&2lEVSenKkH_m41fCc>y82l(^hQ~~U<8ORr$AKH7CIYc z9YVoGxDHT5!hDZ;qpZ%w@Rc%L>fpGtH_F=bnT+vJpjRAhZsb`#PXa4z@SSdcrU3x+6fRZ7j<+y-`+|_oe10_$ZrlR! zCAP-dDC@W3h(9iGw-Fc2&PG|a3dtB813yg~nS}O6S#LMSSTrJd6X?FidZVoM;j-{e zrB@=UP?gyy_eNP1HfN(ODg^$Ijj}GI4zQ~!e${kf)@AJ7kBzbt;V5LItbeECZCuFb zkhc`P(2cUzW05l9t%S+3QyGPBlr>D&~M}2vZ$gcKLCSawh4=>5)YlM z82ZH~_!kv~9$EqGp?7pGUJJ{=$iI^GXL`~;j18mZ62OWnyXEqM&oEq@;dU<$R}qlV zmdmV`_!vYKLA&L$6yvYU4gl=Mb{096{o&?--nOMR+mw+I4#MM4HTwCbGjjQ-Iquj>C@-b<9<+f8} zL8cMiiIbo&QW#QFrNFc&ukm47od7oD|uB%E>U6Ag)Y081;Ju1dXhpL-nkrB z3MHG3-#`+547SzgGEI3Ez@*fK->P6D3J%0k@SkjrkTz)9&!jYKCZ2k61MHFJa>lE` zS)^6EwQK>R6z@m*hl5i@uE#UK90Fd{x8|N2*{=rvBxzcbk9t*$A%(?#ebA=mXSo|h z!?n;!AA(9<($@#0A*`MW3!j7TSoa-PM1(y!Ey-UE0Jzsj{he`pYX@Q33c z8R^Y$BOrLPZ{eE#WZx-+$7U`rEXCovPp6PR$va3iR}?|}$?h1BWJF)t^(8JIwq5Bb z`wr5}B>X$j--IpvMNc+G$%vu=dH6&|J@3-*3!Cbx<$ zfekq_sdG+N`+&*}5-;#J+vGO>jxWk8rY&%1TOyz7$?f7xeBow~hl7kK`XU*i1XYp_ z@zG7?9bN?dwwCa;E0+wDJH;2ryfp=X8}I=w;d$ryg+&pJuCbRox_JrNPr#S7gdYVd z=^nfMB=*gt^h`q24~Gm3d8A^*rg|nmL}5?5Qqa`UI_L3?-x`B;9KDmqo->R=h)zpr z`jCzjhjqEcRQ^qVF~0Ik21j8mgwwQ9eiUW+`X`oNhawXGt^i&aB2nREe+MQtEsC{8 z@b@cdej*+F%TFYqxQvm39F|n>0~yHM5aufwBF+^^w){%cte4zuIRnD#TFkm!mT9x2 z$rEA+?UT*377%tLG2hx;$;rA&u_<^&sTnsCnyFfs%X8Lc#~xoP?JbAq6RpeTFKyv8 zdAje|VOb)53C-D19hWFF`YfK|tFuYg_O~F6LR-nnf4K_ncoxt0HThZ=O6d?*(_)TM zF3Yqv)a3cT`c-AVZ%!>RE#~0n6)*ISPnY7+5YEwJPJ_JS#l8}FPU-4<5bo6Cyuski z`c~pN43|)*IS%1@E#}3gG7GFoDt8d&5c11CUJ`;SpdZn zGIjz$k6mPpL|(wvZ8i~S9bCpY3uB?*0{x=#1z+O!g&61 zuveln+J91Pk6m2BBBNs9HMNFfEAvap*hL~n=7z)T_7Do17?5`Cv5U^=d;Jc-2Lq4R zwsJ+FsX60UECU33Q{&4NKYQ$=_)%%$Q{bJU5_|088uaccg7(-&d#u2T&Tt!l;Mx`2 zksiA^eHHCg&~U7Ih{hq)Te|HUzYU8!3V;>`DNQthKlIqe{O7Pp8W$c1c}i1z?4n;g zOgZ4{^F-(_ss^C?j?(^;au{?R@MP`S9=jM<3XOK8;8KvcZ3B9f@AuGLrS#nfvfFX1 z#x9m%$pyJR3G%acYmZ$FsUR)i0r^)`d+cHg-q0b-{uGSA;gAuw$1ZwfSp(6>Kx$}e zk6rllOWG2otwYt=MWs_%JPNl1L56E;k6pYy9Mu4>&L={NB`Bxpv5OuP(QgG>Yhyij z5!2gk?7`JX~-8f_@95tKOV;4CG zWJkIVlv)3wCfm-~MSLS<1E^lsN`8V^#A6q&j^I1%cye+eSVAJoXYvW-qK3yVs&~Q% zN+DVY!R}B?EYf2aHJ_9k2sOl2u04=n!EZg+h z#Ze5&k%>>hH`*F!?4r>`S*3gnbjrrE0McU@-J8j=iyPqgY>hK^@o2W&@TFlA0EfK& zp<@@}uV5J%SdCDw$1Z+H?~MxFEbw-=#u>Z#xF5cji_0Tz#09f6c9Ati#$XQkLej`2 zw8t)b&Xsrd6QGS6>#>W!SK+xr?l=v^DJQc}?y(CBTduJSJdFRx*hO{J0lL;AqXTCR zmtz-4VIpMgq5>97QkC&6fb>yT32Kw?Gu7OTM-V2*PGuB2c9D>YMV`b%#x5Sbk0D%y z^8=g68)}bT{D>Nyvc5fbA)b_f+hO-mRp+4ySX94ys9v<_&ysY?D6k9PFr@D&QT0&1 zYX*;4aJRss3dBPv>k$27*Zhl$FwZ;i(=#1|3>N*e=vPVlmF$^`7)*%@{|*K-hyRHQ zaT>^&5@RjH1^0#en4fn4hE+GhefmY*U^mv38*cZ0O!kDi8$65tmb>Xi6hZF6X!@qQ zU31Y>cQ5$eFvb~CEnuOZ3HwvL=E5E{{(%d7ak$7c)k~Vc61(aI%;UI%5H`er$)Bu- zaeUwD0_q!kTK)s{QN&%)N8}VMi0x_jCPiBQjp{$XDEhxR7zy%OPs{f?4AYN+)zv&? zTK)$Vp`sO77tON}0X;3h`gylO!5axI==8tS^54CW#xdc=I4#HFGAV@iw0sRzU=}Wj zEkOGSQv^b%-V>WJ2%bz{rGG+lS)|lgIPs^{1G>o-C zTQuh2+tcz`2xxo*bV6fkTusZDt%4CipgS7NL{!uAz0RoR8nGxSu*XwKc8Ds~vbxt&xeSrsY>IR7(IxgJ)}vw4bS;HqaEzczkssr{uiabcZf{CQm>~ab7Dx-`p&>N*AmC@PV zto)@=MxXT}8t&C-ehVYBGwz3^y{!hI&oslcPp7?9zj{+{xl7GqY;(HBAk5B9%71-@ZeQw#^Z4P2`feoMnk;~_8P`~Tz$(X z;woY3a+pco7_k9tpXO(`z!+5pN;KRYo&(WI2!7Ebx$eJfv|(hAFuytpeh45L|g56q9UXjLNTfllB( zNW;!eV+(Hg*nF>`7Nf)#qkw`MhY!Po+U#*w&rOKV0$g4}h|)%o+6W&)e7tq;J@AcS z+ih-`m*0lR69a>KU~2-hd<^I`VHxgp+?ni2R>eMW`428Xuw4pL8zyz}v#0n5p(4LY z*(jk5R<7ev&f}3wva_uwyWzY7F4rW)0VB0xp2oV&>}ioxR;ib|TY4ao0B}%|`IuS`&t6TWMy- zowx0r0{>NOA|1`Fxb<1e&LeQEtQ{S%qnRBS-b!iG!OLk)en&GW?vCwOWAK(*ljvyX zCUwj-WV~JgAFefp9nHMB>9$`p!QarDG)FT(?f^RSoIdNpcW6yrs8!U+*8huduL1ls5E>tu7n-t6!217a~oxi(kzK{+nUG0pVbpPO7lJVS*_s-BdJ*#7u!pv;cepO?YK|J(7dwqcHCauP9gAOTC>2>yc2hKxr$d^ z@FrTb($TydccYK;s|R?0ty$}6R>k$O?MwlmqcvL{&FZ9=ZO!}OpJ~kjN3$lbIGQA! zhKIpVYR!+1=DoODw&ptczglzA(Yzn`5OW`Fr$7a~1b{<6=0orfib|iYaZlResR`al zYiJ{LrP&tOz)t5b;Qh2F-qCE2+xfoAhZDeOXbr8$Rd#m7#kN%8Sp~jMYxpBX@}BOD zdj`93ahMN+AJdvDC@l^1=t2}-d*a4?p!~W5{zz*mABu|naIo-T+y@^jVPZwMQ38id z02a!p@itN}`%u2CFJQhANhj(<)Itks-Ieh|H)g}m%o3g1L1 zvcJif-U+*Mk;SK%B4qz)cB&!o;SBIap&GoUoqe*z zBD7ZU!gjCWM)v6#s+uDb8Z|=?<~|D59suzL zc^f{A@U!`@Vdg@d1pCG2s(nLi(x$fZrL@DQT;%Fs@UX{V<2X4tt^!h zC=8VDVCq6m?P4v*gcINET0jjn9&{-cxTkjw#!3jc2kELQZ+tbiZ$#uf%JxX0u^JcY z(`%?PwSUB!Ie4uPUM~PyqNz!P##4t_kG-uLR-XZF(>Q$9wJ>Aq%htb-kadsX@@Ya& zvY5{&B4ojcDVSa5c-;iQZ)*&GLw@RXYeGx3Z(`tiAso{AY5X#N5Iv2lnxk#x}9fh4t(}Q#Jk-zZ?^{Z%7j>aP`Ab z4O;YHzsH$SWM87ABo(~V72&9gF9vyD_<)K_-5wPf2NtRHy^4uidnNt`ip`L(6 z*DR_BEqZJ$s>v*R7%ZxbEUIiQ%HkGP7Z%kA7WFSJa+^G1B2s2rx$sFC?MkoJ9q*h> ztB`Lj9`NGbD^@Y4Jr>J#-daIuT4wqZJcL6)UDKeK0~gql&^7JVs0FyXU9h83($QPu z#Ag^9uT$u^ukh_(lk3CYK$``i*?KIR>A^@I7nt5d1JfDPZTANuvcUPIPCQy9` z$Dr#pt-1B_t8y$?vcg9Mgom>@aH{&TNa>Kq^Up>3xSq8c-&S5 zt(CVCnmRQRaTSlP84nf`1`;c&bQ|={T z8z=hv{h{FfQmUZ@=fAi4@b?QT!Tm~q9|N}2UQBt^LGb|?)0p;BN=ek)tdAHAJ|JZ! ziZc4!>;#Xd4KDPcn~Grvq*^x|GWli-$`Qs|!8d7q%D`|81reoNC!Qo`M3Eg2{r2!L z%20zpeNhz0hXyG-BRSb8eGJr`;Hh2t^#! zNw+*%Qm1OS_Jhn9Ip34^lL+7w;|x4;_^-#i4!j%A?(+NUTOn=6znI> zL&hg}VM&y@0rp7qFEMVW$0wVuF$@Z4QVrOl)Blc7F7aUJE5bE#s*l6Bkid1$(rL-nA?DN z(;8`~=6N2UEVND~-z(tbNF$R^jZc1rZV#6ai-49nSdCAfy(0Mjh)qCyY%F9b)cEA< z5%|^~l1ZEf|4nOTDAf35@wM_k3!@fRLg3&~C_8F=^2_&?CIh^@)<`>QeDXBPN%reW z@GPy79eXuC>8_(RFM^NInvn6y^SDcFXBPNkt&#Ck}z6Zau7{0@LDOEsmo#5^(}A2JtUCdFW5ikC4a${Tg}xJk31uuiN<3C`n~=Nh*as z(NJ4^VZS8*qLYXI^c2KMp0w~7en|`DSg?inMCnAg(Y%a1svM0n(0ix6xG&P+zv(4! z{@ap&_qYG{$iL|YYvvL1?-};rQS$Gl_TOIl_eb{M`Q+d9-Zi_AlYf6>{~ay=K5PG- zU|7`MxmdliHPtv&nK?eLtR9Fdb47Fo+=D?QCujE z!?gr2k7IMFhInnHb^O^rvaQktL=X|QC4iAQcNAW-ZBw8bW?JY%U&8c5;eKO)pG#Su z=`zSsb|`K;8!a7g+l1eyVE+T#u(3l7?$z7ywomyAs|>L!vj8+5qUiw%<0T{BP6@|8 z!+Wo|qetNAI1bke3hP`!yK#6s`+8uYkM8wfgg6>T6lNEVonm|m4^p99tp;elh(zyz z$S3P#Jd2$T%)bgoo*lUW@f{Q(SI>@V53dKu(@4e=*MZ*HeeI!X)Q1b#=v`=t8*hnD zv!L!#q<3?p^4CFmbovh3G!>RR5uvF1WNE7u;h@LFgWXv+3@z7>}Qu z-pCGrrfIi+Z=vPubC>xF zbH&fJ9{i#a>%NMjInI4-CqB9DZZ-*#arZihFPXci?7?ClcjZUeSkFD}D`ZZ0q3VW_ zL}es^yy@F?sySK(D|_kIy>lyYC&i-m9Q%pz!7`@e34sp=U2 z^~uQPF@8}Odnm;Cz5gJVG5#Ld8!s%zUpYPu@6`C~?hG@+WBi|B?}>;Q|CI+}Mr4fN zh3^MhG5-DKJVsQ^NzuGle!YDq*|I22qUyku#Y!qhrWBmVOZ$dN1{}rNJAjZF}BeGv=zJitT2x7h^ z-?W<;QlU|VaC*$WC(V}Ekg=}d#@xi=+E2H9c){Md<)_vmXGS!{qy!EIaE(0v^0Lk99$1qo`K*wE&7&xko=K(5Hly@MX(W?bM+R%eqe9L(ESoj{rAo!BzA?4JmL5b1VrC1D@0Z`V6BIxP@7gytoQ@Ukj+VRDv*J z)*wMFvUvapCxqY;OX-CPFGx@cu(lR(&ru2@gju-*k|7JQvlj5OWGRRg=EoRd6+;2X zYQYbbPEueA^A}`oF(2?PEhvyr3$XWD3Z4V;8Q?B0*yhs$uP`ePLm-a>p4S4N{E}Ya zlWR$MZp0lxH%8E8G8f+p7FhdKT4QMZ7kx*A5r~&wd7GybsIAMN-;W*I& zu(uX;cLe!`Ij{~AY82oUEg0ko;)Qtz542bUxLON_I|6(c?j)uS#16nOwV>7$I*@*0 zj=;k$egeFt1-uS+sf+Vm0bxessT8ipD14)Fk}1JUU}aJz3Nvmhf|(9jP78h%+LI(< z7Dt;;Gz4s>1@)a!6c*;?i}0ft;6N>~nrREk!mM-#g2{lhwIIn6qzLoIyYONa;5sc> z)BJX+-)q6v?ue9(MVc^&qYxB-0N&7oQN6VwU6>ZiL}5LN!Ucy+hYtO; zAVZi9QCy1BfK{~M(TiG8RG9nTffvsJKBomuf6;lC0?KYN z18|WRj2WN>C4^ZA<(yaxxJ3(2kJN%P!fc5WTzm_7N(6{j7qN(Y3X86A$aL842r7z1aR3%71J=<3p0AKeohi&}Pe9NLu!|PZN^K*I2D-h^ z;1hj~h4E1<)FLAxn5acuSV}8RMZUCm5tBCn-_e5gaHFg=6Xr7}zJ^Lxc0%w~sEEHW z=xrfly;w*jeg^zg3&@QTcJ@bV+KEUnW`w8|7G@K40&%!DF`xA~!rDqi7QLr+TrdoaQ~d}-6|xT3ZfU-3l6`JGS1shSf7nheUV9Evuw__ zixGBt4MZJ;6&_Tg_aN9nBC5KS=$$q2sgtlKKBsy|haotb#}a$jU084^yGJ)5c%(&K z4@vKO35(i9+=og+rARAcq<2z8`;mJ4irA0Gt1#7ppdpE5!qG6bx1X@url<~7XRw}{ z^LP5ZFXAJ3rID3i!S!*(xGLt)6MFj#>zf?ppx1HzP0hj#JbvB*A~pvjkQ}(rz_t;W z{zl%w4H+aNvry9U4Lt^S&gT4qW+RNgqwF0ltkwrG9f^uj+=syPj54A`^tog25aFAJ z$CavAkqSZSJRy~9Pm zUFi8!Ei0yh&9}J<&Nx)h-Vq|I8J=?!)8Ny~A}S{a%^0$D6oQ}fh;Ge+ zrI8}0USav-p|}gdBU@yIm8U%Ys_=FB8y{1%Pz)qB#UdyiDv4=RK<{V~J#wbOFYbuy zV09f{3U#J;jEKFzSH86)+JSX(_+Ys6julaH@2jo(MuLrX_`P}Xf1HRaikWU|5r{=# z%N)L?HTZZD^)hM$Y7mIcU^^Xt3!|jopzv)8;(J)A&BY0@pB(PNxTkl5NT63IGJ7DA z?t(pX_=SoH-$YS(MlpOq8t?jvq-PO-94h{aJ;5i5S%O+@X(LNzM)#Uij}4zKh&_;e8! z5s6R#qIMIT!FD>l=^VuGHIXm#gfOUb6DPoaa(HQ!+}<1!Rq%}4pqfeC1$*T1pKF58 z5cvvY=@V5H{w#%QRBc3@o` zeilEyb46m4vuN63PgyY%7sfg~(L(%Q7jbQ|2jLpjIbspmGKa6Z2>S~~RJ$IALDj$5 z47StZSJ9U7z9FmvD7zb>1tLy>{p9fCn11js7BP{h4a0}_g}4j$$l+Ha;s2ZX1S|^4 zJ{0~W3^=9WQ1QQ573s4?#1vnRue%Yi4p!IU=iY$(r6T`CbkH|Z_}YPWarpKbaKBu{ z{($wk$>je?u(1w5*8%CXLKL#F==T7}A8eWC5d;23$M0QXokUMqY{2!;iE&lHGp-Sv zF)Qv}C9GpqwjKjKXFHZtvW>ab_o47sU5EV-zy#({rGfhB${JzZzx_m5eNlVS6;TL+ zA|&EMw$N$3-{IXT5-T3T<^~u}5w*eOxOSmgC<(n=MC`rC4e7QWF>V_0mteiSMO24A zf=3|45U`OrWWgUsA9wZc5wY{$Q`?2k1zSX17VbPquumjT#kdLe+QoXX&6-F2Iu7pd z2@6dE^nY;uBr#4I*{Wc{BVqlB8BcK)@V*vstD?}BY*=XNN_d2#n#PAjpe0UDCy#e5 z^>%a>?vK{Zsp81IwMjtM`DFO|Vy(A#h$~;S`55y@+Oz@hhJ&LZ=!%i_*C)8c3tS0> zdSWMb_%dF5!ZRUBm+!r?iMY<#>eEKqK4xj?2nHtDDXBfNBUSo#3(ZWzLanT=~{upd=fDxmuKq zf9x{5mlVcoFj}=Hjf_DD9N*si6F#kXnLYbrP95w=&6^>?WE08v!Ua5d8(dMBP;ipj ze;|6Gg_I1249GT@x%+#=h{a%F0EhJG28wgVx4X;_OuXU*R!j4m$(rwQnGqWdqXk$; z&F`VQRql7X%n>Nu27!&zd;PY>fFpNs|{VI|0GSw6awLWoX=M|34u`(WW2Ml}f0$?%Y}!Ht@R@!EPXEe>f- z=s_1mtidh1x{ekSoaH3xx{`EFGmY$Jx&2=6p`sLwYm3~GM{5+Oo$K(_UKiU>U zZ}dk_L0{>u$ThK;K`em7bpk}8LcTp{V2d)i+{i{;^5r=hyig;jaQu^%RHLs8S_7!?o+l;0{yIUcq`0`aIj;|Tehj>Ld?o53wg&4O%1!z}Vou4V0OEE5X(2{}Q@2Hi;df4+ zN28!Am9*~zrC9>LI**3!lumj&!;p4%fgjQu&J!lvDU(#{S*7^}{AwOe7&975I+S6Dz=0YhH?3xMEaDRm zBJf=R`{fbvlaegr+xCHlae&i91^mU$oK#V;BPRQfkk9Wx@Ua#h<8_OkM?L?enG8xNl-S6lSUqF>4TFzpaABQ1U``c0W8J`cjvG&71@ zZ+F5V@Ec*6+CX`SZFJo$Gq8BeU1J+AyFadiYS`W2W79C7dA8RGOw$ax?!h$8hg59&D-OC4HhRXef-^4Uca(?>wSn^5_rfDi* z7vMN|PFoMAY08cFV4CKa(;iII)WK|t-@U{gj%k|hzj-iCQ|F+GX_~*cdoWGo$!8jc z-0Q+=B&e9=6cL%YqjcnRuCZ6;@ zpV%tzZeGVUD!2-aysEmNLpoG* zmx=cn)!nVVrcuLPy`^c?bU%gtifg%hZSfej-DTl>9d||SEnU}r0CB13UV)I;cOUxD zV>EDA`om*9?jD9K4c%if$@7G}$|8@^$jDr`)4q3ut=)9*zJ3~$KJMmp?~Kg)Vd3h| zPPTp}O5biX+-?3w~xDO4ssy18`kuQw4575*DI`}G* z3RlHfy-@<(DS;E$w&UBPK@(0{X~xUux2NE~CRFvcdx=JxfBg*92A6x=NbU|qc}=;0 z#Y|cc(W?;5*CO^L^rYmkn!Z+$zX$1FEuW0wh|rUgk2PbuB0Ww(dQr=#QWRwn$C;ClyGt$)uhiZdAPMR5H-lWeL z%$R6RSfxHD)Dft=gJ}q9MozRp#s2;e&}176PM@^%CvksfB%Q%MJB1*<1Dq@Q(u&+c z0B5BZ#0xib;pN^uxW^&Wm@zwkUJ>cT1;R_9lg7>Ok<(_(&0pqMk3qQyZB!KfT~+V} zCsEp(j__e#QpNo;07ZZ~07lxEMPPh>>V}FY`(2X=C!0AN{g4?8%n$BjgYCMw+6t(> zZP(y$+Rj**FcP0g;u|&uXpD`8Tn0qL<1-fJzl(1UuAl%f0AE2G%9}E1yv@~&H_VSe zFr{WI_X!N{1A>C}5+gR7F9GC{h(EQl$t=m7)|uzWaI3 zl=gjGCo|yq37NYr_;`6@mXXFiEYbN-D5KR$mx6D}K`y0IuYu15p z4bcef5YPBf&nRMqa}4~nsS(jjI-!I7H(&&fMm)2}EHpgtfsfmqn z7-9OwU4E+VE;{KnO1bEiya~Ono9elqLnor?bV_~=1`w`Qc$_$Dqi?n%_5YgfVhJT57*`XYiNf0d{A?2}M7`fFY3Y5hD z8LQVpxzkeT3brLyyzY|4reihB!c!1k4icgRK*#4URqUI}hDKmt*NsD7ngSDA^}(n@ zWzyzhtCGVh2wuw4(40+ZYIA7HrL{J%^*ng%5KT`Mgu9}@JuJctVp~+{51v69u8!Jo zu_%s8{@*Vc_#L3xHm13&yGlYmY*`JbZ21^ygNYRxQ<}QEpH1kz-_RTY|0P62GgtR> z3BNo8%Sa06Huz&p!?R3Ypt-B&o0#7SClc+sK%sxpBhe+h0QIyn zH}I2zLTSe0Y%I`33(E$6%HNj;=lO76PKc5&qaMZ${Ivgtc({B4wkw2l13#nxltAeR zJ8N>IfuAkj;Va|z$bF!H33IAtvpwf?lti=5*9Toc4*SY-shg{TpZ5)a2g+(tHMNvY zD5AL<_=Whn2aLMX3!+gZq^rr$ID2xbFUFtVYN+Qyx!h9c3YHuArQ#KEdz|m_d=1g} zK|-T}UoJjm9KO1W;#barUklN21OKDop+eY-B#nlBjyyPI^l0H^H1Mkh1@;D5lMY@! zM8ggIM#4szs<)(sH3e@?8m_Lgf!|EnP};!#fii5&4g6N(%AP{BCExD=Wtmu^WDDNO zao2cMd}jWz zOStbBMn7iyqh=yS${2_z&;_o77$^`mxC#=H1LqG-WDf~)e4d%;FI>)OfZHMZj)Z?w z7%3yf%;flOBjo^k8txZtHd4$?i61{j?hihI`xA?WHG$db%v66yEUq2h59@y%94%vP zZAm=Mzos^NrSf1kg1J@`riwEQ#h3464BhR)Um^`hi^tcQMPjc{P~_dw;Xq?7oRWcP zr~A`)V99}jVjjQ(f}AZW8Hjf=f5|QQ6dT}Y0Glkx+ln(wBwl$7kM7fL)k8ohO{_em zJmE?-^O?kgxb@1KyWmekG*pRZmP))-2ljy!PJW!yaL7E6&quMQbYkCSLTajlH?TBp zDyOlgOyXDAQ{ZsAg7>pDJU!&mW@fp>9y1+MGZB2IrQr&jI_4@q3|}F|f!mJcX$>%^ z#z+#~PM+DWL?9VPj)cC$X+H(Q*Jyb(DV0JQ=m%OVrVn0qFm6IQoJZ=u}i?G$f@eoEw-(MofA=9aZ2Gcqg#_ z7UvF6wnnZjX9G8u!L&8CH4IZIpp7XVtZB+5)Kp$I}s`!P#Z@yKmsW z+h(XL7Xur1Np=eE=Pf3y_;3ErWCeAPoCg}IGDa7!;+Op2twDaqfu#m>S%-g*tBn0t z&hzKMYmtUy&2{)n!q!f>1%zB}5Ac#1fZ#fOH6f!Io)rLm4PcZ7WgWhrG~T0#p~wJb z9?((~DL)4RTzsN>rqf?K{grrR8*ayV5@NQFMD?Q|p5&-z$*3Cdg07^ncY+uwCF-{WD8nsq z-fN;55w87}`aPUR!&er}*)=5tx{{W<&*FBXX zuTEa}Q@nWAJ;!&X7r33eca z({Sdg;ID!unQ{T_MhK_2?y2a%MXO9T19x9>5V{WP$W7Uv-)Z2uMT zD*hXzkfJ(Z%|iH(xP9Px)~_}O?+!LFgcm4@_&?`A^%BCL05&6-Yc0nj{AvlWZ8e(M z2jHtoBdc3eJk8{(o)Ejzz`KF=**I=5eAh@QpyO5#x*O#;psP0ib~$j(gd3*~-%hjv z9fuKkh8uZPD{1L;E^s!)5L-^-=!Rz}=&{TX0*heA!Rw{S{f6oozTfz2NTo%m{%pyF``;T=+ z{LX;=5yIzv58lv!2RmQNzhDtV&G<|I<(eUH8~Hz>hv^f+(nI)kSPFR>`|~6sebvDl zhVZ-tk-JU(mGLC0@)FoUi*wtilL%u`GyhoJE>|W%FvAkbDa(FX8hDx)i@+U2Zk8W_ zZz2tqf9`&Xg)NGmd0+?+L3Gj*%D`xI!_%_ZD(p>iV0XbEni>)I8P*-1*8WCq5OUOO z=m~My1!^={7PayJQ3R{cL%9Z@MA#{+GadXi?^8a9bl?9DeG{I>@Vw~1(iTCTgY=*O9s0v|4?{S8JlE61e<7U8e>mQMibMLBn=JHLt*4i}?K-21l>@I%8cy#|JpR!m zs-E8NicVt~X$RgdL_-f7d-~)XjrMblYVj!W$)w@9%5dg(Mn=7o?|LUgvlRT}5DmQ` z-P2Dms~LmoPVmE|vEn12z|>gSUr*X^+-bfB(IZPp^)|O~fG=l(5n{{;yaX6WNQnv= z;y~Ya+#uvxKy`>(|6idI>;g=nJcE*}#~Br+Ka|5QwM_7z*opEC#)~Kn%`EVRA({u+ z`ST3Xhs`(kT-Sqd3(>s%Cc=3&uo-Qc+xT(t3zkNjSImAFnxTP6+*xPMBk(YkgiNN? z(4yS)TEf3(0VIPLCk+>pZKmNFmhkTTLKb9Q@aDmq)ECDfoDpSSb;@fE1kN=@)5x6E zGqL#JPlU84odQ0cf}k=KMMjhno+;+~1%JOK*Dpmzlog(-{C9Yfk@)*<{u`DKlpYtI z+!Rk2O(S(akz2=RFiuVOTu@?KPQ=Q9et9k_QMU^tP69W*T{s+Vfedz8iAw5$el7s_ z5+;)~VBVFGA^fgHU54$IQX7g^!784zOVuArlows2(g%w1mdaWS*?U38wXY~qyYM`o zk^}AgmY(Yhn@)JHDgHj67}f7<2zHXFBSqdx_uo9%75`+6fLuLKgI%yW&q8k~{)D#- z{uoTf6vpt+bHSTRd=I?El5Knwz|w5a)6`o^VC9R(_FXlwIu>Ws49{&PumZDSN?|9U zZWeZuX@=*H5{Rr|Yz~eF8*g)-soqrr4VD9o*{aXpl`BnP<0$`gBF&Vw5 z1O)!km5&0PvLG9Ecc=Yit?>=Xp~Mq@#OBe#I(qYo8- z1?-zEMT+QYp&G0tV#Ab8U3a`L(?bM2KlM8NEpiY-4Zubr0-m5oI{a6r zp)z#^>}LsNKJW}R%HjWfF(Nq*a9W6fr>J=x{%v@fs`4J->JS0XQGE`7-Oh;QPQU{p z0-mJib@;1Pgy16J%@6@kK%*W0{P__{?F~HohQqG$M!R5DjKe?iAE=5$QPEOyQk*>f zjB^wpi-j0>87&~_N+PP0xq3IL%M*@!i(5*+>!E+qaO6xS@3EC8OYCOP~ksv?dKjGO@+A;IK| zdpOTllO6trU!pw9LfeG&oWib@%;1v<=jm#y!#^+!up6|a|9AL2UrlrPACyG0=0LmZ ze}~T#)dvREW=2ehaDXZTK@u@-g||KKY~F*GWFL!W1ynFgx(c5-DVI(f=k)R9mM z+w*(_pcwR}O+UiPbJlc6pvDWvCSD`37B=TeYcWUQ-$DlO3pUu|;dC?CQ{3TCuZQ?d zhWl({R#A#@p0<{7_!IU(@B!fGAp)MaKI8DW#57C!9`LXw;9=Uy6W3A>PsBGyvadsM zpF~`AJ$caNnQLi>Ck6ZRoHu#LZ+#;U3mT^SySs+ATD)CAX)Fu%}Scb%N*Rqc2 z={F2fCkT3nh!J&VN`3Vo?DW;+cn;W9T5S$4S(c@K~_KsqXYQ{YKJ_P@gh_YQc9T&hmI0{t4wmZ*_ z^TRn2hvc-U>FMQ=Hi_l2r|Ib}e}tDGjx~+^J5TvOSi8u-VU9?ta`A~~oh~X5o&M6v zt?qPK{GGwCrH)_F*M+e~;;d+0Q3upRZB~1qz;hVtgn|yCstfUOjZ+QFi)}{rheh5 z+Z#*oyH0FZ%qha>c*3?|E*O(@-YMpIz5FWFibUol6}?o@DH0~(PACq?H&7{zYcfvJ zjsh#y!0MP>q`m{gp*aP;Ie1CLOAt#ZVc?Cg~PRtoC zgIG&KdLduPNu-|X1z}}x!;Mn7hlJ9Us=BI)In|;E?{Lbta~|k-9FA|12%+_w4v)2> zJK~jz+_aR*$V(g&r)2c(A?DPND}To+D1u2Kg)FMAd8~*z4dNn@P>z0ept?3zaF1%v z^KtXuH*ja5?l$fphD$e$i+$O^qk+a-I4stIh&R&r<3A-E&hHW8oTqDvuud89-dJ}h zBj-1P?Fiuw%Yrx2J3d5K90NNa!uPcXZ>on6g#UZQrUZqr4gU(fdF;N|or1I651v9A znQ?u#0Jn%8cn@!l6)O{aV|HydcNjelwn+&gyheW&P5*WL*9m5r180r!vlG)Gnjg}y>@(#DB|$H)DV zXyCg*4{bdB9pHDODj{&H;z~Z$lL9!5bdzb`oLP|@*Eq!w)C|hvRE@CRC@OVC&~vg& ze$ht;k$=EZ{GR{JSH)#&dy_w|o%vgzM>Z{Zru8C8#u4G-jozul&%z?6xoJ0OigILg<$57-!48;Yu4$nMDHz(@ZQAe0SjRBoWHeUH|tH)^G?N@ zk6%sGq*d>3^wNS?hoP&{VR)(H@BZj&2A*>YSoK~!3ky-|EW8Ev(&VfC4_M8sqmj#s zc-K*h^O;dp=LAI=zRCf;-W!&PMP z%aEPtAK?h-;z28*-`G(U>GN7o;l0E^95EjuQr^q_!x`_a^^v#pJ`iOYfijg95t!vK7!Bb~Ivi zmwy;B`ip-!W3DYj4*bnOj2PYH9~97ok13$;aZo&DM-g*$1%CX)KO8aXNATkj|8T~f z`2s&4^A97SfB8qaSVlST{UxHui%zi>A@0KA$UrfR_n4dr6dUIh$KiU`6n?-?dQFe&+75gU*eZ)Zb@!OB zR9fqTu1MJq={`$-0d?PqNg1s{R|Izs?3%@?Z5X_)XB2uHMVW?qC=QOPH1&O!!!H-p z8BH!3sJMmc6NQHN@}6>a;k_nUV~g_>uQD|iJQpg0cLnQbaefzupjCM4#Hstuu}K|uB=gCLj;yAsdH)3=TkWjfN2gRw%rg9sa16@^?|zu6lROaUuFoJvyW zkK}drzpuch7FZLD%M4=w_4Vz~!2io&{VmQJP@~*zgx@g#iCIqmSfjR}DSkKhO+4!q zlmkj8^b5(4j52pC%_7bV-o?jD<6Yx2;ns3 zdpqb&UEn`}9SP>zRt)Lhj_$l^PMP!@;CD$QBR>d3y0?@2J2X4a8ShNI1Ph0Om;8aM z(%J3$-oPb*%33(ATMB%?q$gpjq%?qYD?%K3&bY8gzkqkqE4%~V8!RJ)-zyE?Rev}c zdT;Cc zkPk4gfLm^F0l%VubrGSBhx2qRH141@nvi?@>8CMSpdL+G3BJnq9!ZhuukTt5@7v+L z&+^XwUrGiBcJDy_Ph6cGE&^Y%eRD<)(!G@LPvET2Hj^TK^LRTXVpKU!PFL+;#I6vILU4eSpIB*DfXhh-m27Uu*l8t#le=VXUqQ-@` z1ZcU9^}pbIxLg0msE}U+?X>ZdhbYn!?mJjzaCJTfbl%3}!r^{`o7&)HZM)XriZA)7n9s-`1Y+s{!4__+79`fdX-lp{~XeNR_MX?l&h@>TlO5}IBW}MP~Pc!OH?N%d>+i)aQtTnWArk^s0z-|hkgk^RiW=l ze*UZAjM5u`S0Z|6>CL`|pTW@2w661%(ld&1{A&1_t@lK}D9fSWXp>4wg$2%|LVSWSu1EgeH#mrOJ%!qS}@o-l>P_m5+X2W;3dpqLA zF{lDm!^RJX0Oz<{qdR5X9_S?-m--BNzWd)s1|AMH#=>Ds{u_!t9-9Yf3A~+nZMq+I=M1`<};-?Fhz0fQH+6O%LGrJ$Er0F`fmKW#ilA zd%5SW2L@gXw86&x&jGLSTzzEV13*99c+F|x58@AhYh3#}(0vmtaW%rPqYhKBgZ?8}zLZE!qS$WE=g5@m zoc{=0q_+MU!Y}f*z&o!f*zNxjtkB+k2;r9aS1>mqp>hJs-*6Z;9aC4KUFZ+ZSMj5- z8ujI0@QC@r8hS*~yHziP-ip@`so>98ns<2-L5~P}x9N+pf?-X4@RlJOdMeVpU2BE~ zJ3kfK7ksd(5ve7HB8YE&S60a&-Ucxqv}E#~?*#}b@a05!T_OGK@%=kYlC4B|MUh(L z1BABM7mf6hpW{S$$>f`fRh0Lje*dvkT!ZUv9Nd^i{!LgfBz+cONReiV{W}BF^_6yi#;4`8(c2XYo8jkR1iDVxCfexlUs{mI}y4LAYt* zUXqm5!SJhE@D^RdZgS9BNP9Rsojz0I8X{AZ757&BTJC5)thex1QQRW!t2c1{xk=#{ z;QqZrzvd>D>4LYAo`QpeT=Di3@{~3hQ%fa~m^fe|w(n+Pi$0K|?b(I*`RZ_p!QsfD z6J><(UhRo{V`=W;0M7JqZ`a zFZ!r3*(2h^K8T5nPKhNi;Um0(=fmQ_>lepKiEDs4cA&YtFMbs1fp_uv-lm`fX}E12 zxa{y|^bKGUbqz@jD2iTdjV#X-;J=Y3oiy~9NcO@6De%E>5QZsw zg+@;C1kO>o6)Z&*kPIz+0A9l!z{_IuVdkY2f}%93_;MVb0W83KSaTLTMLn>_CWlEp z`HfW~*8+8gb3YU14m+S|b1xz6ae%Xf1PcAca0qLLKri?G&k=hWoixR>APHX9gKx9E zBwRqkowPF$D5gZEV?-!P3H}9wi@_opN<&4fQy8H<1k@LsiQ=U5XJYvMnSoY{{w?}g zB^iq1mWo0aT^{$vwPq;EC$VfLe|)bnFjI+Ii8&w#)D}KEkuS=7JZAnGs?jVZ>U;%* z4+9%*^Ku^}!)7Z{D=^z*|5;#*Y)*zPfw_vW^?k!|Wh2;E77sr+58-Dj`uoo##y`RR zG%>qwNWnryUtbS`JAmqv+ya^7;f<>zm}QFo&y&&A zF?>@PN?V*dS)AYd8Cb9AqtcMH47iUVM&%>CdGSn7pqrbm@ru1XR0O_JVm_(jWXWR4 zJ~V@ojmO&$ue%7m?B<7SoDX3i9{5&?s)Ok`36+C5ogg1};Y-n8C1wO_CtX;%i_;Sl zQS8k&iT4i%_9^-&Pv8{uE~dUXWGLJm!v~O{rs{ov3er#!u)ZarzD0I0QguMl$6#bs zIziFfQqf=7LKu#G?d^`bfV+HBeN@pq2&mr%&$QHBWKvLH_5Mx4eFC`A5>%$#3xBL2 zRwotxy>tln0Uomid_5^Rujs?k7b({P?^^;+SMtL_XrN!g@-c8liR{wM$pR&A89HAa zc0S5BB9&cKB{Hv}tOZruU?n#V4qeKxE0H?J3%as07}7T_Ip#GLncYt1L-fpa?Sx6g-1$cLu^TK6z)K!z891>siao`1Y8c!`CCRGngG=^ z!AcofR_1Yd#?CjC4WMdeDY;7ypNldMq&W0e*iBXX0FJN(c0#18s6%gEAF3HpED2W0 zVw{8L+X4aAoAd=#>!H{ctfBx#_#`}bk8d}7b+PKA^Z*Z zM;7yD!rC$LlAE6ua6XxXOI3E{sr4h)iO?u%@52ZRhitIUnP@qIDvmtjPlMM1YiRTM za^O?dytlC^=aHy8*sCVzYGkyzby28wEgX6s>;@@Qp_pf>I6cm;u=NXccZ6NM=9CXI ztbyQ*U{Ux<9oOsO(9cq@eGu?$kU(C``DQGV_^Kl^3p;OI3m!oA#8ir6JqKc{G1L*c z468ok`IlpIg2PBOdmrYAZuF0nClyL%us{)mlhbMCTzZIlL19y5@V6W>k>i|#hpd`l^@+>m2HvL1?})jDJtgK{!Ft&| zY7oMI+Yz-9t&qci6KpbZ9u1w$-*LpeguQY0|1Q`{+y57^>Ih78#Eid((PeO=2r z1Ew;}R< z2&)GiGA}rtoFU<(enqY=cIXeEpr5G(MFUb<^9-X;b9taz;qWag0aa%x`dBI%3=38| z^mrsv84Ebo63DJTwi$}>1BZV4JqVTpe*84ShYnxPpH%*Udo6*yM7fH{$B!I(?{^Wx zIl#-NK!o3~j-KXYhko-o*kib>A6b>}Xg9=tt;1IgD|cSjCxE39mzCR3G5gFB+x-P& zwp9(Rj_sfM=Z?TlR6d?)bq4Eh`*%~`taHTbm}T&6Z4B51+duR5j=v)FRe^e_@5g8X4)`j@XOwMx+lz zaK;jGm2lEG!UNw!^qC>L4}toLnfzR$9~`lMOq4nK2@n*uL^6*!qJayhA14; zueDP_{#>;4;Yy_w?V6-j#jH;WluPUhc`4e(s7a>Cfr{EtR7^)JxOS$12+MsGGc*@% zaHQS4>=gMU@`QWVslxZqTiAh1iaI&fDc%8`O@8(R7^IN)-F~N70oPAWqWomz5>eiR zPO%H<7YiQ)R(O%e{qyU2vEAW=TSdN9*~kXJI>p~myH*>QQXZYhw1CA@Q(3Fn*(u_| zOIaFjQ+!ItqvIlfvRjCV8i^0F-%lGg%^*~GvB=>>({@Bez5GM5kUNEI_W~Ybg_SD- zO*PLePB95+mW9tz`eX=gwDo6U9}0&Lf!75~yyd(weT+`L1gyFVM$`A5BicrueGvtO z)_59j7feqgS|5W*b&M2PM7u!$0a4bN`7Ql+jUI}M<_0YQl0-BQei(jxMz@6D7&ue{ zsb*2%Ln_6-+Oj-O(Gsqmh)^lY;*X|xoFgG-7PzGnb^_`XEhgO4HGZHzK2lNZJFW zuSI=(ut66wPS0HE6l38!l?Y{)Lgg%chxejX-_kw3oMJK1`z98?<9H}GVupT7IK?Ko z?l6fW8%)g0D1`0$1jfG|~AI^A~D4;~q+!xPo6|->yUTz(+8J{AElDG~~ zL&6+r)MToXUnsf@BQ5#v2GqyKv{e=HB|cemPfjw%0ZlWp?AxNMok1pUQFPCB8N>?k zPfU%7dJe|i5nm}$C*PNe-UW2f#Ihrcs)C)ih_96*mx^Esg7W_z{D!F!0s4w(#8yRL zJrHJ(*kO&tA&Y+=b#H-rK3rm(qSx>16lq{3gLzb-E7di{J<{hC)ZsP&Z)$2ppcIx! z5j*fTipNgT4bB5h#2vGUs#6fb?^2@9V7*7hHW_>xX=E1e#!KHL_9{^&H%q(%=o1SU zc(N52KddCyx+QDJAt25YsV&M;YZ2);iIV8N< z#39sd?KjMM2=^mQp6$U%VPX5)6wXqg`&*|NM||2WL^yv^J-Dujy1qzuR_~fb7HB2f zbXM0Smm4Xwq!LZ|)OE>@cja$0?k*bYT-3018ed&BF6#6%olXT;pbO5QyipCO;i1&c z!itq>odysWo%C<$FZRuUQTLZl3kVla2Ix+OPJik2S33QbSbZCUofjKcW;0fU)9FB_MB8-tgPtTjsy$R=cOeE(uk_Ymv!qh~07wi*@^Xy9UgoI^t z5%f1;hb&IdiOPqMr6@7)-&Y~}4T8Tc5#Qt58i73L*M-hY(u-iiuIL+Z{|5(0QhAPI z%5OHEmy&nRH%@sEuOxVR($wUH(BonA(&7?t!h1tFcd)!$_tE654(1iqC*6iOk+I4X0%-y;oO!@ePB2#ch3x{INggj*omZ3$&y%m2VGQhNSB z%3^F81kG9S-%O1NEB+mD@wnOdfgZv+YGcrKtk(_*jg=)lRev{@g+-w(7o-+pKRrYd zKNI)Uzew5hV4aCm5!{!8L`T1q%M zR?y|*@>A`q199i4c&KOQgwVdtgP2r^`}jlIpDV*4pG;o3jCmuYPckZ`Mvp4ZtCT)s zmr)s(LiDjEq!5KhPb$r;oW7%#q1g$3AVhNtn>_QXq<6k(XfA`_4$;uVO!JvaZaJ^0{Zw4j|caDfsIcb95tmTg)h5+zIh{Z zj4q%IcqP)*UBIB& zRv3&amz7NL6{MkS*iR-JUBKXCYc9*;P_{y}#}dlG^8JLo&hVG)U=;m%@ZU|1(0Wt^ z9;(05)F^cYr4)ukrbpurWLSa8O|WnoiHj!#6}B-~8^r(%fI+C5rUifx{hY%Chd3OLp>zte0HA8@a1%5w0Mw3H zBK{25+HicHF!{190G6PuOCtO-TzeBPh+j0?(xc>Npnu z>;Kw@pkEPzO?mm9Wfj@=i?sF=og(j7c>WWIV@(%4h{d=jdwJPbhL z?TufEd5F>!&h1U4gkzcm<4P<^1N#b0#$ZqNQyBt2oHXkYywGS(8rWapD8?mk_|>_OX+fqHa0`6kBt%~WrXgP$P{ z)nXy>nWQF5oZKRmdxX#iWF_aOuI(O$AkHR_ENTSd2Tw6ILgHVOS^`s@Ql15>XJR?e z(S}iFKNo+lv7D4EFM+>88mjC@HKT`m19y^#VL;-Tjt8G^g~KhG-`E+rn>=^7p;-z3 zS%`-BSpQ18is=%^=Lhg3q~U9EIDI)je<$5}O=|uK#==b=EqkCFe_=xS4R(ES$S#8d zk&Vo<2O9Yq+Ia;iYLbdOAMTtid!Rzt1AGCjqseW1plU#a;XKMjxxawN!B>KsBaK8suSK=}$I#^>RFotQmRSoT1lO@Kh%0V7Zxwm{~% zWe@b*E#x1)oVI+B%C-lponpkZ83b)e#Obu`f!hCt%k+i&Yrz3n_CQnLhTt8**`~m@ z2fB&fYvlvDueO+F5A@(!BLltz+fQ6(uxStU<8*^x2D@!?IkPnFf%?+0W7z{$TIOV- zQeY=q0uIg<%N~e3Bq@eH(2akkMyU^B6B5hIoAy9GS78zWXQdZT{Vi_U1ATe`$sP~) zw}?^sSoT0X+L`u1D_T2QvKq3@W-zkxnD#*Y;#A8XXg!SBNvNE~=?eL<3*WK_+JMfG zF043rq2c4;*qd$Aum?Is<9Z>$(j?$exH($(K*#SxP#>_ZCE)IePQtPWdglqQ(;tfA zmWuwe?17rn&2-BiC>DjFEC63&sd+JA*#lJ(5NrY5Z3%caVA%t;*$=@fz{{3^uV>i< zmHGvO$AC1B=1SKbg$#lM1ONVBPLPIpsD6lw?D}e2oo}6@9DGzKUy)tWsWYz0cwBsY z>K$8ybuhUx0h*N03&e$#0W^YeK6p1KK$G*;!mOQZ;%uO78}kHcO1>~mC)xL>KwC^K z%Sujw-b$MKw{hF@XYjL@Cf7t^YEofzQQTwP2Um9+u`mXBo+!MXl(f{)1i*`gXn3OV zPEx<-hNdQX;}8u`6s9HRSz~B=fDa1M@I+yH(w44<<}L8KAsU`2%t-3;5n_UBUZ>XgFQ-lH$w>>qPLGmWKW^CO~7OxJt-GW+sh(&Ioh^ zB;N#kkTaaD_&+dv%}@367x1&Bp;{^=&Mxrf3wZ4Xie9-7q@s??N}Ou~loOxU$p|6< zo@#203DEokk2@McJO@>Umi6DZTZXa*RBeKlJZa)S(z5&`mYog49YYp76q$hr)^sQ zy-MT4=TPhjR&iNd)_<>2-+vs6Gp5S6{`(yLmU0*F4=rX||M4r`EbG5F+QR?|8YN{f zIzb#<7ldW~HyjaWUJI;&%}wjS#<&pY&C6gzOwQHF7-3E8zt#m1r72L%u~eKM%ldCQ z(!-Hk1;M6Zk!Ah&>uQ9uAMkXLKwitT{)_e))$1Nqk4>d*{kIQ03sj$C_hDUt!$`Dg z{WlteCRf^uU{#6pe8;l>yNFlM5Pt!vqlGQ&zo~@`@2`Q4vbkyf_r2j=$pl+ybJP0o z=ilXihOz-{i_J~zzr)9j@Q;9hFw$yT|9#iSDS0Yb zQHz__f9>qRVEuQli<310bA)B5j2+zI4<;2_vp;yhF1vZ9l)tp9F>8OjGxIS=Gk3d{QM^a^9PkqALS zQ)F;h|1CdbZ01x4t4mxa*R=loe4?>k^AcDOo14~uSD!J$9}6~-IM018>%VHqE}j4{ z0b6eSH?99_*EIN6uw6Dct^dxN+mmO&{xG@Ghnv=aJw_R$sd^CiKXGs(q{y=VEA%6- zgbXYKUdhsM2PPY-Y5mt1yYal&-4d!!K}y^DFE4h}Su_lSaUmkp`tS9FhG-!KE1xEU z^`DOJoJ0Bsf*Q3Z>zil)n7qM+xo918a8(^QHQXi!6Ea4(ruAQE z4gE|7DC&{QT2&Z*nrZ!){UTHyq3C6)WH6@n--p=zQAPt!u>`WKH?9AgyaT~vzz?4$ zfc4+|)gagkxW^L6OPJPwZ}x-WEZ}dZz_$JyavyE+AGj+&T9wbV{&Su+>V+RHg}AKT zruE-=OvQO^^&D6&+rMf3moL#+R&@k>+4gT*|8=Nq_#Xu}&h~Fw{~duX3opwSf-STB zTh@Q2Xn5NM_pfcgruE-5mksN`V_>H(zn1l1r|QP2bdT6iW(o4*%Ci0&U)2x=AShyq zc!6bE|Gk7e_f!FEf;T1&Ws+Q2Th@PJGo+>m_#i7BzL;hG_h`A)yahhj3Wu*{S^xd8 zNorPsZ?eK+jb;6}>02YxKSFTI63GdRY5n(hB}4Q#1j=DE`ME@}{+m?U5cwe}Y>8wZ znbv=SjfSWu1dT0Gt~kN^FVW2Ho)8SSL~^=iTK`qrV1)EG1ew7i%lfY(?oM%Y{|o|| z%a-+D0W6`I?FIXh0^s^;S^qUDW$^2^U(@<;%@v~?3B#=hFAnL~x=TUfy6CQlt00}| zj!9bT2dICr{_75TDY}DUTL1M!L>w*P+K~bxY+3*DJr5V%+(>Iz0#kZe|LG@f>%YQ? z##F$W*lt^c-RUyE+iG=Y%sl*n*Q>%S?lImHQF zy9e+fE38}zXsRuL-6ofp9n?X;VsC4)%<`g-LNfI8*?6 z&Z4IE-%Uo;BpNXP_Gvw(a@yqv#B^Vg0w|H(dQViW`TFg{|gbE$hF7 zi)HDRhO*vM)D*UD{kQ6dQ@jXOUrWg?h(&Du_suzE3R=z^5X>YI)iZ8AvI(*E->9v! zc`b)veQ-$JUM=gtwYTK3w;!UzrqH(jd;2B18*vTjHes&RZ2h+ol|%gn=43cz&tqBt z2@DprRh9}=)W)Xu-_{Ef*8*xlm;<$}|Asw~xGPXE8=KaDV~m@OZvee*V%fJ@)_*Ht zQ$P`TAN(UzV_W~N!01BRumfnniDm9t)_)&jT|w4=m%y)?8r%9WK->SgpW?wGi$B=< zZ|o2}#tv2@m|NC=E1Eb3b-4Aw8=D&2`tRGSbsvoe@myjOS)iu% z-`NzIC8qUXn``p78Fv>AbuLPPPUEYK#zmcerqik5hZwKe`j3W(Qe)HE`j5wEodysW zo%F5r7yIVFs0&Lcjf*D(WTl|fUpoDj&TeF1p|g<%nf&Nt;tqNJ^W{yr6gU{qT zW5ff@j>Z&lpu-9mVH9R&l6K%KyzPMadmN51FasrPyRQSChVvs6@eXC^sTZi>Cq+}& z!H@4WX8kxgIE4)gbBR*5$JmWlDnd}-60xBdo4v@0rD>HhUMU?R=w*pKcI*mjpN|F~ z1vc5@KARWTPCo))2)5GVvCMxP>J*tpw0#163)pUx%dwVUkeFFC@(t`46oLokEcg{u zqi`IgCS5CyMKo(vtmY$e$P~+Xkd1m~F?~rFTqg~zq{YdL{N7t;alQL@vWrq0fHx&g zF~(%@pIJh`l4IarK>aQ3C7Y4VlJWGd6GfvzJhM#n!3|E9D0868v9uaJI+|HFdLgSwvK#HAyMM7#7@RxB#E|aGAjl~+&6F)pc*!&ou14}fk(KF!@k=Cy<}tB$jPi6 z$h;x1uM7toV`F-kdFHcvy3$o@&p3?S5ssgq-NIe|BBg72Q&{Q4ZIv_sBCiu#Aa)m zHB&#u;)I1wAZlj`Wng5`m|5H3AI_{9j6X(M8d)J(Q^)^1#$wjY17B)sIAv_~m|54q zJk`)_2H$CEWH@9`mRZj~^H)Q23jDIAk>QX%S!R9zeiQ^>OJE}6#vv0Y!|@|QnGO6C z(AHQ}5WG}~hHTC<8|o!08l~|(cJvC`A;bmBjfd~sNKrGrET$aFAqY-dqEg%%?+r&F&GWbU8_A#| zq?c_yB#msW=_7$#M1-Mhrtp+}XiEif7?{2yklD%`KzG5pQ5LA0iH$CWZpCD__Kw8T zkTq?=Uw)dVjdx{+p`j)_$~K_jd%@0 zD6ipgv;i?tOziPYpts??z(l#e6(;@1#@5AKm6Wv*?6E|g%HWgWuLo!4_b1P40{Aj^h5Mu@Dm z_yfiVSXTqA%LPY@tb+0H8xi^e;E)A*D9kGCODl{H?>9LANr-Y?4yTeA@pYdG7Y*B{ zF*qc*GE~}IXQdarc@VQ3U9L5#;nB^)IWR<;SgcuA!~PRq1|v>4$a4O)qC)5pzmT|{R#=)2Iqq&lJ@6xd>o*&fXNqVwn-ufOC15 zZEk<`xIV^bVd!HJohS(9I(&1RJD50aoc!+Cs{kW&L1f#Z#D(w3+cdKPvTR6g?x%ng zc|y@%4Y1CJ)aDKcR`x@N1O5PT$cEJBjsz+fknl3VbsJKfI~q8#RDLbaiCsn=hY?$9 zbH@VFFV`QL zJOa)W2vM2J$0W3muolcZ<6ejdKiT^t@b_%*SEvD;)z7^T@0;MfBgFg8Y2fGF)ejk0 zKM8)x^scz5B(xe|A$u>xf44`-3jG9J!vH0duDy%52xVO?{tP~x#q~WAsGyB$(wB89 z_UpeKq95v$QVpo7iTMh0heIodZ*yk-o_Oa|<4bhCAR1x`DRFWdp7n<>t1Xf<8H~nB znH#bO(~~7xS9~59F0>MCqs2LMI1r6HpKHZuwa03MVssFq6C|XH$L+!B#I6^wh?zKR z?trVvb*ae}7=0WQK~64I;dN|vG`DwQVGtr332hs2y+K@+qbbRI;eJF z-9k8bPQ-z6DQZn@<2lqu4Ixn{y^A~R>al&;!Vu3=5ZOsFvGwu%D?AOr z;V6pWq)BlY<7Cft%=MJVoXjzFP&H;u*v^1^!A{e#^qekd*Nq-XkS-fty>BN+hYtDJ-ky!5sso z2iPEsa}bi3)2hOFOPL5Z)8g!3TZk!--`O?3I_fT zh}Lulu7Hh)>`Hn~>?g7BOF-9boTLI**4OtnuyzxRKpcke;{O0w(Yrr3a6zDAHXeYj zsO)F;(dbS&@H#*ZZ9K0YaMk=d2e8+Md{?>w^|A5D+X%dR-W?IBE$9c7aX?cnoHC$H z8IfJnE$&IY6l6tiT2^G&a>ruiCeL4k?95HeiR{|$DGwz*334tMEsK!rxTj)qOMV}K zJjqQFa$R?wd6LHciTgh|WR9c^D2tHmxu3;N0PB4_+ZEsDu=!JpczS7^ZuW z%}w;|uBcxZ;T(rs1pgn^-);!}m(ac{hHzRW&VhG&2vRAHKc1tos2(au3(`ZIPV@rV zEfe!h!7_m~ZNOhNHA170I%c;@`~_CK6Wnm5FzHh75$67al4eAu zX?=wAg0B&(B@4GewD)Pk_x?hB+WM;WF@zT(y8ATY*vSyK_qE5i6Nl)%jSe42u1il! zMsH4$5E`pr^!31Y0jr;bvhn{_3#|~A_}LwOQ^E{k4~RzoU!f5!t2_I;q9>5)hw{Du zs}`xLoe^wz-_5GBS#F0$p$7>S@+MMye+k^f*9PleYL>r-;F`FXk=@hRYJR!jw-7ZMIl39<)i1JI4}E2LM0uQN3w>;vjbhUgC)ppJhJ=L3Z3 z5+Y^5%Y#LBM&5OW782xQjc;IAmIRM3<7Gd6)Kc^5|Lu zxRNE|iLsQtmUqujPM%ye2Y%6#@SICZhUMLhv5;;OWB`w`B>W_(lnl?ip@)2CH52$< zOTy3TO38@4UC{B~#A+&R^Kr_x) z5*-rP!9T$7hG=N(Dto-|0kWMnUhEL&$B{dnC)iHPp5WVoI=~vT=dBv7NnMP+!R$$K zt6It)t|KrvZrQ?96RF8ej$1lY;@5+*b{;d0>>2u~6HZaL4|QLyj zbTu8Pl1Ww! z{A@vg-A0{rzlgsQA2)P~@SJ?n(-G+kn}@pODmW)rUkIwU-m76^`7t^KMcqW()@qR+ zn!prvSDLAe(>Fueq&bF+Ce3^G!acLiO20hvgB3XiTK|Jkj-*g1OHR2E%9T1ALRmQ% zp{U{SBM`Omdz#SH(g7E~qIvy<3t!QU8H_loVK-g)isrSBE}^TXmuvWnW{ZWI@Tdza zx$qUuGCf@)QcX{Gi70h&tP8J2IsTI-eCmSrE|FKQk9g-(+qZX#X!Up>O~k051~d_? z{umY};?yf&yF`9<)jmxWP=8ybiFmbLgeLszM0$_0I-rv#64WDJO(d!rS(->v^E7pd zWc8T_E|H?9`!tcN)>^BHH1!-pE~wUj;1Y$@n-O86usXE0OB7MDaV?6fYj(Lry86*h zO%zk>=hsAW^;@4ylu(bq;S$fNZ+-3(CDj{?U80nFYqBOvtIxje5@pmoCtaef`f#sH zlvDq@;S%N5o}=;MKlOuGU817;)|;BBq+Y1y5|!16Qktlu9-X3zXVt3@UE(=)Y-deW zRZk!ftEo#IVWPTvEm;#a)Vxz%qNZAYy(Vg@d60_QY8295N8SCSChDqvSGz<#b@LA{ zQC}T`7&cHpf8r9)tHp@Qu}d^k4?gD-jn&2dG|@z@4BAxvbcsteQ)eKzo2$PR zaETV`ET>DfRP(LYL@PBhpG&k>6H&fx)RsG4;sy0%bN z;SvMXVU1j3pc+5QB?hU3khg=?8g*P^h+1;9CNk6=MP1@mwNe?E7^;>)zU3B@w!^p874-lD~G$pXmv$Pml&h|iWrVnk0FQOP*1+# z5^t(a2D-#JwN7o97_XkscHv{cC0^CUM0FcVd6GH+PvcI;1N<&AMLqDDOT49ie%&Re zs=pS~#M|ofdM@#f8inRLO?7|d64TXhBV1yJx^B^W{bPnE=BfFS&zWigw5BXEjGBAS#v}7J(F-lJKMuznw0sf9V3XDgMWBp>^E4AF zi)_AG8&(0&%q#<2W$|S;|3X{nfdB1a`z*ea__G}TSCPA4bBSMpu3C7+X-woK{yMTh z;{60je`G{V`GkBAdqmORs-bQrfD|=pt~<;*+dQ#o78@W}YJoQ~H44X%?=a_lqy2yk zW=&7pYKlt%r4Zpu5XSX(?pG(f6Zh_x3H9}jBik|bm_uGqT8R%M-Jdbf32Zy{& zMlU!GA$RJb4fURA|4c(&9m@8W+8)?Lz3h#?g@(o#7y|j^U@xKS{oeAm4fRqezp&IC z9i9<{dO75MWvSuiC&;f^Ubazgg(hQ3SCsH!cm5Tc*wPJ&)BeSy&p4i*XjUI}cPU}0 z%R$-HQa|+q^pVA!U%XW@&hSSTdqLjc^diDa-$$mO)X!reP{zUeT@xvLD7rKaQ&y#7 zDqts5`Z?wM_+|Ln0R4qvKX%^Re}x3WyR1eRT#Y@vyoipcp@Pdj2@ zKTwK=!|3gMIp_3`F=8nd;arsvw`XlZZB)Yxo~amak7EX*ya3eE_UWjI?EXz(iC#?^ z4ChIvPj2qH6PX7kl5nOyloRO1fU&M z1Tnr z{58j#qN5mRA3Rv=5+2GyDeB$=KXal){{WMBIzk*tQ&*@^AFp zKgv4(p|Y@wOFVgq2|-&+RKADEao~nJUAj!q>Sz=ZN`QVTOO$TAg~-vBn1uN*aT!jN zame~4+?1CtI=QKW>GYvjohFUx3_itQ$)nJF>->{|YZtkFKO6HpvR+PhMma?C%PS#y z7g>>f>qSktP6O!Oh(_mg2-nhrxJK*Wam%vaA2=POpBK_`A^Iz>Zf{J&zbxQ)AnatE zrYWUyri1?w`ZWX;r^Z0FC7~mnmn)5NZi~Y~C%%g$T%=l|(76^I;~qsr|5d_d{JmTm zg){vn^*x4RD@96&z%jAI49vdgZ;Ppdy}B^^F@HzY&==7sd=9#Uyb)0<;4gVCDcTv; zcmsNmV{pD~iF%TVFAzqzjpy&u|ICY!9>F;bfyj_3ZKBA4USj@t9tstIcNg=&_mJm2 zMPAP6E#~iupw1<^NcTQs{ts>nu%K|w0?%kZM2H2o-IJA)XB}c;O?L+b+aakO>a#23 zXMD20CrD&zOM}y9N%Q%R?4D4OkV7URiqz_67yfWi&g=J z;zY_9-Nhf&XNfSz$x+9Fl~}NV$qkgE=^vo`CsCmRnrtBFO8BNk%ZVtf_omW5M#ygX7YY7+4T?VoT23=pDl7?;k$gmzKWh)?qv zVHX7|Y2&@`0ym5J8q-@2n?AnV)W$zGz@?iC0a-+G+=g29l7w7_Jo7NocGdtS`Y>&G%5IK)LKc)bavh6S|^RWa#~Nqkq~6 z>0XjkKVfg98Eqr(JfbqRz?*Gc;s|wg7oogqskyh)iu#}#Q{d1#O=`j;@MsGT8KSH| zXa0g_Y=L;}hj2J0z$=AlIGi^M{FrE5s|9%1AdQhf9N3!$I=^lNHWH$#PZM@&jC79k zyoRY0PbS}kXtgDzh=>}qM<8Ys^6uL%ugYIcUo<)IyGBe;{Xf>;0y>JM3mfj5+cQae zGBJ`NBm)GOWfymMcXtcAxVy6icijj{7GIpj-F5|&Y2t33oAaH+ztQBNgAmI zLDezCX5u9?KpCkd!lHu)d3))FXipY#StXOiEH+46ste0x5@qa@2#XK0*Vj{6<9|6u z%=jbp(Tf5*p4IDjFDA;c%$JgW)KV1U;=s(Cbj~Ch#ouSvG4q#|V;7(Ucx1Iz3PwQtj9!(o&Q87V6dVM-HhOi&hi{DE-Jc2H?M#9QKCjeT1C1sdCP?>2fLpuVZr9 zn_~UQa^Cq2>0)H$ufY4694RM#AXY7+|IM%(3&89!4X_c5($GkvKZJSbHe#_1&}z4D zrDO%Pjp$E7Wiht1N4?MZ5)|HC|9yi6$zC8y7xy)&J(h-<{?&wKPU^nD1xfA{sXXZ(Cy|x421=;&p;W1o`YV2rW#4EY5J*A6P|T!&^pKjc0<{8F>Cu zE{e$BO0%g53BMSm<>slNzhj}U3~5(x}xxVIMJqr1Iz5j1xr-?`<6qs zt0MeX8f~s5@bb(l%dm?-wi{hlggj|%Q<}iJmD@YMwSwiN=xV~RjAm8(!g;U>`7e43 zq18o-s;FKopwP?$w18nL)L$D4pEX6gKW#Rp4uV+^Xv=qSEfMbTZ&MlqJ_G0y!?I)+ zThOJ~5#fwX7EYLUMb{N6&Y?ajcCHmS#GjX}ipn)Hy0Iu4gyWFCN7%4~^f&@~7R|x> zjD@!6sEX~JFJLCW_Zx^u;wD_wL$Va-T29>w?uGu?XNAlfZry zRSuDZgm!kI(W4v%;S`g8mALG21`F*qs)bas9|L>o!Lw{cT80X{Wx1|o2rU@v9C!@> z#SfrRhY5Rm46?G2vIEQI!K*@U^l%XrGT5rf@~Z-@mIr@=EQlT z9FYH;&=zAULQg-imma(?RH*1E;X58JS*lVR_7Vc{80jzc3HW&7yKI_)X9t$c#J%MV zW~$JZmquNv0QUxrai!NQwqECMcZZZ|LaU4&3eg3OAtp;^s?Pdz9?~)kWqA~=8DPYi zEY4cRds%M~<_PWjS`gL)+-VZzSnHi-9|-usZ%s@L#5sWXOhS^zvUdVlF+!`A3SvHi zVa1UvJ3WTam;##NcH##XnI5K17 zO_JJy(8DCj5m6^43P)={gERqz1<6RdF0C^c3CG~N26F>gyG*7W!FAGN;W*XRh}dNi z9wj3g;^gdbsYrcsl`##cl&a!~M^A#x2vtt&mWk9Y(dWszdR7qfnk1R&s+`g-7pY6Q zC-l`pX!IRPYFsNs>VsztNxeWAYLfKeq&oGdNL~H9L7EFf!gnNZo0k&3Qlt*YxGm$f z9fU(BDa{?e_co|5N)R8!DTUEnl5T_W)FjF3q<+c>(njHb<)lHfg{q1#9;5E(u7z5= zN%${(VBnd72O_J;jRjH6}7ru2d0LrHN7YMt*BS~#@hwxo9%phF>;h*HB@UKk} z@m<0hg?WgKlYs4suA;P**lyt*1G5FjT0VXZ@*d$_iMc&H=vv->;e3d#3F*5W`}Sy= zI^lqDrY>oSZ^s0wNG8z}j|gW9Ozx$GiKYZ8M$SZaF~@~7LxK^`T2svTtP{d{4r`E7 z)mi;O&b(g@R#q4`=_!*TGD~khI`xupZo`CH23v!v zGDMSVWYrbntZ>^9IPia2Nd;aL&K;ACbi|odDK$w9ZwhCw-G;!U|I0E2j<1c1cV9R= zk2I(+nJO!eN6`pR`v|4`P&lWdOO@$xV!!!+SW?y#;S3&SM6RI8k`-7N^HexXV!9~B zH2RJpB|H<({SA$9`nU;-?)kZJE{QU*X(rZkE{{JiMT*`n_4?eh??pJg5-G|~(wj>7 z_611iC!{ll5%fv+{gdnl*s?3SktLuL3RLPC4}rbGqxbfDU%{qb(QPdODgHD_4on(C z@gyPnXO4g#(9NQC#e|E;(cHj`F-LazvVrD0|TzV+-wCWh|=6t;Yb6}eD7d{|GL*P@ROCw=^MYpj4 z>Pt_c|2U}BJpps3;mxq%PbY)%5h!}$hpSg;&>?*NfY!p4EJd}_z5BwPsbD>P?v6g( zRAJ84II9I4UMYV?7SYQ;RG2dbUBF^FrN1U%&NPpwjkLb33Uj78=ylRi@CID|OkKtz z(e&WF3Uj9Lc9^JAn_2jz7A;x~^^*Fw#sN&)4ox;Qt;?;#oay2NtTs>!)YxoP>@~jm zOU00%KhbSimFJ+JSHcR9CU(PwoL+*TlTLSnRzf#Mt1xGpfRyH;e_mpwqDt9uQj2Ck zM~>2id)Tw3zQ0&t&eZuQ73NIWH>xmaav&x}X#Wcp=1lR^P^=W!2zHTF3!fh=L1_?H zNqRO6>%Fw)J~r@ZYf}~GOqZ}3S(eI{#PTj!e><2nZK(mRk+$u?_(6TjVG)7GY*Jy)RJE-N zbEeFQLw#xuGuQ@n88L52VTUoqR;$<=)=bln;F1|?0pswdGy-CpQJum9)=d9B!~Byh z*qv)h$FT?0isqt%w5Iw&IFmvJ3u8^5Ze3Sl%`^gspxaSf6j6Ix;IzP+=|&VT6(MU2 z71m4>k-?p5%V-7GOskOrU8+@%><(+Dn@h2>O}nhP-iPv+fo4PhVN;@Csix!A&`x`QzZq%1IAoI<(VVA4SYrb6kaeC<_O zGc`uIGwA9~T*O9CQHf?zv-&tLOIbIl${b3EMlhFxp1{(fTD8{QmH9L-5PP1~2MzIe z>W7LGP4mA&b)^90KrC5Nx#B4I3RPK117TOC6R_8H~xS{A$EtWRqNYb zSxnkfRaruBQDv6WEC-CMDIOJSIoVKIR?z-mumDJd(co56k0q+IimF$(D644<(zu3- zZC91GbfK22tRw3#%#f)oa()Bl8il)(=y3y8*+>npU@l3+)8O(w3OtG#G*ydKu_EF; zr7GK~9@4&@0wb)-4!U~{`ZbLgLfJ*Fkm}u(9dX-3wUG~d=~#MI*+-AiO!rf%I#_+B z*u$!Fkk-R)^ANF0c9_^4`3NP(VQ+>iBHUxuYW&(=IZmA*?F40-uPP_$6iVuE3iQLI zg=)`JmDBVq-e;)8H0)+kHo`SdGy?f{o?;;30{K41HD{#aD8nUcf*N(1_MqIa(A~kX zbfy)HVTerc?^%@V#PiJ?RKBjF+@#-ntI91(gRbs2jV+1UF`Y*9y-WAu>mEH5u$ZMA z>#{)BrlC=&Ja9d*Y0JvE<%%}45teEUExGpe}HrG9&%e4^E; z51(lrB!3|na^@>l5mx0t+KO)YoAYsBbpFEmw*@1ca856SaYs1QquP*gmPKnxn{ z(kh(8ky4v*dLcu-gtHu4jJI$u+=iuH;e0(B1A%asDvyysINu%HZ z6V6rWBmISQg%5@UNI{he#4pGU63&5{u{R`~AJMM_BfS1NHY=Pr;pi03slQ>*OgJw_ zV_3kpIT}wY;pEdVVZyn#5Jm>!j6>~lL2LX2V}o$^-h{ycTH78)Nee|3$1);>vwvII z>0$G6Clvz02p%P{h&X>5%AS-mHix?+_GvEdW z3gP4p*Pn#52!_cVP`#R9tPsxHFsc4UIL9KMIfc`Tnv+X7GY-LcA)K9XOfipe?m?%N zS6mSdT6a?N31{;|7&L^_ZzWdzg)<#$cR}GiodM&9aOQ}`z#*I=voLZ9=RA~JQQ@qQ zMpaBW>teVqE}S*c^_39L^QaRgh4Zk$_<@kNV*o)qk)dUTvkAPH70&7^Ok#zzD(ZcC z;mnSTQ$aYNF2gV)oVQT|m5@LbXJz3`(+497w6KntYzpUUG}daux%V;#6UaP`(FA%N z%CV+!9!K4%C7l1h#egE5%MigjD2OOUsVkfV5VLy1`5f)0zHrV}FlQIe5C39V5zf&U zFs=w{1MC{j*l)oA-XE2>kl0!*y{88b^QJ;{i5jH?&Qs3vnqSs1BOJaQZJlcl3wg zVGfP&prUzfn5?23Jz1MOh*wb-G~H{c%1@njt3ZTs_VSYd6|XBZDZ?NRT^rjzbKb1v2Ai9q}T&0>QA}gK#ozdX;cb3`ORVV=O@$*2Ynll8c(S|v--0D6*hp19zk`dD71?p%7BbWLBC%^U8fX? zUI=aY!0JywRHu|w3vDx$8X$40s58cnFv|KfW=51afYqP9kdvC0g|Ygx3I(5*;(lTE z=kI2${v=`;PfuA;WiwE!)U5uzJICtJoqDYPOh&uNLi?ZyWTot5S^dfPiq)UIh{I1b z1obBeWkmdcrt8SUUuYNHbJBl^LoWJ#J*z(zAU_WkPh|C{B4Uz{oV{56nSnehK=mJ^ z9#iadR(}X-DNHAau==xhF{?lK%CY*h0>xOI;?N_Npif9+NuuVg{!DkW`g1HNt3T_} zjLXu3&8+@RMtPN|smPxSRNy$PKfXv;C0c|kP?_%G;6fETTnTlS>h5Cor!{<4r;%1v zSjv?d^_3QAtp4;ttZLI6Ni>c`8FL>SgMTPz7^f;%KFcWpJ0@Z@ zthreK;l<^iG!UWpqT?G_|9OSb`%n*PDSas$N~#}yLLBvk&iAEguPKT&WQMPrdOqbVQyp)vF*FY7u`R20z^HT=s!UNjP3~tl$U>G^D1Um^lN;p2`WTOBB_B4SZXdZpuBpQFk*STjK`ua+ z*{FLXZjj?pLA_}tjurcm9o1cy@0y;{Z%axN-UR_cRH z&qg;hafAGDkQ?ONiQFLn4(Ituw;S9b{ZTwQ={j6;kuNHGZn}YY9!f-<^HQXP8)U{B z+#rWRaseuWR1~D0e{q8>ic}Y-$Je+)-awHQr7ftq#i%{(n2Xbeq1+(P*X9Pf7P(Q1 zx}!TNP4kfUGIX&hH^{$(xIrHF=LWgt1vkjHmAF9`LP=Gkxa!;>3$)?+$h}{uk*DY!vS#^79s=C9-ixdt6XJvx9gtxqSA!wsm{18$H$ zaBoB_km|;?5Mx0T+Kf_eO0OGmgB*2AMT6`FehZq65^PCNkfK(!9PX{DbZ2gmtr3&9 zR23C8lJ zbAzngmK$Uvyn9mIV4jeiT*VEt1g1KDs396dUn=mKEBdUC+#u_}<_0;W4>!oHsPu!V zEQW-^bO~iQgs!~j2}vAsW*EIh9Ue|U&)^0bft(ph^U%$WqDTx#qp5mcZji27+#vg2 z=LQ*dh8yH*baPRZXFfNoZCAKKPDI=$QdiWvN#yFs4e~icpF*vWhg0e08=jEVh~^22 z9pTQPG04f8R4*e>NV@Ll2??L=pF?AB;anJ1DTxUQT|ye?)6Vl)L8h1WctY|Gts|N) z&gKcpz9&2(`QP;5l7XvvLh=u4 z)Ozw=$`g{q3wT0u1F73cSJ4tTQ7XvUOi_DzLh=G}+e)8O@`Pjq@^(8_YOi8KGW-%x zNDiQt?V=$V5_Z#6q;wB;{K6BG&gpnU@(0?~etKJ<^^LGVo{-EXD<&kxQPU37Sol3c zbCH&#H05VZNN5mz9jE&k22Rj8NIOX-k;8wJx{W6!nb1;B(>lcD3=KtTo~820rE}y& zS)ZqH^Z*x#ch4@;oDA4)q_Ym5kgP;6afQC^!qzKo+`@{~MU>`sQsI7smY~PGNioRt zTNI6axJ}*R_YOIbw|A+y5B4nR#0RX|QYrLZ_i0fiPe{(6Y(Po zCnBDZtX;$tk|l$ALQ=CJzUe_xsd+;32U^n?Qc)ki65nz0A5F#t@0*itH83HO7ikD* zos)7xQW9MgCM1`dUEk}4lLctauDQ*qoe)3jP?uYv!S4&U@ZD|nP#)`-W%bGXDHfMz0xBXDjK{2M|;feC5*Jd6@pLigpY@QuKBL`$X93*1&< z#9|~JV))TB8H*dN9k1c*-IPufzL~Lzq7O_8vvc@m#&GzqN$g?ddj7jQdKVZ=v!G6u zQRA#~6FjD-S_9cYwePX7yN8+i5^ojv=OEV3L9HQS1l4)SLwrVb?1EaI=HWXf;_e?U zLXZo?75i6~xE2CT$T7yv*pQkPxhR!LC^=@5+G!E!wJeHI@!D#fwZeger zg5+gEaTGV_h!0qR)D1;OHo~UhO;JNYK$g@B_V4|L(#6Z07gA$pll5N*{9J*@Tc*g0 z5}QkYp{UI7;H=~^LX&IvijL1Czn!T5A;2O`oR{?#UG{vk4&jU`0I-5dh;qS+e=50) z-$ImHkew$lLie+PtRpAmS7#80C-=kayShi6`a4;-a+b~pZJ|l+2l0yBHIIoVYpIc# zX&{rtRuB%Dq;#BbIw^+yj-y>l(oGN^nK(XZHE*EwcU4^uS8j~_hJWVu~uM^4lLm>=`oW}ORx_Iy% z#o+%B@~`MtkLC9)ytn@ZWPe6G89myY^LCjim48@5!DJdWybW1!&N-lQ-zK$IJn9E2!7q9{z zybOlon7_!;5zS8GwSYD7;1ye-B5x*p77VZNcoV4yun}%t-!_t$XsG?qqV8@b-&-hO zUj7#gz*_zzrq5f*+)h5V(DliUsr_J``w{cu4#?a|n%`w8NG$U?SpWTqIba)P?k3HO zAfllGZ8Q!O2WCD7 z>(h^zvW!lUJpf&?ETiB8mk=+j82i}U(P6_8DJ&+h$+kHG-(siZeC&K$_pFV0+$Tp{bT+bI>n2})hF_|*- zB+TdJxU3n>DPYB#Oc{C-=38=vMjFh`V4X0TX4(xKA6c&N$kFV+L4N@1m*jL7oRt2a z99jAqbSL!npYSBfh41PAlB0QggI*rgCduit*OVq0>XnxmLqC$ER}O>DTV}&ex}LzY ztjm1@$UP(XAf=pl4egYkp%~zMPJiD8Lsfw4pK~u7G}rgppe|2NPa<8?gH-c69d;b$uN%aZ%~KAbA3Mloqs$5(ehxDWgzZa<2;xgPKc)v*@Jscfisfj#oz6Hq8I z=~Tx?tdK~YN?<(2BTF5oz}0}KR~=>R8~!r@%jUtKd*T@npMn2Os-qcJq@@4Rz{Y#t^Ks2?$d zjLE7x)~q#{C&0S?BW4}Um1DB0j+JW+=D%QhL5tUGy3`_dnJum$^z5o5<-Z0q9ay=4 z#5|0ZyqFwnijUZKxWb1HtAbVA%~aH~n3u);tcC?+fqT+^RIOiu_4MFf(Ba4AR2?GG z2x%g)=^ng36pff%s^j!|1787btp`5}Lx7k(YRbCTvDT3j@{a*K?ZLOcKuYqejuTnX z_FTZ90DI-ZEocTY`P5Xap~#j^hxpq|VbK|nQ4gG$bH)@<9l3ms@P7hUz>OPY(nB0# zk141+`qnl`wLob49Vsp5yD^1T$4yL{Wr_C%VT4KInLfTPc@)tpqB>st7^DRtEH_C~ zf##-QFpH{=yBiJWez4A&OsSkDVHQ&zw~>4q@N=;KGnrD^O~NdpI=qh=%+S)%|MBP* zL@K*Un59(5#YzUV3|MtcrmRXym}OMQ<<|zY3s^%;rks!@VU|-JH>w-VIbf|YnNn+E zrqMgetSYZMtj`Vl0Z^})bg8u@p`YR^T}gGEa(4)CLG>x)PMb80lhI~3CHEZ^K+FuX zPUkwSF2VFQrn(v!TLJ5@JdMZ=QZduBoN9(Ij{_-E4c>Rl z7!d`}+?DWx(ZG7BDc)>1=JNR%lR8m&HcYK!da1$Z(Ys22wHV`cE8%TWI5EA|;4$+I ztP5j$8oJE^)=v#SnAO0d7}MkF&E3iXHMohpd;fzm8J9jyHo)INH2^E$TiI2vXDqR_ zRbmFK!RdAw?Y!k=teV9PQG@@QtGk5ngc=kxObwriZgBlcc(jzmOO}sk2`2m@2CkS< zYIxKIEJ-sfjhm%-_dgD7tg6{C_=tRPFNsI4nF#(%$vub({mHt6J*w@o<`(mtnj+g_ zohdqi)Rn#H3nVGHN0^{G?Ct^{2W+kz*QeWZHByz#Nvh+$)yS%~VC^xPveM|xl9v$X z6xFdCwMrJoRj}@xOnI}1ORj=VSFNR@u*eI{R^FYA7sx(ET06$fP_?Q}^y?kd0?*DI zj<=rQ`699Qqh_tP6@10cJ*(y%3R6aFP3*E2eumV>@V9nNuM@R@!o;MO;bb2AQeD5|sFIQ-}B?1SSue9h>SgAE(*|%4MNNZ*y5sJMST=I{@aSJ`2U$vo3IlGTj_z))%aNk}_ zxOj2i#ZI^0$E9pyE*xU;Sg=lqyD20z!`kHz{H%lX4mTu9BYZ_(I2Ak7zI%}k%jV!* z0De0;N0%|zTE+$ZJuq8EL%dPlJc8!gb0M>(ptK-mPewE%v%p#e*OQ5oz^a(|QjV-1 znP_W8WVn>k7I?Sh9Iu_Y5hpgrx)fJeh|$2NxN&_6Qr?ag8>g+xipVAcTjjTbvZHV`u6Ig#3nd0!$6!H#1nAdGjAnl5&xw)PU6P1*eO+D zHiuiFc-9n~=vcYWIA`IigdJc!NjzA)UbZQ*e>m2`2w66=QoyTz$9d90QDPT`<|uDf zDj*^v5_tFTINx9*AG;*LvCyW>+JIpt3i!Qa|RW{P6Sm!N9 z(l$A4Rg9#C14`$C`y7YwE!vY{!*>xtrA*lC>@n2dt=eB<2&q1tn=+)=-r@rhiS1g` ze1Lkud9WMOl_={O&WjxmeC$Ne(^lzex?B71s<{3xassnFi%8-*=uW%gV zh&`>fngU;4fekffcv`BpTWyfeIJTq3$W+Y%Dc%$$^VxcQ4+1;u_=qDylCu@~f$uo4 z9)ojUYv!(_H-O)Ba}=*>D5Ka5T4;a7l)Gf4`%dBu7( z0zxi1cIPtUQ3iN*=6LFawL)*i31MlMIDAwUP`xkrF@$Q6?+_8YBxnaGs zdUe|Z5!bZqd~lAxGx-7ffy}2b0Uy`99f-4Lc0O#V|tWV%Edm=($zv5$HRFlL$c41m(j&O)b^v#kkMKS zXqD;HdKRY|V_#}@a8;;;4*|O9h6Tr3@8HwdAB(>Db#TvXdTG4^M}8qmN#Erc^k;8U zy58zNa7Ya!*7^sO_$x|E_&|YRyhQM?vyB84V3z#C691*-u2L15D}>b_RYQd5&W+@H ziPN`qN7M{HXB4HPyFY@XRVlMlLKw;?d4^J}-0r-m0 z$yQwa%Fdgaz{;H7@%8y>5D0$aD2}O~bVCYswAhp)C?7oN_pZf;W7@&q^?TQ1T_Pj_ zjjb@8{(~<)(-k{cA}tuYTZHltlskX?r7ghJHq8NKL}=U)FaF`hKjKC>+qOrKR|=F0 zcr10^AV1Re>fT?88x@uf{Tw&{7C<5yZOEuKYc7itH#+R}OryUT3TU(k_Pt|M;>M)S zi;kYp=!tFn@pu(tu)`o;Yg+G;Fr*Tqd@;tHT!9ysqx zd{l2-Xb$ucY2Ye8;`Pk~@5J%MxTw&wH*7i_S_|`EJTm6`qKoX$tdZ!3;>L%T>|n?# z4N|paM8)cYmKrx9^wv9r(++r#?>KxEJ#J#iSJVV~xA}PBvyyYX;)f$rlLEUfM!_uu zw!y^Lz2f{V{01^6hixB>D_b%^FE|1Gtec})9cZ?3Q*s4Nzu zo%xJ5WJlQs;?WB$P?qu^z7N`2l}vDD8xL8?p3IOpwh0!k=C0KGX6dBFE%TGNGi2$i#4Rs=3Rhr4edpqeP@(r|s~|O^-CXF@ z%kY=BgMZ$LhyJ{oe=e(siu!6lE`W&J6v98e_($AU>qOX3h)1Bjz+-8~@ztSi)=s;S zwQ3!hF5r=nNQK}Ge7iM&L3qswET@U@g%HJS_B<5v4r@+iy(kB)rW@B4Sg8cZ?RR+> z!9Bv9_Z@-vc5{R-Lq_j_ua}15H44~F6K~IP)MXs9*2A3(QpTUaHznstMLF)U_6pMr zaU9r16K5}mj1#Vy7(>QO;Ga#7OsjP}x95}AxUxod4Xz72N<5ZdS%luE|MqEhR&TX= zfD|%Oy-lC;sgd1i)3pIL^uV&wp0=;Y@Gl!}4?z7quxzwv0tfUp8tqg-vpulv5zhKK zaG{v2J*xn1@W8T7p9}0Tz=-$>KxaL$Y}4lh->)^=^ix1z+_0w_;}kfz#S4DzpzX=F z7=p?Zfk$S5uIuP+@uHUN12Q^4uu>+Tq%B@b@eRYQY>SP7w{&xiws<*h*fFCm4gfUF z1IxB}MRVdXz8ufy0*W!=ERjmwwTQlNP#Q4U;kwSz%*HPp-*c!9;nxJbY}qgsw}tb3 zoL|}aW#hw$5xa3iV}z}aP%;EAMOWcUlcqZsxJylYr6{g+)-U)rm&F$jDe+kP@Jn`g zjwkJ4N1MT(zpYR#b_T8Wu(9sSXwM0w{(;OZgI6W~gMArrroiU+g))p?TjSM%{}|0M zKGe*yR_u?FIGcR2P+LZRafC9oD+U7?SKc&x@gpY_N^KjCC={?R>3}G%hU->57KZgG zx<%Te;FMv+A)$o&1bBC9hR*DB6wHp(`Y*pE6t-A?&VI5tM>KRKllAjNOzRt9I|PqJ z}d<(u`Qphi`4+_FC*$qJzkU{0~o4OI7K?S?5>7y?$7uCr+ zr;zpCHKFteKFQ?BkHgEC{w?hYyQ27%Op^ou9YUN}fGBudLzffGm%;dy56$>SQ3@kI z`v9LbW$~r{Mgpo^zl4%<2hcMUF2S%ap`LYZh($`UHiXeN9z6>r#gW&6Bc#D;%7PEm z2!O%-#SWhaepLfWsRY*|a4Y5Zqy+OVEj~^CZ1)tUI?zTyT6j?Dw^i`i9Tuey(0)LM zFxn7548QGy+oLp^!C@AV1tuE!iA%AwH8u~vfCSeqjBqLH#UIQUf%x>&3Le(KJ$D-L zMbmRIH*KH(-fw~wn1o^k0P@Z)K+(|we#P41LjuTOMFX9)QZ2n>@(QAS%gJOt_-B6i3Ur*L;Qx}&?!sq0HiCUGQqmvp?+S=b#yF{i6$D{ zd^f@!=GSzJjwS+OlR+a^y`a(h4EH;7PLY!L06Ao$fo!|wGg3>_SSVNFdY=)Fui%=Z z1oAB1CrW!<9$&x(q%?LXM}BG4XNu;t4xd4RYg#uV^ac~s8ilY&D}|+vynw2kFn@1e z)=SZvgVEXP^C6B`Qe8}`D6PTl_XD;h`ft64_&9`?^B4VNQhb2mj~}pEw&Kdv2JFH@ zyE$DbTfjPEGG*hDq`|B4`MmJ9IE;vva|49uOyX?UV=3G15GMWcSx6F}hDm`(&nL4j zD*g+1qGsVP3Ck8mVdoqm<#7`g|KAHDk$(yQa+^rPyk=UPVOhpQ`Sa}&HF4w?P8~hI zqUInYHwo=5ZlmR{ek7oA9yoO#2;D5ScPsVJmo5afm|-c@|2M9ZTZA^Uk?wmJpaUMb zXfeQBh1Pbf-WYBGdgO-nzRkZlPB;5(6I%TldX`(7!mbmK5kgUXywGR6@XwW5$W)~R zl*0|{9gsikojyB6mcc_wS%~s454@_Iqqye$iCF9u+D7!nt>FACL$VUi0$Fj*3PcdQ zgm!1UP(}com>l^G+fg*)6ofG>A*6j#pf5WiPwcGRw2a6amWWXG)dm(2+A z`-Okt1-;nr0)NCDJqr&uL*$PM|LM7P*n;lc8;=gB`nD5+pA~5qq_N1_@iQQqb9(jR z>dwUF>v;2x&zTrYbJ zUB<@0L%cIVL{1lEhL$@(u*@yC^tht%kP*kh%DSiz2_vdm6q;+j(np66Gt8bngOQNL zMrBw|TwtX~7Uc$$CQUu1ZX_I+IU>l_-8hLHGa1V_c!xUVdIyUn*WkK`4@MCHr69-^5z5n zD;vKeD&&L)KL}~D$ycHa%1hC-c=2D^_+^tn8P$d}Prk13{R#559Ql=P5neXlh={0^ z7q7NWElM^<%av$sQ&P9UY~cKJtFmy2R+Dey`WIp>aI{oQ0|lN}RFp_2E-d#iG_*hy zVZ&oZ$nRtoXctNk>kZeq|HO0%$u06Jc*fG9` zcPxJF6x=Vw_X;@r5L2Fz+^CoFy@QLQvZ)~{x8X-0-@h^5d57H3jURmj_#-=^ifz~v zWG#!;20uk&(Ohx-t&uprctm7>K>_#b4B7ypQlu%;V@jGWODCtC1W9s@C;bk>tS0j-4dW;Y}_ z)0BSFYx=?CunY?1s);UK06kJtbm62zCjKAe{nEOSnZM+*!4?F_LpPdaVj7>*ac?uG^j#o9w8lX^ zJTkk53_(sj<8xU9?i!p-z;l_La`2|eiD!K7z~$#5qdc%$CeC6N`Q4HDeAfLqmLTU; zoq%^|PGt$pieDhSH6}A$NFoZ*6chFe`2%SvsHIGV^h7wXVu&k*URqY!Itr)s#erCE zA>t756CUp|`{BKaHXIAz;trgjncnq}&lTAOyqII}P1vpBpq;R_K_=kQBj;6OI^g2k z{2lO~4$e6klA+5IwEFY{Uefp2RwSFfmj_3xxkwvfbRl!)Wo?GD%Oa+2)+U? zVS;TY@><*l{)jnx&X>UYeS9S?FD%;SRMUc7^~Phs{MniKDjH{~gwp}a;f9U+!JnOp zuNs&KRLLn1yjF6K)FVLVCQ zOd7gVjnCjFF2eE(9fJK=I=YGODLu8^&u4JI!aO4*%|Hw@(Jt&wW~LI5mW^t`QZ75S zJ;~>8FaLt-NR5~BiQ7J~Jj+S@kR`b&+fBlW+nzW;orm6Gw=XaK3VuH73{HM34+#Y* zUq(K0TM(C16ru-s7pBmseB!pxWOPDw?ExQwuZZj~PO3kjR127o{*S!EFwdouDu2-I zGjgU3g(K}{Y3va`aa#;7<#AyGR>7%3MLuiW1$kSU$|66j()06tI?aZhuTH%$@hRKo zusWY=jQm7?YzZ&?7hiCK4p7w7@xA$#_}oK z%Fq&;P&uT!DLzw%@2u0QGJMLm*gZb>UM!SP*`B+l;*@P8npQHVZHaMPc zA%+vE%LYCvm}NDequttrPtXqB#3yKP2J;Epu4oI>>64$l(g#D~OlpS^XOSg{Pta!i z$TwA#i{>kR3U%cZv=;1q%%}Y6_ylb_)Y9K+8FDq6-qgTC96dz|#?m3w#yA>|&=*oC z)PZ=a{||O3C~6{~RvcUoGZnhPoq1hYqj|V z?N~_ulXk$@N^0Dj&q1a}$*!g+2z?EO4&oEE6Hyb^(Y6JAf;Mk{XA8GkV zD17JYAsRqTzP1CD_?~XxZ3prX!*_d$7{1#}ME9NNIdU4j3@j@mPkF=}zjE-etdJbq zTSU1f_empBSi`xWFzv#a~_Nm z!JMF4d6sd4MvIgjyLuQw@t?*@MK-Bkus&g96+&ZeC1vOhkjJFy1P42dPE&k8#z|Kt zFQ1_pGycR&q^vjs17%J76a2^$skrI|4gnF%?maAu>w(3w?l<%xa9NMX63ZFO3j>Nj zrg^wnNodue5^<7`1HZ_eMCR~cN`zwzWGuldwaZIrZw|l$8qNY;o=%c03{skR*Un)2 z3+v0$93?Q)GfM_1qtjIqLWH&0G7O`@io0>8qJ*5nuQ{MPaBl8~^qA_hUBWv4KeVRa z07oYy2>z)!c(ugU-ac>)BA|Q8AbhiA!LP-@*P31;F@IE4UIlk$7yeZnAa^*y$3VD{ zoTN*sEUZ;AOpB)gznBD>^e)(9ROEqIR~>;*jA1b#s2dJ};L(%Ll9iUcKH{1pB5r2D z$cemHd6~yGRroK05xNvq2|jADFV1^KZMhbE7Sn|PyVkk~(GgfT51tn*zpm-RzimMS zj{-KugR`-fYo-WXKhUVnOM$I2aqru+Ab&O*-EgF9KivOj%u_dX0xm?}gUN*W2jIJ8 z1U<*St75ao6)&_y&|HKadE~^CM2z}%BjUMKI7dO%m+8y}LIEbpbb1eZjCj7W*!FQB zR1NM8lMC=3gQY^3H$E}(0EDgpd%FpW_az*|cl{|eE7!R3aGz>oP`QAu6k5x-Mg}Yc z#&*p{2J=d%YqbdMfl*yH_ang0xpA?QOTjU}5J)ZUb-8w^yc6JBD;&e#=|sWGoPgpW z)2ld^Y(ieNvUl*1*NGH~m@F|zWX0KA_|EqmEQS1TxxLdgHLzSdsBBb3LU8=Yb!mH$By}N3N#&Mwyj6*!Udg7`bJbKy7 z=BN`&kt3`S2w4FZG6~$b=pBsCI*BTT&Q8<-qp`{2zZ6IN{>ax3_6BIQXw@9(1zfPr zferya&Sc9X(+L&G(FhqLVgN2R37a_gyuS)axGJ==$3fT$@Q6u};pv1sLfc;$gqr{# zn*^Dzh)-BQR<|!eK0X$H)uC-LLGYYD6&_FR*V~BBY)K;JR$Y|H3s$A%OxZM~be;Z8 z_(d)?=xsplWzuENC1Jisr-?2}Mqv_I@yVIr3;tL5*~c67ZJ-`YPM0~LN8yX`+krWb z6#NfZ?@XqYsWW4np=@jx-%XQ@KGYwIXj(k~lM9j=VDU`@bw~ELg~2LkGG&+SJ@YPF zMLLW2?Itp`3Bb-K!IKc3mDQqM3Ib~c7}Juo^kSS5g>rV0qZ?PX#b9hq&SHUz_t@hI zF&jDV%m(W?7-!rp#k5yvm}7P%{I#&B=1Qr4n}MJTSpwc~);S`i z5AJlsqc>P}Y8(U=wgjw!_Q^6teqcpCcvxQG<0+^GR6?0I^?|i>>q>>l4lEbrvIo?? z_qPN$4c76>fNGksI-ElvUSa%O@pNfPIv;=2GRgrCCJg})AocBOogDk#kJrcog>PESeeQC&>)2kx43xsg=L7g zcy;pNcR4a6EUxXySc#7YHr|7On?C)YK_5_k%cklMn( zOc-DUqLZ?B?G&lFPE%m{6eutBI^n>7GC8sX(;KPGlIa$|lE@M!it=F9O2)*EG@S04 z7QcaW4N_+i`hG{^ZD`kQi{IgV25Bk?3w}hJYw=6J#vp9~VSh4`(d4~qBFqIAukOW- z-s1*XkCHJJRg#L3meyjB2s&m8JTk+jBt1jC2j4=j#aOg82}ol$FbXqE)-q3Sc-wrz zT4V`KjX*_BFq)VwU5}82#TISJP7rzk9BdNwuHIP#MYzPGt$Yl^bb!%6A}qB8#&L(Y z4&V-xpa+q+0P=B}MSJ=S2xkFab`uou4<*pkEVpPuO@O_C`#Td;FSJ42S6c!f1Q_+g zAB`#mk5T!;Ic94u&c~w+Z7V0R{EX|BSK{j|uJ%|_V+~K#1XkbU-_Cin-r_8RwN6&+ zM0a3)J^m%W!Qy(g(C|MM*lg3k_ul64|CdEu?*+dr;J()5m-lF08!f3=9g)Rx4A^PY zugX{8yS7{WH&-!6r6<7NyZ!4LvQFAz@z0jmAO#FY#mA!;vsAf?cBzJtc3MIzL-XMJ zo)36Q=5Pzu1(lGT-4?&vF*>Ia@V2HLsoUvt_F6*ziPAYkfR8if$gp%d`z?O2=Ifk= zz*m@ZBu9_*L5s7AJ7otzIAxM_?P}&0B>%9*IsUqlvd192`w{7=#d&CtLGmAhg=;)| z@@2GDDe1VydBkdv@_|s&BqfQ{NsF^K#yhD4GzKBkBZ{C3Vr_%3RdIZ+rY+Sc7(O z$r2KRRaMz*eP(Q^+b{O`S>aIZjAh`^@6Iu@^q{Kpc8&6xP%mrcG{sI3yeI6@gNjN{nl zO>-YVax%efBiI=2)N&RMH}F^()}!baY2)>l45i9ogoBOXWDI9+8^NLZu?sQ`lOQ~n zMyS`OjbL16>_osdw;K`7J#Y^H(Gl1H0Mx{U+i7y(w7Lx3?5e%P-Wia4tOpe*(>UJKXhK*no^jy4d^f!n?&RwM(w~gT9&B%Df=KV{T>2x!h;$%f|Hl%e*XdT#6;aTf?rnP1O!~Qkw#ht*A&x6@b)b%RszcC zh84GsUD0KUcxdEpq?h|u@Rhw5Dd0qBe<#{iW|%YKVVC-rj6i5 zZ@u)^gL(J|Y?ke@5ghObssUKfOr~r>k|b>e|Al1&w;T)lj3DkeINNpgM>Zj8BRCAI zGn2A_P>@L+r6eSejo=}D6s`qQ12@rQBiQYc4tEFCmtk4P(nhc;mJok~(a@9yS!Yy_=d*y)4w zREA{cCbto+JRQ4gz*Z;6O&dW0oIBjZz)!k49vi{6P=4>i`MDdC9ka(qu;YJvxp<*} zcHl9x&}}2w^Oz2229(2uO&h^08}!;y8;~3o^qP^>Mv&v?u@U4h;{V4+Fh9ls_b?@Q z0<`pS>G858@4^r9t^uFP3$!JPmbk9RiKCv4n$G#+VfJVM$yQ5w5t z<5%N0Q28|;Ic)sWO7mZmEdS!3Et{0Wx`mB*Of>#WlYcRgO#*TUCK5oJHWjT(KtfRP zDvY1`3EjOk%t*+s`C|`-Hepy&XgM~`1@*p+(x%dAwnXRFfLN_`mo6}ws0;f)Mae%M zdn&r$yxI!(`|T|Xl5+8JOsckp?XvKM_aJ~<4@=7azT%8#^x3USE5UzAu})*Q7&X{ zFeReP4WUdhz;NpOo(aL$+Nc_0H{x~>k7YeltnYgQVoSj%aQ)%FXFtxQ1ZPks+yw)U zI?nCeO9CmapE0P2RB+DdhJip5Of)ttT_+^DPscg*~vN5$Sxs^Hmw)JSPtwj6K5~FkzK;i*6NtmNh7IdVd+9j>R?a6nMD=T#kTnIXOu;W?Y*cq{`an-TF`_UNdRJ|E9uA zN~@yz?Sr(GAmm`ucaf7Ky%cmT301W`E-*`jH845z|EeBaS99jo)UK5=;x_}r5?G)o zmy;An?XYej%Hr4t(m|7$q$KKu^*w2n#7*FjzvJA*tSq5!*gaS_$e7YZ92vo5RGMR4 zY3hZQMst#IdO%q{a8HbR3H8HTTMW1~po$)NSOnk(VZWgZkiJ_1YHz~nc#SQgVc6YO zIy?->7!$Q_Dvyq-QCQt=hUXYSi5@uPAk>M*VVT|Vc0hYQ@N0}&2~EOIVwjOZUj=mA z1Ly4oxM^6As|NfDkb=B7k{yD!oX{++8*I>|?^J-&dfrU}i%iVZe=7Xnnm1DC-n zUqXv8!qiUs<_`@t_rQD6gc4eYm9K5U{QwQ|z&j=bZWWf(9rkQMzk6W6KLEE5t6RtL zy#dfx4_s~s;5K0gQW)@AK$ku6{w{#qhSiBT;MagYc;GC307r)9LKh-q9*DT4#A9U3 zX6#fXv|fIEbFr#IkkfY{p35YC1j37xd{ z7|7(R>|{Xm+_2t_TG_56p>yB|4Be8m7Wnq>IHzBN^Q%_7h#}`Z@LS(;7NFTAboK3o zAmxo;AAx^!b8tQrgL6W6zdC8rrnsvNoq~k|JTj(wR2)sGK}1jcy<#w~v3B4J(JL^z zqs|kRL9Xfcpm;T6Zf|Y*e#nZ1b9aVhXTnmIK-q=#(>`K=84ZWKCM>&ESrY$`Uq+b2 zwB8SKH9o>?jea*t|MvelxbMbrMOyqOjMExnVC{>L2fIVprK$d8)Cxr}58h65yW^g@Zvkjla?yuV7OG5<`M> z#6l@NSKPRWDKV8+357(ZLU5N8E&P|?mn=AnO@H8TK@D(!k%d}j;CCrpl0kF^m$(r9 z{0ce~Wx(f2t#rO44yVvI+_&OI8FA@|w~{}ggj;@QZ3D}1QH52;3^rW!M8!8ltE5f$ z_$sUE;ZRj+1@0n=puz+ADyurUE@Xr=M|CKm_%hl={O9c~o(KO0ID=QW()H^G3 zOv&$$Jl6TYYH`eOf?Gor%2o$_WtpX3>kf*Vc+ppMgj&2@{!F}_BGWja`@uen$C4Wb ztOWB}>cqRDzg5xCQr`jckkJAXr}>T|z}01ulQu$&!d3TG!wK-Ti1&RoJ2#}?YQ*cc`oVYZOO+y$KE5C}COR@aG8*~?Bj2%g;Zv;xkvXCe zsFh6mN<>|(7e3oT;U0f%yLp zY_S^`n^?Ma|6!EC9LLG##^pP^fFEGab{Y5u+>(+wSIfj#s9k~cKc;ti#LJo;mp&!V z4_x)$xNYS>;OZ>X`%x~d1={n!;5`+bGcv@*BJ)GBcF7O#(GD-%$s(^HDh|A?$NR-1 z2t7tCe-=q^1n0Jw&FBGzX0dkrgvs5*7*tW{)f+t8b;`!fGe}jv@c75 z_eGl5c7z@R=Lm*m+V#-;UjV+um&Vu>?rKC~;3YlY2cm;XTnck7c&`WNmZo=RE7o3K zz?TO)j~N#n3;;gN$xqrFL!@@b$oUnmG4nij|KO zC9bm9U2Id>L0klWojI~zSTntV_%(qi=NX~D2lT~+y{@H2bE0og+@P(@2=BGv-1Ix|*|Ei*xKUd>)bQR1_#lt> ztYrXi(kf<$_o;AR@SXR_VF-PTHUcA#44psMwZ-E-0=KIrZq>ru!23x!U;fU!&rx{a zt~Gb3{Wb6p9`CO^!ut+wDlTpj4rsBVc#@`l4QgxRF0K7nBlO(B3o=Jf`=QZ*cWcL% zzvVCz`?Ygp zkhbM;-pY`ylu{UbQM?=&aT5<{j|U+Ne}izvBuU(Qst;0l$fpi&36VY88{i+Aqo-gr zI^o2_+9JN>%n#~pDm+Om{*EBvNA1zejb@hzcp>KKRm%s%R^qY1-3P4-k8*;)W!un% zy>>K1;K#LlHc0OR=OGNq6iBw-H2qJ3bkbgTIrIW<*|S0V-6Lc6E(GzncJnrJVGW$O znKGnzuQnKI6HjZsUn2uf0lRAAJT@!V2wbC?cqaHMu3cgW@fP?e=I9yF3R*w$qTW0wSO;iG_FBl_|u@p7?Di8vMV?{lEU=|BNSi~d_MzAPFUA+LLK%r&WZ`8(J zARPUUl(q^;K_cJ;>f9dodk=)iZj$1CFCFj{LOTp)N+=63{^OAeR=gL@M_NN*&A1rR zbiqA`8N}-jCF|IG`075S&B}vR*oUft6 zuH~@l-!hp5!rbH}@0w`ViK&G4WC?;=32;3VxB@9^&|wG&69J9S+4O{-0Cv_bKv4@` z2cBAJ{tt{;JOlQ|gR=#7Vp`!F+0CZ#@G2a?qy6L2OP>dI-S|E+LTHr{nCyP?fKZ%C zGATNVCuxc4gqFFXL23v>o9{^HxDQV+w4G>hQqm9*#(hVcj&n+h8HBY~fN>X3JP1qN zBt_+^USdX}_1R;jX%DdDZd~ZmkqOHrtlw~aSSIW~2(OqVTi!uVSoUAr4O9}d2uEq$ zA;+V+7L5g1JbJa3-;hYmCL9@O8LCEhV7WZF)cCRs?cNb1B2|FZXIzFMNBr?i4_|#GXtx<(vu0+kX3;!c~Qdxka@dHs!G!QuYY-ofY5U?PNvs5GAVP6HwyJ zFQ`Ex-)9@Xf4mi1jQXe{s$Bu$ICaZNebyM*KjSfSho{Slg@k=KZYaCT{dy%}{~uxR z9bZN9zJKp*vYTWNsU!iCkOV>tNUx#y-b9M@UZhEt-lX>ukfH+8A@nL$K)Qewsfr*? zX^J2SDDu1RduHcw_euc_f=IM&hSU#i=26R6uu_v}hJPb$sBUN$B8WTeO9N z&SZ5YC1^RrgpoQS@W5Expd5&iK;sBc^5Thsfrk}d1hibo?mg|UZKO^L8G~Lh#oi0@ zt&ZHg{#wgOogA_n?<|`R`Xk6MIxfHDDs@U=1H7z}Q+@?xEOIlJrE|xAM(WhS-*9f26$cDBnKIRvqU*{hhp0UYF3|%ax4SE7RG_x~s35G821<=sN1vnMq_v${NU!H;%#*6$? zFdF0MU>)FBEx|T|jiQav^km#z&I5|Opf<%yhqsiNe$z5i+%^~j3G}-=h{lVm;Tk0o zAAZI|@P38i^+rZ_n}W1N^rUYvx?)Bz!268x2J}zyI#7%r-MWdNu;|e_@RJxlKN+mN z;h`)hz3`_3j7v9mDaPaG!zqN0=P`;vqyKE=FLZ+33hdt+ee=+XyyYL(ziDeIC&{hI z{#VgA4xP+fR>m8mOQ!+G6dLHrd_xTA)Ww)e|Kt1n4TXhitP%;SqVGmOBXmZ_P@HWZ zBPYX=0kZ|F5e5L<^nZ?@1km0KEgjmfIO3b=mIPvv@g*u7y5ufUW&{^?xN77#&5(^{2;M-5O2|1d0=}yR>(wF$&H_IK_We7&0h(24b?4c?XiT@k{?J@z z{uag+Lu(}tMd#sbJOd{Jm*dHQEHd)}a~dLg{m9R|A$k&m^AY0Yspn=`=d)pNydRkx z<4oL@s|H@j8$I6=SZ@&70aYW~A-Kmo(MPm^`41xBhk1@Z4t$D^Zqd9zXrsu(XBA!! zw9&<)KUXhxIYS#qu4$z-$H9MiM?;;-&}P=3IF@*N^bz<|S7TU3t09*y(x>;R&O^Et zn0Cjac3@r{aG@>J7ks2}9-x962edo{+$ys7f2g9W2!5XsR}uG30wNxxjIAR(|BE{4 z1lHS^TYOZsjeLTu5w3$t;4?_W%_rbw9++`38FGui39i8_;z?Cs@Hyt9Ep&f|B zVBfjiu=oJ$nA`^$%uh}0Hqd>-Y&o18|Hq+0X#D>nGziuCR=$fd?w#>(bjmUV<gH9TN!k$`b)F*4dHr!Zn`M4#?}Vt)a;1dF)_G5A7s>Qx)LL1J zF9N>=c2o0V*U)AquM>S8=TPxCu~o{ncnzm-WNm~8U}NiNtBk=z%6uHKpq0_GM$dl6 zr1WU^^jXK)_hYJHP@QpE;L2oX5#`WIZHde`j9=ElHkKhkv;^uxm$yS8AHX=fe(U&2sRKT0@yrX?+-<<+-wR9Q+5Zkq3Dk9{!DO8ee~dvhxW1 zh1N(rtZ5eCC!NxSuSU_a$UI9sO{&07^Z0#ll%^b zy4pr;=PaAr+OqnFfsZDQtUl_Y#CC~IEvJr%FMyVK@vrrPyJfyHLhc{28|a9Oh0FzO zx@Yd~YOaId*BY6Nm?3^fY>&*5JuKeO!fy>+9~RDqvcsC5nX|T6nw;Q;v_{%_L)q<> z*@LSqN?g%+P)RZ;7Gq>2Q?0gJ9SZn0oW=-GBH&82VCl!35*2r?PreEd^u4V`L zL9LPb`H$+Sf97~xBeIgm9T58PMmv~5QZQ$NOLp7GhIrh-lvPCfg1@yVb zvJ%JOC1kO~W2a(Vojv7N@Ncw67Cv=8G$Ufa4^*dv%iy=PMpohnn2(7a8QU~M*`XU? z18`)@9WU)HZ-_&9RBTtbmz)TmM{A@VdcR@pr}5j+f#IfJ8N4BB_%J6sf_-$x=OkR3 zrFmWHF8V?v+Wmvx8m$bx?>cr(5PKN(j5&D^C16uG&?cW`{{fxNVdNYg`d4`^`h>;4 zMxW(TecK4XBAf*@A9D=+Jmq0JJ+Ykb4lZt_;IeRb(R{`|z`wNM+#oIJ;upNtK^$it zCOoi63sm#oS0qc{B@Lbz&hilGOF~=T)f@h|FajLjzzoTF$2Rz-ddzN^mDJu3n#N44{|Nlg+Ylf6XhlP_pi%55MMBijp zI(5vDuQ1@ja$`M4eXz(<>vWW|6dpvmq?Ea#s-cx$!~e4=DQ1ZIz>-O{N2FmoA}8@b zZDeZbt91XMSj!C(G)xWCg3A2pg6`n z(GZW%AIC0v17K}H@drPJOPD9((wWAHww93rVOia9@t`|eOPaZ)9`;v3gqGHXY#>_t zE%+!fT1;JlrWy{!1sdQDydz*DY<2_a?Lvf)pJ#HU(FmKU!v~o70`Da=VmwUJQDlY{ zUQNw*H56M(#SNT~uL0xJn+6{789&zK{+$_Ch@|2N$gaBv#VTrGHLl=EyYM4s#D{bJ zV6q^a{1=*ljjqXQ$f7ZzX*t6aKH?DRa0=Km|=NY zx)`!FE#(@m@fY5B9R7_NQSKvL@rAv|x?|9sCmmPMJT6PO>;~rUBNkUMR88h#=~Ku8 zH@Q;&m<7L@{Y#2eBV#!j-(^O8{}~z2%`vh=T|mcJ!aDN-bUV$6E$~xjSTgJCK=Yy2 zt!3S|FQD6QM)bcxx?HU556wue+s?X5PoUdoMzrinx}2>05}H+7x1V)YaJ3S?)r{Dc zgLY&N)*XiCjMklC-I-y~Z80Mz<3VFHEIaESLGwcEeqdeFNHmNM&~d}a#=5A@7*D_= zEAwa8?Z6Om_*ye!dS0@Z#JV!jRM)!SST|-H_V-FN;=yprUl!JNgr=9){mZ&nc(gEl zg&A?CGqv$V)=h#Qwsf>_>aJT;QqLbt?>n7@j2ajeS=O$n{b z#`fA?hVCmfq6S{MY=*_Mt`RhCv@Rd(Dy>I7FE%4QMMxLJx?#{vct`gfo+*5h84=Q$ zbeUMU9GZ<}6oxGiZ#hZh0%R zy<=@qe+$fre{g7VO~{yVz(3#gZQW<<&N zD1VWx>jBNccXaiCMgHcR5qEo#E8Uq$@7Dj-XJ|WppsX|!Q5{mX(Rpa$YRLM;d(Z2>&T`)^V z0#7E1*R8joaRa;Ja!~%kt}9H((lp36X={PAH>1PROE}HOpfhq5;pem&c^2$|?`ni& z=IR;^!~F*MLJM^7#t58`%Ybl9OqM$hRmgT+k7ALzc}tZEBWU56c>J~sR7Ieu{J&K6 zR-W)@c)gSbRWm3$YE_?3)ZrS1G0O12g|j&u1VaGFX@TsK^+=E0;I%!2ccM^V0It*m z`bMo0xFryUsv?|iRbgQ-;4v-Wxv#+E4Par6>73~a3qJ$i(*ize27HVGsqiOGzEd#p zA6U>1x4g_(3+iBoU)a?M*Z)9yHRe5Zh+mkr?*PitM>zEg!bl}3>S~p&`x;|mqqK0U zVTeU^0Q^`B`2PC9zO!J#V>+WS5+}w2&d>rHD8SINCTNltKj20jsVQvmOGC zgCab)pRsJcGYjv+F~hQw#2k;+ELS3)&>5nAdwlX{*+$2~tFUE9$YSYc$o6U}pXmcq zFk-u`g;VSW3ULnXn&t&5$$-o!aH-P8Db^JH3D|4RX{Q>$h`AU>T2?v>rmHE9C=@0U z3ujo)wsfFEE-Ur&750WpgttW)l?Q=`??NR!#Z*zoV7~wy3$!E5Fq7&=e1z3-irE!z zRJ_QA{y*=hQ6HjNw?BsuIw8`66oWq#V}=Qiv=9+i>qvCHV6^X#5060F1%5Rrt|H7Z zu6uDDvhPXSkKFWHv(Wd#$Pgm>_Qur)+qw_<%(W#8)rB&hAy6E>XBrmrF7w7!Vt6Q0 zVl#BHDi_58Q5$%j8G+8p@@G zr&Tm6p(m{Lql9jNsJX)Az;EYcd=>#>Dp2Y>IClumJN-p?EzoAdFF7_(CFTjdcMs3; z5T@4=pY_IO{9Z_n7noDn2Yessu{ZV#ypkX_uXQ{@#SYqy@l-4-YxgT5EBUM`)l}?U zK=}yEv}rUxHGkl33?^~f)qv{g*m5$lKw!FI5_bgYrm38XEErM*U;5>ojRBfOm~G3* zg+hKpHnaIK+4SK1J9RND&#XJ*PByb`yXY2;hUBX=B0p&-cSjDYuCr}~( zAXx0ts2rgZ*3gCsjYe=57pdt+j#?^Y&Ld3t0F`&KpmYprxvVv51fn+r>*&MPbR*lS zU=^JP(O?M1YEd9cY6S3fV`b;7Y~TyPmTS(5$Z5cOnSTBoPmj?)-3NYLYuJX=G)(-b z9iC_;%}ww}TJu(Bn^~hOfSbsEFcz*M5kdKoHkw<-E-4#1zze>kxu1yn#Fo~ENOjYF zP4N1pku8L$8(TTo4=Vf-(8n6f>Bcrrn=Z(~7z9rzMEgikrqy)g&FJ*Q<$g3*0j+m6 zYP#{a*gPH#gCX>oCOJD8slx)flo(XGgK)z`$F5DQM0!TcLxB#j?&F_L2dPb)Hf=hz z>5w>?qw)8RX_ZVXyLc6J5So30!+S-MsPTs|4kdQQSw^}QB~K&Ut?2)X(m~_XY@;c* zTVpZ1{)Ie*Gbs~v7dM3TMd$>VygSCicQ3Cf7t#gyl#|zA4B-kAe@teg8VwW1ib}!k zXQFyvM{1RM!#`(-wu6inRd@q;D3m~yuLa$zPSO?CL%+e{@*d3;`pqguvxz6~S$Ht9 zT}FB^@$(rL9!wmK{*>nnk$)zxX^mN;0J>Ex+FnMyoF8>CRo=dSEdR zY@y2yt8HE++bt#{lVy-r>;T$JnA7b_w|uYYo-r)9thBS5;2VbcA5bXjjT9$)cs$fItSQ4pfySY&ibdWA&d%v%egja?#3 zEOGyk6jWwcp#B>3&EXP%60-g$+n5M6TVu+#!5{2hG03UVK@C{01K&cL(Uf)T96DDk zh6Xjqj^k75NuZxx>}^az@)<m^AL9evhmzN1-!Vyco?4?G%ZHeR}G+gUfjF{VowPgk7mWy z*#)Sl7thO%*i(a6o>F)`&{QvO;lcZ(rv=Zn+j(aRz7lJg(SQ2JKSImxB z(91T+$B6O})zU(WYgqHDLo+96+G16>4&WcZqY2B1BWhl-2Ny(qEByrUC0g?deC=E1 zh$}#5U*c7bD;5Md!4N-3*$w%H|L-Wbaijl=FM>Uo+~O#|L+%H!EsNz%MJ5o1tC|%H zgD)Rc>NqIr?dJbmJ-8^;OM=s#QQ4^pliw?2SQN{S)b|fkJ2;BO)H5!t<2bZ zrF;eyyl9#m@LNr4X zwJ@-t)&HFqwbAKf+z7ZinYl?h)YGDG@E#fjh<-pL2vY%6yW*+SM)BXfnt9+$wZ>;! zbP#Hl?d$F50OHGURNKkhCkD%*|MdnA^QPZM9t|k|FVXcvN z)U+tw_rdw84cLX=1>$YmKy{rbVxx zR+_TlHMB;SMoo)m|JRS(i)aVlLu<$x8kU+Cec#oL1D~liKGULMrBzyMz_)3Q%#WHD zU0q6PPJ>_38krw8E!w7<(mVlw;cE1>XlXpApY9mOzp!w<%bIhiMN6Vx<^d|EF&lTM zMZe8}Zvg={(wNKXPK$174c7qFPh-x$J1yD^cmhzW#?rW&7A0J0y282^!J#UrdYA3f)bb7G)2E9y}-Sp#6L5DjWBj0RS$;MjBat$|0KdRAW2@bi#|3L!A9s?jLar=yw+jnG59*&-|e@0oYR!SU3gQPF#n0 zy}r`q0WYRC(vEV7U$~lj;LWr~mPR?msfCrDzTm^P#>XMzJg(gwsHo`u(gA~csvWX-t_aSm{4 zplTYkan~V^!}9^nfjVjI;}Bb-gEJUttj3&u*CBpx;8tm%Wg1K4$|2Ue?`M1s^sUA| z4zb!e)h>Pl|5a;b;gv(Ixlw5hI1>*Rx#MLeDu-A)h1=ykDUtq%Ty z)<`?bAqtGZ@!{DWd?;!7Fef{{4zXHu+1@{gM$~@|he#{s5ZS}PA#(B_N+9tNhG!Bx z;&Vyyk3N#F@i_d4>l*V-ffYJa-=QQkk>hduib=JAULn}R$)1s@fZXW5Vv`c!F<{v> z_i>H=7J`=qtD^Z$%Bkxb->ZbHbC_=pENJzA`-*MyDm)5!Jei4q+cmbs$BB~2H7*89 zBTNPGb&bE_BRi})1pd9&__)Tac=H}>egl81HIzB+8ecTV?a*XB-5H$!vAk6yu4|0$ zsx$?_OKFX?qg-R&8A{U-ytUSF&05Me7Jr~L1HngYjkKd&&*BIPTHOuQjcf44+##W=`{t^EH1)Wu~h0KL=jUK!NiULGd@Vr_h zbD{c*8~ZCeRl(oa8fizl#yD5g6}-RJNIS|k_9&_BOaq^X!joG;C8Xw||6`uf&(%8o}=6vI4%mG@gF=yX(jT`W~tF1uaXe^B@*Eko)&3T}o zHTH3h8PK%YUHwfQ&VrkbJoqi;8nZo9npp50S|ck_xyHF2m8KkcO|6lYs9a;{Ri$YU z-cxI&9pxHdz&rDyHy(U0Y4|WFJHD>50^WQ^?R`5mqS}9OjkHp(kv$AtBPZ{n1nd{E zVAJ)heHVQ;oBEG7T}V6puWmtXQfJP-2DfFCGqtH#>F~ed6qo#&{R7gl*&aDohyL}s zc-zldS;$klCvNg>1h3JBJ}bNGJ!j=FwowDy=8rVL#j~JB<*6AhV-Ny6(4Wq_4L^0tQavqf#5S4^A->1i-zC!XfAZVyX=h%pPdTb=!fbbDmKg~H2InA;?=_AY6~kUTuL0^8xU@I=zwZ^EC90=wC&K!rh~`ke?;xA1Srg*&171| zCty66E*~GEZ|wGw(r_!V@VktYAQrRyJ(zd?WDVc{tp&uhcc)8NR1Y%vQjBBiZ~khT z-4r0Ig1@gdG8d|k^dyHRHC@5`YmKy{`bc4}W*Yc>t&w(AAL;i;%Fbr+y;|ebM@qqs z-khI{;J;{%Pamm#veLW)w|-Q`R^?KCq=~tdCLTOlYh->@AE_uFXymjif>(Dnx{q{z zk!7?%XlIwm6x=@2@P(E!1ZbSbY~1Z5?Z@p_3xJku?9)eDjrotAK!-Hu>U8@^*?}(u z-O^YZSAC?ag>B<+LU07U&($HL#?$ILU%pOiSPqrs+WeunbwI!Vt#8+|m~|A9r&>i;^) z{dma*;}gJVu$b-Nc9KoESVk9ei}!&3B1{GFb&@3;*-{hyGw%PwA~ilv@*6xz$#x2Y zm)07}oOY5!T}>nKHd@0q;yTHr;VM6az{hBfw4aX&10Q{uZ zNIS|&2Dq9#;E%ON+G((qo#fA$q~q!fx{gi|7FB)9NlqE38Yq3IDW4ZBC%F4=AU`vJ#b(>>Q%nMS1XAS|bauoa9J6h{n#X1Ng^U zBP&rk$qi4HW&(Js)<`?bNq+QFrL`7(ht^0t%1LH;s1AoS;PhP)c?gpoUnjX^y=?Dq zpb_*HPhKe}$sPtyl9TsP0?qT{R^GtT@ggb~(*c3BH9Cv11{H$eDg_@|0gL(ZV>p4p z_lRW`R$xc?#3l%D=Q4T4AtU3}HbZYB@<71Ru0Zr73q9C+Her2-=QZbnE!BJwasJ}z z=?-rha#KPqe zWZ3Yh8)`=5?Kb0!y2n2R`A9UH`Hea_*Ssg3c{A1is}5Gz%L}56qw|W)J(6*o(KGCX zE?_;0b7lF@!DC3H^NGy%WW^_dP4mWYlLx$j$QbjJWzdO9tO8r_<@0dSJi4Grs`)kM z>WLo%JMHD)-~>IokjQazxNTf~0{$D=@0!PPRi_ARU?;qR5_>iTi!6UNDqoQf#^{ow zX22u-H#`|od+`N&$TQ=6IDNR64^O(F`YIwSeM#6HO6MK-@?r8^?BtdR?&2a*=j}6N zkz(M(z$R$!b7t%XFD1SNTc!C?v{rp)OfHP~KmZ-YB53u0&y4=9ZHaFK-^XH(q8z%H z4`Xn%)Hpg9`rSeKv2X!=&x}QIxyPEE;Dxlt=ggR}PHAd^H`W@;oIW%5SgSN2gAdjk zt`Yal_!-{w!fB;~FVq@oN1Yk}JFPT3zz=GTw4=_9!?xJc&X3@CwMN=eXU2=TWs1{! z1Mb{)%P#Gl!P|9k`7nKys=g%fWYWm$Q)kBRxV416TScJiUaZcHJ#W~&e?(iL?k*NG z7wXJ-^}5oG1)rfcG8gL1_~lW#pT%nMty&}Ps59e>!%A}s{Ib?aJL=4M`jFE63I4Cv z_?#KTTsu*}VqyUcm)Q5rSnPnxa|(E6t&#arXU2lKFNp#~OYkmQBlDxqjCK{J83jJx z)#x+h<pW-J1{3+S-MY}`FFmda-tSAcG7>~m%eeP|gkfc$=Qi^$n` z&y2s}*2oM%Sv8i%)#bxo4B{07s-UsYnQ`Y|s$Db#@2EAh@aoK%1zwTc&T#OFS|ck_ zof+43SDtkV_&TkTcGQ{i*i2>T2>4m8k#^LXvE?(>)bE48A`ST|c1FHu#%0J9Ig(6- z-@{jSd8N*b>|tctZS=SC|02hcMeyLWZmL5mU52Tvpp#_)K0EHZNM$3sCUhx~^V`gK^# z15%KvOj(VH-oc%)oN`T|`Wm|!YzBVe6$AZs(Dw+hkNWj`&6Yf8hqM28g=X)!gFhU?5zY}M;h7k z)Uo$-Plb;Foz&Pp_Ok3jNq<4`LqfFs1Qkpldzmo{M_D#4tUUCGcd`2}yXdKwk$}+b zn#g01ONnEz48jc$T_ZGIg3AaGZ9BBG>EN;XA5ps^0Sa?yGnvEan!=%L%4GgWE1Nbe z-x&m#1Z~mRJuzQFFO^%9!#RZjzlSgI_(tuD9}h&A{llE}{`^6A=yh_1-r&l_FH3Lw zAVC9!<4X7$;;t#ld=Rc4b1jMpSo$X(^ecwLY*Azo_h6#_ zz95W6Q6coItiX~aTa+WqvH?Dy-B6LJ5i(mp=bab&q#-pt_`4hZVjEgy+K+ zWzMvshGnd8h)A6g+Ji8eP&hu}D~!aR@dF-*&?$sDc9%0Rk#;ucAx`RF=tzc#s>S9N zNYwHi>idu7s&zxNVcd}=wB$0_#N^7B8zc| zV@Omd^kFTapeOjw78XV#iCp^$` z#^r7{Jey(Grj^4LPjziq!m6@gC(EEeZ5Np$>T)Lx`g#fwJc9>>?K4SO#n;2;g7>jH zij_mFWLnv)(IOIS48{;!FN#4gv#Hz~k1con3zydAy4gm=ENA%_sPiv@*I_Y#!Aqez zM{;64KwN}qva=L3SK=T9KlzIE`%(n8F2ib#Z-hq_4*CminOeGd2Khe}B|C=9jn#q@ zkI0*MCtlcwEW}`uDe?@xOzcwdu9ZkEKUihW*%(dr%XGS2#`Jf@+2AU8>taJK@^Zs7 z0*Tu6+=NY!i`kdI!HORBvFWydo1Q0g2qeDz68>Z=OxUw%MUN2J5$Qk^|3kz7?-0hM z(lSNSMp8I#Hwa9NO_${vrk94@#CuxeBPyVwnMVIn8HACR7~T|HWzBFBrsYmwFxobr z!Kekj*$WoLrUZcOOzq;$~z_O{Uup*>t8$cn;cg3dp}OVfd-XgtCjyKK<3i5UC= zO4E1@Vg530TDj2NsOE_X_!juImaqjWDIdCNj+ER5{!>fXO86V>^t1{=JHzl|P822# z3uj)Qk@+L3X_Z30!qXbrfbzRoP?APu|H`(JRwZOLhU)1ARSmcfNv3%VP%9{LtYx%C zXm=es)mwntp^>o`7hnwV^miom^ln<6EHy9|u>^5e0gH}-?G=p=z22Kml4 zVC)qgjI{c(1on!)M%w%7xzas3Pyt2T<53tstE9DZtiN$q`8OM#RT?#{1UFW6Dm<>F zsZKJ{aqtU{T8`+{> zwS;UrZ{#wlX?GzMy`F}-3(S?_F(!X>Bp1Z;s1_j)(^maM9UP%yrWNM@_MRRiNuVgn-W z(h*nC!6bPPYdCzO_#W)4=4(+qM!*4_gwuLjB|iZF1MHQ{WlQJ&SX!^JF&N<7MAe!8 zC43APS-G5s)bzGWkFunuICw>^k?9;?k3+Sua~;Euq6t_#&B?66Pcx{;VV2 zl{gLbgEnd9{}Xs(`Un50XY?KcJ=Hj?4fm5aCH5fhk)R9(zk*%zdWOYhTI6Q;(k}(u*|Bc0#wV3f5+jHw%RHAg(_$VppRWFdf>GVMwX9ojIIegg*&2V zZxzNk&?&CMu=bWlO{QgBlx7*+4weI@d2#WP*jyj|2YP=|$;k5|pc7vFJQ$_k7+mwD zdW`KB&^<4{g)7pu&A}hy-UWUp&in^=ePH3T$w$`c(3elES*+d`{1itws|!F`MXSk! zh_}>ykbfOq|G84Pg7PD+rpMt7ix2l*L0iyw=kw>M;8Wkxuou`J)Dsi4tXToR=^YI_ zhdn_2;2e_nt+Vxal}sb>=B~!DRuqGYLt#so;N93{q94!*7jump z*6z|UaX2gqEtxg*z?b@Jg4fiCos|i@=^(WpPsPTO$SNZ+KmeUMj@1>P2-0%7(p@1u zmf?>zvZosj}XMjf2b(Cd`^_|}*2kRLMiEFsArm#D<{EP%<2@ij1KN!hySVk0Y)OYw(4ml=NM z5*bmRQl49Nae4?stwv&zUT;6SBwX&Ly>jTZiS7?ojhz8~Fnb4@u`R;T8+#g#E-n9~ zl}($8$vEmg)e+sULo5DA=ecBBIkd8C#9>9}WScr|HYMOte=3>((aNSxdmaoVmOvlE zL;vhAX+_ycrj^4PqAp-!TXb9+Rj$&->`mO)=kHf$ zD=ud7UdBurA443_4YAjkbylH2C^jKr4;HgrTWqz$KckC)qg-Fu+5M+woYaUNhwlpS za*4!vTStNSum615Hqz&Fo_B>6^Z<=8EM`~y6>I4gN9~i_SVsChF&ATSZzf8F7hh39 zL;=W(xl*J3HS~1S=g&C<*Jm|WB2!^utZEEJ3sRLtCXMzvRw1q2(N!ZYgK}+#g|KQU z6rXx+O+F1(a`Zpv@r?yPQU$YW2^6cet%G9vGz?Pbj5zxtUJxIajwOeIzw;WJf%%Q} zIl_+?m!8oK^RVgx6wh5l@?dOFZvso7J$x}nLa3_DFo&hls0U1Q%ls=Ty;>}Nwuspq zrB^V+f>>GsvTCl>*l1D(r!N}Vb~tLXDTRCM)Zl#B6wO1Sm3IZ=CGGeVK;K~6P~3S| z8KD(&)gTb<27fyL1EH$bRUHyhdOET`O*^=gh@inHYa8y(+YZ(<#NdY%;MX@Qt zu}{KyECO;+L(GCg$-Za@5^jnypIi94x=YltehvNZNeB$voGIhxwYZ?dFTIhLe(A-t z^qXxRh64ldTE^z>&P8|tIw=n)L*1$%iA?p_(^5ukda;&=EGHJh<$+zb3OpXIl4)gI zP{w~f4;LZ};{vXrLxYD#7sktBtbi>uEn{I~^qjmX!*y7=LkX14h#ezQmgo{OK(7#N z`70y_z^vj~qvK=2W5BX&e#6U?qDTA%UJ|T|=5q3$lg<`>3A;!%1M8@HC2#uKquU+< z9}G5D^FPp+l+)!4bH;=xSVqIl&@2RBtu@@jdHQ}~u9%Ll<{L^#JGo;*nkkKAp*x9%t4hfH(6sx)JTVz-V?cxQlMg&aYc`_>4W7PV_+HG_ zno83EyrtG~y-H2qm_fCa<`eKyTElfKHThyrO;VZ#;LEi}=9%-8KW6q?rP&95Tx(>W zX^MYgftcI466HMK1b?J8GS93j7?TUloHe$Mm(5|3WtVwoO`#aawUZmXsMg3lv!-xN z>mtfdUGSz_BlFCfA~7WzD@`BpVOk^e+;}~jY_aHX_G3&94Mltg{sn28qSg)TY-SW_jbFTU5wc8-9b)f$-=-HfoXTGIOE@HSMg z`{2*CMjlJ7sgdNjLTN(aN-|-QW%u3^xUg1Io1ay=3W1l=8krxqQzt3jRGP-%ZM8<` zhi-gWSTE@%+!^O*F!)GUV_0-!-NFX3ksqsTi1|RvTrAy_)O-*-xR=uG1wW=WoJ>TO zf(GR&qDmoy13Z*i{H=!QR^j1?`)EGy-Ae_j=Vt`L*2 ztCEA{_mI@e@}fR?DX^-V``o?s2Qnp^gLTq;t>0UBFD;*jdlR7<2`p&!fA3y;-p!VH z3Gga1v!0Iy^^JvM@s_cLT+#uclZ2@Nva2HRaB39)qQBDI0e`GDUKbhLBt8w7k8CH% z!He&)NIR4{efQFz+m$9ScnPiH8gcJls(wXj-Un}?HPVi{d+ESsrRfhoQfs6gaufK* zLivCInVcri;^#A0Ff3IKo@7+KI)S zK{<49=Nyt?8*>mK&H-H`Oa<_Dh+BWOq~;4`&G+EEVi1}>0Tvj%*d)<`?b zA?E%@X-yd+^|BA)tu9q ztJ8Ie7kk^rU7$ZTmd2GsypBN`3r-*mi!8j4LtOK>a#G3QG&3YMvheD5&QZ98Vnpj*}kO+Ep=5>ap-IerY@DA7gPj;`+z2kKn`#f)>YO z9)%Oo{&B@aq*5EfO#ER}<12p&Xk9$4?p8_^l^QGj!-3P%|yvFDZ z&?YQ`R{z&Op7vl8i12x=u3#}wQVw1JIQKp-5fC7r0KFzm1@QHchg?lG8buZ?Qsd(v zKN7aIQxd$2)==hjhj9n)!Qr%8fq$emTqACWu~}xN`4oJr)<`?bKc0$Hnib%iv_{%d z{_%K6r8xn9L2INP00Wv?ogTK@oX=f@1Cvm&`@IO@TMnqYdl-1Rz{G-!FwatP+ z#l2Yh#{=W!{t@+on!8xYTqyq-<7)bWkI)*K3*{e2_ryIIs7f&pe5uw*JIX&^?V&V# zz>jK;w4?lEV@#*8og3f}w8qCjj&U{qIC+O+;RfS-yL)mcWhWPSVXcw*QU39t4oXuS zyouJx{3!p}9#{69pI+dfxEk#ruinPk8A9i{MAn?^A5Yza^8nhaF&lUNCq+`Nx&Gh-E*!4Sc`WNIS|u4x6hEhb!Rs zNW+IY+41#{x8}(99!TRYffoEDt(1Rc4+H@z1$h z7Xy-fk==T|^qKYGSX`f(2}hgg2wgWUW)Jd664lHyr4Gsl6KiGGg@59~n+Gh^KtO<=K-N7Pg^?!Zl+UW`hWU`E4EM_0dq3biBX0VL` z;DfYAj*qE6<*PP0Igs^P;9qKu9A8m= z%4wsOW;^%+t&w(=&pd(aU$%1<{EpU0JIZH9|Df{oA9xUEcx1Vx9py70bXA(H;CZ!1 z+BtKXedf<)Y+1Wi!E2L7R-f{jr$19|x+73GFIGM?F(^Qe_Kg9W?qVTxp?qfEXL28k zRp48+M&?5K%oz0QDUvt|eo1Sj9py6{TveLK;Qwfiw4;1x;ciMp_a!A@;nJwR&6?hs z+q#+(;FYw-r%yTgg35CX@XlHz^W*wV>;ca6Nbt#8BlDwtX7^_*Kg+<^xEk#<*I~Y4 zA3~42MAn?^Gd;l9fPT}Mjk`YcDu(m^1qz7sDW`jpT^j>bu|PRA=IpyZv(;4FC<#F~ee@Xj_}58ErzQMIW*YSV?e!~dEQrQt(+ zA-aS%UB25ij_L5fVMM8~XwQNFw#ir9)M<72U;T@C0;%F9OmTIcf6boFNWb)T@vt~3$H{tV;H}hp_#SQSgq}kCPj=clrXKRk7TX7Gljwmzj zX^eo%jb31!j`F)Lz05CuIluVj{Nk7Mi(k$!emTGR<^1B8^NU}uB{H}z_5^N3?*y|Z zeU8SR3Z00n_RkR5f&Ofd%ZG{ONu(*~t;x#sYhb*OH1uajhT^ybW<6=1HT2p!wieeb zi8z!;mB+`dW1YS^z%D~|iQ2jgoi;X4Vr!3nboO6*E6LNP>qx?8@Ra%2tE&<>>R~xk7xnbS#wS!VB1OX($1mh zh%ppwyyom80*+u*b!QIe@p{Dn0&Jz`!|-WFqXT7RXMD>us4-1c9xq@}GB>(W0qtAk z>Bt;T;rdA922>A78BDb*-4K;wS4>d4t?JGxe?$t!A~kHS0~y3S;(ZAwiw9Un zPXq@1gtou?sFMTN-=aDKJ|JZVN{4S;>_EcZ)#_pHt(_(+uh)0s>NG2COk8andm1_) zeu7w2pqfj{JGl6ip2s>_+cNevayFrp%3Z&W;M+-a9~#5DRS7tE#H72plLB3J@jcK5 zjRRI9i9KbVlW08RK7yYS@>&ll3L|@3I(5>(9cZJlyv=LlxsE-}oaPovm>aC;P;wT-bF@lG;4RK@mUgnB;1 zs&eeN*hxt^G9!P<*wqhX7WZb_M&zH-IdRidB*MiBs4kF^8||1q6TDyq^12s-Q(8n^w!E%S(cOuhnK=n(7&8A0X($`AS_}^r z%%<{qC^V@nT#ty0j~|r{&V0t7h7p&=8jue6*Tf?r8H+iNR-A$02Oa&4xFpYH3h@xM z8h$Q}xNM&8*U(8WgV2TuY(|)3DV#mrZxrqvBHS0Dg9w+xmVq-SWzq2bOL?MIe1>bb zkuk1%zxY2F%I3C zG&B^|kR9V+Sj@+*5sPto#z$j{H%Il=0ITP6BY@F&F|{`VbwKdPE)og(V3{8+j60br zAG*jbs=(j`@M)xZ2J`aK!njkJ4#AsJQeq|0IxnUtTjEY<$`o(Q*hhfQx>y$5x*3bw z`aYp6j&1fF_rafO4Hw%w9R@}G=;#+yrbDn zX`M^>wYt(Y25_S5&zU zf}heFS-V`WiwO(TE6rW-Ki|=Cxh^HNf^XpZadN`{VUcB*cDP)Z6Pn*rcJhIzyrbcA zT}k*H9S^ockD#@DN5kd1n(zUx16lJ4_^5X@T&^Dz`d?R?1>noIhW;7B^Gl#99}49r zA$Q(S33efs@OO}0^o?L0?1Mw|T4KS?mhp<(?H}OJNJFjIkof0>H=E=UAwqIt|6`Gj zoR4?w$Pk#go>=IBGEoS;gsU+mzLC)Pj?D*^cps>RiPkjQ;VA+LLawL?c__arCv^t62{FGp+6K>d@tCy zUf%B{?5B$GEydIkaSiO2=KRUbxH-bfxCS|XiEw|^{99)VDZtl9+kXf_3}9{_fvoYs zTBVWAuY~jYAk<%ZC~Enr4FA{LkFlKHv~bdDKs6eQX<9}9jNncKP_Lam$FZ|ocvn#T1`NA1HX#-V+aF5{;EnuyVeV!a`!&bU0|Q872q zA*3r4g2;z%ajCA#Pmye-dqjTjDC9^5!*(Sb@6n%^>Fuy8I^SB*OglM=p|tPYyO;AP*@ za7STs!U0T<@d>^Oc)NEr+)dnF;$)T9ui#JK(QvtDBus0m?05>`#V1%~*`*yW*UW?u$|*bf!AriQ z;d0GN*q^F2AAq-dN5kbxO;|Qmr8NNj(|0snuGtB*FDN^ogRjsU`lp=J@KA0NvI8_H z;W;k%xw1||a>+M>?BRSCb8#CS9U7K+4E~%n)JjzcXl|x7U}_K|v>^6B7TJj3>Hy7) zY4xo#Q5ZbM)u;~8{7i*`*+c`NmM(s~1GFHfT3dBO_yl|uX{fQQX2u<$wJ|xT!_!je z0`TS94tFf6as*1i!nORnbnd$an){XmCEuiYGm9lS@dJAqei|Kr` z7mjuq;8ZQ}79@~WxlCtRGpLqAvBg&P^ONHN(j zcv2bI`U8q*uF43k`6&ul&@cGFH?ZI-f=N&;>Wn+51LC#f;Sb^eW)_kvVTPUlM`}a~ z2+L}*|MW#LlwyW0_uwno2o@h=)ym6b3WHDdi}>`8s+)me6I{;CNcDQRgre2eH=QYX zT0<;^VzpLrdHmblfS|n@kg`t=>U;~qXj8~DCi(FasZ~Q_?TD=w%N;D?nnH=X5@`9 zmHbJtb6(zOEcg&J@)1UNIQ~PhCz=O8p)>lwo}Z|X;eUG!cJNR$x@vl<5t-15PQW6o z!rxeo3LR!fPy1K#6tHrd2R|fZuRXtbjSV;B2E)gaMs&ieJBejSkd2Kn<9bKhl8*zM z;^ns}Gb7Eo+>=y%e4y4?>*a5#wT&|4vVE`O9|1e*<)Sf_+%I$b&RSaIAfhsCQj{I@njUvj(|`e%UZZ4`x|lq*tvf*F-{uo{kO1lF9m zENiY$XUjX~j%LmhS)l@S);;}ljJ_9pKsQf7(K6fALe3}^^gB{Fg(-;V{`-*b+ zz+>BSXZ^xIJ!2a*09Y2huGX*vlLskR*-SGe6Z#w^6kVX|>!ZX=3aH$vW=Q4q(wdkG z!Mt}w8}g%YbIg!=1(awr1bhFNXs#KO9|KUF+$9Kp^%1EU^^XD%gyk5 z2~hQcVwhI(sUwgDD@>>BSyWXj;6g2su0FahcHv6X`7|6BwgP_hzXYqy@W1CmZ~^d! z7RV$D7ehU+Hl3R^n(!R(UsqrRz9i9ZZN3N-4ZuG1#%I3SjLU;jC%RY@eZU5K<9n!XwwTe&uBmIYSzzcL5Awy86zw%b+g?48GQwp04yp5K^ZNQ zb;OoVn$bxsl%*yRw9}%u@^spa9t=m!mWDzwUW;URi!Gfoqd!Ndo<(0lu+~=;8+jaU z?gumKCs^Xc{TKwYmi_G#U>D4gPunVX6YMuK!0k15eqXeSOJ>~Xd6cX0$FzWodvPO< zgUe>rT|=>WuxwalTs>7mY1%aPVHcy-D6EoZp@Sjf3dawIJU>lil;1r9IVonX$3bs) zMra>0L|9IwxYlf%+(>G80&^ZgVS!mHql5L&1V1AvA+*W^%UBG!g5vxNph$LW>=?{& zBJ{9J#6vHBFZB6y^aX)_*Z5Chz9yG$aB##O!^nZKVw_Z=kp6Y>)P7l<`mk_Pc&#J4 z1?;}0ri8V4C`txiS!?*1;#KlQOwMLZ^cY4^x%gSBwn39L?IGlu5^0BDN)%KjZ*gBpk2n{FA22z`RE7j7gx@`M)+1vL*Tcp7Ir&@eRfXe_e6W!yHAyV5Wg2$~P1 z2+{o5P;om(iu$&Zf`Hl}4KxjZMSHQUwJQXVfg!Xv5!#D#_eYK?iG=$&fnUh;?L^?| zI&vfpyaf#ioHPUvI3vzVkaeyBL(+jEIX!ZE=rG84-ni5+4H_KydoMY5atq|1j@yPh zwLwDyQ^!loqC94yv8V!b+@T@8-`G6ylmL>QC>L199Tsw~m84}rDrp)?9nzrTA-8cZ zqyfR^AZ@+0&sfkAA-!<*L39wv2u=BQQ$eGgeBJRv{-JJqAYfuQfDoK zJYLO|9EH;Wl==RLn$3pp`U&|77EYdya_?1xvc>;UlWij|dpoF8g!7&eVDyG+lveV= z!=fS7(V5g4m4YMZGYD3Yh^k%Yk`Kk9B%OOu5)QT`SoX~O9BzFqu)h!u&0MIZmrh)08U6`U>EIS#W0e$6S z>Dxlf{ESN6jroQsso4d--_;nQrPiU)dqn8i2eMRGfNr~3I-t-LjH?Ij6*(V$V;PIF z|6haqRdO>KN4J9o?Gw(=W`L0q!AXR;5zZ#}7B@Q_Nqi%m;oZ>#0;}Z9L+MNQK?j8A zaDB`+qS>|pZ|7=^xcs<83OXp9&dYFzCW1e8ksK@yt&|Ps4~fwG$7BgU2mgvRvI>v1 zK<2*_q4U3#ota%g`!&w=W*-tiFXH{N)2Vgb0pgmI&4-#hz1BbIZ{eZ58AW>a>th7H z5P{@g0t?aHOwdcg?~Dw~K$A*AaSd1D*m6%(Jni1A`V-p-^BWp?4UzKWn#Raj`LLhi zH>z}(Al#P%c@qGcqC6#xtZf>8bFDtV;f5XHk%TF-_hckk_+dq|vnV`l4O&0(DKqGd zl28Sq%R`%^N+_S(Tq1X9ahhWCTc4PxrmT|U)Zz2nk~s0UtU)*LHl6Bh>dD(wH4dF* zZ8|yHnGohsSTe1$J$i!K? zC{l{n#8!UZ3KJ<;c44akZ)FrIqe^3|Aa5m#lnJe1r4VoB5-FZAu)@4mK%{hS4pxM> zN{E!o>9AFlx5|r@bJwv|jJK+bl+M=>uQ+ej7b!7|!AkJfha%Cv`RvVGh6Srwa zmE^51BBcRFt)oiuRxgqAWek+1d21k8du)~At&t+77bf_l%JS9(k@D+yY?b4!86xE~ zoLr*H^VU3(GP)DuRp70~B4x~Ju!0M04x@X~z7{EY zXJe}hEBA|(ILxy|RgIvxlN=K%4+nu&i=dlo&WMzgFR@iUitZ1)EK&yChq4C8yCG7x zV5T{$CU5;FQer8+TAbcvTsF4ER_!pl-|K~lnS!gSIxNJ@VHT+sF$~PKi~g6KMz~o)#p8@ zs!p8>eX6=<6S9LGoFqJ3tW*>9>XU_Mo0Uq!y*s7JcM$NYm6|rsQzw^kKjha|>R{JX zQzf#~N)1PLP7%?2tkj!ZJ$0&xR(9&9-Ppm`h=?WwaQ(P4J# zNR;PnDbGkdb?7B{2^P_#!2{8=MRc8=dKIdgBaz8=YT5~&I!8oLw^P?Z^jr}=%T6uY z?5T4_^n5#Y5=74v(TnULHO8cB<$LPc0D9_W-sJ zeojUrtL@Y{7{vvW&Kf(l=V@%slXN!NsWr&KMMBvG9RPN*q_f3NZ3bnLP`25rHgGRp zB0QhksUcXaxK#4?HOhl`@5@BJJMGkzF`l|ys&S8<>iIle;Zk$TNgWSMyiy{CPRh9w z6JyDBsgrsSJc~tIb0>B7%h*II##ip7?mm;KCom7|Sume}@V3?EI>ly66Y`_z~MmnkO>*0iu$Y>{Z;8XZHc8SzEsnv+w zB$3HZ>Qgu{Zmw#G@_ipZT3+2EwU zf#|ygw#iA2fD7SnNpy>odT=Q|Ar)!coYZ<0;a=hS)Je5OM(>lz*MK3N`$fP`Cv{m9 zym<@H9w+qz1Uw)Sl}K$~hs9XoDNLlkLF6HclqOO|D8g!qG*6_)BRda^wDLsiG-T%y z$xbGb`e`hdG<5q(q}Dd|)MLWaCy{bzVU!oxz(lG&GWvv2h9y!fAo@wk!N^2vC}3*@ zHad~o0cmSRT3sS_G}2iol*x(I3@CBE@Jvsn4*C+CO-0(QL~0F+{j@~pCsL2?k54HC zwkVOh8s&LbD2ow65jIE>mL^g^A_vb2Wkn)2A9;ITcS_J`{MZl+tRDY!Nicr2z zq!xkls!(<&Qtu$6{}RfcMC!Aru?tQj%1yllp4TN(=%!jiRc}Z-rEcnVRPYulPjff* z4+Oj^uyQwbCwShHNXAXkqw%)Ddbp{1P~tn1XdgG#1F&}mHqcEy3ISUsGR#d)2hV%L zGtx~Rg2*Za~Nc0QBH3OAJk>~o3S zLiyTF{Rq+DiRhhfY5)}fy$IOjrfx!Zeh`@QQe9vaKZ;QldZ~{<`AI0HUh3{fm=sE+ zxtIC}z01!MDfd!s&>DA1Eo8jZJf!mUg{4NVUHAHw3m7ZJiiO2&P!d4V*er1CVQ#9w!+aOk?CHl2?YFCvNOv| zoefp}C6W1F>NW`YTLdgZMw@x+AE7Mvs+S`N%91QB^{Riz6xh7P21^JUjte_P21yDHvp}^rm2GJ-;qLzjujSEm!ei1 zXk=+YbxT-tsV-6Tg6dmfB@H#Qyr8-Rkc~7lQ&8OnQpz-~M?rNF_!?`zJ_XeaQ0q-J zZD2w5wLmu2B^p*x{Rn8yG;L%-^e%#x>T0CdN~brgpt>oB)Yg^^mh%g$m;cLCZ7dle7Zp@DxDG2}I<~l=y8Jm#PG!Jd zT2Nhstx*-0jJPY1&l#RdYverz)q8Kp3p4glpjK9c4;zBoS@rl~&Kk(XB(J@WZ78Vz z?{Ms^(y>h_-vI0=(y=WC)i2zLA7{|9Z3We@x5X=yj(u8CeKGbdb=I-33kr{d)2#`9 zfp5iou&I|Y>3i*!eUP2J^t){F{ka`r>*gf^I~rXvRceZ@!%(icT z)cOR?5sg~khJF!ooS-=zbZZ8JS@^U0P)*>b#j;^Vzo0nuo7km=f?5j1a-s$wPt@nT za5iRb@zZ#*op+i8RDqzL0pi5~^}KaH-d@Uv7v0{I$$0|#4CL<#VRF`6vmHp=4tm+p zrp0gKdm!xPv`bxq)&rsubE?zaQVP_8#bco0^(QdRgrIr?(I<<_z^hg^qGCuZsEZ;PF7qV!jc0 z{M@RTQ%8@d#1?Zx=xxLyvc;Ugc|2XVm|c(O5l3_P_~lqJP2HQ0_x@tqpx1v5a5Thj zua#PA3U0bSi|Q>>-Cja`wuv{^^h-i<(r+~JHky8KEWXyn+iH26O}vxFzaNTI-Zv)R zQqzAA#Ys<&^7Ge6(_4h%q<1p$_L|-|6eoSSiC1a*m{@#@i8u1gZ{n>q{*qYyMiXzM z>Gzs=iH@%|@n$-{*~A;_`1>YarsLn3czqrJ-NcJ^JbAQV{!$%pVd6<0?_}ZyI^NgB zJslrz;)Oas#>DIC_!JXw;FsUTn``%azzzL2L$ASAX}f{Y=7;HlQpF|NXo1!_1cI{;6R@ia2(*p*OcCE zYO95yFAXr_5tkscrnGaJquxfIp9Ij_6(nlbl)Tq$H3a#21LO|^S)l?P>^8?%uru21xTOEm~2jba5hACK6da+Qc zF`!Na<>V|?)}!hg-&$>}aiA^$Wf7?p5DC_l%8GE9FCMG_<*tBg)|B=>-d5}IbR#LO z#ps&S(bqUKn0yTK_JG-}DV_7Xtypb;f?^%x3kcSfO2#Qg{k8z5EvY(N{+iNZw`<;g zL8%US&6?7yr&uESC{T_KsEz$KrEmHBR_C^rODv!>K*s3p7) zf%15kI^#n4sn099{7PG>uYvM*Ks9Sh1uc~N3Qu>DLScDEjK8Mz`UFSq57L-`oLy5omC0zdzoxYIMN6FuO5%5&aNpP_Nb#a0`+cyl*S_5Y?_-^h7FIQ~G9$1~tH} zu`T|zo`SZhf;FXNr6XG@`T(?_0cO{f?)y#&`Dl=iBU$QL)|9p`u+=m?nwjM?YfATy zv8BXUfOJikY}S-Mzet<&Dv%x_S%d~_N{6EpPe9Z;Sz0 zm*GzzsABf$)2BYHWKC%=h={By4S&Z`95U`_vSN#oHKkp>HTfNq$($XGqH9X$zip{+ z35u*KU0k5MvLrc4(G_aelpcQH7L}Mar6VS56`8zy9O^t4portE$8oWU(M}A;xSN$K z;!xo+DC)#J!O0yvSdTx|;Pse*ahrEVyz3;-u1kaP21anN4oiaG1_nQMKyYYB1oJu} z_-ehQyxq?_sz~nU)!^AF=p&1Gx6;~*GJS+U`;OZ%6~5E@@GAU1AmZNM-2vpfmdE{% z9=~@jk~?mH_4sv1k=zwxHO~8W6XeTX_nqLFjCn?p+@<#5ZVl%iN1$^lV$}O+H-aW4 z$lc*E8SgR+zpW{EjsF7S!)w8DFbGAAdY5{j{={c56ylCi@1O+k>R*Su3rS_vd#wN* zQwkBtUH7d@bsG9E&b44r#9-KqDABOD7<|g$M+X08P}CDaa|Rt4^k#4XgOLozF*t?6 z90rRRT+d)7gGU%_VDLJFj~IN*U=IVY7lOtJyc6*%>G78!Jihi-@qK3VBrLMv#cd+~ z+V>l3tB>$dlRmlMQ)lAwc@dI#+69g(zu_>5y8s058U*FDZ$Kq9T?fJZ2{Z3*KKuH5 z6#QY{{p%0ht>@j9RK`Z$&7Fq3H+Z+L19;!(-F?_b>}}`W-IVtO@9wX{v)_2P2HzHW z7X0ny9=0oa#k~9eBs^=vyLI>CSzF$X?hTGkynE~(P_pxz*$YwzuEnd-$%uLlQMSd_lJ%CF*u}maPpk(pt5sFs9_XmH zpLyyQJbD~|qQY14BXAGfyRa{&q?y%PPFPrFU9=8v+>G~5JNOaFf9yM$VP*q)XY_jD zecj{P0iK*Gz;hR>ivH`UO1x*P2{3v5NfI|$Xf0Jo{OPE=?(m-QafIaY7y4FNuXgd& z(=8f*fM!1e^muxs?@TH6%*EanSXi1wItyi?IYag(6HS#j(X9< z?_~gTx`EM>RTY1LaWgvH1$eyFkiIk$8ddqKI|uoBxfK>{0D0EH2BSohpC?SV_kszO z4aU!j0`jGS^)s+X`})$xp(#AP7LH&*>SJkLOrVE>-P^*4b#S1Bli?Nwq_=@}FtCSH zK8y#RtX_a)pa416z*-sD`k_9IXRF-05{t2b@RSlsw2^_WYo>MO-H1f19=IAm;D*6+ zDR8$NtZoH$m2kVCjfEpTe%Fw=wL&z}xLtSduo!SHc8oM`*I!zG)dhG`ht0oV0$zx{ zRg$u>EISPQzbm?M4}fN==&MZRymCoAC37C!B%X9{t;pX?ymc>;Zi z;gD{r>Myvz8p6pk9*?IO(vfIvs`-;$9QDk+lyxKeGjxm#LG?SwatsU$F2!Ok9z79e zl8mnGFA5mIOcBzsnjr0Vu*?EuaS3v>GV8I^$imx zhM4-2>2)yOm4_*5m?$yC)QL>LgXzOOOa+FC5<^Ta$keX4rAnvfDx%OZQDTTGNv1== zG$apGkzu055EK21BjuWSA&1#B?v24g=G|JWS0E6D5Y2 zZY0xOFs;eM)W9%NVu2#KhHxk?(-1E)P>@!$gT8rhCcs516jY!&GjVC^5vub&!#r z_qEh3d6?Q7CQ1x3%_h@PVEQKyQxn5Pi6N#jWSS4A-lyd%qS!D|VwP!AO;>Ew1OB6p zdhqEG3@UYaDud6#{@`=1#qS2@ZGd|NxWHI@vD0sQ zPG62%9H7pagV->7NiaUCn(>gZ8ZJlvtCNspV$bQm1TIQx36uBN5=M)J$%kkOBR{v^ z^SQCHTmD^VO;Jr}w9@p+N=Na&k2VYZT>qCvH6Ncz$Xeb}zCM~tumxbZom$esVy>n>t;GiG#gl^kJODobEF;_Zix}(mHb}p2Hq8oS{JS;bY}GQK=zc zB8e6`NsO8iByq4LQDAkuNvE;V;tZ$1&(gpoQe>qwS81u41#+#+aB{M7a5)6el#>wTeKaM zTU~*;eFuUQPyEal?qfth+d&(^&w#v#yD$|sm7Kfl;T;dxv3^dnmiJjiL`K9enVh*E zkJ%#>eTf^%z^}NG42)ELMj?@snLxBd5MzzGo%84-&N zG^2QApwDX9!fZyaKp?g-CD#@>9aU8nwPh&wFXH-07@eemcAss5&#( z7Frlvpmf^8d$@k(vxaTqXQ9`P`YS{aY~gPqiY+XLEiCu>v$k*wlFqe-7J)73)F-Px z??V#{0k&^oX4xt_!DQ4iP2c{I^M=yjudhUkGNdI?c9@eDM9V{fFrWHoUXlFrpcX`l(6Iy7Nhj=BP1 z`!;5lnpln(u9znH;-IQ1bLSE8;o$mG7@eem2*kqvR17<6{7Ch8kaP&zd+ z2-k0X*04<+EA+ZiCxz&NCMF9}H1Rz&vBKxiYGOW;&ecTyKodH3Xrc==aRb2i{md*i zF)ddUd>c|#l-Ua(Z*9bNOBkJ`faD4Us^(~DqF0V4M$F39MAB%2(y58Fa6LJXCKe05 zZq%|6JTo$C+7bVqC5!_==~hDAT$D zAD-j-K^UE+faHA$RLuft;<0DrHgVMKTul@hO;9>DaX+r#`K)1^*eLY6QE!ImfhOJ( zqG)0mG;zDnpS6i=k#w#m3Ia{&)S-!Up^5tewx4BYsfp%AIsF9RTU8ZhcD)Y!Y;oNY zMkgsC`4|FK^8hrlcaA2;&&kz9q0t1TQxl)!dP*Km{2}zZQ663z4L#6A0UpXcKn*zy znyAdt#BwB^tBJxu6FPNh;x1_7ae(d3%q%srU#?B?Wn5KJ<`>usxgFOZ!{{UhB%eW` zYPLZWPdpR1i7DsgYNE(!g3_spCb<6KvxaS=yU^=K^$*blO$-pC*u+X`Vx`ZYwTXL> zbgm|f0!`@Dp@}!3iDv<}-)3g1i7PN8jrExHFsLfZoK=T|i*el(MkgsCxe0-)ar#dgUGqcphyj+{0+eB4SX8RxE_9pz?5IRW#$+r-wnr_gIIt6sY4SLHa15A zY=33S_DrrO=nGO+lzH{bI09rI)`IXSdLueX0m+XLsG2d*MBf}uTugXO6D39yluk`N zhU@e^ns{C4b)!BA(F09P>i7>miV z)N#|;!ai9sEIy7+xH1QR{_MfI~ZyuR5 zv!d5dRZ-@TESNdd{72vp5O&_w?nP25a)OcRZaCMcbnXoKsFJeueu z^tw@lL-arsLxd=rxD=Y`l%t6ckaVsl8U>orsY4UXpoyOWw%zmnvTe_89dt#iD#{#( zZ%o?)**T0(Qb6(#1gho(XyPfXS@U1^9rRAZW147gG(qXq#1Xju$7c=O#Hm8B8#Oyb z4>U1Hh@y!#(8PT{f7T{;An9C9G!HbPQ->xtLKA-iY&TfoYvRgWP0+upswi_3zQpYW zWbZIKNdd_O9;q6)pQWmEH1QDOF-Ba+V5M1w#RI(2B`M`*%bh^(|gAol)xt|sU-R#lYQ?G;b;0&>4FI!OV^5(KKI z2Q={vTryFcSW9?J6HSdKD4m*k8rR)EYuF~<6MEgK?IC)gi5)@|O*F;q(H91BhC zpQDKv2#;x^wb2BnQxm&zJu8nU>cRcY9Fh8}35g%Cv(2S5{5IhwF9%%_RgfhKh7 z(8NG!q6NTq6#~)3gSj?A_db?XftWYZQ$uk*Jd93KKr)R$)m#KkY*-t&iPs2^X`;+% zg3_spj=28jvxaSAkkIQ!9UP(unm9y=qKWCy#DhM6)+Xv*lur|7fhKh7(8LsIq7q ziL-=WH)=tM9%y2r5JeNqp^5G}nrM1)K23BBG@(<6Ca#7issOeJArMWp$khZFVpJ7n zeu^C!$KpCEj80NOavub$<|An0`89Ey_>AzFCOQ~RP&zfS1lQkv*04?7FZ8-mPlo7$ zCe{d1H1RKJVztkowF#c|lG{&o2sEKnhbGoT6Z-;ek3b-r;725}nH5);R25~;XpbW} zaGf4TCn+E~5P_;G=x?c-98G*jcuW(0jV36ans^Dtc0!#2?b>s0J9D{wXRKoe;piY7Ak;V$#}vo_KD z(tMg|6=*`I4o%cgIBEpI_IL!MiM6?!;5wkHqRg}J#m0YJF9@TP6p%a;fvPzUni!I! ziGK)>X`-{y1f^3GJ#d|yM-#O|uNyTgL=QA^v=BuTqo9diIhxq-vV5B89B4wP4o&O> zO&kTVJq3YiB9rT>;o_#MqRidzWPP5JeLgKogJo{8^hAhNN@*iSj@bI(2AbJTx&LVEYVa zmT%>k6Ne+|TurnMG@(<6CKf>xQvkNlWoD^~DY=^9GPJ6q z%(FLR^CPaehtWw2NX|f@YCeG`Ha#AEd17%9BUuZlx*r*>T2 zS5*}C%F+0;8OW+II!OV^zYwUJix8zMO0fF7=P_*s*{b;Js(e*Z98`r)9c$~Wx?&sjV)Vhjh?(-r!o2|%cpBca zFb_ZTu)#{39R-snbmotP;ZPr+GaYaq9OG1d?!kew$Kt7dA_A$=hikB_?Lv#tUw*-_ z-QzmU7lhBV2~|#Z+9JCs?&!?5{Vu1RI88OZqc2OWrc%rm%RMy!eBVE+^*t!a=}}>6 z8A$;4_8SwzYP$m}>RR=gh+Pj87&!}pB+5+=?T`H4!|BINg>qJG!0|G;-tMO|JV@ns zJk1C{i*g?t%vwCLKSWS60qd~b1SnFo?d6(mQM_yV>7r1~i zKw3r;KvAA&LMY1XaviN|2EgtpRe^}R!XmIUVwOt1+rk&2H%e^ntv5#0sY$y(vD8K|T>YpVl5|7C(s6=yNZ zKWo_tJk5}ws~uB`o%tPn<9M*h#~vSG&kkez>_);D;)%K$L6ER)cx_gwHwI57M~k7Z zdIs0kCul+VNmu!2Eqen`GZbMj8J4+Ht^?I1o`&!vB2QeZtL(Xs2LJK3zM^U|8aYcg z%{zED4oJX33GMm0y0c`%yxN)DV3l5q`>CBJpU$g2?mP>tn_(8wd#P`grU4;1kCO-eX+GU78VB(9;t6h!wLnglXyxJELf7ryA zo>#jK@kdR3#d)>gBmTIF-*aAV5q3>KY2vHTtNo!B4g@msHRq{GtD%kmqTH#|wHB7O z&|0yUow+`$jk#JIU9GmhHs;ng*o|MnvYK?qsRGWDcjnf0LWPHWE+NPH$ zR9~xfI`&UHOLm@Hd(~99NKAasxwY3LKG4MH&#V2{y`Gw5(H5<=Z*8_FKqLnfRW$wcmjLfQhdbjILPIzSMgQGDp z3;ZDl8)@zHEMc4>%3M*yW}F?BcDS|AmoXS8-@nCRM_T*VzX5_c^OiZdD&yPA+*wg+ zqpU%_3FE7ZytJq?zTR20qp;CduVV@0yPdq{sWQF~UlfBKV~t!u7+;3vwOEzWfl!R2 z{Q1u)WUN(vFJbf^h#x_f(c`i>1{-G$*+LlIE#i1lWpq(BIVUQu&g%RdVf0Ulr%IL4 zr*~5fc7oNr%~Bxf&=c35hP9m=l{V4pJtPLBuXJS$Hp!|wg)llw#bv6>=v?k}ZdBT2 ztHU*f(X%W*W(|8V20Pj6ur3Cp)4tcdsI*h8?w=7xkG=TrRT)<~o{7PxS)B@R1cFN( zve=>ZHvGJ(wCPso?u3Q(#*)4hgUzt2MiCY&DHoZ>&yPx*X>~c5Fs?AkT9a-I-^O5P zSzT8W7HSJzyu0B1sI*yD`&S9$%AKs?=_1^`FbZ2>b>2l-s0g%>(HBHv7h0WL+!Tee zo&I@Y6n3T6bs%A(ym5*3>5HPUC06B0gmHaUR$7&G4uda=!d6)6D+%M=+V32=blv`n zDC{XK^EhE#x0V%bRmQdc_hPVTt%{Eb<3hhI`RhclyD}>6c`NPQ3`8hVD&**^qOgrt z=gx$M^v3?J@!}|Kla)R!CXG8XM&k<+{xi+_O{?uJ!nhqnHfE?YmUQUVQP{gy=2pT& zC8c^3*F<64tjd=N3#peycqs<^(CYjHVWA>$-^{{mqtZUH+B9AU7&pzx_8C>iM6bIp z3j5Nk>`z!IQSL{2AK#_&pDF22R{05paWj%^OVTBsdP5ZUvz57ouuw_4&nvSu3j4)s zx0*0+@{;Xds*Ek`+ZgOOtIKnXri>Y z4{naal6J*GgoW&lb-Hv}6jsm9oIzNqq=a?8B?>FCGdIOxZ1qpYV5N5Z=Ln0n`r2Eg z(wfA$DD8@sQCJ^4bAL=4?XA&WQCPKI{uW^&dt*EO^X@2Ygq{AKuvn}A z;hre$P`h*at$>B}MrkkH7lj>Vr-u?2lE%u~eSZ`-)^0zIuux^OWp#WY3Y%b8UPoA{ zWl`Fg2cxi)?e>9iLu2`b9kd{wIVax5zYlMaDjj)en zu-oj+FEJSNcGH@uw3T+cg|JYQp|snc zj>4X|J1>q&V-Y4i6NPQGGfxs0DkBw?~UWX}4~O zN_*XI*Ojo4G@9kB&qrbZw%Z>;Sjfm(giBtC!alb%a|jC+fv^$y@`3-%@bQJ6xh)T@ zaAOqqwVm0N2iEzeDC`G2^HUz!S25U5JJa-z+`L(vqSAh~Gu1H|cWM6+gZH=?kXPNpMap~~X0JL=6Sth3YQ5W+%5phC*tio&X#j%N}UQV1KM z_f8Zxz)3G7EYyeabAZcn$OZqIk`8uyyg(Sg1(2@-^!q~cy(nyi)8SjfLJDD`-^O5v zI_ZXYMiV7$?zX73!<=-VJg^DxM`5F!^!Plm+7F_zW1aLxd0=~e7=_h2=?C(_ntv39 zo#>?BiNRQ>|HNP?JDEQT3)Lx0`sK$_X{R~q^j*0MdF_)ZY^IYQ9)mH_$Nn9K&2}== z35z9q^QTeRJSTlaOd9jH;Ik-fp_6_l2IF`-VOKj9y$B0U^9XD6MHF^}Q*lfTMuoUvMq$gG%=v_c6v85WAA{ZIRNg~a zs0dWZ+h0Yc-Q}d;AnY&D{1+&~)_om?-S4D-%>%pbn<#9xlWu)aR2ucR=-Vjlai`;8 z!a{muqNm{mF#a>`be)r)8k0uYsPCh&XPxxbd0^E)L}4#F>9u)a?S72HHaqE0^T3LK zio#xZ(gj$P4(pATwJQdD+sSkzELK_X?~F>@=2RX@Vay zWN*L5VE;JjNii4`J>&PNw1PzC6|qDKJLZoltX`t>u^5amcZ2?n!Wt&pen?p8<&Nsj z{5J|~nn>ICM~lEIXoJ6^u$GDPPK3qgy}!m_<%#sjm^2#F$A3qqwNGTuCM;w~%-f6q zL}8s1>E$tLRLK2GJFQL2>Yk|FNZ4DTg}f_QTTxi=MEd(Y(q`LHSl>it*{WP=b|MNJ zm`L{{EL8RE2EU2Hh9oMECoI%kvItw;sI=Nd<)S=^K8Zu$_|KH|&_w#7SfZ4+90!Ai zVMit^x8{*{AwCff!^R}if8~*O3clY8!^R~l+dYu0kR$NXLKrq7ksd)c4{JhV;)!`*5AXh8Hx0U7>r%?PchipiH=_p7VDz7VjU+eZEhl6 z@?dTeo|a=ovbAu2BE5GEMk8N|MaZzUixQc!goTWpm33LeDD1LC~!fr}r_7E1z8(|%rL}9lkGHoAKG>yVmCdv;a zEYvwr+U^+a-bCiqm^2pQqh?WQ4<^#r680Bpey7To^+NL~?9oKUdctBY>pp))%QTra ziOSCj3#pg2up||g_H?2$xjG7C-e$Fo!k$m0dk_}N8)4&HMPV-|(nsfk9oRYw`&S~( zA25hZt7;R4y_rbgnFrRmZ4|aOk^WZ<#TzuH@zYc?B1?XSQ|I}avs>?swk||P5+n&c6PTYEaRq|JQ^)2^){}16jtSS96(se zkl3<@^oYWGx|I_Mi&cGBoJtw4g?-)hrFjx9>luX&a63MnC(%D*ut9F+wmgY`)+;LQ zKsWtQEK%CqxV@vWL)>(S$D#_6lI|0Q9pP3UOjxL-gmv9F3LEWK&WypBXjz{q>^L`l zb1YFdz&~QJ6WogD2@5qqO8cyDRN6^y`kRc)cPp-s!I-zl2S;IdxRp=G5~bdj4T-|;anm~p`wKLGJf*aS2S#BJxRu3E zMoUU*Cl8In9&yt>2@6Rh?66@`*pqI0OdeRD;ZfLAZhC$UMnh^_8-+dRX6_~|W=P(M zDC{LS{d!Cq^Y%jw_NtrSod@>LK~ZU2+;poo(ULN6>kp2?-gPrIgvIi9`yo--2X6Z0 zm^9YHC5J{~|8^^v5EimG7Ge6xC~SwDUK5i>*wHvQH{7zmant|K1KaQLDC|c!?X8WL zlxErfh$!qoZbcPgA?szLw;vgW{pqHUj7gI^9TkN+UgjLaLVBaW_qx$hSTnEv?SzH= zy_9yum?$jeWj4p8ai7D~W1_GMuhUM#Li-$83z=i1uy$T$vvq)lYJuM4JC2LO`g$Gq zBP`@o<(v3xby3(sUfUB13%!YR7XAD2QP@#l`Q?O#X3@;sWhX>oM|+k0xv_BGSXr$n zL}6pRiVp}2RTdL{CfLpaZQf*GNFoBlkTa+X_w%fFm}-gLn|Kvt%hYxxEJDXJFfNnie)&Um)x+BkVUourYP)@m1hm z(vh<4B}b}0{FR;Jr$8HoKz1SW!0Ik%ILLp8YU> zSIfPc%0&L#%2N{|;s8Gj{(>H|a21|rBnj+NY|NyV49>KX>%dF~S7*sn=Vf}!4R-AH z8EWD86G?s)f!-I1Cj*Y#i4^zlzKRE%UT9Hh;}o`l@aiYoEhzQZc$yIz*w145 zhzWtDca0>T_zLX2vsJ^HPK95S^CmNv(Xo+g(pJd%1sqrUa)t$R8a(3{*2pcaiDlDVn1^#vma`^vcS3FVxmpG} zeGpt@d8%)NGY*&qtFxD!q9z@77Y?fhVU7=<62QMPiA;ht+WO_F`3B>=_!?4^_5y3+ zv#430b#lPk4o}4ZBCO-84C{95@^Sd}skeLJcP4ON(-%`UXV*Z$REpIHwDme(m6mlP z3|oSGoq)*RI#Q>$Th3|No7caE7PB@-%p*}TO~PWD1Y&krJ^sXx&oyiL%-f#i=OAB@ zUt?%=B^$E&Id#f3fV-F+opt;vi1zjK)a%saXCXRNM@QqlzHWD-{=weO7uqH$WPdyr zEln2%^KicsfRDxFzfabv9s&4F1J){~CK`v4OpBH})#QF#%eL0(ZD!GsO-BUgAxScP%ZBVGbc$yJ5Zp*)akfVlD#$iUr zQ)tF&Dp8GJ#!hftKk)6dHjr^Ho@Rs%GCUVDiuveKyBBUtPD|d1hWXuZ;>{of3@3FH4t~8pSG_VsCy=!W+XYN`zt03b?=gEUFI*j zj?EMTgcg}8lk1Uc$gUe5^HA<|Q~LRwJ$H|4BuB!N~| z|ILA#f)nP>z06T>QF!77zsyTmX2|N4BB%=lb&|fa3#4?CezFThbm~s3n#z>N?SVfK z?2Y|=eI4j`B%WqOJj(c?lwo4#3%S;1ev<3h%hT>DI@IxX#q^8VtL!Jz zFG!>do@Rs(ruC(D!30NLco3dV_mNEk%~|H2l;ouDyNfnLzr_c$%Ros^(U? zPR!gZSA31~?hlsQGD(B8?uwrq~yCV{=mM<|I$yV3=Su@TYZK|P>M zsKY+DzV?L-_7moDo>Nrf@#dNVb~NNzq;;PUYaitA2BbCilcCtyd2&lFZSvUd678v@ zb?Pzu%LIO`VSlUHf6nmKG&IG9zL<`In4ckL-dP0g^D+STlCc}DrY~V2GQB0rZ8*KFkBkv;+8T{4?Mnc$$r+VryTpRg9dIs9_ z&_!p24??cBZeL`n4tVtIi5k%=0QSODvFv?NRHj(d8#;Q;$8`#Drvj%x`g^RK`4Z|w zw?Gv<){h6XW4fn?+<&*N*87}|0?wu294jY&UNZcBeC#EO%mK8k54|dY{v1HhJ3uEg zZ0z1xAN0;UR3|bJ$Mw!s-uaE|@MRl}_&V#vX%m&Vz>n9d9afk9urJ}P2Fqq*zK)E& zKT%81b}d6U`6Y4BYNrz!J(eYL&+4HQ!O69h>dqJe}r>C4N`L7v4^sf#6xwVEEc zTis-e2u|G+RiC1p!(FWyKT*1QC-ZBufo%Q6Ux~`-9vZ zf{Hsx4(l~V68b4KrBwYuj-OML&yp}wsRjYg&$hvpMhWI|!}_6w`XHf30WL_0>L`mp zW=TkB93>dJO}Z;bG=txbbV>$5*UfN*Xi0IgE)+SNm&G2m5WTuer2?5jA;{1YGEqnP zO+BF(YEe>c6_!c3wXYB4p3pXdD0!gs+&19%%h)r^UmoVC<|~410?cfreU*tos;n}c z#xxX`sCEaK`fc9|RobTlHr*irqFlqvG_WJY`9%Q?;xb{>v=YhNrIv4&ow_OCVguDE z)j8k@m*;GsrAw50P=$4H^VT6t?;54U-l&aPK6h0-L7^(uE#Q)j3}`XIXXqX!2;9(m zL{&%i?&TLh&}PrxYAE#A%hwt)y#tX_zKF=Z+o|H>{feCurS_4A1PB|_zJ5}oX?(>V zh>+~kdN0GTndr9OH!w{wv-0{0I%HtRy7~v&kev9sQffe%Z{^j!b$bGt72K-$6qx>g z+Hl+8cK>KTv461;sbVrE~h{F7IvN^8FOJ~*x2NcO+xR^u2D(O>9%^v8Z zD;8R&3(T>Pp$W9p{VEEID-y%Yvdwo`JfXlwhxgSwfToqI4Pd^VWD7AOS1_uUg*b>E zw2fil;3zj$8YFXw&~znLIP3kIEV+FvikP9pn@GNn=nGY3 zRdA%AgNoKrUPVDR3rFP<;}>ldI=Mm)9!EFvD}6M4YC#9ULXT-?h5N~4;x@Rz+dIiryGZDhiqHanZtxA|~Sb`1dfw_eWlI{k93PHNITn4 z$d?r)#EIXmkfn%@nBUoDfu&9>;e$ES#ZxR|QPC({2l+2JrA0Z#&h`5W zXi=$i_m+&!%UdYg?Rjihr?%Ly!YxMknr(>lttg9Dxl-p_euMQ5dqEcGSDPr`=xd?n z_mCjc?26e$F0hbAzn4MuLW`X_U(2FN(gK*pi!D?fYKaxM$dZAjA^{6dNNy_%sHID+ zCjQ8Csnu4sE@N$6W`&zMr76s6vlYT8t%^9BT#=KqF;zW_QR+&TBj{2v^omFV_!ou&IA zQ&w~U^;p*HV>+!!=#l3Js~PIDxT3UQMHwf*#4gq4l?N3qw5>=5QJFV}>hcmx=2$nG zszH|V2xl``7ca0NR^dDR{!&f1=n~dfYPl6R9&j<$TXiiJOXn$X0(`n6t7YJr7r&h< zeA6FPy-#9g-EN*%yeJw=1w29bcn6DMOo@rCWP#B>KO%>oFh~{O=_}$tBB@Q#YCONy z+~ud$8(o1`|J`^pv}|HoL#t82z~*yBJ@?2n{bY_jxmTVr<@?y))%~cn;tH#u?u6m) zS>+3!R+1I{KASZ&1lH4n@4?4G#*hk8}?;ZF&o-rT1UaF+x{&$spEu;9pmF!M(NEiwxB8& z{0Riv_YkF?wEFS&3(`4jTtkcU-v`B_)@rl%Ut5$~XZiEZLZ#MIdoUXkC3lqnl!cc< zWZ-F&JyWsh@$hS-v25u+S;q6ONEQg3Jz0F)-M#iEn+%?OVA zRqCzSGwPLdfw!|If)-hMG=z5|xen~_-N<9MY;6NuW6!BF7Vy2;bFECJwuKCn$-U2b zVR+v7f$1<&Fr_{;EekQR?2k}R4m=kj9iX7xj8z)|YQ9K{5k(@#DLvpcCr z7GP%#eo%4rJ^bga>7z8Q<%MvU&%^$hl7gY+KOtMx!vo1m{h}FsJ;@M+=S+TgEP0)= za?$OtG1@^$K1}~Dlo}1T6$T=u_MqDR>i#_fV59iMJQ1bp?&eQDUPzVF^!|%vvxAl% zqW+R+!(&6)-w{sA|0kB^@Gv*u4hCqk*x~-Ls8cxK=9?GV`2QDgpv;qC0d8EfRudKc z|C2XRI{=Hr{TEHIUf4_czrBIc?3vcoAo^JMIm~luI2omKy@670w2>VDpEjzP_fL0D z6x<|85%r&a%W7)eg1O#6VF=r8)+g7(_z?e>V^H@5*}kHc@f7Cu28Ozu(7Ts*3i^YL z>BP$eFJ49XZHW~^H(<~mi5oEd^1uh}0v(7IN?Jh!ZXe{??+ZHwZbIV`^t&T^1oJrk zIz^@X^Hb_R<_^>~mGuHjX0k7(`Q3kJ4p0?N#b_n#`;*G`lQu(m_b?0I>(T#Yod-SQ zMG>vQ4H$Cw^^6IiA(&URUI9H&i99jyRX(%$|fl$lL_AMIP*S9*Ss`xrkBsM>lU zkSgqJ{CWMd?#2FL_u>G_N61`FQ>%{q68Dod%s`0Oq9Q+y{H{R#y4(-*v5HdZYGuMV zC@8kyp-I8BYCRxOYq&-fek&!iz!9#AtfSC3h^(|BS%2k$VFl`;acER#EGNT^3lknq z&a?fuDx^WZ)`ne!BaGYgAX5##hmlGm`rz1eUx;@61=GRMsCa0oR>Cg9k=o;NSdjCu z7LBPNo|kH@`Us3U>PU0~cwKt|?v1c7>nQCV93@>uKF8J3zG$K4aa@fK)AKm4#t1#X zGJAt7~9hvo4BRE#m( zcu$C1DQ7GZpJCV!I5FIuvkpVwK__O%j7>7WOyeD7F^%(avhfE@$$Di@<~wguzlwk4 z<+_x`o+=rGe#1J<O?Pu@e&^1#p!7NJ(bKZ-oZyw7@2hl#O%Jh&yFpL?PtWIe zn-O=rogu2KcsuKMn<)b~T*GJT4&{IO-_FXqB=MO|)}1pe>xrD5eIUl4fTE)2YH@aCBzR%FmHFU~%L$+It}M^E$$huJ0Or9o(X&)^E*r8*}Szlm)H zPP5DK{(<+Nic7f4QXwXHd1OXQuU^*Sd!>F|3H*lO5ntL>v2q$;+F~eyzBEh5u!FPEuuv5R>iH0>>i1gi!E0YWNzXPMg7JSkRQwPN@kg#V9FlyDH@Xuli^vE z8IR5{J&Rda;Tq`xVy?oq#)%>-29fSX?LAy?G-Iq$yoXQ4a>tVSe!?7gqf8s0iHOlJ z;l8sm{1Svxm`TtEokWakCPB}c)@`P<$ewn)JfGzg+t+$EQeVhRHBw*9IzFHYEzkEo z29rE3j~q(9Wb`J=5xu=E&b>{M;%evK=7@9e6>;vp8o_Dj-oIkcjC1cbW6ns72K0Ki zC{k_u?dlEv)X#2UsaqnC*@@`^?9H6#G&Fh`vnIsE-ex@F)O*MD#mJ6Q?}job-SAf5 zsrO#UskbfG$I7bK`ym}F6?PT+J^Y7x9e5wb9C#l`v|$R!tbd{_HRQniccjmx57E3K z_}+D0^Ph!uV65SD!zwD*uOaj$Ms*YNCW;N3SF$g%ne?BVDcqN_dSES(M(?7(>W37S z`Z{j+ft`L6GMivd=jw^jw|W8*YfJPu$^h&y8|YGhpUnyKXdG5^#dG%qCM@|KRx%ku z{<53ZkTDr6Q4qcM^8e9cB?_V%G{;Tgc!}}J zWSvodW=&$HVHa1!=-^~9jf?}StTkq<9CJojG#TR_Ep0RFjgn&M)<$D&5`BwRs;OiX z<7BgNHnArynkprbzeVsk$TAVZLxUR-$0B=+F6{MSS4|ESaV?Bb> zNJg|?_X_8Ymew=;;z&nauW)kAB|Sxc&UF6wHl7BQN9z$fWKQ=9QWX7V-(~j=UKo7E zvj4^|Gy1c&Q@wB0=$JFTuZ$)jOj1v#FX|tpa*GbSH&e zzL(_8IN4M$HIsJVys*{G2=^<*n9k)g(_{v&FfR>2aKO1T#uLd9{Ze`yT^xoPCv3Lj1k;DP4ST zOMTI?-Iq6-xxAmth*$Hb?4;dSV?H-jw&5=e+>f{TP6(>(JAr9nWTinwdfcui6iQ zC+h>n!2F{2tLwYkB)1g{RBp^liXN20HydT-^U+WxpOga%m= zya+r>p+W}R^D9cxzL?jwk=~3= zmL8@+?_za+Z_eFpLDz>&XfS@s14?ZLclXn#*h1q*He@bnam*aY=x4+4?iKa?Y;4fx zRdHL^`~93rtl|!NXe@(U*n<3tE^~-is~$qNGhthfOXz(+u|?87zRO2`GGk{W|2cH`{K%G1lSR96VR1bH)>{WCT9@?~Hzg zz^@VL-!MM=?<21HAN;-WZDgC}kK_!QMW9$H@F%lt9xj=kp^jhL&Cjvi#C-N88+?89~(Suf|V`;>yyZQos2=`aMPy(gdLc@zMXD zlb}C#hqlBS2JzAV84;s>^xPPS!7-#PD%s38xkWCQYNnfiXQ|RAqn>zw+nnEX)AA_U z@XoixFOb?Zd46^?onPgKL#YL}?|YFFi6?%c&26?9*#7HjP*lu(Z5d!fNwd4S$d>)r zz;W~K#WpwJE{br|PO#n@duIIem*U{#&_+{ak=1sYEpPf*|Gr#j-&ZAvHPWw$6e^fR zTp4+6`YwDsk@K87P-=1B=VD!0gS7*Pn&jzf#v{)BYwYaq3ruVo^R**(e;t&;VeNWb zekx;NP27c_rTuryQ+_)sDw)gOv(iYf`prV?(pqq}jJ`5D$t03dAuxA=uL-vr=O zideC!4CD2>l}VMvH_om=Qqi*Crey@yVB80{=R7y>33ud4l{9=tVTYadcQP&grLk`f zcTs791z>SBYl$I~#)@c!QV#R0`J&bSO%`}!a^$4YhRPrb|hx)EhQ!7xTg@eT)d;AiF;#bz4i-Hai|yO?)N7_4A`^Y4|7 z!;Y1W12C111HhE`F9d~;BBA8FxJzzlunR#E4v|t$Lv(2leisx+7cdya;4lU_@Jc!O zc~#}iXRwsP{S2OF@DhX98NAEjV+Qy&Q03q!o|W?tgF+PFX~>|0K@SG~5O^aH6d%ig zg(;pw!fXUZ^BG)%px!kMmN9q`fwP{$W(4XTKKq!#zZrbT;1>ozFtDMLA{>99>NVwE zIfD9oA#kwOQaLpYMlpc5Mir$nO(;4E(Rwow6wM*wG6pv>xSPRx2F#WHFW!C1;AaN^ zFet_ODozE1o(u*u7|CE9gDDK=Fut|&nJH|bHU{+*L%p!fat|zA=MJiM8}l*=mj!mQmP6!$$NNbD zSvbIMmZi)vl$DUtqwq{{o@jDF&Xpm$;nYRCZ@e$_6=fA3cd(oKkK1aO+p*TI#ko$_ zXm=zpg)`lbxZ2&I1v}xMxtHq}R=X*ZX1b+kA~xFXIKpjrlH0Wqn2NpJ%EBdXy~2gA zRjrGfa0`)*EhZc9W7~e|Q?7faP>(@Rz`mvvu6g^K1{Wifvr!G~YyMXs!#*fqKO=q2 zVrx3sbr5taPM%IB5p*gEb}EUWQ*obwfCPJ%M6_o~uxCm9ubw5ro+T0OSrXBnCBdF0 z!JZ|-o+ZJaCBdF05$#kGFEgQc5ZLTqJa#Vy>|P4ky%ex}DP;GOWcQL}_mX7yl4PHn z`~Yl8b~H(LG)Z_zb~H(LG)Z_zb~H(LG)Z_zb~H(LG)Z_z zb~H(LG)Z^|b~HuoXo}d;6tSa8vZEo?qJDMarnq<(?6tkl# zW=B)Zj;5F$O))!~Vs}ZPF(G;?ysmDGh$v!5@J|@XNrjUJ1A^VtO_A!O*W0LG+ zlI&xW>|>JbW0FB1lVl&0WFM1cACqJslVl&0WFM1cACqJsljN9`WJi-^N0VenlVnFz z$c`q-jwZ>DCdrN_`6V=7{|5%_ZR)ePN&dztnzX9VekWOvckFzU?0k~!e3C8jELllH zR|f2hO4toq`!YJ5)UgOk+%y{07k-0kS~$RM^@Ur47MCn6b4%B|4QHYq+EdV;9=TGt zE{?BxTUY7De(U1M%~oVa=qHhmX>tE=Bf7M(XRUhxw>U7{(yhyY#(~uCh3xBYy_R<} zZb{!hj#25KsWFFoN=Wa03JC5TQdxfY0!9}zSk7P-0#8N*Nm8^U!`)LL*fIplP`Q;+ z84TH!Z5dqI_zO6rC}iU=;EbYxGl~MX`vOiTY&LluAO%IU$=hu5Hk*6_CldvnOxSGl zHk*6_CldvnOcZc3QNYQB%_eWN$rlV{z}8;Cc|-wQgw57&v$fl7?KWGx&DJhchyqR_ zcwnlszd-H_*yL?C`GW6Q7`FQ&w)zmtwou6AZTYyweIcbUmYp zO(ufbgUv==pN+aci%_49T4oRR=Hsp&8+8dAbqO1FNuJq52^)0@8+8dAbqO1F2^)0@ z8+AQ4>Jm2UdTi7U{@3iG9$R)jw(JtN?0T_@1M^bArmUw62{g?AJzZc^4$T?ZitEXA zp#|;|Y{fEDNU#+r*oqTuzz!R5f(gr|7-F9z>1_>94i4F1cY5X*0FD+U<`Js9+7 zFr2|?29p@fV6c$ERSa%M;ILaLz!_^v+Z^2Ge2vk$#d~hM0d9JL>vT7h70!UnnO{yj z%k6rpYmL=J$1MWUoE+xtZ@H;oTz9=0`wKuc$CNo&JC3W<&%yMz4Si&0R z_B_}fSUAb8?&0n`6BD6Yx1d4`aAopkPE2!tMfN!Vz{I1+nQkfiyrz04(uS7>ZYeI9 zsS4jfQ2*-Q8} zoWMzRN!y&N=zN1ZX!0Mo`Bt~hXr1!}G=&+Sk^V4>*1Yg+w_t%=*4=He%1!QYn~#7H z2!F|K&!k4XCAYcm7|mYnHUhgjRZ{A>Phq*c|6=#R<+^0Wl6`ZkrGq0P+@f`EiLW?K zH78^`7y49xrd?0edeKR~TH9J~dY#*8x!Yrv+h>(KaFtG>p5(zC`sv&R83nMeMvL9{ z%iV4Z+*SkJ0kF&kZtnr^K{GW^eUWUAFLg4O+p2KA+o`Y{OXzVDZO=r7!G^ri3{P^K z@N%JkHbJy)9V;>GNus^c8sQzIArl4S>X^F*5YLAcdSe7qc%nd(I+k1uNRbbzhbt4W zH%TD%b*%mlJSvg=l#WK3?L?{ft0_)PRD(Gs*4Y9Tl)`{(&=mj%>uAf%0Jk?T&P;bN zUIw@a;^NN4YY;925EOVb5#p_Zji<=-tGK?~3bGHJ;#b1^kln!UTIP1P`!~|5m$*qF z%vrn6kIGtSx1s5lxMd)ibA6rPV0}l?=G}f<-Qio^(K`%3ZO|Mc>@bCvyWDcWX*7_k z8ho;!el^+_`;HxM@g%nk+C47q3P-qukY@|Gyevn+8Y%XUc0GIl#yXh>^4?~SUv}O= zZVo7H1^UfXL(P%k&L;w$yTd(sraNV(dk~-tt;Gh~21Pc9jXS%bkPc4i z4%fX^m$RWXZF7XV^PFe74N)PT?5>S;ud4y(bady%{{b)uuRE^*Pyz`ZViLBV>TBc| z&%!%v(GEm_1DQ5WEXC7 zd$KkVh4`L@i}mY!nY{g)GxMF^mfP$LbS>p>OTTX`lg`teKD+FeYz>VuR3&Zm!voG@WV4z7K5kEPdoTl&+-AJ&Lg46*XC~T~?mHTfa9f_a z-mPH!thPNZk)wwBT?FS@lxrrmLlK_cw~^ab?$)_QC{byfxJJEQDO(m@^mU)g`m$9^@~*>5rRPSMo&Wi*@m_fdACI@f}oWg~m9C_ANw z*uRak3)Q(E?A1OyNA^(JMOrrXucPcjb(Vtt7@z%sC_BARq13;OvI`Z%bh$g!XYU?m zXQo2zJEH7Db(VphJt@mB+Q?SikSP1-QFfs^%fZgUknF99&$4%pvVR(77pk)Y?ECrb z9ir?q#Aa3ZNt9iv&h7ta_K)(huLL{G%*=CO4`rTn;*jb-h_VaSxeM&l+kl;oF~lxq z$!30AlwGLKJ^yF+t@+sR1AAXT^ZyTZZvrLRQJ#q=mCAnI_VWUg!3Y5@KtgD(TYI%i z4c%4QQmL!Ewr&ZScTS$H%&e+xE`I#e?&Cu1 zK7z+zq~1=833f*xuL7H7l6lqBEZ|?I!CaNSsK8t$B$J55RoR~h7^1K=3X(2|_H*Cz z6qr7E!mAJ81vc=y{oJ|z+>OMf@5TMNsZL>DLo-1cz>v zab$b;;$!Y~WG_Bpjf1DNpPPmZ&!;&I>IomHUjZn#lw(RnA26ji$S*?qAk{m5F=I!d1fS{9Oq`t&e3I30lO2MC_*+AARt#XH8+#B)#OZraZs!+Kq# z0WZ)WPv=Mj$_|ZOJ@l%pb7$}meLOUD%L{UR{tk8V6%n~6891xMdrcHV(_iFz4HP+v><4@&|^1rw8 zzc1O(z2+eRJx*^r`V9R`%GA)|1@^Mo`^CbAK3Uo9TU|8dtJ$wv`$XSh39f!Bcm3nJ ztBE^3ox5Jv^xNY#y*~R-)-$C0;F)V6BtcKUMjlcd@xQ*!AjB)O4-FkMS&6hupU%WOim*M?&JiM1@zaKCKzuu5LMzHt! zz4(>DEMlVgcJy!4w(T$7q06@YptTA_=K<+ftU~g{5}sPC@I@CCU(LP~pfq!&gE(|i zKJLpl!5l+Cp5|Hg*`#OVRk%6(Bi8T~oxBCZJ9?3b)i)D71D2UejHLhF9U@=NzT1F% zqbwt~henDmqF;KO&gg9-rh$tJH;J&(@km*m-*?|Ei}MqBa{@(Piq`?!tH4Ne zdu#7M zu;oMUECgGA1J7&mkwh;WMd+MZDDtTLJYUUz7SB5jl!Y!HkmjJQ%t8R8FMH@5pT+&$ zo#3Fi1G|z`h2^Rk1%BEcf=FFYV+dOQ<^z9GKJLr58gxov{7<^DWK(}HIh}_Ej}Gg} zyjEth>Ya?*wIhdzV-_KcyC4GDMOo{8QF6@4Xw=q1zsnsNU(J32BNKKLAaX*a7sSG1 zh&1Dbd667VI+XOr>^t2T2}XP|?L{q`J20Kt^w7}FA|Vg`uBN9v$am{cyuUO0(~<9p z38UzH3qtQLF)~5%ztqNXw=5)EI?{!eS!n6B@O!J=o`1Q_VqaJ*kzJVFs8?QQ2(QFQj*vPSzN z0V|Of*Q{+9*0vA}`AU9BNMv96*B*)NZP|F+`9P+~j-8F`)~%qc5@7ZjxVHD z{s@DBvug>-_rJM=5aI4WTZ1?*gIJMY%w=LNkZ#8aok3_cXFdF)2y`hcvF{E-R^n%@ zL0s}mTp>z5PV>Wprbx&a-SNvJ{=7B*K^AcoNA@N#@D%3#N%vjCyr0CoSlfwdwNidw zfEmOXNYu?@x1Vrf@zw0d086u5`Ud+;ra_!r^@-)-q1&#}#6jsXE^$Z@wU4@Q;;Y$T zwpM5mqDE*2jUTck{=EYupkWLC|KLtRB-_6N zxD*wFyhAvF=jB&|{PM>H`MpAvufdzWz>~UEndhy9XxBl3yBWM*6gXwD`d|OI!Ks_G z4_y`eZCGry5FiDo{xODgQ}#OmM-bZJ)Kt3K|5XA(TQ4Xsbo9Fc>KM=b4I=Yg)V3-* z_%R(#!I`hb!@D{AHfwkm&fLg2!|J!e86Jd|WZ@+B4e{*;TtFMTLI`js z{9SiTL{IuDfYLhIEMd=n?tb}|IIk?1?ZZ>gI@wH8Crd&4-?4}PKL7A<2Er!6CZ_ON z-xMCTz^PI4IhYYyl5F$z8BQWPX;(eTydSoC8Zy2l#Kk9VP`nmlBQTLG2JmTn+#j)C zq?Y~2VSocD=*sXKeL43UsPOw7Qpb^sdg9-5KOp*hfJ z441?)_!sCjUIlj${klZM-pAuP-ID#d^{j1IDwy2hU_=T_RVAx&b2vX85UREiK^&3+2=(fIs2zQ4Z-i{vtRXl{b# z5y(vsKxF34y(k}3c;koN-4x#V>((F!WrAi9Lc5!yhtm|V?>U)Z%>Fyq3mzEq#=+!2_& zSh3%X#c27kPkU%sb!!?M;!?@w51uD_M z59gG7^l##)Uy=PjJgq%3DQd!B({nT;K|@*i?>BFMqteebEmgW311H@s1^Qq3pugiv zL4Vc<{YS18^gr=If6tYI{s%tjKb{8tZo)iTcczFIZY5~qz6)Jw;?JZ(A9PoL%Y`mD z^MN$zOxg#)na}v3Kb8i4(3SaB7rLy>FQh>qbY(u_LYI~K*p-6*Q6KbQPJ_;rlh!@O zAouewbf!<)i)qkLX^dnJWnm<9p_oT~*oDqlv%j7OorMq@J4f+Y&^hofhW>sRI$zEH z_LYME(>~}=r$HYSBY(_=E*SZTY0wAV)rVc^va6p@gFfh4{b3in;QODZK_B!q{h$x} zUtTHb|IP>ff22Vl6yM+GLKl4hN*eS**Zn(P=(6traHXJsyAS$5r9mHbSHHIBkvQIZ zNK0LpDRKOr5Bm39Dd^Anpuas0`k<8HOD=Sw1V4}leNam9MHjkIf_J7t9~2|M;6fLS zd>5b-=92~dAObv%kpy_=F*jXvd9vv5`$qT^S8D$M)d&5*q(L9_%zV}d{n0e&gJQ<7 zxzGhOel`vIpqTL~7rJ1^<5vp$FZrPVBA_1}?*e!>=xY9gJ0e-lUrn3upwJ)lLH|q| z^eHW+ambt{M~Q8X^iSN8&3?dz&R4U)l?HuKEdCi6x?sY78gwHAzJP{kjh*ZpmSgtE zUFdu@`v+;z2Oax+T<9|PKS_f=DCPeV7rIdXXVah$I`((C&}Hm@kp_KGjQoBVy5Rd? zr$HZd?BDA`m$8324f>#C|1KB0jQ#J^pa&`6b&Qb`?t0~-duYy<`T5_dF*|WM|K|Tl zk)O;dO3|eLao3T~M3efCH0Xn__y6ZYm-YU)Y0wA7mA`SJ3$A=$8uUTO{#Pz^8T)@o zgFfik|ICFhWB-q7&<7p+e|MqF*x#K7ebBN0Hy65${XbtR=)dcO{!>>9`tSIlzb_4X zkOJ`BW4pv}_@I9%4f>!u=2I?ol6bP&pG$*2=&pX!g)Y1LlJe)_lz zUHIvz(x4A|nts-WE~n|&(x4Bz?vJ|AW!*n}rJ(;8AN2p427S^Eyp$pFZziH6T%B08y|Bnk@ zWP-mtOS0|{p`e5~axc@C_4hvL-*u&+ zf7u89d#@DqzxF}@{woFjFMQD7kp_KGzWS^SUHIycq(L7PXa2;6E;#d^H0Xn#)jx2d z%US*LH0Xn#)qNMboYkL6gFfiW{FVz{R^|g~&_3C#bMazm$Gm zxda_rNlV**M6HCQ?SC$9B?evRpY*Ns?_DYA@AX0dqbmjdT|VevNP`~45ys$Hb9<)` z`WMrn4|+C#z=bYn^Gj*a2c^<)ccBZFel89Apeyq|E_6Bhf0qV*(3N?s3td*`YiZC2 zU73H{cH}i#nQuRmBCid)GXLO0mzDWWK)>P~X3!Bm=Nr-6)8;$qYJSOuF01(iR|@(U zebC>T27OS<_XQWa?A5!{pbsjA{gDe@q_Fp zS$(Sy`q$E+4@!amsq08sLV>^i>ry1FLD&5sT!s z^Ry58Pp3g2bnL(FgZ}=3p{LmOf8B*Hyy?S$PEr|J#CQ?*xfc@*9XHaqaUBb~or3d_ zIrNIO7`;JP^HW)ax)i0;*0OwATym}oAu5r~P z{_NU};@St~GjGhFrHc~TVzCGTkw@af2xb1$RS<~(7$SX`i3nRp;fxdLxy@lVs_ zB=P5l?9*ma{WFVyB7W$m?C$*+I z8hhn_ZhS^=qkPzL+^=(be@T*g}%+EZ&|ey^tGyq(6a=5 zvhl{h<)Wbs;D)QEREbos8bWJ;+_g^}rn;8T(t;d$mPX3Y(V9?vpjORHBkuvb`6ly^xVi3RFaU=+dLHypY*Am1V#NaAV4-Ji?NUBUNqF-v2X-xE4 zZ^_4{cyrzK{}XDWL!avE5Se6bnv&s|u8nm+_s zymWxYgTE*rQ7sj3h!b6zAjh!&%!S2Qv;PsWWNlSlL75}Ay6+sHbz#XIe*~~}bw5sC zH3jH++-8onvR2^b7hG6;HTy2W;>1PFkxv+^b<*-Ble=l`7Oc;^u=r~BVZdT)09d?k zrnuI%&U!I%j@RptU06c8{}W*GngiC6!+)AX1>Eaq=wCYj1AgE-yzk5P`$f5#Xotw< zJ>Q~#;enT;Uz)tD?}sCx2Yg@h7uBK0wd?!*A|i%c;$JTWK_;S%wA7n^Eth*XHyCh^xW|22)jM%6X?b{szw z__+f=li4HaOmQdRP9Oe2?zsB&eiUl{AX;<054A<#hq0Z(&mHs^exJAg9?O0++IP%m z|4(#*xE{~H0zXrLdi&u=b1!FDqxkDqd`n}vh5troAYY-8-i|AG;`eR1a{J-O0OP~C zoABKXzN3-eiO)3h$?Vr*l+zf~Fy8eD3jRHc``!;O^}gJ-&)^qIE}LItS?cI9#US60 zWNvKyGx&A7_t(VXWq|rH7VX2iaXj@1UiK&kLre2Pe0LiU^rr0B;|dLF3|9#*z5eFx z3-K+Mn!h=Q-}LPb+2`Y1J%wZVW(Gg_jqA4_-o+F?gujksxhL@bQH<^7&*0Z->(>kh zbqp_`!OtB$s5^1%ME08ico=JR^6-a{TKp*1<^vcc{~x>mL45uop825u8-Lw}pHuk3 zUaIfu8@dPg;$OOkPx>={6C867PhQ=vzvb(X;om9z&>IO)=(ipLJx!lA6nFWL9bV)s z`VQ+ikAvPuqr&(2SC7Vg!gusO{Vw_&@4>%(2mOV=)$@F(9*xZ6F+F1*A${kL&c%^C z4=*x2JtjRPg0KF@ZkYG;`{X?`1~p0pL++Hlpy!>r+dHRs$jnpUt)S!C8NB&!{M?Ye zMxonnzzV{Xar~YFu5_~BfGam2ep4>OdAb3=>Ac*CpBq3~Ch>C%es0H4E_)-o$A0m7 z)ZRrpwS45?qPHXdm;J79p#C!G)biR+?v+C~ydd{l;s{EkctYwFKsux^>FP=6DwhNU z%Id59**x3->KS_I5taxTGJiJDa@`paEe)AJo2&EkEDN$UD*kM)uFKVX^|SohTwRr` z%v0%E{%o%PE4j*xKv(&*x%xV}N>yTb%>3D0;@L3Vea=eI9HCtY>t%VX4)7;x1cvl4DeTHv+f z&*r_1M_O3LvkI?R!g)fsOW<{WR^WExQSf`vs)-ltNx2OEN-q-890Coa5|z}t8u6*RT2=!L-9Qc?w$f%0dCPT6l%b%mrKhORPXkd2f#V8IyuLWeIs zF8*w8;u1^B3P7Xg&+6(Ybjiq<)3d73k$IA`>;ay1P=M!81b{!Ao7gv@#z$BAv$~o^ zdn`WEs!9@FcaQi{c?Ewt6QToTl)yMxvDUpP0Es`Faqy_5DiyDzJ4$8B;ff+O3jU0( zQ+skbm!H&42VP3UB;fW6KOvOIS^%a*@v9Y~;)S4xui)h;wf4#bnvqYv1LVC&opae{ z{zNzNXS2Nhw%OE;o)8eEDDgt@X9MCo`g&gw9-4{1$wqkTN`{+wEmgfv17ILzQ8)24 zk_gS)k47#sOoI$I%08hj5wE119+yvM1Os6rVJzjIb~7z^09ir88Avoz{~- ztMyD$wn8jZ+ z{8t`-y;fbLZ%^QdAk7~BbZ+kOuOI%j`~O^?K0`tLHJAXt5&FXz?w!WZ(ZipGdh!$$ zB|wI9c@e*l{>7O1_Y7bV zT)?C!@YdHJ{w)7Zu<;k)HHEt-acv4e)A*Uh9rPZ02mO5ye&{_k^W5R@m;RhD;=Z4c zuCaQQc`?ik(X+W%58eBM+;tao*|+4r@gcNue#Ow8*W_OOT<%pvH@zVD(ubJ*p@%V> zvo2ost-0)(_E;(8u)k&%s)B_2Cm}ZhA*9cUnNmEuYu7d=GB9{_yK^ zFZ~5fa9D0R#I0{%_+d4Qf6q|5K%(az>f~O1=IQxFm#M|`H=O1^Id925AI(MIDmTB7U;bD6=J(>|Uk^*k9gk4s zRdd%%(D&oW(Cv?@AzlPXl;9m!4N~RmJ%Ov&@f+6k)wiR=`0dZ-qQ`TSsvqukFv}kq zdaJ(S7jXlcZSnk}PG56~+JC+1ncNHS&3)^=)D)GwhQE|2`BnYU&r-i^G~+g{zJ~$w z>wZ>^_oJBAtG<%UJ(PR-Y1kuPkb8di^tC#`UdYPF6yfX9fiDP{3B{I-k031uU_6u9@AjFFZqgB!UQ4PjBlTYZYm-mu8exct? zPUx$b_mcN(Fy5JbTwlGsm)!PvznQ#NU%kASJfgvPXYw(9_3~bF%M<-(a+kh(c`x}H z4aPf@C-v3Kd&z5_>^GA;_0`LJ$xmr8-kChEuU_6uUj5O2Gnv*`FYhHkp}}}(^7H!Y z<-O#FkM*0$q`rE2FZnSI#ygXb=&P6al2`s>znP5dtC#nZ_i8ZSnLMViUfxTt|9HQd zjOweG_mcN$Fy5JbNMF6Ym%RL!`pqQLS1<1+@77?vGkH{BJ?KkBE`Ql4)J%G%Ke^%m z3f~}-+Yjp-yu*A%Up?qBUj_r}k)ap=vKr=hLK1$(N3VKb_AiDGzdrXW*d6c9O|D<{ zvfSO-cYGTp`VEnvU&gAA=@v{jfZmCFMQkWwkGp7 z{lrr&48Jxv^_JYXJPu{%4$&uG&T{!v`mQhGuDK^{08i^npNA6hqOaz1Z;`7j5-8{o?2JAEfBPCo+Br%KX(B&g*7!FKp%RUNEZ95fqd@GW2N;?HNFe;yGT2_?RO@ zf2gm15bHSdTyFaD++B{+I`k+kTA+aAx2 z2#mrT&z_!GUa6Eir=q?5c7{Gj(ejx}r?|Lw0bftm@#nd{t%|z1+KDFDitTEt(C)OV zjg7)~wX!o`!q-u0v)C$hTE%LoJzvV_$JVQja(;EBP-m#)%l8!9oAZ;)tNh&5@_oft zwbZ{wwhaowPNW3 zH5?6Yvec|^6@Ke7 zqtWGsVyD`O1pIDbOr7SbTC>>6RMnu=`pqoQVli(%o@q2&^ zTEqRoG~W(KBh~gQCSNJvU+rwtenvb(y&=!mFr_Cb)pm@Op+ewo$OF5}F7t_r=*sV4? z(FBbaM`fZ|t2Il6g!;U!7U{@LsqeA)tHW|`rk6WQEgo_-vb@wRtNo)BHc@S~D=pwF zPgT(3M5kG=maxY1rpZE~w7VNc(TII!=jYnV^E%hgV+i;+Ut9&kk133|ryLEJnvHhn zWM!k;00K0(v#WXm1xfpd&OejX7Jz1~zyC^TO&7 zCRQ6btvIA_swTeT`)yII_>Hd~C;$JIJUg~C>`+5$GTEAvay_%abH zSt7!AtkF^_KQ~6`N>}Kq(|!WxU6Fh=K{TvD=ep2nb_&h)n4Yb64zRdF6PHfUwd3G9#PLcAkPT&1T7tl>Aymq z`T`Lk-rUfpRC_QUO9PCr=JSSk)a%$80i>zTfha%_HFlDN*r74(XkNK=dWU&sG`DmDU{RvZnk1&&)xTFm=!A#)YN1 zwh(#Gb2dumw+zo>nZnR$j07C5E(|tiHmB`}qew{(#B+(36qrnFR?YO!5Ok(_$8SAK zq)(PUu%teOOrm04AOG3SW~f&$=_OIePr4;tv5@;GucK zekUP1)QY7_zFxK|la1u^clxLTh1TR7k*_qy-^~??R^7ZdW%Nh0RJ0f&)FjsHDGm{eXTLo``!a z8#XEuZrX9c2u^W%35~=VvD z2S-%|!Nslid^JBZUTv>b)+^8sN|o7Ww*kFm<1B`}Os)mW>YvCQE|2dt&x3lm@ceqEQ`$VyD6e+cRyR{{=??y3;v>W*O(568 zcn^9^n5jeZY*$WITWuC|ff>*@V%dDW@?f`E%dZxo9n{y_Bvb17oM_c64MjyKmU;2U zAM7@v5AXp5srHKIBo}*Rb00M*Xv#n;ky;SUgwlY;%?M#4hk;+-6 zjWO61FPfJ5qG%O_4=RmlCe4;MJz)6bMKbQpmlo<#1T#jZz6E>DHZ-KpY^BCJKs24u zZz~(1?$vx{QA;eAk-`<)6D*fj*>`Z`!(rIP8_)K$woKNGyR=t=XWEu=AwQ;!FcGv< zke?2$4F#rCh91PUaf%3}EC^;o3|7vG=NQd-1;%I?R8HHzAg|2g&~z&EP#}w-^_eKb zAR(?2=jAb&jfJcO;{gtzW9^E@I?aXV4m45W(+c;_6bMWklVuz=6B*z@81YkVjKd-k z0+N<_9Ci?mz}yJ4+T!{;HeXg&4cQStBOC!5&Z%Z=5%hD1)KQs9=rDL!&(i#8?bTsC z+1zT@o9j*e`HjU!ajp2KVrvzArNv8NmT^MHA@2^7Q19L;?K2wX9VERUVl$~U)w9!u z!bYRZrW?qx2_br(lvGHk`TXh$jW46nN%$CwDa1XCI6J*e!_P4EVU4GCzELf~oKP4q z3}@oMBkOM#22cBr)CEY8pr@EtY|LXdbG0*Cu5ROGmspq~qRTgBHY;R-#jf68Eq6A- z9M^e<{fPK*8PZFuxp#uaDIA~pBu-Y_c|}UB@AVv^`Z)%zRJuT>QL%n4DQ(%tNtkvp z0%dcAtjbpIGeyWo%o|0(H+VDEX)2vFP4f34u11|niXST}$y8eb?DsYLWpR#^PO4(-X(vrnw1Ka+*{Jk^1Opb&3!0!O@Ek%NjI;)lT{R z=!h&8NDU-}fXdeI0I_U=V;^`lD86W0TnS_|u=n=<=EvGQ#Vr_SWfhe4SZgOO{fdIS zl1>%gfljjkD<|7PF<01`ifheQ=Ul7UXp>bMwm#t3J$wLsFm?c<@}Ldkg5nouS0|OF z7>sy3(U)&3at%@(#gRc2 z6u!Ks`ks#zcEclvc-DmkKW(}^_~yg3Y|LG!i#yfKRQeMl+;gN%)+IOH3Z&Rk`^*sXPD zJEZm!5;`uSXcSsDv9EK@h03}TUfesTYn8@EXY(Gmfhao$mTsKAeFV{a0(R^Lb}W+$ zJxYuZmYWZT*>xGBJ|DJQEW_6Or51T`I(wOTR;O5`7w3#vXlE-8YyilWGPKJWFO||x zi0ub6m63XkwXD{ycE-q^s4BJkb*KZtzvBk zr>k=7(JtJ;8;wf&C@Ao)^bZp`1xl|`eww%xn-yg7WM86@T61T$+k#n!9Eai{(9c8( zlb<}oGIi_-jIBM4G#1x{grdzTE;_op>V^C?n>-YGBPd3aP*RLDY_@UhAsU55@N2wK zsO*+1>;W!pbz0G=^HFm-aR=yq$H8HAJtYfc6af8>gmT9W2(L4PoFZ;dqauYuK!>T( z=uV~hfJKYQc(s9NVZSP8id}Lcli!o|bY&#-U=*wi)7AEwZl@@u)%YvdU|#5p#~u;~ zfs4E}%JD?oFxzZZh)lrJ2PpxhO<;rJHlh%Q*&2@Rd;@xr zOu@$u0yYM}T-p{v%ObiimX}x}-`dk|q0=Sh71CIy9FRi7ms$wJXp`84;iV`{bL~E& zWglO7KF{(I&3}UJGN&d)Ly=<;(lvb$dkin+0tVn9!|aC|u)Lj#-NgAiXp&+24bAjr zr!8VbA}DZG#O;&g92lSp9a9XrVaq_S(k8wQ*(J4*c0>9^`ZZ9(B4o>fH67Sr-j z13=i^Koz4yEA|cxKO5Y^Qu_|Ud#2RVXu{fuqV!oB~)}d{|`p6PokL!TL5GV=(8?8~yxCLbpWR4Al|0qh$!5ZDp=80BuO*tD<2-NAF zFd+!CBZPO%=fTR(6w1~1R#W^gHd>m2mssu+!ES;~?rc@oG94Mx#5x!tXr2+kvct9q z@CYX?#+v7t>nEQF3YYSw{KzEiU0V=7izH4-_zR3*N<`#c2~v&V>BPCfw!mYHe-TO0 zgWyT0iidW^5>*`ka;DI2blYH>o#wsmW`pD6GIPKla9##Ms+$DnUHX`{RLs#<)%GdU zd|@N$Ie(Jd$wF;AWhZ8n|bNak5PzIerX4?09=R*&^qad zgc_KAnX;z|mtbR1npK3M_PF?^NlVn2TBvLkOMB-VVk~E&kX{$^A;p|9Ci$@K$Dv0? z0U0mB=}GkD%`>%PeXU#shnWRxZ!}v>lgxbVqnV7n00L|CT0&=alm{CGtO^vF8XMGC zq2d%fU9nKd+Q(SC2s8f*WWG7q740|K8nF}eCi18Q3YEhJZ^aoC5q@$RW?JaQ(PX`e zW1_sj`E77G#Ool6n7-wYys@@I4fWE9v4#{o9{l-e${Mh;Z1s2Zlln&cpp36x8os+r z^qVe)eW{x8OX%Pn3@9bY`;CV9ujpBy44}mpvpg<4g9;@9!7^P(kH<9$#K{|ESuG?{ zgb01L4IWlfL3aiNwcT&B4PsQ>P=+Mm_Hq=NCzOf;B^{n;V?pqc2gz|VN}F)OY&YyA zqF~@FoO!kikb0lHRAtz)sWyesMzzWR3>lT3sI~vDnCx>fCSVQaJ0ge|N8*CqxC`rOVSc+T| zb2~ptE`SPrx+|vffy5VxVJ(!};Jp<@T2_?iY)AMScbEt|0U;+H{gt1< z;Ab@2Y332M4ufNtT#n4-%~k9hzbV4ScC!Uf5RwgOiuYlTJ&vtuR&)xxkl@HO0)Js0 zbXKed@FP)(9zE-xJp?C;NhWAGv^FG&?)?Pw`1$bTeLOjFXbX?sW6m(km5;{O5uwA@ zj}x7|74Od;Rs@~1-2saXyxm3UOQ%WJ3Bc7SLKCV4qp>9#4idt0D)R|Ft?)D+2Q;EZ z;#qJ!N@%aq{$iGeYw&X*vWXyIyC6Nd;Vy7y3bK)n6DJzN8}3Ys<|RLUblgGYjM#jdG&vnB}xR>FHl?^M!qJU4vVvnJ6nXD5K1fdwi8m5_GH zi=-w&`Y1?;#0P4&kO*d)zT^tcVh>usC<}UZ9O{87AP zwrm6+{0e^?-^BRs2vBqre;eP#29Nk7hbZ+t!{5d?F*e2@gN{hB3>NoD?(!-KqsX#2 z$|^~^szCP!)CIcaR~h&UE9yD}%U$Kfma>T>^3XAjdHJ#yQxXUd0>AlzD>j)$QfgcqDipML+;d(WSZ)j8BBqROKOlh=>!Jmren%+zQG|#u+A;57M8Ymch5q+oltXw30K9R z%ajY-&1xAo9jqk+h3D&AHStU7;hT^&b&B`d@<2w>gPj8DOeJ!0tEmT( zte^3Ck_<)^5RFJ9dP@*UP`uZci#pR%3|UOd<6Y%IINLmly?=nGU{hAn9SfOR7;BsL zS@4y<@9#GW%}cyI07*S2p>l@P1Q29VZq^IMQmN8z8=G~ZQ{1@qC{vqTkJey@AkQFD zHz@x~z6LS1KHbQ+ z1QhxL{$Fe(-k^>c?=9rj-6K*rZG?^fgov`M6oQN0T5IcYxVy2Koz0>N+M?vhjLzm2 zQS;npBbq3j1q@{%fQy!bz?P7eME+z}0Al0J=$0G`-Bt%7xqTw};mbPLI0x>?(q!`S~ zt02}Ap`Wi-SE_;lI}b0umciNAlG8G<}o|yfN5IM;E;l3ZH(L(vgtkQ*f>W`vSs);$3SH%b13J>3P?FpunnPmaIV7GC#}LuT@*sll z*y_;I_7YMTKw1e)bYddW4Y)hcA_EM0mKpkJUt)<~V}(gBHhDru4Kz^<_6xNukp`Zy zMD659Di30OJFAHM)Nbk5BT$=y%OKa<7Mns#Weio@3l&N#SZrC@a$*^P6wV>(viwRe zqpAaMP+@JJ<4|&>;UH3_;JJ#}Q)s0bVm?AT6$ebrs|D|aV2BDpI zGf;p<9l>M87ECla$q{^oP}cGS!cLHIC{z6Uf#Wei$z-j1&U$aCIc!t2O@yx(YY0HSm%SPhb z>5UE{Fu(-m|Jm1&1+aj(*E8d!x0hly>lq4z68Wypkx-bG5pwilN!ZnlG-PSojI8?p zyld}@Wkfjmg4yJX%u|56wvzdRl{_rOvKj`7L_akI={ILU!*tfL3BC{GQ$J{NCa;9> zryZkGSl04vA~P7s!4fn84Ag5rsr)g-Q>LKmZggw#XYRsJfRx>4V|NLjvYu}_vw@FJ z+MW~DqAVcJA(B)iQTzh<=Ut(Et}$A#a(N3}vj?dO=LIHfi~6-zVz^`i zx=U?CNKUiV6i%r}VBhPoMchE9H3~yN+icLEh>X$NnORXiqQprCA5gqV-$0xpz%+R9 zkjO>yQAsg^cJmD~^u;2P_S3jjK?OQ*b5MA#R;eK{qm49QN@ylqk&gd?EaHh-_hS^s zOXrow=3}RNlX9ZZS>mS zvOSo0oNc}9rX_i-hIHCiG#0`P051_^QE1xC{L=8dcvb|B9yvo>p0F)RKj#!BDx8HR zg=s&CdPioSWLKi8#sb$Ug~70xKp{j(-`CQ@(rF&vqJ3&%64z1Uo-EiI0B6Hge4HUK zI|1uj3SWhGP=N`cxC=QP^$|%o-UB7|UH!koNlWdtT7rzR7svQABudz47V~j-Lyir&dTh=;xjYEW` zI&o1b?gY+syHlI4>{d!$%IF%|j-shvN(IH9mwE@)t6DG@R;Un!7)9q$BadAEWOYO7 zBr>}ZdM8YduDdws)RxM622m9%!&4ysNf83$73S#R^U;J5V=F*7F0wTfo33CQB}2WA zr|pSG&_-fVG3D?x0teI$t_uUjy$s!{5KW#{pQ(&S1KU&2gC+}eQc0)xp-KX-iQ4W_ zJZe?cCTa31V?jrwBsrgJ<{} z4E9ojy@mJCI&4>1DblXAAR=hv6;NTg(2Ea=aGjn>2o4&G8LSrr1C^qQ=3awcZuUQ@ zE8VFo0;mim*@Rx})d+~CoPA`fY$6l}MIt$0Ex%Iji2)%|bGdVOt+`gLts?hcNn?gT zShTc-_#@=F#_2FL04GRog0lCkC88UWago>d5~QGTVK$&-v9?s)tf4p^J?@hv5GcV5 z&sY$UP<&C_aorkF0A=-6OchoHli{>pthJHigh(N(muK<>Q95L<+9vbc3dgO&u+zp} z=K77wn<30Pkt&^rs|O2L)_8hJf`1%YqXk;SMK8q?6L_abd~=I%DUl}WA9d^S*vwiB z^z~{6PO$Px_;1-07UUt=OL+8j9FOv9>ohFpsp>n#cR96cLLnG^;*6%DuA)dNMYOGu z=7gG^R7!_2)12A9=bJRSGX+@R3Sv>p*hMM1JQui|$Rnqdi#CO+QlUeXk`h_L2oz*J zRuxiAiWx_~O{1P{qg~?xgMUa8TBf8^lO#^*6e%t^i8PHM74I9Ff-zAgO|sF$1b}=%r*Kf&_9zlZ*v=4STE@tLbX%;KCeV{m_qiIM zqm9uW_#!5N(J+Ko6$lF!%OXUW<|zT$fiP8Vpdtcl1Vj5$XyDTt<3pYhvYhcH0yGKZ zoKjH6A;TCRiYHYh26A*^3#g3(!+V7`RRQ9s0P`{flQrG*%~P+x#2UA&2zTH-CS4$? zfS6ydS+;H$E%OD^!C6Vk{Ma#bl7XNh?GT#>R^*AFiX?t2Krg+gC@H>^fmiG@2ReR+AwM?j^=5+?fa;*38p*T-f(gMZ6*eLAO>19`;(h%y~AX zXIJLcMg+ENeVj2$|FL6aK&OyYR^$(~%^`2G=utTCo0~LaAF-C~MTsl%iYX2@TCP9i znxuMiOJpxr$sg0pr%_;zlRex7)obY1LIbrYGxg%$nuL+7bLO+0`t=f335R4sIz!s7GDi88 ziAhwd6hX=P_vKBqo?9(CxfuJ0c`ykdibFAk)d&v&O!=ws~-|}iETG5l6iS2 z8Nd)6=2&zrs?@{9aC0=g0k!o6*DfRzc3ZvKBGd_M9%a^-O&m9JeHf3e`+dUh!Msb5 zL6|OEbLge4x*iCIK2nfq@bFgnP*ANJtmx2ZbjcTz&1BRKpE`B>(x zXHZygvjgw)o=#>2qk!42#@5w11#bcd+%DWdCJ5);X3;hm#N@$BFobGgSDWOTo=V9V z3!REav=3G^#pz*{6FUgEgZu;gVuh5g)#iHV9@LaY7zoh5M=?|95jSG^yX!5=&7?$X zx>*?>fc0^3D%FEwZG@pI8mA8{aE-a89UATOWpLoi1}LPIFhDfn4Atbg^(b31V7J(& z{u72rC&6n2Jk!1PEiO}m3<(;F&8MuD#AsEzM<0Qh+$BQLpkYv~Ar=`$d%+uvDB3A$ zU_4#5AePXUd_Z88^K+q7b7F=veOz)j|8LckZ1%}9e%F?eIcDx402$b|4qF+Fj zikHw09IumsnY7a26Yb108p-eC0^+SXGBLw$AYD|H-lyW4rvZ$WcH~PK{hihsVJLfL zoEzL4T&SQ9s};8PJve{H(?PI&;tk|SjuB%)Kk`Hi5lsbOR)M>ff$QOk#N>k*ALwXQ zN@@%Wl&gm8QhPQ&Q>qSofwTvNc=-iM)zRS>`UvWP2uLb~1mxCU$rQ^M5O*z(A7?Lt z;%qk$A2g-MYw&U61KeK zafN48U6H7aRzFRfmw%aHXl;_{Cw!KJ!Y3gWbwxObfb9zPSyEN8fN!Dt8xb@FwnH0B zr(HUjnH!S=T>;FpTr6#?xJVJOeCJJLX1=#ZXRoxbbNF3tmr$?A&t{_LNNFsg_(-9> zS6`EKMz5w+O8Nu?b`&2v_m*a+DhV{Kn18u4L9*RTY5Rhl2tDZwc^wsKBcaw;0NOy- zE0_rLfTIS5pV39DGO2^-_$e{Yg19em+&9vHY?p)-UE|CPD(E(o=*uHLGAOqKcy#me z8*fzEXcQ{gsI*bNQ9CCr5w%C8oh+8ita7f1?=8qi`Z=Dd7>TMuUNzBM-oODn*8jA> zq^@4W{20+?rEt>zt@zjy%pb-TXU)?mieE;+Bm@SwJ{dAK&b1nBWgSG^s?=Z%?s6a! z230GH$&3FWu1R&R z;zYh6P6R~@lSK!^B82F&2^gnjAr_6O{eoT_BS;bdi`k+?fZ5}d@}x}gdxfbf>IE^2 zD$8t;^R6p2xG@nVbRwWI4$$w3P{PraF50ayksVElR&+D4X)3{G@{lP}nzVPH-k-E< zL8*f4%YDntASI?G*Q$R4>lG<9727<=l+ClU)vh7~j4%ty5f32PfYwE%2?~(2n*tEC zJHG{Srn#dm&s4sGD-SGpBz;MxE)k5BqkVAmDJON1osHS5wwccGE+18587QmH%%VSu zIcxDNzLIP*VU5^R!wDxG|BX=Hd8djK+k_amZN_e>=7T6b!6^u&FVMPpi7coU>&3b^ zjG?F?mRxKA4;tB;#XTIU3Y-DU-AZe3o@!nYY@di=9?OqY9)hZmniPap(yI@EeVh?O zL(LV15YZV(;yZ%eV}H!)epD^C{IGLZC|sKx4_R#=6MjOaun!`BV>!Ymso?oGC00;V z3!%Fd*2D{ItHu#Ut;1npm9SQn87ty3CVF0WmbY0`$R0r&_#8I~ z%r8wFixLmpzfB(2=-VdB0bnRewb33(AR|#{am18{`T=hlrT3D;s zZkpo8TCuUiz1Or(V(`tuJ<4jh~c(~xO73tZ?Joiyr>klMqS7_ZJ$gu z#uz7Z1tu!CZ*5I=B%`*rLcp;4h@GbMqjni0$S8QOxAi!K zO_W$MX;-Mc=LG1hrVTt6W1qo!V)8*MWE3e|Dh0ivuz{q7YC&H+ZeqVIS6}D6gk*3U zhhLzSd8@nCA;^LfKH<%~Yw(>(dX(zg4*$3+KSqEIPa8wHo~ok|-obuuzC@F&et7GV zUT}obTU%?avi;&KWZx_E8>I$P1}9R~Q2gp_@hk#S77N^3iUUY8=q>^{Z=7J$f7ZLOjW{Sq1Z*!ULt9Xo_3hu6sdO99Rli@ z#8xV6Hd%hp36@~u-rnMUjv|(tmmmL#EjL_)6SY=RE=6f+VFkvEme_E}5mwGK7y~QG zJkgZBJAE*zhJ#VuK*5<_{|1z9CzepPDfQe*C9&(+sdcH+ai6j@l##(R$SlxAEPT}Z z>`0}o{FB9W#SbME@zP9Xl&;Mal!YV099LHgEk*Gw2daqd&o#~k`GMy z01AxX(`{@NTdKNv1g>+YS(3go?Pyqx2t?557pfz9X{#u7&NBJii|P@l;Qfwp6~r7w;0 zAhF1Kus@+N7d;ys$QV}{1_cxEudyg#d6nYFwwt9&3#tj?`c*kws*XZ+-DHGtg2_ub z%@wuPbO1V__EajNnt?J+_C@N2W3EnB@G;~IyPS=Gcekp=FOvRx)ho9y21|%*D9l=- zgc{;{+c0C#dl1@AMIpdmbC=lqR8W|)_eKfF4buJGU?gfA)~ak2s7y7go}lULe4Tyz zDCdSTQJ62S)g=rzDe;M+B8bTS{6p~>cJ?b!Qy8n*X?Dd@=E+gpt5W5u*!4mnlM(Bt z{9)|Lj@^I3%nT(0Qd}Qe`sh}lWPKoqC>Na&!)j7*i{Ou@;0TI}MN8LW&G@5@_%TLh z^;)$(+6ySLa-#cbdERn6a$rzNj1y3Gm*^hT2Bv?C!jY*#m$IK|N&TK;1CjA7%}oqs zugHf?kC7HKxV^!{-c!6ma(#f`J*ufOV+$f4K=d(b7eM!V=I*oSkIvq5OEh^jif$jf zefa2Y^-i}@xoZQ8NUK`H$6~9rdDrgL#BCE}M{nCWdK;XnccCXJKXcpq(){ev+t!Qi zy@te`cH6gg8#^F-w{g3pHZCFttMtHakmEYY#cs9$fLgqn3zR~$sV_r~z=hJf^_g)K z-KLTM)`(V_I`rh=VowV&14@Jhmd#`H^`5PsUO2|{O0>o2&Vu|Nrz5X`Na~big@=X; z8!?|C^*E;RAiLOb(J7vdrrmMvY!MrJ09#?t^mt18J{43aOBR+$RS}9jJTM-%QQD2e zbQragxbi$z&9tjgCMkwvH5x=;q)x*U(bIoSGJJKXtsO+;NEV+5qop3hRG^bnd3KkO zCXSyHe(dNQ*o~5vaPpbO4w8ThD(dGvGSH;#Q(+EGo$AHfTy+DLt8v(RwqbHh5-oEW^R%o!#g#40(@0EiH>}>AiwDg27L(aEV@BS$n-t7pY72`@ zc@kjXX&cTN#o-fsAelsN(ia?HfkJ*90%-=z;X`_u3bgI zYy+w_8V}D?(-KUm4ymHvtrJ4u1EHCbI^=mW!9+A&$64=|IZJZ{9Lywz<6|s2evJ*` z-nc_&m~O`zrr@ao8P|hw%DyTZI1Gwd5>)`$E~YRSVe#P9BsWaP?b%0V`ZzCKq)lE@ zKe~I_qm?|fOi?%@tx`l5K?=^q3rm>}RRFb|nFB$vs%kwtTTK{Ztb6%EoF%}*jg zBI{h!yTB#5Y1*VJP9Xh*+C7_IsyKSKWH!>%4GUz=u}{uBHmSbdmq?MUfB-7HNI)tJ z=mVbOZmOGj*dpZ1?!&~j06k50w{)!G@bW$S6KoAsPM}OeshHcaKPOtO+wx8Yx7#C8 ziq$Cg5dmv`Cry}M9L0d^uSgQVBAEt}iv}aKOpU(*0ZpRAw zd?`cv0;lTG`%I+b*!`{I7M7AF9xYwe7Z7-jyJAk7t_O$$;z&VG!dA&RBV$Q`-r+pq zGPWL>skH5#NMJM#4{-I?C( zSkR=0y;h>Hv+{PpOVScxMP3Don3n((*FzOHlbf6tw2HEcjI68E1(aY{RoG*K@-LIZ zqD$n=acn?v!oh_p{eLKN3-_9ehVr%S|f8?Vtfos6HI+lMl}wtu?$){S=2lnPTbn zuB^Dswc!XdsU;j}vesQMAeNDlD2TH`VwMO)H2S{A$JnT12nsENoxT~NJ-lhis|^`A zpN^#*Y(hfA*<`0?=B3c3JO#sb*~ux(ZfRACK!Y92 zWvJbSHe1HLx#%BP5YB9D6`JeoI3hIq5FbNql;|Z(=k8g_pO`D0Ie#wy`odiP)QR&8 z=hUf+tNIcsYkWbw4`K*cQFktG4u%ftc#jyq4dsT+6e}^RA~SG~qI_WSLa7Q0#w?b( zFb6y8S4as8Vx9L$a;Y(g`h>_XblECU zDZNjOW*2YPln#f3ibbrE90iV<+9+PTyCPcmJwo1{OR8|HD~VVzji6;>juSTd-LSLB zEF?C61!1Y+=;Gb!zmEOFdA%ZJTE)Pi=p%BtSi?wMN%72sc2Qw{`>BJ8dgB~5B?m$Y z+E}78{+B5ug_NrT(Hi*(C~6V*_TbbaykkC~89}7gotsEcCu!PLvBRE_m5vX3f7Giq zwLw9@$n_rDvS1h;pbb&X+A5S_SeC(B(89evuOT8)Oa&LuH^dB2bzfk~ahPKO`kAE) z9@;~U9LO-8WH|-B;yzc4NJ?CG>0@3E#jXwh=Ha8Gp<~CA&+6(q4^j;OfzO`iV4|DV zdm3&X&y*{qr!>iA)oh%T3HCw0K5@Ec>!|cNnaU-gf*dI=l&3)KHboyIngT>obPByi z=1HM6fxQ6Y>IXoR`{l1@)|;hn8*MyvwLhE3+Lh*w(Ew2&Ab_G>JADpRfUb@w3Xtfa z1Th73FW2-SAC&Z?f@Pl?=rTUwBzYXDUSb-HU$VUXeER8LMJO{;G?? zr4OQH>;>HEO>H$kXpvYh1wVV#{n%TkBZ}MTi31&h50f0dIAB=Lo{s2E0sT*$A3I zNTh_4TObTd2Rg0s={qm6OoZWZSW&z5WU|Z@EQN7QqZTT?&2L~5benW}Ti?)WOl)FY zOD9cCQHDPx4dXz-{OI+BBwCLtVjvP~0B=pnO09946M5{IvPF>;hvF$v=j`o4p}rPk zywR6zvr>Z~MglOL1WK9aQkOSz=N#2Q=QaJgW01E*B=0b)Q`HDc<|~ZkC7I7BNoaQ& ztO_x4L0$A2oj1zE@KGfM1Sp5572I*D!kG~}b-T=Bd7HwAiNw+B#j#gYWqegY8iPLG zPU!K3nQ^nl-5=t+WINqTOoBc10);1P>!m1yQk;B~Hq-z?!^$%1kaO!iPDu{z2`m1RJT@&TraRkcS-czP^`WL?z7Qsp$0cEF4V6$ z-Ua<@DVA+<9pxZ^pKwXTT|l?lg?q40!qbC7Pd|CnPUuS>ZI^efqSgvgQGd>~+O$a! zLh>-=m&(v3 z@+2ln@IJF|Th=hG(YL0wVv;hi1=ptNM29P&3NBhy@HVH+{opoL4)T=nWCXtIIvVs& zmnyiOUCf?@&%aMnCVdmB*VJc7iI5;+@M9V0Qo!XzYNgT>lS)K1EW!?1gz_2T^1NcI zQppJX8C0nRp$yP>Y$q8JUln~b(Wc}}4l7dm16CXdnTOe1=VJsH$m-2?OT_0UEr*y| zUMdgN9tW6gB-PB?^Mv!FB>iA$le~I@Rp*pRw_#TptgMS#BBc&W*q@JL3D-2_N0fOpL z$tci8Ib3=T662gN={H7bx?*`Dl~ed!rPkf((*CQR(YNNOx4P|36tgHHG=k&n)DtTd zm(5YI5&t`qX*8G7O%WlKi7q;^gOLuGg}+|K?((Y;#9rWkp`bDnK9$g#qWMfGYt);z1X{KrSRO1*T5QC+DbdHC~5@jX+SA zkeD_+-nB}Bod`-Jsb*@;ol5Iu6REx0Y_hNigFaXhw3%~TG&djNF=WPRB#jr77!T3` zFC++%U1u(7YM(KMu8$qF-TE`O>I{g z|A@vZmK&@i=&?3~7vn#+H`{S>K$unZ%q|n%())j+Tr1Y$xzhW%h*Fx`yfy;s8lCrq zl0MD_{}uKnX^mzA1d+5k2H?L*Z$7^4c1MjFs@ z9EW`fvosxo8>Z9RTY-QfY8l3u+sZ#2ptf?|~!*RqT;X;2Xzm3+*(9b}<)_Ju`+ zggwOE!1O1H^k$1i^9gJ$pB6{yHcJc7l)@jQb_eKxKfr6pPF!PQ&9-{sG z4G^WoYt6)5sS|3#M5j(KBwxTR2l}BTcq`H>u``)o*jKK5xCrq?np-E4`lp>cb`S zW4F;oVATlpB(WpX9WhCm5NA;666)KVJmUMh&>|J!;zfz7{J%tn{bXk zQ0O#KY>YhBw6WN}-WV;{M-W*S$-Kjx1Bc8bTEwwGI{GGVHHu5zE$ zMpb&hl*E=8UAS_Ta|E_i4xWRrR_te|sx4G=)Ddkfl}@*X=8YRTEn;8oSIsvr4w3FW zp(Qme7rWEX(hWZ~??KEnP_fer$4D68Qi3B42}s~Xh`yH4aH7&Ep&4o1bRsO}`0R4}`B#g>N>5hXvYx1kFgu4NY1?VbR-umTZo&T(-ASxR4AmEb;WC%&I+~&YFzIHY?QA3?&hC z)gTfQi!FpRm8&?3x(f&lN+><017~Q(Q&#L?#yiPSHr9I(NHnM7jF$!Udw^h}Q{kYo za{Y8#NH?fNgw$Q=ZEW<;8~#hThL2Mp>(+sS5=@>{_?3N5@Fl#`q-NE{7Mmb8p(;Ln zY6h1S?8qJ$zfj7%4a*PJxkdIAxSbBJu0m5w@hNy@649DH8gGFN=3CTR3Wo{l<7l{< zEK6obwH)`wD$nt((QP2qwrITA)*TjBq`MP8F({$;hg9rBzL3<@L4YAzlB3c6un2-- zxezXxP)2vxnrkQ-(yT#C;dl5q)=Q5O{N(rs6!Fn?){!nEk8u(TC&pnUviqddVNi%M z(sr_@1WQT~lvEM~8!~O8jWlIxfvFoqctbPH+T^MGJogzkVpT}&?sE>~RBwAI7%I{b zhzP31ir*SXvMh^CKFTFsnGKDanbeNKN;zyfG#0(O+AqE|FRn@ZFDg(aBSkd{cN zz;-2yX{M|rveC5adBTpe=)?B=EGRp%H!HA6!Ya;d7(i7Y3_&!k`z2_hxZB%$1PL}w zocb-)w5c@?93m?OMW0WM(PsHrbc7mS#GV)64OU2(bZ$(T4r73EAkF~F=+@(g(X~G- zrh45RDmSIWhS|AA=Yy+okh;!SfZ`_T!4t2nk)2F3R>#i^8A={0tVsqw&P0L%*}3Dv z8GG~-F@1s&B5MP39+L%2khg@VBqj02s|3`lpbaiQ`Te3{K?zg~nI1}@;*wa+5p1}O z*=x-(K*EB2)L1Vlu$7aNlxjoNR+D(b=fElSNkw!D$qb=r)+}6kSn+1u91wX*Li@&; z_Vq9nK2<0Z;c*Q!%oJ{`8Ds*_0+yMcxE@>oOJtIm*d8CBE7_^Gdg&+!@@%)BSEZ?7 zJ5a@krIr&#-nRG17g;N`(Qj%)N_7SiA-IoN@j%jf3er-I0xA50>{ZM!e0C^Q zOTdV{A_MUSmbr8&CI{}u?RuBVFPcyxTSrM zapy7>h+cz7L|^O;LXYjkJQ&>?Er!Ao>N-l@LL8sof57VSy5W(Jj*x>UB4I*Bcrh(y z8-ygmjdSQizFH02Kzzc7HV}i5_gW9h10`gmC%Z^a(bAl1hsph^W=V3kdQ;iX`e^FG z4$4QPPHc%A-4JafRwA{P&N{l`*eqSFE{W0MV06G6^(f3ov9gKS5vflK%~k&m8v=*M zn?M|dpoz_>A7j^TyllS+LG|sZp%2U%dxdlD|Kqo&FgH&^6_!*S9pqSoP90!$7@RS4 z#x`s#7ZFAKlpQ*bbb^WOBzmzcX|+d&v2(S17%4di$hULs82!tsn8H9&Emrc)$!lh^ z%h72OWRt0f-Wo(wZdE95UU^0xwqP%|@h{Pwo7~rETL`y%G%`gMtCTI$egw=9L*v{9 zs;EHhLNNAVM~I?p;ti3#?vKaX$J3MHAzt2H#6rSd4*dbe+D~DqGhHq-U(I z+jy*0+F*58SWLRrGAull8`x~si(+c_4O?SCUOJ5xnp^D*Mc>n)%x(+o9$q$L4nTuA zHA}>D=*~E$bA=ThDg*O2DYiK3&`^ZZ4=?7~5NB<8EpD3?4zulHhA! zqN8Ip(M+|vE;T9-wB-qtj+z_W!(pP6f%ujZ?W~z;BJM@*3cfuoXFA5DezQ$jEc)0J zd|HSSIei6KR3QyeTIlQ5l7s}~z)|gAgat=&?bC*i5lahx4$4%XT0N>yB6(f7F2|W- zr-Tq9Ay7!1TmpWPC@5S=qW30AmX%^Ez&ef5lEH-_Qgj1${n!~#R<0XTL)aVKz2J0o zbefD1)oh{9JfOS1hpjGDVGZ@?H$lk*R9Q_qz`OFhh!jBFlBvw9SHLPSO>EmRxZYyY zm~PDVjM|Gr2H<(sB^3M*4nhK1$22+z^34h z%b-(-%5fg7hk}N*WHi&-Xe^?Mk*xMs+1cb(2p!0At3j_`D640^QxDG;8H{g; zbAU2NKiH#E@Vr$_=+e)LR;5InR#g{b{Bw#(6E9zC)}#n{(ijpA zbBv~JB8N@fUFjeKiLt;(q8;|yC;t$8tKJ3XWuoyt?PhklG(`a8yefKrjMzVwRgj5e zncbQN?f8z^3}8lMRiwH!5eria?v!_+iboW=x*OZ8WbYB*Z&FGD)VIv2ftN^vG65yX zr{uJAbPlHi(a9FJPGF;S^Ez4CEN)kuEs~LW81^QTR?lQ{Y#xC;D6&v}6O=17`a>vF zyG;Q!&2EPpT@#VrMv|}9e|fcoioZzsSH}%4Q@V{NTOwjhY0$z6*^G~6a7}|eerl_^ zC1J%(?G06iMb5UaCG!X|Q=+Mmk6VbtWPwg4{6IA!v7M0KUK;K5j&WI&2bda?w)RV( zhLX%v%^^E%4(ZEK`w>gy%hjoHjK_&1Q#Dn1SLUiKsup2bB=T?qAUlN$M^GtHZA|ZhSu2wiR+v0iqwwxIlRQEj7jN=m95w@G%{||7f6b1 ztrtrbD$k2>3pbBps;*RGF_P(pPiCydR^rT?J#rj5nKA`qgP~;-vIQl0l_P_cKxRoW zUfb2d!|}JMs$Z8jTi(vjSiOx@5fEk_UejG9=pck{uGxiOein9?2c#~@N#NfD5a^b> zl`irqoi@1ttiu-Z^U`U-gk8?w%Mpw!scH#J^7`KZVLLR$)(-t#%b#NY!;zV7KNIXZNZ&Iw*|Sh0NZq+=HAnRea|FvLG4#l{}zq zh}MyxCgI1blRMu&uTtPCE+?ZZ3V{5etdJhve51|MBY0r3wgd*ZsoEZh9Li2(G#(l8 zM@I@BHIZDRWwK_`scLnC)p)jTz+6jYiR`rWuHez=CqWq&mdYyuMU`bayE;*rhm0tn zPZki6)hTQtXt1z_Qj8S@#PQU_Mz&!`tJJ1K^^nSQlM3QAPo;P!9VwOw5uABY&M|Ux z8p#p~feUT_&!F)!1*PJ1}3@z);Js@a4_+v#;hLwfJhc%gSJRQE{BgO zHGKj7nMz2^kn{#1UbV5^e4rv!jQXSTdr2I_OZX%k-Nz1wIKU<(>Hq;T)_2h8g5Ib1 z-vmsE5EIuV_lXDx3({oi0I!UZFV=i5e}fEMRa6>0pGRk%otohcFbS!jI>Tv-C+;0>SliI*qYT4*TnY+N}dsbUXQa@Xq97` zHp8MQZZ+fB7=zGrwDHBg<6LnDq{0{}&mwJCCG?WX0GGr@qa2>m2!}ok-){?r>Ge92 zpLw_}P7e6k@(uy)i!h$k0p)V%QW{1mh8QT$rg);pXkVp^fT5VEjw52Z&khz6#35OB z@8p<#jiDJWss`W{BvW98k>LtKs|VFsygJHeeAI1X^25fR`F?pimIGE#Jt@C9FGg?F zH590{>^%-Qi4_uU$bfaFr`U#0msNg-xUxm3z6Cu_4*%)2vY%Zxft1R{TP!;h>q0&x)cqXTt zqsBBA91{(CO;9_9XlRuKL_Dp$Y>?7w)=WX0lp2LRN8Wu^-lTjV#2d;}r*sHxC_>4a z?QV-tsW;l$G;Fj_rWtiIfEH~PmGeu-{KlwhlE6LARmOuJWL8h?X3%F6H4M0zyViW2 z)SXGy4gkW9Iwgy>@_Yvtah4vm6c`PIDj*`53eZxkWU)A@C(b?~=5I}4UH;(Dsn}f_ z83kq8=)y;X7&XXL)F*)5wy{%*g$B?on0N}?sl5h$(d){07H_R8;z>u5t5zwJ0~a+5 z12`0B+3^K)#Nm@IpcPk5&SyHUVx!H??NDi$+^@9$-t8Y5)zu+P!xT&fBq-D}<=!R~ zS!n>zn;N97{j3H)-#m0KT?a$ee6O~xK3OR$#dxQQMFJP>VaTbnA2E@1*^llD$bNLm zFZ=No3MiDqx8UKVLrOqgoHvavTsno^{K9r#BIY}>^#{3k&?}=!lpwgr&BtR6AwbOz zKpNXX8Lb!v)P;UKY7$G8=P%waTMqD%6GS~d2!5$7vM0Cb>yh1f%yRVWB!Xz*Hj#B6DTgQ#3Lbi-#;^qe8LzWEN~4^>$x@32C`YaB#; z0Lo$a4bqa7$&qlqzM4TMy>c|z;Asq+Bd8KuJwv*TTa(7HR%pqNp_z4_St5G0{n`IR&GI50Y)jWV2{`$w8eI) zqZSt9hv^oVPHikZA#%=1$Rq zhD{Frj;OIZP;^wL1a*c(g9PrpwNaYGnG?lp7&I=DzC6q>5-aP_tJ~6@fxO-ziS6gv zF=9fxgV59~pgyvc0Cld(+Tc>TF0${LGqeIkG1n~9EGu2}KITS!ut=05zv8+MVAU%J zLa?afG!4ZkEV4Tv@<#fIng)VZso>9Jyzaq_~U>6|NBBL}5)Y zW|g+9iVgUu?p=O6d7t!&bIr3VrOZA6V6>OSO#9((Z~k$c5{$<=cnf+oIcD8%L3FU< zjzOTqHR>cMhsU?a9#*bNs}kYiV?%&^v33HbpNe7}z?${?UfBT$-va^-6n|T6&Ed)I zO8FEhLaf}UaXph53i&XQ6EePCtaU3f*U|f}Gej>i!8{yp9K)nhYj#B6BD9YQJ<0aXTG?tkm{?)desy!|Q2o};pGymWIbc&& z9o?dg>lSN9XEQpb8j~TdG1b()VqIC-1RwPg(!J}b%wk+Zn)|oY8H(Gxkvl+37T{W= zl_pUSMF?im+A?H92R9&VcO02xRSW=EAnZK}tR@SpE{uPPM9I`fFG(CUNUn)6h^3#U zCCXgbrDDbtCq!0)by37=);UF95{VU56neAVg-kcyDpd_Eq<8hPHYTGDIj&vc^+yHB^Y zd85?j4l@l8s{}S74A>AJ>nsJZCkR7FKh^8vybpybL=l=>OX&ceHWnUnf6-zc2NIPK zQ5X<}5~XZ8u`ooGeOY0uTeW&J$SH$!hI9k3B+?~y=mMX-9?OleEmh}bvQ{fsw{<)_ z7ml4qWWpNxqfk4NA*A5`!K?ji>fK{ulN3T_BvccyQQu@V>c~Y}W>5TMNu^bS5hQ(v zb^;$l3=zV)XjJYhE9Qx_9u%$Q7Ut9JuT#a zaBgn7y1ovJIGXcFsn%sQp(;tm3T3n=V@5QlVpH#{w8%ZCV$emOH>MrG>f+fiyRnFU z##|J&o7&k|B91FwlCGDIO3$P!>MCS{h=^#lq%8QB2BtI!9 zVOVF}I!iJEuR_QsY|X7$n`hj!=Mb0060Vn2oJ-q&9QTYrZ`9ntMtGhP_RS43v>eEl z$5jM>VYGmj4SgsZ46ftCjVNpYXH^xoFBCe}Iu1CMX5#a!+tE7S$_YVX;7p$TkkZx5?vl<{6VBMqKYa|6(Dq;wSob=y9RZX`oAvE zB2GaAyu0f!~%q72e3zjgi@%K>L({P zA8F{8q~NJ!#O-7Qb&Mj9-v}C$Zcik}a0vJuLp32fGDg{NaB@04aE&buh9!wTFs(0l z*_ru<3Y3_g%q-$kDrMv)mNgy{?gmUKY^#%v2nr)mx;eZ$p*^F!_73t!I@Dqg+P%)3 z(DkHo?nD0>v-3n@l&9M(kkqRvP(n2?@PY!UM}bW}#z3!DkRK+hlQixBP2r<%k% zB6Z_)O#cKTDP)1QI?i9d$3t_;KWpZ4z9D3sVuMI|u4Y7Zku@>QMDoSl`IJi|`H1yf(@_^)3@I6x>KFAvS=?q3m5k+T9wYbwvIFw26 zCk4KM6^LJ=h4lCL+Ep*i;lSQmMG3}81k7jP)~~c`dscLfWOkrnx^FXthos9Qc$Wkc z!^o#|5UlnVV`OO;SiyDnkXT_yEZ!xGaWj(WUA2rqu{eUKsxZ9j0?Z(I{EV3j@Wq%* z60xCRc@%)AtUMqeh|MCmA9-aXZD60*SrkkKt~haBd0O(Rd2Szf%1~2uyH< zK{_0J_0mMEYaP?$X4|sL0fXysD(b!|l~o3@-NQ1WCb0 z#a1y@=ry-8@jGfvK4|8HMdv&jBaOi(3#V#z8?l)c4leyr>M#jo;gNW{ z`a<8#7cVUZ4yl$`|37c<+S^8wWsCBs)ThCjIeh?AvShhXQ-EyIT^he+$?lrL#k~YY zQWj-CRD9?$IOyMg*V>PW$jpeO#G39wO?BC#l93TR_H*sEX)UVV+=r}`FqeJ!Qmd=l zort_Y`c7n9xzoYfPfGghMJ+&sEBWs9gXBDmJ^;4GCp@`wdF7d0x1(xUQgf3S736P- zW3UF3uM5L9@WnjCji0|=ES4jr2y632+jM+-^(k1D#59JDPS+4f*p=wO9Q6BuTaE=d z!3jLw{mLH?b*WpFa`wRV3gqX4VQr;J_Ycsk%opsXqa1jAzSSPUS-(y<iSE-RY6DXjYz3`8F zBgfaM9Di{trBka}{$d7FLp-GNeI^zE6U?TLAB;ahA$cL;B0U`xWC>`R8iFGl?lbV3-3$Y za3mEd+;F^0J(%C#WV(+&fv0GH+6jI(qyGIzP5mE!V(kX>AHir1(zQMy=5sE0!tA^& zD>Tr2-7J47MuuuV;5rFpuA~A^SLQRRpw%3lRV*nIwC3>(oQcC601(Zhu{e_A|0+_S z2#m2Cp!D_@nWNsdzrfeQY%;|ROmd?2g|ur3UsObFi-Oy&DLY|>GxXNM>K1%I5Cs#( z3k-xEOb7nQzm69eN39?P>_){cybr;o=QeX5Rn#<%4g`hIHe3)|ak%}O(W4uDkb&{_k`;p7xR50~mp&wGr+o`q&=PK`wdydxWL> zAyb%;ohRZQjeSon7s4>k6b*4$$O?433W{_fC>u=JL#jELNC{V3|Pm|@$6FA{E(dZ=ee|Gzx7ciej&@A>d01K)Y z9kfmo{tX%ZnVvXV0PIgi~2Jz%(pvz$iZbb0X}wv z7(!iH){W)SyKP_#8AS1cMI)Zlk>hPcZVMWKq|KGG!i6&4C*Zs)5d#Pwy>l9~oUVak zR1JaW)>H7^?qGDs%EAdTm=cc`*PcBm3)gWIaLe(vM)L@ZHpT8To5dZjRN~MEMGB3# z8pxoIvBE3bCp6tDM~+cwm{Z(AtCS6yjR*`EJE}(u6EPGo5cS%bK3VAynu7y+-i zck={^@$7S|q(Ppml$!|)zr1r&$pE#hz{ZTxFa7oOsJK&GnVl~-m&e0DHj^c5;ZmTK z_GwoVVf}T!>zuLCWMj*GZ+rkeR}c*3M1`^Q!vgcfrC&{ZbkPU`pX>ygAZgLXr9-4E$`jxabTdB2QNVB+>Rgu|tenA<-qa05~43Bi$q4X>K3ib3T5JI76Zx zYE|n$aub?9W_X7u*wv_ItE9kbrvA-xa6J>tn$sWY1CeQGw~s&ab*5bcgkv#E>%F`| zCw@;+O&LcxqVtM^+O~gnC85cX#P3(2BLV-tGwj7(M-W+JJGP%~S!=be2??gD)%eTr zltaB)f+|Pl9q|&71InpXMBgH7!0iv( z3QmPYN&KlF$e*%0USsHk8lotEq4c8TE_2)9ZbpGz z`&dj=2=<@7%u{c+BZTtZ$pj31o8@Y;luq6G z=GJ6MfLOg^2`xl+A?{?K$XXL9?EWuLkJNehauJK+f;KP0v8m(eEBLaU}3G zdLXoNi1T{ZpG_=nm3T(Z>VgHA3@0}F^Tm1}qXbW(q@i*U!*O;X|J1`4dPv7iDt?O6 zmYi%oOP+w6wi>YA8#!X)`Rnx@BG0}%qXp_RV<4(&jIPTgRatThM3-48334{^1DN5Q zK}3-mkPYV~fFG88)YnTZGnL>kejy+;=!KXgMm399Ra$}3YjZn71aa|Wa{HC$kI&!g z7Vcbk^r4F3l4X-uIP|O^zys#`@Wbuu4m+vI_2*y86QbUp^gZ|_r%EGz+tDM{4gZI4 zA|St8tJhjrPHWh7FS12!`DiFC|JwPq_zLjB8;&|1hgM?h7U)Z`X}-S1plER$EC|AZ zWD?(bm6h;Mahp)TKSSmko#667Xnvf&q*f1+UFYAczQPZnyCw*Dfl+V|T9P62v5{U1 zjT(k-cKGA{JwDx_6(9lB^3&%fCjDOG3c3r_A6SQMHFLM`-nM{H^(~V$WW7gN!~kCx z$pR!@j*f5mOUs2$fvY7q6Zft{pO$l79VZqmM#*Ac5yhwd$~O6BJe=%B{&+E~2~1<2JOyGNO_qxF*9_wUeqA{|9of*0h*>+{7uYVH(= zOr}E<;Amm5gg^Oa_Ikavx=}k6zB0RkR727zJYPt&F!n=y_wn&PkZ1}*94Gk@y9GDQ ziBJnPsxUX=9^~FX)dTl~TbUisy~?K3D>bSM!an)YsB-^l=wkRVCt4K5>t-x$Zex?F zd-$aWj1(;j0`43$gCte;ei5j>Uc3cR;~h9JLP;N#^^4^(Cj`z|i^sMU-K%Wc+Y)?k z&?FbZy$#%--5k(uHynsKn}f|-*kpHFW+l^`tg$g{@)g_&a?Zkkzwdk;kKne*O-zEF z{0!@lg9qU4XQ(EEY$0x|&jny@u_}8&N#J52QkEnJ+K*Uz?7r5~w#dDN!lVskPFDRt zy0Zom%cznB}?&zJ*d)shrhLQz_MQ1W2T+1{lc)s~~G;*>vnL76oetiIK=*8|H(Alp}IdpzOzEn&ZByGnW z5iAqKf5|bm{Aw&MprNvB|5s=zfVpt-<;5$?qPs#e#C3%vvj2oj?5(?yv=tc7J718f z2HeA{DK2S8$iWQgXs8J2kpKl4qgA|lqRKOE#ls#rvFKi+9uEJok6fyZbb}9}5X6|= zZ@uz{LaHl}%8cUYi>OEaM7;er`F@SK_>>d?7!SwV`NzH_GRdBJ{6YTxNw6qR2i$ru zGF}i=BnN3WG~^JwVNp(Enw{TmG?cWDABz9=%9BAA{Y0)%;jyAj7B{54wv7La#aZq@ zIqIC%Mg^y=CffY2UQYsKHh5@)1S*fI;n+%Ey0V(|IFUIAYq zq(L)2OZaHdCqE2UB)o{xBC@g4GR{{CwzCpUb+t>*Y=Udes@M`+zhdn>&6m zn^P2>Z2HV?|9%oZK?;fIo?#NH5$JJ|b^w|f%0ST&eo`@*KD-!gmdFlb907kfcw=bF z(<#g9?p>^pt}KCc`tI`Vj!Ag5wkJ*C5E9(sH=i0SsF3KR6eSYDL|wN_D`c(IhA1uW zN%=bM+XzdHtr|cE&W4fE(q(*wvJm>4aLWw4S!;)u;4w&o3j!8eTu$2&d59yIny(w} z){&$I3CNfzUwF*gBZ$Ct6pIK%^d9n5;m;ht2;L7|GRdgb{iS;!*nKYuKQ`WhPF)39 z&eUuu%$aTgA>IV3XS%ts!-Q&iukz{S6o&<%EfdZX-J3D9=%2zr zm>+&Y3rjawatXnzLN8Wc{N3JzID0h%)7U7@wZ)pVm1bz_`Xt(pv8gE6_oMQvV46U(8C!9 zt(~!+18<-9iU(iXP>6_Zc)V|W2TL3D_(@vm@PHAU3Q=C8rAj=33(2TB;4<`OLTKd(bPcLX55gXZ#xDK5y9d6XY#Vn9wYV~x`j zaV4TAoB$KK^mX^Ng7uPX^v(>G^i{};3B+C9j)&4*4guOparn+^tP)36$`(Gs#SY_d zuz)Nk?Iz4B)+pfh2ncAc*{EMrTz1hoCgTKJP>7zqFFwD`u`Gq4>Rw{gP?mG=@uw?H z=#zlE;-g5FiX)C=c>pD6~h_WJ$RUH@JO(qrwA;7qy~2e9WA@Iv9CO&veI zOogY|1n3L!$-Ne(7&aOhfBGb-HGaMuFD0?&4HdaXXQWcir{$r^{KYe>>kc^W%w15A zfzDI3S;N6df`H<_7qcc$-;PkV1Km9t@3GvXK&y8l8QT!IRTB2pS}Y_mk0ROTDN@PY`m}V6IB8Q)a&kghGYdTv@3%D{l6_`^F&|* z8t1&n&f?dd&WxxO*P*1sw!1k7 z12uueQdjuJ^Gy{V6uv1OyO=sV0)@YJCVS$AW#xljR35f!^PM(Uf8DYV{tOUW;eBvuey~FMmWgdR3=#>f`0FT4-ORq-bJ7Loi zcPauJko>6*y^y<)a61bb`X#BXS|n%ow&awyC1Um~)ldst8-S)KLy)j?NffAb*E04& z$sk1rS9;d@>vVBBn7*YC#e=bA_|kD$cUQ$&qq^NU(cW{ZE!(89z{m~y1^K=gn zP}4yvJEqeA&;RjM7$_1&IC5IA5)pG&V&LyZ$B%x;7WMTfN(LzJ3YsC2mwF#|_l2bc zm}Y+>$f!nSlKAp^!;pKv5ZVrgy&-iFoX7w3@9{r>Me4gMz<}c_PeRF2f5{$6=7J&R zfTusAqp!2N)gy4r2Ci|=s?~{q%41a}awX9s#O4{F7mHO|6J!?}xtV%$kUQ3jlszEs zEXwd6n=+wZSe*)J_UPgkRn0eJg5DM~kqk%yAp?*L@w$%!ue3&p+cg{#vtqFoA(3pV z)XJ;ogrdoM$u={SW`j>wV7J}@9UIS*tV2Cpqj#-|2Z+6($&5G|I(zt1-qjRqMP19OJcp zf3FuC6JqTux*Z9D3S9I};+nj8I5$SAESi8l< z;`q(_OO%+AVd7*f0)P7OKtz6==)go5J=a2bht2;-twt_ayhc!J;!WTtU9O;WIPe>* zBs3rpz`Sou?1zv5YYzS->{`Q@gi^a74HSA_zkdhA#RknG+Dn;UrrI1;k@zR{T4)t( z%NFkLKnGAav}4BY%Z3$^SH&@gnz20`jBYkaD*<8_vfeBidcEbo_ljs#miEuzr>Lf| z*}Xc+MJB#Z_f*s6yx&>np4J7a)5Xb4=`WE~7VJ$;W+yCAt4F$J<98e?25SWKsD5+F zVtF+}?Wn%va~1Hxu)h-E3yRP46|ZDxs8rl?Wz((fzLbmoA2`6t)dW}fVJN|}McH+>$<*1@6Ijy+@78|m}hi)#bKV%Lam5~;fbpbmfooTSyX1x`^UazwH zs*7{YtB|>SAYNcNRh((AO@c!?zuDqmROH!9WyRAcQ$vI~p?Z>OP{{P|0<}eRp$d+5 zCUx0M9qZ%-lYs#!pAs1ByN8n`63SqIjOr8+Rl$v*4Sa}E2jhV?hq|Tko;$a{pq z3!*7yYSzDMt;C$Mrr&b0t`1Z5Oj-Tg1-f4;M$-MP(J%8x(g*Y|_(H?@5t7iJf3693 zZCZiDKNicu1#sa21n?E(8}5f%JNcu#d!O-mN`|?C-zFIi)LkTvxYraM(ZC6jZop~=A-Brrbkz*rSG zS~j#JAP|XHnv`Jtwlr-9B*fKiI%Bi^S}iiw^y($s{#i*8Exi z;b`h9THMihEN8~v|6F$(GV{z3h0<>EoiYkfYc-75!0^ua`dlk!&wqwmbU+MIak~(7 zsG_Arf)f-(@YRQP$C00`=g^=zWd<2Hr{JLF4k|imvl(+SGpLbE9Fjy^`yf@7fXhS8 zt~CI%{tG4O+F94bt?llm>?ysAKJxzvwPgMRKZTXG&Jj@IgZ|-bgm1lEtij89&S*lV zBzMs(60`SWy?n&&5ij$d=V_jRZ($;W-yKy$Lg`4gFY*0BBX!!c?YV1jyi?q9eqHQX z1;O^$@dKvZL&#jRsWbc2UZ;S^I&&X|ZP>H<*@Nha%8mF4+1qI&|;y`k!3wSZg9~Il#yK`KssN3K^OOd8-$vNW?+1?P5770=jY5-~g$r4!hYY=gq2m5pTOK>4D-JNew9-F* zicM8;Ii1?pw(y7&Mj3LB5fRH!ghb*hOoeaETn@oi9G6fWu$-Mrv^WpY#*8Y;+*{^q z=r~ZDRC%rv5 zYV$(@mpdrsTI+;1;fEc;Q2-#a_oatO6I>*lB|zy8U_bx;!{@i}`)B99cfIre@8_pq z@jstFe>(5I{dRtF`nR6Vtm0J>KmNIc&$3AG6cS^BlZU5 z*ZhJ13oQh)fG9=7T#KR3-sE{$&~UOjQKEK3Js3pik}h zVOV3ig|8^}%m?4EJMaxSU|mkfm7LH;+yuG^8rf5bxI(X1CwPL>+iGfx}QD z{NlzJR}j=G2d(LQWCP2+eM8?z7A2T?)-%s1%(^zFbDGeEFr$|wN<@dM6u0wrM7fq< zDTp<1PYw61{TJk81%ax0Z7w<->w!k$Z~J>1v%EPNK0Ki1RGgOef@7Xyl~amw!w?_UrZoC!;_EvJ&x9EZSwlQ999e7oakgU#E?{I|g-x#yJ|;I<$u z_jbHN(4a>?LuXScYyfNb#rOe0M{s(5U4;0>mUh!aHOJ&Jp_oU$UFx!O?*bVNABwY& z9nanFAL~A`iPFUL=rSK-7Rm46WiW(952CYSNZ1qEN&0)|<1nNq~ICM8X>1@e6ncpjl<|96ScyFTL z0~?KK`VnhCDLVj}6IJ=oL{cQP&}gNePi00+eiEeIxt2uTC56aVXb_wTa2&?@Ni~6R zz?d9=)LO6567qfi+0bQ0N2B)4MChZ^3*^|PU<{H?Z`XG!ERegXf zRH+WI5~}miIVqH{Pa9dsMxSb<81#fifJxE;DpqkyE@vr+RB_8PY7N3cHmCX^KlRT< zav;H)qH|u7sZ*PnQT;HPU2ZzcIq`OYwgR*r$&uz?3Kir8Gaa?n2h&yr$XLNP{4m9( zl>mu*&;swA;sL(vI34ck+k^?n@P0n9v+(E*hH2z-HpT7R5>v3F4~GSugEBO8z~~c- zwpjp243f$!ICBAVNn9OCm)GLiM*!JLLtZp^Ux%TMVi{^eg} z`9+z>HL`oWi}KDeno)bpH4ASPhNW>-N)RB1tU;B)S^9Oxp zn`-`BzAz(~AW3x?i)pC$gZX?g5*`)b1sq4s8kx$fB1$XZiRhw4W0gch!@HZH?#lsB zXaKcPpoQb|U6C|rD04yDIjBVpT;;PLdTXJ3<+8l1dnGs-5HZi*yUczODR z%|m~$Hyeh=I|b1Gl-#F(lh=EyGc#VezJW@rcpqRhW2Fz*|9*CEI;rB(eO%m;Jy@LZ z8rVB#o1fTvbD7q3oIBZBoIF*X*t=u;wiOR_HF~k zyHc5EDLQ5SKLuAl@fyhW0On`l;#TlR1sHjrUV&GradX;tR47gF5aBhWAI0NQ`DO(F z2D)&pof^(W@zZKO`uS&0x;L=1ZX0TDLw6&1G$ikh(>MC7ZIt&17OGQM<5dUCQ>qMnJ~WqF7- zO6wSSKYyo_NJ3-KzCeD2l^RvB^AD02i6#pA>h$x8q~Wve1yBzfdNlN2I5*j0-}hIy z81#)^KW=jph;%-TzYm6w-{zXM^)W}WD;wKz`*;CI3Iz^Wq76*ZJ`l*dU&(`-V8r3w zC0^gf_LpDuSN6Yr5M!qqRfEo)G6llMN_Kh4=XR3Vy8VK!GSb-M<1!w!#oG+2K;Fux zE1u#Xk>fO5{R)zdJQ2FHak0lE899$dX#D4?TE8tg26dsSqbI=DvhI0>+m2D(QV;{k z#(Q8@j<&egyNv>no5v+uwd`*o(j*54uE~G$U;pI;GzIBTHc~yvv}4I(I4&zdm+N3I zA_4hvn2{$I8ihX6DhQSUu=+O}Le_*KcK7J}N>G~}5OQ#fg7|bgp4wcnF7}P7yZe4J zIRrcE*rku(zV`mJ-#b75eE#;g-rM)`eyW@?91Wyv9zPQ*_O8}zh?g_>TQ<@U*)C_T z|A7@WUJx$`|4Dh}X*qd*d-ISuawh>X{$4tdgrijs$Ck_fCkVETv!axUab##~uXTdhgw0~c2N#23in8!(m>?IwQ0K}fprLw+-0;1A zDsW?FIb*kVkyVFh+){NanuRupGBBmE5Q;=dg7Hrf#T8$ICD<9Rvrp{N9vrdHPGE5c zF$jVL-vHObCsxP|r_~Da)`!J+#OrJHqIA)xF2Oth@D6cQ*zqXN|D0JoDzZ9@$I58l z7%I9^>Y{SV(ZV!9aC>E>O26DKCL@P0|K%s5?tX<&7Be8!O@5>?n6sR~#bh+P9?XJ& z@vC@w`HJ+@=laBSZbc(PD8s1}REdviSnSJ#?f!;#9h*^*9%X1T={}*wq;OY?3Q%Iu z>+$eMk2QJj*FQ{axSB3rnW87?i^Ms~3sv*<)i^ALx6iw#g$jYuWD0D?ew|r_ zr|_3%dzw~ve_QBe(VSUNO~Yt^C6=Q+`GP59|9dRn+)N0b}?=U-qHQwF>%>6 z7AczS!#e`pj2&m&B$XIP)lx8Jz1#?CBQ{%0dH7ESh zrws&ePxWZC$OVICs?`-oBk{Jj#B{Mu2RatJmSoA3xs=kz$ejQf4zMp^ouw4Yt)@xv zdI|2Q@% z0gHwRqN@=E5IJj02mW*JvSv>BqEJAYxH)SSvtuJU`UKBGy~E~cv)x8}wq>so15mA2 z1Gt181j#xvv8Qu2ZbU%A9R)rc7k}A%KvHSNYys4=V*ji3mY7G5o^-XQag1R`UvolJ zv$s@D5hEb8C>HGYuP5OOY~C#;G=~xJ@Yb z$Hxrvp@L|2<>B%fztmmlZi|mdqw7 zAVpodYuyE`LsN!cxnxl1+np-n)dn8;TQmTfXR^~ygzPCU4lqvaYuwxh{;_|yCV(P# ztFB_I)!*T25AFCnpLTf1yUyPuL{T4Ctu-O=LFjt>h}jmC&`nlszUt-}-eaxxK)Cao zH#wkfx_itW9lrd0tAnD9a*v8|i=ujE6ef&&3G)peJsfT){CZ3c9K8me1wXntx_axahQeQ z0W>rh=yhCQV{%EK+SioVdG5P><-O|nG@VZm(<)7{)jEA_p)L8H?gYpI<6oLn&pH@V zQvVxLQd+LoPnHj`7+qH!;(zwdr-Y2je)zx{B0aS@eM@6(C= z4V6?w!aT!Z0yY{Cr!+tRYYv1y;Hm#A#-eNuatJPFB0&%9%Fjy1C4Vf>CgY0JAQWLA ziyp=ifoGDsr+7=COEq%@j2g{(omCBBRV(FTLrC4}JXw z24yk~k=OY9c!`_`;y&%t%zbP6BA_&$^IDt`xPPt6uoC@MM)#p%c`6G_3oBD4O6V*|&7P^>_+DX^{HMv{>5Dj~)@GyKor zTho}{X7T(7WPt9_0j%SD4Q2d*+!5$7`uAhlEtHsnF;LOI$cD?g42AX683fZ^nOHbd zZ@ZA9M8D;4W1&%Ijt3NXqdve3?7yvrD#&q2_^hfs8_H)*M;N)2Vt9jWh*qrX>gc!N00LXvez;8E=Jltg>50o!hOdX zm?*JI`<0z#Mc9>Lt`h1$Ga+YJv`!vHLaH|xKobO;@^ul%s@R3h!hF$eR&i3#5mBBw z3cpmQ%3WitW~0}Gp|eR`u1`dj4I91$j~WEXLiuJ@2<4hg|NQj>_24 zUW|>t%{O3*m$z#;=16Q~0PK&%(mqQO`lV-!7XF`sbgUgBF zD2nHnaVDYXVKeY_^;4zd0#6hfJv6YdQ0RhLM7@1^>VN=3zTF-av_kP~WC|H@sW(K? zK(8w!&y%ho`i(`T8s144t#{JDE^S5fnRMR*blA*(PLts6`O3{=xix%;1s0PZjqFw1 zC$*qi^?`$b+)Fv$FM$yGK{$n)jDG*+F{#Ck4x z$p(i)7|teao--aq=Y>GuJl0az`zxWA`kz2rsyRE^ps+_8*p(*H&`D*uYQB5%)iRy} zt~T3i_tIV;cKJ}X*E01fA~L)W8AMXXHr)qTa^Yf$2T`9!P&-g+S3r-_ukq*9C{R;m zc1tOw;jKBY7psBqdW=ID0>-8Ls=4oP!eN0+*f}UklDp=fmk{gaPBAwVHoNY~J}}G``$?*I2KU4!+=5{5o$2loui zA;32xQAHoAXyew}-h*2M#|$&*yyrz`21ix42g%bQIYT5&=V4u$41FgLlQ*~;PSJ)U zn`B`JD0w!Vz(?xB3+BUF^Tu4O$!f&hZw1v}MK3beLJdX)7g+$)%z5d^Xv8ec1hSdp zef%KP%Uir*ZFwUo-X{%zCk;cd^Yvbc8v+RrD=DSJ2b~LeDwHfdpz(Dt3O-`B%4tYv zar)F1m2XPy+tCO@Wpw;2czM7|FcNt@WPM-hvl>gj=?sbV;e_hXS69gJu~!X=3#TpgeR(eY zc!Y}zLr3TXYBfChbQxi)$A^Io#!i1G#v}a;2`XC843c)%%!a{^Na9N#7y>7Mp}Ho} zv6Q@)TR&Rw8NKNR543F}L2$cX-!5+ZFqs}m1^{bS75GYnqg6BG^mbdWc=+{|mIe%< z_wW$j55uLa>QF8y1g#l=5_nq#Eo`knyYf{%SJ1uXPN<83BIJKY0R7+hVjy(v<)yAHCm$TkuES*-v~HB z)CM$!KOU>?q11$y1>R@4Nzx>MFl(sOF`_Nr(E(RAUh38+nj z<3VM+{HudYZqSvzM$)MNb+Vq0QFjr~A*dEL?ws5~zg5*cPXxzS=~}usmMTWzA|q*F z2-R~U@|Rl>-jqOL)$7Q=^S4Vb_Q?uArvkREE4t5~%!Xu`jjpX1iE3wZlY$9*%~4og zt-VInh*-PbB<)U~$WKJ_p;tqi5(w+-zs>yJiO4UdypgX$@2jvAXc8<1`d6SH`r}l! zyoA7!@gaaz5qR*T+wfE$#-|)frK@v@;e^^+fem+2LY`gszN2g>$MTk>?fqvHG46! z*XN65hT5FN@JUZg2ZgBR8Q9bj6M>IJw8t-B)<6H;9Q>`vkQ06KJl6a7^^O;HLUZ2D zdSQ5by*QS-3C32lmsHuJrEC<2Vpvb-hy?xU;Q=6u$0fg=Zd5O2k(jBCtD!NY?)20e zaJ=rt%epGRoF?Tw-BS5Lz0IjYCV{pO^I4=J_%#QgtYQVst^^54Y!_&gGnHkk*l^N%?LV{5K3+-MQp(}bKCnYzS z4DYQ>&Z>$(`I%F-L5J=R25%quZcP7pqedf=iyEhGq&WS zQK2qpM%%PRWrTX#nNus{<6?EKE6OzNcaTHOJrcv@RCQz$rRo;rAru}Y?wqVnCg0Jx zp*8g^1;kOp^st2mf?6f;)+9l`AQj976@LLA%!z{E)gCNrZ02s1xZSB&q006tg9ZY$ zhdpNG8ezMqeYye*R=_$un`0z_3~y#=-IA6%xI#9BNg}+4>C2=|yJ0-iWNhxOD@vis zjN1hUA0G(~?cD}5E|y`s{3WCEH!@99;73uP=UN6;a|dOCx`p;L>YM#}H#p#~P3hYW z4yRlj1OI7pGA1rX(SB{uSss`PG+PcrofYa*BiF(MX0|)l7Le z1%#+sFGPa6qolC}5=2&4D=SDW@NuyE(UYGhY6D+_@F-+;L6XQO)p=JAN57Oz`M&|d zcj5VBh|g$pbtOYmjxQI>_2;?vqVRZ`_3m*-jl~A3A8k!!7yS?d6zi5kO5SWBV{Hk` zV07~7a-}R=f0~*M$|y#2g&K2P<`tdtKGqZd{|qkv6d6KHH%59y;KUlwL296_YEefQ zrBily3WNZr{~n;&lkwGHGhIVht+cnmlKyZGqd0=p0;#I?_-t{zx&4UoAbP1S-$-c1 zH&RCCKhyA26VpQxD!?W(`d1= zMHVk~G4S_}1aiuvk|xz=qJ!Q}C%5`VXfNUyH$obC`*L~mHP4XBkg{j^6Dps0mcMAo zyA*ph`<+{*3QgWUCd#-4)r_Fr=rDEW^K|s>@%!~gc)y$JE4U|gSucqELV7E)0^(1V zVxQPFqv-BXah zp<2{GhAjyj%shn$hNm+VvI_vHlP($Yc@HhcTy=O;whH6Y?I{u%dx8FT)Yh;uOnTvJ#@uWS$dY81A$dP7 z-Yhq(YyJXGrV&&eIq*H>B3eD;DGn_JXn-F+|`2!R?P67~CY6v`L5>jHiIam5*pZUCv<_kx`8RYBbCf#7K%tmtx}AN0lS(sW^_ByJ!&S5#J<_>_s`)M zEx;eERjJ#DCk?u%&aPhO}j6rIi_)g64!$+=qVaP%lV zh_{Pp{ju%?Y`mTf!I%~Nca#>u7#N5IVxFgx9_2v959eY*LvhV!PCj(rOuj=-CSjJT&6DX;51$R-aI-Vx z=!^X)iJ8|6Ddg6IFgg2Fx#&l|T)RWG5T=tMRG8^IeCB!7??cAC>J0&C9^^_S)8%+f zAXsGa3i-|(i|o1eLVB48#MmOZM&QM?axp?zN91~Po{9Q>H1DV%4JoX4r#qcZQHY9; zNl@n)Y4R`}3$H4ffMB<5=1=};GR7j(=gnrQ{ulvw60-+8 z0!#D&`=kod!k@-yP^=*F13992!nx)gF*U|*x_HbV+9Nl4nMB+Pb#Luge*o6Et zo)CikEuKzbtioa?lq%_p1m0*W0n_i+S{Hy-)@%jgg*dj6I$=5wfa1y*#wZ2?G_?xI zamTl$1;Ar!)c%7$jNT(D0@twXPRW6oBBClt9p^#1Z`737vwA7Ou(~Q#UW4{thaFeM5M+4ZAQaQ#pS`6z?cTxCeSHiIE!Kp?0b#Qufm`)=xvF;0thJRT!j| zUG>Tr65@>Ee_Jf04hvCA%-mJpr0^Wsm+IFuVcYC=@!P_@>2K@Vw6{X@vyQa*=$qU^ zSueX6E^@7G0?*}gBMxUtAR}3XQWbC#4m~#_{sMFR`R^Y-zkT07>AgGt_Tg*)(;2@M zPD!b+H%@(lq4KJJa=-^d{)#y~U*4hyfVmPX0<}b7QY6IJ<@6WuGd_0OgFfHQXz{kJ zbss(i^Nan(oO5Q@aPUzzCZ|jsJHu>ScoQ>8I7@*IvE$iFq|dl_%`%iQIrKSvXCnT% zzlbZ*nJUquc4#x%Wv&Notm)Lcp1bSJF4v3uVP^z#lQ-a@tqR%^v!N_};hqM^Zt|5> z(Ug1&$FuWRNou-wanrV``eT2I>EoY&PKnJ7e3Hl=`GipzNpQ49jd z3tkgzJlvspWg$r+0d88a?vLaBL(Uw{2S~n=sz+y4$tw-!>tD$1{g!^` zK3(=nHT2|7b19qMw^F(cDGyH#c~CnuTwjD!yka{PZH9z%;Yq~`skrJDAw=?;b(J7~ z3`k#V(vHe6-0|NgC`_VrdG~u@Jfm3!0de7jbE-a`plb;v{ujeOhS7t0>5}wQ$V(E8 zDlDV|H2sUtaALHRW*}@hELMO?3Vq3A_t#-da$k;7c?rQ_LCt3su#X82v69=V_&$}p zotwgBuQ3G$tdD5=)&9<8d9nOOrd3HXQ}luNYR35(cA zzScq>e5DbimjUL}jXk^Vmh1K1V0DWVSzqxdXDqbb4TRgf4<@Y+I{;YX)&>A0mJF~$ zN@pyH{d4$$Z%zJpvat}LIN9{w3C8w$MjQvia_Gf$v0lA-^pWzuOO57X&qh4pnwP>- z?hZUU0t<_r!d-TBo+5ekfEmFRkG1Wo%?Jxv0f*qFK0yIDBW`y0Wyfy4hsRLrLTn-*hOLV)xcCH62<(fiqOCAh3!8sZ+KhLLH z!Vce%tM*j3S5#P1jxTh;5xRj9OY-S0M~V7|sHv15nq83lrMHvqY-ACh+p6IGCr}s_ z=m`MiufSf~A1|(8%5UI`RH^#`1~wk=pMP$m|A`YG%taLy?dgnvlYjxiFf6 ziry4L3-}Rg$BMzM*NcKrUxC*e)M(f_8LX~P7Hj-NLJX0!;);usjyB?2Hbxg$d{Q>! zZWW&HOFYbkfwM5t!Daqr;-J)uQ1{GQ+;y0zHPb5#b5aRd_MF}gs4gp31u ze;>5XHP?OrIFd(hbv32%{G3E0DF3sbtixou%HZ7~&6AMHbTb-$NSZtr&;eh6IO8VP zTcSiuGY_w`UbT3XdsNtRuSa zkkTI{`Th0c=0`iuA>(o3nu7-;Xt*chY?669mC8$VR-^}R4H+}9JW@wT-zzhfCsK$# zalEY;m~KeECb&CJT#PxkqQWWeQ3{+K0%!yc=7A&yu=v32Nt$-maeOceHqEkBO!8P> zCKaGGfs{fZAJROL2Dp_b!X^hOVlF0IRjstFI7b~}wonNl@xrgZc$Ioh6doK|pfiCA zMAa((Su|p*zp9**;W7mIduVG{wO+ylq$_d9MkCFG9z=bQ46O!ZiRZkIN{ogA z&<)m{q-H|X&JdLyt;<=zj@yQ}ppaku&^eb`^nFk|m1r%|cbOc848$mnFFIWXi1%Ly zBUDtBh$8`Z|K%qRR})_*r;u)}R;MXYS5Ge)t-~fT;ch%p5%1GBL6Q<8jf3W564wS;cVF3C0EaEl2S={827>+~YJ3 z>B<@S)Q8~$n#Vg1J}(oR;t1+{H5|-|$yI`v8r(*{DJYG|CL?WkiTyYfcnF0Hu@(OZ zRCN)c28R$gi-`bGXPYhzeL`Lgq)KmNO$`_&L`6@p$AoDXs8F^1R^BDZIihMnl*82O zkFTlpl1V^8Nj3TeQ`xB&(CXzi^;EXW`EFom&w&(@Tp4?u)DT4?{7QEB$aOaQU6uKp z0~w^Q2OO-`3uLSqWva32DyB;Q2xO9^?UZf)&~qsige@<=doI@By?9R(tYo;RT9&cX zHmr;4gi2BXOzR&2xuS%7kn)KD0&kxUEnGkUoZQmqChRar*>g2P(7O8;jO(y$mphx5 z;HM=G!K+Ey16)}@oE2eu(pM|GR~h+GpEh_Zwo}~~yclnB@Ys_C#ecfmZfcWUd0D+7 zPwq!!{06vSVV7%|WPBJ}>l>0~@aWN8E+95aGaKE~=3&L&NQ`JeR**a`knUKFFv)|? zAGxXQ9+*pZ0AK_O-lVcD;x0dbR{lus5(dPXsv>NfZGOa10o@|(G zMB=L%EZ+m(U~G!@2G%TeR}!;;5WCbR{Ng(X;~eX#EKGao_SxQp(X72vsJlj1yeLxiIJ>#b_IBX+~CJ>gH0%q zBHrlM#KPkMVGWPL|C9Iy}QxnxZG z4$acg(Fi9c=V!Y}rpv`65>rk&_y7FA7|AZ(j;bDX%8CS{X)Dhj}GI&TcH zQP%El)rsflt?HVXjEp32QU5e!ajQ@}zuC~g)w22N<%i2|uQ#-I$DLHn5eb_(!cI39 z-CLSsMM~5U?LC#_;VpXgFyyu`V>pqh#86;wy6`xnfWP9%H$Dt%)MWDWYBrcZq7n-- z!o~3Q>;B#99=_S|!<9LHh1@o50aek4=hEuA6&^h(7dkV!#qenmH@ z@p8${sJRBRFukEfG)72#_XS#P5v@sA*Ccp+`~ah&pMRFn2($s}?d47mQ#Fc)Z;!{?%mK;RS7Uvn9)vzov`51fSo9+9#>BRIC(pt^&~K#O#SLA z44G1ZryTT?rUT4D>+Z)M1pHC_kI@L+$XHauE~%@iNPNW2;gd+Kd|;~vax0jPC8Hm> ztl(nd8NrzWHH@<>6yw1_*nmM>2nY>3 ziKj$)|K}hVcsVh_5DPsXEpFEu=`pwXRjFAU2;C}TsE(73)>${Vyj_h4S9aYBj$RGU zR1%1@l-{jXp4XmS4lh|R2Hmfm4hwO>0Vt~vHG>q!uNPCmfaFFMm0KoZgU~eXt=w8} zxrbQxdMLM`2NTl|k>6HKxjMQC@rB(Vmnvrd&AbyfE%89A#cDzsoXh|3-$QZoP~EBU zTOrX!zkz16(pI}YGD#f)b%EePO(pJg9Lns>6_DHyY^&>`r zE>c?e*BfJ>PQL?THBPE2EQ{c_j7L_J;B|oU;3Y>0g035xLpBHPl?>xleV8$ipyO^5 zsfo&R&A-0~aC4vfmUvY~w!Lw$C1RM$$6C@oR zxko*ag{P5v8ebC4Sc*=IDQoWJ{4F?Cz)lx<$)A)lLTS>FmB9!&*0AN>+Qdh12;3#E z+YMI$PMPQW5tF|k@&6Kd`-eP<@BpPDj8ZZSDdtUC?gR@2-1naJPgLB9nlM#`(kW9C zyP2c*+Ixjq1&M+26v&7b_~FL$ArfP^X!RaG0)`?za`*i^6#JB`Kne8trokC4`uoYi z>F{BH^KR91W$H*(OxdL`ikJ1v4i%H$mWgr101wK#I^z(@&HkPWXyK9@8_OZP3g=297A?#)^+B zZgVBWW}97Ca8+Uj-@Xcf#@`SM0A)qo-^xrM-C@$=PJj^clvNmE#;qx?eES{M{9?nK zsdTB;+Edcn)RtWC%NyX58n)p6dOSwf0V!}U-nRtlpeRg15kZq^_V?wfgY8&i2MG+a z=u0%@-S?4l!2e_R=##IY-mB=Vc2TKY+z~HeC5Y9juga-d&fs%s`AHXfh}M4?95u0( zK596E>{FOrO{ABJ+5SjA*ZI1{TqOuz2Wbrpgfg~@T!xLoz`mp|5Mb2%%*J2nK-Q4Su|_fku^Z|K+W5qbgxK_D1Hu zy@fqzq~9v3MI{k18CzYE;G|w0_0h-W`OOQG9)5z*V0sGnW(RFr?^)6)O~p+V7Ixa( zEEA!s2K>XG8=$ix6uSU-_{(53SW)uM;X-f5=i@7pis<)R4Xb;AX*oz_An!MrGDH@i zAUWDx$$z)`Pa-$Yh1U6^{Wp6j?VDFVKco&|QAyFtVusoNx10HRa)stuKD7u}4HI2> zvq5mNT2EgS&bgrm*t_d?;Vsk*Gmv*C z)!|3`iWZA^?qp&m=}_rEm|#*b6X~s@R@|*j!4w(T5D82%tOn2o>}7oWiHr1$(R%T2U*rdWz?8&Tw@Rp7V*%z z6iQCT-g;{HyZ6ym{JK~0lF5B-+xisONz<`8^0>r@wkRw($$ajmRMGeZX;=7^M(M$`Il|pohtzo%X;*t9wu2iTA1tsI(|Y)B15j&F7|T6D6C?%~r-m(s>DzcTEYhqnl=Thiea{#I&w zlEwhAO|wD$&uc&gd9=@8V+2`iRSyB=+8i?koHS6cfl_+AVD`9oHo?W!fB0>Fy~BH| zYg9X)at^J9%^3R*T2N(YP#3jvb5gd9Y}Ln?7s#PPBpQ-QPg`m;)s$98{_<1$C(S}> z@~G$w;LX^Pd;1tl{g8aq#rB?Qxyi;{iK!``aM7fMuv=&cx`zlN$n_HCh~>SuGX|-$s|U!ON^PR;;uN=)-M#b^dS~|@zt&8^WPS(OE{pZ7(4~L4?IjK#sHTtj(n!Gb?rx&spQ7j?vJlC8M((-wSwd8q_)6i9 zCHguzvsiBo@xmtszcF+G))!|s1D&np+6ML7l^@X=tN=V>ytr&Anuh}2#ovBT|GpR93|C^%Y`+pl> zTiu(f45^5t4*Bv8Gu0*GJK{Cs$|ZOM03P^IQX%Q*3%G}FH6#pi_fLF?v0 z2w~PV`#U+)_@mXYsZUFg#na$-_u)Lnltto1;Ul?<8Oo^wzGOcTZZBU8XO~N6XC1uA z-Nr^D`E57dq8gYUbM3%KyO+U2R3OH8FTC0%R)Z6#yy^wF#BokqN8*`%M>bd)Q6kp_ z3r-j$f5(tr2bsr)`pOGfOJ$xYJ1B-?zL?Ld`6w-I(=7;aOYH`?xOUH8_YvC2&5@Mm z5aT{=ltXQ1==-~~I~heT#N#3lwd`Ow$Mv(-77K9U;>Y9`{JQJMGoXc35b|P_G0Kg& zRKe&uZ>m0J&V?m$(a*!u4tf417$LHwt9R5RGGgJI}t{l9KulLL?MTq~>QW)sU0 z;u$8`f`&@2P2J+6=JNqF6NEfa4zJpn&wTm#k8~!)#ENI({uOm>9U|6jR)*)Ikmi~y z_SzXb1URP_ZS!7|KApc)bfMX*Zi?#Kk{it0NK1m$8gJQlizA7{(-VWAN%gbm51=g! z-k9DG9#?(2_$p`(wSTaq4|@PS(MNOzxVc(Wc`Y2ys;n4~@P z?y&hNy@ce58LD>>W6M-o!t>kr0r@XQ(G^u>n?!g~0mtOXF(?h)ePXi@R;XK}O;K-E z`je0ZajZ58-7dx$B8pN8Mq5aM!L3X8g=WPKJBQOq4ND_u{;_|BG8YOj^0g*h{wzc; z^#OP-;8}?*+_LUdrE8glBw}5uOuH{h z3pl)fJ3zEbkrXj@IS2w=5qL%m<nU?HcG{f?72?rh zLgHj-O(y%bB5cxT(v&gd!K#A=O08dbz)q|6T!=z#J1DBk(NZgO$Lfw54!dUbo7W?j z5tGUoX@VBkk&tR#(DdN0iys4L-ltY+VJ17YPocKZ3YnoSr>ifsDWd>cl&0&u4^U`| zgAGmmHkhpgGWW0GN_;a|9vfal!i4#FZ^Yl?`)^B{VncAlsINZ)6E%{UQMcr^&R$jt zz&nn=quMxuV+OX{(eY413Vg``h;aTw;;Q6I*Sj_GVs-9aWpJCy5gj<1WZ63jQP4cZ z4t1{6Id2G_D%l?H6WUea+AiU)gJ;K(6Mm^v$ChL;U}WVOw7e+l_?2YmN=_c}9H4cz zDlaO4R$K_*n)dHG>Cqd(e1* z=_dwq`r6O7@0@fBwq&)6^5(YDsaw`NS`U7V&1JiXdqI!f3W?)x_^&;#!6hS{wni>+ zb4$h)&83nj;%`^|1!J48y?W_6{Oyd^@da^0Q_NQ<47Ty8|2eG&P9aoIOSjqj;a$-q z0>0O@R=6yo1I+yP%>E3u0g;;@e(flT1a7d7J3(z+4k&xIa4AA{P)@O$J&nv36%VU$ zkZbZ>a0V>DFBL;q%9UgWLEC4V-%0LYt@?fs>mmB{0aH4C!dUY0jQRsn9{y>Ma-(Q9 zu|Dr3%m0h3TbW{lS$;Sl3)ud;0FvFpwQ3IHJ_5Y%726+qYMB%bkUc%@tg%PVOEL{R zS*4U23e_NWDT`0a4b7PVnYWo)1_8JR-U`cH$hY_9r8km zT?FtZJ#PIC6778<-667p9c*U3I)4xCUVXHbl|^}*mGI$;coFEqhnEj8?O6rY+jf_g z?L=_Hsp@4Bx*jDzfBOSp1cCuXuc#4=OPx4WuNvGnDl}oBQ=&aIZN}hDUN>qA=mo!1 z=6Q#7rA9Pqv(zmNfX(Qc+V1cZ=`+QKUkCC7xsBf=w9Sa#o$zf-h$aC7eh zM?w-x;5PPln=YEb-x8MQd2;FMaR0q@FI&dI)v}|^MPOE|!3aWttY`x6rV%PO&=?}0 zK$*x=LJS=jo($F$t}aN=)=%At_pf*#IYnHf1TP2x--vw0!YMr!9}!P=%N|Z85EUdp zgxbNdX=%W7$V5+AE9z*%R0D)3#^}AROGK`Dgtg0kS(i?zC6nUW%B;G8-R6TE5|yM$ z6cE`Th)R@McfY`LNUkFh>sN7ObHrPBPEdxC+@Rv_u`VCF5z5|O=7OogtN_uXlyp&T z(+*>0&%-TZ?2F2(97Nl82L;|aoukG)8R0iM%%_74^fy=nXHTx{s0t7=TuF+vh;kWc zEhrvH4QMQ~Qsd&1!dxhVi7y6eP-^tR2zh$88~$8Cq>{Tpyz(394I*9U4yV(7)yT@= zdfgif6a}%_a^vZHS&0t)j3TAN563hPTs*D7h*2Sz`@#*v^Pi}z+t*o(rP85uQQ`vr zgE*VBJF8hG{6%T90jn#T*S3Pg5gc+A7u~|fb*(u;7dXV}7hLM82;JW}q}p?Q;lkIfoEM1q^3jd}nu!XN=FstMT$qyOkR&ea-MV!LBtv z;1yrTVecV6Lbk2SJkJutX}D}g!BCBW{5evzEsI5V+Z#A9*fcyM7@RcHs`HXmOPi6L z7%YklT~Xm1%HDpdyuE#SJ$Ne*(9D z*wOxF<$F3|t32et$1=eRL!ZKYz%40{Y~5q0oq4)LjEKiQVnmX!<$}51e}#nJEtx=S zdPsK6KSc5bhk`*u?Kb&OIqlu=QCW=_9s4>(G0>yNGKY*|bsA((5)_B0^}l9V$qqHl zaaoUb>J>o6+S0=pDeiA^QDBZ^nN9nff<@WEFA5-2@Wp};H_AzR2NOStIYjCa2U5OR zF9-A06z|1;*#Pe11gp1X@8V}0+ASqr;Rg`%Tu6@4_=nL5Ej&}IA>NmjUpV5I7@5CG?hLS21R;e$77+WLv|u7z(vl&9PFO_}(mS2AWuIy2NjwVKVhw<)gOJp^I^ z*Isf;%iaUj)QWIpkzkV*d*$dR zCE=T+?_7etI!K_jDL@gmccZ^4;;GqCc9YNuJ}~bYtJjB8T9kHW;~qwJNO~`f<2C!b zD*+Qxl!<3LVmb^Zr19($)A?@EPK{_q-pto57};5%KLl0~DSogQC}V+qlwNM5u7YsO zf_ z4V@5$B(&>{?im$-+Q_zDkEbZr8=Y1wpK|J0m)4#0LwZ4jW35Rj+9*N=31fCb@@YG5 z_AX`}n}*ZD5l_co7u?g-xC9IDk{=z+cI-f;w5Z?w@JKQHL&UF(S%|aiANGC8_CaDz zRA6^P@sG0l6?C5ph4f=6;WDdRr)a$IoxQs|zvv?d5=FK_ldx94jDjqnjQND1yABm; zq86m)rPWk?E=SQlAV1 zf*e{0>~0csftX(>wg3y|`2KGaZZxCr)7s`_o!WQ47xDUwA11{&h zweyj4j48`;tm}&)*4nkjIdPlma`y?7_%?I6$#^UQi*Oxen&|)HbPMZy)KM4z_OD>U z988wK$eieGx0z>}5$cQ*|Wr8lXT&%}|*-^Y9Vl0{~SWUAx1fypOU1N3B` zSBg{6;YL2i*JC)J+=gT50R_ir5%XuIOGHCO2>fc>eMEdPvL zN1{n1;DC~-GGRbK1=cRh#a*;Hd&u}mn@F+l5Q|U6Juccb++C*eAriz+p0=*iI z?-*S}VX`+-dlIo1S=k}}PBm*=5y}hka;T~BRk+J?j&boYi&BWgM3C5wQHPcf>Ysi_ zo(&D3ck7Pv+bG19G+KfQ>wuzhUMm)bX*#inu4u= z{+Uao>rHE@A%AfRtu9oyk_DuXcvDD4u{AI<*rKxli37PA{mac2R*6yw!lpiw50^+P z%@)f?Z8nhZR`3uYRdZ?$uau>}8s#b`Os*YT&#;j=vHEmWMq(2BivZ&AjCMN%#s$;~ zmkA}F;q_z+#p0wR)w=jg8Ax(EzgoPNCZjtL*~AJ2MO~Y<_1`J^hNtGDl1=Nhxyyy- zD1_Bw&JeOZHGZ?y+HNOWZ__w|s{#>Fa*N#E4RQa2=hAs^Y|Vi(=2XEfy?snN1)vy6 z^f}LX4H`Ejk(5g#fG)tLhl8+uW_r&Xa|Fuo*y5(f+85CnyniaFhf4pXdMH4bYV^#- zZ!Bt(is#!v@ubYDc@an{$J`wuoo$+uOePOpC6fnm5>Kr4hIlL}=$kl$f?HJix^&tK z2J|e3KbRA2Q)I1LgbuoJq@jaE8BBKxDT5$xGq>+kT0V>WUNVwG(fpuB(To|OAe(@S zfk0YV<7Z%v^y-v^z@pgHDNu%kTt^$kuMq4itHV1WaqL38nGWVZVlAd9jBQ>+2;D8f z;&pALVw3nKNlsUwx#5-J5~tRsyO&y*UQdSGK{(1;iAd2MvJ#VXtD0sa#i3`3*>@}f zH{3hP1EjhlLHFa!bDFDOY_CLU;GDn0;Is9@Iei&VpauYTXZ%POSO2^XO^_b=sN=hc zY6%qv?&mY&3&GiY*O+GVQEXZNr~0Mg*F@s5vH!6`KlfrNlsp~!91JG=OmuNa(>_+L zN?|B6$MPEEshM*PP%XR+}oFGW4BP~ECP{O77z@09H+I_vGu1<8iUu{3#%ffZar z49^?1|2{wLMn1^;LJRoFLjkMK{0)t$KQ@2pMYY)MrOeg~sF&PZl1o{Uh3JX(P&6Vz zoJ!XAz_qPs<534oMbV^)vEI8QCxRurfdzc>^O%caO*9e=V0E*;8vWWfB>>C@47Jd+ zgRLX@Kk0lt9e$W~G0*4_Wg|BHo*yF$M=;Cp%5Su8BEYe#U}EY9PVDcjAW0<;{9YX- zE9P*ckR9X&Cnv`gQvzx|&h);!-GtOqkE1N(xjK?LZaH8<&@@1CMc__*HA_4En}@h< zLr9UdR0>t@U-)WVje{@WHUK2bt`?FFZT2v6eNxHtWF|`g5((T7S633xdmVZ@IvX$1 zTFNi3XyVr}5~DZtir_muU|0a{l$;ztTBzY=+{d1ArfcaDUy`wfem!~zAcP05`YtyP zh|r%1hvFgp_f6)G|DW|8i<2gnyV?xVtEoHyX#hB$` zxP5&IT)9F1PS&)A?`})6Rn%*ZU8x!9NPrpy$@k-O@wJ+{lPCmjtai56+xRi=o?@Q)9 zp$CSMrq_Jos9BNjLD_BbXu#g0jwxm|nl0`3($S7LtK2Roc$wV;SN_HrpRe} zB65Wdp?*={J=Y`@FWLbmGvTqII~6tHk%SP$L~0?g|6n8`c~zI)=;#rPGI`1+N1lnk z$Q2krG0sDBNmxT_bu>?}a<`Ve%Q;^}U=?Pz2%RwMs-t&&y2pXzqEsyLtd zRcG6);AFSWUz54EAR{Bov8`)MYWzwM}H;K37u-;0X057&gsp)jLGLa)aF! zK55|}FGT;>q@xhO^RdkJA}K6gPyi?Z_llS@AL=Ru(7d&c>+Wtu7Dy8aKo_$(p&Xn| z%JI+Vxk5o*2o@C|QrieEQ4aTt_N#|O9Xwu+;Yki8+1v;EjsI0Cwp)SS{znqzPmNTc zKzxpO%3W>195s}RUzIdU)PeMnZm9-J3PJIAcxWa29ov7;@6X>$r`@($u!m@^WH1d4 zTx_%dHb?HBYD--1YGTkycT7d4DN1r1AqyZpBglnZPDZ2gJf^ZN2itw2Ejw@+t+W>} z1}u$_l0x|$cq;i86E~NVUI@mMd~_))Xo+`1s;kOF{rQ&Zejyc=W?`-LzA(2h39*qYbcrOY7oShMX?x*0xDDr=ujR4O4DqhyP} zz>s)o|0#!%_n9+_p_fLkAv8ep?_{yzD7~}G&LC#U$B~yn9RQ)nR5J?J?pBrhbcf)Xln`(pV&7;5G!fd&D+0(!6k(jS*A;9@+61GXpTl zYH)omG5;FaZ~afmZFNc;KZ*HKAAtu3N!f?RcZ4%*^k3m*5K&FwDA8AMyNE%H z$Z6*`MXn*9ZohC-Q9^!zmB_dT_bUhkH#&FG;)+JQo5`fuZhzLIcAf=SB`btX0MA*Sk<{#hX^Dj>I)I&B@?k!WC|W)Rwa0aVW06f zkN^f{7vaklBJ6^2eq102%r)#ipwzZ2^v%+IJi_WR%GoBr_O0po9*YyrC= z<|JXripY98rcK{@N1U5NoFcgu1p=NuG!_+7Np{*#$}_4f(kA1TYGs%^JiG(lU0=Ux zCoAh3PbQzDBTY#vK4BOis3s5z^2|mGiv1IbT<8z%B(RyH)H0w4=uFWugay?p7=E#) z@=(h`QQO`2Upo;+%xbQdsi@_Sr1v0wDHCKCA=Ir&-+}7A zL}RQjd|6*SuGZt($CW6IB2p(bgDYyScndO~Fw`G7&VcBG7X=9c*R=@!5=I!Ll=ouB zbH;`K&@0!2Bd3?Zn$1dB@2;NI>r85)I+Di*W%=&mFdQao#C<*8!f+JzGpH%LIm~+yD=J_TLD8w zyu=#wlH-&ihv*C)3pi~DSG=U{Ij+}~doBnKZLSbE=p*0)5D#7fqUq2VNIWLM9owk4 z)MR0iPp8(UyC5DdrE~)&ffliz-^@L%ei&-xz~Bg+kTE zssg_AUv0@$80{%QqDz!$1tuCFJ+nrm=$fQjxn9gUA_A5{iBth3f8f^iBa*>`K<}DK z*yr|K_28^yd_oG&)-~ftO4L$|Y^%r_{cHvEM8SNI-*Duh1?m?r#5JjQM&?UwF2Ck8?vGIP*J(AsLuGkdD=myizJiZPF5 zo;j~>C}NG|R1GW~+JXeNQd9_8t!B=K2aP^V3jOy;&e3CrGqHly5G^r+p?iVk z)R)b8NwQXchg-xD0@u_}>pGqy?lbFVIFz2VcZY}=m3m53)Uj^ReKia0MaIRcYAaP1 zhsZ;Lsint`H7;I}5FEKAFZ&5N5m0ag#j4SR`cwSq`yAeAc!%J*yMI3({0Osj%zY~y zbM}qNJC9s{pUsk_pyI51@meHP7IKl8biyVy@kVCLduGZ7n z+AHYP}~_GB%9VvJ-^V&u=m2I z0I-OOECH}pp8$Ei>wMZwr*DzskxOKon%>CzFv*Zi@>i%OwT5>$c&cYFs^gV^KR^8% z#w&;4M@1r5VEabU1lk_1C|oWWpq!&|BbO?C%J0g(uib%MX_*UEMkL2&FI%K!QeltOZ!AT?3Oqa;%{0e%HhCCN&q*Yf9#{y( zZ9crnow{k{zWOa4OJm$u-p;cJWCi+_wEFuNs^f<=;DUSrDwaQq{kV-Q_fp!&LkCMv zKy%p{$JfWmFXKYGc+lBV|01070f>+{nAjq2E);n|qh_^{Icvdm!!zB|fK)WbPxmuI z-(&J^)#@)Cu27#{&Cbn1AZiRq_6+gAOj0s85!-V$S?avypt9Vzmm+ug+j=3}H(5ZY z(r)oiaA+OxV55+gH@F4Hg|f~C+tX!@Q44F~$s9O&Zq)Zm3+>*J-s z?U|$wh@WLIAcpP2RNgUkzDxF%1ruNc$IB~>fd73-@}y;hgRyu3S?j|Kh6UEnz?PaV z)`o@CDkrS5yL~UK=<*y=k@W|ghyGsAsesSZtw06!!{UB>17nMjOH@SM6hzF+TP0=G z@|YBnv(rmgvEY@u78HvIrspRs;VND)AJ5S!MHcyYK2AyRdG2~dJDj+Hl%UM5RcK0w zw7KV&CNw1C3+?NRR8FZ-xf`KnnA`=#3qEw_y z7;auJtwaRhOO)E?J@H53lVoU4hSMHm4Tc*ooG3G}vYC3E}0JdA?BJ|)KN`!6u9+KU(C(c3yx7slbjPZxJg z@`TU7@AVl1!IQ;3QO>h=C!pw^B|0%tAuWb^yl}%D?0B)N4KkIGHkJf*UMk{7CXjQy z7#y~-P6SPYgvVg^w(y{@cOlSeifgT2R{_W zx6RYRd1g-^UQjS%#RnI~7ph(^q>hg({(jrSo*tjzDbDww({6YZw^E;p43ry*@Gxqh zn&;-}Im_PRFobtNM(B~iiEu(bq;9cZ-!5(eZ3pU51-tm#83h*H2j<^(IjPBlz0Ou(q4+ur@rjxXj||rcl-G+U9AkP2INp1R?#*u;Y(4@_|e8qO+|* z4zdlQ_CHV-!8d=xi6EQUU)}ZZHO8=;fng1#FF?j|4Ol5+PGDA7sNEX@ST57KhfxH^ zYQC8_lAchfbZYLEuRs%`DoUkDdaoNNQy-5;wYk*cY*I5_kLVEpacdjEHA@;+t7=kr zx(SH1>~yZS{Bg8pS>sa6M|m#yB~rPR{)~u#>a5HDzSzDE>IC>~i)FWSh0dRQty-4s zL`tJoE9cs+_kn?BQ_#GW!3zNLd=xOJRYFX@Q1Rxq>BYLsk)rt_ttf*lk>d8-fvd!F z1WKw{%lk@nnX<>zJk+J*6zo<`H-evM@*)`>7lr_88&MTP^)fc_F|2nTTW|rh$+2`w zpzLnOixo|x-{10HwTvC7O({Bz8|6;w{(5mdm6(g&PKi=WABq@)qrS}qEnTBrS|^RAVmIBP zFz{g3v5_oTdLEQf7(WHO7r2{Hd)JackR}f4!Z;uS?AkTS>x_)FhP<-Rxr=t=kRIme zKQpCAp&gn)&qW~-1zEgcZJHW13{G1*B8W@1N@|NEK5^Iq{CW5Tg)QsM{<^U0aiEF6 zAhyDZ;-{eE{tu+U*svuH)x~0A2D(+u7I5&djKoW3$%SLYZ8?Ac^2@j7G`Q2#x7U*& zwUSdjpd@Paw)1K|OO&zRAfNPvw5Du8U7e=8R`*~S`s%IvTzARg+(2OA-k<_?cKwK2 z#9(@IJNeJrpZ|-ux^PD_7ZSC++$ct+=n6~^2TRngj7lx136a}87@;5DB$!{HkNZOJ zK>fv^AfK5lCE5#$kD2BHG1!>8l$kCIWEN3XI$E}{H+iL8!W(dt({lt2&b3KBuj!P{ zqHU|$sP}gmOR0tDEv2vQ>hSj1_}K2h6_JIfcy!76%2zrVzLBNpN}p;5jI3z|%)|J< z#ZtOOf}_O-HS9|cQXo>AQ&d{X1TEbdNE-EcAx#JUer4u(cfayS1#ztxsG#UJSEq*r zyGQq0^L2jje@6^6|Na&!ijE=WBf|$TQrHK7ty<<1+CY^?S!p%%H>u==QCiC1oanQJ zvZTSlCwWjETnzUTS^)ql1)g)s*HGS^m?#HV zv>_P{qb5IlkyOiIk6C?t*L^{Z-g1SvP}>auU+F>loob}fMsmS7AmcUUodiemWpZ~Vln~{@UciTV z=cwDK$&q`OXOy6QCTn0{1d*9*8__J2r1y&gP*l?1^pEeLr~;fZ84`96D>n5GXpyaO zYFY8L5Fam$9jn&YCcVA!A5b^&WArqwKNHd~B_iC@PYdDMrcvFS~uZ}$PL68wMR zXu+3k&k9R1N zHL~G8i<^oN#DiV%ehxWy#Wod^i8ikuLXI?5Ys(T$3TPBX|bB)r~dNOAAiP3C|5Q~iP3$7JP?bnEl_ZO=**v4@G1ZW*cOp3a>=v#lg&7G__d2@f zF@$ynrYvuj98!+n7E3)X|uL|C%G38vn`&Xyt);7eO#rCa#Ed8+>JJe zyGgNFd`xju$=wa4IHm?H`d1UC+&-_b(SHD3^)aTU3j6^tXsL<)>kMwNf>KRKUFPpD zGGlaYd$+gVqaxSUrITTV1CQ~=9)8~RU~&C2mQweKA#MKKXYkreJC}Y(G~s*b1JfE| zvvdtf&&5Sj(Z*6TFlBv}avr;~HHX7XeDz!pyr^!V&-h*4jA^Y%X}38B{Exm3Wj2w_ zguZbjl1u_Fx%lpa9ou?na><@AXinm+0cMP6iWPOMzBddWiaa8gB;EQIUEzqF=E(6_ zTX;U?hhYw}7wxe`A>1Ww>9MeSf;$nMo_jAQtFLGPL!<4*7*C!E9ttN0-|g*Uu^g@3 za-3Z+#(>2eu^7I!kb7*qzmAjI>6b(9Qkm}MWzqs{7f$GAFm?1aXP#js;s=e z`6g#u^g-3{KaR7l;@9^f-D2u7UQKxQcab%qE9Aq!TTwGKl(e8`cV4){&`cmYL-|n6 zUgnPA_ukHq!XOR;>q*+}k36++WiBl&i4#FaHYfd@z3lT39Aig#hRbuDa~rr6bx;`* zo-M0MhNR2$d0V}|SY1#B37kVQ_qKaG9(rLb#zt#TZ-`~%q^-097B8D1#@i~2=7cPF zZ;QKQ!AlV%F85?csr;?SBJx)q8Y6d~Q6(?_8q6Y5baO7IR;(Mm-VNopcVEJ^IF8K_AisT7Zkf!GJP*-9iOEai<60!~P^;Pp%8*(FQI>AjrKr4CEK0tl|4dVK&k{Fr zrf*l$tApZ;eJEK!4CxdAXaa_lr8v7DUy}9x6#0wkyVFFX$PTL{6>Tyoca{N#6-Ba6 zqS-_1)3A@mUryxfL9Er&p&?VNM@ z4WTG|;DJbX{gwTN6fo!uDyHCXkAGFwZ~3A2;{}Bu!JkeB0~V!qj8j@O)&@XbYJSndK5Np`*_W^uW{>Ol9G5DMIo~lHP4&FXjFTQ*uI)! zZ;Z_}qxIv9kl?wwOD3yE3RGA$IC+&riJp}P>_@-vwz84ptt)#TcVk_8rCl&W=n>_r zM(-^VVCH~jlbfYrNLs2gl$)jxYd~A8XWAtWgt7pW8E>(k*ziMymV9Oo03a|cjlR`1 zK>IaWgE#fb!^5$XCaj@Nje3|{n6kuCZNQ# zX<0PQ2Bi2_T{Ul&T&FIhPOZ*!Ytf>gt=o(!AHbxL%&3EZ_tfc0&S+tb^Z2YS!%(}s zUUKnnkT2(FpNI<64?iB9oh5Sh`JMhm--z6)(Ig*LIR3zI;d~wYG zCA=S@^jjnM>mhC)h&7H-~T#Sw8Drt7Pk-y^iCP}TY-Rk0m36CK&5#RL%^d0l% z;tvL_2FImErIynZ(NqksD(;kzt@S}#odQqJNTj0quTU-&g3R|L#Xs7(AB;%O&&>s* z&adH#!P2nqylg6#(Dq-ouseIl3sq1qxm7*X?o_Tz2c*EEY^p_6luR~J(%OTin;VS1 z5W<>fRfS&bW9rj7JXj zaJ={~P3|X;#g9u}BX2s`Hn9PTBGA4*G{-BTR>K8@CA5&x2I8pIWCJP=l~r0; zwFb7ifnCv+R87?hpS}Sq{>RqSlwkv~r~FH{mDuS@N)JD#+a3Mc7e`YA&aWSql72$m zo@Yh#trLt+Q1>A{c4(^llZM;o@_{gk#5{{Ha7x`LRe?}}v1*1L4!L5^e@h>vg)g6P z`i&yK;qkFLKe$zP*Xf}c9(!%4gnd8@cSmIZOIPu8rS4AZWp$0pGP0>nY=hLEyAuxYx=%-SP1+}#}#y?o+iYtucB&EA)H z=}&lX36VWI4%OHgc(ppfk}|T)tVeMFrksD+B#F}uKK3ZVp1ld z6Z2o?02=tDKIRh#Rj zJaN^vURS!u8@ERK*RsSi_MCmWFBW$oP?wskvVtU!6;DM381x>OoXgQr4rJNDxw=TG zvFmL!QR^oqhe}VrCn7_#{nOkyG;;^d?Gi){3t>n#iAqnL!>viyzZ=j0IMd1>Q^AC3 zBr;f}UwCu3T3j=24}wk31kEUeIra5E=-8XvLLi6tq@I}+!Jp`DC*8k%f}B-QZ+!*n zir_i!Ar8?iGmDau(voNiL2|9_~ zzHZL&f>umkzE(Ig?t70M&4q5rnm2Lij3jYy$UM?+L{|lWQ1Pr+AuCy_AM)jztl%=h zjPv_;wghG@?O(1H1;!@Tq;Q{~~@> zLuhS{H_Nc_3Q4ggTp7nZ64$d;;}NvS^oZ$!n+veT>ix-I*0BBAcF74SK2SZ zT$y2ltV$KU4c-ZBEQ_>ZaT~I`Z=8RjC{xQ?x$#1f;&r)utZ#L@`bXbA?=J0+7qh{e zH~q!KVo*$j)vbZS^vqb`%nR!;CPWXVKi5bf?McI_Pzzbm z%!D1)MfKH={WK0#r?%vT6;iykZwCmWUcomim^a++V=9k&b~8nlQr&2V`rQZ=e>XrR z;#ipHouP1gI5(GL2tTEW^-Ie7`SZ`8VVU;^Mrb|5{J1bu`C0bXod^zFC|^D6GMO%M zQRE0s-Bx(C`DJ-HM+38|p%KMhU1*PIgVo}gz8^_X3W@rW{J=cIFQV?G9=6n!pzoc( zM#cSc|L~Ix;4H>NoMwBXXBSC8EkdiurEtECr}wj)5#>h)=B1CV#qabf<(J9gCVISP5*q~3?axYbUKJ#lj)#G# zr~MbY!VZR%+9>dVrH(dS030~yS)YGCAz}E$J}ZP!D9gd5J7sx5k{ew&xUaG{(xwM; z6=A9L(_|52936-$2#P$nvMg!ysJq~_5@v3D%wDK~CkRAKC5G5zVV4nfC=qBY>Iz5AxHBW!xinikJ#3Pk_ zE#>*rTe`HB1nr`fTizZZ74w7Td;Ya%1RR2vvs@})FZ=rJZZZaRa9!MwXLBtz^~xta zd%C@tO_<^1n`40VdwhnKY%XUg%x@phAw7 z!troETP*m?c{jt^uNp#e$5i#Y2kCC;?BV~Cx_Ow!S8}#;saiw=Ua8ym}bF`LE z6Z5EvqSh;{i+m{eeCh*$D4_%{pD`p}XA9MfK82zZeWP6kZkb6a+*W_`0zg@E;w2RM#kfx$N4-;LB1x_07dLM*<{gwtZ=TG*Y7g-iVar4&03j5 z^~^>0h#qOIr;lDT^W|RQfBdI>`roiWm~^#2A4f~LxcZv99Dus8g~|zXw&>X7Iy{-l zP2yOv(#`&^0Y{`|3o@sK4WP5A#8gBPBR#6FptYV$Hn&poAuXLEYJdEe3OotX?V1Dw zbqWdm*A4TO#g3)Y!MaX?Ev=gPOW-|6}`SzR0>W zP$~KZuM>(hjl)`2G5c0on#%}Q+wg+V!~DQ9q1m5GDlFmBsbv*Q@2b_e5u#1l1?D+3$`}a#_JPMqKa~`l`J<}uQtr#q4dk7 zfHqgw_krST@L@|%55r~4Be-~au0@>5&SWwiyJsr?p3T||M&a!W`WC8js@m4(($c1y zZswDI?;c#gl6Ij+<%xT62E!3CiR5DBMr9XQBv{h>C*eu=)k2yJl(#mPcY<@9yE_q) zb|y+xL+j|b?!JXSdb^mEXr*>g{3uVBWe|9ydCEROuMCBNTZf-CXRu;MsfJvdFp!)3 zvb>Qe`?kF7?h8b85xkcc)tvPhf^|eyV({W^l{xEw{m1|QUufvX@~1D}7xDAYO%OEM zOZoVJ{O|f|ySzLOI$BbqctRp2)RLM(fWK2cbWL4@*K~bMO$s^zm~+%|Ou#%D*+B$z=mSR$vjHBBo(bU1mtRB| zvqEY+N=M7vn%;LZntI8~wVtlY?YxQ|0dnv1;KcaRn?OH+=*r=G~ zwgdn2jZ~d9W7>-sL}#^O6Xdy`r81~vW>qmMA(fVOF`e^aV8^88Uq4?9h7v>A%w@bz z@<727wUy+=GDs@IU8YJbMyl3kZ3lh^6F%#lsW@1E0&ODsCYgCQYl(Rx=uMnrW~AZK zL8_1cHYEWpz2YJzvgoZu!x~)tD=i6j1V*#FV-2-_S`~mKHBE8y$953n?`mrz_e*dh zS}>R4r0jF=b@&D4YSvldR>~G*LCqq}kv1620$m02Ygm>iE9tyBgzup@r$x7}Gl7w@ ztZ_~CTm0<%J4OShzOnRuA5Twpn4#(wZH2ZLi%{JPV08A!nB?kk*9yUC;~Cr&kHTIe zT^c0DoM7pzcFapiHpP?dZ&2&Dk%=UT&D%M!*0bePh+o;dj0>Dy$1-uOvxlsIW%Fa2 zz=nrxxm~UXD#XAV8^w~Kv(~rUj@H2;WugjMH)KYHfV>2RK4LGGX$Hus|o_mJ4J`zQ*@g zN$y2iU;(wXZa2{sTI)+^bA6(oD6tFFCep^9kLTC)y2z71URs|>@O8Sih{=K7^2A9T zLsYF)`2pIuAP3!jV_mZ->X;RSsZ(Dyjkv0;HXl2S{Nok(k|uB~xNwQO{&RyaT%f;{zJ_OVe)W1~1kYQF zf|i$&kY_rCmW)vlwBJ_q+ttmrHs2(BP)!@K$HA{gWj=Nye}tO5-$!!?)9E`KFbA%^ z>+ytglOw{I`4s*t@L-?T@XIA!EF*w%0>E^f+^;|X{BFFEZmF*d#QHkAT<{TF=)VEB z^V~^6%?1R@?DCROd?Ad+cF^WwsZjiZujO$WjRqKwH;5~HgD z2v2Y}dje){9Tja^gjW-iEvgEI#h;x;G%E7Gq5tibw7)ULOB&xcHv}=3)7svS7hvwH zqrn7-_m1g}_oLwv*~b8(s*o}=M@vYB7xbYlKLK5w9Lp42JPMNFi&10>{KfXG!c+b8 z&yGiq8}yISUt`h(h(!Zas4XF(W>T$VBWz)~h_nmHmqP%OCIo0NT|7WZvmD(n4up|e zSSewG6fz^ekvNW-3Dbif$Bk7&6D+U6mMixo79cE$_ltellI#yUq8bU8z40^5Q8;Dh z6$D=>Eg)2|ZRV~THF%4{|p3H*LGfvT+%p)`>7kDZIzN;;6vO{U|~*qq1GZ7xHr z&0nxCa@UbeB!VMI@QGTZR*`we0(y~L<{_`$h1LWDw#*P1KjN??xzcW?7J^8Vrnl54 zZ-y`Qj8}U#m?z}=iG=4&+Pi0mM&3W4dymQqd^zmjNjt709u)4wUuDfVottX^RDNa| z=lP7YTr5{}jas+tqz{d9p)CEZWscZe@IJ!7!V86b?@nk2uP1yBR*UtKK9vrN6UugV zdqZI#Jt}ppur{?)IgXjQot8RD*VkL^p2i)ukyht>w)AM{r}b*Wk{GJNKp*uv8|k zhFS9G4wz{>Qn?5t_^r~QWky2|XNa!iJH7;6FqOXJKWW_zvR$`hWiyWK%-7tZNwQE2 zJbKidjZTiC)2^cDPgdm5+*wNC^IW%lsv!7$IFF45oIUJCZg7z{|s`o`|=RD%o+V0RLbvVAf?_E znaV_(x%CLOB1=HW$Iwi6IFPl|y1T<_kRw|3zn%3D&JK@{`^B;^o;48t{t}$DJwlr= zNHlI%pxUl}bZ~Yq-RhEn1%YTfr`E63eNm>_BP&a~RcS%~c^0NJ0OM>lxde|MrUa4* zcc&Xr=jg-urnp(D$rtF$ zyL9sC|FP10e&nEu)4L-N-?aU;Dc@dCew-^E;9`J10Y-%fOk{6%Y7A|4wd%v8^W zJVW8n#4-Z66N;!1ES5C@VL`KIN`s8Fnz7bAgx7|$5Ao3J9N&_JTVA5T-;w)ZG4)-2 zAr!e#eR~P?SQk%mY8P_;m}QPhQ-hP2~YFv-C7~< zt4^gIqVh`NM%W~G0VTkKzBq|Uhp}Q}8SBtf#{}V^ao!4-qGVc?m7_27YnJCx{^jZ?I({D~^6>1qNwOyhwmQx2g&AVLSuSUl!VT-pvO?Wfd}; z3?p3XcBjVQs~u~MD83*KN=8xME$n$bB#}}t3p-NeVgZsymLS zmOqoV4XHFa9_o&?G?<7SJ@2UOl+?wry(vITs}O50x5iDc6n%ckgw#ph5e9#bZGFVH zOQhV~hh6D%w(fpCeXTp#-MLr|ZeRc(kY@=6b5S2XDy<3RxM$!{jhAf}tM;7<~ zPv$q9ghwo2#@){vYN~xCh)p5#wOad(WgQ2iFxEKJnPhC_3(QfMzYQ0dzu-O$- zQBw?8A`SAWIW7BLq-2ZX#PX&Ug%G2#+_>84RJF!sx^ym0gZm%ZoDg#5O@=q2%j<5! z1q;d<4GG#bY-H|ym7Y|B{cyvScp9&3jz$`0nNek-y+L*J`UqWP6tJw|<_wIJ8z-7H z7g{@AhV+5i#QOD;oUKp?cgItjcnk^k$3E`cVmWy;dK?W_qK$U$yWN)W|gmF-0 zIGzZwG@^LG)w5sN*0yW^){{^_QcN;(1^$eDj|8|Rm?5LG898d-a>9X#MX$75RlXG! z^7=AFaK}d%c)@UJNTQeCkh+8YOPrAM^UwL%6}MLdulBgLC1%aXt3;|At-|``Q6@&*plyke9wG#vnl}HV+e_V`SQF5~uRhdYp=eYGEnRFeB ziEcEwkPl=qY5#gW1S1ZzYM@CbmU9x9Gl!gi~EIPj3Ey^3JV-*eca-ZTWJ$m0V}8b96q| z6;m%+>`~Z~HsI6Y?Yq12e}(`4!?P_QBoqQrXdyl5RS5ztC0Q?i$ph!qZR(`u2OLoN z60$xtEeL~?OD*?J{3*_h@kcT~Ts&rYY87H-ro}gt*nYJfsZLOGTET#HzB6BB?M}3+ z1oR7nfCW0>;Olz=2roW=qum^Hv>FQnR}b{B+H)CAt)`cB*?&g zTCps<&}AAVB?m~C-z$ligJx0bG zSSZI`=NrI4NK%yE&<2nGZgs`8O!5%Qb-+}Bap%*o&g zzE`C5ZbJfL|BEeW$Q;7}M@oYjZaG_7XYYomdR||H;A)Fg#Z=TOev(lSnH;%jRJe|%c{HSs z>9)cB_ZZCO!q<#M*Bk5A_nT{NK&rs{B01l+oRzFe%Jnatxv!lhx2%5(YVoyPq#T#g z*kXSB<9cg*Co;~#ES*T~n;5K@585KGM`W`=v_IrJ;X|iLiHCPg?og}iJVXjGsoCKE zivfZO6ddL_5XQGI(7Jnj1D`tmt;M|8-kb=S#=+#OlgcfNK};$(F}8E2jvym^g^uw!Y&a*G6*kQjU0hpDY`J0l6sX+pwVY)mw{aNN@5C{SfUIN zUUQ@Nw%dJmzktjt`Zr>sd9qr@)-@DEHv?mzD$#nYuN?6$XGoTyF$JY1M_b(UV7mP{dCzXM+8O6&0~ z`17nz*=jvnoj6QTe{tV`VB{nz1Jgp8qF>BD=ZtpjUL#!)V|Y7c8I9IXj>z2=zk1vG zJ4pr*1^vTf<>V;1b8WNNTCCby>n)9NZb-_k8&6Ojf!ry`lnb+`RP^PQa;N8eY{qQn zwxe$Q`Dgv3b&@K~%SF+fm>$h|=k5Rl;m~^N#Jtx~tC6ZNkfyX_4qC-y{h^~BgiOiW z7Rik2sg@H49ZxjKDh6YwHSsc0iz!Ga9?A#Tr0jAf4AB$hSW}>lNVeiqdtmHA1= z{3>R&6oP$GyXIU{kK+?kmvpJO?NMB%dJ*@>nq?&lBSJ5LyhDCN(t?D zhog(t6`C68Z|`e}X&pS7Ti7(NNPQoYl$QoeXxBWgLLHl{J+)rBi>FISH6`5KaD-yQ zcauKP6qC~J{%K?8X-}RIa-@aBy+irg*k?afe%A#{LHh+w7PAv=;WUYk4FS<)@U7Cm zt(j!oz8dR9Je`?gG%qGN^=PxpJot2?rG}iX^0m%bp(VXRt!(A)?)<6p@qRSH$AMEs zd0B;{?T^CiHG*xFJGPrI4tPE&5PpBDHN&@UZIV&$M#;qO388-QC4C zKFm#@Rld}*GrVpv!3l0vS(z~qHXtD0|5czTK`m~_iWSzkyOX+ue0OjwlO=bpghRkC zov;?$wkC}5dX=bH%#sE494+OxxVB;Ds;IL%?t2_R8jB6+A0EkO0EFx~y5YF?Ly?8} zm9CJ>GZ`uL5AA$8DE|&||AL|FB2y|q0r1e33K<@w7MSe$Fu~2pUYd_mcc;5U&37uT z!K&yJO3L+YiHp@mhApw&;qD9ZJJPm?G&fMos|}L0+Mr`yRS9uJ85nMO`0h^9*S(0q ztg4dQFAYknr4r{V=LkHX&xrOn+mFf^zrB#hW5pUrk5NXYkDlLWBsnv={K%*qn(CeOL6t`Sb9Jq6tIK(gjqMCTwyVgUFe;RVou(tuG$ zd9b!);BS>L2+j&F)79WQ%(Y5P@ymBq5n=*lkV}=k*QqT4i5Y-JwCAshuX-qWa8=OtqEv--FuijZW?cz-(isYt zEhq)unk@ykg%5TwzGj9;Qf}LBve&p3>_zlr%6slDq@4H_Em}sa?&apUA|ntGj@;hS z(J2pH>G8BRN*%(I&bg-hTGZO|zK=7@nP}}HjCrgLh)g+sErodbRlXRnzwu7OYHGZ! zcy9S7#mz`dr~yM01_w1#)xVT2QJT|fu^{HW#aJewK9bqwfHEwlUJ=8Z{L>Va#5uBE z;dXxE6oIL}PNQvTO%|=oKxl6Hr~itSKD<|MmvzU z0e`53TJDtZ_g_Q@eIEzipl9Z7rDcM3#<$xI<<*i0p#8BjCxyqtI5g_|4;ladx6u^( zmqAGJEy~PFg%wz}L8f%-$&{F4drofL@Sh%iwAKKV9C`(2nXnb+!&gy=X0W4o{Nmwy zG=lTMo9q9Ge>GiFE8#=}h_zaAjm>N#RNpPk?=gxoxoZ-30RWiHmIkwxM$qp5(3%X7 zFXe1Qeq`@+wtO>XDD#Z*$x9TkL@6)&hY_eIS8Y||tzwhDtoc7&8qFQTAHdMIM%6x3 zb4Ei{ll#?U=g$c+E&0E%afNB(nC6niI6z56@^LM*WC@QI3Hn-0uPnXNns1Nk{>WA( zog9bO3HS}n;e7HG;vaj&q^qR78H-vWvUKpI{=89a{?V86boqzT=uX;6Cp=K^&lQwd zaHRYE+n`6RIaVLl9n}h_*E!5ox+4wcE=`-_5G6x9Q*TN>Kh+xFhLGmN^Qy4`+3uVD z5YmGwmN1ywUxB)b_b>0)7H7vDmBs&YQIE~h;!|$yB3a}0ko8UnclqgjhBox%YM6Vs z(bd$vQ9zDY+^bhY&!riFhAdNx|2TUPN*euDnwgDNuzK0=4i+)1N9GFT)QtKWM#Ku;G!%!&1 zU4ZCU@Z>l)!+G$ZBLRU|+Hg^sP-D=0smU(3uih>1<=qmn4N{Ro(8rku&dB z?}f1P*xyV-YT-Aj*s7b&{Wy<^RqUbLGD?jJWHCp%xGS5AErZ*X;_O|qun~bFuG=33 zb|o3NJ6b%^j-U%yCQ&Wk5z`_IR>?4g1fjfEJ;@Mskr7;!TFKG|L7%2BZ{#(xGZnQd z6XCRfNPirWYFyCTZGa%s`TLnE)$)O}J1j%s0-cdcy}mDjJ(q6;H$w@TMfgygnVeYEvEzI1UKVE<=t+_1z^&dx(4xp zMD`nKFElC))EDw+=r5jU=3?Aj-|X6I*~V~0^JE}nQ;7K^oC%J4_>HIx!RO0^x2pCC z@%%3)Kh8z9F-1qd(YkM$n^`0leODUiR<{?7P`eIk?tVlo_My(zbXj-j^-td7Cbx5b zSm|u}hjb6&Q#3rMM3;HF;3c0=skeIm~K+$p# zCpL`(bg2`^wE`;DtY1!hC7>c~wpp*{R3DP;ETfcYRb8#0g*42~LgE#ZIA{M$YxwCU zS0{!`npQioGlkKGjhEdco)SDz90(1Yjl{Z;&ng!`uW)`nMPmz(oiTvy-;Mxd4Jd^3%?B-ppNi@DZZ(l^T8_vk932^xjpPbX z+`WbTnzk%^(d4?Rq&OU&v2Ak4ylrPi)kpQ-Ctu<8LcQ1#&;%dK{0KY$sV6BvRjF$g zs&xv`A3TDL>X)_`vL}DFGDL(~rEcc*L|r3J$(q>;m_DU8rD$@zD5oY?d`x*UjX@ee z9jk`a082L_^B|Qq{M5^33_G5E zB=0EyXWC5gEngOrPCFiayzO>-9?|3q;zmfX&Ua$&TVUf`fG30Bh|9(36EKdi(QNm^ ztJ%MUj_e9zzu7_~8`oA2Asbq^ZU%f=!~SyAgNg;=s|DZhdTI@VQnH8ZO5|)p^uA1? ze)+OO=;l-5r3|X<59mX#XPrOs?geuy;@&Dzt-3Rg+BhAM1v;nQe3@qwaW(olyTWZ-Vmu5mpl|r&+ZDUDFO8_8x8(%Jg+C{(Z?aKjlhk?g1 z<}b@#PWYR+v#Z#UGJ0JMztd<;l&Qcmd6#f7P?Cn)8jsa-C0kteHG!=_x=}itkA`n( zUD9=yZd(tEYXmd}sdLY==8p=Gw?6rjw-@dQXtR_o%d_4mNvfkgHdY4LRLv^ceL)AY z;-g_GepD&R*A|MDQ-}c4IBmt9Dk*wY##-OARddCZif@Dxy~7rJcowd>ZMrBaYr3ev z@_utO;Bvtqf5PoyI-QIv9|V93Jg7%4M_{>^a0sKawD z)iTeMA@_(=;-t7|&xKd$S;?q%U-o~G*c{~(W>unbNHoV{oiIX$wDYf#O!ucmcmDh{ z$~lag`}t=u;t~g&ZlQy5xmD#QzLG-^@AQK*UB?zn z`+{5|jF8`%KgtTl+|L#0{D5@IIU_Ze7dZ_Ay8s@D|I$}OpwAbCkLp%0;Dq>S6-`r3 zHp8LPf(MdBM?!8Rmq%q*;!-gIJK&O~YN>-55cz=CN|8v_JKBM6xv4yDYwh|KgMx&u zt&G)UaDcppxiIpa@y9lo8HkrXeM?-sE(Pu}Sg1ul?bEg8r@3)Rth`)c zI+ASgX_svZ!VdCj{dfRA;6}uq>rbl*RTuTnb8!=*r^6<>6B!@Ue=43W8@wrVW0;_r zi+F{Xb|i<7KKH5|!&G@*v`2gC~8l7E~JW)mxt#zn#{DyHZ&DHC!&#alno;#Fuw zRpq#xX~IFCyVb>#bY4Kc5cRSZb^K(9QBD2POfMeOEfnJInI{yuef;d#HuymIWwCHh z0mYBlj+eDVIpKd_%%3XR!VTUoH`|wx$BN{I&saiTmD0Jv^jsF$n!_-qi)Gy&Kp?B4_S`#DTMW=Tc~-d~ zMhr%18-=xrZ7RF34VTx;`tFD9;=A`A$Ky2O%FkW~?_1`f;;yGUDXFD;l3HLCB_=)k z2AX65_t;3&*t%!{Wl1ib2~R}Dm=@aHMssT9AHij;NbZPaszIq6NPOfi3LDw=vZPJV z!!WtSS6`}EgeSMRK9X;fxIcgDoUMUj&RUhlx~F&F(zsLVBId7CD+M)1z01;O4n;;w z!5ff{ zB_y*^NcV&A+1f=p!!b#f+v%)`L-vM>YdArMZ3rvk}W=;X%nsb`)%K* zh6oaPGUE6T;xyq2q^<91j80&!rIwQpK9PrPB978qC-bFhkm7xISL&j;f<{xLDxpp{ zQx)M#!l6x;TTN@3lUa?vouvb^uPQfiWW+|O=C6rZkV zL(PfBx)abg8C69Ufg+>E3P;m!U;dP49mM;x+8r_WXigiMl?+>*eJi1vUs7oV zsRci-^ql=qPhq_@ois1W>eU57hOnU-JnB+&7>!5S4=G~0uAi)$65R~MJX>8vki9&1 zSy=1t$xLQ4KeUeu?JWVoHjCLRPU|#Ua9%5;P<0WXb+x3<(*FH*Egp>_1MkKt+ueRg zvVKR5CX;9LO-D#-PLTYz_M|3Us8 zo-yRT%Me(-0dHNY$>0sIA(W*kliX{N>7lD+76{&L{BP1oYD@fzqtKE^RfE3MiyVIy1O#&MrAUtSNDxfKE49|IA<0JEm37JTdYc|jv8G`ok0}D z{+GkqWH#^aT`%s>WK6uCyrZi1bS=gx+40;91YtiM7dQ-8D*1^Y(ezk+Qf~l}2Tx~D zw-?lAIVXC@4x=e7V&$-?jgEJThw8CkU%8c%LIhjbgyFISU8fYY}Cxjz(t6*t#1 zktuzT!F^l|SGXAs-+bm6M!j8Kp}=8E7|h3agw}CMdQw(Hg#XHLhmfaC<#){XC(z6&iw3_0*Tfp$nYQg19aaA zspoV^PrYkVatwY#Wa`Xpx-ZBf%{*{j=tyT&Mw-$Up5*7BRjni9_8Px-gbwL`)cJ!X zCc=LNDN5U_G*>v{WM2d3o{YFLc2eJuEuKxdtcYW)P{Af{h$pu7crh=K06~vTdjH@?AzltPhC(3d-JOc z=^#9(9C&35o?W)4xFk9tQB(Um(JN@Dc3H8a-a+7eect-ML@Z%4KNUxDyg0Zd*)!@) z;8pvbOp?^Ay*IqK~%xpybj z+`}7wG3<8?2}NhaNu>%p+$lZ|Xs9rf`193xgk=CFD=W%oHN#AJ^|x zR+CcSFr!A?%yMc%_M!PKdsREv>%EckzSQ(&^PG%`03=>14$wW*2FhYmJ#znI)z7s1Bm7Ajsl-n1#w87GF` z$Z;q19lFA{v9@-Y;_jUn^FyiCsLcMex+hTHBTu+L7f8?Y2cs0@enq4m0q{X6hGEp2exQE9 zS}Ak7D)UTQbx7RpD#qWul@F^2qP@=V`22sZMw5crgX6RuTMrD-v7lU~>B#jg2k`@h zkQU#i2YUE>Z`i>Y5sIjzIyZmxJ>k#OC!szc8>Lb6RMdgTe% zD=k4(r7;UAp5UMOZ(|@(nrxx~51%Xr5|RQZ-^UjZZ9!;F=I9NO$Uq{=r$3~tOrAaH zQUS>wn8~;#sq%enN;7w+GuonRpi5bf(wC0c;xHRtE38`cdcL=hCn9{T((>u;s8}tZ zI_Im=Vpu%MgQo%{7zoP;eL}o0R(u+N^J6hvbUy3Pzs_K&Npch?4^s=iHXiSt-7*m} zx73;uTTp*tHN~YrCvDI<8h^K3Sb9!gQ!fLJORj|d`&U#vnF9WQTPncjmNnEC z2bH7W3<24&Uguy~xm>gI-4w{K(6xjH;BTl{JTBQ&sc9min@i$nD_~pm-*8ndu^$gQ zkQ-r9VyXTZ4apdaY`+~%uEs0Vq-nrV*NOQ4SH!7y_~mt*CCm`7N?@c(w)LN4)$TiY z(b2CM)Hb}4zlrn+YVsnRz-STu=0carq~A5SO;c$%Vx@#e@$mAdDPiw={E zSHq_d)7j%aS@2QklwDiSI){Ie@RBQoPnA&1X1oV2c}!i`WHm-(hlyo1^ znj|1MK4*FG>VZ-f!BF4kH+Qo;#?q072#XP&rI&ZYcmUD$ILK8~(MCC5-!dCbQ}@LK zMT6Oc91Cvu=dwR1^!+-b%fTg5_QOT%^#kz`8dXHNmdn=F-6|4tR?td#-#L3Cj!&F& z_di}PXYUtMBar7Mkb(yvk<5nio~`TmT;-#a7Z z==DV3T@=%YYS5)F#Tz1r=|WO}JjMHBDl|=RXLqyP+2t%8?emqC06gt0j~C?H*R4eV zhP0_2Iq4UL8GiosYvN0On=T|pCX=X9B=0MgI=@~lc^+KcT$A=jX&%jIe~qT^1n%I~ zel1}7S8B=0wOVEaM@dtr8s?8RH50SlXI&izYx>%}ON zko;x!ywvs}E!N3#3YwkJY1VtB@W)Vcw6RE<8l!VK3MA(#mvY(dYRSWNc5li5^gi3E zRX_NLs|$6pQv3dXaevgi|N8v;fkSz&!>3yx+7Ne>d=Zjo9S1o(*EZ99~ctzit_wPS{KHHR<+WN4Kl-{ZMpRo8Z{E<2K2MDy}wF*|sP9 z6)mtoj*}v_Kdm_$E`=}E6EX=MO~tzdQ!%~5^L)#HCIx+@*PUC-P2J7d60#k_4bzD= zptI$ZiI98o4*u$9>~j?4Q25h~y`|cdIOfywnajrD?a!iPq#hOIqSWCMBRH z&L3v)##iH|kiY*!iY>@iQ)=@zStPe6ib#i0ogjw2t0y|Z+jIY^r$P1;F=iPD7#+t@soUSvc31YIMP5(040s;lplULmT6ms%)hr_Jea zvlf|^$qaS^w)4@^F(1bBtLyP!gcrl&Rx5qY_0F9-S#4k{WLE@XFj}0fmP#V;K?cYJ zNPfg3h@$#lC}>D)qJ|x!F0{Jq)Pv?<%;0Npf(|*drV8>E8VdaS6Kx4vj*8-7U zd3;vf>PCfo`I?tFI5=jt=JOt+Y;bke{86`?6#T38FHv=SRVAxYV95Tdl6^}~E_rf) zN_Y6jq+91VBqd~t@Y)kBkn89)M^wqZ5Yh9cvb4D)fV7HsQHC&i%2&-Fcg`3k!^el? zD=Yn{)_wPOS9<@C>A^HY@|@aiE@VvbL;>WYZN2#&Pp)|~K+CC}Z{w>~nl<+WojzWd zwkOd?U#aO5hxCS$P2D?qgd0VDk=C7V(per%2T~Sx%ONXTmr19vLK)UiT~9KJ1qs&< zW?B1Hql=8b2Zd7!JL1Vto2lw|bN?|Ui$Ht6mm>EEfML_`goS@E?u!KX__nxRC5hV@ zn7_Fg-0i*6C_w~Zhgj~6!jPtmR7khm(H+_#pT2UOg;R|D(TLEH7LqMW{g^x~&_hUF zo#kT9ay>2r?m*?)0dBP**7d7UL3pAVIC@3G+FGR&tcnb!C2a=XN1+LoDx{=#_67gv z5Fd?v#L;#G0I@zOl3C3E%N`XHurF2`1o>Hajr6@@N-hUfSFaE?QTpaR* z1DH%EK{bLaKjF?;@CS2h2 zEbi0cWGu_HoK4NG?5J8V_wf%sQwP)G(Q3Jx3M64L8nV|xwd538)GRx44!QMReB!flS%Qa*~0P}BtB@~rSdUvC0*)0;Va;r34Z$N5Uwat^ud&;*E0?Q9W^+PoiibN|F{~2;%Mu)Yki}Bo8*L6Lp{1K z#k}!Ex#jWqdN~xd341WGWbye-ngB>e11%z89n9uag6P@zySB1k-ILQEC9<0%hV!1! z-YJ2-CQ&%>i&20^@KE7B{W&6xBDia(l*C5Yvk7xP9L$*s?Us8I_8ylJNG%bKP`xOD zOCZ>~y>`sn#|sFag=_d)qAtrfVw4xf@5OcS3VO@y@$612e&HC%^0w|+S+7)V$Qdy7 zPy%5vcSSx4zjk!E$FML zB}?}OR%P^M!*LPmjyaY$*HnEy&jNL@xD2|{Arg>6>GQ%JodkeC}hDc%^wqz;=)J*NG+jnu^$ajf7zit8ZVslxM@K$ zenykIE%>vPhGprpdN(czTcO#I+YbFT;JM$9IS;D{9{qp*Q&+zdQWEI++!Yo^W6{_4 zAFZur(&`Osr11pLmQ!5u(ZbGx`PQ&|yWJ|AFaTVYd64xtGT6i?sp5PX-xN11$J~+( zEuNP2^c~I?%i?Rmmdf_lde4kFTGz_mA?ftQ^dO7w(*nCvn7R97>vzWC7=Py(j%L%R zaaiN-J|&NP9uxquNO9}Q2uSs#(BF8=44K&+_&4bQJ;p*LQ`~`x00;^9cv}v&v3c4$ zM#CJj;pfqP(E%pGiKRJ^Ltln?^z)U?05v_8Fk@*!;_dkA6Ip>-N4&@4#th{a)r6FJ z+tfLIc(+fKr##BDynnh*e&}L1mi{s-z3waPR7tY32>GW5B<2)|#_9?Hpq=Ots&sd+ z7n8E*lyAxo1+7OegSJ$DCTb5qWPI*$an#uYx(O*q68tVX6u}0wu}^6a$Z-mx#HLP7zwhN)IVJeBmNNiTc0q6gct@FgE=@KleMTl*0rlYvVxi;@M<8M51t}{J{Tv3 z0R6k*Lf#AW%YSyxsZ~?(7!u{3gR|r$9u`mJFx;TS^E!;5|4+3ExwmZIHirBEGK6Kk z$gg^l_#UJiLlbqB+wO}*j%70xPeGwL`;XL9EQc-&)HIw8Ew%-e_S1Mc72w<3$!z9W z@_;dDrn{Kq?0UZQ@kz3+!TS70(-p`_JhsvtHJ>kI*k@mzK49yQ6Apa)>tb{R=V*xe z>*uBJ&0obJ!tE9wL8awW*3*B-EYNBuulCXR${(W% zS#@meg+yLxIJTtFCC6h9@CDpjRUy9|aMCw5*LG`wa7nt1nc~VB(Jm^~5iRd1 zG%3^STe*MNeOb#H+A(bIS3~^D&E*VO8=h2zH1J$VN#-xTQ9K}o8ro7GUE3}1VF6-T zY1cw*an|>cN}AkuJ6CIPFFgsoF^+)Yx~;&eUflV_4lO|2wOZzkA;I#&_YofB9c z)ZCPN1GQejyCJ$;*+~$hKSFetPEX~t? zF$joqw)VMqHyi`n)pTze#HKm;ipqNPK4ho&PJmH;*-k9>Vf;owJAW@-KmFIwf%huJ>{P zoJ(9y&DkDYGDyN42Y-9*AGa8}T1!2IvVMGe%7m%kSJUq^imp@00rbnQ>bko7+c^f> zG%BvpoxnL4owLzgd=f<)$IK&29WbiUNFd}Ax@hE7b}atVZSUOpwNs^k*dUQ`!RYGhbgpfA-CqrnMNTDlXxW8%OfCcA_ZCeZPU(` zxv|Y!=Z*Hsd#e<;aD7V;)x@B3rogiI_7#75sT2e2!9(G(J`@)LY*&c}lR95rdg>PT z_O=BZQ|ox-bLkWL!-nVhSY<%*_ZDAQ;nfaQ5ZQhevYIN~Y}Rw@iNaE5Y58?$dQZ^! zJi2uW=&i-0v_=SzAVeF0wG%}0vG)GW-`@!|%&-V_pQD3lU4(iE(c z;SKM=Or4yGN+y228kBFH!hS`7Ee1et7o?y9lXhh*zi*Xce;sSn-WIbzURXdmS^}T9 z#z?tKO@$W`@zzrJESf&pr-oN{O;yJW;5d3(h9}Rj=2H4mKfyj!7{iRDz=P z@1uFi=)hA)C56vKS~JuzH3?>aHehXYTayf=`M1Piz>|g)?xs>)DMR(9*PA&GKY+41 zq*({#OLB+!5^rM8v^UPZ1D3gtJE*N99Y08(_naV|ZK|}m zdSzT-#jQ$2(CJMWsgnwPCFw_EQo4jbLB9vB!>18kZZkp$at8$+>Q7&(;9kIY)>}}f z-{1_tmL9YV+Woj5lg)ILDJgbY`EDjSjfbgL{cWs8lP~K4pxN9Dj$!NM%#lzvOegmg z1=OAs)oCJi?X~FWW|t>`Yy2BDAy$nu=e2pIZtw5y_1a#go6s$uYkL%xgOB@}K_RIlnHv zJPPT$WJxFA&VrCCitlVDp}bXpd=<%;qw$3u)05;lfSN_~#ga^+lv@^fKvuFD1HzEr z9o&`Uxkq?@!Me6DFWljoBG!=%#$`^Cu;8%%?;J4Mncsc6N?RdFt z$7R6KahG*BG1p68-Hw_gtTJ!4Qv^got9->=K^pP@8-8Jl!(;1ZyHf9<36aL80tr*AKx@Nv4ZJb63QwiSFCdb zB++ukYVIr;;W4Ml<;zO3rRCkenn`OtSk+VnYw=dpJ&tu5fd#9hY(7#~tx9WCt42Vf z89uXrX$CYdP`&g`rSD&*d6WfkhpW3!t*O$uCHc_T9zB}llrD)@6NbZ6XDF=;sP2tb z7R$v#l?zo;wXwcsXORK6_QRM?8_EY%`)~_@>&d765-vDSBP+kkY0PpxvQ(3$8e%~; zYbfuY0IMQAMQ$j_UnEZ}=!b-Ic*b}sq>S=U=F`$*CxE=NZW1onJd`Ce^_0pgG@2?EnQWZNHBYvM z`iyNTYQMI_ZLmn5@QVT_(U2W**eGKLW(hZpYHDFR4G> zsCYM_pptP-jg=CZ#3wjmulZuKJT6#*;2F*DM;1Ib_qOJfRCo4leW+RcF6(bP$CWqX zx8VIbd44#g{vsW*Q%`D687e*|yIwoiRtx@>fkgJF|M)dR_-yvvPoWGFoXh{{{8n59 z=x1{GZ<3bIM6G2!#S|J{=kSw#4mSXHdyl$SaCI&;mu#@4r3cH;97Ac2)T=ZM5iJ-n zGXz2?tkAz)7L&z@{SYG=t07D_ z883wP=_@v8HKOTa;ahg}x4-=g@9<)FKkM{XbIMr7^xHJxb8F&HSSs|r%94XPTTeC9 zSe*bjBiC!2zR_aoRv?&4=ec+6^IQ~H*P{uf*{zznSLpyckxkiAq8G04glYk7{7B5J zGU4Lb?Is`yJ;ghXp6^<9KyeYJmqNPoVnxYNP@dW{*sAo^Ws{8(qlZJE+ea;IF?&~N z<-;js!w%*`^>lVOzJV?^3>s-FjfOuxn1!Rioh<;vC-5%5V@R!J&6{eyoz^1V;{cyg z1r(L0Yoy$Ph|U)u%E9siy~m@G*2ojKR)XWDUPIVAWm3$jcT3htlKtq-8U_t)yXM|)I=?xKYmrt23S~i=mGJ- zYyfbQ@77MMyU+)yB`I`BhB|taEg#2ahL$IOYP>-I(Ex{^n%p2hTNT>n3h$*NauJ%N z(Z!sw=jnK=slV2JaU1AK4d!s-yIU5u_D%_lClzB?dlv`c=RwAK_m|5c-RE~%C4yYb_ZWQqwWjsnZvDF z2;{HKrrI;s1MjBkmZ;{O!KRZUX{X^aD=!kTTJA!3O6bKpP@K^jYqfRzy^>^8h@rzi zMDeJn?1V5)BzR2Tp0JF?nN7~eciP~I$jR)9gYkSYFD{pzZ#Rq;vEf#}b1!A*$Re!f zBkc`j^Sn#2){B0AJ!)%5PdmLc)tR*#C^pNo+);N~8Vz>|e{#Vabk4yu(-R^L;E$iB z2nY~!raWB|X>*>m8Yt&Vw!C$r%T;^<|1G&s>+=hjsY_$Sp5Rye=C4tM!%_|A^pyK+ zloDo(1VhMsZ1n(kzUzu2nS+C?^4niR;$%JUxMgb3&L+?Ti%=*wuVqCuRUq$vbW7mcF)ZTmT7genp zA1G!j5g|E(L*z+Z{@_1;WH8>Ur1(ErS%#o~n_4*A>a84A-IXK!6_zY_wEW$kPmdE4 z6}gKyH8z4D`>Vi7O(3ri;ESfHWp*Y^?2L>+>J4z@EuFIUC0PG@c_%Qrg>b6L+V&6O z+g1^ZdZ+uM?8xIB+qu{5)60d>6o#Lq6QX$A*oU9?pE?6LR0w} z?j+J4hfjAx*#ra6@Nix{Oe+4XG2?5LzLX&{315YTi~6Jz$OPb4nDY1Q-~JY-l~dv# zEmnhT2~gyY;LVw*RKZ5Y)!3)KhjSfXx-PhpO77J2^St_I%^PADA#OCq%I&NfC(|Cl z6;TRXp$N=k(lvK;>#2@^c+vb!xIM;~5DY;F99#;BTLRmlB)GJZlq#ST1Z% z%h~d!O40H56Nt<(}U=tfps5Xag!7CwNESp@pR9&`QEz_(+OSA7MoNR?< zX`k`rjw{_zw>SSQ&ZE@NB;MTXoaLW)Q|jq02s!u$Aj63+h7jf|Ff4dni2r zwLa6Hu;seQBgz~c-OliyO$E=MXO9CmuZOm_CO~&F6v!5WBc2ea5pyuUxR412iFhe<~B;MaA)~CyGtMRJUI!bq)8P~z= z*mbwT9M>ZAC|ENSte6tOt{8G8NY9>h#B!U@Bn-5zUEi;+^Xh@!)sjS6rJF!~UKtY* z$F_1pSaDXaOr5kI zVBw*sAsN9?f46GE755U*fwU5LP8Wp?1+9+V`=>R_i#TWCJ+6oy*0cju8r|50nUs@Q z_ZFkcB^#hVoDhOsNVh%zmTaPIMpK<+Jk>4Q*Wa;lMTbVI$sK@D)YgDT(-AQew4rh< zYq^v02|56T9w&h)T9O&xxmtoo>FzQ>X)#*#73}`vWuJcD8`SaX2lY+ss~k;;HtE32 zkp_nGjHI737dJgE-T~YkJmSq4q3R&%Qo8Krk*V$p*M&+o5B&_Vm+oaCf=Xfft-|aM z0vV1d{LL8zofIJe3;8lMldlsiWPA&nZ5bZ{0$FO1p*_jpejPlqW}_0k;Z_1D_z;OR z6)7DED$xbxc=8J6WvGV3SZvg)SzwcVH@f`Y*Hpc6G|1idZ{K4L%PcuSWUcxdkjo6`_Ou`Mq`EZr!r-I)!zehesiXu!q z3Owm21DrBLQfJXPJzMHn_47YK;ijKWIBkVv!T4(e6TXn) z=bkVsra+LPUh{7xRgzgNfpm3^!=;z@w}@GD?pG5F9lwg^i!t+>rif5qQB2oc265m6 zT@{0v(U&GPxoud*Hxk;XL>cn3;dlFnmF?+JBtl63(FYFc*dzk=Z|q&5Y1p;f{!r#1 zrYqNU)gw3utnm;_&yv7I1s}GqOuIAk&b-spL^J8j43rvd#VjFhKlb;Z<@V zu4=K9!Ey#%L0~G5MMTzY1@Cy{U0y#=I$7-4e)0zjjJnQO&P*K0w1KUfA4BXPN^c2DmPm zPv>G}BzA?hcK9J}AL3D-P(7BxiYRqg3Bx7)j1_Um&{11aBo-^B7P>NwC6A7$>~y1>H|^#A6==NRr?lwHj&IaHLWPBY2~&^eu-C2J8|Af; znqk>Xj_|Y&&H$hO8xst8ix1bUVevqG8@A|7JSRD+sqDdI9j5fy@|-V^(0#vjyv)8F5dp#uT>ksO?`Q(U)VH9-mher^e_lUC&Vs|E*2bUeP; z`OHdO>0;1^M57h-&>TQg)DQr2jZ#KiW=_;;L|jSG`l%oj%{Yn-^%w{P5XD-`w>MSb z??qU6lvcA0s7D~VUMu%AOnvNVLZ+j-el*Xa*QMPJd5DC^qoGQ#D&YvRQ<5>m7a|zX zNGx=__yyh(kA(GZFIHq>ijUB;sw{elmg_2Qf898mEz?3J*bQ5*;2XV`2sBWSK>PYn z284(|B;wI}hlq(a;)vT=p!>LbB4i^E1oK{!^>cM9pkl2fLH;HNR9qta?|p~FolS~& z0qG`4q%sv<=14J1_=9vT%K&o=+G@;IR1b`~>g@`IPT&FbC9Qf$yzV+R^JCL_US^tW+PnKK?%%Usk8F&v!w3yzHJ2;>>U?NLjK;J+0JAm*UTwd~^wytg;2#3orRc(0Z@6tbR z*(l%KmyZye>yQWA^iAg#FFF`Xzk+8G?pf4f01NypfHMfBCdGqgy3f`&b9-SZqZMmG zc)%VtPhJJn{+awyx02KNeLNV?R)TR3X@s04Mnymh%D^eyXS-*@efWA^FrbD~mEPiv z8#3m?&`O)uRU2nNF)jG2SWs}(-FCxMrh`%@&w6B4MxF9ycVkcq>Po6X(m%ms4@}-# z>XI@@Q^w<3bRp>QgZYil3eeMtjDUe8OSgGo+QGF9b(oLu)Nr&2YLh#uEG92!M(0q5 z%*N#q7S+u}L`{3s10wftbY82*`pk&CN#{p!TdAVjx5f}os8F0}Tl2=qz}VSn?G+@v z;=iT8{}XC~2+8fkh^~soC{8o2pyrP9!%kU@tuR^l9h4{>49jxMawnzfxQQG4R>$rM zJFqT;+_MCbY+2Ch*(4EJF_llbQd2s8)06r>T)!6pgmjrxO}TI8G#%>5Bx6`BR{@ry z=R)Bf$n_YXn>@_&wpawx9Z>;6)S7QCZEgTA0RN|^`1p*&gqWy5uEedgGTl!=4_nM7{Oqe9?h zcxR;G@HBx&8Eg2OM|%t2YYgzjeC6?ILGq{aGOpEH@@MU8&CE!A-F-Ui4e0n`MuA;Y zqjW(m1e}~~SbXMsQ!h}$2^Q36z&RA^m$0Syr=5SIpMepUUu~YSvM;SCJ*k$E}%_HuMH~BgB;8$sx{O)L+YXP zuO`Mv@3ut*mYL|z+HT{I{8-mb!}V--oC-c3xyW;6U5@7pdEnu~QW%O&YRKwA`pPQc zgM_%uO%SDRt&5wzb?Mc?K{+JmgBS8(IVl!YC74SCb2R-iI>!@$z46zq6TjDz84+uZ zs2|)y(jK0`9}wLXh{)=mtM740^I0NKLowOSQi6qRlWwHs5Jat3X_>XYvpm|Pd2F0v zyOPx3z1@)s-6T7ivix!7sR$lNY`kLaE4jsz0G*GNxvxqNq1^-F#TD0nGQWXJcD<_^ zU-^ggjZrmmgynfvwYkxZzXW1E4;8NXsufbix>1X22L*%LJY#Il@Jv`9k*N!m)(ow% z8jiu*30J>&tW$7Q0(Q*+zQy@i9}mR0j$ut`1{KY7Mp5_dm@F6xd0Hgqda3$j)^ly5 z$Mk{Ou=w&7MvEF%i^Yo~0gX$)(7c7uOj8MHnX=t{kI*Q2O8sHHy8Q#P_)+k;WW{>7 zV}Ng@Uw$J!y}G$hoQuszTid$dQ@|Qa;7!8i`ev-bbo~Wbi}w6*{ll4sR2%#}U&2p_ z*Bi>{1916wrk>rMJIpz#cKt*kD*_M;?^lb?&j4Uwvy@A%1d0b_kx=LLwI3#^W00y!Z}2rWMBxJn0{IfZ#*#FaN9@% z5jauYyvSQn9W=y!LRz*%sz_Iv8@kSZm8 zEu2h{o&hx1O?5ZCDKz-wCxOhaRj^#?WeE=>uxjl+P|g-_HMCd6p@cr{e!mzF`*ar} zlYOcNyaYMI0M@Ovy+|*g_Jp`e)YkWMs^vPboHZvro)_1*sY>(BEXPdmG*~uDluTDl z;9+GxrDE{*YCn@5sB1A_(vlRh{)tyWuW1jK2;&{KVfxR36#JB!lS`w5a_;Us@K46KE)iy0 zSQghO^ouP3Jqk`5RKGGANvq3<)H>;!cQf@jljVQ?ETnbprusZ$7?lnq;>fI~)2DzN zV5a1X)8m%?cr*z8$ZTWtG}jX1Dp$vVP-Mi_bOHKpS?NE`@ZgXkY^A}GCez;|b#WkZ zO5~||p7)szEu7C~5xrco4GoZ=#|FI=OIlJh{MdYIv1^A??zv?CT<|2v3$}B*xTC8X zoShI6e4Z^w7qgl2Z@9d%a>QaKHy?lTp*;MtEbh`*2ulML;AU+U^MD-U^4(but|5g~ zVJu99MeAB3X`WG!PvYu2Wn$F#F;8J*(IH?>KD~9QYBy8CQNO{gx#35eU=l`pkkAM0 zAgy9FSAxOetI?81Fi6Fa($g8zY^_GjEoY;1*cGSLbajS2tFvBzHU*A-+oIh=nzF|; zPh%^F@&YV1h$fkHMtT*h01(y2Ad*%>5-ga)!WD2CuoMVtt)#Glnm^%hMFyapr@|Av zU+5HKJd(gnZ0-a)VVKr|w>ka-3**XSrc1mY=?FvMq^=dq28`eSM=O<-Ig9B5YceLi zSvV-~@OpKR-z;LV&YID32;B~H(|bIPQAJSFQo?{~PT)%mY>5XzMiJO@-R3Swl9BRa z@|JS?q_c7B>pY{T-`wRFz3uz0Wy^&Ly!TZckhAe{NJCjrOhVF*s*cd0!_jIfY_Xq4 z6BEZ`49F`A?bH0~=`UJ)EYp@dJK><|awLMAsd)^M^^#`hTnY?+AJ#GxTVZe(2a zKM*wW!QYZ3$DIg4U8131lK;4+sa*k8CwGgo52*Ws_Wp-@%~9Tq#a>f_sHer7Z(N^! zR0(>OyAiZo#IZGfos109C9VmvZ9i<3pAF<$G`p|8woOKWWsPvN?*73PzMl7QUQ1Ayb%K@lbK$o64c}t_k&0>{K8EE~kyIHa& zb#MEaAXMuqr66mPFQkoqG@CqI78ulg(gY&ZQ!+&PZcfVMI$Bmy=e2eE$3rCwX?>Y> zCCJc{bJP(O^Yq&tJX!N=)MQYhx8tGmIgxUGI;2u-tc9(2a-v$1<_#axM@|nvloHS( z>6W_BxW9OUZ7vMT^9#DSBZd!l!lbZM|3oFPm@rXQi??@BWR9+96MB2p*-TqpAR-l9 z5@Zmh4l$7IdK0i$<#M}^_KT30k?4-X=_Z4xDPbCgc zV#W8BWs8ZS-8;mW;D3BKftLlHb28-Lqp8eHWBjz97G~0;y80S9$u~7~Tu!v1UP9oA zMGL!mHoII(ce-dUTxQ1G*po}3G*wb!l%-UH$fV}7EP*KqUPft6@As!@P;?paVNFx? zbwlQ>!BX0TlC$Ysw*FK}mC`EnZ&{|N&WT{;cKfD+W2P-M_`>CK#0& zKzG_P%a{>y(YXFVw>UgpykEUkp~OV2XVY0~W|25^8ONe)j)iZ0ywmv68M-y4z9%jT zA{-=so2+`0ZWLIql7%KB7Vi|(wV}!I05B~jw_^I9%Gc~_@^p7iKa%1Lf1?acr?<}g zpjM7YOQ@yCPNY06R#Ojneji!ELH&FM*+>zm1)R^kSG*#AJHtnj``OJY-3Vz0eeLA~ z0;u7Q`guy>+_DxwU}z2|ur1x9KRy;};%jo74qT*(RJsQRe8ztc!s3-H6qmj(PMnDv zzfI;#$!Z2rN$bKpW^t`UTg381n5VH3NlWn2V-D`M?V7J-pRtMcQm-^yaLnDZ-* z#ib#t+F!SeD|&Z~ySX@6hCZ_JVVCD-K3=xVz0dvPR!pVsQGy$>HuR4-w>j%VJxov694oo4gr&wp=3CK zpzop>OEY7HPW4PLN4Cw-3dW z4Rm_TgovVZLN6jCU099T;+msYN&rt$%Yy%CepD1k$d5jNyi&~V`D%VcdrEthM>~Jo z-J&hlsX7Vma@AS|@gzMJ)vgz-v{)Xqn{jcP|9?C%xr;=y>G=79Cm8lhafz~tPRp4x4-Ta?}L7WR3 zlOfXlX!RPUQBX%u|0GH}nVEik1x=g0z*YfrYQlXu~O1YbI-PZT=1G4S|j{s69 z_;$vhRPpAt&wD&piXY0T)QI1YARMu37~=kTf1(zhU`#J!mW# zEKZelknc~tMRzA1U~eu!!Uyt_8RB z)qzb)tx!+sz z;~xqk6(A#2Y7Gqi(4YOcR^}e7c9n$N_r|$yjHMd(&Yk1Rm3Wo>>;|)7V17n`^m3Az zypjvZWcap8dDS39?Q4X?XimXR`4K9F7pqSpy{2??KD-x)M;^~vW~;!miW0AqJ$*r} ze9C+bp2eeb6B=+aCZJ$+%piGe@p-{g+pF6Q zp0igGO{Lu!`)TXc;6iwmAE+`waj1WZD_9FDkFD?@kt(&D?Jw}$+|Uhas*nB#Y#TiR!sk)QwJg2{Y-i6QQ0U~t z^7_{7O7%24kSwZ04{Kx|fg4~Ui;G=VF^Qu&dYoY6Vbz91)a}^`YSsKFfqtaKx-{JF zbiEuEw|UMag2Cp(T9SfYD5p=fR*EMoOMlqC!Urz@dpY+9hR;&&4}mi0D*J^>o~Fti zzpQP1!(4J*BDbZ|dwHHuY8}MS&;(~_>A^Lq?ztk?BrC*^ zrCrQ<{SJR-fkGXN2mH`>dxC=qwbxJ0l>@SX4c*B0lZVRn@mu|cj5T?ohV+7v6fqv*2C=|Bp*iJt(C_odF%KUJLxfI|sDo%=-EHdZ%YJt!C70;mK{6)N@r|d#e#nRr2o+3Ii;c5ux(gQ_zCOSg8%PN;&HW z{iK?m!0w|C5FAS5s$exFp&HR-z;88BC-7oV(8=f*BX!%V22`bvIOS8$L1xT~nWlQF z3h6&fqNP@eM)LRpmu?5%I4VvtV?So zmYnG`PTUi?pz6R&{70dZfxpV&M-W$EGLnb?cTHi=0 zi=GL8im1n|n3yP&Gy;|GASa~0tp2F#hAZvF3FfmOoH2;gn* zTV!VdyU=VsD+>Q~PDepYCx^aa8LTE3co*~BT$@^14W>6g3?48Jaw1C1ULChc-5GZ^KeVPD=lJsSc0Xzi$oRV=~r*R@w zP(-(p-R_-ck#OOXW)Ga))V~;4!(4{EXrkQ%rh1+L!TLjEqWMAHx2t@*z71@>U)UIj zC{L?xUz9ngWXT;OdjAr<91^$*Bn9sLdd|NGeZ;cGrAId@QwxHvzBM*GDc^+SiL^bQ z5Z$=CLl$s|d~aI6Hw+xW;Jw;^g%RM(hA{}&2e5eKw)yt(~G zV}_<@dp@o9MkVXx^0BNV;7G!oka?A&msDHG`UmNl3F;RFt@2OJG}t%+lyPVCA$t69 z;d723o5Kr+5&i@o`Fo98DgFNOD&9aPOJ=AZPc0@_R&J}>kDc!6gi5-C*$1~lqG;ko z__$3eF|nRw7>_0OrTw5}n#yk-;rmMhoZw!lcnei%OVxXJ85nbbIcWmv#E4%S4LXlG z=lH_wmC|TqV{w1=kTXC98-|QvgOWwc$|q%2eeR*{h^`nyZ;-FRNxTH&7-Gi(CF)eq2QFS$J=D^!tYez+{>t7GPW+H=Ah)j;2-QFXi|?8JaLU}dX3!im zIs(;7o89@gTUv@>sdCAAi1{2@kbsAW(tI!`S1Bc zhpwbfZFOm~eVZo==|I1DQ?o?ON&uUkdeizHY)rO+QB#QlJ=@U|BQ%ZsoK$mGXvH}b zs#eqGSlx!#z#YVMVTE2;fZw62tUS_2WOgNH#BumAL=V`g^*h{!`C9r^oqL{jX6pwG z!O%7oRz)FGMhnX2&9wq&H4wV$DS;!M4q(2FnK|Uue_&cCf_=%i^e@l$I){wS+V5Jy zU#@svn=F&ZcK%!mMZkwQue5KV@p$KV>pSqQs0V|Q1=g9ths)xNi~BD3$db3mWa?v? z5VOhiAqsFG5bm+nmJer-savr?eEy5{$ng3pM@aPuG%h1O^DOvc=q%Wr2k5nBz=VH3 zD`3%->Qe->6VmQn0(S#=gdbx}otH@zxm5+Ul zoB|`0e@2FezV#7O!p@j*&FsrH77-X{B0-@7?8Up9BwYCrNN!@KK@DWg{L76q|DJVY zmSuCJE%i+`nRax4FI}=`U0qb zU*c|XBk)z7=}_$wnPEK49cRByY1w1Oj;gz(tpab}gr8Ga*hOd=2(6eWkX(V^A*3>| zp3fHrX%s*Of|)wE7^nEKx@&<#!Vy(g^SlXBbd2ZdVnmUK>s~(G7^DJ%&e{E7RSa%` zITvME{!p+EY7NUD;CPd;6YqGE-xeQ`J5^t){P8_feH{Vh+WPj_buQYuX)|%6V25G$ zEU`CVq`Cm5M7QI&!Z+n8N2)7phtxp0z6nMCC>GN(n&FD|LjIsG`A>nI4^n00%T=B$ zWXSn)9`{lX(?TuQU9kw4T-&f8#EOPhdU_ViMd?b|;7Ob}tYWGlfhbUjhmB&`>ShL> zTiMnnls_EdXNHw_!UL1kPlUl))|uqm-ZA+L5{x1V9+n$ z&KgU&U*f6@FzuYf;c}LECkW+G^yDYQt;^bB_7~suSrit)K1{Abd&iOpH>28Ver&P)BOEUtwDSOn+t2i(^(7TB$x07;(33pIDQnlmaO zsJ|iOG&*n(LFp&(0Q6~0&hZ9(XCIT7hO@YPWjmhndW)`LTobR_6gMX{9aMyYpSv1N zOQ-?pig;d#F|0u=H-nck%`3TSF8q;(?5b*)ipbm6=k@iF!-whOeV$ySUPB4k@aQES z6$jM;Blif{NkJN6Pu{Ts|Y#8g3u+8CwqJMi#`NIU1yqTw`^ zTNcO3up9wKuenCuoG!cD>g7zrYl20_e)UK`+Bd zR`6oz-Uo}yDa*oO7+F7@V;#cXvQOoP(I0`l4i=b^^`<% zdO{=b5+hbIGm=Afs<5@HIOpz6QVl{GQ+JqT0@JU~htgt;yY}Hos6oy0`>@DSZpmlLC$b)x*8psO7=sCHZ7?^QyvjUUz%&j1m-@^>LbXzh#?@ z3keT|DHu^;CdBdr2w2*X_;=&!4297SzWtFRs^KYYYdpcW7}e5a)Ue_a(dX&_s)YhuO@y%fE7ZRj{?rkyo|)|ReQ9k> zg+Q`H8=?7ZCGm|$+DC^6!3E+^m

nqA3q4)MjjO$GG8+}z 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%0Du^jZ}BTv;yI78i5aaA>tnI1}Aq?kp@|$o+c;S5N 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 U>_yT2fBt=X|IZ~iBws84ADI&%SpWb4 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/EWIEGA46WW/moc_mainwindow.cpp.d b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/EWIEGA46WW/moc_mainwindow.cpp.d new file mode 100644 index 000000000..60987121d --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/EWIEGA46WW/moc_mainwindow.cpp.d @@ -0,0 +1,408 @@ +/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/EWIEGA46WW/moc_mainwindow.cpp: /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.h \ + /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/moc_predefs.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20functional.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20iterator.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20memory.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20type_traits.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q23utility.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qalgorithms.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qanystringview.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydata.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydataops.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydatapointer.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qassert.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qatomic.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qatomic_cxx11.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbasicatomic.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbindingstorage.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearray.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearrayalgorithms.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearraylist.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearrayview.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qchar.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompare.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompare_impl.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcomparehelpers.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompilerdetection.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qconfig.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qconstructormacros.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainerfwd.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainerinfo.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainertools_impl.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontiguouscache.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdarwinhelpers.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdatastream.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdebug.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qendian.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qexceptionhandling.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qflags.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfloat16.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qforeach.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfunctionaltools_impl.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfunctionpointer.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qgenericatomic.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qglobal.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qglobalstatic.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qhash.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qhashfunctions.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiodevicebase.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiterable.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiterator.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlatin1stringview.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qline.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlist.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlogging.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmalloc.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmap.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmargins.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmath.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmetacontainer.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmetatype.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qminmax.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qnamespace.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qnumeric.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobject.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobject_impl.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobjectdefs.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobjectdefs_impl.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qoverload.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qpair.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qpoint.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qprocessordetection.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qrect.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qrefcount.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qscopedpointer.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qscopeguard.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qset.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qshareddata.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qshareddata_impl.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsharedpointer.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsharedpointer_impl.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsize.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qspan.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstring.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringalgorithms.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringbuilder.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringconverter.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringconverter_base.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringfwd.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringlist.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringliteral.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringmatcher.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringtokenizer.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringview.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qswap.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsysinfo.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsystemdetection.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtaggedpointer.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtclasshelpermacros.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtconfiginclude.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtconfigmacros.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtcore-config.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtcoreexports.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtdeprecationdefinitions.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtdeprecationmarkers.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtenvironmentvariables.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtextstream.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtmetamacros.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtnoop.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtpreprocessorsupport.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtresource.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qttranslation.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qttypetraits.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtversion.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtversionchecks.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtypeinfo.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtypes.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qutf8stringview.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qvariant.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qvarlengtharray.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qversiontagging.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qxptype_traits.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qyieldcpu.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qaction.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qbitmap.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qbrush.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qcolor.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qcursor.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfont.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfontinfo.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfontmetrics.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qicon.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qimage.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qkeysequence.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpaintdevice.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpalette.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpixelformat.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpixmap.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpolygon.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qregion.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qrgb.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qrgba64.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtgui-config.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtguiexports.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtguiglobal.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtransform.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qwindowdefs.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/QMainWindow \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qmainwindow.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qsizepolicy.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtabwidget.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgets-config.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgetsexports.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgetsglobal.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qwidget.h \ + /usr/include/alloca.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/assert.h \ + /usr/include/c++/11/algorithm \ + /usr/include/c++/11/array \ + /usr/include/c++/11/atomic \ + /usr/include/c++/11/backward/auto_ptr.h \ + /usr/include/c++/11/backward/binders.h \ + /usr/include/c++/11/bit \ + /usr/include/c++/11/bits/algorithmfwd.h \ + /usr/include/c++/11/bits/align.h \ + /usr/include/c++/11/bits/alloc_traits.h \ + /usr/include/c++/11/bits/allocated_ptr.h \ + /usr/include/c++/11/bits/allocator.h \ + /usr/include/c++/11/bits/atomic_base.h \ + /usr/include/c++/11/bits/atomic_lockfree_defines.h \ + /usr/include/c++/11/bits/basic_string.h \ + /usr/include/c++/11/bits/basic_string.tcc \ + /usr/include/c++/11/bits/char_traits.h \ + /usr/include/c++/11/bits/charconv.h \ + /usr/include/c++/11/bits/concept_check.h \ + /usr/include/c++/11/bits/cpp_type_traits.h \ + /usr/include/c++/11/bits/cxxabi_forced.h \ + /usr/include/c++/11/bits/cxxabi_init_exception.h \ + /usr/include/c++/11/bits/enable_special_members.h \ + /usr/include/c++/11/bits/erase_if.h \ + /usr/include/c++/11/bits/exception.h \ + /usr/include/c++/11/bits/exception_defines.h \ + /usr/include/c++/11/bits/exception_ptr.h \ + /usr/include/c++/11/bits/functexcept.h \ + /usr/include/c++/11/bits/functional_hash.h \ + /usr/include/c++/11/bits/hash_bytes.h \ + /usr/include/c++/11/bits/hashtable.h \ + /usr/include/c++/11/bits/hashtable_policy.h \ + /usr/include/c++/11/bits/invoke.h \ + /usr/include/c++/11/bits/ios_base.h \ + /usr/include/c++/11/bits/list.tcc \ + /usr/include/c++/11/bits/locale_classes.h \ + /usr/include/c++/11/bits/locale_classes.tcc \ + /usr/include/c++/11/bits/localefwd.h \ + /usr/include/c++/11/bits/memoryfwd.h \ + /usr/include/c++/11/bits/move.h \ + /usr/include/c++/11/bits/nested_exception.h \ + /usr/include/c++/11/bits/node_handle.h \ + /usr/include/c++/11/bits/ostream_insert.h \ + /usr/include/c++/11/bits/parse_numbers.h \ + /usr/include/c++/11/bits/postypes.h \ + /usr/include/c++/11/bits/predefined_ops.h \ + /usr/include/c++/11/bits/ptr_traits.h \ + /usr/include/c++/11/bits/range_access.h \ + /usr/include/c++/11/bits/refwrap.h \ + /usr/include/c++/11/bits/shared_ptr.h \ + /usr/include/c++/11/bits/shared_ptr_atomic.h \ + /usr/include/c++/11/bits/shared_ptr_base.h \ + /usr/include/c++/11/bits/specfun.h \ + /usr/include/c++/11/bits/std_abs.h \ + /usr/include/c++/11/bits/std_function.h \ + /usr/include/c++/11/bits/stl_algo.h \ + /usr/include/c++/11/bits/stl_algobase.h \ + /usr/include/c++/11/bits/stl_bvector.h \ + /usr/include/c++/11/bits/stl_construct.h \ + /usr/include/c++/11/bits/stl_function.h \ + /usr/include/c++/11/bits/stl_heap.h \ + /usr/include/c++/11/bits/stl_iterator.h \ + /usr/include/c++/11/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/11/bits/stl_iterator_base_types.h \ + /usr/include/c++/11/bits/stl_list.h \ + /usr/include/c++/11/bits/stl_map.h \ + /usr/include/c++/11/bits/stl_multimap.h \ + /usr/include/c++/11/bits/stl_numeric.h \ + /usr/include/c++/11/bits/stl_pair.h \ + /usr/include/c++/11/bits/stl_raw_storage_iter.h \ + /usr/include/c++/11/bits/stl_relops.h \ + /usr/include/c++/11/bits/stl_tempbuf.h \ + /usr/include/c++/11/bits/stl_tree.h \ + /usr/include/c++/11/bits/stl_uninitialized.h \ + /usr/include/c++/11/bits/stl_vector.h \ + /usr/include/c++/11/bits/stream_iterator.h \ + /usr/include/c++/11/bits/streambuf.tcc \ + /usr/include/c++/11/bits/streambuf_iterator.h \ + /usr/include/c++/11/bits/string_view.tcc \ + /usr/include/c++/11/bits/stringfwd.h \ + /usr/include/c++/11/bits/uniform_int_dist.h \ + /usr/include/c++/11/bits/unique_ptr.h \ + /usr/include/c++/11/bits/unordered_map.h \ + /usr/include/c++/11/bits/uses_allocator.h \ + /usr/include/c++/11/bits/vector.tcc \ + /usr/include/c++/11/cassert \ + /usr/include/c++/11/cctype \ + /usr/include/c++/11/cerrno \ + /usr/include/c++/11/chrono \ + /usr/include/c++/11/climits \ + /usr/include/c++/11/clocale \ + /usr/include/c++/11/cmath \ + /usr/include/c++/11/cstddef \ + /usr/include/c++/11/cstdint \ + /usr/include/c++/11/cstdio \ + /usr/include/c++/11/cstdlib \ + /usr/include/c++/11/cstring \ + /usr/include/c++/11/ctime \ + /usr/include/c++/11/cwchar \ + /usr/include/c++/11/debug/assertions.h \ + /usr/include/c++/11/debug/debug.h \ + /usr/include/c++/11/exception \ + /usr/include/c++/11/ext/aligned_buffer.h \ + /usr/include/c++/11/ext/alloc_traits.h \ + /usr/include/c++/11/ext/atomicity.h \ + /usr/include/c++/11/ext/concurrence.h \ + /usr/include/c++/11/ext/new_allocator.h \ + /usr/include/c++/11/ext/numeric_traits.h \ + /usr/include/c++/11/ext/string_conversions.h \ + /usr/include/c++/11/ext/type_traits.h \ + /usr/include/c++/11/functional \ + /usr/include/c++/11/initializer_list \ + /usr/include/c++/11/iosfwd \ + /usr/include/c++/11/iterator \ + /usr/include/c++/11/limits \ + /usr/include/c++/11/list \ + /usr/include/c++/11/map \ + /usr/include/c++/11/memory \ + /usr/include/c++/11/new \ + /usr/include/c++/11/numeric \ + /usr/include/c++/11/optional \ + /usr/include/c++/11/pstl/execution_defs.h \ + /usr/include/c++/11/pstl/glue_algorithm_defs.h \ + /usr/include/c++/11/pstl/glue_memory_defs.h \ + /usr/include/c++/11/pstl/glue_numeric_defs.h \ + /usr/include/c++/11/ratio \ + /usr/include/c++/11/stdexcept \ + /usr/include/c++/11/streambuf \ + /usr/include/c++/11/string \ + /usr/include/c++/11/string_view \ + /usr/include/c++/11/system_error \ + /usr/include/c++/11/tr1/bessel_function.tcc \ + /usr/include/c++/11/tr1/beta_function.tcc \ + /usr/include/c++/11/tr1/ell_integral.tcc \ + /usr/include/c++/11/tr1/exp_integral.tcc \ + /usr/include/c++/11/tr1/gamma.tcc \ + /usr/include/c++/11/tr1/hypergeometric.tcc \ + /usr/include/c++/11/tr1/legendre_function.tcc \ + /usr/include/c++/11/tr1/modified_bessel_func.tcc \ + /usr/include/c++/11/tr1/poly_hermite.tcc \ + /usr/include/c++/11/tr1/poly_laguerre.tcc \ + /usr/include/c++/11/tr1/riemann_zeta.tcc \ + /usr/include/c++/11/tr1/special_function_util.h \ + /usr/include/c++/11/tuple \ + /usr/include/c++/11/type_traits \ + /usr/include/c++/11/typeinfo \ + /usr/include/c++/11/unordered_map \ + /usr/include/c++/11/utility \ + /usr/include/c++/11/variant \ + /usr/include/c++/11/vector \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/limits.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/limits.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/sched.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdint.h \ + /usr/include/stdio.h \ + /usr/include/stdlib.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/time.h \ + /usr/include/wchar.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/cpu-set.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/error_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/wint_t.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/bits/uio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/atomic_word.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/c++allocator.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/c++config.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/c++locale.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/cpu_defines.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/error_constants.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/gthr.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/os_defines.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/lib/gcc/x86_64-linux-gnu/11/include/stdarg.h \ + /usr/lib/gcc/x86_64-linux-gnu/11/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/11/include/stddef.h diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/deps b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/deps new file mode 100644 index 000000000..c14fa9d40 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/deps @@ -0,0 +1,757 @@ +qt6_application_autogen/timestamp: \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20functional.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20iterator.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20memory.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20type_traits.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q23utility.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qalgorithms.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qanystringview.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydata.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydataops.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydatapointer.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qassert.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qatomic.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qatomic_cxx11.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbasicatomic.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbindingstorage.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearray.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearrayalgorithms.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearraylist.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearrayview.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qchar.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompare.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompare_impl.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcomparehelpers.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompilerdetection.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qconfig.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qconstructormacros.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainerfwd.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainerinfo.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainertools_impl.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontiguouscache.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdarwinhelpers.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdatastream.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdebug.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qendian.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qexceptionhandling.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qflags.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfloat16.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qforeach.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfunctionaltools_impl.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfunctionpointer.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qgenericatomic.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qglobal.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qglobalstatic.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qhash.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qhashfunctions.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiodevicebase.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiterable.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiterator.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlatin1stringview.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qline.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlist.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlogging.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmalloc.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmap.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmargins.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmath.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmetacontainer.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmetatype.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qminmax.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qnamespace.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qnumeric.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobject.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobject_impl.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobjectdefs.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobjectdefs_impl.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qoverload.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qpair.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qpoint.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qprocessordetection.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qrect.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qrefcount.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qscopedpointer.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qscopeguard.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qset.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qshareddata.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qshareddata_impl.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsharedpointer.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsharedpointer_impl.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsize.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qspan.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstring.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringalgorithms.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringbuilder.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringconverter.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringconverter_base.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringfwd.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringlist.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringliteral.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringmatcher.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringtokenizer.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringview.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qswap.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsysinfo.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsystemdetection.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtaggedpointer.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtclasshelpermacros.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtconfiginclude.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtconfigmacros.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtcore-config.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtcoreexports.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtdeprecationdefinitions.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtdeprecationmarkers.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtenvironmentvariables.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtextstream.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtmetamacros.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtnoop.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtpreprocessorsupport.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtresource.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qttranslation.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qttypetraits.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtversion.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtversionchecks.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtypeinfo.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtypes.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qutf8stringview.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qvariant.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qvarlengtharray.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qversiontagging.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qxptype_traits.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qyieldcpu.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qaction.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qbitmap.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qbrush.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qcolor.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qcursor.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfont.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfontinfo.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfontmetrics.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qicon.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qimage.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qkeysequence.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpaintdevice.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpalette.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpixelformat.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpixmap.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpolygon.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qregion.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qrgb.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qrgba64.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtgui-config.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtguiexports.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtguiglobal.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtransform.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qwindowdefs.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/QMainWindow \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qmainwindow.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qsizepolicy.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtabwidget.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgets-config.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgetsexports.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgetsglobal.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qwidget.h \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/kwin/FindXKB.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapAtomic.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapOpenGL.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapVulkanHeaders.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigExtras.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersion.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Dependencies.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Targets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeature.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeatureCommon.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtInstallPaths.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicAppleHelpers.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicGitHelpers.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicPluginHelpers.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTargetHelpers.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTestHelpers.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicToolHelpers.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigExtras.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersion.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersionImpl.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreDependencies.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreMacros.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreVersionlessAliasTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersion.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersionImpl.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusDependencies.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusMacros.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusVersionlessAliasTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersion.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersionImpl.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsDependencies.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsVersionlessTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersion.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersionImpl.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiDependencies.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiPlugins.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiVersionlessAliasTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersion.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersionImpl.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsMacros.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsPlugins.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsVersionlessAliasTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsAdditionalTargetInfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfig.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersion.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersionImpl.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsDependencies.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets-relwithdebinfo.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets.cmake \ + /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsVersionlessTargets.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompiler.cmake.in \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXInformation.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCommonLanguageInclude.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCompilerIdDetection.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompileFeatures.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindBinUtils.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeGenericSystem.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeInitializeConfigs.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeLanguageInformation.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeNinjaFindMake.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitIncludeInfo.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitLinkInfo.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseLibraryArchitecture.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystem.cmake.in \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInformation.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInitialize.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCompilerCommon.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXCompilerFlag.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckIncludeFileCXX.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckLibraryExists.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ADSP-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMCC-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMClang-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/AppleClang-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Borland-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CMakeCommonCompilerMacros.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompilerInternal.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Cray-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CrayClang-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Embarcadero-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Fujitsu-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GHS-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-FindBinUtils.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/HP-CXX-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IAR-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Intel-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/MSVC-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVHPC-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVIDIA-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OrangeC-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PGI-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PathScale-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SCO-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TI-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TIClang-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Tasking-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Watcom-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XL-CXX-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FeatureSummary.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindOpenGL.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPkgConfig.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindThreads.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindVulkan.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/GNUInstallDirs.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckCompilerFlag.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckFlagCommonConfig.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/FeatureTesting.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/MacroAddFileDependencies.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Determine-CXX.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU-CXX.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Initialize.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux.cmake \ + /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/UnixPaths.cmake \ + /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/CMakeLists.txt \ + /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake \ + /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake \ + /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeSystem.cmake \ + /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/moc_predefs.h \ + /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/main.cpp \ + /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.cpp \ + /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.h \ + /usr/include/alloca.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/assert.h \ + /usr/include/c++/11/algorithm \ + /usr/include/c++/11/array \ + /usr/include/c++/11/atomic \ + /usr/include/c++/11/backward/auto_ptr.h \ + /usr/include/c++/11/backward/binders.h \ + /usr/include/c++/11/bit \ + /usr/include/c++/11/bits/algorithmfwd.h \ + /usr/include/c++/11/bits/align.h \ + /usr/include/c++/11/bits/alloc_traits.h \ + /usr/include/c++/11/bits/allocated_ptr.h \ + /usr/include/c++/11/bits/allocator.h \ + /usr/include/c++/11/bits/atomic_base.h \ + /usr/include/c++/11/bits/atomic_lockfree_defines.h \ + /usr/include/c++/11/bits/basic_string.h \ + /usr/include/c++/11/bits/basic_string.tcc \ + /usr/include/c++/11/bits/char_traits.h \ + /usr/include/c++/11/bits/charconv.h \ + /usr/include/c++/11/bits/concept_check.h \ + /usr/include/c++/11/bits/cpp_type_traits.h \ + /usr/include/c++/11/bits/cxxabi_forced.h \ + /usr/include/c++/11/bits/cxxabi_init_exception.h \ + /usr/include/c++/11/bits/enable_special_members.h \ + /usr/include/c++/11/bits/erase_if.h \ + /usr/include/c++/11/bits/exception.h \ + /usr/include/c++/11/bits/exception_defines.h \ + /usr/include/c++/11/bits/exception_ptr.h \ + /usr/include/c++/11/bits/functexcept.h \ + /usr/include/c++/11/bits/functional_hash.h \ + /usr/include/c++/11/bits/hash_bytes.h \ + /usr/include/c++/11/bits/hashtable.h \ + /usr/include/c++/11/bits/hashtable_policy.h \ + /usr/include/c++/11/bits/invoke.h \ + /usr/include/c++/11/bits/ios_base.h \ + /usr/include/c++/11/bits/list.tcc \ + /usr/include/c++/11/bits/locale_classes.h \ + /usr/include/c++/11/bits/locale_classes.tcc \ + /usr/include/c++/11/bits/localefwd.h \ + /usr/include/c++/11/bits/memoryfwd.h \ + /usr/include/c++/11/bits/move.h \ + /usr/include/c++/11/bits/nested_exception.h \ + /usr/include/c++/11/bits/node_handle.h \ + /usr/include/c++/11/bits/ostream_insert.h \ + /usr/include/c++/11/bits/parse_numbers.h \ + /usr/include/c++/11/bits/postypes.h \ + /usr/include/c++/11/bits/predefined_ops.h \ + /usr/include/c++/11/bits/ptr_traits.h \ + /usr/include/c++/11/bits/range_access.h \ + /usr/include/c++/11/bits/refwrap.h \ + /usr/include/c++/11/bits/shared_ptr.h \ + /usr/include/c++/11/bits/shared_ptr_atomic.h \ + /usr/include/c++/11/bits/shared_ptr_base.h \ + /usr/include/c++/11/bits/specfun.h \ + /usr/include/c++/11/bits/std_abs.h \ + /usr/include/c++/11/bits/std_function.h \ + /usr/include/c++/11/bits/stl_algo.h \ + /usr/include/c++/11/bits/stl_algobase.h \ + /usr/include/c++/11/bits/stl_bvector.h \ + /usr/include/c++/11/bits/stl_construct.h \ + /usr/include/c++/11/bits/stl_function.h \ + /usr/include/c++/11/bits/stl_heap.h \ + /usr/include/c++/11/bits/stl_iterator.h \ + /usr/include/c++/11/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/11/bits/stl_iterator_base_types.h \ + /usr/include/c++/11/bits/stl_list.h \ + /usr/include/c++/11/bits/stl_map.h \ + /usr/include/c++/11/bits/stl_multimap.h \ + /usr/include/c++/11/bits/stl_numeric.h \ + /usr/include/c++/11/bits/stl_pair.h \ + /usr/include/c++/11/bits/stl_raw_storage_iter.h \ + /usr/include/c++/11/bits/stl_relops.h \ + /usr/include/c++/11/bits/stl_tempbuf.h \ + /usr/include/c++/11/bits/stl_tree.h \ + /usr/include/c++/11/bits/stl_uninitialized.h \ + /usr/include/c++/11/bits/stl_vector.h \ + /usr/include/c++/11/bits/stream_iterator.h \ + /usr/include/c++/11/bits/streambuf.tcc \ + /usr/include/c++/11/bits/streambuf_iterator.h \ + /usr/include/c++/11/bits/string_view.tcc \ + /usr/include/c++/11/bits/stringfwd.h \ + /usr/include/c++/11/bits/uniform_int_dist.h \ + /usr/include/c++/11/bits/unique_ptr.h \ + /usr/include/c++/11/bits/unordered_map.h \ + /usr/include/c++/11/bits/uses_allocator.h \ + /usr/include/c++/11/bits/vector.tcc \ + /usr/include/c++/11/cassert \ + /usr/include/c++/11/cctype \ + /usr/include/c++/11/cerrno \ + /usr/include/c++/11/chrono \ + /usr/include/c++/11/climits \ + /usr/include/c++/11/clocale \ + /usr/include/c++/11/cmath \ + /usr/include/c++/11/cstddef \ + /usr/include/c++/11/cstdint \ + /usr/include/c++/11/cstdio \ + /usr/include/c++/11/cstdlib \ + /usr/include/c++/11/cstring \ + /usr/include/c++/11/ctime \ + /usr/include/c++/11/cwchar \ + /usr/include/c++/11/debug/assertions.h \ + /usr/include/c++/11/debug/debug.h \ + /usr/include/c++/11/exception \ + /usr/include/c++/11/ext/aligned_buffer.h \ + /usr/include/c++/11/ext/alloc_traits.h \ + /usr/include/c++/11/ext/atomicity.h \ + /usr/include/c++/11/ext/concurrence.h \ + /usr/include/c++/11/ext/new_allocator.h \ + /usr/include/c++/11/ext/numeric_traits.h \ + /usr/include/c++/11/ext/string_conversions.h \ + /usr/include/c++/11/ext/type_traits.h \ + /usr/include/c++/11/functional \ + /usr/include/c++/11/initializer_list \ + /usr/include/c++/11/iosfwd \ + /usr/include/c++/11/iterator \ + /usr/include/c++/11/limits \ + /usr/include/c++/11/list \ + /usr/include/c++/11/map \ + /usr/include/c++/11/memory \ + /usr/include/c++/11/new \ + /usr/include/c++/11/numeric \ + /usr/include/c++/11/optional \ + /usr/include/c++/11/pstl/execution_defs.h \ + /usr/include/c++/11/pstl/glue_algorithm_defs.h \ + /usr/include/c++/11/pstl/glue_memory_defs.h \ + /usr/include/c++/11/pstl/glue_numeric_defs.h \ + /usr/include/c++/11/ratio \ + /usr/include/c++/11/stdexcept \ + /usr/include/c++/11/streambuf \ + /usr/include/c++/11/string \ + /usr/include/c++/11/string_view \ + /usr/include/c++/11/system_error \ + /usr/include/c++/11/tr1/bessel_function.tcc \ + /usr/include/c++/11/tr1/beta_function.tcc \ + /usr/include/c++/11/tr1/ell_integral.tcc \ + /usr/include/c++/11/tr1/exp_integral.tcc \ + /usr/include/c++/11/tr1/gamma.tcc \ + /usr/include/c++/11/tr1/hypergeometric.tcc \ + /usr/include/c++/11/tr1/legendre_function.tcc \ + /usr/include/c++/11/tr1/modified_bessel_func.tcc \ + /usr/include/c++/11/tr1/poly_hermite.tcc \ + /usr/include/c++/11/tr1/poly_laguerre.tcc \ + /usr/include/c++/11/tr1/riemann_zeta.tcc \ + /usr/include/c++/11/tr1/special_function_util.h \ + /usr/include/c++/11/tuple \ + /usr/include/c++/11/type_traits \ + /usr/include/c++/11/typeinfo \ + /usr/include/c++/11/unordered_map \ + /usr/include/c++/11/utility \ + /usr/include/c++/11/variant \ + /usr/include/c++/11/vector \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/limits.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/limits.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/sched.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdint.h \ + /usr/include/stdio.h \ + /usr/include/stdlib.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/time.h \ + /usr/include/wchar.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/cpu-set.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endianness.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ + /usr/include/x86_64-linux-gnu/bits/floatn.h \ + /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h \ + /usr/include/x86_64-linux-gnu/bits/long-double.h \ + /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-intn.h \ + /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ + /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \ + /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/time64.h \ + /usr/include/x86_64-linux-gnu/bits/timesize.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/error_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ + /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \ + /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ + /usr/include/x86_64-linux-gnu/bits/types/wint_t.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ + /usr/include/x86_64-linux-gnu/bits/uio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/atomic_word.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/c++allocator.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/c++config.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/c++locale.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/cpu_defines.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/error_constants.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/gthr.h \ + /usr/include/x86_64-linux-gnu/c++/11/bits/os_defines.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/lib/gcc/x86_64-linux-gnu/11/include/stdarg.h \ + /usr/lib/gcc/x86_64-linux-gnu/11/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/11/include/stddef.h \ + /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.ui \ + /home/austenharrell/Qt/Tools/CMake/bin/cmake diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/moc_predefs.h b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/moc_predefs.h new file mode 100644 index 000000000..67eaf4776 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/moc_predefs.h @@ -0,0 +1,434 @@ +#define __SSP_STRONG__ 3 +#define __DBL_MIN_EXP__ (-1021) +#define __cpp_attributes 200809L +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __ATOMIC_ACQUIRE 2 +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define QT_GUI_LIB 1 +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __CET__ 3 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __LDBL_IS_IEC_60559__ 2 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __unix 1 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __FLT128_MIN_EXP__ (-16381) +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 2 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __USER_LABEL_PREFIX__ +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __FLT32_DIG__ 6 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 2 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 2 +#define __DEC32_MAX__ 9.999999E96DF +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __INT32_MAX__ 0x7fffffff +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __SIZEOF_LONG__ 8 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __UINT16_C(c) c +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT64_MANT_DIG__ 53 +#define __FLT64X_MANT_DIG__ 64 +#define __GNUC__ 11 +#define __GXX_RTTI 1 +#define __pie__ 2 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __cpp_delegating_constructors 200604L +#define __FLT32_HAS_INFINITY__ 1 +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __FLT64X_HAS_INFINITY__ 1 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define QT_WIDGETS_LIB 1 +#define __cplusplus 201703L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 11 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __cpp_nsdmi 200809L +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __LONG_LONG_WIDTH__ 64 +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define ABI_ID "ELF" +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1016 +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __LDBL_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __NO_INLINE__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "11.4.0" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __FLT32_MANT_DIG__ 24 +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define SIZEOF_DPTR (sizeof(void*)) +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __INT_FAST32_TYPE__ long int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __SIZE_TYPE__ long unsigned int +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 2 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 2 +#define __x86_64__ 1 +#define __FLT32X_MIN_EXP__ (-1021) +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __DEC64_MANT_DIG__ 16 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SEG_GS 1 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __PTRDIFF_WIDTH__ 64 +#define __LDBL_MANT_DIG__ 64 +#define __cpp_range_based_for 201603L +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201411L +#define __DEC32_MANT_DIG__ 7 +#define __cpp_return_type_deduction 201304L +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __pic__ 2 +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_decltype 200707L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_inline_variables 201606L +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define __cpp_inheriting_constructors 201511L +#define QT_CORE_LIB 1 +#define __SIZEOF_FLOAT128__ 16 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __LDBL_MAX_EXP__ 16384 +#define __FLT32X_MAX_10_EXP__ 308 +#define __SIZEOF_INT128__ 16 +#define __FLT64X_IS_IEC_60559__ 2 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __INT_LEAST32_TYPE__ int +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 0 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define __INT_FAST8_TYPE__ signed char +#define __cpp_namespace_attributes 201411L +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define __STDCPP_THREADS__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 2 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __PIC__ 2 +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __cpp_constexpr 201603L +#define __SSE2__ 1 +#define __cpp_deduction_guides 201703L +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __DEC128_MAX_EXP__ 6145 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 4 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __INT_FAST16_WIDTH__ 64 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __PIE__ 2 +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __FLT32X_DIG__ 15 +#define __PTRDIFF_TYPE__ long int +#define __ATOMIC_SEQ_CST 5 +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201304L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201304L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp new file mode 100644 index 000000000..de9bec650 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp @@ -0,0 +1,2 @@ +// This file is autogenerated. Changes will be overwritten. +#include "EWIEGA46WW/moc_mainwindow.cpp" diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp new file mode 100644 index 000000000..e69de29bb diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qtcsettings.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qtcsettings.cmake new file mode 100644 index 000000000..815241fa1 --- /dev/null +++ b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qtcsettings.cmake @@ -0,0 +1,10 @@ +# This file is managed by Qt Creator, do not edit! + +set("CMAKE_C_COMPILER" "/usr/bin/gcc-11" CACHE "FILEPATH" "" FORCE) +set("CMAKE_CXX_FLAGS_INIT" "-DQT_QML_DEBUG" CACHE "STRING" "" FORCE) +set("CMAKE_PROJECT_INCLUDE_BEFORE" "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake" CACHE "FILEPATH" "" FORCE) +set("CMAKE_PREFIX_PATH" "/home/austenharrell/Qt/6.8.0/gcc_64" CACHE "PATH" "" FORCE) +set("CMAKE_BUILD_TYPE" "Debug" CACHE "STRING" "" FORCE) +set("QT_QMAKE_EXECUTABLE" "/home/austenharrell/Qt/6.8.0/gcc_64/bin/qmake" CACHE "FILEPATH" "" FORCE) +set("CMAKE_CXX_COMPILER" "/usr/bin/x86_64-linux-gnu-g++-11" CACHE "FILEPATH" "" FORCE) +set("CMAKE_GENERATOR" "Ninja" CACHE "STRING" "" FORCE) \ No newline at end of file diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index 06aaecb55..ab6f69972 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -1,58 +1,14 @@ #include "mainwindow.h" #include "./ui_mainwindow.h" -#include -#include -#include -#include -#include +#include +#include +#include + MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); - // Remove window frame - setWindowFlags(Qt::FramelessWindowHint); - - // **Enable transparency while keeping it visible** - setAttribute(Qt::WA_TranslucentBackground); - - // Ensure a minimum size so the window is visible - setMinimumSize(400, 300); - resize(600, 400); - - // Center the window on the screen** - QScreen *screen = QGuiApplication::primaryScreen(); - if (screen) { - QRect screenGeometry = screen->geometry(); - int x = (screenGeometry.width() - width()) / 2; - int y = (screenGeometry.height() - height()) / 2; - move(x, y); - } - - // **Apply a semi-transparent background with rounded corners** - setStyleSheet("background-color: rgba(255, 255, 255, 220); border-radius: 20px;"); - - // Apply initial rounded mask after setting size - applyRoundedCorners(); } -MainWindow::~MainWindow() { - delete ui; -} - -void MainWindow::resizeEvent(QResizeEvent *event) { - QMainWindow::resizeEvent(event); - - applyRoundedCorners(); -} - -void MainWindow::applyRoundedCorners() { - if (width() == 0 || height() == 0) { - return; - } - - int radius = 20; - QPainterPath path; - path.addRoundedRect(rect(), radius, radius); - setMask(QRegion(path.toFillPolygon().toPolygon())); -} +MainWindow::~MainWindow() { delete ui; } diff --git a/src/gui/qt6/mainwindow.h b/src/gui/qt6/mainwindow.h index ea0d25e15..94cd27c73 100644 --- a/src/gui/qt6/mainwindow.h +++ b/src/gui/qt6/mainwindow.h @@ -2,7 +2,6 @@ #define MAINWINDOW_H #include -#include QT_BEGIN_NAMESPACE namespace Ui { @@ -17,12 +16,7 @@ class MainWindow : public QMainWindow { MainWindow(QWidget *parent = nullptr); ~MainWindow(); -protected: - void resizeEvent(QResizeEvent *event) override; // Handle window resize to maintain rounded corners - private: Ui::MainWindow *ui; - void applyRoundedCorners(); // Function to apply rounded corners }; - #endif // MAINWINDOW_H diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui index a301782e5..9cee87681 100644 --- a/src/gui/qt6/mainwindow.ui +++ b/src/gui/qt6/mainwindow.ui @@ -6,12 +6,148 @@ 0 0 - 1066 - 537 + 1081 + 638 + + + 0 + 0 + + + + + 300 + 300 + + + + + 0 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 60 + 60 + 60 + + + + + + + 60 + 60 + 60 + + + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 60 + 60 + 60 + + + + + + + 60 + 60 + 60 + + + + + + + + + 60 + 60 + 60 + + + + + + + 60 + 60 + 60 + + + + + + - MainWindow + WindNinja @@ -26,45 +162,1987 @@ 0 - - - - 80 - 30 - 461 - 111 - + + false + + + + + + + 0 - - - QLayout::SizeConstraint::SetDefaultConstraint - - - - - Qt::Orientation::Horizontal + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 1081 + 0 + + + + QFrame::Shape::NoFrame + + + Qt::Orientation::Horizontal + + + 15 + + + false + + + + + 0 + + + QLayout::SizeConstraint::SetDefaultConstraint + + + 5 + + + 10 + + + 0 + + + + + + 0 + 0 + + + + + 0 + 250 + + + + + 16777215 + 250 + + + + + + + + + 60 + 60 + 60 + + + + + + + + + 60 + 60 + 60 + + + + + + + + + + 12 + + + + + + + QFrame::Shape::StyledPanel + + + 0 + + + false + + + true + + + false + + + true + + + true + + + false + + + + Configuration + + + + + Solver Methodology + + + + Conservation of Mass + + + + + Conservation of Mass and Momentum + + + + + + Inputs + + + + Surface Input + + + + + Diurnal Input + + + + + Stability Input + + + + + Wind Input + + + + Domain Average Wind + + + + + Point Initialization + + + + + Weather Model + + + + + + + + + + QFrame::Shape::NoFrame + + + 5 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A solution requires the selection of one (1) Solver Methodology:</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 1. Conservation of Mass (faster, less accurate)</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2. Conservation of Mass and Momentum (slower, more accurate)</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Select either option for more detail.</p></body></html> + + + + + + + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 5 + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Use Conservation of Mass + + + + + + + + + + + 8 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">This is the native WindNinja solver. It solves a conservation of mass equation, but not a conservation of momentum equation. This solver is fast-running, but may give less accurate wind predictions in regions where momentum effects are important, for example on the lee side of terrain obstacles.</span></p></body></html> + + + + + + + + + 0 + + + 0 + + + 0 + + + 5 + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Use Conservation of Mass and Momentum + + + + + + + + + + + 8 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">This solver conserves both mass and momentum. It is based on the OpenFOAM CFD toolbox. This solver should give more accurate wind predictions in regions where momentum effects are important, such as on the lee side of terrain obstacles. Because this solver is more computationally intensive than the conservation of mass solver, simulation times will be longer. Typical simulation times for this solver range from 10-30 minutes, but will depend on your domain, resolution, and computational resources. Note that some options (e.g., point initialization and non-neutral stability) are not available for this solver at this time. We plan to make these options available in future releases.</span></p></body></html> + + + + + + + + + + + + + 0 + 0 + + + + Elevation Input File + + + + + + + 0 + 0 + + + + + + + + Open File + + + + + + + Get From Map + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 0 + + + + Vegetation + + + + + + + 0 + 0 + + + + + Grass + + + + + Brush + + + + + Trees + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 0 + + + + Mesh Resolution + + + + + + + 0 + 0 + + + + + Coarse + + + + + Medium + + + + + Fine + + + + + Custom + + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + Meters + + + + + + + + 0 + 0 + + + + Feet + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 0 + + + + Time Zone + + + + + + Show All Zones + + + + + + + + 0 + 0 + + + + + + + + Display Time Zone Details + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + Use Diurnal Wind + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Use Stability + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + Domain Average Wind + + + + + + + 10 + + + + + + + + + + Input Wind Height + + + + 10 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 20ft-US + + + + + 10m-SI + + + + + Custom + + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + Feet + + + + + + + + 0 + 0 + + + + Meters + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 + + + 5 + + + 0 + + + + + + 0 + 0 + + + + Qt::LayoutDirection::RightToLeft + + + Clear + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 + 0 + + + + + 600 + 16777215 + + + + + 8 + + + + QFrame::Shape::NoFrame + + + true + + + + + 0 + 0 + 517 + 647 + + + + + 0 + 0 + + + + + 8 + + + + + 0 + + + 0 + + + 5 + + + 0 + + + 0 + + + + + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + + 100 + 0 + + + + + 16777215 + 25 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Cloud Cover (%)</p></body></html> + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + + 16777215 + 25 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Date</p></body></html> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + F + + + + + C + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + + 16777215 + 25 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Direction</p></body></html> + + + + + + + + + + + + + + + + + + + + mph + + + + + m/s + + + + + kph + + + + + kts + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + + 16777215 + 25 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Air Temp</p></body></html> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + + 16777215 + 25 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Speed</p></body></html> + + + + + + + + 0 + 0 + + + + + 16777215 + 25 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Time</p></body></html> + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + + + + + 0 + + + 5 + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Qt::LayoutDirection::LeftToRight + + + #solveButton { + padding: 0; + width: 100px; + text-align: center; + padding: 5px; +} + + + Solve + + + + + + + + + + + 1 + 0 + - + - 40 - 20 + 100 + 0 - - - - - - - 0 - 0 - + + + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + - - + + + + + + + + 0 + 0 + 1081 + 19 + + + + QMenuBar { + background-color: #818181 +} +QMenu::item:selected { + background: #3c3c3c; +} + + + + File + + + + + + + + + Options + + + + + + Tools + + + + + + + Help + + + + Displaying Shapefiles + + + + + + Tutorials + + + + + + + + + Instructions + + + + + + + + + + + + + + + + + + + + Console Output + + + + + Write blank station file + + + + + Set configuration option + + + + + Displaying Shapefiles + + + + + How to Display Shapefiles in ArcMap + + + + + Tutorial 1: The Basics + + + + + Tutorial 2: Diurnal Winds and Non-Neutral Stability + + + + + Tutorial 3: Point Initialization + + + + + Tutorial 4: Weather Model Initialization + + + + + DEM Download + + + + + fetch_dem Instructions + + + + + Command Line Interface + + + + + About WindNinja + + + + + Citation + + + + + Email Us + + + + + Submit Bug Report + + + + + New Project + + + + + Open Project + + + + + Export Solution + + + + + Close Project + + + + + Exit WindNinja + + From a8e7f9db3a33da30b9c42195e945cd057e67f580 Mon Sep 17 00:00:00 2001 From: Austen Harrell Date: Tue, 18 Feb 2025 17:12:18 -0700 Subject: [PATCH 011/435] 2/18 --- src/gui/qt6/CMakeLists.txt.user | 52 +++++++++--------- .../ui_mainwindow.h.8CF09B0D34E0A473.idx | Bin 83670 -> 84468 bytes .../Testing/Temporary/LastTest.log | 4 +- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/gui/qt6/CMakeLists.txt.user b/src/gui/qt6/CMakeLists.txt.user index aef8a09e3..f603a6303 100644 --- a/src/gui/qt6/CMakeLists.txt.user +++ b/src/gui/qt6/CMakeLists.txt.user @@ -1,6 +1,6 @@ - + EnvironmentId @@ -102,14 +102,14 @@ 2 false - -DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_BUILD_TYPE:STRING=Debug + -DCMAKE_BUILD_TYPE:STRING=Debug +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} -DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} 0 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug @@ -159,14 +159,14 @@ 2 false - -DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_BUILD_TYPE:STRING=Release + -DCMAKE_BUILD_TYPE:STRING=Release +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} -DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Release @@ -213,14 +213,14 @@ 2 false - -DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo + -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} -DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-RelWithDebInfo @@ -267,14 +267,14 @@ 2 false - -DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo + -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} -DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} 0 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Profile @@ -322,14 +322,14 @@ 2 false - -DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_BUILD_TYPE:STRING=MinSizeRel + -DCMAKE_BUILD_TYPE:STRING=MinSizeRel +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} -DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-MinSizeRel diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ui_mainwindow.h.8CF09B0D34E0A473.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ui_mainwindow.h.8CF09B0D34E0A473.idx index 277bead19f17cd30bd4965ecf72da36994608b1b..50385587503c8f15dd493f6215a58310fa7f3c43 100644 GIT binary patch literal 84468 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 Date: Tue, 18 Feb 2025 17:56:12 -0700 Subject: [PATCH 012/435] Update .gitignore --- src/gui/qt6/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/qt6/.gitignore b/src/gui/qt6/.gitignore index fab7372d7..61b144899 100644 --- a/src/gui/qt6/.gitignore +++ b/src/gui/qt6/.gitignore @@ -37,6 +37,8 @@ Thumbs.db # qtcreator generated files *.pro.user* +*.txt.user* +*:Zone* # xemacs temporary files *.flc From c65c9a09dc34d496f857fade0c106c334c6fc91f Mon Sep 17 00:00:00 2001 From: Austen Harrell Date: Tue, 18 Feb 2025 18:01:02 -0700 Subject: [PATCH 013/435] Remove ignored files --- .../imgs/UCAR_NAM_ALASKA_domain.gif | Bin 32373 -> 0 bytes .../tutorial_4/imgs/UCAR_RAP_domain.png | Bin 178702 -> 0 bytes src/gui/qt6/.gitignore | 3 + src/gui/qt6/CMakeLists.txt.user | 422 - src/gui/qt6/CMakeLists.txt.user.f3a83e8 | 422 - .../qt6/CMakeLists.txt.user:Zone.Identifier | 0 src/gui/qt6/CMakeLists.txt:Zone.Identifier | 0 .../.cmake/api/v1/query/cache-v2 | 0 .../.cmake/api/v1/query/cmakeFiles-v1 | 0 .../.cmake/api/v1/query/codemodel-v2 | 0 .../reply/cache-v2-2bd5eb2af276508f9cf6.json | 6903 ----------------- .../cmakeFiles-v1-c50b2651e07cb0d132da.json | 2020 ----- .../codemodel-v2-ae14064b5c5bfb65eb35.json | 79 - ...irectory-.-Debug-1004986b89cddb862e46.json | 45 - .../reply/index-2025-02-08T20-08-26-0866.json | 89 - ...pplication-Debug-ab345562360576f6a3d2.json | 457 -- ...on_autogen-Debug-5e2568b9da3822075dc1.json | 71 - ...stamp_deps-Debug-813a02102d630b32837c.json | 27 - .../build/Desktop_Qt_6_8_0-Debug/.ninja_deps | Bin 1932228 -> 0 bytes .../build/Desktop_Qt_6_8_0-Debug/.ninja_log | 39 - .../.qt/QtDeploySupport.cmake | 69 - .../.qt/QtDeployTargets.cmake | 2 - .../.qtc/package-manager/LICENSE.conan | 21 - .../.qtc/package-manager/auto-setup.cmake | 272 - .../.qtc/package-manager/conan.cmake | 1026 --- .../.qtc/package-manager/conan_provider.cmake | 655 -- .../clangd/index/FILE.h.79AEFC497861DFC5.idx | Bin 300 -> 0 bytes .../clangd/index/QAction.C96EF240B8C97D16.idx | Bin 226 -> 0 bytes .../index/QApplication.6186EE4D00472E1D.idx | Bin 244 -> 0 bytes .../index/QCheckBox.F97C85CD389B142A.idx | Bin 238 -> 0 bytes .../index/QComboBox.E9BD1F66553AE54E.idx | Bin 238 -> 0 bytes .../index/QDateEdit.1363D2C608FAA19C.idx | Bin 242 -> 0 bytes .../clangd/index/QDebug.D6EEDCAB812A108A.idx | Bin 226 -> 0 bytes .../index/QDoubleSpinBox.0C0EB87BDB251E24.idx | Bin 242 -> 0 bytes .../index/QGridLayout.EB133BD173F64EFA.idx | Bin 242 -> 0 bytes .../index/QGroupBox.B9BAA2414EC9EC9A.idx | Bin 238 -> 0 bytes .../QGuiApplication.40A6B5E7DDCCAB10.idx | Bin 242 -> 0 bytes .../index/QHBoxLayout.59B98A56E1270903.idx | Bin 240 -> 0 bytes .../index/QHeaderView.8CEFA40187CA5B18.idx | Bin 242 -> 0 bytes .../index/QLineEdit.4DF8C97A081C5AE8.idx | Bin 238 -> 0 bytes .../clangd/index/QList.43B29E3EAD15F037.idx | Bin 224 -> 0 bytes .../index/QMainWindow.9E6FBF24FCAA6A21.idx | Bin 242 -> 0 bytes .../clangd/index/QMenu.DCFD8A588257C352.idx | Bin 230 -> 0 bytes .../index/QMenuBar.3F9BED9766BFE45B.idx | Bin 236 -> 0 bytes .../clangd/index/QObject.FD42F5FB68E8C303.idx | Bin 228 -> 0 bytes .../index/QPainterPath.3AC546BDB95A3F0F.idx | Bin 236 -> 0 bytes .../index/QPushButton.2BC29870A6CB475C.idx | Bin 242 -> 0 bytes .../index/QRadioButton.A434882CF2D0EBE4.idx | Bin 244 -> 0 bytes .../clangd/index/QRect.6DA68D4D1D3E2990.idx | Bin 224 -> 0 bytes .../clangd/index/QRegion.130B003E89FE9983.idx | Bin 226 -> 0 bytes .../index/QResizeEvent.E67339F1D6D32BCD.idx | Bin 230 -> 0 bytes .../clangd/index/QScreen.711C5DF3EEB221C5.idx | Bin 226 -> 0 bytes .../index/QScrollArea.C483AA522C6CD262.idx | Bin 242 -> 0 bytes .../clangd/index/QSize.40E81C35EAEAA1C2.idx | Bin 224 -> 0 bytes .../clangd/index/QSizeF.7B926032F3663078.idx | Bin 224 -> 0 bytes .../index/QSpacerItem.70C1D6BAB0508458.idx | Bin 242 -> 0 bytes .../index/QSpinBox.910CEC95EC8A5F86.idx | Bin 236 -> 0 bytes .../index/QSplitter.417D2DBE07C04B3F.idx | Bin 238 -> 0 bytes .../index/QStackedWidget.E41334FDB9386E84.idx | Bin 248 -> 0 bytes .../index/QTextEdit.149E81496A7D8D7D.idx | Bin 238 -> 0 bytes .../index/QTimeEdit.4B41D1477297003C.idx | Bin 242 -> 0 bytes .../index/QTransform.624B53E37B6109A7.idx | Bin 232 -> 0 bytes .../index/QTreeWidget.DB007D1CE25E1CE0.idx | Bin 242 -> 0 bytes .../index/QVBoxLayout.970ACCF300B40607.idx | Bin 240 -> 0 bytes .../index/QVariant.94E74B139BCD44CD.idx | Bin 230 -> 0 bytes .../clangd/index/QWidget.D763B9214B20E979.idx | Bin 234 -> 0 bytes .../index/__FILE.h.3324F85E382E036A.idx | Bin 162 -> 0 bytes .../index/__fpos64_t.h.23C43F442076149A.idx | Bin 302 -> 0 bytes .../index/__fpos_t.h.ECFBE9EEDAAB6648.idx | Bin 300 -> 0 bytes .../index/__locale_t.h.40EA38A2DCA58618.idx | Bin 166 -> 0 bytes .../index/__mbstate_t.h.6C32CF66236653D7.idx | Bin 168 -> 0 bytes .../index/__sigset_t.h.72131E8056C7E284.idx | Bin 202 -> 0 bytes ...darg___gnuc_va_list.h.43B1F3B1D6B4DAA2.idx | Bin 222 -> 0 bytes .../__stdarg___va_copy.h.F5C63B16CFDA2191.idx | Bin 218 -> 0 bytes .../__stdarg_va_arg.h.52F08F71EEB3BDB3.idx | Bin 260 -> 0 bytes .../__stdarg_va_copy.h.E522E3A1343529C4.idx | Bin 216 -> 0 bytes .../__stdarg_va_list.h.E375216D095D7803.idx | Bin 238 -> 0 bytes ..._stddef_max_align_t.h.4536C6003D50E15C.idx | Bin 348 -> 0 bytes .../__stddef_null.h.9C59159E32851BAA.idx | Bin 226 -> 0 bytes .../__stddef_nullptr_t.h.7623FED4A13822AD.idx | Bin 218 -> 0 bytes .../__stddef_offsetof.h.1EE6274699D52A78.idx | Bin 216 -> 0 bytes .../__stddef_ptrdiff_t.h.FCE284AD03D60196.idx | Bin 294 -> 0 bytes .../__stddef_size_t.h.7413848320D9984C.idx | Bin 302 -> 0 bytes .../__stddef_wchar_t.h.129FD7EE3A286014.idx | Bin 192 -> 0 bytes .../index/algorithm.1CE1C5E7A2CC8947.idx | Bin 436 -> 0 bytes .../index/algorithmfwd.h.7598BC438C9F2E18.idx | Bin 17090 -> 0 bytes .../clangd/index/align.h.EF3672F59F577484.idx | Bin 1498 -> 0 bytes .../aligned_buffer.h.D25F294C09A9BD51.idx | Bin 332 -> 0 bytes .../index/alloc_traits.h.888093B2650D973C.idx | Bin 8838 -> 0 bytes .../index/alloc_traits.h.A03678EA5038239B.idx | Bin 708 -> 0 bytes .../index/alloca.h.793370BF9878CFB6.idx | Bin 618 -> 0 bytes .../allocated_ptr.h.4C2F2E5344DBBE09.idx | Bin 1136 -> 0 bytes .../index/allocator.h.726B26F70D1E9A82.idx | Bin 5898 -> 0 bytes .../clangd/index/array.F4CC01525F44E658.idx | Bin 10946 -> 0 bytes .../index/assert.h.9895EEC17E1D2A2B.idx | Bin 534 -> 0 bytes .../index/assertions.h.1D646B13C15CF849.idx | Bin 374 -> 0 bytes .../clangd/index/atomic.659F85E5DD2BCAE5.idx | Bin 37530 -> 0 bytes .../index/atomic_base.h.BE2CD511127AE324.idx | Bin 8948 -> 0 bytes ...ic_lockfree_defines.h.2D8FA2BBB9BFE893.idx | Bin 398 -> 0 bytes ...atomic_wide_counter.h.397D66B6BECC0AA2.idx | Bin 170 -> 0 bytes .../index/atomic_word.h.8B32DB244716470B.idx | Bin 218 -> 0 bytes .../index/atomicity.h.409EF4C070658F73.idx | Bin 640 -> 0 bytes .../index/auto_ptr.h.07E293599CEBBF74.idx | Bin 5688 -> 0 bytes .../index/basic_string.h.4F91164A9845D8E7.idx | Bin 78488 -> 0 bytes .../basic_string.tcc.967E4E5D61DA5282.idx | Bin 50864 -> 0 bytes .../bessel_function.tcc.9171F62D1FC8591A.idx | Bin 16028 -> 0 bytes .../beta_function.tcc.157C17AA6D54605D.idx | Bin 1706 -> 0 bytes .../index/binders.h.B7909204B7953DFB.idx | Bin 3674 -> 0 bytes .../clangd/index/bit.2A91B049774121D4.idx | Bin 8214 -> 0 bytes .../index/byteswap.h.E57FF553A16DFAFC.idx | Bin 448 -> 0 bytes .../index/c++allocator.h.00F4CFDD575112F2.idx | Bin 240 -> 0 bytes .../index/c++config.h.A139A8B32F03163E.idx | Bin 9548 -> 0 bytes .../index/c++locale.h.9D67E3B33BDF16E2.idx | Bin 572 -> 0 bytes .../clangd/index/cassert.C302028D9A1C4921.idx | Bin 242 -> 0 bytes .../clangd/index/cctype.76C6F247C1380A5B.idx | Bin 1520 -> 0 bytes .../clangd/index/cdefs.h.E4D450DF98C1338F.idx | Bin 3310 -> 0 bytes .../clangd/index/cerrno.5BD437BDECC7A78D.idx | Bin 302 -> 0 bytes .../index/char_traits.h.A86DDC004D15BD88.idx | Bin 11402 -> 0 bytes .../index/charconv.h.869BEB8F43DFD6D7.idx | Bin 4148 -> 0 bytes .../clangd/index/chrono.21DD8193C9F802BB.idx | Bin 32916 -> 0 bytes .../clangd/index/climits.CEDA74AF679CB63C.idx | Bin 406 -> 0 bytes .../clangd/index/clocale.5FF46E6760ACF029.idx | Bin 548 -> 0 bytes .../index/clock_t.h.65AFE5BA7329BCD4.idx | Bin 320 -> 0 bytes .../index/clockid_t.h.5545878511E5BAF1.idx | Bin 340 -> 0 bytes .../clangd/index/cmath.5492EF8C588C18A0.idx | Bin 33596 -> 0 bytes .../concept_check.h.A4C7BDCF159AD4DF.idx | Bin 376 -> 0 bytes .../index/concurrence.h.08E9E50104EBC4C9.idx | Bin 1270 -> 0 bytes ...okie_io_functions_t.h.5A08066DC7F05542.idx | Bin 1716 -> 0 bytes .../cpp_type_traits.h.B5C50C37F2A36E3F.idx | Bin 656 -> 0 bytes .../index/cpu-set.h.B40F3E2869BE4FF9.idx | Bin 892 -> 0 bytes .../index/cpu_defines.h.E7463FB44761786A.idx | Bin 172 -> 0 bytes .../clangd/index/cstddef.287A68F2FBF12AAD.idx | Bin 2806 -> 0 bytes .../clangd/index/cstdint.47B9166DA94B05BD.idx | Bin 2936 -> 0 bytes .../clangd/index/cstdio.325B5C34B96CF05A.idx | Bin 4602 -> 0 bytes .../clangd/index/cstdlib.126A0D14F38BA60B.idx | Bin 4716 -> 0 bytes .../clangd/index/cstring.DBEE10CA3A7F86F4.idx | Bin 2408 -> 0 bytes .../clangd/index/ctime.D0C81AD2723230F7.idx | Bin 1512 -> 0 bytes .../clangd/index/ctype.h.B268CEA0CECCFC59.idx | Bin 4532 -> 0 bytes .../clangd/index/cwchar.A3402FA4C9A9F672.idx | Bin 7308 -> 0 bytes .../cxxabi_forced.h.B8AF18F1501F1585.idx | Bin 158 -> 0 bytes ...xabi_init_exception.h.542C953E6C829C53.idx | Bin 528 -> 0 bytes .../ell_integral.tcc.28856E23765B109F.idx | Bin 16768 -> 0 bytes ...ble_special_members.h.74E7B224F8375F62.idx | Bin 318 -> 0 bytes .../index/endian.h.1FC6A4D6D2846204.idx | Bin 826 -> 0 bytes .../index/endian.h.20F8E286A486EE09.idx | Bin 376 -> 0 bytes .../index/endianness.h.F2D2CC6251A4EAFA.idx | Bin 206 -> 0 bytes .../index/erase_if.h.72B55D60DDD77C56.idx | Bin 716 -> 0 bytes .../index/errno-base.h.23FC55A99C73A727.idx | Bin 932 -> 0 bytes .../clangd/index/errno.h.063064A523A47758.idx | Bin 362 -> 0 bytes .../clangd/index/errno.h.10013861918E601A.idx | Bin 2478 -> 0 bytes .../clangd/index/errno.h.19BCCCD58DA5623E.idx | Bin 794 -> 0 bytes .../clangd/index/errno.h.33F6986A3C61A3BF.idx | Bin 182 -> 0 bytes .../clangd/index/errno.h.3F8ECD84FB880B64.idx | Bin 176 -> 0 bytes .../error_constants.h.7739DB6650F792ED.idx | Bin 8514 -> 0 bytes .../index/error_t.h.58D3895A591B592D.idx | Bin 228 -> 0 bytes .../index/exception.3BCB02E313BF87C9.idx | Bin 3272 -> 0 bytes .../index/exception.h.563622B7F9DE0D64.idx | Bin 1840 -> 0 bytes .../exception_defines.h.CED4C5F04DCEC0A5.idx | Bin 230 -> 0 bytes .../exception_ptr.h.6BAAB8CAEF920B5D.idx | Bin 1952 -> 0 bytes .../execution_defs.h.186F44494DB49E13.idx | Bin 840 -> 0 bytes .../exp_integral.tcc.3BFA54CF549FBF5E.idx | Bin 8308 -> 0 bytes .../features-time64.h.BFBA8D3CA0316037.idx | Bin 250 -> 0 bytes .../index/features.h.5A4ED7C80201A723.idx | Bin 2578 -> 0 bytes .../floatn-common.h.0FE8C4DDCB84E088.idx | Bin 1778 -> 0 bytes .../index/floatn.h.DA21C738CC1B6ABF.idx | Bin 468 -> 0 bytes .../flt-eval-method.h.8058951BDB657B4B.idx | Bin 188 -> 0 bytes .../index/fp-fast.h.72CDF40E7648EF43.idx | Bin 180 -> 0 bytes .../index/fp-logb.h.EA7AC5545F14BC26.idx | Bin 204 -> 0 bytes .../index/functexcept.h.807459FDC2AF6C4E.idx | Bin 372 -> 0 bytes .../index/functional.ACE7A23DFA6A7C81.idx | Bin 32794 -> 0 bytes .../functional_hash.h.412E38477D218834.idx | Bin 5606 -> 0 bytes .../index/gamma.tcc.CA2DC1F3C7EBE19F.idx | Bin 6946 -> 0 bytes ...glue_algorithm_defs.h.C368EC8DE1036B81.idx | Bin 22460 -> 0 bytes .../glue_memory_defs.h.6519B6B389AF4A23.idx | Bin 2502 -> 0 bytes .../glue_numeric_defs.h.FCCD2FC54DA0DE29.idx | Bin 5972 -> 0 bytes .../index/gthr-default.h.B9D1A861FCC1A40F.idx | Bin 2126 -> 0 bytes .../clangd/index/gthr.h.224F0F09E7E4961C.idx | Bin 270 -> 0 bytes .../index/hash_bytes.h.274FC085A1115B4A.idx | Bin 374 -> 0 bytes .../index/hashtable.h.DC8C92A807F065D3.idx | Bin 17128 -> 0 bytes .../hashtable_policy.h.40A3B6E69632E8E1.idx | Bin 10368 -> 0 bytes .../hypergeometric.tcc.62C6EC35332E0AAE.idx | Bin 21484 -> 0 bytes .../initializer_list.487DC3AA34672C18.idx | Bin 1840 -> 0 bytes .../index/invoke.h.DF3BCAA5A6E33E7C.idx | Bin 822 -> 0 bytes .../index/ios_base.h.979B6DBB9A7C8F35.idx | Bin 17036 -> 0 bytes .../clangd/index/iosfwd.F621C0E74BE8B067.idx | Bin 5278 -> 0 bytes .../index/iscanonical.h.C53E44E13856FCEA.idx | Bin 592 -> 0 bytes .../index/iterator.38B33E1892DEEBB8.idx | Bin 708 -> 0 bytes ...legendre_function.tcc.64E8C808CA5BAA8E.idx | Bin 2918 -> 0 bytes .../libc-header-start.h.E88219B53B0B0BF5.idx | Bin 520 -> 0 bytes ...ibm-simd-decl-stubs.h.06B70A57602EA3C8.idx | Bin 6772 -> 0 bytes .../clangd/index/limits.B12624C6106406AC.idx | Bin 58282 -> 0 bytes .../index/limits.h.1DFE7D0FE6434B13.idx | Bin 1018 -> 0 bytes .../index/limits.h.7CEA6B3592906D3F.idx | Bin 820 -> 0 bytes .../index/limits.h.C293B8934AC926BB.idx | Bin 438 -> 0 bytes .../clangd/index/list.168C0A1C22C8B14B.idx | Bin 686 -> 0 bytes .../index/list.tcc.94671DB6D4C8E664.idx | Bin 30468 -> 0 bytes .../index/local_lim.h.2CFD657F256B117E.idx | Bin 688 -> 0 bytes .../index/locale.h.E3C63D05A4E78516.idx | Bin 478 -> 0 bytes .../index/locale.h.F1B51844858762D2.idx | Bin 4820 -> 0 bytes .../locale_classes.h.9512D5BF9F8BFC78.idx | Bin 7392 -> 0 bytes .../locale_classes.tcc.A7CA62888BCB33BF.idx | Bin 8078 -> 0 bytes .../index/locale_t.h.557516A6B361170F.idx | Bin 302 -> 0 bytes .../index/localefwd.h.A3B7C978BF60EC19.idx | Bin 5180 -> 0 bytes .../index/long-double.h.ACD735A1862B6BF8.idx | Bin 162 -> 0 bytes .../index/main.cpp.EEBB228B1106B2B1.idx | Bin 2154 -> 0 bytes .../index/mainwindow.cpp.11CF4E2CF1316CEA.idx | Bin 2664 -> 0 bytes .../index/mainwindow.h.F0118C6BEFDCBB46.idx | Bin 1186 -> 0 bytes .../clangd/index/map.8C22362DDFC69B22.idx | Bin 904 -> 0 bytes .../index/math-vector.h.B3EAC58DA1700969.idx | Bin 238 -> 0 bytes .../clangd/index/math.h.DE4D39AAF5AC2C76.idx | Bin 10736 -> 0 bytes ...ls-helper-functions.h.934C8C52064E404C.idx | Bin 380 -> 0 bytes .../mathcalls-narrow.h.EF4B0E9378BD4EE1.idx | Bin 4872 -> 0 bytes .../index/mathcalls.h.655A2220FF0677F8.idx | Bin 63036 -> 0 bytes .../index/mbstate_t.h.F9237FB65FF84D5A.idx | Bin 306 -> 0 bytes .../clangd/index/memory.768AFB22B9D6A62F.idx | Bin 2576 -> 0 bytes .../index/memoryfwd.h.935D7DF208FDC906.idx | Bin 408 -> 0 bytes ...ified_bessel_func.tcc.9B1532CEE9C375E7.idx | Bin 8266 -> 0 bytes .../clangd/index/move.h.89F6D662F9EAEF16.idx | Bin 3712 -> 0 bytes .../nested_exception.h.10DC70ED9F08D9D1.idx | Bin 1940 -> 0 bytes .../clangd/index/new.8A4066321F7AF016.idx | Bin 6628 -> 0 bytes .../new_allocator.h.D9A43F0C582D8F82.idx | Bin 1336 -> 0 bytes .../index/node_handle.h.CDEC5F05C546600C.idx | Bin 3882 -> 0 bytes .../clangd/index/numeric.C9B73B80E066D1B7.idx | Bin 32670 -> 0 bytes .../numeric_traits.h.71952CE5B96E8B47.idx | Bin 526 -> 0 bytes .../index/optional.3D6E41A544334FEE.idx | Bin 16854 -> 0 bytes .../index/os_defines.h.EA4549991D07B32F.idx | Bin 356 -> 0 bytes .../ostream_insert.h.8302B2D6873DA4BB.idx | Bin 1460 -> 0 bytes .../parse_numbers.h.A6E2C9E96411584C.idx | Bin 1196 -> 0 bytes .../poly_hermite.tcc.9FD6029D55EB67A1.idx | Bin 356 -> 0 bytes .../poly_laguerre.tcc.BFD895219AA7B68C.idx | Bin 4478 -> 0 bytes .../index/posix1_lim.h.D94E4687FC9359FF.idx | Bin 1300 -> 0 bytes .../index/posix2_lim.h.430DA38A1F301F29.idx | Bin 574 -> 0 bytes .../index/postypes.h.6906AFED0EA1F1B4.idx | Bin 3710 -> 0 bytes .../predefined_ops.h.9786B9F84B9462DC.idx | Bin 1536 -> 0 bytes .../index/pstl_config.h.CBBF88553BC795EF.idx | Bin 1212 -> 0 bytes .../index/pthread.h.022320E0CE01A46D.idx | Bin 44784 -> 0 bytes ...d_stack_min-dynamic.h.6F432801F0DF58B7.idx | Bin 304 -> 0 bytes .../pthreadtypes-arch.h.9E138C411BE448A0.idx | Bin 508 -> 0 bytes .../index/pthreadtypes.h.BAA8217B62BB6E86.idx | Bin 2172 -> 0 bytes .../index/ptr_traits.h.F78C58E579CDA022.idx | Bin 1428 -> 0 bytes .../q20functional.h.3B35B426F14AFB98.idx | Bin 626 -> 0 bytes .../index/q20iterator.h.C23CF838032BAB9A.idx | Bin 1074 -> 0 bytes .../index/q20memory.h.EF3BBE5C99993FC9.idx | Bin 1718 -> 0 bytes .../q20type_traits.h.80FD58CC3424A64D.idx | Bin 1208 -> 0 bytes .../index/q23utility.h.02F4E3C4153F6F6E.idx | Bin 1246 -> 0 bytes .../qabstractbutton.h.CFA25BA0E844A352.idx | Bin 5872 -> 0 bytes ...bstractitemdelegate.h.8D2FFF50AF7F61B9.idx | Bin 3748 -> 0 bytes .../qabstractitemmodel.h.D4BB35C1B1D9316E.idx | Bin 33918 -> 0 bytes .../qabstractitemview.h.89AAA16972132E25.idx | Bin 22458 -> 0 bytes ...qabstractscrollarea.h.E7EE5DCA0672BDB7.idx | Bin 6942 -> 0 bytes .../qabstractslider.h.ED9DE327D105CA98.idx | Bin 5792 -> 0 bytes .../qabstractspinbox.h.613B7347B045F85C.idx | Bin 9460 -> 0 bytes .../index/qaction.h.DEB42C6F940315D3.idx | Bin 10402 -> 0 bytes .../index/qalgorithms.h.0752FD13E8EF319B.idx | Bin 5200 -> 0 bytes .../qanystringview.h.9067A8646C0AC845.idx | Bin 15266 -> 0 bytes .../index/qapplication.h.45685CEE1BB77E0E.idx | Bin 6740 -> 0 bytes .../index/qarraydata.h.3E149019C53099F4.idx | Bin 6896 -> 0 bytes .../qarraydataops.h.CC375FBAF7851A50.idx | Bin 22880 -> 0 bytes .../qarraydatapointer.h.1128F9E57EA464F8.idx | Bin 14110 -> 0 bytes .../index/qassert.h.BE86327E75D27D1C.idx | Bin 1794 -> 0 bytes .../index/qatomic.h.F284092535A24518.idx | Bin 2256 -> 0 bytes .../qatomic_cxx11.h.B64FC8F5E10657CA.idx | Bin 9000 -> 0 bytes .../index/qbasicatomic.h.2DAC357DEDE2DFBB.idx | Bin 12298 -> 0 bytes .../qbindingstorage.h.73A75A3151EC9C78.idx | Bin 3430 -> 0 bytes .../index/qbitmap.h.9730D82D851365B4.idx | Bin 2796 -> 0 bytes .../index/qboxlayout.h.FBE787986A66C425.idx | Bin 6460 -> 0 bytes .../index/qbrush.h.3E2C08834AE7F6F3.idx | Bin 31502 -> 0 bytes .../index/qbytearray.h.56EB072B89ABD6ED.idx | Bin 41932 -> 0 bytes ...bytearrayalgorithms.h.40A38FF36A118743.idx | Bin 8404 -> 0 bytes .../qbytearraylist.h.E2B24FE3ED7DD6E0.idx | Bin 2162 -> 0 bytes .../qbytearrayview.h.1720D983E04E0E57.idx | Bin 20026 -> 0 bytes .../index/qcalendar.h.FE372A9F8303D252.idx | Bin 7788 -> 0 bytes .../clangd/index/qchar.h.0D786C17186DA7C6.idx | Bin 43880 -> 0 bytes .../index/qcheckbox.h.EA09085F3E851E29.idx | Bin 2990 -> 0 bytes .../index/qcolor.h.F91F6990224F234F.idx | Bin 38242 -> 0 bytes .../index/qcombobox.h.EB292BE8316348A9.idx | Bin 12136 -> 0 bytes .../index/qcompare.h.CCB7FA596FC8E08E.idx | Bin 24078 -> 0 bytes .../qcompare_impl.h.AC2E30841FC04F9A.idx | Bin 940 -> 0 bytes .../qcomparehelpers.h.99315EB410FD5E10.idx | Bin 65592 -> 0 bytes .../qcompilerdetection.h.8C6C229C1FFFC2B5.idx | Bin 4568 -> 0 bytes .../index/qconfig.h.846337A2147A75C2.idx | Bin 1484 -> 0 bytes .../qconstructormacros.h.4C4C4817E1171CFA.idx | Bin 276 -> 0 bytes .../qcontainerfwd.h.5FE05033C8BD3C55.idx | Bin 2306 -> 0 bytes .../qcontainerinfo.h.F5D0CD90AC279455.idx | Bin 8180 -> 0 bytes ...containertools_impl.h.13D5DB46CB94E3B1.idx | Bin 10560 -> 0 bytes .../qcontiguouscache.h.200BAC9C050661F8.idx | Bin 57094 -> 0 bytes .../qcoreapplication.h.9495311E207C3FA5.idx | Bin 9878 -> 0 bytes ...pplication_platform.h.025BC7505FB180D1.idx | Bin 496 -> 0 bytes .../index/qcoreevent.h.97F97F5E1881122E.idx | Bin 34650 -> 0 bytes .../index/qcursor.h.F8060C576930CE8D.idx | Bin 4558 -> 0 bytes .../qdarwinhelpers.h.1BF874FD5FB19478.idx | Bin 294 -> 0 bytes .../index/qdatastream.h.FD38833A530EF87D.idx | Bin 27572 -> 0 bytes .../index/qdatetime.h.4B296C80495006DF.idx | Bin 29440 -> 0 bytes .../qdatetimeedit.h.9A943232AF384486.idx | Bin 12388 -> 0 bytes .../qdeadlinetimer.h.1686DACE8E30BA49.idx | Bin 15720 -> 0 bytes .../index/qdebug.h.2855F0F64879D845.idx | Bin 56828 -> 0 bytes .../qelapsedtimer.h.8A5D128937FAC7B3.idx | Bin 3530 -> 0 bytes .../index/qendian.h.A9F85A81B249EBA5.idx | Bin 26152 -> 0 bytes .../index/qevent.h.35074D32CC775406.idx | Bin 63966 -> 0 bytes .../index/qeventloop.h.452FC337516C45B3.idx | Bin 5780 -> 0 bytes .../index/qeventpoint.h.6743609403519E70.idx | Bin 7828 -> 0 bytes .../qexceptionhandling.h.B2ECE802A63F4CD5.idx | Bin 1036 -> 0 bytes .../index/qflags.h.E597625F7229645A.idx | Bin 71804 -> 0 bytes .../index/qfloat16.h.0177AFB713EA8EF7.idx | Bin 28670 -> 0 bytes .../clangd/index/qfont.h.7D9F66D042F7B11C.idx | Bin 22514 -> 0 bytes .../index/qfontinfo.h.5A04B1B87E9B68F5.idx | Bin 2862 -> 0 bytes .../index/qfontmetrics.h.6FB4D77108AC7E22.idx | Bin 8750 -> 0 bytes .../index/qforeach.h.2158A919387EF180.idx | Bin 2552 -> 0 bytes .../index/qframe.h.AF3A096A5F7755E6.idx | Bin 5244 -> 0 bytes ...unctionaltools_impl.h.1D5E5ED3A5B51387.idx | Bin 1956 -> 0 bytes .../qfunctionpointer.h.DAE0E999D3F1D06C.idx | Bin 388 -> 0 bytes .../qgenericatomic.h.6A0C22DFBC3BD1D2.idx | Bin 1226 -> 0 bytes .../index/qglobal.h.1BB3F92FF7EB2D4E.idx | Bin 3568 -> 0 bytes .../qglobalstatic.h.D70EDA33C1796626.idx | Bin 3536 -> 0 bytes .../index/qgridlayout.h.E07D45D1136B3AC3.idx | Bin 5124 -> 0 bytes .../index/qgroupbox.h.26FCBE2A624361CD.idx | Bin 3614 -> 0 bytes .../qguiapplication.h.785D76C858739A91.idx | Bin 8956 -> 0 bytes ...pplication_platform.h.E00644C1147E9DED.idx | Bin 2976 -> 0 bytes .../clangd/index/qhash.h.F10ABA907D59B368.idx | Bin 123378 -> 0 bytes .../qhashfunctions.h.EFDA8E5E332BD372.idx | Bin 34026 -> 0 bytes .../index/qheaderview.h.23F2BD834D7DB292.idx | Bin 12500 -> 0 bytes .../clangd/index/qicon.h.160AB644AFBFC44A.idx | Bin 21324 -> 0 bytes .../index/qimage.h.67FD69AB005377EE.idx | Bin 20964 -> 0 bytes .../index/qinputdevice.h.339E51D2AAC381C9.idx | Bin 6788 -> 0 bytes .../index/qinputmethod.h.47A60324C18186B8.idx | Bin 4078 -> 0 bytes .../index/qiodevice.h.9388E485C0A01200.idx | Bin 7180 -> 0 bytes .../qiodevicebase.h.57AFACBC3D314B1B.idx | Bin 1474 -> 0 bytes ...qitemselectionmodel.h.BA92BE56EEB93401.idx | Bin 13350 -> 0 bytes .../index/qiterable.h.29A457745ACC4B86.idx | Bin 15276 -> 0 bytes .../index/qiterator.h.420D4A13F79F0A7F.idx | Bin 11356 -> 0 bytes .../index/qkeysequence.h.DCEACEDD22610193.idx | Bin 11968 -> 0 bytes .../qlatin1stringview.h.5C4795D24DAF6F91.idx | Bin 20396 -> 0 bytes .../index/qlayout.h.F0BFE06293DD1904.idx | Bin 7800 -> 0 bytes .../index/qlayoutitem.h.8BB060701DDA612A.idx | Bin 7952 -> 0 bytes .../clangd/index/qline.h.95FA542EC7493437.idx | Bin 14544 -> 0 bytes .../index/qlineedit.h.D36FB34746B2A0B4.idx | Bin 11724 -> 0 bytes .../clangd/index/qlist.h.F1E0E6304468B4B5.idx | Bin 71410 -> 0 bytes .../index/qlocale.h.FBB782BEDF501C8B.idx | Bin 92972 -> 0 bytes .../index/qlogging.h.78CC882A01A41DDF.idx | Bin 7760 -> 0 bytes .../index/qmainwindow.h.107F43AEE6E4074C.idx | Bin 9230 -> 0 bytes .../index/qmalloc.h.AC2AC112265B866C.idx | Bin 1176 -> 0 bytes .../clangd/index/qmap.h.E1B18DE791B411CB.idx | Bin 70528 -> 0 bytes .../index/qmargins.h.B935BC6EAE3C8C16.idx | Bin 21888 -> 0 bytes .../clangd/index/qmath.h.24E8DD8C22CC4E56.idx | Bin 10676 -> 0 bytes .../clangd/index/qmenu.h.0FABB7AFACD22F6B.idx | Bin 9856 -> 0 bytes .../index/qmenubar.h.21DA5516EFFBE0E1.idx | Bin 5814 -> 0 bytes .../qmetacontainer.h.D0F3C3B65E99E5EB.idx | Bin 33554 -> 0 bytes .../index/qmetatype.h.DAD15CFA6FC9BFF9.idx | Bin 144004 -> 0 bytes .../index/qminmax.h.4D5B665F22788521.idx | Bin 1958 -> 0 bytes .../index/qnamespace.h.9AED58CB1F607D2F.idx | Bin 155292 -> 0 bytes .../qnativeinterface.h.5166B0A1D4E3018A.idx | Bin 4360 -> 0 bytes .../index/qnumeric.h.CBE0FAE461F0112D.idx | Bin 6272 -> 0 bytes .../index/qobject.h.2B0D8C99B5F9D6E8.idx | Bin 21536 -> 0 bytes .../index/qobject_impl.h.E498A2D63752432C.idx | Bin 2342 -> 0 bytes .../index/qobjectdefs.h.4CE94A4E1E89C28E.idx | Bin 616 -> 0 bytes .../index/qobjectdefs.h.8F45D7C545CD3DB7.idx | Bin 25918 -> 0 bytes .../qobjectdefs_impl.h.3D23F86B673417A6.idx | Bin 31906 -> 0 bytes .../index/qoverload.h.F7064D60B84B4724.idx | Bin 1668 -> 0 bytes .../index/qpaintdevice.h.83AE26BC9675EC56.idx | Bin 4696 -> 0 bytes .../index/qpainterpath.h.1D7575F9BD81DC74.idx | Bin 16402 -> 0 bytes .../clangd/index/qpair.h.7E4415438F6A17FE.idx | Bin 696 -> 0 bytes .../index/qpalette.h.A0D6C68FE4FD52CF.idx | Bin 11702 -> 0 bytes .../clangd/index/qpen.h.D10BBA7A213EEDEF.idx | Bin 5470 -> 0 bytes .../index/qpixelformat.h.1735C8D208876A87.idx | Bin 18858 -> 0 bytes .../index/qpixmap.h.DA237644164D7D41.idx | Bin 9664 -> 0 bytes .../index/qpoint.h.65D6EB4FC892AB96.idx | Bin 17046 -> 0 bytes .../qpointingdevice.h.D088C170EE78F2C1.idx | Bin 7474 -> 0 bytes .../index/qpolygon.h.BE82A0C1B4A66723.idx | Bin 8622 -> 0 bytes ...qprocessordetection.h.7DB29B574BD1E9F3.idx | Bin 402 -> 0 bytes .../index/qpushbutton.h.B13C1F0959DD8453.idx | Bin 3522 -> 0 bytes .../index/qradiobutton.h.54424D6AB6222449.idx | Bin 2264 -> 0 bytes .../clangd/index/qrect.h.8BDEDE6AD19146A9.idx | Bin 35532 -> 0 bytes .../index/qrefcount.h.E2B7FA019F51035F.idx | Bin 1156 -> 0 bytes .../index/qregion.h.1A71AF3EB76D2D94.idx | Bin 8604 -> 0 bytes .../qregularexpression.h.AA37823FD2F57F30.idx | Bin 20838 -> 0 bytes .../clangd/index/qrgb.h.4A29C9FC342151A3.idx | Bin 2054 -> 0 bytes .../index/qrgba64.h.7EAC3B23774F706F.idx | Bin 7656 -> 0 bytes .../index/qrubberband.h.18E73D8C8F6D4C52.idx | Bin 3148 -> 0 bytes .../qscopedpointer.h.6298AF6754041B9D.idx | Bin 6296 -> 0 bytes .../index/qscopeguard.h.188951AB2A4E8E0E.idx | Bin 1742 -> 0 bytes .../index/qscreen.h.ED72C2867F5AA1B9.idx | Bin 6766 -> 0 bytes .../qscreen_platform.h.EA88485E2520FBA7.idx | Bin 1240 -> 0 bytes .../index/qscrollarea.h.E8DD046A626C5B2D.idx | Bin 2970 -> 0 bytes .../clangd/index/qset.h.F5113D4D2082A5F5.idx | Bin 25076 -> 0 bytes .../index/qshareddata.h.81536A7340226224.idx | Bin 17992 -> 0 bytes .../qshareddata_impl.h.573B6A3862491E90.idx | Bin 4606 -> 0 bytes .../qsharedpointer.h.0EB51E8B190F6437.idx | Bin 516 -> 0 bytes ...qsharedpointer_impl.h.337721DAB3A5F08D.idx | Bin 47710 -> 0 bytes .../clangd/index/qsize.h.2FF56A05E027E54D.idx | Bin 18544 -> 0 bytes .../index/qsizepolicy.h.A573A7E48BFD1C50.idx | Bin 10232 -> 0 bytes .../index/qslider.h.5E2CDDA19C546BCC.idx | Bin 3390 -> 0 bytes .../clangd/index/qspan.h.068D12705FAECB9E.idx | Bin 27204 -> 0 bytes .../index/qspinbox.h.EB85D3B1F4510764.idx | Bin 6158 -> 0 bytes .../index/qsplitter.h.A61F84E367402D3A.idx | Bin 6468 -> 0 bytes .../qstackedwidget.h.C50535AFF6636FF9.idx | Bin 2514 -> 0 bytes .../index/qstring.h.BAD2817AB9DD923D.idx | Bin 83052 -> 0 bytes .../qstringalgorithms.h.2B3FCE39FAFCE724.idx | Bin 16986 -> 0 bytes .../qstringbuilder.h.1575CA4BEECE6BB2.idx | Bin 20160 -> 0 bytes .../qstringconverter.h.4543E36264CDFCAC.idx | Bin 6946 -> 0 bytes ...tringconverter_base.h.EE8D95078AE5BAF7.idx | Bin 7936 -> 0 bytes .../index/qstringfwd.h.46E1DB540C447155.idx | Bin 1392 -> 0 bytes .../index/qstringlist.h.B508805E79550159.idx | Bin 10320 -> 0 bytes .../qstringliteral.h.157AA821116E86CF.idx | Bin 804 -> 0 bytes .../qstringmatcher.h.EF569685CEF0290B.idx | Bin 2676 -> 0 bytes .../qstringtokenizer.h.CB1C29950E1C8DA5.idx | Bin 17788 -> 0 bytes .../index/qstringview.h.483947F23EF16192.idx | Bin 26472 -> 0 bytes .../index/qstyle.h.C570AA47748BED3A.idx | Bin 62638 -> 0 bytes .../index/qstyleoption.h.DBFFD0DA4D4FDBD5.idx | Bin 66276 -> 0 bytes .../clangd/index/qswap.h.5AB090D7B04A2E11.idx | Bin 1028 -> 0 bytes .../index/qsysinfo.h.3FC08E4B53A487DA.idx | Bin 2110 -> 0 bytes .../qsystemdetection.h.D0C11743BDEEAFAA.idx | Bin 444 -> 0 bytes .../index/qtabbar.h.423B200A1E3875C8.idx | Bin 9888 -> 0 bytes .../index/qtabwidget.h.F6EE9365DCB13255.idx | Bin 8004 -> 0 bytes .../qtaggedpointer.h.2F4E30F23592A691.idx | Bin 7714 -> 0 bytes ...qtclasshelpermacros.h.BC1F21307C1E8939.idx | Bin 10256 -> 0 bytes .../qtconfiginclude.h.B88C50035F6000FF.idx | Bin 348 -> 0 bytes .../qtconfigmacros.h.7614BFE7533C7B11.idx | Bin 986 -> 0 bytes .../qtcore-config.h.021DBA4935D10D22.idx | Bin 1146 -> 0 bytes .../qtcoreexports.h.46D4639DCCC6E158.idx | Bin 564 -> 0 bytes ...recationdefinitions.h.AC8F81BB6635D445.idx | Bin 250 -> 0 bytes ...tdeprecationmarkers.h.DFBE9F212D166E30.idx | Bin 3094 -> 0 bytes ...nvironmentvariables.h.9AB3237984442820.idx | Bin 1800 -> 0 bytes .../index/qtextcursor.h.4060323F9EBA1B44.idx | Bin 11394 -> 0 bytes .../qtextdocument.h.783DC05C8FCFFD61.idx | Bin 16548 -> 0 bytes .../index/qtextedit.h.F04246AE77AB7AA4.idx | Bin 16310 -> 0 bytes .../index/qtextformat.h.3DCC5A5127B71974.idx | Bin 66292 -> 0 bytes .../index/qtextoption.h.7E83476789A7A646.idx | Bin 7304 -> 0 bytes .../index/qtextstream.h.7C8DD4F82DBEFDA4.idx | Bin 16108 -> 0 bytes .../index/qtgui-config.h.EDE12B3EBA6D364F.idx | Bin 1442 -> 0 bytes .../index/qtguiexports.h.0485051AB44B4703.idx | Bin 562 -> 0 bytes .../index/qtguiglobal.h.AD776BD26C164B7A.idx | Bin 424 -> 0 bytes .../index/qtimezone.h.76EC4526BFB29E03.idx | Bin 13126 -> 0 bytes .../index/qtmetamacros.h.2880FA8BC22BF523.idx | Bin 26506 -> 0 bytes .../index/qtnoop.h.D2D08A6E32B766D8.idx | Bin 248 -> 0 bytes ...preprocessorsupport.h.E169B7BAD080F5CE.idx | Bin 280 -> 0 bytes .../index/qtransform.h.294620FAF417F13A.idx | Bin 15696 -> 0 bytes .../index/qtreeview.h.80E03EC4BEA50965.idx | Bin 11028 -> 0 bytes .../index/qtreewidget.h.4EA5F2D3F587C36B.idx | Bin 19340 -> 0 bytes ...ewidgetitemiterator.h.266475725033105A.idx | Bin 4960 -> 0 bytes .../index/qtresource.h.8C3727046E85FCBC.idx | Bin 310 -> 0 bytes .../qttranslation.h.4BDC706964090D6F.idx | Bin 1020 -> 0 bytes .../index/qttypetraits.h.313748CE23FB6E36.idx | Bin 10614 -> 0 bytes .../index/qtversion.h.749CF3AD7213110F.idx | Bin 672 -> 0 bytes .../qtversionchecks.h.9DD791DF0424D822.idx | Bin 560 -> 0 bytes .../qtwidgets-config.h.76997689C7F8F505.idx | Bin 1834 -> 0 bytes .../qtwidgetsexports.h.C0C51FB128E2B6BC.idx | Bin 570 -> 0 bytes .../qtwidgetsglobal.h.4E511DFA22F19871.idx | Bin 452 -> 0 bytes .../index/qtypeinfo.h.86CE2E83DA835A19.idx | Bin 25692 -> 0 bytes .../index/qtypes.h.B4AF9D175BBD084B.idx | Bin 6612 -> 0 bytes .../clangd/index/qurl.h.B126D21986816F0B.idx | Bin 37510 -> 0 bytes .../qutf8stringview.h.37A6D424546F1586.idx | Bin 22370 -> 0 bytes .../index/qvalidator.h.366510219A10A0E6.idx | Bin 8662 -> 0 bytes .../index/qvariant.h.A62C1F398A926F5A.idx | Bin 44758 -> 0 bytes .../qvarlengtharray.h.D418BF8AA20DC14D.idx | Bin 80476 -> 0 bytes .../index/qvector2d.h.06D1665E842DF325.idx | Bin 232 -> 0 bytes .../index/qvectornd.h.D9741A093A95A1C6.idx | Bin 37738 -> 0 bytes .../qversiontagging.h.CE23E689703F6A38.idx | Bin 1518 -> 0 bytes .../index/qwidget.h.6759F82B1EB68CFF.idx | Bin 41936 -> 0 bytes .../index/qwindowdefs.h.2B54FE6A0C80381B.idx | Bin 2308 -> 0 bytes .../qxptype_traits.h.80D623DA52D2059B.idx | Bin 3256 -> 0 bytes .../index/qyieldcpu.h.9FE4C39152C07856.idx | Bin 654 -> 0 bytes .../index/range_access.h.6E96073B5F63565E.idx | Bin 7654 -> 0 bytes .../clangd/index/ratio.8487D67DA71155CD.idx | Bin 25264 -> 0 bytes .../index/refwrap.h.4EE4CF02590E49B9.idx | Bin 3544 -> 0 bytes .../riemann_zeta.tcc.D77CCD3CB7017EB1.idx | Bin 7148 -> 0 bytes .../clangd/index/sched.h.A585A48500495348.idx | Bin 2042 -> 0 bytes .../clangd/index/sched.h.E8530EF262253892.idx | Bin 3548 -> 0 bytes .../index/select.h.BA57472D13519767.idx | Bin 248 -> 0 bytes .../index/select.h.E19325D0BE3592A0.idx | Bin 2334 -> 0 bytes .../index/setjmp.h.71DEFB3DCC800794.idx | Bin 268 -> 0 bytes .../index/shared_ptr.h.98999B52051858AA.idx | Bin 18272 -> 0 bytes .../shared_ptr_atomic.h.9687B284C9814D78.idx | Bin 8840 -> 0 bytes .../shared_ptr_base.h.232999EA0B0B9FC0.idx | Bin 25422 -> 0 bytes .../index/sigset_t.h.32273C537A103809.idx | Bin 362 -> 0 bytes .../single_threaded.h.918E7314A6EC8DC0.idx | Bin 254 -> 0 bytes .../index/specfun.h.65DBA0A77E3CEC50.idx | Bin 27980 -> 0 bytes ...ecial_function_util.h.84282786DB21CFEC.idx | Bin 388 -> 0 bytes .../index/std_abs.h.29C06599499987A5.idx | Bin 1260 -> 0 bytes .../index/std_function.h.50D12C74AAED0946.idx | Bin 7336 -> 0 bytes .../index/stdarg.h.66419B4717E92223.idx | Bin 1052 -> 0 bytes .../index/stdbool.h.79148566A06020A7.idx | Bin 252 -> 0 bytes .../index/stdc-predef.h.9EA93D70716BF84B.idx | Bin 254 -> 0 bytes .../index/stddef.h.DA789432602BC8F3.idx | Bin 1438 -> 0 bytes .../index/stdexcept.58B04C7E9859AA5B.idx | Bin 9162 -> 0 bytes .../index/stdint-intn.h.EE0939E700184847.idx | Bin 488 -> 0 bytes .../index/stdint-uintn.h.B3EA113168048B57.idx | Bin 494 -> 0 bytes .../index/stdint.h.22B451C129B23D79.idx | Bin 4626 -> 0 bytes .../index/stdint.h.595F290315401810.idx | Bin 366 -> 0 bytes .../clangd/index/stdio.h.6919C07CB89D47AD.idx | Bin 29858 -> 0 bytes .../index/stdio_lim.h.09E79B5FC5C8DF86.idx | Bin 390 -> 0 bytes .../index/stdlib-float.h.126E8959FAE2A511.idx | Bin 162 -> 0 bytes .../index/stdlib.h.3A6E9006951385A7.idx | Bin 3258 -> 0 bytes .../index/stdlib.h.61AA7B9EED10C430.idx | Bin 36778 -> 0 bytes .../index/stl_algo.h.AB8A282D138620E8.idx | Bin 108226 -> 0 bytes .../index/stl_algobase.h.0FAA8197C6E90065.idx | Bin 34222 -> 0 bytes .../index/stl_bvector.h.4E41E08954D1609D.idx | Bin 23442 -> 0 bytes .../stl_construct.h.4CF95CFDA6FB4B9F.idx | Bin 1362 -> 0 bytes .../index/stl_function.h.0FFB6EA3463E337D.idx | Bin 34796 -> 0 bytes .../index/stl_heap.h.2202DBFC4AC7A855.idx | Bin 9860 -> 0 bytes .../index/stl_iterator.h.2F3524DC454A6598.idx | Bin 23922 -> 0 bytes ...iterator_base_funcs.h.AE6D8CEACD6422A4.idx | Bin 2942 -> 0 bytes ...iterator_base_types.h.9732F67131B44010.idx | Bin 4180 -> 0 bytes .../index/stl_list.h.9477E4C63C8F9398.idx | Bin 37558 -> 0 bytes .../index/stl_map.h.30F600572F55EF06.idx | Bin 29908 -> 0 bytes .../index/stl_multimap.h.763186DC213FF355.idx | Bin 18660 -> 0 bytes .../index/stl_numeric.h.0363404D15CD0360.idx | Bin 17862 -> 0 bytes .../index/stl_pair.h.3CECDCC6EED8CAE6.idx | Bin 8792 -> 0 bytes ...tl_raw_storage_iter.h.BB95DCEDC42F529A.idx | Bin 1184 -> 0 bytes .../index/stl_relops.h.6660ECC9755BF665.idx | Bin 1428 -> 0 bytes .../index/stl_tempbuf.h.42C5B1935AA58E32.idx | Bin 3864 -> 0 bytes .../index/stl_tree.h.0C1ECCD6AD44DC1C.idx | Bin 68546 -> 0 bytes .../stl_uninitialized.h.829472F883E6AFB7.idx | Bin 12540 -> 0 bytes .../index/stl_vector.h.A2FA968BFB875BEC.idx | Bin 23386 -> 0 bytes .../stream_iterator.h.B499C87E9521D236.idx | Bin 5268 -> 0 bytes .../index/streambuf.99CE91E40278C69C.idx | Bin 13516 -> 0 bytes .../index/streambuf.tcc.1FD9634B084DAA7E.idx | Bin 1104 -> 0 bytes .../streambuf_iterator.h.27BB5433434D1975.idx | Bin 10956 -> 0 bytes .../clangd/index/string.A57BF35B82FBB728.idx | Bin 2460 -> 0 bytes .../index/string.h.979B97B48AB27554.idx | Bin 14032 -> 0 bytes .../string_conversions.h.33C1C7073483FB67.idx | Bin 1336 -> 0 bytes .../index/string_view.BEF992DD425465D6.idx | Bin 28256 -> 0 bytes .../string_view.tcc.F90E5CD068F587E5.idx | Bin 6338 -> 0 bytes .../index/stringfwd.h.6515E9CFB6CBEC88.idx | Bin 1098 -> 0 bytes .../index/strings.h.9EB46A34EB89BB5D.idx | Bin 3392 -> 0 bytes .../index/struct_FILE.h.2B6C435DE91D3DF8.idx | Bin 428 -> 0 bytes ...truct___jmp_buf_tag.h.C41AC0386D4A06C8.idx | Bin 312 -> 0 bytes .../struct_itimerspec.h.7F2AA6FE7224B30F.idx | Bin 632 -> 0 bytes .../index/struct_mutex.h.A62EF32C01DB3505.idx | Bin 208 -> 0 bytes .../struct_rwlock.h.76DF445C3AA414C9.idx | Bin 210 -> 0 bytes .../struct_sched_param.h.B3F662015F7067C8.idx | Bin 382 -> 0 bytes .../struct_timespec.h.0E09B6677A8D6A08.idx | Bin 774 -> 0 bytes .../struct_timeval.h.4A17C4CCB9EE5883.idx | Bin 520 -> 0 bytes .../index/struct_tm.h.472DDF26D5924DB0.idx | Bin 1088 -> 0 bytes .../index/stubs-64.h.C743FD695F310B00.idx | Bin 318 -> 0 bytes .../clangd/index/stubs.h.07D09A29AEBA877C.idx | Bin 194 -> 0 bytes .../index/system_error.F41E9F6CDCB5D66D.idx | Bin 11900 -> 0 bytes ...thread-shared-types.h.D988ADBA7666A8DD.idx | Bin 526 -> 0 bytes .../clangd/index/time.h.E3714B647728C2FE.idx | Bin 964 -> 0 bytes .../clangd/index/time.h.EDC06F0AFB6EC7EC.idx | Bin 12630 -> 0 bytes .../index/time64.h.1807D6F5124100A2.idx | Bin 224 -> 0 bytes .../index/time_t.h.CAA645D29A7A0EF9.idx | Bin 296 -> 0 bytes .../index/timer_t.h.3EFB88CBA2B5B801.idx | Bin 328 -> 0 bytes .../index/timesize.h.44719E86E09400E4.idx | Bin 224 -> 0 bytes .../clangd/index/timex.h.F2D36E17192C32F0.idx | Bin 2672 -> 0 bytes .../clangd/index/tuple.11670F49A1019C73.idx | Bin 26626 -> 0 bytes .../index/type_traits.5C70B1EEF69AB1B2.idx | Bin 45194 -> 0 bytes .../index/type_traits.h.AFB5D04B561369A5.idx | Bin 398 -> 0 bytes .../index/typeinfo.632314867A8F1BE8.idx | Bin 2518 -> 0 bytes .../clangd/index/types.h.E5A59583DBE28918.idx | Bin 2396 -> 0 bytes .../clangd/index/types.h.E5E7FE6DA0F78AF5.idx | Bin 4442 -> 0 bytes .../index/typesizes.h.A6E116B64E63B90B.idx | Bin 1126 -> 0 bytes .../ui_mainwindow.h.8CF09B0D34E0A473.idx | Bin 84468 -> 0 bytes .../uintn-identity.h.CB86545C6FF94BB3.idx | Bin 248 -> 0 bytes .../index/uio_lim.h.DF584C6AE54BEA07.idx | Bin 180 -> 0 bytes .../uniform_int_dist.h.5937C8C5B8D24592.idx | Bin 12628 -> 0 bytes .../index/unique_ptr.h.FF3FAEAED7E033E5.idx | Bin 22094 -> 0 bytes .../index/unordered_map.F95B2A6E27B9D4F9.idx | Bin 1576 -> 0 bytes .../unordered_map.h.91AEB6757C0F604F.idx | Bin 28122 -> 0 bytes .../uses_allocator.h.AFA3827C58E20660.idx | Bin 1544 -> 0 bytes .../clangd/index/utility.85FA95438DB4CC5B.idx | Bin 8608 -> 0 bytes .../clangd/index/variant.AFFF49C5A62375A4.idx | Bin 36220 -> 0 bytes .../clangd/index/vector.5540A75A3880CF9C.idx | Bin 890 -> 0 bytes .../index/vector.tcc.180200071CE817B3.idx | Bin 21536 -> 0 bytes .../clangd/index/version.4CDCC1C10BD10FD3.idx | Bin 2228 -> 0 bytes .../index/waitflags.h.8046C5530CD87302.idx | Bin 412 -> 0 bytes .../index/waitstatus.h.D7C4F06852D51050.idx | Bin 458 -> 0 bytes .../clangd/index/wchar.h.27C0562D93BBAA12.idx | Bin 202 -> 0 bytes .../clangd/index/wchar.h.83BD995621576773.idx | Bin 27834 -> 0 bytes .../index/wint_t.h.DAC5928CF0BA7895.idx | Bin 250 -> 0 bytes .../index/wordsize.h.23D8030BEC81E6F1.idx | Bin 204 -> 0 bytes .../index/xopen_lim.h.E4E4BC8C11167D14.idx | Bin 548 -> 0 bytes .../.qtc_clangd/compile_commands.json | 1 - .../Desktop_Qt_6_8_0-Debug/CMakeCache.txt | 1388 ---- .../CMakeFiles/3.29.3/CMakeCXXCompiler.cmake | 92 - .../3.29.3/CMakeDetermineCompilerABI_CXX.bin | Bin 15992 -> 0 bytes .../CMakeFiles/3.29.3/CMakeSystem.cmake | 15 - .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 878 --- .../CMakeFiles/CMakeConfigureLog.yaml | 360 - .../CMakeFiles/TargetDirectories.txt | 9 - .../CMakeFiles/clean_additional.cmake | 10 - .../CMakeFiles/cmake.check_cache | 1 - .../AutogenInfo.json | 559 -- .../AutogenUsed.txt | 2 - .../ParseCache.txt | 414 - .../CMakeFiles/rules.ninja | 72 - .../Testing/Temporary/LastTest.log | 3 - .../build/Desktop_Qt_6_8_0-Debug/build.ninja | 247 - .../cmake_install.cmake | 74 - .../Desktop_Qt_6_8_0-Debug/qt6_application | Bin 1543648 -> 0 bytes .../EWIEGA46WW/moc_mainwindow.cpp.d | 408 - .../qt6_application_autogen/deps | 757 -- .../qt6_application_autogen/moc_predefs.h | 434 -- .../mocs_compilation.cpp | 2 - .../qt6_application_autogen/timestamp | 0 .../Desktop_Qt_6_8_0-Debug/qtcsettings.cmake | 10 - src/gui/qt6/main.cpp:Zone.Identifier | 0 src/gui/qt6/mainwindow.cpp:Zone.Identifier | 0 src/gui/qt6/mainwindow.h:Zone.Identifier | 0 src/gui/qt6/mainwindow.ui:Zone.Identifier | 0 599 files changed, 3 insertions(+), 18355 deletions(-) delete mode 100644 doc/tutorials/tutorial_4/imgs/UCAR_NAM_ALASKA_domain.gif delete mode 100644 doc/tutorials/tutorial_4/imgs/UCAR_RAP_domain.png delete mode 100644 src/gui/qt6/CMakeLists.txt.user delete mode 100644 src/gui/qt6/CMakeLists.txt.user.f3a83e8 delete mode 100644 src/gui/qt6/CMakeLists.txt.user:Zone.Identifier delete mode 100644 src/gui/qt6/CMakeLists.txt:Zone.Identifier delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cache-v2 delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cmakeFiles-v1 delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/codemodel-v2 delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/cache-v2-2bd5eb2af276508f9cf6.json delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/cmakeFiles-v1-c50b2651e07cb0d132da.json delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/codemodel-v2-ae14064b5c5bfb65eb35.json delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/directory-.-Debug-1004986b89cddb862e46.json delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/index-2025-02-08T20-08-26-0866.json delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application-Debug-ab345562360576f6a3d2.json delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application_autogen-Debug-5e2568b9da3822075dc1.json delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application_autogen_timestamp_deps-Debug-813a02102d630b32837c.json delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.ninja_deps delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.ninja_log delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeploySupport.cmake delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeployTargets.cmake delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/LICENSE.conan delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan.cmake delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan_provider.cmake delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/FILE.h.79AEFC497861DFC5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QAction.C96EF240B8C97D16.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QApplication.6186EE4D00472E1D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QCheckBox.F97C85CD389B142A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QComboBox.E9BD1F66553AE54E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QDateEdit.1363D2C608FAA19C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QDebug.D6EEDCAB812A108A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QDoubleSpinBox.0C0EB87BDB251E24.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QGridLayout.EB133BD173F64EFA.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QGroupBox.B9BAA2414EC9EC9A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QGuiApplication.40A6B5E7DDCCAB10.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QHBoxLayout.59B98A56E1270903.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QHeaderView.8CEFA40187CA5B18.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QLineEdit.4DF8C97A081C5AE8.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QList.43B29E3EAD15F037.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QMainWindow.9E6FBF24FCAA6A21.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QMenu.DCFD8A588257C352.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QMenuBar.3F9BED9766BFE45B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QObject.FD42F5FB68E8C303.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QPainterPath.3AC546BDB95A3F0F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QPushButton.2BC29870A6CB475C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRadioButton.A434882CF2D0EBE4.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRect.6DA68D4D1D3E2990.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRegion.130B003E89FE9983.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QResizeEvent.E67339F1D6D32BCD.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QScreen.711C5DF3EEB221C5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QScrollArea.C483AA522C6CD262.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSize.40E81C35EAEAA1C2.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSizeF.7B926032F3663078.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSpacerItem.70C1D6BAB0508458.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSpinBox.910CEC95EC8A5F86.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSplitter.417D2DBE07C04B3F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QStackedWidget.E41334FDB9386E84.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QTextEdit.149E81496A7D8D7D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QTimeEdit.4B41D1477297003C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QTransform.624B53E37B6109A7.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QTreeWidget.DB007D1CE25E1CE0.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QVBoxLayout.970ACCF300B40607.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QVariant.94E74B139BCD44CD.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QWidget.D763B9214B20E979.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__FILE.h.3324F85E382E036A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__fpos64_t.h.23C43F442076149A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__fpos_t.h.ECFBE9EEDAAB6648.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__locale_t.h.40EA38A2DCA58618.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__mbstate_t.h.6C32CF66236653D7.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__sigset_t.h.72131E8056C7E284.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___gnuc_va_list.h.43B1F3B1D6B4DAA2.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___va_copy.h.F5C63B16CFDA2191.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_arg.h.52F08F71EEB3BDB3.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_copy.h.E522E3A1343529C4.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_list.h.E375216D095D7803.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_max_align_t.h.4536C6003D50E15C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_null.h.9C59159E32851BAA.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_nullptr_t.h.7623FED4A13822AD.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_offsetof.h.1EE6274699D52A78.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_ptrdiff_t.h.FCE284AD03D60196.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_size_t.h.7413848320D9984C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_wchar_t.h.129FD7EE3A286014.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/algorithm.1CE1C5E7A2CC8947.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/algorithmfwd.h.7598BC438C9F2E18.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/align.h.EF3672F59F577484.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/aligned_buffer.h.D25F294C09A9BD51.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/alloc_traits.h.888093B2650D973C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/alloc_traits.h.A03678EA5038239B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/alloca.h.793370BF9878CFB6.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/allocated_ptr.h.4C2F2E5344DBBE09.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/allocator.h.726B26F70D1E9A82.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/array.F4CC01525F44E658.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/assert.h.9895EEC17E1D2A2B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/assertions.h.1D646B13C15CF849.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic.659F85E5DD2BCAE5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_base.h.BE2CD511127AE324.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_lockfree_defines.h.2D8FA2BBB9BFE893.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_wide_counter.h.397D66B6BECC0AA2.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_word.h.8B32DB244716470B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomicity.h.409EF4C070658F73.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/auto_ptr.h.07E293599CEBBF74.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/basic_string.h.4F91164A9845D8E7.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/basic_string.tcc.967E4E5D61DA5282.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/bessel_function.tcc.9171F62D1FC8591A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/beta_function.tcc.157C17AA6D54605D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/binders.h.B7909204B7953DFB.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/bit.2A91B049774121D4.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/byteswap.h.E57FF553A16DFAFC.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/c++allocator.h.00F4CFDD575112F2.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/c++config.h.A139A8B32F03163E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/c++locale.h.9D67E3B33BDF16E2.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cassert.C302028D9A1C4921.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cctype.76C6F247C1380A5B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cdefs.h.E4D450DF98C1338F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cerrno.5BD437BDECC7A78D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/char_traits.h.A86DDC004D15BD88.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/charconv.h.869BEB8F43DFD6D7.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/chrono.21DD8193C9F802BB.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/climits.CEDA74AF679CB63C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clocale.5FF46E6760ACF029.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clock_t.h.65AFE5BA7329BCD4.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clockid_t.h.5545878511E5BAF1.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cmath.5492EF8C588C18A0.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/concept_check.h.A4C7BDCF159AD4DF.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/concurrence.h.08E9E50104EBC4C9.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cookie_io_functions_t.h.5A08066DC7F05542.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cpp_type_traits.h.B5C50C37F2A36E3F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cpu-set.h.B40F3E2869BE4FF9.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cpu_defines.h.E7463FB44761786A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstddef.287A68F2FBF12AAD.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstdint.47B9166DA94B05BD.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstdio.325B5C34B96CF05A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstdlib.126A0D14F38BA60B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstring.DBEE10CA3A7F86F4.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ctime.D0C81AD2723230F7.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ctype.h.B268CEA0CECCFC59.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cwchar.A3402FA4C9A9F672.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cxxabi_forced.h.B8AF18F1501F1585.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cxxabi_init_exception.h.542C953E6C829C53.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ell_integral.tcc.28856E23765B109F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/enable_special_members.h.74E7B224F8375F62.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endian.h.1FC6A4D6D2846204.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endian.h.20F8E286A486EE09.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endianness.h.F2D2CC6251A4EAFA.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/erase_if.h.72B55D60DDD77C56.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno-base.h.23FC55A99C73A727.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.063064A523A47758.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.10013861918E601A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.19BCCCD58DA5623E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.33F6986A3C61A3BF.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.3F8ECD84FB880B64.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/error_constants.h.7739DB6650F792ED.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/error_t.h.58D3895A591B592D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exception.3BCB02E313BF87C9.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exception.h.563622B7F9DE0D64.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exception_defines.h.CED4C5F04DCEC0A5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exception_ptr.h.6BAAB8CAEF920B5D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/execution_defs.h.186F44494DB49E13.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exp_integral.tcc.3BFA54CF549FBF5E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/features-time64.h.BFBA8D3CA0316037.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/features.h.5A4ED7C80201A723.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/floatn-common.h.0FE8C4DDCB84E088.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/floatn.h.DA21C738CC1B6ABF.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/flt-eval-method.h.8058951BDB657B4B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/fp-fast.h.72CDF40E7648EF43.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/fp-logb.h.EA7AC5545F14BC26.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functexcept.h.807459FDC2AF6C4E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functional.ACE7A23DFA6A7C81.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functional_hash.h.412E38477D218834.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/gamma.tcc.CA2DC1F3C7EBE19F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/glue_algorithm_defs.h.C368EC8DE1036B81.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/glue_memory_defs.h.6519B6B389AF4A23.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/glue_numeric_defs.h.FCCD2FC54DA0DE29.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/gthr-default.h.B9D1A861FCC1A40F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/gthr.h.224F0F09E7E4961C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hash_bytes.h.274FC085A1115B4A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hashtable.h.DC8C92A807F065D3.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hashtable_policy.h.40A3B6E69632E8E1.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hypergeometric.tcc.62C6EC35332E0AAE.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/initializer_list.487DC3AA34672C18.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/invoke.h.DF3BCAA5A6E33E7C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ios_base.h.979B6DBB9A7C8F35.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/iosfwd.F621C0E74BE8B067.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/iscanonical.h.C53E44E13856FCEA.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/iterator.38B33E1892DEEBB8.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/legendre_function.tcc.64E8C808CA5BAA8E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/libc-header-start.h.E88219B53B0B0BF5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/libm-simd-decl-stubs.h.06B70A57602EA3C8.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.B12624C6106406AC.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.h.1DFE7D0FE6434B13.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.h.7CEA6B3592906D3F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.h.C293B8934AC926BB.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/list.168C0A1C22C8B14B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/list.tcc.94671DB6D4C8E664.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/local_lim.h.2CFD657F256B117E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale.h.E3C63D05A4E78516.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale.h.F1B51844858762D2.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.h.9512D5BF9F8BFC78.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.tcc.A7CA62888BCB33BF.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale_t.h.557516A6B361170F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/localefwd.h.A3B7C978BF60EC19.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/long-double.h.ACD735A1862B6BF8.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/main.cpp.EEBB228B1106B2B1.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.cpp.11CF4E2CF1316CEA.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.h.F0118C6BEFDCBB46.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/map.8C22362DDFC69B22.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/math-vector.h.B3EAC58DA1700969.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/math.h.DE4D39AAF5AC2C76.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mathcalls-helper-functions.h.934C8C52064E404C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mathcalls-narrow.h.EF4B0E9378BD4EE1.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mathcalls.h.655A2220FF0677F8.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mbstate_t.h.F9237FB65FF84D5A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/memory.768AFB22B9D6A62F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/memoryfwd.h.935D7DF208FDC906.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/modified_bessel_func.tcc.9B1532CEE9C375E7.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/move.h.89F6D662F9EAEF16.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/nested_exception.h.10DC70ED9F08D9D1.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/new.8A4066321F7AF016.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/new_allocator.h.D9A43F0C582D8F82.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/node_handle.h.CDEC5F05C546600C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/numeric.C9B73B80E066D1B7.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/numeric_traits.h.71952CE5B96E8B47.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/optional.3D6E41A544334FEE.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/os_defines.h.EA4549991D07B32F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ostream_insert.h.8302B2D6873DA4BB.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/parse_numbers.h.A6E2C9E96411584C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/poly_hermite.tcc.9FD6029D55EB67A1.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/poly_laguerre.tcc.BFD895219AA7B68C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/posix1_lim.h.D94E4687FC9359FF.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/posix2_lim.h.430DA38A1F301F29.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/postypes.h.6906AFED0EA1F1B4.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/predefined_ops.h.9786B9F84B9462DC.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pstl_config.h.CBBF88553BC795EF.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthread.h.022320E0CE01A46D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthread_stack_min-dynamic.h.6F432801F0DF58B7.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthreadtypes-arch.h.9E138C411BE448A0.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthreadtypes.h.BAA8217B62BB6E86.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ptr_traits.h.F78C58E579CDA022.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20functional.h.3B35B426F14AFB98.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20iterator.h.C23CF838032BAB9A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20memory.h.EF3BBE5C99993FC9.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20type_traits.h.80FD58CC3424A64D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q23utility.h.02F4E3C4153F6F6E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractbutton.h.CFA25BA0E844A352.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemdelegate.h.8D2FFF50AF7F61B9.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemmodel.h.D4BB35C1B1D9316E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemview.h.89AAA16972132E25.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractscrollarea.h.E7EE5DCA0672BDB7.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractslider.h.ED9DE327D105CA98.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractspinbox.h.613B7347B045F85C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qaction.h.DEB42C6F940315D3.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qalgorithms.h.0752FD13E8EF319B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qanystringview.h.9067A8646C0AC845.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qapplication.h.45685CEE1BB77E0E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydata.h.3E149019C53099F4.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydataops.h.CC375FBAF7851A50.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydatapointer.h.1128F9E57EA464F8.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qassert.h.BE86327E75D27D1C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qatomic.h.F284092535A24518.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qatomic_cxx11.h.B64FC8F5E10657CA.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbasicatomic.h.2DAC357DEDE2DFBB.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbindingstorage.h.73A75A3151EC9C78.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbitmap.h.9730D82D851365B4.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qboxlayout.h.FBE787986A66C425.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbrush.h.3E2C08834AE7F6F3.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearray.h.56EB072B89ABD6ED.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearrayalgorithms.h.40A38FF36A118743.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearraylist.h.E2B24FE3ED7DD6E0.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearrayview.h.1720D983E04E0E57.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcalendar.h.FE372A9F8303D252.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qchar.h.0D786C17186DA7C6.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcheckbox.h.EA09085F3E851E29.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcolor.h.F91F6990224F234F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcombobox.h.EB292BE8316348A9.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompare.h.CCB7FA596FC8E08E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompare_impl.h.AC2E30841FC04F9A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcomparehelpers.h.99315EB410FD5E10.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompilerdetection.h.8C6C229C1FFFC2B5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qconfig.h.846337A2147A75C2.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qconstructormacros.h.4C4C4817E1171CFA.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainerfwd.h.5FE05033C8BD3C55.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainerinfo.h.F5D0CD90AC279455.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainertools_impl.h.13D5DB46CB94E3B1.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontiguouscache.h.200BAC9C050661F8.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreapplication.h.9495311E207C3FA5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreapplication_platform.h.025BC7505FB180D1.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreevent.h.97F97F5E1881122E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcursor.h.F8060C576930CE8D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdarwinhelpers.h.1BF874FD5FB19478.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdatastream.h.FD38833A530EF87D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdatetime.h.4B296C80495006DF.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdatetimeedit.h.9A943232AF384486.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdeadlinetimer.h.1686DACE8E30BA49.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdebug.h.2855F0F64879D845.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qelapsedtimer.h.8A5D128937FAC7B3.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qendian.h.A9F85A81B249EBA5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qevent.h.35074D32CC775406.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qeventloop.h.452FC337516C45B3.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qeventpoint.h.6743609403519E70.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qexceptionhandling.h.B2ECE802A63F4CD5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qflags.h.E597625F7229645A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfloat16.h.0177AFB713EA8EF7.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfont.h.7D9F66D042F7B11C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfontinfo.h.5A04B1B87E9B68F5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfontmetrics.h.6FB4D77108AC7E22.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qforeach.h.2158A919387EF180.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qframe.h.AF3A096A5F7755E6.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfunctionaltools_impl.h.1D5E5ED3A5B51387.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfunctionpointer.h.DAE0E999D3F1D06C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qgenericatomic.h.6A0C22DFBC3BD1D2.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qglobal.h.1BB3F92FF7EB2D4E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qglobalstatic.h.D70EDA33C1796626.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qgridlayout.h.E07D45D1136B3AC3.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qgroupbox.h.26FCBE2A624361CD.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qguiapplication.h.785D76C858739A91.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qguiapplication_platform.h.E00644C1147E9DED.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qhash.h.F10ABA907D59B368.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qhashfunctions.h.EFDA8E5E332BD372.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qheaderview.h.23F2BD834D7DB292.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qicon.h.160AB644AFBFC44A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qimage.h.67FD69AB005377EE.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qinputdevice.h.339E51D2AAC381C9.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qinputmethod.h.47A60324C18186B8.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiodevice.h.9388E485C0A01200.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiodevicebase.h.57AFACBC3D314B1B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qitemselectionmodel.h.BA92BE56EEB93401.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiterable.h.29A457745ACC4B86.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiterator.h.420D4A13F79F0A7F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qkeysequence.h.DCEACEDD22610193.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlatin1stringview.h.5C4795D24DAF6F91.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlayout.h.F0BFE06293DD1904.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlayoutitem.h.8BB060701DDA612A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qline.h.95FA542EC7493437.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlineedit.h.D36FB34746B2A0B4.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlist.h.F1E0E6304468B4B5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlocale.h.FBB782BEDF501C8B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlogging.h.78CC882A01A41DDF.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmainwindow.h.107F43AEE6E4074C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmalloc.h.AC2AC112265B866C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmap.h.E1B18DE791B411CB.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmargins.h.B935BC6EAE3C8C16.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmath.h.24E8DD8C22CC4E56.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmenu.h.0FABB7AFACD22F6B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmenubar.h.21DA5516EFFBE0E1.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmetacontainer.h.D0F3C3B65E99E5EB.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmetatype.h.DAD15CFA6FC9BFF9.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qminmax.h.4D5B665F22788521.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnamespace.h.9AED58CB1F607D2F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnativeinterface.h.5166B0A1D4E3018A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnumeric.h.CBE0FAE461F0112D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qobject.h.2B0D8C99B5F9D6E8.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qobject_impl.h.E498A2D63752432C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs.h.4CE94A4E1E89C28E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs.h.8F45D7C545CD3DB7.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs_impl.h.3D23F86B673417A6.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qoverload.h.F7064D60B84B4724.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpaintdevice.h.83AE26BC9675EC56.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpainterpath.h.1D7575F9BD81DC74.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpair.h.7E4415438F6A17FE.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpalette.h.A0D6C68FE4FD52CF.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpen.h.D10BBA7A213EEDEF.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpixelformat.h.1735C8D208876A87.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpixmap.h.DA237644164D7D41.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpoint.h.65D6EB4FC892AB96.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpointingdevice.h.D088C170EE78F2C1.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpolygon.h.BE82A0C1B4A66723.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qprocessordetection.h.7DB29B574BD1E9F3.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpushbutton.h.B13C1F0959DD8453.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qradiobutton.h.54424D6AB6222449.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrect.h.8BDEDE6AD19146A9.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrefcount.h.E2B7FA019F51035F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qregion.h.1A71AF3EB76D2D94.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qregularexpression.h.AA37823FD2F57F30.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrgb.h.4A29C9FC342151A3.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrgba64.h.7EAC3B23774F706F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrubberband.h.18E73D8C8F6D4C52.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscopedpointer.h.6298AF6754041B9D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscopeguard.h.188951AB2A4E8E0E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscreen.h.ED72C2867F5AA1B9.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscreen_platform.h.EA88485E2520FBA7.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscrollarea.h.E8DD046A626C5B2D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qset.h.F5113D4D2082A5F5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qshareddata.h.81536A7340226224.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qshareddata_impl.h.573B6A3862491E90.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsharedpointer.h.0EB51E8B190F6437.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsharedpointer_impl.h.337721DAB3A5F08D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsize.h.2FF56A05E027E54D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsizepolicy.h.A573A7E48BFD1C50.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qslider.h.5E2CDDA19C546BCC.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qspan.h.068D12705FAECB9E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qspinbox.h.EB85D3B1F4510764.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsplitter.h.A61F84E367402D3A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstackedwidget.h.C50535AFF6636FF9.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstring.h.BAD2817AB9DD923D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringalgorithms.h.2B3FCE39FAFCE724.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringbuilder.h.1575CA4BEECE6BB2.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringconverter.h.4543E36264CDFCAC.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringconverter_base.h.EE8D95078AE5BAF7.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringfwd.h.46E1DB540C447155.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringlist.h.B508805E79550159.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringliteral.h.157AA821116E86CF.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringmatcher.h.EF569685CEF0290B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringtokenizer.h.CB1C29950E1C8DA5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringview.h.483947F23EF16192.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstyle.h.C570AA47748BED3A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstyleoption.h.DBFFD0DA4D4FDBD5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qswap.h.5AB090D7B04A2E11.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsysinfo.h.3FC08E4B53A487DA.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsystemdetection.h.D0C11743BDEEAFAA.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtabbar.h.423B200A1E3875C8.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtabwidget.h.F6EE9365DCB13255.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtaggedpointer.h.2F4E30F23592A691.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtclasshelpermacros.h.BC1F21307C1E8939.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtconfiginclude.h.B88C50035F6000FF.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtconfigmacros.h.7614BFE7533C7B11.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtcore-config.h.021DBA4935D10D22.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtcoreexports.h.46D4639DCCC6E158.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtdeprecationdefinitions.h.AC8F81BB6635D445.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtdeprecationmarkers.h.DFBE9F212D166E30.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtenvironmentvariables.h.9AB3237984442820.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextcursor.h.4060323F9EBA1B44.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextdocument.h.783DC05C8FCFFD61.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextedit.h.F04246AE77AB7AA4.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextformat.h.3DCC5A5127B71974.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextoption.h.7E83476789A7A646.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextstream.h.7C8DD4F82DBEFDA4.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtgui-config.h.EDE12B3EBA6D364F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtguiexports.h.0485051AB44B4703.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtguiglobal.h.AD776BD26C164B7A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtimezone.h.76EC4526BFB29E03.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtmetamacros.h.2880FA8BC22BF523.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtnoop.h.D2D08A6E32B766D8.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtpreprocessorsupport.h.E169B7BAD080F5CE.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtransform.h.294620FAF417F13A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreeview.h.80E03EC4BEA50965.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreewidget.h.4EA5F2D3F587C36B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreewidgetitemiterator.h.266475725033105A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtresource.h.8C3727046E85FCBC.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qttranslation.h.4BDC706964090D6F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qttypetraits.h.313748CE23FB6E36.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtversion.h.749CF3AD7213110F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtversionchecks.h.9DD791DF0424D822.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgets-config.h.76997689C7F8F505.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgetsexports.h.C0C51FB128E2B6BC.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgetsglobal.h.4E511DFA22F19871.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtypeinfo.h.86CE2E83DA835A19.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtypes.h.B4AF9D175BBD084B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qurl.h.B126D21986816F0B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qutf8stringview.h.37A6D424546F1586.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qvalidator.h.366510219A10A0E6.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qvariant.h.A62C1F398A926F5A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qvarlengtharray.h.D418BF8AA20DC14D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qvector2d.h.06D1665E842DF325.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qvectornd.h.D9741A093A95A1C6.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qversiontagging.h.CE23E689703F6A38.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qwidget.h.6759F82B1EB68CFF.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qwindowdefs.h.2B54FE6A0C80381B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qxptype_traits.h.80D623DA52D2059B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qyieldcpu.h.9FE4C39152C07856.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/range_access.h.6E96073B5F63565E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ratio.8487D67DA71155CD.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/refwrap.h.4EE4CF02590E49B9.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/riemann_zeta.tcc.D77CCD3CB7017EB1.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sched.h.A585A48500495348.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sched.h.E8530EF262253892.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/select.h.BA57472D13519767.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/select.h.E19325D0BE3592A0.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/setjmp.h.71DEFB3DCC800794.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr.h.98999B52051858AA.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_atomic.h.9687B284C9814D78.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_base.h.232999EA0B0B9FC0.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sigset_t.h.32273C537A103809.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/single_threaded.h.918E7314A6EC8DC0.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/specfun.h.65DBA0A77E3CEC50.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/special_function_util.h.84282786DB21CFEC.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/std_abs.h.29C06599499987A5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/std_function.h.50D12C74AAED0946.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdarg.h.66419B4717E92223.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdbool.h.79148566A06020A7.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdc-predef.h.9EA93D70716BF84B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stddef.h.DA789432602BC8F3.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdexcept.58B04C7E9859AA5B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdint-intn.h.EE0939E700184847.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdint-uintn.h.B3EA113168048B57.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdint.h.22B451C129B23D79.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdint.h.595F290315401810.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdio.h.6919C07CB89D47AD.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdio_lim.h.09E79B5FC5C8DF86.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdlib-float.h.126E8959FAE2A511.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdlib.h.3A6E9006951385A7.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdlib.h.61AA7B9EED10C430.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_algo.h.AB8A282D138620E8.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_algobase.h.0FAA8197C6E90065.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_bvector.h.4E41E08954D1609D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_construct.h.4CF95CFDA6FB4B9F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_function.h.0FFB6EA3463E337D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_heap.h.2202DBFC4AC7A855.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator.h.2F3524DC454A6598.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator_base_funcs.h.AE6D8CEACD6422A4.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator_base_types.h.9732F67131B44010.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_list.h.9477E4C63C8F9398.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_map.h.30F600572F55EF06.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_multimap.h.763186DC213FF355.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_numeric.h.0363404D15CD0360.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_pair.h.3CECDCC6EED8CAE6.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_raw_storage_iter.h.BB95DCEDC42F529A.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_relops.h.6660ECC9755BF665.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_tempbuf.h.42C5B1935AA58E32.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_tree.h.0C1ECCD6AD44DC1C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_uninitialized.h.829472F883E6AFB7.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_vector.h.A2FA968BFB875BEC.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stream_iterator.h.B499C87E9521D236.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/streambuf.99CE91E40278C69C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/streambuf.tcc.1FD9634B084DAA7E.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/streambuf_iterator.h.27BB5433434D1975.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string.A57BF35B82FBB728.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string.h.979B97B48AB27554.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string_conversions.h.33C1C7073483FB67.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string_view.BEF992DD425465D6.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string_view.tcc.F90E5CD068F587E5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stringfwd.h.6515E9CFB6CBEC88.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/strings.h.9EB46A34EB89BB5D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_FILE.h.2B6C435DE91D3DF8.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct___jmp_buf_tag.h.C41AC0386D4A06C8.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_itimerspec.h.7F2AA6FE7224B30F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_mutex.h.A62EF32C01DB3505.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_rwlock.h.76DF445C3AA414C9.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_sched_param.h.B3F662015F7067C8.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_timespec.h.0E09B6677A8D6A08.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_timeval.h.4A17C4CCB9EE5883.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_tm.h.472DDF26D5924DB0.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stubs-64.h.C743FD695F310B00.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stubs.h.07D09A29AEBA877C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/system_error.F41E9F6CDCB5D66D.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/thread-shared-types.h.D988ADBA7666A8DD.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time.h.E3714B647728C2FE.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time.h.EDC06F0AFB6EC7EC.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time64.h.1807D6F5124100A2.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time_t.h.CAA645D29A7A0EF9.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/timer_t.h.3EFB88CBA2B5B801.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/timesize.h.44719E86E09400E4.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/timex.h.F2D36E17192C32F0.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/tuple.11670F49A1019C73.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/type_traits.5C70B1EEF69AB1B2.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/type_traits.h.AFB5D04B561369A5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/typeinfo.632314867A8F1BE8.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5A59583DBE28918.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5E7FE6DA0F78AF5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/typesizes.h.A6E116B64E63B90B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ui_mainwindow.h.8CF09B0D34E0A473.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/uintn-identity.h.CB86545C6FF94BB3.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/uio_lim.h.DF584C6AE54BEA07.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/uniform_int_dist.h.5937C8C5B8D24592.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/unique_ptr.h.FF3FAEAED7E033E5.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.F95B2A6E27B9D4F9.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.h.91AEB6757C0F604F.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/uses_allocator.h.AFA3827C58E20660.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/utility.85FA95438DB4CC5B.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/variant.AFFF49C5A62375A4.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/vector.5540A75A3880CF9C.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/vector.tcc.180200071CE817B3.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/version.4CDCC1C10BD10FD3.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/waitflags.h.8046C5530CD87302.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/waitstatus.h.D7C4F06852D51050.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.27C0562D93BBAA12.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.83BD995621576773.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wint_t.h.DAC5928CF0BA7895.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wordsize.h.23D8030BEC81E6F1.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/xopen_lim.h.E4E4BC8C11167D14.idx delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/compile_commands.json delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeCache.txt delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake delete mode 100755 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_CXX.bin delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeSystem.cmake delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeConfigureLog.yaml delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/TargetDirectories.txt delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/clean_additional.cmake delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/cmake.check_cache delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenInfo.json delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenUsed.txt delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/ParseCache.txt delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/rules.ninja delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/Testing/Temporary/LastTest.log delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/build.ninja delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/cmake_install.cmake delete mode 100755 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/EWIEGA46WW/moc_mainwindow.cpp.d delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/deps delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/moc_predefs.h delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp delete mode 100644 src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qtcsettings.cmake delete mode 100644 src/gui/qt6/main.cpp:Zone.Identifier delete mode 100644 src/gui/qt6/mainwindow.cpp:Zone.Identifier delete mode 100644 src/gui/qt6/mainwindow.h:Zone.Identifier delete mode 100644 src/gui/qt6/mainwindow.ui:Zone.Identifier diff --git a/doc/tutorials/tutorial_4/imgs/UCAR_NAM_ALASKA_domain.gif b/doc/tutorials/tutorial_4/imgs/UCAR_NAM_ALASKA_domain.gif deleted file mode 100644 index 35ffd48b01b1c29c7534e696163ea246f22b6371..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32373 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 z 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 diff --git a/src/gui/qt6/.gitignore b/src/gui/qt6/.gitignore index 61b144899..4f4423358 100644 --- a/src/gui/qt6/.gitignore +++ b/src/gui/qt6/.gitignore @@ -46,6 +46,9 @@ Thumbs.db # Vim temporary files .*.swp +# Build +/build/ + # Visual Studio generated files *.ib_pdb_index *.idb diff --git a/src/gui/qt6/CMakeLists.txt.user b/src/gui/qt6/CMakeLists.txt.user deleted file mode 100644 index f603a6303..000000000 --- a/src/gui/qt6/CMakeLists.txt.user +++ /dev/null @@ -1,422 +0,0 @@ - - - - - - EnvironmentId - {88275b67-0a77-408f-8662-40b2bdae2fec} - - - ProjectExplorer.Project.ActiveTarget - 0 - - - ProjectExplorer.Project.EditorSettings - - true - false - true - - Cpp - - CppGlobal - - - - QmlJS - - QmlJSGlobal - - - 2 - UTF-8 - false - 4 - false - 80 - true - true - 1 - 0 - false - true - false - 2 - true - true - 0 - 8 - true - false - 1 - true - true - true - *.md, *.MD, Makefile - false - true - true - - - - ProjectExplorer.Project.PluginSettings - - - true - false - true - true - true - true - - false - - - 0 - true - - true - true - Builtin.DefaultTidyAndClazy - 14 - true - - - - true - - - - - ProjectExplorer.Project.Target.0 - - Desktop - Desktop Qt 6.8.0 - Desktop Qt 6.8.0 - qt.qt6.680.linux_gcc_64_kit - 0 - 0 - 0 - - Debug - 2 - false - - -DCMAKE_BUILD_TYPE:STRING=Debug --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} - 0 - /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug - - - - - all - - false - - true - Build - CMakeProjectManager.MakeStep - - 1 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - Build - CMakeProjectManager.MakeStep - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Debug - CMakeProjectManager.CMakeBuildConfiguration - - - Release - 2 - false - - -DCMAKE_BUILD_TYPE:STRING=Release --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} - /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Release - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Release - CMakeProjectManager.CMakeBuildConfiguration - - - RelWithDebInfo - 2 - false - - -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} - /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-RelWithDebInfo - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Release with Debug Information - CMakeProjectManager.CMakeBuildConfiguration - - - RelWithDebInfo - 2 - false - - -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} - 0 - /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Profile - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Profile - CMakeProjectManager.CMakeBuildConfiguration - - - MinSizeRel - 2 - false - - -DCMAKE_BUILD_TYPE:STRING=MinSizeRel --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} - /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-MinSizeRel - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Minimum Size Release - CMakeProjectManager.CMakeBuildConfiguration - - 5 - - - 0 - Deploy - Deploy - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - ProjectExplorer.DefaultDeployConfiguration - - 1 - - true - true - 0 - true - - 2 - - false - -e cpu-cycles --call-graph dwarf,4096 -F 250 - qt6_application - CMakeProjectManager.CMakeRunConfiguration.qt6_application - qt6_application - false - true - true - true - /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug - - 1 - - - - ProjectExplorer.Project.TargetCount - 1 - - - ProjectExplorer.Project.Updater.FileVersion - 22 - - - Version - 22 - - diff --git a/src/gui/qt6/CMakeLists.txt.user.f3a83e8 b/src/gui/qt6/CMakeLists.txt.user.f3a83e8 deleted file mode 100644 index 36cf52efa..000000000 --- a/src/gui/qt6/CMakeLists.txt.user.f3a83e8 +++ /dev/null @@ -1,422 +0,0 @@ - - - - - - EnvironmentId - {f3a83e8a-49e6-4193-9c60-1e85ac4bd4eb} - - - ProjectExplorer.Project.ActiveTarget - 0 - - - ProjectExplorer.Project.EditorSettings - - true - false - true - - Cpp - - CppGlobal - - - - QmlJS - - QmlJSGlobal - - - 2 - UTF-8 - false - 4 - false - 80 - true - true - 1 - 0 - false - true - false - 2 - true - true - 0 - 8 - true - false - 1 - true - true - true - *.md, *.MD, Makefile - false - true - true - - - - ProjectExplorer.Project.PluginSettings - - - true - false - true - true - true - true - - false - - - 0 - true - - true - true - Builtin.DefaultTidyAndClazy - 14 - true - - - - true - - - - - ProjectExplorer.Project.Target.0 - - Desktop - Desktop Qt 6.8.0 - Desktop Qt 6.8.0 - qt.qt6.680.linux_gcc_64_kit - 0 - 0 - 0 - - Debug - 2 - false - - -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_BUILD_TYPE:STRING=Debug --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake - 0 - /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-Debug - - - - - all - - false - - true - Build - CMakeProjectManager.MakeStep - - 1 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - Build - CMakeProjectManager.MakeStep - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Debug - CMakeProjectManager.CMakeBuildConfiguration - - - Release - 2 - false - - -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_BUILD_TYPE:STRING=Release --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake - /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-Release - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Release - CMakeProjectManager.CMakeBuildConfiguration - - - RelWithDebInfo - 2 - false - - -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake - /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-RelWithDebInfo - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Release with Debug Information - CMakeProjectManager.CMakeBuildConfiguration - - - RelWithDebInfo - 2 - false - - -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake - 0 - /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-Profile - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Profile - CMakeProjectManager.CMakeBuildConfiguration - - - MinSizeRel - 2 - false - - -DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_GENERATOR:STRING=Ninja --DCMAKE_BUILD_TYPE:STRING=MinSizeRel --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake - /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-MinSizeRel - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Minimum Size Release - CMakeProjectManager.CMakeBuildConfiguration - - 5 - - - 0 - Deploy - Deploy - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - ProjectExplorer.DefaultDeployConfiguration - - 1 - - true - true - 0 - true - - 2 - - false - -e cpu-cycles --call-graph dwarf,4096 -F 250 - qt6_application - CMakeProjectManager.CMakeRunConfiguration.qt6_application - qt6_application - false - true - true - true - /home/austenharrell/school/2025_Spring/test_qt_project/test/build/Desktop_Qt_6_8_0-Debug - - 1 - - - - ProjectExplorer.Project.TargetCount - 1 - - - ProjectExplorer.Project.Updater.FileVersion - 22 - - - Version - 22 - - diff --git a/src/gui/qt6/CMakeLists.txt.user:Zone.Identifier b/src/gui/qt6/CMakeLists.txt.user:Zone.Identifier deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/gui/qt6/CMakeLists.txt:Zone.Identifier b/src/gui/qt6/CMakeLists.txt:Zone.Identifier deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cache-v2 b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cache-v2 deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cmakeFiles-v1 b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cmakeFiles-v1 deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/codemodel-v2 b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/codemodel-v2 deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/cache-v2-2bd5eb2af276508f9cf6.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/cache-v2-2bd5eb2af276508f9cf6.json deleted file mode 100644 index c34a41ae1..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/cache-v2-2bd5eb2af276508f9cf6.json +++ /dev/null @@ -1,6903 +0,0 @@ -{ - "entries" : - [ - { - "name" : "CMAKE_ADDR2LINE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/x86_64-linux-gnu-addr2line" - }, - { - "name" : "CMAKE_AR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/x86_64-linux-gnu-ar" - }, - { - "name" : "CMAKE_BUILD_TYPE", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "No help, variable specified on the command line." - } - ], - "type" : "STRING", - "value" : "Debug" - }, - { - "name" : "CMAKE_CACHEFILE_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "This is the directory where this CMakeCache.txt was created" - } - ], - "type" : "INTERNAL", - "value" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug" - }, - { - "name" : "CMAKE_CACHE_MAJOR_VERSION", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Major version of cmake used to create the current loaded cache" - } - ], - "type" : "INTERNAL", - "value" : "3" - }, - { - "name" : "CMAKE_CACHE_MINOR_VERSION", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Minor version of cmake used to create the current loaded cache" - } - ], - "type" : "INTERNAL", - "value" : "29" - }, - { - "name" : "CMAKE_CACHE_PATCH_VERSION", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Patch version of cmake used to create the current loaded cache" - } - ], - "type" : "INTERNAL", - "value" : "3" - }, - { - "name" : "CMAKE_COLOR_DIAGNOSTICS", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Enable colored diagnostics throughout." - } - ], - "type" : "BOOL", - "value" : "1" - }, - { - "name" : "CMAKE_COMMAND", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Path to CMake executable." - } - ], - "type" : "INTERNAL", - "value" : "/home/austenharrell/Qt/Tools/CMake/bin/cmake" - }, - { - "name" : "CMAKE_CPACK_COMMAND", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Path to cpack program executable." - } - ], - "type" : "INTERNAL", - "value" : "/home/austenharrell/Qt/Tools/CMake/bin/cpack" - }, - { - "name" : "CMAKE_CTEST_COMMAND", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Path to ctest program executable." - } - ], - "type" : "INTERNAL", - "value" : "/home/austenharrell/Qt/Tools/CMake/bin/ctest" - }, - { - "name" : "CMAKE_CXX_COMPILER", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "CXX compiler" - } - ], - "type" : "STRING", - "value" : "/usr/bin/x86_64-linux-gnu-g++-11" - }, - { - "name" : "CMAKE_CXX_COMPILER_AR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "A wrapper around 'ar' adding the appropriate '--plugin' option for the GCC compiler" - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/x86_64-linux-gnu-gcc-ar-11" - }, - { - "name" : "CMAKE_CXX_COMPILER_RANLIB", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "A wrapper around 'ranlib' adding the appropriate '--plugin' option for the GCC compiler" - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/x86_64-linux-gnu-gcc-ranlib-11" - }, - { - "name" : "CMAKE_CXX_FLAGS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the CXX compiler during all build types." - } - ], - "type" : "STRING", - "value" : "-DQT_QML_DEBUG" - }, - { - "name" : "CMAKE_CXX_FLAGS_DEBUG", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the CXX compiler during DEBUG builds." - } - ], - "type" : "STRING", - "value" : "-g" - }, - { - "name" : "CMAKE_CXX_FLAGS_INIT", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "No help, variable specified on the command line." - } - ], - "type" : "STRING", - "value" : "-DQT_QML_DEBUG" - }, - { - "name" : "CMAKE_CXX_FLAGS_MINSIZEREL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the CXX compiler during MINSIZEREL builds." - } - ], - "type" : "STRING", - "value" : "-Os -DNDEBUG" - }, - { - "name" : "CMAKE_CXX_FLAGS_RELEASE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the CXX compiler during RELEASE builds." - } - ], - "type" : "STRING", - "value" : "-O3 -DNDEBUG" - }, - { - "name" : "CMAKE_CXX_FLAGS_RELWITHDEBINFO", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the CXX compiler during RELWITHDEBINFO builds." - } - ], - "type" : "STRING", - "value" : "-O2 -g -DNDEBUG" - }, - { - "name" : "CMAKE_CXX_OUTPUT_EXTENSION", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "STRING", - "value" : ".o" - }, - { - "name" : "CMAKE_C_COMPILER", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "No help, variable specified on the command line." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/gcc-11" - }, - { - "name" : "CMAKE_C_OUTPUT_EXTENSION", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_DLLTOOL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "CMAKE_DLLTOOL-NOTFOUND" - }, - { - "name" : "CMAKE_EDIT_COMMAND", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Path to cache edit program executable." - } - ], - "type" : "INTERNAL", - "value" : "/home/austenharrell/Qt/Tools/CMake/bin/ccmake" - }, - { - "name" : "CMAKE_EXECUTABLE_FORMAT", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Executable file format" - } - ], - "type" : "INTERNAL", - "value" : "ELF" - }, - { - "name" : "CMAKE_EXE_LINKER_FLAGS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during all build types." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_EXE_LINKER_FLAGS_DEBUG", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during DEBUG builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_EXE_LINKER_FLAGS_MINSIZEREL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during MINSIZEREL builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_EXE_LINKER_FLAGS_RELEASE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during RELEASE builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during RELWITHDEBINFO builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_EXPORT_COMPILE_COMMANDS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Enable/Disable output of compile commands during generation." - } - ], - "type" : "BOOL", - "value" : "" - }, - { - "name" : "CMAKE_FIND_PACKAGE_REDIRECTS_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake." - } - ], - "type" : "STATIC", - "value" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/pkgRedirects" - }, - { - "name" : "CMAKE_GENERATOR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "No help, variable specified on the command line." - } - ], - "type" : "STRING", - "value" : "Ninja" - }, - { - "name" : "CMAKE_GENERATOR_INSTANCE", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Generator instance identifier." - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "CMAKE_GENERATOR_PLATFORM", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Name of generator platform." - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "CMAKE_GENERATOR_TOOLSET", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Name of generator toolset." - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "CMAKE_HAVE_LIBC_PTHREAD", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Test CMAKE_HAVE_LIBC_PTHREAD" - } - ], - "type" : "INTERNAL", - "value" : "1" - }, - { - "name" : "CMAKE_HOME_DIRECTORY", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Source directory with the top level CMakeLists.txt file for this project" - } - ], - "type" : "INTERNAL", - "value" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6" - }, - { - "name" : "CMAKE_INSTALL_BINDIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "User executables (bin)" - } - ], - "type" : "PATH", - "value" : "bin" - }, - { - "name" : "CMAKE_INSTALL_DATADIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Read-only architecture-independent data (DATAROOTDIR)" - } - ], - "type" : "PATH", - "value" : "" - }, - { - "name" : "CMAKE_INSTALL_DATAROOTDIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Read-only architecture-independent data root (share)" - } - ], - "type" : "PATH", - "value" : "share" - }, - { - "name" : "CMAKE_INSTALL_DOCDIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Documentation root (DATAROOTDIR/doc/PROJECT_NAME)" - } - ], - "type" : "PATH", - "value" : "" - }, - { - "name" : "CMAKE_INSTALL_INCLUDEDIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "C header files (include)" - } - ], - "type" : "PATH", - "value" : "include" - }, - { - "name" : "CMAKE_INSTALL_INFODIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Info documentation (DATAROOTDIR/info)" - } - ], - "type" : "PATH", - "value" : "" - }, - { - "name" : "CMAKE_INSTALL_LIBDIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Object code libraries (lib)" - } - ], - "type" : "PATH", - "value" : "lib" - }, - { - "name" : "CMAKE_INSTALL_LIBEXECDIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Program executables (libexec)" - } - ], - "type" : "PATH", - "value" : "libexec" - }, - { - "name" : "CMAKE_INSTALL_LOCALEDIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Locale-dependent data (DATAROOTDIR/locale)" - } - ], - "type" : "PATH", - "value" : "" - }, - { - "name" : "CMAKE_INSTALL_LOCALSTATEDIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Modifiable single-machine data (var)" - } - ], - "type" : "PATH", - "value" : "var" - }, - { - "name" : "CMAKE_INSTALL_MANDIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Man documentation (DATAROOTDIR/man)" - } - ], - "type" : "PATH", - "value" : "" - }, - { - "name" : "CMAKE_INSTALL_OLDINCLUDEDIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "C header files for non-gcc (/usr/include)" - } - ], - "type" : "PATH", - "value" : "/usr/include" - }, - { - "name" : "CMAKE_INSTALL_PREFIX", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Install path prefix, prepended onto install directories." - } - ], - "type" : "PATH", - "value" : "/usr/local" - }, - { - "name" : "CMAKE_INSTALL_RUNSTATEDIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Run-time variable data (LOCALSTATEDIR/run)" - } - ], - "type" : "PATH", - "value" : "" - }, - { - "name" : "CMAKE_INSTALL_SBINDIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "System admin executables (sbin)" - } - ], - "type" : "PATH", - "value" : "sbin" - }, - { - "name" : "CMAKE_INSTALL_SHAREDSTATEDIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Modifiable architecture-independent data (com)" - } - ], - "type" : "PATH", - "value" : "com" - }, - { - "name" : "CMAKE_INSTALL_SO_NO_EXE", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Install .so files without execute permission." - } - ], - "type" : "INTERNAL", - "value" : "1" - }, - { - "name" : "CMAKE_INSTALL_SYSCONFDIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Read-only single-machine data (etc)" - } - ], - "type" : "PATH", - "value" : "etc" - }, - { - "name" : "CMAKE_LINKER", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/x86_64-linux-gnu-ld" - }, - { - "name" : "CMAKE_MAKE_PROGRAM", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Program used to build from build.ninja files." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/ninja" - }, - { - "name" : "CMAKE_MODULE_LINKER_FLAGS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of modules during all build types." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_MODULE_LINKER_FLAGS_DEBUG", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of modules during DEBUG builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of modules during MINSIZEREL builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_MODULE_LINKER_FLAGS_RELEASE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of modules during RELEASE builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of modules during RELWITHDEBINFO builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_NM", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/x86_64-linux-gnu-nm" - }, - { - "name" : "CMAKE_NUMBER_OF_MAKEFILES", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "number of local generators" - } - ], - "type" : "INTERNAL", - "value" : "1" - }, - { - "name" : "CMAKE_OBJCOPY", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/x86_64-linux-gnu-objcopy" - }, - { - "name" : "CMAKE_OBJDUMP", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/x86_64-linux-gnu-objdump" - }, - { - "name" : "CMAKE_PLATFORM_INFO_INITIALIZED", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Platform information initialized" - } - ], - "type" : "INTERNAL", - "value" : "1" - }, - { - "name" : "CMAKE_PREFIX_PATH", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "No help, variable specified on the command line." - } - ], - "type" : "PATH", - "value" : "/home/austenharrell/Qt/6.8.0/gcc_64" - }, - { - "name" : "CMAKE_PROJECT_DESCRIPTION", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "" - }, - { - "name" : "CMAKE_PROJECT_HOMEPAGE_URL", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "" - }, - { - "name" : "CMAKE_PROJECT_INCLUDE_BEFORE", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "No help, variable specified on the command line." - } - ], - "type" : "FILEPATH", - "value" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake" - }, - { - "name" : "CMAKE_PROJECT_NAME", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "qt6_application" - }, - { - "name" : "CMAKE_PROJECT_VERSION", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "0.1" - }, - { - "name" : "CMAKE_PROJECT_VERSION_MAJOR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "0" - }, - { - "name" : "CMAKE_PROJECT_VERSION_MINOR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "1" - }, - { - "name" : "CMAKE_PROJECT_VERSION_PATCH", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "" - }, - { - "name" : "CMAKE_PROJECT_VERSION_TWEAK", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "" - }, - { - "name" : "CMAKE_RANLIB", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/x86_64-linux-gnu-ranlib" - }, - { - "name" : "CMAKE_READELF", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/x86_64-linux-gnu-readelf" - }, - { - "name" : "CMAKE_ROOT", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Path to CMake installation." - } - ], - "type" : "INTERNAL", - "value" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29" - }, - { - "name" : "CMAKE_SHARED_LINKER_FLAGS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of shared libraries during all build types." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_SHARED_LINKER_FLAGS_DEBUG", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of shared libraries during DEBUG builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of shared libraries during MINSIZEREL builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_SHARED_LINKER_FLAGS_RELEASE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of shared libraries during RELEASE builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of shared libraries during RELWITHDEBINFO builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_SKIP_INSTALL_RPATH", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "If set, runtime paths are not added when installing shared libraries, but are added when building." - } - ], - "type" : "BOOL", - "value" : "NO" - }, - { - "name" : "CMAKE_SKIP_RPATH", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "If set, runtime paths are not added when using shared libraries." - } - ], - "type" : "BOOL", - "value" : "NO" - }, - { - "name" : "CMAKE_STATIC_LINKER_FLAGS", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of static libraries during all build types." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_STATIC_LINKER_FLAGS_DEBUG", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of static libraries during DEBUG builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of static libraries during MINSIZEREL builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_STATIC_LINKER_FLAGS_RELEASE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of static libraries during RELEASE builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Flags used by the linker during the creation of static libraries during RELWITHDEBINFO builds." - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "CMAKE_STRIP", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/x86_64-linux-gnu-strip" - }, - { - "name" : "CMAKE_TAPI", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "CMAKE_TAPI-NOTFOUND" - }, - { - "name" : "CMAKE_UNAME", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "uname command" - } - ], - "type" : "INTERNAL", - "value" : "/usr/bin/uname" - }, - { - "name" : "CMAKE_VERBOSE_MAKEFILE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make. This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo." - } - ], - "type" : "BOOL", - "value" : "FALSE" - }, - { - "name" : "FIND_PACKAGE_MESSAGE_DETAILS_OpenGL", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Details about finding OpenGL" - } - ], - "type" : "INTERNAL", - "value" : "[/usr/lib/x86_64-linux-gnu/libOpenGL.so][/usr/lib/x86_64-linux-gnu/libGLX.so][/usr/include][c ][v()]" - }, - { - "name" : "FIND_PACKAGE_MESSAGE_DETAILS_Threads", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Details about finding Threads" - } - ], - "type" : "INTERNAL", - "value" : "[TRUE][v()]" - }, - { - "name" : "FIND_PACKAGE_MESSAGE_DETAILS_WrapAtomic", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Details about finding WrapAtomic" - } - ], - "type" : "INTERNAL", - "value" : "[1][v()]" - }, - { - "name" : "FIND_PACKAGE_MESSAGE_DETAILS_WrapOpenGL", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Details about finding WrapOpenGL" - } - ], - "type" : "INTERNAL", - "value" : "[ON][v()]" - }, - { - "name" : "HAVE_STDATOMIC", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Test HAVE_STDATOMIC" - } - ], - "type" : "INTERNAL", - "value" : "1" - }, - { - "name" : "OPENGL_EGL_INCLUDE_DIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a file." - } - ], - "type" : "PATH", - "value" : "/usr/include" - }, - { - "name" : "OPENGL_GLES2_INCLUDE_DIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a file." - } - ], - "type" : "PATH", - "value" : "/usr/include" - }, - { - "name" : "OPENGL_GLES3_INCLUDE_DIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a file." - } - ], - "type" : "PATH", - "value" : "/usr/include" - }, - { - "name" : "OPENGL_GLU_INCLUDE_DIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a file." - } - ], - "type" : "PATH", - "value" : "/usr/include" - }, - { - "name" : "OPENGL_GLX_INCLUDE_DIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a file." - } - ], - "type" : "PATH", - "value" : "/usr/include" - }, - { - "name" : "OPENGL_INCLUDE_DIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a file." - } - ], - "type" : "PATH", - "value" : "/usr/include" - }, - { - "name" : "OPENGL_egl_LIBRARY", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a library." - } - ], - "type" : "FILEPATH", - "value" : "/usr/lib/x86_64-linux-gnu/libEGL.so" - }, - { - "name" : "OPENGL_gles2_LIBRARY", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a library." - } - ], - "type" : "FILEPATH", - "value" : "/usr/lib/x86_64-linux-gnu/libGLESv2.so" - }, - { - "name" : "OPENGL_gles3_LIBRARY", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a library." - } - ], - "type" : "FILEPATH", - "value" : "/usr/lib/x86_64-linux-gnu/libGLESv2.so" - }, - { - "name" : "OPENGL_glu_LIBRARY", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a library." - } - ], - "type" : "FILEPATH", - "value" : "/usr/lib/x86_64-linux-gnu/libGLU.so" - }, - { - "name" : "OPENGL_glx_LIBRARY", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a library." - } - ], - "type" : "FILEPATH", - "value" : "/usr/lib/x86_64-linux-gnu/libGLX.so" - }, - { - "name" : "OPENGL_opengl_LIBRARY", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a library." - } - ], - "type" : "FILEPATH", - "value" : "/usr/lib/x86_64-linux-gnu/libOpenGL.so" - }, - { - "name" : "OPENGL_xmesa_INCLUDE_DIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a file." - } - ], - "type" : "PATH", - "value" : "OPENGL_xmesa_INCLUDE_DIR-NOTFOUND" - }, - { - "name" : "PKG_CONFIG_ARGN", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Arguments to supply to pkg-config" - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "PKG_CONFIG_EXECUTABLE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "pkg-config executable" - } - ], - "type" : "FILEPATH", - "value" : "/usr/bin/pkg-config" - }, - { - "name" : "PKG_XKB_CFLAGS", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_CFLAGS_I", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_CFLAGS_OTHER", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_FOUND", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_INCLUDEDIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_LIBDIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_LIBS", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_LIBS_L", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_LIBS_OTHER", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_LIBS_PATHS", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_MODULE_NAME", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_PREFIX", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_STATIC_CFLAGS", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_STATIC_CFLAGS_I", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_STATIC_CFLAGS_OTHER", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_STATIC_LIBDIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_STATIC_LIBS", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_STATIC_LIBS_L", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_STATIC_LIBS_OTHER", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_STATIC_LIBS_PATHS", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_VERSION", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_xkbcommon_INCLUDEDIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_xkbcommon_LIBDIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_xkbcommon_PREFIX", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "PKG_XKB_xkbcommon_VERSION", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "" - }, - { - "name" : "QT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Additional directories where find(Qt6 ...) host Qt components are searched" - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "QT_ADDITIONAL_PACKAGES_PREFIX_PATH", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Additional directories where find(Qt6 ...) components are searched" - } - ], - "type" : "STRING", - "value" : "" - }, - { - "name" : "QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Skip Qt Creator's package manager auto-setup" - } - ], - "type" : "BOOL", - "value" : "OFF" - }, - { - "name" : "QT_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "The directory containing a CMake configuration file for QT." - } - ], - "type" : "PATH", - "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6" - }, - { - "name" : "QT_FEATURE_abstractbutton", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: abstractbutton (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_abstractslider", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: abstractslider (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_accessibility", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: accessibility (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_accessibility_atspi_bridge", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: accessibility_atspi_bridge (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_action", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: action (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_aesni", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: aesni (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_alloca", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: alloca (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_alloca_h", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: alloca_h (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_alloca_malloc_h", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: alloca_malloc_h (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_android_style_assets", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: android_style_assets (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_animation", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: animation (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_appstore_compliant", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: appstore_compliant (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_arm_crc32", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: arm_crc32 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_arm_crypto", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: arm_crypto (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_avx", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: avx (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_avx2", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: avx2 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_avx512bw", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: avx512bw (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_avx512cd", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: avx512cd (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_avx512dq", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: avx512dq (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_avx512er", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: avx512er (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_avx512f", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: avx512f (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_avx512ifma", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: avx512ifma (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_avx512pf", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: avx512pf (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_avx512vbmi", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: avx512vbmi (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_avx512vbmi2", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: avx512vbmi2 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_avx512vl", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: avx512vl (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_backtrace", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: backtrace (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_buttongroup", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: buttongroup (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_calendarwidget", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: calendarwidget (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_cborstreamreader", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: cborstreamreader (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_cborstreamwriter", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: cborstreamwriter (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_checkbox", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: checkbox (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_clipboard", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: clipboard (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_clock_gettime", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: clock_gettime (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_clock_monotonic", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: clock_monotonic (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_close_range", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: close_range (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_colordialog", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: colordialog (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_colornames", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: colornames (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_columnview", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: columnview (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_combobox", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: combobox (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_commandlineparser", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: commandlineparser (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_commandlinkbutton", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: commandlinkbutton (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_completer", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: completer (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_concatenatetablesproxymodel", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: concatenatetablesproxymodel (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_concurrent", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: concurrent (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_contextmenu", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: contextmenu (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_cpp_winrt", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: cpp_winrt (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_cross_compile", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: cross_compile (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_cssparser", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: cssparser (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_ctf", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: ctf (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_cursor", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: cursor (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_cxx11_future", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: cxx11_future (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_cxx17_filesystem", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: cxx17_filesystem (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_cxx20", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: cxx20 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_cxx23_stacktrace", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: cxx23_stacktrace (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_cxx2a", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: cxx2a (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_cxx2b", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: cxx2b (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_datawidgetmapper", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: datawidgetmapper (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_datestring", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: datestring (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_datetimeedit", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: datetimeedit (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_datetimeparser", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: datetimeparser (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_dbus", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: dbus (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_dbus_linked", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: dbus_linked (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_debug", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: debug (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_debug_and_release", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: debug_and_release (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_desktopservices", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: desktopservices (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_developer_build", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: developer_build (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_dial", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: dial (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_dialog", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: dialog (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_dialogbuttonbox", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: dialogbuttonbox (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_direct2d", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: direct2d (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_direct2d1_1", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: direct2d1_1 (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_directfb", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: directfb (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_directwrite", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: directwrite (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_directwrite3", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: directwrite3 (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_dladdr", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: dladdr (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_dlopen", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: dlopen (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_dockwidget", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: dockwidget (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_doubleconversion", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: doubleconversion (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_draganddrop", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: draganddrop (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_drm_atomic", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: drm_atomic (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_dynamicgl", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: dynamicgl (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_easingcurve", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: easingcurve (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_effects", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: effects (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_egl", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: egl (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_egl_x11", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: egl_x11 (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_eglfs", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: eglfs (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_eglfs_brcm", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: eglfs_brcm (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_eglfs_egldevice", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: eglfs_egldevice (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_eglfs_gbm", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: eglfs_gbm (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_eglfs_mali", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: eglfs_mali (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_eglfs_openwfd", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: eglfs_openwfd (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_eglfs_rcar", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: eglfs_rcar (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_eglfs_viv", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: eglfs_viv (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_eglfs_viv_wl", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: eglfs_viv_wl (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_eglfs_vsp2", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: eglfs_vsp2 (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_eglfs_x11", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: eglfs_x11 (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_elf_private_full_version", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: elf_private_full_version (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_enable_new_dtags", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: enable_new_dtags (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_errormessage", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: errormessage (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_etw", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: etw (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_evdev", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: evdev (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_f16c", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: f16c (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_filedialog", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: filedialog (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_filesystemiterator", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: filesystemiterator (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_filesystemmodel", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: filesystemmodel (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_filesystemwatcher", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: filesystemwatcher (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_fontcombobox", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: fontcombobox (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_fontconfig", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: fontconfig (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_fontdialog", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: fontdialog (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_force_asserts", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: force_asserts (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_force_debug_info", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: force_debug_info (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_forkfd_pidfd", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: forkfd_pidfd (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_formlayout", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: formlayout (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_framework", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: framework (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_freetype", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: freetype (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_fscompleter", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: fscompleter (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_futimens", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: futimens (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_future", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: future (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_gbm", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: gbm (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_gc_binaries", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: gc_binaries (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_gestures", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: gestures (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_getauxval", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: getauxval (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_getentropy", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: getentropy (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_gif", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: gif (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_glib", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: glib (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_glibc_fortify_source", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: glibc_fortify_source (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_graphicseffect", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: graphicseffect (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_graphicsframecapture", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: graphicsframecapture (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_graphicsview", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: graphicsview (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_groupbox", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: groupbox (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_gtk3", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: gtk3 (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_gui", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: gui (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_harfbuzz", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: harfbuzz (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_highdpiscaling", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: highdpiscaling (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_hijricalendar", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: hijricalendar (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_ico", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: ico (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_icu", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: icu (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_identityproxymodel", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: identityproxymodel (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_im", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: im (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_image_heuristic_mask", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: image_heuristic_mask (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_image_text", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: image_text (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_imageformat_bmp", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: imageformat_bmp (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_imageformat_jpeg", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: imageformat_jpeg (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_imageformat_png", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: imageformat_png (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_imageformat_ppm", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: imageformat_ppm (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_imageformat_xbm", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: imageformat_xbm (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_imageformat_xpm", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: imageformat_xpm (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_imageformatplugin", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: imageformatplugin (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_imageio_text_loading", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: imageio_text_loading (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_inotify", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: inotify (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_inputdialog", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: inputdialog (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_integrityfb", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: integrityfb (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_integrityhid", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: integrityhid (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_intelcet", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: intelcet (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_islamiccivilcalendar", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: islamiccivilcalendar (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_itemmodel", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: itemmodel (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_itemviews", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: itemviews (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_jalalicalendar", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: jalalicalendar (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_journald", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: journald (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_jpeg", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: jpeg (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_keysequenceedit", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: keysequenceedit (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_kms", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: kms (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_label", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: label (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_largefile", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: largefile (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_lcdnumber", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: lcdnumber (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_libcpp_hardening", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: libcpp_hardening (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_libinput", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: libinput (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_libinput_axis_api", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: libinput_axis_api (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_libinput_hires_wheel_support", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: libinput_hires_wheel_support (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_library", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: library (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_libstdcpp_assertions", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: libstdcpp_assertions (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_libudev", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: libudev (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_lineedit", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: lineedit (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_linkat", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: linkat (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_linuxfb", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: linuxfb (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_listview", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: listview (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_listwidget", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: listwidget (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_localtime_r", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: localtime_r (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_localtime_s", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: localtime_s (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_lttng", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: lttng (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_mainwindow", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: mainwindow (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_mdiarea", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: mdiarea (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_memmem", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: memmem (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_memrchr", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: memrchr (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_menu", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: menu (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_menubar", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: menubar (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_messagebox", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: messagebox (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_metal", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: metal (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_mimetype", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: mimetype (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_mimetype_database", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: mimetype_database (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_mips_dsp", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: mips_dsp (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_mips_dspr2", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: mips_dspr2 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_movie", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: movie (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_mtdev", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: mtdev (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_multiprocess", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: multiprocess (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_neon", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: neon (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_network", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: network (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_no_direct_extern_access", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: no_direct_extern_access (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_opengl", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: opengl (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_opengles2", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: opengles2 (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_opengles3", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: opengles3 (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_opengles31", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: opengles31 (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_opengles32", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: opengles32 (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_openssl", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: openssl (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_openssl_hash", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: openssl_hash (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_openssl_linked", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: openssl_linked (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_opensslv11", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: opensslv11 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_opensslv30", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: opensslv30 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_openvg", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: openvg (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_pcre2", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: pcre2 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_pdf", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: pdf (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_permissions", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: permissions (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_picture", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: picture (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_pkg_config", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: pkg_config (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_plugin_manifest", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: plugin_manifest (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_png", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: png (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_poll_exit_on_error", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: poll_exit_on_error (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_poll_poll", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: poll_poll (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_poll_pollts", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: poll_pollts (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_poll_ppoll", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: poll_ppoll (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_poll_select", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: poll_select (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_posix_fallocate", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: posix_fallocate (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_posix_sem", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: posix_sem (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_posix_shm", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: posix_shm (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_precompile_header", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: precompile_header (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_printsupport", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: printsupport (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_private_tests", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: private_tests (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_process", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: process (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_processenvironment", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: processenvironment (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_progressbar", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: progressbar (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_progressdialog", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: progressdialog (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_proxymodel", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: proxymodel (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_pushbutton", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: pushbutton (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_qqnx_imf", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: qqnx_imf (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_qqnx_pps", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: qqnx_pps (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_radiobutton", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: radiobutton (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_raster_64bit", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: raster_64bit (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_raster_fp", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: raster_fp (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_rdrnd", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: rdrnd (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_rdseed", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: rdseed (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_reduce_exports", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: reduce_exports (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_reduce_relocations", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: reduce_relocations (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_regularexpression", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: regularexpression (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_relocatable", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: relocatable (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_relro_now_linker", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: relro_now_linker (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_renameat2", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: renameat2 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_resizehandler", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: resizehandler (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_rpath", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: rpath (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_rubberband", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: rubberband (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_scrollarea", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: scrollarea (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_scrollbar", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: scrollbar (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_scroller", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: scroller (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_separate_debug_info", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: separate_debug_info (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_sessionmanager", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: sessionmanager (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_settings", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: settings (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_sha3_fast", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: sha3_fast (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_shani", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: shani (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_shared", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: shared (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_sharedmemory", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: sharedmemory (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_shortcut", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: shortcut (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_signaling_nan", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: signaling_nan (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_simulator_and_device", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: simulator_and_device (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_sizegrip", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: sizegrip (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_slider", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: slider (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_slog2", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: slog2 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_sortfilterproxymodel", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: sortfilterproxymodel (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_spinbox", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: spinbox (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_splashscreen", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: splashscreen (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_splitter", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: splitter (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_sql", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: sql (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_sse2", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: sse2 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_sse3", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: sse3 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_sse4_1", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: sse4_1 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_sse4_2", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: sse4_2 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_ssse3", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: ssse3 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_stack_clash_protection", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: stack_clash_protection (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_stack_protector", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: stack_protector (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_stackedwidget", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: stackedwidget (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_standarditemmodel", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: standarditemmodel (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_static", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: static (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_statusbar", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: statusbar (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_statustip", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: statustip (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_std_atomic64", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: std_atomic64 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_stdlib_libcpp", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: stdlib_libcpp (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_stringlistmodel", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: stringlistmodel (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_style_android", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: style_android (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_style_fusion", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: style_fusion (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_style_mac", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: style_mac (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_style_stylesheet", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: style_stylesheet (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_style_windows", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: style_windows (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_style_windows11", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: style_windows11 (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_style_windowsvista", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: style_windowsvista (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_syntaxhighlighter", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: syntaxhighlighter (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_syslog", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: syslog (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_system_doubleconversion", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: system_doubleconversion (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_system_freetype", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: system_freetype (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_system_harfbuzz", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: system_harfbuzz (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_system_jpeg", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: system_jpeg (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_system_libb2", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: system_libb2 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_system_pcre2", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: system_pcre2 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_system_png", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: system_png (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_system_textmarkdownreader", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: system_textmarkdownreader (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_system_xcb_xinput", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: system_xcb_xinput (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_system_zlib", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: system_zlib (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_systemsemaphore", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: systemsemaphore (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_systemtrayicon", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: systemtrayicon (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_sysv_sem", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: sysv_sem (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_sysv_shm", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: sysv_shm (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_tabbar", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: tabbar (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_tabletevent", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: tabletevent (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_tableview", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: tableview (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_tablewidget", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: tablewidget (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_tabwidget", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: tabwidget (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_temporaryfile", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: temporaryfile (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_testlib", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: testlib (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_textbrowser", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: textbrowser (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_textdate", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: textdate (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_textedit", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: textedit (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_texthtmlparser", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: texthtmlparser (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_textmarkdownreader", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: textmarkdownreader (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_textmarkdownwriter", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: textmarkdownwriter (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_textodfwriter", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: textodfwriter (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_thread", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: thread (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_threadsafe_cloexec", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: threadsafe_cloexec (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_timezone", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: timezone (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_timezone_locale", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: timezone_locale (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_toolbar", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: toolbar (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_toolbox", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: toolbox (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_toolbutton", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: toolbutton (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_tooltip", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: tooltip (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_translation", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: translation (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_transposeproxymodel", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: transposeproxymodel (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_treeview", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: treeview (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_treewidget", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: treewidget (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_trivial_auto_var_init_pattern", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: trivial_auto_var_init_pattern (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_tslib", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: tslib (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_tuiotouch", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: tuiotouch (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_undocommand", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: undocommand (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_undogroup", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: undogroup (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_undostack", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: undostack (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_undoview", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: undoview (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_use_bfd_linker", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: use_bfd_linker (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_use_gold_linker", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: use_gold_linker (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_use_lld_linker", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: use_lld_linker (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_use_mold_linker", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: use_mold_linker (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_vaes", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: vaes (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_validator", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: validator (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_version_tagging", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: version_tagging (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_vkgen", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: vkgen (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_vkkhrdisplay", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: vkkhrdisplay (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_vnc", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: vnc (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_vsp2", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: vsp2 (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_vulkan", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: vulkan (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_wasm_exceptions", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: wasm_exceptions (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_wasm_simd128", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: wasm_simd128 (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_wayland", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: wayland (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_whatsthis", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: whatsthis (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_wheelevent", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: wheelevent (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_widgets", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: widgets (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_widgettextcontrol", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: widgettextcontrol (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_wizard", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: wizard (from target Qt6::Widgets)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_x86intrin", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: x86intrin (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_xcb", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: xcb (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_xcb_egl_plugin", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: xcb_egl_plugin (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_xcb_glx", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: xcb_glx (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_xcb_glx_plugin", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: xcb_glx_plugin (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_xcb_native_painting", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: xcb_native_painting (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_xcb_sm", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: xcb_sm (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_xcb_xlib", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: xcb_xlib (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_xkbcommon", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: xkbcommon (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_xkbcommon_x11", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: xkbcommon_x11 (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_xlib", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: xlib (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_xml", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: xml (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_xmlstream", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: xmlstream (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_xmlstreamreader", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: xmlstreamreader (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_xmlstreamwriter", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: xmlstreamwriter (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_FEATURE_xrender", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: xrender (from target Qt6::Gui)" - } - ], - "type" : "INTERNAL", - "value" : "OFF" - }, - { - "name" : "QT_FEATURE_zstd", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Qt feature: zstd (from target Qt6::Core)" - } - ], - "type" : "INTERNAL", - "value" : "ON" - }, - { - "name" : "QT_QMAKE_EXECUTABLE", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "No help, variable specified on the command line." - } - ], - "type" : "FILEPATH", - "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/bin/qmake" - }, - { - "name" : "Qt6CoreTools_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "The directory containing a CMake configuration file for Qt6CoreTools." - } - ], - "type" : "PATH", - "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools" - }, - { - "name" : "Qt6Core_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "The directory containing a CMake configuration file for Qt6Core." - } - ], - "type" : "PATH", - "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core" - }, - { - "name" : "Qt6DBusTools_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "The directory containing a CMake configuration file for Qt6DBusTools." - } - ], - "type" : "PATH", - "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools" - }, - { - "name" : "Qt6DBus_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "The directory containing a CMake configuration file for Qt6DBus." - } - ], - "type" : "PATH", - "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus" - }, - { - "name" : "Qt6GuiTools_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "The directory containing a CMake configuration file for Qt6GuiTools." - } - ], - "type" : "PATH", - "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools" - }, - { - "name" : "Qt6Gui_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "The directory containing a CMake configuration file for Qt6Gui." - } - ], - "type" : "PATH", - "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui" - }, - { - "name" : "Qt6WidgetsTools_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "The directory containing a CMake configuration file for Qt6WidgetsTools." - } - ], - "type" : "PATH", - "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools" - }, - { - "name" : "Qt6Widgets_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "The directory containing a CMake configuration file for Qt6Widgets." - } - ], - "type" : "PATH", - "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets" - }, - { - "name" : "Qt6_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "The directory containing a CMake configuration file for Qt6." - } - ], - "type" : "PATH", - "value" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6" - }, - { - "name" : "Vulkan_GLSLANG_VALIDATOR_EXECUTABLE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "Vulkan_GLSLANG_VALIDATOR_EXECUTABLE-NOTFOUND" - }, - { - "name" : "Vulkan_GLSLC_EXECUTABLE", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a program." - } - ], - "type" : "FILEPATH", - "value" : "Vulkan_GLSLC_EXECUTABLE-NOTFOUND" - }, - { - "name" : "Vulkan_INCLUDE_DIR", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a file." - } - ], - "type" : "PATH", - "value" : "Vulkan_INCLUDE_DIR-NOTFOUND" - }, - { - "name" : "Vulkan_LIBRARY", - "properties" : - [ - { - "name" : "ADVANCED", - "value" : "1" - }, - { - "name" : "HELPSTRING", - "value" : "Path to a library." - } - ], - "type" : "FILEPATH", - "value" : "Vulkan_LIBRARY-NOTFOUND" - }, - { - "name" : "XKB_INCLUDE_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Path to a file." - } - ], - "type" : "PATH", - "value" : "XKB_INCLUDE_DIR-NOTFOUND" - }, - { - "name" : "XKB_LIBRARY", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Path to a library." - } - ], - "type" : "FILEPATH", - "value" : "XKB_LIBRARY-NOTFOUND" - }, - { - "name" : "_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "linker supports push/pop state" - } - ], - "type" : "INTERNAL", - "value" : "TRUE" - }, - { - "name" : "_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "CMAKE_INSTALL_PREFIX during last run" - } - ], - "type" : "INTERNAL", - "value" : "/usr/local" - }, - { - "name" : "__pkg_config_checked_PKG_XKB", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "" - } - ], - "type" : "INTERNAL", - "value" : "1" - }, - { - "name" : "qt6_application_BINARY_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug" - }, - { - "name" : "qt6_application_IS_TOP_LEVEL", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "ON" - }, - { - "name" : "qt6_application_SOURCE_DIR", - "properties" : - [ - { - "name" : "HELPSTRING", - "value" : "Value Computed by CMake" - } - ], - "type" : "STATIC", - "value" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6" - } - ], - "kind" : "cache", - "version" : - { - "major" : 2, - "minor" : 0 - } -} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/cmakeFiles-v1-c50b2651e07cb0d132da.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/cmakeFiles-v1-c50b2651e07cb0d132da.json deleted file mode 100644 index e5e084cd5..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/cmakeFiles-v1-c50b2651e07cb0d132da.json +++ /dev/null @@ -1,2020 +0,0 @@ -{ - "inputs" : - [ - { - "path" : "CMakeLists.txt" - }, - { - "isGenerated" : true, - "path" : "build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystem.cmake.in" - }, - { - "isGenerated" : true, - "path" : "build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeSystem.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeNinjaFindMake.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInitialize.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Initialize.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Determine-CXX.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCompilerIdDetection.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ADSP-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMCC-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMClang-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/AppleClang-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompilerInternal.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Borland-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompilerInternal.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Cray-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CrayClang-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Embarcadero-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Fujitsu-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GHS-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/HP-CXX-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IAR-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Intel-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/MSVC-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVHPC-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVIDIA-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OrangeC-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PGI-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PathScale-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SCO-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TI-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TIClang-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Tasking-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Watcom-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XL-CXX-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindBinUtils.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-FindBinUtils.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompiler.cmake.in" - }, - { - "isGenerated" : true, - "path" : "build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInformation.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeGenericSystem.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeInitializeConfigs.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/UnixPaths.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXInformation.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeLanguageInformation.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CMakeCommonCompilerMacros.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU-CXX.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCommonLanguageInclude.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCompilerCommon.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitIncludeInfo.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitLinkInfo.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseLibraryArchitecture.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCompilerCommon.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompileFeatures.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/FeatureTesting.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompiler.cmake.in" - }, - { - "isGenerated" : true, - "path" : "build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersion.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersionImpl.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigExtras.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtInstallPaths.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Targets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6VersionlessAliasTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeature.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXCompilerFlag.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckCompilerFlag.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckFlagCommonConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeatureCommon.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicAppleHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicExternalProjectHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFinalizerHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFindPackageHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicGitHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicPluginHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTargetHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTestHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicToolHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicWalkLibsHelpers.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Dependencies.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindThreads.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckLibraryExists.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckIncludeFileCXX.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersion.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersionImpl.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigExtras.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtInstallPaths.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Targets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6VersionlessAliasTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeature.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXCompilerFlag.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeatureCommon.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicAppleHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicExternalProjectHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFinalizerHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFindPackageHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicGitHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicPluginHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTargetHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTestHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicToolHelpers.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicWalkLibsHelpers.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Dependencies.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersion.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersionImpl.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersion.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersionImpl.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsDependencies.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsVersionlessTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersion.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersionImpl.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreDependencies.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapAtomic.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreMacros.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigExtras.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/GNUInstallDirs.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreVersionlessAliasTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersion.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersionImpl.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiDependencies.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapOpenGL.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindOpenGL.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/kwin/FindXKB.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPkgConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FeatureSummary.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapVulkanHeaders.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindVulkan.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersion.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersionImpl.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusDependencies.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersion.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersionImpl.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsDependencies.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsVersionlessTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusMacros.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/MacroAddFileDependencies.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusVersionlessAliasTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiPlugins.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginConfig.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiVersionlessAliasTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets-relwithdebinfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsAdditionalTargetInfo.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsMacros.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsPlugins.cmake" - }, - { - "isExternal" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsVersionlessAliasTargets.cmake" - }, - { - "isCMake" : true, - "isExternal" : true, - "path" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/GNUInstallDirs.cmake" - } - ], - "kind" : "cmakeFiles", - "paths" : - { - "build" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug", - "source" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6" - }, - "version" : - { - "major" : 1, - "minor" : 0 - } -} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/codemodel-v2-ae14064b5c5bfb65eb35.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/codemodel-v2-ae14064b5c5bfb65eb35.json deleted file mode 100644 index 329dec7ac..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/codemodel-v2-ae14064b5c5bfb65eb35.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "configurations" : - [ - { - "directories" : - [ - { - "build" : ".", - "hasInstallRule" : true, - "jsonFile" : "directory-.-Debug-1004986b89cddb862e46.json", - "minimumCMakeVersion" : - { - "string" : "3.16" - }, - "projectIndex" : 0, - "source" : ".", - "targetIndexes" : - [ - 0, - 1, - 2 - ] - } - ], - "name" : "Debug", - "projects" : - [ - { - "directoryIndexes" : - [ - 0 - ], - "name" : "qt6_application", - "targetIndexes" : - [ - 0, - 1, - 2 - ] - } - ], - "targets" : - [ - { - "directoryIndex" : 0, - "id" : "qt6_application::@6890427a1f51a3e7e1df", - "jsonFile" : "target-qt6_application-Debug-ab345562360576f6a3d2.json", - "name" : "qt6_application", - "projectIndex" : 0 - }, - { - "directoryIndex" : 0, - "id" : "qt6_application_autogen::@6890427a1f51a3e7e1df", - "jsonFile" : "target-qt6_application_autogen-Debug-5e2568b9da3822075dc1.json", - "name" : "qt6_application_autogen", - "projectIndex" : 0 - }, - { - "directoryIndex" : 0, - "id" : "qt6_application_autogen_timestamp_deps::@6890427a1f51a3e7e1df", - "jsonFile" : "target-qt6_application_autogen_timestamp_deps-Debug-813a02102d630b32837c.json", - "name" : "qt6_application_autogen_timestamp_deps", - "projectIndex" : 0 - } - ] - } - ], - "kind" : "codemodel", - "paths" : - { - "build" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug", - "source" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6" - }, - "version" : - { - "major" : 2, - "minor" : 7 - } -} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/directory-.-Debug-1004986b89cddb862e46.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/directory-.-Debug-1004986b89cddb862e46.json deleted file mode 100644 index 2dc335c95..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/directory-.-Debug-1004986b89cddb862e46.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "backtraceGraph" : - { - "commands" : - [ - "install" - ], - "files" : - [ - "CMakeLists.txt" - ], - "nodes" : - [ - { - "file" : 0 - }, - { - "command" : 0, - "file" : 0, - "line" : 62, - "parent" : 0 - } - ] - }, - "installers" : - [ - { - "backtrace" : 1, - "component" : "Unspecified", - "destination" : "bin", - "paths" : - [ - "qt6_application" - ], - "targetId" : "qt6_application::@6890427a1f51a3e7e1df", - "targetIndex" : 0, - "type" : "target" - } - ], - "paths" : - { - "build" : ".", - "source" : "." - } -} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/index-2025-02-08T20-08-26-0866.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/index-2025-02-08T20-08-26-0866.json deleted file mode 100644 index 16d89f299..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/index-2025-02-08T20-08-26-0866.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "cmake" : - { - "generator" : - { - "multiConfig" : false, - "name" : "Ninja" - }, - "paths" : - { - "cmake" : "/home/austenharrell/Qt/Tools/CMake/bin/cmake", - "cpack" : "/home/austenharrell/Qt/Tools/CMake/bin/cpack", - "ctest" : "/home/austenharrell/Qt/Tools/CMake/bin/ctest", - "root" : "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29" - }, - "version" : - { - "isDirty" : false, - "major" : 3, - "minor" : 29, - "patch" : 3, - "string" : "3.29.3", - "suffix" : "" - } - }, - "objects" : - [ - { - "jsonFile" : "codemodel-v2-ae14064b5c5bfb65eb35.json", - "kind" : "codemodel", - "version" : - { - "major" : 2, - "minor" : 7 - } - }, - { - "jsonFile" : "cache-v2-2bd5eb2af276508f9cf6.json", - "kind" : "cache", - "version" : - { - "major" : 2, - "minor" : 0 - } - }, - { - "jsonFile" : "cmakeFiles-v1-c50b2651e07cb0d132da.json", - "kind" : "cmakeFiles", - "version" : - { - "major" : 1, - "minor" : 0 - } - } - ], - "reply" : - { - "cache-v2" : - { - "jsonFile" : "cache-v2-2bd5eb2af276508f9cf6.json", - "kind" : "cache", - "version" : - { - "major" : 2, - "minor" : 0 - } - }, - "cmakeFiles-v1" : - { - "jsonFile" : "cmakeFiles-v1-c50b2651e07cb0d132da.json", - "kind" : "cmakeFiles", - "version" : - { - "major" : 1, - "minor" : 0 - } - }, - "codemodel-v2" : - { - "jsonFile" : "codemodel-v2-ae14064b5c5bfb65eb35.json", - "kind" : "codemodel", - "version" : - { - "major" : 2, - "minor" : 7 - } - } - } -} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application-Debug-ab345562360576f6a3d2.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application-Debug-ab345562360576f6a3d2.json deleted file mode 100644 index 9a7c77fc7..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application-Debug-ab345562360576f6a3d2.json +++ /dev/null @@ -1,457 +0,0 @@ -{ - "artifacts" : - [ - { - "path" : "qt6_application" - } - ], - "backtrace" : 4, - "backtraceGraph" : - { - "commands" : - [ - "add_executable", - "_qt_internal_create_executable", - "qt6_add_executable", - "qt_add_executable", - "install", - "target_link_libraries", - "set_target_properties", - "include", - "find_package", - "set_property", - "find_dependency", - "_qt_internal_find_third_party_dependencies", - "_qt_internal_find_qt_dependencies" - ], - "files" : - [ - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreMacros.cmake", - "CMakeLists.txt", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindOpenGL.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapOpenGL.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiDependencies.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfig.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake" - ], - "nodes" : - [ - { - "file" : 1 - }, - { - "command" : 3, - "file" : 1, - "line" : 23, - "parent" : 0 - }, - { - "command" : 2, - "file" : 0, - "line" : 957, - "parent" : 1 - }, - { - "command" : 1, - "file" : 0, - "line" : 644, - "parent" : 2 - }, - { - "command" : 0, - "file" : 0, - "line" : 703, - "parent" : 3 - }, - { - "command" : 4, - "file" : 1, - "line" : 62, - "parent" : 0 - }, - { - "command" : 5, - "file" : 1, - "line" : 45, - "parent" : 0 - }, - { - "command" : 8, - "file" : 1, - "line" : 13, - "parent" : 0 - }, - { - "file" : 4, - "parent" : 7 - }, - { - "command" : 8, - "file" : 4, - "line" : 181, - "parent" : 8 - }, - { - "file" : 3, - "parent" : 9 - }, - { - "command" : 7, - "file" : 3, - "line" : 55, - "parent" : 10 - }, - { - "file" : 2, - "parent" : 11 - }, - { - "command" : 6, - "file" : 2, - "line" : 61, - "parent" : 12 - }, - { - "command" : 7, - "file" : 3, - "line" : 43, - "parent" : 10 - }, - { - "file" : 11, - "parent" : 14 - }, - { - "command" : 12, - "file" : 11, - "line" : 43, - "parent" : 15 - }, - { - "command" : 10, - "file" : 8, - "line" : 143, - "parent" : 16 - }, - { - "command" : 8, - "file" : 7, - "line" : 76, - "parent" : 17 - }, - { - "file" : 10, - "parent" : 18 - }, - { - "command" : 7, - "file" : 10, - "line" : 43, - "parent" : 19 - }, - { - "file" : 9, - "parent" : 20 - }, - { - "command" : 11, - "file" : 9, - "line" : 37, - "parent" : 21 - }, - { - "command" : 10, - "file" : 8, - "line" : 36, - "parent" : 22 - }, - { - "command" : 8, - "file" : 7, - "line" : 76, - "parent" : 23 - }, - { - "file" : 6, - "parent" : 24 - }, - { - "command" : 8, - "file" : 6, - "line" : 13, - "parent" : 25 - }, - { - "file" : 5, - "parent" : 26 - }, - { - "command" : 9, - "file" : 5, - "line" : 712, - "parent" : 27 - }, - { - "command" : 6, - "file" : 5, - "line" : 710, - "parent" : 27 - }, - { - "command" : 5, - "file" : 0, - "line" : 645, - "parent" : 2 - } - ] - }, - "compileGroups" : - [ - { - "compileCommandFragments" : - [ - { - "fragment" : "-DQT_QML_DEBUG -g -std=gnu++17 -fdiagnostics-color=always" - }, - { - "backtrace" : 30, - "fragment" : "-fPIC" - } - ], - "defines" : - [ - { - "backtrace" : 30, - "define" : "QT_CORE_LIB" - }, - { - "backtrace" : 6, - "define" : "QT_GUI_LIB" - }, - { - "backtrace" : 6, - "define" : "QT_WIDGETS_LIB" - } - ], - "includes" : - [ - { - "backtrace" : 0, - "path" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/include" - }, - { - "backtrace" : 30, - "isSystem" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore" - }, - { - "backtrace" : 30, - "isSystem" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/include" - }, - { - "backtrace" : 30, - "isSystem" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/mkspecs/linux-g++" - }, - { - "backtrace" : 6, - "isSystem" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets" - }, - { - "backtrace" : 6, - "isSystem" : true, - "path" : "/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui" - } - ], - "language" : "CXX", - "languageStandard" : - { - "backtraces" : - [ - 30, - 30 - ], - "standard" : "17" - }, - "sourceIndexes" : - [ - 0, - 1, - 2 - ] - } - ], - "dependencies" : - [ - { - "id" : "qt6_application_autogen_timestamp_deps::@6890427a1f51a3e7e1df" - }, - { - "backtrace" : 0, - "id" : "qt6_application_autogen::@6890427a1f51a3e7e1df" - } - ], - "id" : "qt6_application::@6890427a1f51a3e7e1df", - "install" : - { - "destinations" : - [ - { - "backtrace" : 5, - "path" : "bin" - } - ], - "prefix" : - { - "path" : "/usr/local" - } - }, - "link" : - { - "commandFragments" : - [ - { - "fragment" : "-DQT_QML_DEBUG -g", - "role" : "flags" - }, - { - "fragment" : "", - "role" : "flags" - }, - { - "fragment" : "-Wl,-rpath,/home/austenharrell/Qt/6.8.0/gcc_64/lib:", - "role" : "libraries" - }, - { - "backtrace" : 6, - "fragment" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Widgets.so.6.8.0", - "role" : "libraries" - }, - { - "backtrace" : 13, - "fragment" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Gui.so.6.8.0", - "role" : "libraries" - }, - { - "backtrace" : 28, - "fragment" : "/usr/lib/x86_64-linux-gnu/libGLX.so", - "role" : "libraries" - }, - { - "backtrace" : 29, - "fragment" : "/usr/lib/x86_64-linux-gnu/libOpenGL.so", - "role" : "libraries" - }, - { - "backtrace" : 30, - "fragment" : "/home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Core.so.6.8.0", - "role" : "libraries" - }, - { - "fragment" : "-Wl,-rpath-link,/home/austenharrell/Qt/6.8.0/gcc_64/lib", - "role" : "libraries" - } - ], - "language" : "CXX" - }, - "name" : "qt6_application", - "nameOnDisk" : "qt6_application", - "paths" : - { - "build" : ".", - "source" : "." - }, - "sourceGroups" : - [ - { - "name" : "Source Files", - "sourceIndexes" : - [ - 0, - 1, - 2 - ] - }, - { - "name" : "Header Files", - "sourceIndexes" : - [ - 3, - 5 - ] - }, - { - "name" : "", - "sourceIndexes" : - [ - 4, - 6 - ] - }, - { - "name" : "CMake Rules", - "sourceIndexes" : - [ - 7 - ] - } - ], - "sources" : - [ - { - "backtrace" : 0, - "compileGroupIndex" : 0, - "isGenerated" : true, - "path" : "build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 4, - "compileGroupIndex" : 0, - "path" : "main.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 4, - "compileGroupIndex" : 0, - "path" : "mainwindow.cpp", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 4, - "path" : "mainwindow.h", - "sourceGroupIndex" : 1 - }, - { - "backtrace" : 4, - "path" : "mainwindow.ui", - "sourceGroupIndex" : 2 - }, - { - "backtrace" : 0, - "isGenerated" : true, - "path" : "build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/include/ui_mainwindow.h", - "sourceGroupIndex" : 1 - }, - { - "backtrace" : 0, - "isGenerated" : true, - "path" : "build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp", - "sourceGroupIndex" : 2 - }, - { - "backtrace" : 0, - "isGenerated" : true, - "path" : "build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp.rule", - "sourceGroupIndex" : 3 - } - ], - "type" : "EXECUTABLE" -} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application_autogen-Debug-5e2568b9da3822075dc1.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application_autogen-Debug-5e2568b9da3822075dc1.json deleted file mode 100644 index 8bb338b25..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application_autogen-Debug-5e2568b9da3822075dc1.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "backtrace" : 0, - "backtraceGraph" : - { - "commands" : [], - "files" : - [ - "CMakeLists.txt" - ], - "nodes" : - [ - { - "file" : 0 - } - ] - }, - "dependencies" : - [ - { - "id" : "qt6_application_autogen_timestamp_deps::@6890427a1f51a3e7e1df" - } - ], - "id" : "qt6_application_autogen::@6890427a1f51a3e7e1df", - "isGeneratorProvided" : true, - "name" : "qt6_application_autogen", - "paths" : - { - "build" : ".", - "source" : "." - }, - "sourceGroups" : - [ - { - "name" : "", - "sourceIndexes" : - [ - 0 - ] - }, - { - "name" : "CMake Rules", - "sourceIndexes" : - [ - 1, - 2 - ] - } - ], - "sources" : - [ - { - "backtrace" : 0, - "isGenerated" : true, - "path" : "build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen", - "sourceGroupIndex" : 0 - }, - { - "backtrace" : 0, - "isGenerated" : true, - "path" : "build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.rule", - "sourceGroupIndex" : 1 - }, - { - "backtrace" : 0, - "isGenerated" : true, - "path" : "build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp.rule", - "sourceGroupIndex" : 1 - } - ], - "type" : "UTILITY" -} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application_autogen_timestamp_deps-Debug-813a02102d630b32837c.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application_autogen_timestamp_deps-Debug-813a02102d630b32837c.json deleted file mode 100644 index f5869d6db..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/reply/target-qt6_application_autogen_timestamp_deps-Debug-813a02102d630b32837c.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "backtrace" : 0, - "backtraceGraph" : - { - "commands" : [], - "files" : - [ - "CMakeLists.txt" - ], - "nodes" : - [ - { - "file" : 0 - } - ] - }, - "id" : "qt6_application_autogen_timestamp_deps::@6890427a1f51a3e7e1df", - "isGeneratorProvided" : true, - "name" : "qt6_application_autogen_timestamp_deps", - "paths" : - { - "build" : ".", - "source" : "." - }, - "sources" : [], - "type" : "UTILITY" -} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.ninja_deps b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.ninja_deps deleted file mode 100644 index c3b59a07b259be2f6f49ee3060a4c63d652257aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1932228 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%0DB% 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

c1VH+|?!Kl(F(fed0WLm0|1 zhBJatyNx8&aibZ-SjI7)2~1=XlbOO)rZJtjnZZnEF`GHeWghccz(N+Wm?bP_8OvG0 zN>;I&HLT?w-sL^kv7Yz&fDLS96Cd&sAM**HvY9P>#^-#&mwd(7Y~>ri|__a*~4D;v7ZARkBRQ|~ z8n2Url%ygxX-G>t(vyLVWFj+f@FrQvN;a~SgPi0dH+jfQKJrt5f)t`KMJP%!ic^A; zl%h0cC`&oYQ-O+9qB2#eN;RregPPQ$Hg%{=J?hhdhBTrvO=wCpn$v=ow4ya_XiGcV z(}9k3qBC9SN;kUGgP!!FH+|?!Kl(F(fed0WLm0|1hBJb<7|AF`GlsE@V>}a>$Rs8+ zg{e$qI&U+BnapA~bC}CK=Cgo>EMhTBSjsY%vx1eZVl``6%R9Wwd#qzU@ACm0*vKY6 z>p;SzhW7ySwKd@?>6iW4*P(^?=Sow!@nmSm#`l=9Otk%IP4J)dxsyVjjx4$ z!C@>^qYBvxW3??$_+I#3hu>E?uHnBs9P9Akn(#Y$!t1cVxQBm3OJ1Ngt!PUdo~JC$ zc+#J3=VJ>x^AMfrMR$7g5`+BQratB-HSxaunB^BRCW^6uM1=kDVXnhr3+z;iUDAOomR9y+m+u+Kis4Ph<`b4{3k z!aP)%m*_#*ryus~uk||2rD2W>^Guj0HxTBs9fbKN%t2x93-eK!7sH&An4Vr2;u%Kq z7BS0@S$?<{#Vp^o#X0id`i%Wew-lebEoS*K%Xc}5_vKrYIu1M8#cuYnmwoK#00%k5 zVUBQ=V;tuMCppDw&Ty7)Rd41NZsj&^=ML`VF7D)ha<==CLJ`Eh+8v-~lJ)Oh0hKCbWMUR^y~^-kQY>-z3E z%w`UAna6wtml0`U;`W3#D{#u$9%%4Y-S6e z@i|}cC13G1Tlt1>`Ht`TfgkyaZT!qH{K{`^=Xd_#Pj>JZJK4o<_OO?I?B@UnImBU( zaFk;l=L9D?#c9rPmUEov0vEZ&Wv+0QYh33BH@U{&%q`r?ZQRZs+{sl%p*L?V?53iJjqi$%`-g9b3D%ryvR!=A~8uw%FDb$GLrKuukku5NJ%PElZLdU zBRv_&NG3A#25*vutYjlQImk&aa+8O=lyti;;|CG-DXcIL0%9iA-WLQ<%y$rt>y4n8_?= zGl#j%V?GO5$RZZAgrzKFIV)JnDps?GwY|!^2*vmflbAW>!;xI=z z$}x^}f|H!$G-o)=InHx|i(KL|SGdYGu5*KbVtt>GG?*c#ga2=kF=a zvlO5hVg5=)%<^NF|CBLOk0i!*10QRVo%`rRBWhEJy5!^yh8sVX8BI2yKS_P=r6Cn4 zNOH1}hWuou0EuW$MZ&eb0&g&c8dRhb#eM%VT6jH%j^y+CJq%$op?0s%bf!>_G7M)H zvq|c|?`2l{|A*^kxPGo?E8&_Gu0=7+|L@N78_gLoc7M$BW0r3|h`qkp>x;d<*z232 z-!zlh>x;d|Y(vX&Pq$dLz$wX$tn)Xeykdt|6{iFxDMhI7%21YalqamG6V}jSonD2iRHHg!ja`#k z)TRz~sYiVp(2zznrU^}HMsvb?yd|w@O&i+Mj`nmQtkpZwnJ#pt8{O$aPkPatKJ=v@ z{TaYO1~HgW7Yt<>!x_O_jARs{4jIE(#xb4=Ok@(1nZi^;9X_46nZZnEF`GHeWghcc zz(N+Wm?bP_8OvG0N>;I&HLT?w-sL^kv7Yz&fDLS96Cd&sAM**HvY9P>#^-#&mwd(7 zY~>ri|__a*~4D;v7ZAR!nJ#pt8{O$aPkPatKJ=v@{TaYO1~Hf+3}qO@8NpkOWE7(r!&t^K zo(W835|f$2RHiYVx0%6AW-*&N%w-<)S-?UTv6v++Wf{v^!Ae%Knl-HD9p2?V*0G-V z`G5^9OMv(Il@tnahwyJ1mm zE4OhwcW@_naX0sHFZXdj5AYxl@i33@D39?tPw*s9@ifoyEYI;gFYqESk%+`3At^8O z3du;$tGveRq#z}!NKG2jl8*FbAS0Q`%p1H(7P69!?BpOPxyVf(@{*7I6rdo5C`=KG zQjFr1pd_UzO&Q8kj`CEXB9*926{=E=>eQenwWv)U>QayTG@v1kXiO8D(v0S`pe3zn zO&i+Mj`nn*Bc13>7rN4o?)0E1z35FJ`qGd73}7IG7|alcGK}Gj;4MZniqVW=EaMo@ z1ST?x$xLA?)0ocN%wQ(7n9UsKGLQKzU?GcG%o3KejODCgC97D?8rJd-@A4k&SkL=> zzy>z5i4XaRkNJd8*~}I`<8!{?OTOZ3w(|rna*v|nDa)`qm;V8#A&IwL(iqo9oEay1S1uk-l%Ut0q*SO9N{)zQ{LY9C1 z`o#mGfB%r58;jy~806G{q z;d)e?x`b;?R>J%Kwem5{`(ci5Mz}^~=1s=)3b}ZVq)eb5;hNWuaD51KZ2ETxY`dAY5O<_2O|JBh1Iic$qAO>s)y6!LdHp;YmhvhkyHBJVDIzW0qgh7%56I z{+sX1e|hI~)sM$4KW6#ny_n_4Uf+v)4KI<1#3UgpFY^k?NY1Og#_OaYC8fHtY9UpSj`&N@(%Cv9_v`o`+UF#HnNEi`G}ACgiqPb7Cz&1 zzTiu~;%m0@4d3z|-}3`M@)O(mnP2#o-`LLY{K22>;4gNvi{0#DFZAI?r62tnz(58um>~>h7{eLCTa08BqZz|k#xb4= zOk@(1nZi`2F`c)W!Axc`n>oy79`jkiLKd-@B`jqb%UQunR%@iV{hE5EUw-}!?-*}-4z zWEZ>H!(R5Wp937^5QjO!QI2t(6P)A}r#Zt}&T*a#T;vj$xx!Vhah)6d6TQBKEI+RA z%?l1`crIeN4YdKIctjj$iS1~sWgZR${$u-`xI z)ermq!(RQc$3OH+!o4Qp`Jc^bP77Mniq^EDE$s;Rq;#Moo#;##!aXY8=uQuM(u+Ry zr61uQme6wvz-t?g_{pimC1~Q1j3}Gn47|saZVkDy&%^1cqj`2)jB9oZR6s9tb z>AcMhW-^P}%waC`n9l+hvWUejVJXX4&I(qtiq))PE${Fy@3D^cyw3-0U?ZFOkdOG7 zPxzG0Y~eFL=L^2%E52qc-|#Kp@jXBABR{c?pZSGf`Hk)T&L8~A4*p^%yV%Vh_Og%t z9N-{_ILr}_a*X4g;3TIw%^A*ej`LjLBA2+#6|QoP>)hZb*Z7;cg=Xrq_d5J_MCJ9M-nO8_ga$e;%UMB@9 zNkwYXkd}0$Cj%MDL}uRLO|p=cY-A?~ImtzC@{pH&YE-8NHK|2y>QI+@)TaRrX+&e1(3EC0rv)u(MQhs7mUgtK10Cr^ zXS&dpZgi&yJ?TYn`p}nt^k)DA8N^_QFqB~oX9RCCl2MFi3}YF`cqTBBNla!6Q<=te z-ev|fnZ<18Fqe7EX8{XY#A24Plw~Yu1uI#_YSyrpcX*fgSjT$a=L0sdkxhKaM|{jD ze9C6F@EM=;1z++NU$d2O_?GYZo*(#;pV-FF{KBvN#&&+^5B_8af3cHY>}C&p*~fkk zaF9bB<_JeQ#&J$?l2e@K3}-pVc`k5~OI+p(SGmS@Ztzd6?-R28r|W&VGW72s@^izn zf0&r%o0A;our7Yu@kmS(Ui5h~QjwOhz7FS9S5lFN)VxkO57HCPy&R+<9i=EwIg-A*_aBhTi^%21sKggPzM zlIa-g^QyeSb2OwN1E^0PIoY-Sakc$~)w z^Kmj>CJPgZS-xwyu^8{mwArN zv70^YWgq)Fz(Edim?IqJ7{@umNltN^Go0ld=efW|E^(PFT;&?qxxr29{hPUkTe*$f zxq~~oi@Ujpd%2JMd4LCbh=+NEM|q6Ld4eZ-il=#oXL*k2d4U&si9{qO2}yaGS4c*3 zUgb4jCj}`hL}7|hlwuU8 z1SKg&Y06NRa+Ie66{$pJs!)|`RHp_tsYPw-P?vhtrvVLVL}QxJlx8%i1ubbsYueD3 zcC@Dh9qB}8y3mzwbf*VB=|yk)(3gJnX8;2k#9)Rnlwk~K1aC2tQH*8`V;RSICNPmn zOlAsGnZ|V9W(G5v#cbvfXzwn=t*X|B0b9oo zY-|MuL{cQAltw{98bP|dI|K!lP(U#dBot6-kQOiq#XtpYIt)|Kon8_==%4^JGHglNEJm#~2 zg)HKA7PEwm%TMur>gA{SzLEHSnGn&(amb9WZZD>n7+S7rK zbfPm|=t?)b(}SM$qBni$OF#NEfPoBRFb^?=p*+kZ3}ZNt@)(aZf{~13G*9p(V;IXg zp5kf7^9;}O9M3a>7nsN-USu*;n94L>;$@~YgPFX-tGvc6W;2Jm%ws+aSjZw?XE94y z$}*O-f|b0%Dps?GH+hS4~L?$lg5-#O3F6RoaBr{iWHP>)0*Ks{Ja3eR7 zg{<7nEo37*Ik=Ua+(s^PlZU+IBR{uOfIBEiAqrE3J1I&ric^A;+{N9LqBLbFOF7C@ zfr{M2y;Pzy_fdtaRHHigQ-hk+qBeD?OFioI01ar!gEXQsO=wCpn$v=ow4ya_XiGcV z(}9k3qBC9SN;kUGgP!!FH+|?!Kl(F(fed0W4>5$HJj^2uV>plU7>_f8k&I$APw*sT z7|S@G;%Ub74A1f$&ohA+n8+kvWHM8j$~0c$Wu`NOnY_ZQyv8hMGl#j%V?GO5$Rb{6 zF-us=GM2M~mAt_!RMH*8}&JJ`uCcC&}Q>|;OQ@*Usv0|)q#pZJ-B{K6p)^D9R<%5NOwIKOj(Klqcs z_?v$szR&38?WU&hOOAKY8uD!?7sHU9=`QF~>Ec zF;!{Hee~cu?x!IwNxgj2m;PvH$0Fwan4{Yh*NDR0NnD4raW^@+nP+HDT=TjU*N2#U zV-AjaHRjuxzdI1unYbRr^<_1ea~UxoXXh4*64$xZ%XbZTNlCr@)XSf6%aVe%uFIM^ z?n`kNac_$F9FlW6kN8}P3%HPr$i&55!lhiskgn%2R<@ z^L7uh?yWNSk!pSBU&rAYo@W9tFp)`2W(re@d1E>=n8_>5A|rmB>-jw9vw(#x;&m3Y zgrzKFIV)Jn8?0hAYj~5lc$;@v%R1Jxfp>Y2jl9nXe8@*^;$uGHQ#P}Ot$fDke8HD| z#n*hpHny{ao$O*ash6L6`7KUOwZ2sAOSQg;rE_pA5vSiqE+Qw&LtgTcpW7)wM*dXD z^N9D05HWwmQI+@)aL;j5V_ieWaM;BJa0-fA_r+f-X-DKTk%M%k6Ore1p)1{p+$HkD zp7f$OedtR+`ZIum3}P@3F@&K!%p(kAIFIrek28XijAArT@FZgx%Q&9mX~q*dRpda= z@jMfFfr(7wMJ6+asZ8S~US>Kon8_==%4^JGHglNEJm#~2g)HKA7PEw`SVq#c{$BjdLG<;3|Ne=Bmm2Gpkn zk&DK8e}(TwE*JS&#OSy#T7YyerKbM89+~Di%M2{gq{Tc1`7^8W}M_z6t z^4tQ9q$IhxoodvgCOL?49=UO5@>7Ld8A^=t8k8mGf-;mN=9WT4{v2~dDGGQmg(yw* zD55_Rb4=Qof3klNJ%;GhMDONmuH_sac8scX4dtoKOm5;-=TgkI#fka%2JWCBchQ>M zyhbA$Q$snWw4|56S(V!v;p+#uo@;4E1%}ar(!{l36=`37>g5-49z4#2 z)S)iXf4q!{EyfY?L-Z`8|N1!5kBi*BA(M#STutt06jPZ->gA_i{+_(E>b;VB`Dx#d z`5^W3Q!hW&`ckcLvYOTurZSC}c$w78Pqn`6V$H~5BVWx)~6GvVf zxo_md8TnJ>uZ4-2_D+gYjL5Z05IJ+?Sa%coZRA3c|3)qxIdJ4^ktd-eE24SkDIDk!~Dt-j`ADFIL_~!;1B-fFaGAA?B%EU{$vd(>Mzx(PUOK+JB*yT7PYBEUFuPv z2WUX#&=1mx#x$WR&1g;wTGEQvw4p6gXN=lp2cj++bFJT4U5NqYfH1%)ty{C=c@p!-$$?3LK#rG+`Pw~C$ zyL@IByV=8DQZN7HzPB7=kXy;gZR8?1dB{sX@^d={xPyWeqA*3clcE%(I3*~_UEED6 zN>hfil%qTqsK`CsOC>6EA62MIHL7zzHK<7~YEy^0)T2HR(13o@PAH@GQ^qJQH|@}CNqVpOyeb9W;!#N$t%3dYs_LcbC}CK z=Cgo>EaG(*vxKEAV>v5W$s4RbLoZo3*e(L34Wj=`f z^l~Eay@1GvGv?@vJim}EL|)m`c@x*8CNv|iF~vyx@=w+bDmX?tC`vxcQH=83MCATa zSBPtQZHf@r^arU!UGDS!)XNudIu5syn|ry1r+ALLd79#U#j(`T3@R5rCQ%j;>;{$ol3a*>-n+=8&Xh_7^jc82dFHMOYra3KWNh?~@hPJe$Jss#sCpy!Gu5_b2J&4?> z7rp62U;5FX0SsgigL#M{4CP@SVHlBHJxb&Ukr#|$B%>J36FkWn#xjnlh&*gO&+shI z@jMfFfr(7wMJ6+asZ8S~US>Kon8_==%4^JGHglNEJm#~2g)HKA7PEw6`D zdiklBZ+sh8+t|(ycCw4z>|rna*w43o$M^ie0e<8se&!&*aEQbF$`Ow88^<`#@0{Qd z{^T$I<`jLyQ#p;(IfMUjCTDRr=Ws6PaXuGtAs3N}i@AhLxs1!Xf-A|)Rb0(AT+4N& zefh5MjzeRb(3EDRefepvZtCTy_`apss}-$jLtEO>o(^=R6P@WoSGv)i9`vLaz3D?= z`q7^O3}g@~zEAOe>>2(i_T`VL-C%mu?=v~CBDcDj*+Pue%Rjls^(x0B3t73ramh{| z@)K)iM|(ZSXdd#Bm)n>@0Y*}iT-;7IYEhFM#5j-KI5YXF!mSJ?a`+mQCFX)Mlq2Sr zLPY)?b3-W#crS%0O+_jZb4=QopZ4WP9VF@_QLBg=Mbr}x@+nbo_>ia>WFf9E6}g%* zJV9mOZba(ki~Svk5}eNvTGNE4G~+IcFv@YO$5@K{`bt`G9<8WN1yV0x{m^lUJp{3L zAQw?@h&=>z8O;dhk<0m+o6=+>J2!hh8>yG?I^=jXqA{&$Llc_PpSskeJ`Yfe0z|FP zAv|Sg=CcNEO}+fo%XcoMUVf_erCz?dRDCbi`qIAqv~MT%@|%g}o6~|+>r1`-e_Jm< z#rLU~pL+SJm!Eq1*6NAtQ!n3IJ;z}RQ<+A(?^fEEe~b7w8`+5-RrI5B5`C@cW926L zUD4}`o>%m(qPG?Ot~)45^rs3_ggYrpF^W@y=!xCM-9-PYG|}IRURU(E%2R>pMcl)^ zRH8EX5q+|%L_e)M_Y=Lc=&MD4tu}S2OVr`(^8gKK$b&SZF->Snitp1}-965Oz3k)P z65nU+%b&gG&uvk^&*Z(QUVggAe$1E4Il&+NK%C!cUw+z`pL+SO{rX&~mv1kQ<1m>i z#C-?bnIq2fSdyXSq$gSF}-Mf56nsS06rIEXhNTM@x^bXigc* zQjYT6#octJ8-3`@gZ%&Y^7G!YxZ9Vhm!Eq1&cW2nPrdxq%TK-hRO_?GO^q}4@>4HA z)%sGc@84MK%h;En;``LgPrdxq%TK-h)XSeFrhSnV->3NgCiU4YWaVa3FF&o-o$frC z!AxEu_6@(rEM_x@xy)le3s}e^US~1UPhQG0qNlimmBhZ%Rjg(WZxZ`W-{u|GvX1p^ z;9cHhBk%J8vH$cVHt{i^5PMTMvxTjE#^-#&mwd(7d_(MM-OdhnvWwmP8{_+oUVe`Q z^EXBPKK1h5lRypoQZC^RhI5sF-;8-K?aM!TPq`zG$x&iVXNUT#Tm}e=&YD#@MBv$C!(CR}*=O=Xjn8yuc)0WHM8j$~3C^_i0NHGCo)A5znVH zgZV6A5wobmJzUMToWsL@Pps>@hVsO^ub97XBJO=L*kf@9a040Z&hGNOHMxm7t`Uu? zN?Y!u2iI{w4QWX)f3qsLGs4#oa6Q-3iV6&)1*Pdt%zGDlFTZ&_K&%^z`DX{QX6;4> za+aStlZ?4E=D1&Yi#Le5Y#YCFkeK^^Cg#Oc{C8gh%p6PI$%@t&(IawW_mL40E zdiklB-_!Zfi{5mm3k|rPeB>uDZD~gyDo~MoxR?8APY3=d^zsi(tF~r)>gA_izBw-S z@>4HA_3~3MKh^qDtuJz+j2!r8&r_{0)%vD84^pk~-*u1u6yK*_e(L3?UViH3r(S;Q z<;(A_W!OPltDEBcrsCOVG$(p5(W{AmO!Ro#5IvoCw5J0d=|pF`(3NgXgH7Z7>^VEqLGYZG*9p(V;IXgp5kf7^9;}O z|Mt@+dTkOfGMOn%C3Eg54uG97=o%qa&xTiyW)Y2jl9nXe8@*^;$uGHQ#P}Ot$fDke8HD|#n*hpHny{ao$O*a zd)Ui9_VX>@@jX9qfFJpZpE<}c9O5v)a)hJ ibJ16*qKlzKlIpx&!d77mhgVL0t zEafOq1uAk6_fm<<+(#9vQjO}|PYr5Pi`vwoF7>F-12mu^=^mVE-%hIaxkjIMa$R#4 zk6F2yTgXOsa&Rj-xs6=J`sO_3B_H{@odRU6g)ZcIVTy1kMJYzCn=U~~V!ia;l%h0c zC`&oYQ-O-adggnnL}g+fbrq^ojq1dD>KfFf7PYBEUFuPv2WUV;9wcLZb`#H=(v0S` zpe3zHwZ61(=R4=Y_e8Da06+2*KXZ^@IK*LoqW%!|i@roHBkCA!h+4?2^e1W^1-zF+l%^t;=;HOvj>lD8&3a$2;~LMe z z8BuS^&Mg$>S)wlTl*guA$&;Mvy`Rk$WTrW3U;fG7W%T$a5`DYLOyNP=Ic{fpEXh!E z(vz%o^1TN2TW zX96)kW6V!tGBM_-GL7lXAmYTB6K0VSKgRftaXX&{EMyU{vzR3;Wf{v^!Ajm>6{}gp zo4m!_yu(`7v7QaQOX}r|!%tPq=K?O|A~JC?mvAYUaXD9TC7HR3tGR}2NwvOI>r1u1 zRO?H%K5O#Cu93e)eh@iKKlSn>_l(>!Y9$BwpW4e$@qOy$M{Yfy6yK+{ zy6L`KuJ7`lCN!lP&1pePTG5&|w51*G=|D$1(U~rEr5oMpK~H+on?CfVAN?7?Kn5|G zhZw?89_A5-F`P$vjK>+lNJcT5CwP)EjAa~8@igOkhG%(>=b69@OeDqkDZWqfeTwfV zi&v*Gm1(@h%S>kmGkJwqd5!4P%qDs)(F2~xe4^K~km%{W&SIjU9R1zs)kIG*qfhjP z=c|a`%o^V0E#BrG*0PTEY~WqqV|3TA$mcd@i|}cC0`N!<>*;& zV>>(8$u6Rww1>UyV?W>WKRv$BxX1pxD_1v<`h6zvIgb6sWYl7#_8K+Xg2caV>gA_i zew^D!I2z{(8RIX;<8fkLc#NyaXJb4Z<`6OFVm!t8i}9N=#xC_d#@xM3B<7Omc%BKo zz$9Me|DAWLIWODNgTD0R5i@sk_iw(({)fkoy;3Fh@>4J0cuuvx zRO?H%zEta*tnN33sZ8S~US>Kon8_==%4^JGHglNEJm#~2g)HKA7PEwQ6M6BMMKJ=v@{TaYO1~Hh27{X8<<`IT5oJV<##~Hy$ zMlqTvc#<)UWgJiOG~;=OXL*k2nZOH7WD+kjnJG+V8ZYrO)0x3cUg1?HY~+1D;6pxQ6Cd*lpR$=P zY~?dP=L^2%E57C%wy~WZ>|__a*~4D;v7c}Gj_>(_1N_KO{LDdq;Sh)Ul_MPGH;!?f z-#Nh_{K;SZ%_(wzh8{65zPIj@IJ?v#4`}vmd_?{m) zz>oaI&m80z4sn=YIl@tX;~2;JofG`QpZvw&oZ=dPDyMNeXYe1+z0Xi77h(}I??qBU)3OFP=rfsS;dGhOIPH@ee< zp7f$OedtR+`ZIum3}P@3F@&K!%p(kAIFIrek28XijAArT@FZgx%Q&9mX~y#m&+;74 zGl3VF$Ru85GEma~GDyum6~ zvxYZ$i??})wX9=38+e!Z*vR{Qz=wRqCO+m9K4mjo*ve;o&KG>iSA5MkY-2k+*vT$- zvxmLxV?W>W9pCc<2l$bn_?d(J!XXaxD@QoWZye(|zjJ~=_>;f*n|~s{&*{{6~B zQNPdR_r|fmnA!fs98xd;WSt|6W0I8{9Fy$iAwT_zG1ZSe;iB%`oywo7pztkeu;KcfxxUWR4ZK=-#G@v1|uB8!;X+l$) z(VSSz6LUx_VhvCmVl7%b+S7rKbfPm|=t?)b6KmFb(u>~op)dW2SY!YL8N^_QFqDUR zgkcOP*7%HIB(a`nG-DXcIL4ED`Ki{IYJJABT2~XA(v0S`pe3znO&i+Mj`nn*Bc13> z7rN4o?)0E1z35FJ`qGd73}7IG7|cTqVJHvt2*Vi8qddmrj9?_A7|jzr$r#2mj;DB< z@jSz`Jje4)-~}c!i5E$=KDoZ*kb3#4*4Iof)SMQyq!q1+e7r5~Xio<^(uvMQ9^RF1 zbf*VB=|yj%1`zpu)Da?|AHYB&7fZFiRO|bvdig27PrdvU-=|)F>gCJR#dM8G@qOy$ zr}#dt)om))PVs%}<^P*|`6afUy+7*rnVie1m!IyjU&(o}oQyRju@)uH?{ts-bdUY3 z^mwBGbUD%2x`60+t#E#<nh@8?rzuA4FNhk~B4WK&)W2p?m^&Fy zHtr@TH}ecpM;k)a!o!Uy&(dMw01+3+$?srG5F% zW#{Gp=6md~J7;aC@u`=e_T`%oQZGOC@>4HA)%sE|KlSo&5+`RND-nxF{2cLl#L}@I zJ=UH_oE~e~W6gSQ@(}CV^AT&*V;y^}ZNGzp6e8mNB1Fs|@p$A0#VJ9of4_^!0b;Fs zY06NRa+Ie6vF`XD?j>^9%G^g4s#1;W+)u2FuSqRxQ-`|LqdpJNfQCFsBN`L=OH(3; zi5#Q_sh6Mj?d*3Rd`sk>ky}QsPwc6TeV?~8!q-thx}IxkMbxK;5%r>|U-f1c7s|yW_m5gZ%r!gN zLDaEsWFTkxnKOCa^Tm8j)Dhm|4ZdO2^O;X_XG-=%%|C+}Hvro(YISCE<5 zQ=9hXr+e&IHb%PBgP#1i?aM#C<@J5Hr(S;Q<(uzPFF*D2Q!hXD@>4HA)%tFdA7tdf zH+y~y*~m`n<)?l5uQ(50Ls?l??l3UOcYcIJq)JeFiAIf?s$XQh+xW!#6njIZOqZ*Um))H9ryXp zMbsPOe&2J6`+vv%z~_l9)>@@|?7Q!_<1m33pA(tHWMa%uWg63&!AxRKm_^1~&=|il zZs)Urg)HKA7PEwfBEaYEp~Z)S)i* zsLum5pdslVoar9>Y2Qw&^))^%?aQCy7^GU?zrUBC;``LgkKB4Z&yeE#6yM({*1d@= zWaVaVAsgAr!L8)vHgb`hJme)G`MI3}+(AJKQJ5m!Nl}VXoD!7eF7779_vtgV-f|wi z%{#1R9qZY^yS&Fn-sb~8)QNK^U{M5_8Nk6NSaUE;qPZ0NeOTGM)_kA4TSj0NEJ1EFqv?e#N z(TKP%RHZFxUw*pBem&>GSc=P=ucQU%(TdtsAO}UsM>&d7o}1`E9Uk*L;+~*Ic$^2R zLtXCk{mba+`8aw}*4O9qIFYYM?%t5-#Z90l_cMyAL{Bc=V?XustKR;^q!y`{pZ4XO z4^pi!_43oc{IoBBvYOWvrZSC}c$w+UU?#8dDz7n%+00=s^O(;97P5%fS&3K;SS)Sv0 zCh!6inZ%1sCe`}>JND(L_&)XWQ!hWQ)xAzUbv-G*Pw{<<@6&y^ZW7~VAuBg?3)#p{ z4sInUw~>q7QayTJU{~)@*s_9OcPRkpZ4YNb{_0uFZk!~Dt-j`ADFIL_~!;1B-fFaG8fJ=aq?jri>8GlT?=$(mOSqWX{=^&>68o(RGTrO(_u_ZY^L#Gxe!e08 z#zv3v_u}uy`?;L1UW>o=ipLm3F`i-^M=sipD|~OM#|>;J{(pZ>{D0ld7Oo)P^FZ&R z6W7y)&UB+I*HMG^Tech|*M~5?#EW+3~oFt6A^sbzI~5wOq&b+`x^b zUjE5z#Z1TOCSr^Y_E?+&+`t_an$esVw4@cSX+vAu(Vh-;q!XR#LRY%cogVb07rp62U;5FX0SsgigL#M{ z4CP@SVHm@Cl*f3S5sYLMqj`cS8N*n{@f1%po@aQL=Xjn8yud^z@gkE+y?k+|}4PO`Ihhao*y{CkNm{X9OM@cahP8@!cl(X7{~dY6a2xS{Kem#A|5@J(>R?o_z!1t z7H4w~=W-tBa{(7}5t)db{t_-F;^2sfBd?BlH}cNNaj)hYA`gk2C32F;cWxwdp)6$O zW+HyhM#R#Q!$!WElgN7`&yAcY50MK;P8@k{rHb6cy;Pzyk$Y7ka~op)dXD&j1E8 zh`~I>5Qg$Fk1&kkJj!D{&Im>_iqSm5lZ;_3<9Ldv8P793%X2)>1YTewlX#KIOkpb1 zc!`&p&J1Sq3a|1SvzW~s<}#1@EMOsvc%8*8VJXX4&I(rY2CG=j8s6kB-sTU+^Vg@ipJDjqU7UC%f3q9`>@2{d~)Je9sRY z;75MqXAbfUhd9iy9N{Rxag5{q&I$hDPyXU>{)t*&#y$2^e4l#xe4l#xH;FT{kd>Rcg=}Oe2e*=w+sH+3@{pH&Cq*enaY|5< zySSTDl%@=2DMxuKP?3AMmr7LTKB`caYEY(34*DrVoATM}Gz|kU3Z}B$ou$FbKX9Mr@9vgX|5BQLe*u=+t z!l!Iz3tRb&&-sEc`HHXkhHY$T2RqrtZuYR3eeCC3zT7=XXx<2Y>PxfAdeo_ZhwX&czn|r*rD%r(S;Q<^SL7M`hzH=C7Mbz5J8ci^`^) zMqEW3E~ge3P@Rl9`XbLSBn!jn=@`cKs0q!8YfLd>{ZVI+G4ID5-JV$#=1#_wjl0Ro z%{)VM;+of;xIV<(8*^~Xt1;ik{M~`L&cyW~t}k)DxSY#~`8YebP?WgNrCz>kxPPm( zFW{P!_Th zv3SJK5uZmaor7D6IQ=$qk()f^B_H{@odVoJK?)J^ei0((k9a(CgW{B+BzF-xKq*R7 zhO(5SJQb+OJ={wrB7eJ&DpaK!)w!P<)T9=*sY6}rQJ)8BKtmp+5siubr74laL=Mt| zmb9WZZD>n7BA1CAq$8b(Jf{m?=|GKffty_Bwl1PQ<%y$UgBk@GlQAD!mGT- zEM_x@xy)le3s}e^US}~&SjsY%vx1ep!75g>hBtYOw|R%PtYbYJc$fFs$oqW2hkV2) zKIRiXWiwmY%4dAe7ktTAe9bp(V>>(8$u4%YhrR4$Ki~2l-}3_p_>rIZnS=boArA8^ zM>xuF9OF2@bAmtklfU?zf1=ix(aTTqed^_>UcT{dSZ!lFJJ`uCc9T9s%k|wF!fa$G z2e*=w+sH+3@{pH&Cq*enaY|5+=(3Wc0URBzcf3g-7^@*EEz5LY6 zPy6yu)|8^wR8OuOJ-&&=XJb!h3J(%-&RHHyGL)S3Br6f~Jm9ebWvEYG3iB{8Fp@Fk zBI*renagNKFppg3sN9q$8`-(p>)E)K+sMtm+`>~l$K5GbfGKV z=uQuM(u>~op)dXD&j1E8h`~I>5Qg$Fk1&kkJj!D{&Im>_iqSm5lZ;_3<9Ldv8P793 z%X2)>1YTewlX#KIOkpai)~D9*IP7H~`}vmd_?{m)z>oaI&m80z4sn=YIl@tX;~2;J zofG`QpZvw&oFaBQmD4z#Gx!f@au#QE4(DI4f|A_D z-ISsn9n$)5;b*M`{>hk~%Xvl*!qA^WqN~-mx zUj82E!Cv;UpKtk&@A-iP{K!xI%t3zP5Qq7dBOK*7j&YpGuTJm>fASZ9^H28jQ+%I# z`KgzmdimFhE3PNS_oXhm%*kb|P+qa4L3&rNio z4v+aAQF|=H<3yb?qYinW?_WkouZ^P@Wqo}vkMlfnPrZgrVgfa}pHWO@8fjmC>gDJC zPnHJf6wR9XOy@(a%ZSgJIEOfw;=GM>{sQ9O8*vYg`23pqT$=bynoEiEFz(rL1#!N| zI+(bZ$JNAV*j&qXTu*#n&5gu)o`tMrC&oigVogVUmQ7w_Y{X~U#OIO};0_8>h{D8p zi!l^qC&pTg&sb9uW3d#aDMO5l7-KQMV(eAq9x4%YT#ThERHYhm&yg4>HHa}2_acdL z8)GuoqQu&k`aD1bVvIdVBO23$rZl5DG5%u?X+>+=(3Wd-eE24SkDIDk z!~Dt-j`ADFIL_~!;1B-fFaG9~Q~i(AIGr>24`*@~XLAncavtY%0T*%+nYfrsxRlGd zoGZAJ%v{CQT*I}bTAy+3I5eU$O=wCpn$v=ov?BHL)4rY5%TK-hwx^|iJE_+9Kf9No z;`!?iE}-k!x>yoSFdIA80$J>y?cF1@Ce> zsCy4)08!_@kw^XBsG*l4FV}D}mvRYrFr2IWTo$r&gRirbhy3(swAcHQhkWGaHeyXn z0Y*}iT-;7IVqZW_a?ppD$xME#a4SQ3h#HioFJ&l48wwF?W%^T!0^Um@N>h?oYc!t`||%=@3H@X0Cnoz Ay#N3J diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.ninja_log b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.ninja_log deleted file mode 100644 index 6c27d24fa..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.ninja_log +++ /dev/null @@ -1,39 +0,0 @@ -# ninja log v5 -0 12 1739296574212658195 qt6_application_autogen/timestamp f67a6ba95572aac6 -0 12 1739296574212658195 qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 -0 12 1739296574212658195 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp f67a6ba95572aac6 -0 12 1739296574212658195 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 -150 1006 1739046735953228762 CMakeFiles/qt6_application.dir/main.cpp.o 664753324bd99800 -149 980 1739046735933228752 CMakeFiles/qt6_application.dir/qt6_application_autogen/mocs_compilation.cpp.o dd363273d0b9b662 -12 1220 1739296575442659537 CMakeFiles/qt6_application.dir/mainwindow.cpp.o a6a655d1b446dedd -1220 1537 1739296575752659874 qt6_application 38d90bfe05cc3381 -0 14 1739296989689808262 qt6_application_autogen/timestamp f67a6ba95572aac6 -0 14 1739296989689808262 qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 -0 14 1739296989689808262 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp f67a6ba95572aac6 -0 14 1739296989689808262 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 -14 1384 1739296991079839224 CMakeFiles/qt6_application.dir/mainwindow.cpp.o a6a655d1b446dedd -1384 1652 1739296991349839105 qt6_application 38d90bfe05cc3381 -1 14 1739297032999831500 qt6_application_autogen/timestamp f67a6ba95572aac6 -1 14 1739297032999831500 qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 -1 14 1739297032999831500 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp f67a6ba95572aac6 -1 14 1739297032999831500 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 -14 1381 1739297034389830512 CMakeFiles/qt6_application.dir/mainwindow.cpp.o a6a655d1b446dedd -1381 1661 1739297034669830310 qt6_application 38d90bfe05cc3381 -1 14 1739297157589793203 qt6_application_autogen/timestamp f67a6ba95572aac6 -1 14 1739297157589793203 qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 -1 14 1739297157589793203 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp f67a6ba95572aac6 -1 14 1739297157589793203 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 -15 1410 1739297159009794361 CMakeFiles/qt6_application.dir/mainwindow.cpp.o a6a655d1b446dedd -1410 1696 1739297159289794938 qt6_application 38d90bfe05cc3381 -0 13 1739297269119769116 qt6_application_autogen/timestamp f67a6ba95572aac6 -0 13 1739297269119769116 qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 -0 13 1739297269119769116 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp f67a6ba95572aac6 -0 13 1739297269119769116 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 -14 1465 1739297270599768500 CMakeFiles/qt6_application.dir/mainwindow.cpp.o a6a655d1b446dedd -1465 1731 1739297270859768260 qt6_application 38d90bfe05cc3381 -0 13 1739297692949993505 qt6_application_autogen/timestamp f67a6ba95572aac6 -0 13 1739297692949993505 qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 -0 13 1739297692949993505 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp f67a6ba95572aac6 -0 13 1739297692949993505 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp f67a6ba95572aac6 -13 1416 1739297694369994520 CMakeFiles/qt6_application.dir/mainwindow.cpp.o a6a655d1b446dedd -1416 1694 1739297694649994721 qt6_application 38d90bfe05cc3381 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeploySupport.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeploySupport.cmake deleted file mode 100644 index bdf474411..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeploySupport.cmake +++ /dev/null @@ -1,69 +0,0 @@ -cmake_minimum_required(VERSION 3.16...3.21) - -# These are part of the public API. Projects should use them to provide a -# consistent set of prefix-relative destinations. -if(NOT QT_DEPLOY_BIN_DIR) - set(QT_DEPLOY_BIN_DIR "bin") -endif() -if(NOT QT_DEPLOY_LIBEXEC_DIR) - set(QT_DEPLOY_LIBEXEC_DIR "libexec") -endif() -if(NOT QT_DEPLOY_LIB_DIR) - set(QT_DEPLOY_LIB_DIR "lib") -endif() -if(NOT QT_DEPLOY_PLUGINS_DIR) - set(QT_DEPLOY_PLUGINS_DIR "plugins") -endif() -if(NOT QT_DEPLOY_QML_DIR) - set(QT_DEPLOY_QML_DIR "qml") -endif() -if(NOT QT_DEPLOY_TRANSLATIONS_DIR) - set(QT_DEPLOY_TRANSLATIONS_DIR "translations") -endif() -if(NOT QT_DEPLOY_PREFIX) - set(QT_DEPLOY_PREFIX "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}") -endif() -if(QT_DEPLOY_PREFIX STREQUAL "") - set(QT_DEPLOY_PREFIX .) -endif() -if(NOT QT_DEPLOY_IGNORED_LIB_DIRS) - set(QT_DEPLOY_IGNORED_LIB_DIRS "/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") -endif() - -# These are internal implementation details. They may be removed at any time. -set(__QT_DEPLOY_SYSTEM_NAME "Linux") -set(__QT_DEPLOY_IS_SHARED_LIBS_BUILD "ON") -set(__QT_DEPLOY_TOOL "GRD") -set(__QT_DEPLOY_IMPL_DIR "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt") -set(__QT_DEPLOY_VERBOSE "") -set(__QT_CMAKE_EXPORT_NAMESPACE "Qt6") -set(__QT_DEPLOY_GENERATOR_IS_MULTI_CONFIG "0") -set(__QT_DEPLOY_ACTIVE_CONFIG "Debug") -set(__QT_NO_CREATE_VERSIONLESS_FUNCTIONS "") -set(__QT_DEFAULT_MAJOR_VERSION "6") -set(__QT_DEPLOY_QT_ADDITIONAL_PACKAGES_PREFIX_PATH "") -set(__QT_DEPLOY_QT_INSTALL_PREFIX "/home/austenharrell/Qt/6.8.0/gcc_64") -set(__QT_DEPLOY_QT_INSTALL_BINS "bin") -set(__QT_DEPLOY_QT_INSTALL_DATA ".") -set(__QT_DEPLOY_QT_INSTALL_LIBEXECS "libexec") -set(__QT_DEPLOY_QT_INSTALL_PLUGINS "plugins") -set(__QT_DEPLOY_QT_INSTALL_TRANSLATIONS "translations") -set(__QT_DEPLOY_TARGET_QT_PATHS_PATH "/home/austenharrell/Qt/6.8.0/gcc_64/bin/qtpaths6") -set(__QT_DEPLOY_PLUGINS "") -set(__QT_DEPLOY_MUST_ADJUST_PLUGINS_RPATH "") -set(__QT_DEPLOY_USE_PATCHELF "") -set(__QT_DEPLOY_PATCHELF_EXECUTABLE "") -set(__QT_DEPLOY_QT_IS_MULTI_CONFIG_BUILD_WITH_DEBUG "FALSE") -set(__QT_DEPLOY_QT_DEBUG_POSTFIX "") - -# Define the CMake commands to be made available during deployment. -set(__qt_deploy_support_files - "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeployTargets.cmake" - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreDeploySupport.cmake" -) -foreach(__qt_deploy_support_file IN LISTS __qt_deploy_support_files) - include("${__qt_deploy_support_file}") -endforeach() - -unset(__qt_deploy_support_file) -unset(__qt_deploy_support_files) diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeployTargets.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeployTargets.cmake deleted file mode 100644 index 99d216753..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qt/QtDeployTargets.cmake +++ /dev/null @@ -1,2 +0,0 @@ -set(__QT_DEPLOY_TARGET_qt6_application_FILE /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application) -set(__QT_DEPLOY_TARGET_qt6_application_TYPE EXECUTABLE) diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/LICENSE.conan b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/LICENSE.conan deleted file mode 100644 index 541f5a3a6..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/LICENSE.conan +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2019 JFrog - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake deleted file mode 100644 index c797138f6..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake +++ /dev/null @@ -1,272 +0,0 @@ -# -# Internal Qt Creator variable reference -# -foreach(qtcreator_var - QT_QMAKE_EXECUTABLE CMAKE_PREFIX_PATH CMAKE_C_COMPILER CMAKE_CXX_COMPILER - CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELWITHDEBINFO) - set(__just_reference_${qtcreator_var} ${${qtcreator_var}}) -endforeach() - -if (EXISTS "${CMAKE_SOURCE_DIR}/QtCreatorPackageManager.cmake") - include("${CMAKE_SOURCE_DIR}/QtCreatorPackageManager.cmake") -endif() - -if (QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP) - return() -endif() -option(QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP "Skip Qt Creator's package manager auto-setup" OFF) - -# Store the C/C++ object output extension -if (CMAKE_VERSION GREATER_EQUAL "3.19") - cmake_language(DEFER CALL set CMAKE_C_OUTPUT_EXTENSION "${CMAKE_C_OUTPUT_EXTENSION}" CACHE STRING "" FORCE) - cmake_language(DEFER CALL set CMAKE_CXX_OUTPUT_EXTENSION "${CMAKE_CXX_OUTPUT_EXTENSION}" CACHE STRING "" FORCE) -endif() - -macro(qtc_auto_setup_compiler_standard toolchainFile) - foreach(lang_var C CXX CUDA OBJC OBJCXX) - foreach(prop_var STANDARD STANDARD_REQUIRED EXTENSIONS) - if (CMAKE_${lang_var}_${prop_var}) - file(APPEND "${toolchainFile}" - "set(CMAKE_${lang_var}_${prop_var} ${CMAKE_${lang_var}_${prop_var}})\n") - endif() - endforeach() - endforeach() - - # Forward important CMake variables to the package manager in the toolchain file - foreach(fwd_var CMAKE_MSVC_RUNTIME_LIBRARY CMAKE_SYSROOT CMAKE_OSX_SYSROOT CMAKE_OSX_ARCHITECTURES) - if (${fwd_var}) - file(APPEND "${toolchainFile}" - "set(${fwd_var} ${${fwd_var}})\n") - endif() - endforeach() -endmacro() - -# -# conan -# -macro(qtc_auto_setup_conan) - foreach(file conanfile.txt conanfile.py) - if (EXISTS "${CMAKE_SOURCE_DIR}/${file}") - set(conanfile_txt "${CMAKE_SOURCE_DIR}/${file}") - break() - endif() - endforeach() - - if (conanfile_txt AND NOT QT_CREATOR_SKIP_CONAN_SETUP) - option(QT_CREATOR_SKIP_CONAN_SETUP "Skip Qt Creator's conan package manager auto-setup" OFF) - set(QT_CREATOR_CONAN_BUILD_POLICY "missing" CACHE STRING "Qt Creator's conan package manager auto-setup build policy. This is used for the BUILD property of cmake_conan_run") - - find_program(conan_program conan) - if (NOT conan_program) - message(WARNING "Qt Creator: conan executable not found. " - "Package manager auto-setup will be skipped. " - "To disable this warning set QT_CREATOR_SKIP_CONAN_SETUP to ON.") - return() - endif() - execute_process(COMMAND ${conan_program} --version - RESULT_VARIABLE result_code - OUTPUT_VARIABLE conan_version_output - ERROR_VARIABLE conan_version_output) - if (NOT result_code EQUAL 0) - message(FATAL_ERROR "conan --version failed='${result_code}: ${conan_version_output}") - endif() - - string(REGEX REPLACE ".*Conan version ([0-9].[0-9]).*" "\\1" conan_version "${conan_version_output}") - - set(conanfile_timestamp_file "${CMAKE_BINARY_DIR}/conan-dependencies/conanfile.timestamp") - file(TIMESTAMP "${conanfile_txt}" conanfile_timestamp) - - set(do_conan_installation ON) - if (EXISTS "${conanfile_timestamp_file}") - file(READ "${conanfile_timestamp_file}" old_conanfile_timestamp) - if ("${conanfile_timestamp}" STREQUAL "${old_conanfile_timestamp}") - set(do_conan_installation OFF) - endif() - endif() - - set(conanfile_build_policy_file "${CMAKE_BINARY_DIR}/conan-dependencies/conanfile.buildpolicy") - if (EXISTS "${conanfile_build_policy_file}") - file(READ "${conanfile_build_policy_file}" build_policy) - if (NOT "${build_policy}" STREQUAL "${QT_CREATOR_CONAN_BUILD_POLICY}") - set(do_conan_installation ON) - endif() - endif() - - if (do_conan_installation) - message(STATUS "Qt Creator: conan package manager auto-setup. " - "Skip this step by setting QT_CREATOR_SKIP_CONAN_SETUP to ON.") - - file(COPY "${conanfile_txt}" DESTINATION "${CMAKE_BINARY_DIR}/conan-dependencies/") - - file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" " - set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\") - set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\") - ") - qtc_auto_setup_compiler_standard("${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake") - - if (CMAKE_TOOLCHAIN_FILE) - file(APPEND "${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" - "include(\"${CMAKE_TOOLCHAIN_FILE}\")\n") - endif() - - file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/CMakeLists.txt" " - cmake_minimum_required(VERSION 3.15) - - unset(CMAKE_PROJECT_INCLUDE_BEFORE CACHE) - project(conan-setup) - - if (${conan_version} VERSION_GREATER_EQUAL 2.0) - set(CONAN_COMMAND \"${conan_program}\") - include(\"${CMAKE_CURRENT_LIST_DIR}/conan_provider.cmake\") - conan_profile_detect_default() - detect_host_profile(\"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\") - - set(build_types \${CMAKE_BUILD_TYPE}) - if (CMAKE_CONFIGURATION_TYPES) - set(build_types \${CMAKE_CONFIGURATION_TYPES}) - endif() - - foreach(type \${build_types}) - conan_install( - -pr \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\" - --build=${QT_CREATOR_CONAN_BUILD_POLICY} - -s build_type=\${type} - -g CMakeDeps) - endforeach() - - get_property(CONAN_INSTALL_SUCCESS GLOBAL PROPERTY CONAN_INSTALL_SUCCESS) - if (CONAN_INSTALL_SUCCESS) - get_property(CONAN_GENERATORS_FOLDER GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) - file(TO_CMAKE_PATH \"\${CONAN_GENERATORS_FOLDER}\" CONAN_GENERATORS_FOLDER) - file(WRITE \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake\" \" - list(PREPEND CMAKE_PREFIX_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") - list(PREPEND CMAKE_MODULE_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") - list(PREPEND CMAKE_FIND_ROOT_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") - list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH) - list(REMOVE_DUPLICATES CMAKE_MODULE_PATH) - list(REMOVE_DUPLICATES CMAKE_FIND_ROOT_PATH) - set(CMAKE_PREFIX_PATH \\\"\\\${CMAKE_PREFIX_PATH}\\\" CACHE STRING \\\"\\\" FORCE) - set(CMAKE_MODULE_PATH \\\"\\\${CMAKE_MODULE_PATH}\\\" CACHE STRING \\\"\\\" FORCE) - set(CMAKE_FIND_ROOT_PATH \\\"\\\${CMAKE_FIND_ROOT_PATH}\\\" CACHE STRING \\\"\\\" FORCE) - \") - endif() - else() - include(\"${CMAKE_CURRENT_LIST_DIR}/conan.cmake\") - conan_cmake_run( - CONANFILE \"${conanfile_txt}\" - INSTALL_FOLDER \"${CMAKE_BINARY_DIR}/conan-dependencies\" - GENERATORS cmake_paths cmake_find_package json - BUILD ${QT_CREATOR_CONAN_BUILD_POLICY} - ENV CONAN_CMAKE_TOOLCHAIN_FILE=\"${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake\" - ) - endif() - ") - - if (NOT DEFINED CMAKE_BUILD_TYPE AND NOT DEFINED CMAKE_CONFIGURATION_TYPES) - set(CMAKE_CONFIGURATION_TYPES "Debug;Release") - endif() - - execute_process(COMMAND ${CMAKE_COMMAND} - -S "${CMAKE_BINARY_DIR}/conan-dependencies/" - -B "${CMAKE_BINARY_DIR}/conan-dependencies/build" - -C "${CMAKE_BINARY_DIR}/qtcsettings.cmake" - -D "CMAKE_TOOLCHAIN_FILE=${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" - -G ${CMAKE_GENERATOR} - -D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -D "CMAKE_CONFIGURATION_TYPES=${CMAKE_CONFIGURATION_TYPES}" - RESULT_VARIABLE result - ) - if (result EQUAL 0) - file(WRITE "${conanfile_timestamp_file}" "${conanfile_timestamp}") - file(WRITE "${conanfile_build_policy_file}" ${QT_CREATOR_CONAN_BUILD_POLICY}) - else() - message(WARNING "Qt Creator's conan package manager auto-setup failed. Consider setting " - "QT_CREATOR_SKIP_CONAN_SETUP to ON and reconfigure to skip this step.") - return() - endif() - endif() - - include("${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake") - endif() - unset(conanfile_txt) -endmacro() -qtc_auto_setup_conan() - -# -# vcpkg -# -macro(qtc_auto_setup_vcpkg) - if (EXISTS "${CMAKE_SOURCE_DIR}/vcpkg.json" AND NOT QT_CREATOR_SKIP_VCPKG_SETUP) - option(QT_CREATOR_SKIP_VCPKG_SETUP "Skip Qt Creator's vcpkg package manager auto-setup" OFF) - - find_program(vcpkg_program vcpkg - PATHS $ENV{VCPKG_ROOT} ${CMAKE_SOURCE_DIR}/vcpkg - NO_DEFAULT_PATH - ) - if (NOT vcpkg_program) - message(WARNING "Qt Creator: vcpkg executable not found. " - "Package manager auto-setup will be skipped. " - "To disable this warning set QT_CREATOR_SKIP_VCPKG_SETUP to ON.") - return() - endif() - execute_process(COMMAND ${vcpkg_program} version - RESULT_VARIABLE result_code - OUTPUT_VARIABLE vcpkg_version_output - ERROR_VARIABLE vcpkg_version_output) - if (NOT result_code EQUAL 0) - message(FATAL_ERROR "vcpkg version failed='${result_code}: ${vcpkg_version_output}") - endif() - - # Resolve any symlinks - get_filename_component(vpkg_program_real_path ${vcpkg_program} REALPATH) - get_filename_component(vpkg_root ${vpkg_program_real_path} DIRECTORY) - - if (NOT EXISTS "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") - message(STATUS "Qt Creator: vcpkg package manager auto-setup. " - "Skip this step by setting QT_CREATOR_SKIP_VCPKG_SETUP to ON.") - - file(WRITE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" " - set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\") - set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\") - ") - qtc_auto_setup_compiler_standard("${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") - - if (CMAKE_TOOLCHAIN_FILE AND NOT - CMAKE_TOOLCHAIN_FILE STREQUAL "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") - file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" - "include(\"${CMAKE_TOOLCHAIN_FILE}\")\n") - endif() - - if (VCPKG_TARGET_TRIPLET) - set(vcpkg_triplet ${VCPKG_TARGET_TRIPLET}) - else() - if (WIN32) - set(vcpkg_triplet x64-mingw-static) - if (CMAKE_CXX_COMPILER MATCHES ".*/(.*)/cl.exe") - set(vcpkg_triplet ${CMAKE_MATCH_1}-windows) - endif() - elseif(APPLE) - set(vcpkg_triplet x64-osx) - else() - set(vcpkg_triplet x64-linux) - endif() - endif() - - file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" " - set(VCPKG_TARGET_TRIPLET ${vcpkg_triplet}) - include(\"${vpkg_root}/scripts/buildsystems/vcpkg.cmake\") - ") - endif() - - set(CMAKE_TOOLCHAIN_FILE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" CACHE PATH "" FORCE) - - # Save CMAKE_PREFIX_PATH and CMAKE_MODULE_PATH as cache variables - if (CMAKE_VERSION GREATER_EQUAL "3.19") - cmake_language(DEFER CALL list REMOVE_DUPLICATES CMAKE_PREFIX_PATH) - cmake_language(DEFER CALL list REMOVE_DUPLICATES CMAKE_MODULE_PATH) - cmake_language(DEFER CALL set CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH}" CACHE STRING "" FORCE) - cmake_language(DEFER CALL set CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" CACHE STRING "" FORCE) - endif() - endif() -endmacro() -qtc_auto_setup_vcpkg() diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan.cmake deleted file mode 100644 index 4f5f67e74..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan.cmake +++ /dev/null @@ -1,1026 +0,0 @@ -# The MIT License (MIT) - -# Copyright (c) 2018 JFrog - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - - - -# This file comes from: https://github.com/conan-io/cmake-conan. Please refer -# to this repository for issues and documentation. - -# Its purpose is to wrap and launch Conan C/C++ Package Manager when cmake is called. -# It will take CMake current settings (os, compiler, compiler version, architecture) -# and translate them to conan settings for installing and retrieving dependencies. - -# It is intended to facilitate developers building projects that have conan dependencies, -# but it is only necessary on the end-user side. It is not necessary to create conan -# packages, in fact it shouldn't be use for that. Check the project documentation. - -# version: 0.18.1 - -include(CMakeParseArguments) - -function(_get_msvc_ide_version result) - set(${result} "" PARENT_SCOPE) - if(NOT MSVC_VERSION VERSION_LESS 1400 AND MSVC_VERSION VERSION_LESS 1500) - set(${result} 8 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1500 AND MSVC_VERSION VERSION_LESS 1600) - set(${result} 9 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1600 AND MSVC_VERSION VERSION_LESS 1700) - set(${result} 10 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1700 AND MSVC_VERSION VERSION_LESS 1800) - set(${result} 11 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1800 AND MSVC_VERSION VERSION_LESS 1900) - set(${result} 12 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1900 AND MSVC_VERSION VERSION_LESS 1910) - set(${result} 14 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1910 AND MSVC_VERSION VERSION_LESS 1920) - set(${result} 15 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1920 AND MSVC_VERSION VERSION_LESS 1930) - set(${result} 16 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1930 AND MSVC_VERSION VERSION_LESS 1940) - set(${result} 17 PARENT_SCOPE) - else() - message(FATAL_ERROR "Conan: Unknown MSVC compiler version [${MSVC_VERSION}]") - endif() -endfunction() - -macro(_conan_detect_build_type) - conan_parse_arguments(${ARGV}) - - if(ARGUMENTS_BUILD_TYPE) - set(_CONAN_SETTING_BUILD_TYPE ${ARGUMENTS_BUILD_TYPE}) - elseif(CMAKE_BUILD_TYPE) - set(_CONAN_SETTING_BUILD_TYPE ${CMAKE_BUILD_TYPE}) - else() - message(FATAL_ERROR "Please specify in command line CMAKE_BUILD_TYPE (-DCMAKE_BUILD_TYPE=Release)") - endif() - - string(TOUPPER ${_CONAN_SETTING_BUILD_TYPE} _CONAN_SETTING_BUILD_TYPE_UPPER) - if (_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "DEBUG") - set(_CONAN_SETTING_BUILD_TYPE "Debug") - elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "RELEASE") - set(_CONAN_SETTING_BUILD_TYPE "Release") - elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "RELWITHDEBINFO") - set(_CONAN_SETTING_BUILD_TYPE "RelWithDebInfo") - elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "MINSIZEREL") - set(_CONAN_SETTING_BUILD_TYPE "MinSizeRel") - endif() -endmacro() - -macro(_conan_check_system_name) - #handle -s os setting - if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") - #use default conan os setting if CMAKE_SYSTEM_NAME is not defined - set(CONAN_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}) - if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") - set(CONAN_SYSTEM_NAME Macos) - endif() - if(${CMAKE_SYSTEM_NAME} STREQUAL "QNX") - set(CONAN_SYSTEM_NAME Neutrino) - endif() - set(CONAN_SUPPORTED_PLATFORMS Windows Linux Macos Android iOS FreeBSD WindowsStore WindowsCE watchOS tvOS FreeBSD SunOS AIX Arduino Emscripten Neutrino) - list (FIND CONAN_SUPPORTED_PLATFORMS "${CONAN_SYSTEM_NAME}" _index) - if (${_index} GREATER -1) - #check if the cmake system is a conan supported one - set(_CONAN_SETTING_OS ${CONAN_SYSTEM_NAME}) - else() - message(FATAL_ERROR "cmake system ${CONAN_SYSTEM_NAME} is not supported by conan. Use one of ${CONAN_SUPPORTED_PLATFORMS}") - endif() - endif() -endmacro() - -macro(_conan_check_language) - get_property(_languages GLOBAL PROPERTY ENABLED_LANGUAGES) - if (";${_languages};" MATCHES ";CXX;") - set(LANGUAGE CXX) - set(USING_CXX 1) - elseif (";${_languages};" MATCHES ";C;") - set(LANGUAGE C) - set(USING_CXX 0) - else () - message(FATAL_ERROR "Conan: Neither C or C++ was detected as a language for the project. Unabled to detect compiler version.") - endif() -endmacro() - -macro(_conan_detect_compiler) - - conan_parse_arguments(${ARGV}) - - if(ARGUMENTS_ARCH) - set(_CONAN_SETTING_ARCH ${ARGUMENTS_ARCH}) - endif() - - if(USING_CXX) - set(_CONAN_SETTING_COMPILER_CPPSTD ${CMAKE_CXX_STANDARD}) - endif() - - if (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL GNU) - # using GCC - # TODO: Handle other params - string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) - list(GET VERSION_LIST 0 MAJOR) - list(GET VERSION_LIST 1 MINOR) - set(COMPILER_VERSION ${MAJOR}.${MINOR}) - if(${MAJOR} GREATER 4) - set(COMPILER_VERSION ${MAJOR}) - endif() - set(_CONAN_SETTING_COMPILER gcc) - set(_CONAN_SETTING_COMPILER_VERSION ${COMPILER_VERSION}) - if (USING_CXX) - conan_cmake_detect_unix_libcxx(_LIBCXX) - set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) - endif () - elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Intel) - string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) - list(GET VERSION_LIST 0 MAJOR) - list(GET VERSION_LIST 1 MINOR) - set(COMPILER_VERSION ${MAJOR}.${MINOR}) - set(_CONAN_SETTING_COMPILER intel) - set(_CONAN_SETTING_COMPILER_VERSION ${COMPILER_VERSION}) - if (USING_CXX) - conan_cmake_detect_unix_libcxx(_LIBCXX) - set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) - endif () - elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL AppleClang) - # using AppleClang - string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) - list(GET VERSION_LIST 0 MAJOR) - list(GET VERSION_LIST 1 MINOR) - set(_CONAN_SETTING_COMPILER apple-clang) - set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}.${MINOR}) - if (USING_CXX) - conan_cmake_detect_unix_libcxx(_LIBCXX) - set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) - endif () - elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Clang - AND NOT "${CMAKE_${LANGUAGE}_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC" - AND NOT "${CMAKE_${LANGUAGE}_SIMULATE_ID}" STREQUAL "MSVC") - - string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) - list(GET VERSION_LIST 0 MAJOR) - list(GET VERSION_LIST 1 MINOR) - set(_CONAN_SETTING_COMPILER clang) - set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}.${MINOR}) - if(APPLE) - cmake_policy(GET CMP0025 APPLE_CLANG_POLICY) - if(NOT APPLE_CLANG_POLICY STREQUAL NEW) - message(STATUS "Conan: APPLE and Clang detected. Assuming apple-clang compiler. Set CMP0025 to avoid it") - set(_CONAN_SETTING_COMPILER apple-clang) - endif() - endif() - if(${_CONAN_SETTING_COMPILER} STREQUAL clang AND ${MAJOR} GREATER 7) - set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}) - endif() - if (USING_CXX) - conan_cmake_detect_unix_libcxx(_LIBCXX) - set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) - endif () - elseif(${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL MSVC - OR (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Clang - AND "${CMAKE_${LANGUAGE}_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC" - AND "${CMAKE_${LANGUAGE}_SIMULATE_ID}" STREQUAL "MSVC")) - - set(_VISUAL "Visual Studio") - _get_msvc_ide_version(_VISUAL_VERSION) - if("${_VISUAL_VERSION}" STREQUAL "") - message(FATAL_ERROR "Conan: Visual Studio not recognized") - else() - set(_CONAN_SETTING_COMPILER ${_VISUAL}) - set(_CONAN_SETTING_COMPILER_VERSION ${_VISUAL_VERSION}) - endif() - - if(NOT _CONAN_SETTING_ARCH) - if (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "64") - set(_CONAN_SETTING_ARCH x86_64) - elseif (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "^ARM") - message(STATUS "Conan: Using default ARM architecture from MSVC") - set(_CONAN_SETTING_ARCH armv6) - elseif (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "86") - set(_CONAN_SETTING_ARCH x86) - else () - message(FATAL_ERROR "Conan: Unknown MSVC architecture [${MSVC_${LANGUAGE}_ARCHITECTURE_ID}]") - endif() - endif() - - conan_cmake_detect_vs_runtime(_vs_runtime ${ARGV}) - message(STATUS "Conan: Detected VS runtime: ${_vs_runtime}") - set(_CONAN_SETTING_COMPILER_RUNTIME ${_vs_runtime}) - - if (CMAKE_GENERATOR_TOOLSET) - set(_CONAN_SETTING_COMPILER_TOOLSET ${CMAKE_VS_PLATFORM_TOOLSET}) - elseif(CMAKE_VS_PLATFORM_TOOLSET AND (CMAKE_GENERATOR STREQUAL "Ninja")) - set(_CONAN_SETTING_COMPILER_TOOLSET ${CMAKE_VS_PLATFORM_TOOLSET}) - endif() - else() - message(FATAL_ERROR "Conan: compiler setup not recognized") - endif() - -endmacro() - -function(conan_cmake_settings result) - #message(STATUS "COMPILER " ${CMAKE_CXX_COMPILER}) - #message(STATUS "COMPILER " ${CMAKE_CXX_COMPILER_ID}) - #message(STATUS "VERSION " ${CMAKE_CXX_COMPILER_VERSION}) - #message(STATUS "FLAGS " ${CMAKE_LANG_FLAGS}) - #message(STATUS "LIB ARCH " ${CMAKE_CXX_LIBRARY_ARCHITECTURE}) - #message(STATUS "BUILD TYPE " ${CMAKE_BUILD_TYPE}) - #message(STATUS "GENERATOR " ${CMAKE_GENERATOR}) - #message(STATUS "GENERATOR WIN64 " ${CMAKE_CL_64}) - - message(STATUS "Conan: Automatic detection of conan settings from cmake") - - conan_parse_arguments(${ARGV}) - - _conan_detect_build_type(${ARGV}) - - _conan_check_system_name() - - _conan_check_language() - - _conan_detect_compiler(${ARGV}) - - # If profile is defined it is used - if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARGUMENTS_DEBUG_PROFILE) - set(_APPLIED_PROFILES ${ARGUMENTS_DEBUG_PROFILE}) - elseif(CMAKE_BUILD_TYPE STREQUAL "Release" AND ARGUMENTS_RELEASE_PROFILE) - set(_APPLIED_PROFILES ${ARGUMENTS_RELEASE_PROFILE}) - elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" AND ARGUMENTS_RELWITHDEBINFO_PROFILE) - set(_APPLIED_PROFILES ${ARGUMENTS_RELWITHDEBINFO_PROFILE}) - elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" AND ARGUMENTS_MINSIZEREL_PROFILE) - set(_APPLIED_PROFILES ${ARGUMENTS_MINSIZEREL_PROFILE}) - elseif(ARGUMENTS_PROFILE) - set(_APPLIED_PROFILES ${ARGUMENTS_PROFILE}) - endif() - - foreach(ARG ${_APPLIED_PROFILES}) - set(_SETTINGS ${_SETTINGS} -pr=${ARG}) - endforeach() - foreach(ARG ${ARGUMENTS_PROFILE_BUILD}) - conan_check(VERSION 1.24.0 REQUIRED DETECT_QUIET) - set(_SETTINGS ${_SETTINGS} -pr:b=${ARG}) - endforeach() - - if(NOT _SETTINGS OR ARGUMENTS_PROFILE_AUTO STREQUAL "ALL") - set(ARGUMENTS_PROFILE_AUTO arch build_type compiler compiler.version - compiler.runtime compiler.libcxx compiler.toolset) - endif() - - # remove any manually specified settings from the autodetected settings - foreach(ARG ${ARGUMENTS_SETTINGS}) - string(REGEX MATCH "[^=]*" MANUAL_SETTING "${ARG}") - message(STATUS "Conan: ${MANUAL_SETTING} was added as an argument. Not using the autodetected one.") - list(REMOVE_ITEM ARGUMENTS_PROFILE_AUTO "${MANUAL_SETTING}") - endforeach() - - # Automatic from CMake - foreach(ARG ${ARGUMENTS_PROFILE_AUTO}) - string(TOUPPER ${ARG} _arg_name) - string(REPLACE "." "_" _arg_name ${_arg_name}) - if(_CONAN_SETTING_${_arg_name}) - set(_SETTINGS ${_SETTINGS} -s ${ARG}=${_CONAN_SETTING_${_arg_name}}) - endif() - endforeach() - - foreach(ARG ${ARGUMENTS_SETTINGS}) - set(_SETTINGS ${_SETTINGS} -s ${ARG}) - endforeach() - - message(STATUS "Conan: Settings= ${_SETTINGS}") - - set(${result} ${_SETTINGS} PARENT_SCOPE) -endfunction() - - -function(conan_cmake_detect_unix_libcxx result) - # Take into account any -stdlib in compile options - get_directory_property(compile_options DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMPILE_OPTIONS) - string(GENEX_STRIP "${compile_options}" compile_options) - - # Take into account any _GLIBCXX_USE_CXX11_ABI in compile definitions - get_directory_property(defines DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMPILE_DEFINITIONS) - string(GENEX_STRIP "${defines}" defines) - - foreach(define ${defines}) - if(define MATCHES "_GLIBCXX_USE_CXX11_ABI") - if(define MATCHES "^-D") - set(compile_options ${compile_options} "${define}") - else() - set(compile_options ${compile_options} "-D${define}") - endif() - endif() - endforeach() - - # add additional compiler options ala cmRulePlaceholderExpander::ExpandRuleVariable - set(EXPAND_CXX_COMPILER ${CMAKE_CXX_COMPILER}) - if(CMAKE_CXX_COMPILER_ARG1) - # CMake splits CXX="foo bar baz" into CMAKE_CXX_COMPILER="foo", CMAKE_CXX_COMPILER_ARG1="bar baz" - # without this, ccache, winegcc, or other wrappers might lose all their arguments - separate_arguments(SPLIT_CXX_COMPILER_ARG1 NATIVE_COMMAND ${CMAKE_CXX_COMPILER_ARG1}) - list(APPEND EXPAND_CXX_COMPILER ${SPLIT_CXX_COMPILER_ARG1}) - endif() - - if(CMAKE_CXX_COMPILE_OPTIONS_TARGET AND CMAKE_CXX_COMPILER_TARGET) - # without --target= we may be calling the wrong underlying GCC - list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_TARGET}${CMAKE_CXX_COMPILER_TARGET}") - endif() - - if(CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN AND CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN) - list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN}") - endif() - - if(CMAKE_CXX_COMPILE_OPTIONS_SYSROOT) - # without --sysroot= we may find the wrong #include - if(CMAKE_SYSROOT_COMPILE) - list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT_COMPILE}") - elseif(CMAKE_SYSROOT) - list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT}") - endif() - endif() - - separate_arguments(SPLIT_CXX_FLAGS NATIVE_COMMAND ${CMAKE_CXX_FLAGS}) - - if(CMAKE_OSX_SYSROOT) - set(xcode_sysroot_option "--sysroot=${CMAKE_OSX_SYSROOT}") - endif() - - execute_process( - COMMAND ${CMAKE_COMMAND} -E echo "#include " - COMMAND ${EXPAND_CXX_COMPILER} ${SPLIT_CXX_FLAGS} -x c++ ${xcode_sysroot_option} ${compile_options} -E -dM - - OUTPUT_VARIABLE string_defines - ) - - if(string_defines MATCHES "#define __GLIBCXX__") - # Allow -D_GLIBCXX_USE_CXX11_ABI=ON/OFF as argument to cmake - if(DEFINED _GLIBCXX_USE_CXX11_ABI) - if(_GLIBCXX_USE_CXX11_ABI) - set(${result} libstdc++11 PARENT_SCOPE) - return() - else() - set(${result} libstdc++ PARENT_SCOPE) - return() - endif() - endif() - - if(string_defines MATCHES "#define _GLIBCXX_USE_CXX11_ABI 1\n") - set(${result} libstdc++11 PARENT_SCOPE) - else() - # Either the compiler is missing the define because it is old, and so - # it can't use the new abi, or the compiler was configured to use the - # old abi by the user or distro (e.g. devtoolset on RHEL/CentOS) - set(${result} libstdc++ PARENT_SCOPE) - endif() - else() - set(${result} libc++ PARENT_SCOPE) - endif() -endfunction() - -function(conan_cmake_detect_vs_runtime result) - - conan_parse_arguments(${ARGV}) - if(ARGUMENTS_BUILD_TYPE) - set(build_type "${ARGUMENTS_BUILD_TYPE}") - elseif(CMAKE_BUILD_TYPE) - set(build_type "${CMAKE_BUILD_TYPE}") - else() - message(FATAL_ERROR "Please specify in command line CMAKE_BUILD_TYPE (-DCMAKE_BUILD_TYPE=Release)") - endif() - - if(build_type) - string(TOUPPER "${build_type}" build_type) - endif() - set(variables CMAKE_CXX_FLAGS_${build_type} CMAKE_C_FLAGS_${build_type} CMAKE_CXX_FLAGS CMAKE_C_FLAGS) - foreach(variable ${variables}) - if(NOT "${${variable}}" STREQUAL "") - string(REPLACE " " ";" flags "${${variable}}") - foreach (flag ${flags}) - if("${flag}" STREQUAL "/MD" OR "${flag}" STREQUAL "/MDd" OR "${flag}" STREQUAL "/MT" OR "${flag}" STREQUAL "/MTd") - string(SUBSTRING "${flag}" 1 -1 runtime) - set(${result} "${runtime}" PARENT_SCOPE) - return() - endif() - endforeach() - endif() - endforeach() - if("${build_type}" STREQUAL "DEBUG") - set(${result} "MDd" PARENT_SCOPE) - else() - set(${result} "MD" PARENT_SCOPE) - endif() -endfunction() - -function(_collect_settings result) - set(ARGUMENTS_PROFILE_AUTO arch build_type compiler compiler.version - compiler.runtime compiler.libcxx compiler.toolset - compiler.cppstd) - foreach(ARG ${ARGUMENTS_PROFILE_AUTO}) - string(TOUPPER ${ARG} _arg_name) - string(REPLACE "." "_" _arg_name ${_arg_name}) - if(_CONAN_SETTING_${_arg_name}) - set(detected_setings ${detected_setings} ${ARG}=${_CONAN_SETTING_${_arg_name}}) - endif() - endforeach() - set(${result} ${detected_setings} PARENT_SCOPE) -endfunction() - -function(conan_cmake_autodetect detected_settings) - _conan_detect_build_type(${ARGV}) - _conan_check_system_name() - _conan_check_language() - _conan_detect_compiler(${ARGV}) - _collect_settings(collected_settings) - set(${detected_settings} ${collected_settings} PARENT_SCOPE) -endfunction() - -macro(conan_parse_arguments) - set(options BASIC_SETUP CMAKE_TARGETS UPDATE KEEP_RPATHS NO_LOAD NO_OUTPUT_DIRS OUTPUT_QUIET NO_IMPORTS SKIP_STD) - set(oneValueArgs CONANFILE ARCH BUILD_TYPE INSTALL_FOLDER OUTPUT_FOLDER CONAN_COMMAND) - set(multiValueArgs DEBUG_PROFILE RELEASE_PROFILE RELWITHDEBINFO_PROFILE MINSIZEREL_PROFILE - PROFILE REQUIRES OPTIONS IMPORTS SETTINGS BUILD ENV GENERATORS PROFILE_AUTO - INSTALL_ARGS CONFIGURATION_TYPES PROFILE_BUILD BUILD_REQUIRES) - cmake_parse_arguments(ARGUMENTS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) -endmacro() - -function(old_conan_cmake_install) - # Calls "conan install" - # Argument BUILD is equivalant to --build={missing, PkgName,...} or - # --build when argument is 'BUILD all' (which builds all packages from source) - # Argument CONAN_COMMAND, to specify the conan path, e.g. in case of running from source - # cmake does not identify conan as command, even if it is +x and it is in the path - conan_parse_arguments(${ARGV}) - - if(CONAN_CMAKE_MULTI) - set(ARGUMENTS_GENERATORS ${ARGUMENTS_GENERATORS} cmake_multi) - else() - set(ARGUMENTS_GENERATORS ${ARGUMENTS_GENERATORS} cmake) - endif() - - set(CONAN_BUILD_POLICY "") - foreach(ARG ${ARGUMENTS_BUILD}) - if(${ARG} STREQUAL "all") - set(CONAN_BUILD_POLICY ${CONAN_BUILD_POLICY} --build) - break() - else() - set(CONAN_BUILD_POLICY ${CONAN_BUILD_POLICY} --build=${ARG}) - endif() - endforeach() - if(ARGUMENTS_CONAN_COMMAND) - set(CONAN_CMD ${ARGUMENTS_CONAN_COMMAND}) - else() - conan_check(REQUIRED) - endif() - set(CONAN_OPTIONS "") - if(ARGUMENTS_CONANFILE) - if(IS_ABSOLUTE ${ARGUMENTS_CONANFILE}) - set(CONANFILE ${ARGUMENTS_CONANFILE}) - else() - set(CONANFILE ${CMAKE_CURRENT_SOURCE_DIR}/${ARGUMENTS_CONANFILE}) - endif() - else() - set(CONANFILE ".") - endif() - foreach(ARG ${ARGUMENTS_OPTIONS}) - set(CONAN_OPTIONS ${CONAN_OPTIONS} -o=${ARG}) - endforeach() - if(ARGUMENTS_UPDATE) - set(CONAN_INSTALL_UPDATE --update) - endif() - if(ARGUMENTS_NO_IMPORTS) - set(CONAN_INSTALL_NO_IMPORTS --no-imports) - endif() - set(CONAN_INSTALL_FOLDER "") - if(ARGUMENTS_INSTALL_FOLDER) - set(CONAN_INSTALL_FOLDER -if=${ARGUMENTS_INSTALL_FOLDER}) - endif() - set(CONAN_OUTPUT_FOLDER "") - if(ARGUMENTS_OUTPUT_FOLDER) - set(CONAN_OUTPUT_FOLDER -of=${ARGUMENTS_OUTPUT_FOLDER}) - endif() - foreach(ARG ${ARGUMENTS_GENERATORS}) - set(CONAN_GENERATORS ${CONAN_GENERATORS} -g=${ARG}) - endforeach() - foreach(ARG ${ARGUMENTS_ENV}) - set(CONAN_ENV_VARS ${CONAN_ENV_VARS} -e=${ARG}) - endforeach() - set(conan_args install ${CONANFILE} ${settings} ${CONAN_ENV_VARS} ${CONAN_GENERATORS} ${CONAN_BUILD_POLICY} ${CONAN_INSTALL_UPDATE} ${CONAN_INSTALL_NO_IMPORTS} ${CONAN_OPTIONS} ${CONAN_INSTALL_FOLDER} ${ARGUMENTS_INSTALL_ARGS}) - - string (REPLACE ";" " " _conan_args "${conan_args}") - message(STATUS "Conan executing: ${CONAN_CMD} ${_conan_args}") - - if(ARGUMENTS_OUTPUT_QUIET) - execute_process(COMMAND ${CONAN_CMD} ${conan_args} - RESULT_VARIABLE return_code - OUTPUT_VARIABLE conan_output - ERROR_VARIABLE conan_output - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - else() - execute_process(COMMAND ${CONAN_CMD} ${conan_args} - RESULT_VARIABLE return_code - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - endif() - - if(NOT "${return_code}" STREQUAL "0") - message(FATAL_ERROR "Conan install failed='${return_code}'") - endif() - -endfunction() - -function(conan_cmake_install) - if(DEFINED CONAN_COMMAND) - set(CONAN_CMD ${CONAN_COMMAND}) - else() - conan_check(REQUIRED) - endif() - - set(installOptions UPDATE NO_IMPORTS OUTPUT_QUIET ERROR_QUIET) - set(installOneValueArgs PATH_OR_REFERENCE REFERENCE REMOTE LOCKFILE LOCKFILE_OUT LOCKFILE_NODE_ID INSTALL_FOLDER OUTPUT_FOLDER) - set(installMultiValueArgs GENERATOR BUILD ENV ENV_HOST ENV_BUILD OPTIONS_HOST OPTIONS OPTIONS_BUILD PROFILE - PROFILE_HOST PROFILE_BUILD SETTINGS SETTINGS_HOST SETTINGS_BUILD) - cmake_parse_arguments(ARGS "${installOptions}" "${installOneValueArgs}" "${installMultiValueArgs}" ${ARGN}) - foreach(arg ${installOptions}) - if(ARGS_${arg}) - set(${arg} ${${arg}} ${ARGS_${arg}}) - endif() - endforeach() - foreach(arg ${installOneValueArgs}) - if(DEFINED ARGS_${arg}) - if("${arg}" STREQUAL "REMOTE") - set(flag "--remote") - elseif("${arg}" STREQUAL "LOCKFILE") - set(flag "--lockfile") - elseif("${arg}" STREQUAL "LOCKFILE_OUT") - set(flag "--lockfile-out") - elseif("${arg}" STREQUAL "LOCKFILE_NODE_ID") - set(flag "--lockfile-node-id") - elseif("${arg}" STREQUAL "INSTALL_FOLDER") - set(flag "--install-folder") - elseif("${arg}" STREQUAL "OUTPUT_FOLDER") - set(flag "--output-folder") - endif() - set(${arg} ${${arg}} ${flag} ${ARGS_${arg}}) - endif() - endforeach() - foreach(arg ${installMultiValueArgs}) - if(DEFINED ARGS_${arg}) - if("${arg}" STREQUAL "GENERATOR") - set(flag "--generator") - elseif("${arg}" STREQUAL "BUILD") - set(flag "--build") - elseif("${arg}" STREQUAL "ENV") - set(flag "--env") - elseif("${arg}" STREQUAL "ENV_HOST") - set(flag "--env:host") - elseif("${arg}" STREQUAL "ENV_BUILD") - set(flag "--env:build") - elseif("${arg}" STREQUAL "OPTIONS") - set(flag "--options") - elseif("${arg}" STREQUAL "OPTIONS_HOST") - set(flag "--options:host") - elseif("${arg}" STREQUAL "OPTIONS_BUILD") - set(flag "--options:build") - elseif("${arg}" STREQUAL "PROFILE") - set(flag "--profile") - elseif("${arg}" STREQUAL "PROFILE_HOST") - set(flag "--profile:host") - elseif("${arg}" STREQUAL "PROFILE_BUILD") - set(flag "--profile:build") - elseif("${arg}" STREQUAL "SETTINGS") - set(flag "--settings") - elseif("${arg}" STREQUAL "SETTINGS_HOST") - set(flag "--settings:host") - elseif("${arg}" STREQUAL "SETTINGS_BUILD") - set(flag "--settings:build") - endif() - list(LENGTH ARGS_${arg} numargs) - foreach(item ${ARGS_${arg}}) - if(${item} STREQUAL "all" AND ${arg} STREQUAL "BUILD") - set(${arg} "--build") - break() - endif() - set(${arg} ${${arg}} ${flag} ${item}) - endforeach() - endif() - endforeach() - if(DEFINED UPDATE) - set(UPDATE --update) - endif() - if(DEFINED NO_IMPORTS) - set(NO_IMPORTS --no-imports) - endif() - set(install_args install ${PATH_OR_REFERENCE} ${REFERENCE} ${UPDATE} ${NO_IMPORTS} ${REMOTE} ${LOCKFILE} ${LOCKFILE_OUT} ${LOCKFILE_NODE_ID} ${INSTALL_FOLDER} ${OUTPUT_FOLDER} - ${GENERATOR} ${BUILD} ${ENV} ${ENV_HOST} ${ENV_BUILD} ${OPTIONS} ${OPTIONS_HOST} ${OPTIONS_BUILD} - ${PROFILE} ${PROFILE_HOST} ${PROFILE_BUILD} ${SETTINGS} ${SETTINGS_HOST} ${SETTINGS_BUILD}) - - string(REPLACE ";" " " _install_args "${install_args}") - message(STATUS "Conan executing: ${CONAN_CMD} ${_install_args}") - - if(ARGS_OUTPUT_QUIET) - set(OUTPUT_OPT OUTPUT_QUIET) - endif() - if(ARGS_ERROR_QUIET) - set(ERROR_OPT ERROR_QUIET) - endif() - - execute_process(COMMAND ${CONAN_CMD} ${install_args} - RESULT_VARIABLE return_code - ${OUTPUT_OPT} - ${ERROR_OPT} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - - if(NOT "${return_code}" STREQUAL "0") - if (ARGS_ERROR_QUIET) - message(WARNING "Conan install failed='${return_code}'") - else() - message(FATAL_ERROR "Conan install failed='${return_code}'") - endif() - endif() - -endfunction() - -function(conan_cmake_lock_create) - if(DEFINED CONAN_COMMAND) - set(CONAN_CMD ${CONAN_COMMAND}) - else() - conan_check(REQUIRED) - endif() - - set(lockCreateOptions UPDATE BASE OUTPUT_QUIET ERROR_QUIET) - set(lockCreateOneValueArgs PATH REFERENCE REMOTE LOCKFILE LOCKFILE_OUT) - set(lockCreateMultiValueArgs BUILD ENV ENV_HOST ENV_BUILD OPTIONS_HOST OPTIONS OPTIONS_BUILD PROFILE - PROFILE_HOST PROFILE_BUILD SETTINGS SETTINGS_HOST SETTINGS_BUILD) - cmake_parse_arguments(ARGS "${lockCreateOptions}" "${lockCreateOneValueArgs}" "${lockCreateMultiValueArgs}" ${ARGN}) - foreach(arg ${lockCreateOptions}) - if(ARGS_${arg}) - set(${arg} ${${arg}} ${ARGS_${arg}}) - endif() - endforeach() - foreach(arg ${lockCreateOneValueArgs}) - if(DEFINED ARGS_${arg}) - if("${arg}" STREQUAL "REMOTE") - set(flag "--remote") - elseif("${arg}" STREQUAL "LOCKFILE") - set(flag "--lockfile") - elseif("${arg}" STREQUAL "LOCKFILE_OUT") - set(flag "--lockfile-out") - endif() - set(${arg} ${${arg}} ${flag} ${ARGS_${arg}}) - endif() - endforeach() - foreach(arg ${lockCreateMultiValueArgs}) - if(DEFINED ARGS_${arg}) - if("${arg}" STREQUAL "BUILD") - set(flag "--build") - elseif("${arg}" STREQUAL "ENV") - set(flag "--env") - elseif("${arg}" STREQUAL "ENV_HOST") - set(flag "--env:host") - elseif("${arg}" STREQUAL "ENV_BUILD") - set(flag "--env:build") - elseif("${arg}" STREQUAL "OPTIONS") - set(flag "--options") - elseif("${arg}" STREQUAL "OPTIONS_HOST") - set(flag "--options:host") - elseif("${arg}" STREQUAL "OPTIONS_BUILD") - set(flag "--options:build") - elseif("${arg}" STREQUAL "PROFILE") - set(flag "--profile") - elseif("${arg}" STREQUAL "PROFILE_HOST") - set(flag "--profile:host") - elseif("${arg}" STREQUAL "PROFILE_BUILD") - set(flag "--profile:build") - elseif("${arg}" STREQUAL "SETTINGS") - set(flag "--settings") - elseif("${arg}" STREQUAL "SETTINGS_HOST") - set(flag "--settings:host") - elseif("${arg}" STREQUAL "SETTINGS_BUILD") - set(flag "--settings:build") - endif() - list(LENGTH ARGS_${arg} numargs) - foreach(item ${ARGS_${arg}}) - if(${item} STREQUAL "all" AND ${arg} STREQUAL "BUILD") - set(${arg} "--build") - break() - endif() - set(${arg} ${${arg}} ${flag} ${item}) - endforeach() - endif() - endforeach() - if(DEFINED UPDATE) - set(UPDATE --update) - endif() - if(DEFINED BASE) - set(BASE --base) - endif() - set(lock_create_Args lock create ${PATH} ${REFERENCE} ${UPDATE} ${BASE} ${REMOTE} ${LOCKFILE} ${LOCKFILE_OUT} ${LOCKFILE_NODE_ID} ${INSTALL_FOLDER} - ${GENERATOR} ${BUILD} ${ENV} ${ENV_HOST} ${ENV_BUILD} ${OPTIONS} ${OPTIONS_HOST} ${OPTIONS_BUILD} - ${PROFILE} ${PROFILE_HOST} ${PROFILE_BUILD} ${SETTINGS} ${SETTINGS_HOST} ${SETTINGS_BUILD}) - - string(REPLACE ";" " " _lock_create_Args "${lock_create_Args}") - message(STATUS "Conan executing: ${CONAN_CMD} ${_lock_create_Args}") - - if(ARGS_OUTPUT_QUIET) - set(OUTPUT_OPT OUTPUT_QUIET) - endif() - if(ARGS_ERROR_QUIET) - set(ERROR_OPT ERROR_QUIET) - endif() - - execute_process(COMMAND ${CONAN_CMD} ${lock_create_Args} - RESULT_VARIABLE return_code - ${OUTPUT_OPT} - ${ERROR_OPT} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - - if(NOT "${return_code}" STREQUAL "0") - if (ARGS_ERROR_QUIET) - message(WARNING "Conan lock create failed='${return_code}'") - else() - message(FATAL_ERROR "Conan lock create failed='${return_code}'") - endif() - endif() -endfunction() - -function(conan_cmake_setup_conanfile) - conan_parse_arguments(${ARGV}) - if(ARGUMENTS_CONANFILE) - get_filename_component(_CONANFILE_NAME ${ARGUMENTS_CONANFILE} NAME) - # configure_file will make sure cmake re-runs when conanfile is updated - configure_file(${ARGUMENTS_CONANFILE} ${CMAKE_CURRENT_BINARY_DIR}/${_CONANFILE_NAME}.junk COPYONLY) - file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/${_CONANFILE_NAME}.junk) - else() - conan_cmake_generate_conanfile(ON ${ARGV}) - endif() -endfunction() - -function(conan_cmake_configure) - conan_cmake_generate_conanfile(OFF ${ARGV}) -endfunction() - -# Generate, writing in disk a conanfile.txt with the requires, options, and imports -# specified as arguments -# This will be considered as temporary file, generated in CMAKE_CURRENT_BINARY_DIR) -function(conan_cmake_generate_conanfile DEFAULT_GENERATOR) - - conan_parse_arguments(${ARGV}) - - set(_FN "${CMAKE_CURRENT_BINARY_DIR}/conanfile.txt") - file(WRITE ${_FN} "") - - if(DEFINED ARGUMENTS_REQUIRES) - file(APPEND ${_FN} "[requires]\n") - foreach(REQUIRE ${ARGUMENTS_REQUIRES}) - file(APPEND ${_FN} ${REQUIRE} "\n") - endforeach() - endif() - - if (DEFAULT_GENERATOR OR DEFINED ARGUMENTS_GENERATORS) - file(APPEND ${_FN} "[generators]\n") - if (DEFAULT_GENERATOR) - file(APPEND ${_FN} "cmake\n") - endif() - if (DEFINED ARGUMENTS_GENERATORS) - foreach(GENERATOR ${ARGUMENTS_GENERATORS}) - file(APPEND ${_FN} ${GENERATOR} "\n") - endforeach() - endif() - endif() - - if(DEFINED ARGUMENTS_BUILD_REQUIRES) - file(APPEND ${_FN} "[build_requires]\n") - foreach(BUILD_REQUIRE ${ARGUMENTS_BUILD_REQUIRES}) - file(APPEND ${_FN} ${BUILD_REQUIRE} "\n") - endforeach() - endif() - - if(DEFINED ARGUMENTS_IMPORTS) - file(APPEND ${_FN} "[imports]\n") - foreach(IMPORTS ${ARGUMENTS_IMPORTS}) - file(APPEND ${_FN} ${IMPORTS} "\n") - endforeach() - endif() - - if(DEFINED ARGUMENTS_OPTIONS) - file(APPEND ${_FN} "[options]\n") - foreach(OPTION ${ARGUMENTS_OPTIONS}) - file(APPEND ${_FN} ${OPTION} "\n") - endforeach() - endif() - -endfunction() - - -macro(conan_load_buildinfo) - if(CONAN_CMAKE_MULTI) - set(_CONANBUILDINFO conanbuildinfo_multi.cmake) - else() - set(_CONANBUILDINFO conanbuildinfo.cmake) - endif() - if(ARGUMENTS_INSTALL_FOLDER) - set(_CONANBUILDINFOFOLDER ${ARGUMENTS_INSTALL_FOLDER}) - else() - set(_CONANBUILDINFOFOLDER ${CMAKE_CURRENT_BINARY_DIR}) - endif() - # Checks for the existence of conanbuildinfo.cmake, and loads it - # important that it is macro, so variables defined at parent scope - if(EXISTS "${_CONANBUILDINFOFOLDER}/${_CONANBUILDINFO}") - message(STATUS "Conan: Loading ${_CONANBUILDINFO}") - include(${_CONANBUILDINFOFOLDER}/${_CONANBUILDINFO}) - else() - message(FATAL_ERROR "${_CONANBUILDINFO} doesn't exist in ${CMAKE_CURRENT_BINARY_DIR}") - endif() -endmacro() - - -macro(conan_cmake_run) - conan_parse_arguments(${ARGV}) - - if(ARGUMENTS_CONFIGURATION_TYPES AND NOT CMAKE_CONFIGURATION_TYPES) - message(WARNING "CONFIGURATION_TYPES should only be specified for multi-configuration generators") - elseif(ARGUMENTS_CONFIGURATION_TYPES AND ARGUMENTS_BUILD_TYPE) - message(WARNING "CONFIGURATION_TYPES and BUILD_TYPE arguments should not be defined at the same time.") - endif() - - if(CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE AND NOT CONAN_EXPORTED - AND NOT ARGUMENTS_BUILD_TYPE) - set(CONAN_CMAKE_MULTI ON) - if (NOT ARGUMENTS_CONFIGURATION_TYPES) - set(ARGUMENTS_CONFIGURATION_TYPES "Release;Debug") - endif() - message(STATUS "Conan: Using cmake-multi generator") - else() - set(CONAN_CMAKE_MULTI OFF) - endif() - - if(NOT CONAN_EXPORTED) - conan_cmake_setup_conanfile(${ARGV}) - if(CONAN_CMAKE_MULTI) - foreach(CMAKE_BUILD_TYPE ${ARGUMENTS_CONFIGURATION_TYPES}) - set(ENV{CONAN_IMPORT_PATH} ${CMAKE_BUILD_TYPE}) - conan_cmake_settings(settings ${ARGV}) - old_conan_cmake_install(SETTINGS ${settings} ${ARGV}) - endforeach() - set(CMAKE_BUILD_TYPE) - else() - conan_cmake_settings(settings ${ARGV}) - old_conan_cmake_install(SETTINGS ${settings} ${ARGV}) - endif() - endif() - - if (NOT ARGUMENTS_NO_LOAD) - conan_load_buildinfo() - endif() - - if(ARGUMENTS_BASIC_SETUP) - foreach(_option CMAKE_TARGETS KEEP_RPATHS NO_OUTPUT_DIRS SKIP_STD) - if(ARGUMENTS_${_option}) - if(${_option} STREQUAL "CMAKE_TARGETS") - list(APPEND _setup_options "TARGETS") - else() - list(APPEND _setup_options ${_option}) - endif() - endif() - endforeach() - conan_basic_setup(${_setup_options}) - endif() -endmacro() - -macro(conan_check) - # Checks conan availability in PATH - # Arguments REQUIRED, DETECT_QUIET and VERSION are optional - # Example usage: - # conan_check(VERSION 1.0.0 REQUIRED) - set(options REQUIRED DETECT_QUIET) - set(oneValueArgs VERSION) - cmake_parse_arguments(CONAN "${options}" "${oneValueArgs}" "" ${ARGN}) - if(NOT CONAN_DETECT_QUIET) - message(STATUS "Conan: checking conan executable") - endif() - - find_program(CONAN_CMD conan) - if(NOT CONAN_CMD AND CONAN_REQUIRED) - message(FATAL_ERROR "Conan executable not found! Please install conan.") - endif() - if(NOT CONAN_DETECT_QUIET) - message(STATUS "Conan: Found program ${CONAN_CMD}") - endif() - execute_process(COMMAND ${CONAN_CMD} --version - RESULT_VARIABLE return_code - OUTPUT_VARIABLE CONAN_VERSION_OUTPUT - ERROR_VARIABLE CONAN_VERSION_OUTPUT) - - if(NOT "${return_code}" STREQUAL "0") - message(FATAL_ERROR "Conan --version failed='${return_code}'") - endif() - - if(NOT CONAN_DETECT_QUIET) - string(STRIP "${CONAN_VERSION_OUTPUT}" _CONAN_VERSION_OUTPUT) - message(STATUS "Conan: Version found ${_CONAN_VERSION_OUTPUT}") - endif() - - if(DEFINED CONAN_VERSION) - string(REGEX MATCH ".*Conan version ([0-9]+\\.[0-9]+\\.[0-9]+)" FOO - "${CONAN_VERSION_OUTPUT}") - if(${CMAKE_MATCH_1} VERSION_LESS ${CONAN_VERSION}) - message(FATAL_ERROR "Conan outdated. Installed: ${CMAKE_MATCH_1}, \ - required: ${CONAN_VERSION}. Consider updating via 'pip \ - install conan==${CONAN_VERSION}'.") - endif() - endif() -endmacro() - -function(conan_add_remote) - # Adds a remote - # Arguments URL and NAME are required, INDEX, COMMAND and VERIFY_SSL are optional - # Example usage: - # conan_add_remote(NAME bincrafters INDEX 1 - # URL https://api.bintray.com/conan/bincrafters/public-conan - # VERIFY_SSL True) - set(oneValueArgs URL NAME INDEX COMMAND VERIFY_SSL) - cmake_parse_arguments(CONAN "" "${oneValueArgs}" "" ${ARGN}) - - if(DEFINED CONAN_INDEX) - set(CONAN_INDEX_ARG "-i ${CONAN_INDEX}") - endif() - if(DEFINED CONAN_COMMAND) - set(CONAN_CMD ${CONAN_COMMAND}) - else() - conan_check(REQUIRED DETECT_QUIET) - endif() - set(CONAN_VERIFY_SSL_ARG "True") - if(DEFINED CONAN_VERIFY_SSL) - set(CONAN_VERIFY_SSL_ARG ${CONAN_VERIFY_SSL}) - endif() - message(STATUS "Conan: Adding ${CONAN_NAME} remote repository (${CONAN_URL}) verify ssl (${CONAN_VERIFY_SSL_ARG})") - execute_process(COMMAND ${CONAN_CMD} remote add ${CONAN_NAME} ${CONAN_INDEX_ARG} -f ${CONAN_URL} ${CONAN_VERIFY_SSL_ARG} - RESULT_VARIABLE return_code) - if(NOT "${return_code}" STREQUAL "0") - message(FATAL_ERROR "Conan remote failed='${return_code}'") - endif() -endfunction() - -macro(conan_config_install) - # install a full configuration from a local or remote zip file - # Argument ITEM is required, arguments TYPE, SOURCE, TARGET and VERIFY_SSL are optional - # Example usage: - # conan_config_install(ITEM https://github.com/conan-io/cmake-conan.git - # TYPE git SOURCE source-folder TARGET target-folder VERIFY_SSL false) - set(oneValueArgs ITEM TYPE SOURCE TARGET VERIFY_SSL) - set(multiValueArgs ARGS) - cmake_parse_arguments(CONAN "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - if(DEFINED CONAN_COMMAND) - set(CONAN_CMD ${CONAN_COMMAND}) - else() - conan_check(REQUIRED) - endif() - - if(DEFINED CONAN_VERIFY_SSL) - set(CONAN_VERIFY_SSL_ARG "--verify-ssl=${CONAN_VERIFY_SSL}") - endif() - - if(DEFINED CONAN_TYPE) - set(CONAN_TYPE_ARG "--type=${CONAN_TYPE}") - endif() - - if(DEFINED CONAN_ARGS) - set(CONAN_ARGS_ARGS "--args=\"${CONAN_ARGS}\"") - endif() - - if(DEFINED CONAN_SOURCE) - set(CONAN_SOURCE_ARGS "--source-folder=${CONAN_SOURCE}") - endif() - - if(DEFINED CONAN_TARGET) - set(CONAN_TARGET_ARGS "--target-folder=${CONAN_TARGET}") - endif() - - set (CONAN_CONFIG_INSTALL_ARGS ${CONAN_VERIFY_SSL_ARG} - ${CONAN_TYPE_ARG} - ${CONAN_ARGS_ARGS} - ${CONAN_SOURCE_ARGS} - ${CONAN_TARGET_ARGS}) - - message(STATUS "Conan: Installing config from ${CONAN_ITEM}") - execute_process(COMMAND ${CONAN_CMD} config install ${CONAN_ITEM} ${CONAN_CONFIG_INSTALL_ARGS} - RESULT_VARIABLE return_code) - if(NOT "${return_code}" STREQUAL "0") - message(FATAL_ERROR "Conan config failed='${return_code}'") - endif() -endmacro() diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan_provider.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan_provider.cmake deleted file mode 100644 index e5fa9cec1..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan_provider.cmake +++ /dev/null @@ -1,655 +0,0 @@ -# https://github.com/conan-io/cmake-conan/blob/develop2/conan_provider.cmake -# commit: f6464d1e13ef7a47c569f5061f9607ea63339d39 -# -# The MIT License (MIT) -# -# Copyright (c) 2019 JFrog -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -set(CONAN_MINIMUM_VERSION 2.0.5) - - -function(detect_os OS OS_API_LEVEL OS_SDK OS_SUBSYSTEM OS_VERSION) - # it could be cross compilation - message(STATUS "CMake-Conan: cmake_system_name=${CMAKE_SYSTEM_NAME}") - if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") - if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(${OS} Macos PARENT_SCOPE) - elseif(CMAKE_SYSTEM_NAME STREQUAL "QNX") - set(${OS} Neutrino PARENT_SCOPE) - elseif(CMAKE_SYSTEM_NAME STREQUAL "CYGWIN") - set(${OS} Windows PARENT_SCOPE) - set(${OS_SUBSYSTEM} cygwin PARENT_SCOPE) - elseif(CMAKE_SYSTEM_NAME MATCHES "^MSYS") - set(${OS} Windows PARENT_SCOPE) - set(${OS_SUBSYSTEM} msys2 PARENT_SCOPE) - else() - set(${OS} ${CMAKE_SYSTEM_NAME} PARENT_SCOPE) - endif() - if(CMAKE_SYSTEM_NAME STREQUAL "Android") - if(DEFINED ANDROID_PLATFORM) - string(REGEX MATCH "[0-9]+" _OS_API_LEVEL ${ANDROID_PLATFORM}) - elseif(DEFINED CMAKE_SYSTEM_VERSION) - set(_OS_API_LEVEL ${CMAKE_SYSTEM_VERSION}) - endif() - message(STATUS "CMake-Conan: android api level=${_OS_API_LEVEL}") - set(${OS_API_LEVEL} ${_OS_API_LEVEL} PARENT_SCOPE) - endif() - if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS") - # CMAKE_OSX_SYSROOT contains the full path to the SDK for MakeFile/Ninja - # generators, but just has the original input string for Xcode. - if(NOT IS_DIRECTORY ${CMAKE_OSX_SYSROOT}) - set(_OS_SDK ${CMAKE_OSX_SYSROOT}) - else() - if(CMAKE_OSX_SYSROOT MATCHES Simulator) - set(apple_platform_suffix simulator) - else() - set(apple_platform_suffix os) - endif() - if(CMAKE_OSX_SYSROOT MATCHES AppleTV) - set(_OS_SDK "appletv${apple_platform_suffix}") - elseif(CMAKE_OSX_SYSROOT MATCHES iPhone) - set(_OS_SDK "iphone${apple_platform_suffix}") - elseif(CMAKE_OSX_SYSROOT MATCHES Watch) - set(_OS_SDK "watch${apple_platform_suffix}") - endif() - endif() - if(DEFINED _OS_SDK) - message(STATUS "CMake-Conan: cmake_osx_sysroot=${CMAKE_OSX_SYSROOT}") - set(${OS_SDK} ${_OS_SDK} PARENT_SCOPE) - endif() - if(DEFINED CMAKE_OSX_DEPLOYMENT_TARGET) - message(STATUS "CMake-Conan: cmake_osx_deployment_target=${CMAKE_OSX_DEPLOYMENT_TARGET}") - set(${OS_VERSION} ${CMAKE_OSX_DEPLOYMENT_TARGET} PARENT_SCOPE) - endif() - endif() - endif() -endfunction() - - -function(detect_arch ARCH) - # CMAKE_OSX_ARCHITECTURES can contain multiple architectures, but Conan only supports one. - # Therefore this code only finds one. If the recipes support multiple architectures, the - # build will work. Otherwise, there will be a linker error for the missing architecture(s). - if(DEFINED CMAKE_OSX_ARCHITECTURES) - string(REPLACE " " ";" apple_arch_list "${CMAKE_OSX_ARCHITECTURES}") - list(LENGTH apple_arch_list apple_arch_count) - if(apple_arch_count GREATER 1) - message(WARNING "CMake-Conan: Multiple architectures detected, this will only work if Conan recipe(s) produce fat binaries.") - endif() - endif() - if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS" AND NOT CMAKE_OSX_ARCHITECTURES STREQUAL "") - set(host_arch ${CMAKE_OSX_ARCHITECTURES}) - elseif(MSVC) - set(host_arch ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}) - else() - set(host_arch ${CMAKE_SYSTEM_PROCESSOR}) - endif() - if(host_arch MATCHES "aarch64|arm64|ARM64") - set(_ARCH armv8) - elseif(host_arch MATCHES "armv7|armv7-a|armv7l|ARMV7") - set(_ARCH armv7) - elseif(host_arch MATCHES armv7s) - set(_ARCH armv7s) - elseif(host_arch MATCHES "i686|i386|X86") - set(_ARCH x86) - elseif(host_arch MATCHES "AMD64|amd64|x86_64|x64") - set(_ARCH x86_64) - endif() - message(STATUS "CMake-Conan: cmake_system_processor=${_ARCH}") - set(${ARCH} ${_ARCH} PARENT_SCOPE) -endfunction() - - -function(detect_cxx_standard CXX_STANDARD) - set(${CXX_STANDARD} ${CMAKE_CXX_STANDARD} PARENT_SCOPE) - if(CMAKE_CXX_EXTENSIONS) - set(${CXX_STANDARD} "gnu${CMAKE_CXX_STANDARD}" PARENT_SCOPE) - endif() -endfunction() - - -macro(detect_gnu_libstdcxx) - # _CONAN_IS_GNU_LIBSTDCXX true if GNU libstdc++ - check_cxx_source_compiles(" - #include - #if !defined(__GLIBCXX__) && !defined(__GLIBCPP__) - static_assert(false); - #endif - int main(){}" _CONAN_IS_GNU_LIBSTDCXX) - - # _CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI true if C++11 ABI - check_cxx_source_compiles(" - #include - static_assert(sizeof(std::string) != sizeof(void*), \"using libstdc++\"); - int main () {}" _CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) - - set(_CONAN_GNU_LIBSTDCXX_SUFFIX "") - if(_CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) - set(_CONAN_GNU_LIBSTDCXX_SUFFIX "11") - endif() - unset (_CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) -endmacro() - - -macro(detect_libcxx) - # _CONAN_IS_LIBCXX true if LLVM libc++ - check_cxx_source_compiles(" - #include - #if !defined(_LIBCPP_VERSION) - static_assert(false); - #endif - int main(){}" _CONAN_IS_LIBCXX) -endmacro() - - -function(detect_lib_cxx LIB_CXX) - if(CMAKE_SYSTEM_NAME STREQUAL "Android") - message(STATUS "CMake-Conan: android_stl=${CMAKE_ANDROID_STL_TYPE}") - set(${LIB_CXX} ${CMAKE_ANDROID_STL_TYPE} PARENT_SCOPE) - return() - endif() - - include(CheckCXXSourceCompiles) - - if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") - detect_gnu_libstdcxx() - set(${LIB_CXX} "libstdc++${_CONAN_GNU_LIBSTDCXX_SUFFIX}" PARENT_SCOPE) - elseif(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") - set(${LIB_CXX} "libc++" PARENT_SCOPE) - elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT CMAKE_SYSTEM_NAME MATCHES "Windows") - # Check for libc++ - detect_libcxx() - if(_CONAN_IS_LIBCXX) - set(${LIB_CXX} "libc++" PARENT_SCOPE) - return() - endif() - - # Check for libstdc++ - detect_gnu_libstdcxx() - if(_CONAN_IS_GNU_LIBSTDCXX) - set(${LIB_CXX} "libstdc++${_CONAN_GNU_LIBSTDCXX_SUFFIX}" PARENT_SCOPE) - return() - endif() - - # TODO: it would be an error if we reach this point - elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") - # Do nothing - compiler.runtime and compiler.runtime_type - # should be handled separately: https://github.com/conan-io/cmake-conan/pull/516 - return() - else() - # TODO: unable to determine, ask user to provide a full profile file instead - endif() -endfunction() - - -function(detect_compiler COMPILER COMPILER_VERSION COMPILER_RUNTIME COMPILER_RUNTIME_TYPE) - if(DEFINED CMAKE_CXX_COMPILER_ID) - set(_COMPILER ${CMAKE_CXX_COMPILER_ID}) - set(_COMPILER_VERSION ${CMAKE_CXX_COMPILER_VERSION}) - else() - if(NOT DEFINED CMAKE_C_COMPILER_ID) - message(FATAL_ERROR "C or C++ compiler not defined") - endif() - set(_COMPILER ${CMAKE_C_COMPILER_ID}) - set(_COMPILER_VERSION ${CMAKE_C_COMPILER_VERSION}) - endif() - - message(STATUS "CMake-Conan: CMake compiler=${_COMPILER}") - message(STATUS "CMake-Conan: CMake compiler version=${_COMPILER_VERSION}") - - if(_COMPILER MATCHES MSVC) - set(_COMPILER "msvc") - string(SUBSTRING ${MSVC_VERSION} 0 3 _COMPILER_VERSION) - # Configure compiler.runtime and compiler.runtime_type settings for MSVC - if(CMAKE_MSVC_RUNTIME_LIBRARY) - set(_msvc_runtime_library ${CMAKE_MSVC_RUNTIME_LIBRARY}) - else() - set(_msvc_runtime_library MultiThreaded$<$:Debug>DLL) # default value documented by CMake - endif() - - set(_KNOWN_MSVC_RUNTIME_VALUES "") - list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded MultiThreadedDLL) - list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreadedDebug MultiThreadedDebugDLL) - list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded$<$:Debug> MultiThreaded$<$:Debug>DLL) - - # only accept the 6 possible values, otherwise we don't don't know to map this - if(NOT _msvc_runtime_library IN_LIST _KNOWN_MSVC_RUNTIME_VALUES) - message(FATAL_ERROR "CMake-Conan: unable to map MSVC runtime: ${_msvc_runtime_library} to Conan settings") - endif() - - # Runtime is "dynamic" in all cases if it ends in DLL - if(_msvc_runtime_library MATCHES ".*DLL$") - set(_COMPILER_RUNTIME "dynamic") - else() - set(_COMPILER_RUNTIME "static") - endif() - message(STATUS "CMake-Conan: CMake compiler.runtime=${_COMPILER_RUNTIME}") - - # Only define compiler.runtime_type when explicitly requested - # If a generator expression is used, let Conan handle it conditional on build_type - if(NOT _msvc_runtime_library MATCHES ":Debug>") - if(_msvc_runtime_library MATCHES "Debug") - set(_COMPILER_RUNTIME_TYPE "Debug") - else() - set(_COMPILER_RUNTIME_TYPE "Release") - endif() - message(STATUS "CMake-Conan: CMake compiler.runtime_type=${_COMPILER_RUNTIME_TYPE}") - endif() - - unset(_KNOWN_MSVC_RUNTIME_VALUES) - - elseif(_COMPILER MATCHES AppleClang) - set(_COMPILER "apple-clang") - string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) - list(GET VERSION_LIST 0 _COMPILER_VERSION) - elseif(_COMPILER MATCHES Clang) - set(_COMPILER "clang") - string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) - list(GET VERSION_LIST 0 _COMPILER_VERSION) - elseif(_COMPILER MATCHES GNU) - set(_COMPILER "gcc") - string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) - list(GET VERSION_LIST 0 _COMPILER_VERSION) - endif() - - message(STATUS "CMake-Conan: [settings] compiler=${_COMPILER}") - message(STATUS "CMake-Conan: [settings] compiler.version=${_COMPILER_VERSION}") - if (_COMPILER_RUNTIME) - message(STATUS "CMake-Conan: [settings] compiler.runtime=${_COMPILER_RUNTIME}") - endif() - if (_COMPILER_RUNTIME_TYPE) - message(STATUS "CMake-Conan: [settings] compiler.runtime_type=${_COMPILER_RUNTIME_TYPE}") - endif() - - set(${COMPILER} ${_COMPILER} PARENT_SCOPE) - set(${COMPILER_VERSION} ${_COMPILER_VERSION} PARENT_SCOPE) - set(${COMPILER_RUNTIME} ${_COMPILER_RUNTIME} PARENT_SCOPE) - set(${COMPILER_RUNTIME_TYPE} ${_COMPILER_RUNTIME_TYPE} PARENT_SCOPE) -endfunction() - - -function(detect_build_type BUILD_TYPE) - get_property(_MULTICONFIG_GENERATOR GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) - if(NOT _MULTICONFIG_GENERATOR) - # Only set when we know we are in a single-configuration generator - # Note: we may want to fail early if `CMAKE_BUILD_TYPE` is not defined - set(${BUILD_TYPE} ${CMAKE_BUILD_TYPE} PARENT_SCOPE) - endif() -endfunction() - -macro(set_conan_compiler_if_appleclang lang command output_variable) - if(CMAKE_${lang}_COMPILER_ID STREQUAL "AppleClang") - execute_process(COMMAND xcrun --find ${command} - OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE) - cmake_path(GET _xcrun_out PARENT_PATH _xcrun_toolchain_path) - cmake_path(GET CMAKE_${lang}_COMPILER PARENT_PATH _compiler_parent_path) - if ("${_xcrun_toolchain_path}" STREQUAL "${_compiler_parent_path}") - set(${output_variable} "") - endif() - unset(_xcrun_out) - unset(_xcrun_toolchain_path) - unset(_compiler_parent_path) - endif() -endmacro() - - -macro(append_compiler_executables_configuration) - set(_conan_c_compiler "") - set(_conan_cpp_compiler "") - if(CMAKE_C_COMPILER) - set(_conan_c_compiler "\"c\":\"${CMAKE_C_COMPILER}\",") - set_conan_compiler_if_appleclang(C cc _conan_c_compiler) - else() - message(WARNING "CMake-Conan: The C compiler is not defined. " - "Please define CMAKE_C_COMPILER or enable the C language.") - endif() - if(CMAKE_CXX_COMPILER) - set(_conan_cpp_compiler "\"cpp\":\"${CMAKE_CXX_COMPILER}\"") - set_conan_compiler_if_appleclang(CXX c++ _conan_cpp_compiler) - else() - message(WARNING "CMake-Conan: The C++ compiler is not defined. " - "Please define CMAKE_CXX_COMPILER or enable the C++ language.") - endif() - - if(NOT "x${_conan_c_compiler}${_conan_cpp_compiler}" STREQUAL "x") - string(APPEND PROFILE "tools.build:compiler_executables={${_conan_c_compiler}${_conan_cpp_compiler}}\n") - endif() - unset(_conan_c_compiler) - unset(_conan_cpp_compiler) -endmacro() - - -function(detect_host_profile output_file) - detect_os(MYOS MYOS_API_LEVEL MYOS_SDK MYOS_SUBSYSTEM MYOS_VERSION) - detect_arch(MYARCH) - detect_compiler(MYCOMPILER MYCOMPILER_VERSION MYCOMPILER_RUNTIME MYCOMPILER_RUNTIME_TYPE) - detect_cxx_standard(MYCXX_STANDARD) - detect_lib_cxx(MYLIB_CXX) - detect_build_type(MYBUILD_TYPE) - - set(PROFILE "") - string(APPEND PROFILE "[settings]\n") - if(MYARCH) - string(APPEND PROFILE arch=${MYARCH} "\n") - endif() - if(MYOS) - string(APPEND PROFILE os=${MYOS} "\n") - endif() - if(MYOS_API_LEVEL) - string(APPEND PROFILE os.api_level=${MYOS_API_LEVEL} "\n") - endif() - if(MYOS_VERSION) - string(APPEND PROFILE os.version=${MYOS_VERSION} "\n") - endif() - if(MYOS_SDK) - string(APPEND PROFILE os.sdk=${MYOS_SDK} "\n") - endif() - if(MYOS_SUBSYSTEM) - string(APPEND PROFILE os.subsystem=${MYOS_SUBSYSTEM} "\n") - endif() - if(MYCOMPILER) - string(APPEND PROFILE compiler=${MYCOMPILER} "\n") - endif() - if(MYCOMPILER_VERSION) - string(APPEND PROFILE compiler.version=${MYCOMPILER_VERSION} "\n") - endif() - if(MYCOMPILER_RUNTIME) - string(APPEND PROFILE compiler.runtime=${MYCOMPILER_RUNTIME} "\n") - endif() - if(MYCOMPILER_RUNTIME_TYPE) - string(APPEND PROFILE compiler.runtime_type=${MYCOMPILER_RUNTIME_TYPE} "\n") - endif() - if(MYCXX_STANDARD) - string(APPEND PROFILE compiler.cppstd=${MYCXX_STANDARD} "\n") - endif() - if(MYLIB_CXX) - string(APPEND PROFILE compiler.libcxx=${MYLIB_CXX} "\n") - endif() - if(MYBUILD_TYPE) - string(APPEND PROFILE "build_type=${MYBUILD_TYPE}\n") - endif() - - if(NOT DEFINED output_file) - set(_FN "${CMAKE_BINARY_DIR}/profile") - else() - set(_FN ${output_file}) - endif() - - string(APPEND PROFILE "[conf]\n") - string(APPEND PROFILE "tools.cmake.cmaketoolchain:generator=${CMAKE_GENERATOR}\n") - - # propagate compilers via profile - append_compiler_executables_configuration() - - if(MYOS STREQUAL "Android") - string(APPEND PROFILE "tools.android:ndk_path=${CMAKE_ANDROID_NDK}\n") - endif() - - message(STATUS "CMake-Conan: Creating profile ${_FN}") - file(WRITE ${_FN} ${PROFILE}) - message(STATUS "CMake-Conan: Profile: \n${PROFILE}") -endfunction() - - -function(conan_profile_detect_default) - message(STATUS "CMake-Conan: Checking if a default profile exists") - execute_process(COMMAND ${CONAN_COMMAND} profile path default - RESULT_VARIABLE return_code - OUTPUT_VARIABLE conan_stdout - ERROR_VARIABLE conan_stderr - ECHO_ERROR_VARIABLE # show the text output regardless - ECHO_OUTPUT_VARIABLE - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - if(NOT ${return_code} EQUAL "0") - message(STATUS "CMake-Conan: The default profile doesn't exist, detecting it.") - execute_process(COMMAND ${CONAN_COMMAND} profile detect - RESULT_VARIABLE return_code - OUTPUT_VARIABLE conan_stdout - ERROR_VARIABLE conan_stderr - ECHO_ERROR_VARIABLE # show the text output regardless - ECHO_OUTPUT_VARIABLE - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - endif() -endfunction() - - -function(conan_install) - cmake_parse_arguments(ARGS CONAN_ARGS ${ARGN}) - set(CONAN_OUTPUT_FOLDER ${CMAKE_BINARY_DIR}/conan) - # Invoke "conan install" with the provided arguments - set(CONAN_ARGS ${CONAN_ARGS} -of=${CONAN_OUTPUT_FOLDER}) - message(STATUS "CMake-Conan: conan install ${CMAKE_SOURCE_DIR} ${CONAN_ARGS} ${ARGN}") - - - # In case there was not a valid cmake executable in the PATH, we inject the - # same we used to invoke the provider to the PATH - if(DEFINED PATH_TO_CMAKE_BIN) - set(_OLD_PATH $ENV{PATH}) - set(ENV{PATH} "$ENV{PATH}:${PATH_TO_CMAKE_BIN}") - endif() - - execute_process(COMMAND ${CONAN_COMMAND} install ${CMAKE_SOURCE_DIR} ${CONAN_ARGS} ${ARGN} --format=json - RESULT_VARIABLE return_code - OUTPUT_VARIABLE conan_stdout - ERROR_VARIABLE conan_stderr - ECHO_ERROR_VARIABLE # show the text output regardless - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - - if(DEFINED PATH_TO_CMAKE_BIN) - set(ENV{PATH} "${_OLD_PATH}") - endif() - - if(NOT "${return_code}" STREQUAL "0") - message(FATAL_ERROR "Conan install failed='${return_code}'") - else() - # the files are generated in a folder that depends on the layout used, if - # one is specified, but we don't know a priori where this is. - # TODO: this can be made more robust if Conan can provide this in the json output - string(JSON CONAN_GENERATORS_FOLDER GET ${conan_stdout} graph nodes 0 generators_folder) - cmake_path(CONVERT ${CONAN_GENERATORS_FOLDER} TO_CMAKE_PATH_LIST CONAN_GENERATORS_FOLDER) - # message("conan stdout: ${conan_stdout}") - message(STATUS "CMake-Conan: CONAN_GENERATORS_FOLDER=${CONAN_GENERATORS_FOLDER}") - set_property(GLOBAL PROPERTY CONAN_GENERATORS_FOLDER "${CONAN_GENERATORS_FOLDER}") - # reconfigure on conanfile changes - string(JSON CONANFILE GET ${conan_stdout} graph nodes 0 label) - message(STATUS "CMake-Conan: CONANFILE=${CMAKE_SOURCE_DIR}/${CONANFILE}") - set_property(DIRECTORY ${CMAKE_SOURCE_DIR} APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/${CONANFILE}") - # success - set_property(GLOBAL PROPERTY CONAN_INSTALL_SUCCESS TRUE) - endif() -endfunction() - - -function(conan_get_version conan_command conan_current_version) - execute_process( - COMMAND ${conan_command} --version - OUTPUT_VARIABLE conan_output - RESULT_VARIABLE conan_result - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - if(conan_result) - message(FATAL_ERROR "CMake-Conan: Error when trying to run Conan") - endif() - - string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" conan_version ${conan_output}) - set(${conan_current_version} ${conan_version} PARENT_SCOPE) -endfunction() - - -function(conan_version_check) - set(options ) - set(oneValueArgs MINIMUM CURRENT) - set(multiValueArgs ) - cmake_parse_arguments(CONAN_VERSION_CHECK - "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - if(NOT CONAN_VERSION_CHECK_MINIMUM) - message(FATAL_ERROR "CMake-Conan: Required parameter MINIMUM not set!") - endif() - if(NOT CONAN_VERSION_CHECK_CURRENT) - message(FATAL_ERROR "CMake-Conan: Required parameter CURRENT not set!") - endif() - - if(CONAN_VERSION_CHECK_CURRENT VERSION_LESS CONAN_VERSION_CHECK_MINIMUM) - message(FATAL_ERROR "CMake-Conan: Conan version must be ${CONAN_VERSION_CHECK_MINIMUM} or later") - endif() -endfunction() - - -macro(construct_profile_argument argument_variable profile_list) - set(${argument_variable} "") - if("${profile_list}" STREQUAL "CONAN_HOST_PROFILE") - set(_arg_flag "--profile:host=") - elseif("${profile_list}" STREQUAL "CONAN_BUILD_PROFILE") - set(_arg_flag "--profile:build=") - endif() - - set(_profile_list "${${profile_list}}") - list(TRANSFORM _profile_list REPLACE "auto-cmake" "${CMAKE_BINARY_DIR}/conan_host_profile") - list(TRANSFORM _profile_list PREPEND ${_arg_flag}) - set(${argument_variable} ${_profile_list}) - - unset(_arg_flag) - unset(_profile_list) -endmacro() - - -macro(conan_provide_dependency method package_name) - set_property(GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED TRUE) - get_property(_conan_install_success GLOBAL PROPERTY CONAN_INSTALL_SUCCESS) - if(NOT _conan_install_success) - find_program(CONAN_COMMAND "conan" REQUIRED) - conan_get_version(${CONAN_COMMAND} CONAN_CURRENT_VERSION) - conan_version_check(MINIMUM ${CONAN_MINIMUM_VERSION} CURRENT ${CONAN_CURRENT_VERSION}) - message(STATUS "CMake-Conan: first find_package() found. Installing dependencies with Conan") - if("default" IN_LIST CONAN_HOST_PROFILE OR "default" IN_LIST CONAN_BUILD_PROFILE) - conan_profile_detect_default() - endif() - if("auto-cmake" IN_LIST CONAN_HOST_PROFILE) - detect_host_profile(${CMAKE_BINARY_DIR}/conan_host_profile) - endif() - construct_profile_argument(_host_profile_flags CONAN_HOST_PROFILE) - construct_profile_argument(_build_profile_flags CONAN_BUILD_PROFILE) - if(EXISTS "${CMAKE_SOURCE_DIR}/conanfile.py") - file(READ "${CMAKE_SOURCE_DIR}/conanfile.py" outfile) - if(NOT "${outfile}" MATCHES ".*CMakeDeps.*") - message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile") - endif() - set(generator "") - elseif (EXISTS "${CMAKE_SOURCE_DIR}/conanfile.txt") - file(READ "${CMAKE_SOURCE_DIR}/conanfile.txt" outfile) - if(NOT "${outfile}" MATCHES ".*CMakeDeps.*") - message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile. " - "Please define the generator as it will be mandatory in the future") - endif() - set(generator "-g;CMakeDeps") - endif() - get_property(_multiconfig_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) - if(NOT _multiconfig_generator) - message(STATUS "CMake-Conan: Installing single configuration ${CMAKE_BUILD_TYPE}") - conan_install(${_host_profile_flags} ${_build_profile_flags} ${CONAN_INSTALL_ARGS} ${generator}) - else() - message(STATUS "CMake-Conan: Installing both Debug and Release") - conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Release ${CONAN_INSTALL_ARGS} ${generator}) - conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Debug ${CONAN_INSTALL_ARGS} ${generator}) - endif() - unset(_host_profile_flags) - unset(_build_profile_flags) - unset(_multiconfig_generator) - unset(_conan_install_success) - else() - message(STATUS "CMake-Conan: find_package(${ARGV1}) found, 'conan install' already ran") - unset(_conan_install_success) - endif() - - get_property(_conan_generators_folder GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) - - # Ensure that we consider Conan-provided packages ahead of any other, - # irrespective of other settings that modify the search order or search paths - # This follows the guidelines from the find_package documentation - # (https://cmake.org/cmake/help/latest/command/find_package.html): - # find_package ( PATHS paths... NO_DEFAULT_PATH) - # find_package () - - # Filter out `REQUIRED` from the argument list, as the first call may fail - set(_find_args_${package_name} "${ARGN}") - list(REMOVE_ITEM _find_args_${package_name} "REQUIRED") - if(NOT "MODULE" IN_LIST _find_args_${package_name}) - find_package(${package_name} ${_find_args_${package_name}} BYPASS_PROVIDER PATHS "${_conan_generators_folder}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) - unset(_find_args_${package_name}) - endif() - - # Invoke find_package a second time - if the first call succeeded, - # this will simply reuse the result. If not, fall back to CMake default search - # behaviour, also allowing modules to be searched. - if(NOT ${package_name}_FOUND) - list(FIND CMAKE_MODULE_PATH "${_conan_generators_folder}" _index) - if(_index EQUAL -1) - list(PREPEND CMAKE_MODULE_PATH "${_conan_generators_folder}") - endif() - unset(_index) - find_package(${package_name} ${ARGN} BYPASS_PROVIDER) - list(REMOVE_ITEM CMAKE_MODULE_PATH "${_conan_generators_folder}") - endif() -endmacro() - -#[=[ not needed by Qt Creator, and if not commented it would break the auto-setup feature - -cmake_language( - SET_DEPENDENCY_PROVIDER conan_provide_dependency - SUPPORTED_METHODS FIND_PACKAGE -) - - -macro(conan_provide_dependency_check) - set(_CONAN_PROVIDE_DEPENDENCY_INVOKED FALSE) - get_property(_CONAN_PROVIDE_DEPENDENCY_INVOKED GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED) - if(NOT _CONAN_PROVIDE_DEPENDENCY_INVOKED) - message(WARNING "Conan is correctly configured as dependency provider, " - "but Conan has not been invoked. Please add at least one " - "call to `find_package()`.") - if(DEFINED CONAN_COMMAND) - # supress warning in case `CONAN_COMMAND` was specified but unused. - set(_CONAN_COMMAND ${CONAN_COMMAND}) - unset(_CONAN_COMMAND) - endif() - endif() - unset(_CONAN_PROVIDE_DEPENDENCY_INVOKED) -endmacro() - - -# Add a deferred call at the end of processing the top-level directory -# to check if the dependency provider was invoked at all. -cmake_language(DEFER DIRECTORY "${CMAKE_SOURCE_DIR}" CALL conan_provide_dependency_check) - -]=] - -# Configurable variables for Conan profiles -set(CONAN_HOST_PROFILE "default;auto-cmake" CACHE STRING "Conan host profile") -set(CONAN_BUILD_PROFILE "default" CACHE STRING "Conan build profile") -set(CONAN_INSTALL_ARGS "--build=missing" CACHE STRING "Command line arguments for conan install") - -find_program(_cmake_program NAMES cmake NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_CMAKE_FIND_ROOT_PATH) -if(NOT _cmake_program) - get_filename_component(PATH_TO_CMAKE_BIN "${CMAKE_COMMAND}" DIRECTORY) - set(PATH_TO_CMAKE_BIN "${PATH_TO_CMAKE_BIN}" CACHE INTERNAL "Path where the CMake executable is") -endif() - diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/FILE.h.79AEFC497861DFC5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/FILE.h.79AEFC497861DFC5.idx deleted file mode 100644 index e91032933fb84f2b88c78a26c8785731990e2530..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 300 zcmYk1y-LJD5Xb-P#X~)86vV<}1;OgFjRX;~5d#4$xn6SFiCM_Unc2l0_z(*BD%RG% z!##wJXzAw8!eKuC48LJ!?vgk@5x})hx{7QX0ND4zwly!luIw^nt4(u-IJv#Sq#)VM z(nm+q&Szfd($kby97;JU3`_6ULz;3^8*7?cIwmctWO^#7CC?!@C0!_`9Jk8US?M&X z?mW7W&c>ywT{nKHothfUs$asYUmX_Uc{M%uN3q-;d^XQC!Uhlw4~Ivqgl%8|2(gKl uat{BIVrNaPUxJF3ukU*C;oD+M9Q<|tRGIdg+l)uO2!8e!%dhX#H{chUx=qdi diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QAction.C96EF240B8C97D16.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QAction.C96EF240B8C97D16.idx deleted file mode 100644 index 23067ffc5ee7e78342ef0992d34be3d51a51f4bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmWIYbaT7Kz`)>~;#rZKT9U{DWD5gvaY<2TCy)k%w9K4TD}8~;#rZKT9U{DWD5gvaY<3;Y#EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK*xfDoXq6JlFa-( z28v87OhlNZmjQHRWo{D4eMPBh#Sl6t5kwakB^Qf>7>t#NBF;V1m|@Du#J~g+fB*ng CM@J?A diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QCheckBox.F97C85CD389B142A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QCheckBox.F97C85CD389B142A.idx deleted file mode 100644 index e1b13046562169900b0179a4f11b1b56322d38d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmWIYbaQ*gz`)>~;#rZKT9U{DWD5gvaY<3;R3HroX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK3I>Xd zDNF_#laybfmjQHLWo{D4WksoJ#Sl6t5kwakB^Qf>7>v)FcQ$vKPdv}a#J~g+fB*nB CTtw~w diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QComboBox.E9BD1F66553AE54E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QComboBox.E9BD1F66553AE54E.idx deleted file mode 100644 index f235d229786abf7b21b68d70ecd79d0398539b9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmWIYbaQ*gz`)>~;#rZKT9U{DWD5gvaY<3;R3HroX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTKXd zDNF_#laybfmjQHLWo{D4WksoJ#Sl6t5kwakB^Qf>7)&4n0vIb8n$?B59Of`GF#rJh CuR>=4 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QDateEdit.1363D2C608FAA19C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QDateEdit.1363D2C608FAA19C.idx deleted file mode 100644 index 29b2ed3b9b1323d1e3c073ab7eba5cb162da349d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmWIYbaQ*fz`)>~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK$palRM(Wu5(bKl zDNF$xQ<9mRnhG>ZF9Ybp%G@N7>xxp-iXn7PB8V<7N-h=$F&J56WETC6{?g0H#J~g+ GfB*n;qD9dF diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QDebug.D6EEDCAB812A108A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QDebug.D6EEDCAB812A108A.idx deleted file mode 100644 index cea89ba805b5a3c76aeaf4c60689ee5193912cfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmWIYbaT7Kz`)>~;#rZKT9U{DWD5gvaY<2TCy)k%w9K4TD}8~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK$rZ|q@2{?g3LUp z{0at&%qlDfnv#@Xp_c)4VP$R-$aO`jX~hsaClN#!7bO>qgBVO80s~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK=-1|6raS({L&Hz ziVP}D2O5+EHb^f6=)%g}B#`ThQqzhdbWS3OE-p$g76&mHZ~f(B`_Vt?F(VTL6G#98 E0I@|!4FCWD diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QGroupBox.B9BAA2414EC9EC9A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QGroupBox.B9BAA2414EC9EC9A.idx deleted file mode 100644 index cbb05981c7446354d19f8bf1551186bda8d6a604..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmWIYbaQ*gz`)>~;#rZKT9U{DWD5gvaY<3;R3HroX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK=-2j(gLUa3I>Xd zDNF|$laybfmjQHLWo{D4WksoJ#Sl6t5kwakB^Qf>7)&4n0vIDb4rO0Cmzm1Q!~g&w COGLx~ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QGuiApplication.40A6B5E7DDCCAB10.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QGuiApplication.40A6B5E7DDCCAB10.idx deleted file mode 100644 index c9543e2edf7f438242fc03615b9a1c43bab0fff4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmWIYbaQ*fz`)>~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBnl_tH%LKp^2*P>_?EoLG{XpT|J9 zL51n1nTZI4^fG`htjtXUxvnTRtr$Y*B!cMTqU2(6AkD=1Kge^PI7=xbBNGD?NCpA` Db<9M| diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QHBoxLayout.59B98A56E1270903.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QHBoxLayout.59B98A56E1270903.idx deleted file mode 100644 index f302e97521c768e31bfc7970eb997e01a9f09604..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmWIYbaQ*bz`)>~;#rZKT9U{DWD5gvaY<3;3?K~#X_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTKo6(<3ZKNv{L&Hz ziVP}D%CE=)o1>S(P+Xat1aezZYFaUb&PfE(#YM@*;vfbSh=2gbZ$7W1|GuBHnURSB E0O+4bZ~y=R diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QHeaderView.8CEFA40187CA5B18.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QHeaderView.8CEFA40187CA5B18.idx deleted file mode 100644 index 78a661b934661e186cc9f2b279c667e0002f11e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmWIYbaQ*fz`)>~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK#$bKl+>cI%+zuQ ziVP~u02@>WG)ON4=)%g}B#`ThQqzhdbWS3OE-p$g76&nyKm-IZmd#K8VVmlHk&%f3 E09^Y<6aWAK diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QLineEdit.4DF8C97A081C5AE8.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QLineEdit.4DF8C97A081C5AE8.idx deleted file mode 100644 index 4bc505e179db849f115a38916f81ad5748b47dfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmWIYbaQ*gz`)>~;#rZKT9U{DWD5gvaY<3;R3HroX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK%dOKRM(Wu5(bKl zDa-*HlL|COF9Ybh%G@N7%ZgIdiXn7PB8V<7N-h=$F&Me$rR{qmbN>k=69W@S00ICr Cg+$5# diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QList.43B29E3EAD15F037.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QList.43B29E3EAD15F037.idx deleted file mode 100644 index e0c2da33b13a9ccd4409f34c7cbd10e1de342263..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmWIYbaT7Gz`)>~;#rZKT9U{DWD5gvaY<2TJCFv0w9K4TD}8~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK;Oj7yztDtl>BlA ziVP~u1sYTiHb^f6=)%g}B#`ThQqzhdbWS3OE-p$g76&mH^%q30(UK}!&B(;S1QLJ% E0F0VNQ2+n{ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QMenu.DCFD8A588257C352.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QMenu.DCFD8A588257C352.idx deleted file mode 100644 index c9f9d616512881a8645e8006e8deda4f178df9e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmWIYbaT7Mz`)>~;#rZKT9U{DWD5gvaY<2TFOUX~;#rZKT9U{DWD5gvaY<3;WFQR&X_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTK;P87Qm4cs28v86 z%mtc~lvt#f0d!ksZW72{MX71U5IQFjL>Ct&7mI@!jKK#Loz@lF-(h58U;+t1004gl BLmL19 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QObject.FD42F5FB68E8C303.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QObject.FD42F5FB68E8C303.idx deleted file mode 100644 index 5e661ba0e0b0d49157a156d11a0af8034ce1fe02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 228 zcmWIYbaT7Iz`)>~;#rZKT9U{DWD5gvaY<2TH;@K{w9K4TD}8q;Jba7E~u{emqC@8x7+}*r(YepspCXfIG007^fKePY< diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QPainterPath.3AC546BDB95A3F0F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QPainterPath.3AC546BDB95A3F0F.idx deleted file mode 100644 index bdafde64ebf69e1056b48a48f90748cdf986f628..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236 zcmWIYbaQ*cz`)>~;#rZKT9U{DWD5gvaY<3;WFQR&X_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBnl_tH%Lz<|Weypq(SfW(pv2C_{l zEP$9&05nA}1L(HO+$4~@ic-^xA#_e6h%PQlE*1wdm_P&=Ffsb5{*#bAusVj3i2(pq CS3=tW diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QPushButton.2BC29870A6CB475C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QPushButton.2BC29870A6CB475C.idx deleted file mode 100644 index 9f48d480f5d40d1dc1cc508c5b6732c0bff063a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmWIYbaQ*fz`)>~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz<|=?45!kPlKead ziVP|&02-78Hb^f6=)%g}B#`ThQqzhdbWS3OE-p$g76&nyKm-IZ{+#jJ@=s**dqyS( E0F@0#)&Kwi diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRadioButton.A434882CF2D0EBE4.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRadioButton.A434882CF2D0EBE4.idx deleted file mode 100644 index 98e13393180bb59195e8c2d394372e0c90c909f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmWIYbaQ*dz`)>~;#rZKT9U{DWD5gvaY<3;Y#EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz@WsG%zUTPl9K#9 z28v87ECQL71U5-81L(%e+$50uic-^xA#_e6h%PQlE*1wdm_P&sFdk@#?SJQT=0777 F0{|)`NF@LO diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRect.6DA68D4D1D3E2990.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRect.6DA68D4D1D3E2990.idx deleted file mode 100644 index cde019fc0fa82f3163f011b1a5e9931cd998d716..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmWIYbaT7Gz`)>~;#rZKT9U{DWD5gvaY<2TJCFv0w9K4TD}8EYr=%!~g(uu{{p} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRegion.130B003E89FE9983.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QRegion.130B003E89FE9983.idx deleted file mode 100644 index 25f679861acfe1ce7f3cc5b4ea0d448572906ad2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmWIYbaT7Kz`)>~;#rZKT9U{DWD5gvaY<2TCy)k%w9K4TD}8~;#rZKT9U{DWD5gvaY<2TFOUXu~;#rZKT9U{DWD5gvaY<2TCy)k%w9K4TD}8*#;CAgALHj u0J^9$HwomLqSUlv2%VD%qKk`?i^YL76XSz$2AlBA$@3VQ7??mZ5C8x}KR%=Y diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QScrollArea.C483AA522C6CD262.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QScrollArea.C483AA522C6CD262.idx deleted file mode 100644 index b9b55460904fa04f6bfcce7e1dad5eaafa1c62a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmWIYbaQ*fz`)>~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz~JPf{G1%eqSQnN ziVP|&1{;(JG)ON4=)%g}B#`ThQqzhdbWS3OE-p$g76&mHPwwn0bZ)q^hLMSZ2_ygk E0Gi}RvH$=8 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSize.40E81C35EAEAA1C2.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSize.40E81C35EAEAA1C2.idx deleted file mode 100644 index 122b25d42f0118040415772f22e9099d821531d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmWIYbaT7Gz`)>~;#rZKT9U{DWD5gvaY<2TJCFv0w9K4TD}8~;#rZKT9U{DWD5gvaY<2T2apDXw9K4TD}8mkfWl&+0eTq> r#g(~9Ah#5yrWHfzoJ0^^T$Efa4q`BY2nb;Om!LoYon_t!MkWRTnhHN~ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSpacerItem.70C1D6BAB0508458.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSpacerItem.70C1D6BAB0508458.idx deleted file mode 100644 index 6ce48de69ff76a8abfa5299ce80f3d6b2c509977..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmWIYbaQ*fz`)>~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz~F+!qgBVO80s~;#rZKT9U{DWD5gvaY<3;WFQR&X_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz~F++Jg58$28v86 zEC!mAlwYBj0d!ksZW72{MX71U5IQFjL>Ct&7mI@!jMeG3UZ;QC)i5$KFo6Uh005Ss BLxlhU diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSplitter.417D2DBE07C04B3F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QSplitter.417D2DBE07C04B3F.idx deleted file mode 100644 index 458c7b22b936423cb14da4a9cf3a7305640c97c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmWIYbaQ*gz`)>~;#rZKT9U{DWD5gvaY<3;R3HroX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz~F+M%#xDSA_j_# zDJ+H>qn816U1e?($Yn*TX~hsaClN#!7bO=~;#rZKT9U{DWD5gvaY<3;d>{=5X_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz~GX^ zvkHqLW|f1@*2@68vobdc~;#rZKT9U{DWD5gvaY<3;R3HroX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz>w6664#W>5(bKl zDJ%gRlL|COF9Ybh%G@N7%ZgIdiXn7PB8V<7N-mZFF&Ni1c&y2J93scW#Kgb^5&;7M DLeWH5 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QTimeEdit.4B41D1477297003C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QTimeEdit.4B41D1477297003C.idx deleted file mode 100644 index 11a1cf3fff79e20a0b912237eba512ab12169aeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmWIYbaQ*fz`)>~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz>v(`RM(Wu5(bKl zDNIQ$Ni6{yl?pUUF9Ybp%G@N7>xxp-iXn7PB8V<7N-h=$F&J56WETC6{?g0H#J~g+ GfB*n|Cq?1_ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QTransform.624B53E37B6109A7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QTransform.624B53E37B6109A7.idx deleted file mode 100644 index febd8c5852685acdd909543126dc3eb34ea42bc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmWIYbaQ*az`)>~;#rZKT9U{DWD5gvaY<2TKad84w9K4TD}8~;#rZKT9U{DWD5gvaY<3;Odt&gX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz>uQUR0xNGB7+J` zfCiO=P1VZ)y09`g3FNw>)U;v~;#rZKT9U{DWD5gvaY<3;3?K~#X_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTz%Zx$3ZKNv{L&Hz ziVP}D%CE=)o1>S(P+Xat1aezZYFaUb&PfE(#YM@*;vfbSh=2gbZ$7W1|GuBHnURSB E0Ps~uegFUf diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QVariant.94E74B139BCD44CD.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/QVariant.94E74B139BCD44CD.idx deleted file mode 100644 index 1cc0d30073380070fa59d2efec5d9f7886d5223c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmWIYbaT7Mz`)>~;#rZKT9U{DWD5gvaY<2TFOUXGKdj+ u89-N6<|ct$RFs-l454!pL3D9Za~;#rZKT9U{DWD5gvaY<3;L?8_YX_+~xR{Hw-8Tq-X`iZ5*C8>EC ziA6=JIXU`)CHiK17J3Hy>B-6QW+wWXdC57YDXBp5@XVC-)RJQTKnR0@B0~zx!KUeD t09{s@n*?%IQEFN-gw9C>(Zxl{#o{0aW5X7){^YEcKNy)9m_Py$008rbLjeE) diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__FILE.h.3324F85E382E036A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__FILE.h.3324F85E382E036A.idx deleted file mode 100644 index 75c27587527dbbf19e6ae9120f07f8c95809975b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmWIYbaR`~;#rZKT9U{DWD5gvaY<389gqftw9K4TD}8UpuWIs*d$i##bO diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__fpos64_t.h.23C43F442076149A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__fpos64_t.h.23C43F442076149A.idx deleted file mode 100644 index 6767a6d7e60a541041191f572aa7a2eaa6bffac4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302 zcmWIYbaPW}ESb29TvD|FNIO7)X6ON#YNDhpDJ^)eVp)S(|ApH`4xY-SQ)LYC&-q~emq zl2own;>z44kgJPQ(~8A`^ugZ}`YXSjlwjmyV&q_y1$zi0pOXlpi;I$rl|c+(D8K+S VjKRRbbYcfboc!G21|~*k1^`tKQrG|h diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__fpos_t.h.ECFBE9EEDAAB6648.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__fpos_t.h.ECFBE9EEDAAB6648.idx deleted file mode 100644 index 75b1c1f5b3907fff5458a0079f1db02fecb6c827..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 300 zcmWIYbaPW-WMFVk@vO*AElFfyU|}ESb29TvD|FNIO7)X6ON#YNDhpDJ^)eVp)S(|ApH`4x9A83~*4(7xlEji! zuz`)>~;#rZKT9U{DWD5gvaY<386Oaajw9K4TD}8xNvTg<8~%l0rZ005%REG7T| diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__mbstate_t.h.6C32CF66236653D7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__mbstate_t.h.6C32CF66236653D7.idx deleted file mode 100644 index 9ab9fa417a8f4abb0f8347cb0f3f58d0762c6010..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmWIYbaPw4z`)>~;#rZKT9U{DWD5gvaY<38Gmr*@w9K4TD}8~;#rZKT9U{DWD5gvaY<386Oaajw9K4TD}8GI?jy+A214Ws*7@0Yk#lRK-2_8l^DK-rlZ}+ryn|>RmR5NlhGIB7=z=VrZa}q)9 X;-chYZV-d<+nj|4N%E&JF)#oC*L5-2 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___gnuc_va_list.h.43B1F3B1D6B4DAA2.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___gnuc_va_list.h.43B1F3B1D6B4DAA2.idx deleted file mode 100644 index 37c4bd5e0db37ecb9c50bee822329ddfcfe98997..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222 zcmXYrK?=e^3`M8tLh7=hr_kU|+zNtA#jOnEG`0h2i^){fJBSzY6dpp?u04cK)j)WU zpGE$1KAYW@Qqy#PDA1dB@Fc8wcBjDaY#reQ0P?CpFtvCrbHj{8u<)>|Dv}^mM&m06 zavMCLg`Kzm#F8nqCWoJm#^6dzb&8<1_|$Nwwa&`g>b=qA#1C^N$70ibXWU9Z@b=gx gm$)^E;wbLKy>GGKolHYvE8Rw->zUWDcju|p2Vs6er~m)} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___va_copy.h.F5C63B16CFDA2191.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg___va_copy.h.F5C63B16CFDA2191.idx deleted file mode 100644 index 7bd0f743973e8adca528d8366fbf32a34a77bf13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 218 zcmXYru?oU45Qb9_EOinGeE??^-82(U1g@&vUeDPeEnsFXBLwwll? z4Kj_WA^}$`{)v#7pPL*yn=c^Eg)CwM&W(*xpE>6xa-lBuEOG617B$V9PG;#tY% f@Sk4b1%5DWpX%-s8yYRlpb@Y9e%{l`=Ec|#3M4;? diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_arg.h.52F08F71EEB3BDB3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stdarg_va_arg.h.52F08F71EEB3BDB3.idx deleted file mode 100644 index 2e2f493194cd9c6defa4b2ec9e924eb9fb2a8534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 zcmWIYbaVT|z`)>~;#rZKT9U{DWD5gvaY<2T5s(Ihw9K4TD}8~;#rZKT9U{DWD5gvaY<2TF^~p>w9K4TD}8~;#rZKT9U{DWD5gvaY<2TF^~p>w9K4TD}82yN?~T>8(0}C!3M1G zAMh(hxJ`$g%dEp5&I1TA2Bo=Pf!p<;qCCD3IrQYb)=#Nh|0~A;&{KI|?D5R(Idef46=g zLc-o49vo~M^Z{akDB1;wrB6G`C}|b#7r@K!>r%ZvHi1s|lH)BKwzODd?__v8RB!q5 K^BKS6HNZa)-ewyB diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_null.h.9C59159E32851BAA.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_null.h.9C59159E32851BAA.idx deleted file mode 100644 index 44747f06f2d614ec9eac6a9d23b52d57d6e88099..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmWIYbaT7Kz`)>~;#rZKT9U{DWD5gvaY<2T0gwiRw9K4TD}8Ys{(1++H(a@W}V%_#KXwR%P9zU m4v^qt6yXrzf$@NAf$N9*uWs{bU?ZheJ0sxXCLr|q<%oAk{62Y2bTNGrS_y!dh z1}NR(2{jy9{}W9r-#0n@Y&wTD*HlIbQd*88jAdRD9oR^oB(D9O?V4tTu^l_U>)Go5 fx>jD#8*~T5_Nm{UR6}dD?Kk3Go^|zE%7+kNfX6~_ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_offsetof.h.1EE6274699D52A78.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_offsetof.h.1EE6274699D52A78.idx deleted file mode 100644 index fa6d4e158199afa2928165be905e1375a71128e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmXYrF$%&!5Jfj&AzG+dcnb#$L9`SCDHZ#$Zf4EOCW|{0h*%0DA3#NKe=ceJrM2Y}oa2(lu^GMCtVro>r>I(1qTveV;S(6QJye?4j%1@0Gv)AMyP eQ77uPd;M>v-`&cFc_`JEQv2DDN4yqON%ej%V2=Bfi9}dO;Q9pr=F!z<;}Hx zKW+wQ1_mZUNkJtr!N3W2DkCE+Ls4p4u^y62MlOg7umT1K^}MKp!e^=c_`JEQv49tV)e9(aT_fFo15U%uP}RI>f~G2-l6uC=qT3 zW(Ec(K`}uYFu}kHb|fPsD??FgTCok1N=7b-3a|nO2J=h#>$9dhzh>fL;^pNPfr>J4 iG4XTo^TT*R&m@A_#YM@*+#m*1(q{vf*%~2#7#IK){Y#ku diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_wchar_t.h.129FD7EE3A286014.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/__stddef_wchar_t.h.129FD7EE3A286014.idx deleted file mode 100644 index 5d83ce0c9e21fbc947d44961adee4fd0cb0e63bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmXYru?hk)42CNR4vxNu!A;!cM7U9LFTFPB6>?Whb9z3Oo0Bi$;^Ww!21364L%tl# z{r;(xDqK0VC}x^?kvaVQ?t5EhFJnEvkVGc$k!_r3m^?nS*LAyl GEA<89pgO7m diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/algorithm.1CE1C5E7A2CC8947.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/algorithm.1CE1C5E7A2CC8947.idx deleted file mode 100644 index dec5c51c1e4030b194fc209beeea7942622cd8e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 436 zcmWIYbaPw7$iU#7;#rZKT9U}Zz`!63#Kk2=nIC~P7^G$9q+03g>z5W6>1XC8=aiL;rjIRTNrp`m_aPI`V(W=Tda0|A9enI*;g#U(lMART%cBq>iyEKVh?r2uHUetJ%6 zD%c9JqvBIi(~1e}EG@~*$ttG)68)KTbbYaDV`b zH&5&NYOPJ51BJbKymVl~GS&KeHFy8L0}7jSm`lNgfu`jof;h!R$;H+n1`~*Y0LBV| cvIC#e9v)(0WoBYw07U^5u)-J&49o~700TsCa{vGU diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/algorithmfwd.h.7598BC438C9F2E18.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/algorithmfwd.h.7598BC438C9F2E18.idx deleted file mode 100644 index 1c442e7dc73b4f80fe40af893a55f62c4874500e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17090 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 LP4zVM>vaDC#9s!3 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/alloc_traits.h.A03678EA5038239B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/alloc_traits.h.A03678EA5038239B.idx deleted file mode 100644 index 8daa7c320bbd87119a6f1d5662f6277d10664758..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 708 zcmWIYbaUIo#K7R3;#rZKT9U}Zz`!63#Kk2=nOQ&@4AL@lQmyp$^-GJ3^fU94b4pWE z^^;YNoPbE*&`>`qv!qx*F()TKIliPQ5y;WYU?89+wW0)FM{#9t63Diq)U;wIpo^YY zcJi!O+$qAy!(^^#t_^Vs14CTX`z)m2QB#Kr?{B>BP%e;F4-~diw9xTP*64r{=1~B2@ibmV~ug*BY%){iz>!%14=3$EBjY8rj zb0^Eg@X-!v&xpV^w0|p~=G(ClUt_t;-*yYd4vG zxdzm0p=hB2)7$N|p;Ysk{4JnfLrz0Um@p5MnV=cm6~|8KaV~chdjQnyDe0*UQqSTy3kU7Og$;IGUVcPhkE7Xqlc^V@l10&1^ G1_l7v@{be% diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/alloca.h.793370BF9878CFB6.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/alloca.h.793370BF9878CFB6.idx deleted file mode 100644 index 06d8cee8bd4e8ea21eb381f6fae88d6a340e8764..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 618 zcmZvYziSjh6vy9Qe(jzKVtzpqaL1UyC4n0PDdb4}LF6EnC}LqFv$Jn+2j_NiW;VGP zg8m0eKpP8fLTuDh?F^iiHg?)r3V{R!8%t+%w;_cC!+huS-uu3pcWbR)4@v;5;aaPS zhV=r#h~3&KvEW#dugc8UVoi&Oc+Zgh*q(#Rsp}jpGbvNfs_|vGcB~8%Mgq(36B9E- zHiVQUKoTj$kZi=5SdN6-I*~L;lqKAVG$Gg$Mpp@ejv?^c{5nKJVvSN7r%j|R(*~26 zDTPwfn}*&_Q>m?3Rme=Ls1yOVkkbc-cL|p)Y2=)C)Z!&75-zh4sWxGVQ8hm4k!f`j zEI#$$U}U>x3bn0WPen-P?aVft!38_6FJBKo-Z{VbZV>v8#|Pm0L;eVOC8xLC@AUM6 z!bpFxvE=Fg%k~Zhr|gcq<73@ySXyb9zi-|hbp~C3%%3X!ZoK&Rvt9o)W$`S`o++|_ zA8tQB*gf*C$+S0pw!nLnl_&jgMjzSi378lvaAD?nokw+fdbIp}i(mbfx18}8ifsSc ur|bId>%Z1}*d0DsU^{!3YpuAxm<#vH=Yv=8_ZvS--T-(x>8yc50Q>`DJE`da diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/allocated_ptr.h.4C2F2E5344DBBE09.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/allocated_ptr.h.4C2F2E5344DBBE09.idx deleted file mode 100644 index 45e74e91e7fb1a165aecb8ff597e9589810680fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1136 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 ZOvRYA`Q0P0)eOF|*e5nRhDEzE{{wOfOe+8Y diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/array.F4CC01525F44E658.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/array.F4CC01525F44E658.idx deleted file mode 100644 index 931c68659d821b93d6c6c0fde38130217db32b70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10946 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 R3`k5)>Q4r!Q_1Sj{|4QZREq!r diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/assert.h.9895EEC17E1D2A2B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/assert.h.9895EEC17E1D2A2B.idx deleted file mode 100644 index 1e98070c2c381181baeee8ba40e4449b69d12d6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 534 zcmWIYbaUflVqkDi@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`iaHGsYNAv84TDY(^3;lN{dp9fzk}cmAOeEQ;Jg4imMnI7>uV+FWDNkmV=3hQIuU& z0Ad3J0~ezrhoT^ir}c1Y*~cU9e2iR-(Ol7RMgFrd-aF#af#*M;A$ z)i)^sg?kuzdKe{O68l%4-1qiEgAp?iql&bO227ZTv0l0!nP*gQ50mTup2jNM^)?*n zJZTPTxPy2Yi#dwnyya3F{cLMR>VXzIGC1R=dg#H#Kq{q;Q;3qrRF4p3@a{5E|vr_fbk9kjE&_^3t3Mo Ly<=u#VqyRQ3_EEn diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/assertions.h.1D646B13C15CF849.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/assertions.h.1D646B13C15CF849.idx deleted file mode 100644 index 0a4f58295db249b0abdf2fbee2795842931dde69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374 zcmWIYbaTsNWMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl(npB#upIBU+T2zvmpI5Ax!GKLig@swXnTc*rW?pH9ZhBrRvJpv{ zCB-m)a(-S~W;)Q2;>z44ko`reX~heH^fIlAJB|ly*crJPbvSiY!A=7bYwrC>5)av- z02G$xkX42W?_!-L{Px`x6`-&(r?MPOIFI8MIL3C{3aE6`ug_4j-4MEnHT_a>s1v1 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic.659F85E5DD2BCAE5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic.659F85E5DD2BCAE5.idx deleted file mode 100644 index 4a4a0c65d1106747dd8075a50b53ff985905eeca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37530 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 O{iHHR@reKMzyAY7`BHNL diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_base.h.BE2CD511127AE324.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_base.h.BE2CD511127AE324.idx deleted file mode 100644 index 537a916d56c2e6a3eb1b4555af47885957af5b4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8948 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 Kj!~kd(tiRN*6i*8 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_lockfree_defines.h.2D8FA2BBB9BFE893.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_lockfree_defines.h.2D8FA2BBB9BFE893.idx deleted file mode 100644 index aba0a382ce8a381334b1dae733ae462547b16b9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398 zcmWIYbaQKCWMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl*SyHT@SdyQcnH-;!pPZdml$si!lA4y8ms+fs0W_;JHwk1;QEFQ8 zUmz{{evAA}24@aNE=B_m16i;YK*C9XvT~}Tg)UIohQmeyCM=xa)vRV6tp^k~<1kZ% z3D4baALH8GKsjoMudzj7N3=}rxFoX+B?Ok?%S#<9~ zps*Z=oHEQ1yX|G{+3A}9fx_k-=5TidLm?*-q^7tixtJToV9Z^*&>-ObWl07G0G38r AC;$Ke diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_wide_counter.h.397D66B6BECC0AA2.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_wide_counter.h.397D66B6BECC0AA2.idx deleted file mode 100644 index 401dd2fc3882a49fa150f57da85080aa07e0de16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmWIYbaPw8z`)>~;#rZKT9U{DWD5gvaY<38E06|*w9K4TD}8;xG1@p8^mBV6J7B%?^gI_1_l60HZ1D^ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_word.h.8B32DB244716470B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/atomic_word.h.8B32DB244716470B.idx deleted file mode 100644 index d02710d1f49245b4fa06056325563d35e98b4983..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 218 zcmWIYbaT7Jz`)>~;#rZKT9U{DWD5gvaY<382apDXw9K4TD}8SgBXm7D+_fRW~Y`hFaQ8Rg;Oow&V*k&985LskYR+#t8urC{gYTA=E3j&enq@T9(fo(jd&<^zQb z84BfK!nR7!4o>;BVg*oGPf|}4CcMOUXE?Kv?G>P~ExWBeOjzt`|KI;pIDY_z4LA&h zV8TFu&2GBFI3O#ex8*!O-M{h|CZ3&J9yDeP)!5W|Ao z?~)`z4haq6(0ZRo6kHKGRNEkjg(jcu6~bbj7#4$WQIN!dD=7Qi(sX)$NhmCc8(e_~ zzc@{B1@%L23aq6}B*|AF6g@&QC3J^^RDQ%QQ@Ac13QVR9WUokhOA)^;gz5yBP!|ch zWnU;LG+&6?^k)CwzX7IL6ReNboGWJevjZ)>{FES z`hp&nR&t9$QB_}H<`r%(Et5A=3RgfBo@^+6ref?j1rCUTPh6@g(-Jg3_D63B|4R&>jC1IM|`s6l)SF6=uzVP6%Ry$zQ&07)ed;X zwUK(Kx_$xo4RdDK&YtP;`+|`Tj{0C^j7f@qF%xOZ)cNWulX_8RLNrfZGEF43^-=GZ zD&GA+D%G=!FGs~;4CR!OGY=@%VPWKI)mAE$zwQQV`}tGUHU8v|>3TH(*^Y!%v$r!eu5kj3yd<{G=Y zFo~>E{=_uy{^rfAI@j$;O@n-a;rk)89}1JM0J#E*OoGxL80Ja7C!Wl|mS%<2Y=-Y5 zY!|V_HYBMj`$eSURBF_jHetL*+z@HAbO?k^y}9j zyE@+r85BK4*ddY_+eS!^fo&yodC>$Ypd=lH?I7{74M`pjt=_Z$=6hA?kU~jXA)ytl zu?3?~!8$zwsX^@%6@O_Zl2YHqYKrZOs zkP0$BIPs%-E3A-4#hfGTIqD5ZSffhRb32V~~6d@?sm36fT~2|AnmQ zBUYF|xwHV=0+!f@Byqj3y%l|`y2%RZl;k>LuMa->$UL8g6P2lxqVK2)d3CNoX~9Ll?Bm1zEG9_!++gBr=(9j{}PyA z0()#@%vyH*VSIAN&vyUjqGm~yuufvCVns2 z_d*JW56dgrtd`Y=U4Okh^=SGwPW3S&IW^fwK}n4hup&6s-8!z>)|`Pc;rN||-AOFy zVUD`h8YSsEe3&F0CRVhZqvqO=kW3w>Mbbf%bnaSe=HM#Vo^&eqS!^9XB;O z-!LN_C)8$TmSEeSa&J$|jYG2v4fEf>Fg29-=?RBnMo(|Ox2|C8vKcg`iaPqtjM$3Gm-jcDJ});c7TZxA$L}I!7h(05&`#poNdmS2b8L*F1}kG@lq#mpP(?At#~%XQAsxo*qSD8f z7xrO_&_*n(b@7RmuFk<%R~U9>Nk2KbsJqN%n9;Wy4}5cJ&FVVCj3#efP*`+g@;aJR z6D<=*nj~H-h>Zz}dWNaNm{c&Vfe5f-zdu+1iB!osBn7PLTtm76pYU|~?#j-A1HJ);Qa zT86GG{d&zbTUGi2!y00&D1YT%hy0iK2R6@-S`QlLKOnE@`+3KdcEgOGVm_)&`A{~_ z=(#-)mkH8Oo~Kzg2+SblV){Iml)3Qpyq(7ltJ=KY|GW0WNgY(eQDBe4M3lf4R~EkA z_1sCr5;|U9(gcV5Pa9@b`P<%taK?@Z&1Q+ zLb{1<#3p(pCg*h+yAGIR?*N^n_B_CYiPKJBY+kqUZNoNXeEZDYq1NRWztjdCf=ZF8 z&k)S^xtFpttNxtzo?%t07aUj|*S6d^qwhFcJq@?2E*sVepH^nG`lLdO=>sImn}yAV z<2wo4N$hx)0&OzvdGn58H>^qKzyHhPUH1$#LKm3KvF9bK z%JHv&^A(t(r+X*ZIw3`edmz0BvJig3^J($ZTaOIWtewTq%EGGP_~XDHhY=WOCv}bX zRz-Pp4qCT;(D2584O>M2|H`FEm%?sI?NlSB%`jF}i(&ZN=c-p<_)l&L*sRR|0HQ$G AKmY&$ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/basic_string.h.4F91164A9845D8E7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/basic_string.h.4F91164A9845D8E7.idx deleted file mode 100644 index e3268a14aa1b45228f9ebfec8738b76834834d4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78488 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 z zwn)zbOBw+l-t6HmFs%?!8xvU@V~0*eKo6coa5dvTydkJ>2y%Q>;N%12ZmxUj`2Xdd zFz}ACM82&dsmWEr6QXTjiYNMLRsp#TH}gR&eb6e4mEp;Ua$}pfpY%aOGMNrbrtJhv zcbjh1HeC!ss9mHVwMZXB5Ls&sqiWD;!V1?jje9(eiv{{0uw?OjFX-qCO2kacuzys1 zvHsmt15>o8DeCvxW8p8iFF(~^QxpPJaUb6Dr*A2a%WBp3jbpo(SM*oS3QJ>$&v>!9 zVnE#=Q1|;@-Df>RJuBbq?6=W>GFiGj`Y%tP#@qdw;>?M#P9s77yOF;eOT_n_RM96@ zbH4E8XaAwec&V434#ao-s}fl{ zQSl`M;S28^8YM%cM863I7LN%mEeg8&jFU4q0C**KFVdy?cJfHjhCjl=@c3B6^lWM3;e2p~<; zrAaK2uQNlkXGjhL*d*yTNi31TbF*aMEI9~ZtEAg1u|!7C9g=;A(cU6DKoHcP>6me>`D8VA(43q|5SZED7B3Ro(CW#pNub_eRqqAl1gLTX$P!Dfs-;#L z08=}b8Kq{r)GUYfzY`Ps@VH7xpdtuCt7#eoY20c|czo6AN3?Jla_#Svi@cU+b` zE*k-?6R34wVHN8I<9Z>Gh_mnr29GcV{6Xj~S%NW32qb{Lf?=;Pgb2LI7L3_KAORc{ z3ljWum%F5x{WB6gFiS(R9(zn-nZ^@s74DA3Rlu*Ofia&^^v5@H->mBF|pr zgMn`L(InfZje~F0^^pY!Vuf*wtkE-T^s>2|xzf^IKV@QlA5~;Xe#}RYrOv9yO;lhF zEwDy_aR~vH*6>QJ9S-<`z*=1AdnR;gVaoyjG5pPDExlPW-a~{Qw*TICQn#J5;}aPZ zz4K9)z4A@waB5q5uSZ&(Pm9 z7UC427KUzNEa0bu|8WIxF!T*Z4^M||19*M$PDlW0dhk6SQSDI%ZOx6q*VbQOaS6w1 z>~se0blQnwmFo=3^#bypLHP>s!K`09Jq4#P{SVq3RAF3!8c|)N7{qJxUmf%6_MFR+ zs1b8iF*zz1{2TS5Jt($7_{ahGexK&}RK%LR?*f`)?B3<#*wgjH$6 z37}b{Y1UBCSg6ERP1sdUI04+(1l-qH!9gG5m3l!3pobDvk~Au>p`zc5daB z{!&sR-j66dcYbHnfP&wXg1=z$MT7ME-sXXp>Zzq5ZV;QI*18RAy;2MQ2oRd^CU?*# zC4dhC2=PqGbyK;@#uie2;n`IwswogYVJ z!EN@_H~VoA0fk0afxo`MpCfYICIsjc0ywWDK=t(j9Ff8HgjIjS%E1l+J)_a8Z?tm2 zh(|z&Ro`LdAYtumex{GJN33e?oe>H~oJZP*j^3)w)!Iw1eYG}VavN5=k7$`ATFa#O z-^qDmxAj+uv(u!do3yeEUFEB}HS^_+HvACpyl0SC3J=i&9bKTfzrX38;JO}@c9TQj zB>2(^zOuCdy{}q$s#oIyaX_*AX<9PBC(a7i3@NsJ{7?9Jl% zW-$)5I#i-X9N!|wfn5y&x5OuIiIWHe`+afTeKD3Wuy=~%I>lJR!2Yo`{$nW)4D4V| zz+9SEZ@et2U@Msxnlm$gMXhgDAI=_>8`i|I(Gu{{n_- BX0HGM diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/basic_string.tcc.967E4E5D61DA5282.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/basic_string.tcc.967E4E5D61DA5282.idx deleted file mode 100644 index 888033b07180bc71e3b54991a752b1a855a07ff3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50864 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 L?cW{-r3?%J&L|~6 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/binders.h.B7909204B7953DFB.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/binders.h.B7909204B7953DFB.idx deleted file mode 100644 index 3f91ef43f44cf8f873853436aeb54b18dc539d24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3674 zcmb7GZ-`u16@Pc!Ot!OcXWwMwq>`f7n#37*GSk^wt-~@78`!WY4TOlG(D3HXot>9` z^WMw5@9oYcU6WK(D1`)?UZ8@q(YEV%Sj2O* z)nVPWC`dwWqRVoL9`kI@8PBy`U#)i&--!e4$)zrw#!2K;X$LA^(;jrwje9iS45%Hg zC4J_{oVtD-C|40edDxUAxW`6r70QtTHfsALBgMuxe8SLkS%-Rd%%WS zS>&wHLKIK$9%#;7GoWRMGY zDkwwN5|2BLM&I=lzSQ*sJ8qWBm3sBjGUS0iNW748$`z1r_5vTFRs$ks??WmYtQaLTFj>jDy|4} z()J5HLE@oq7IlNDPnTG~DKZ?TgQXgtH4UOO#}xNRHzQ0Y8~1=y&s`r)o{*6pLGFIc zaN%?b36>3IFIDy z$pZ%AdI3lRZMpkUsz!|GM~Pt+5=wZioN5|9Z$n}jr9PA>=;$UM#DJ#23Q(X&9ik`= zmN4M194$R#s9Vl00*y?P=ne}b=HR>%{L*6!3-!9xMS7k@Ec9##i|yh4B+wG-1$Ie8 z9Mu~QK@D`rw@Ox7V9fitDiI9-=#-{=4lCqR3+Yx9ThL`?LB zw$6jn6TUcy56kh>(&%?WbHaFfmvy`yPrEk>#;_yR!ewPbA884I;`d# zUR=gstzNISZD)Pcjyg3(6tDJ-AjF^e$s)d#hNNCyl?%#fG$swm2!s408hqGq-y?=` z?d6pV_cFgYSobKRT7q6!sfdSP19kMKAyOXFq*o z@cGxfSVn|vq;QSQr#J0#_$Ld+C!eT4Wo7okDUB0k$&mQF6=k{i1=MC!$ z$z4Gdbu(tNQ+o}A?Ah}h=gozG{QEms5eG8@*jpyV= zFTcI-`1&u6uiwaLida5dJNsFA(aTe(lk1)1Z+uS$zmUCPvr9jJ`m!FMv^X z)5#*%o%>8>5ZJG*tE{g zoh#^mnASxycaan{g<28_q4c0*o7PP-eUs#La?{!-bK9h#%Q3CnWbQU8Xu*_+Up#d9 zZutzbH}lO;YV3L$*p--ce0@h^rJccZfBO5viw}O&{6LYW^$MAJh3p@7#Cny?zDkPv zT~~$-LS~u-T|Uf0UfQgcg|tFe+6>AH8%4bblnzkg%H`}OvrBj3-M z)+Lg?L_VdHn${hXy)%CQ=hoLQ8SmeF9gg0tcTguct*d1ADmkcW*CPN>O8~ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/bit.2A91B049774121D4.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/bit.2A91B049774121D4.idx deleted file mode 100644 index 0186c868d605378ad3038953ba9488f505c7f52f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8214 zcmd^EZA?>V6u#$e<;zl00THN_ma-yf0Z|J&zTBMnIaySso2-_CMLKyrA)sNAp~z&$pax6k7i5|4qPyHTxj)Q)EH}+=XxisK=cVVK z_c`aDdm0hJ-m3n`nDi$*ZR40P z8R{gRpBF(?wSSfV!+kpfxKN6GOObTj-rt`1SG(oa%U5@a2hS6BTu=ll=1`}(pbgSu zr~vo{;6$^{z;DL!P9)lid}ux&@$(U8pO4)0ktfX`L;Pbjzb^c&@1EUUTZVU+Wxf7G z_x3S~HKD@57e*70#{-4ELhv^31i=HXy%s|yU|#|lHUi%WBHG#nd=rjaz`g~yZv}oU z&bI--4abkc{xNPp1pFbKw*cRQ<8owQj>i4D5H)w|-R)0!JT8=gxCA70e2gG9!b}>Q zKx)Eq4Y<_6G@5S#aSOh_6{M}WeH%#IaNGed9r*gkAbyOm9|GwRZf^mp1;h z9NtiHd-5lItG|%zYme2|j^1SW8*eNS7Ekb> z>dmmf)wx+()Y30zHDgyTeMKDVe7hW%;31zt|Igy}yKo`QH3?L4TjVtng*Vxbzv zcU6t`OHw7)1tohXV_lHOQG<0sS(CD`&ML<-2jdI^1J+s9fw&HT2JHrMH;zX@Jc460 zT4+Y$RMM3ey^0a)$`6qttmF`toEcOQBg*`JJ?;nAu)6cDjs{(P?Jl#`C-ZGt^YEg3 zZYTcJ2S1)P+NbSI=?R7chl{i4i*Y%U9E>XkVJUdiE6YGo2H1_G0=z2#>y0X5 zMkQc3h=U+Hh);{Ez^e*`^#3~w0Y?FQ;BJ6P4fv3{5Qz#AHjOGoQH3a)UT;PMGs667 zM3WoQ6p9ZS9sKJ7C;Dfr*V)~YFIA5A&#zehg-i@+YTuC(*~Yj{$R=#E8C+R+oz;Xf zO8UEM4(K~sb)xxdxUXu(VAuaPYeTy{-Iw-w{KC-4npu^JTOTa#We_Ft!&>Q)&^uP2 z9(@-S^A*RM?*FUd-MO@bdQ^0Ih!K{K&B83(*hmYja^4)9F#F~o36?ig7hyRXpFw^) z)p2K|bgzZsc0}<+{fdvOo>~2FZuw$#u;)tRORK+--fz>d4sTVCuqq^Zg;U<`t{0#uJjsySz diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/byteswap.h.E57FF553A16DFAFC.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/byteswap.h.E57FF553A16DFAFC.idx deleted file mode 100644 index 37c01bf50ab5321645741335160156ad2b08a6e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmWIYbaUIm$iU#7;#rZKT9U}Zz`!63#Kk2=ncYAd4AL@lQmyp$^-GJ3^fU94b4pWE z_0v)lOG=AUi}f-Xut`@~n8ll!=;mbRl~(Ac=auRwWtJ4{CsmfD7MCX$kff=kvH)xi zLvdwp639J8scFR*fb_0UF?ZPl?Kl~En1t+wJitx`5-SVO^eudytjom3B+DTy4HM>J zQsY#Uf${dQJh|`fg$5&L9wucLWkHxQ50ep#5faax#U0M8jVwG{8vDhDk&8*3LtFx; zWoqEsMYq0MPXbzJ#bJeHofoGU+`4nk&r_1C4nGAd(&o@cQe?_$3RhH=nv)1JwYVs` dSQ*4%1`!Ydj3O9d;(hSD^_y@QHxnZ>0|2<2W0U{@ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/c++allocator.h.00F4CFDD575112F2.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/c++allocator.h.00F4CFDD575112F2.idx deleted file mode 100644 index af1fcde443fd7d0b6e857662c784c53c57e95e83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmWIYbaQ*bz`)>~;#rZKT9U{DWD5gvaY<2T1CR!Tw9K4TD}8?R T?RWlRmQp?=BLgEu4TuB)y%s+| diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/c++config.h.A139A8B32F03163E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/c++config.h.A139A8B32F03163E.idx deleted file mode 100644 index b16373a28843c5eac3469b7a34bed00f80f23bb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9548 zcmbuFd0dTI_`vVI@4fGR&b{wlFvh-)kfpj6W)NeU24fpzn_;q*CbG2%$x^apNvWiW z$`U0@3MDC$5rvYJC5e(XN`(BLcV_N6_mAISzu*1P?Y`f0p7We@p6#65gpv04!_6d; zVU8o0EpYOfC6`Df&G5gwhntI)6n_z41LwGVI66Ab9VD6S;_B4j($dn?-ObWv;T%^_ zM<>fUX4XUTpQXWIx!B#q^`9Rz<}6w`*Tvc5um82jvhVxO=xf{C)n%dQvfj=MJxxW- zcJXjGe*S+7S?oCjm3CR^Or=!c+;_lYqV^0*{hyWE&XJ&fBQ)!T&PSHD%1SeL}Gu=|CQ^DxqH-a^w0J z``YxDA&AjHjHZhbI5-wowrNJk@RYj()2`)f{)AeJMsTni&`8ko}ll*HrWg*HZD(>5%-E}}1w;H(DD zYC0H!T?si+{PzG6ywbocO*J9vd%hLXK!p6+I1fEV$;L^2*bnS5CQ1!jbBTu$>(__Q+ zN?5NnX}D8o*r}rpU+QkGz5eU!Ca6=foD|FHy3D-Vrt_e1>!t{9bL2MH+bCLMXwhQj zA5EGexTA(UYPw+4R-O;}+kL4BHfvzBhKfpf;4`Hnz^@r9vxkR0rdl7?8V)n9b0^2e z#(uo@4N9m`s45hFjAMFbEaZZ$T$&@;poIEtL$D#5#lE-y5 zPRAH$5d0ftjNzi&8}EcwO}2MJP{czKPi;yUxIFV%V6F%@0Biv232tvcc6Ijj=#1b5 zzzLwnW>K@&*LH4JXVmhuLiJfe2N$@n3dL6i-L_kk#&_T2S=Rg()9GB&Szlt) z;jPyN1$=00hC@|ppi0x-IGsD$!`-I-HB|(KYA94&7{U4XttRajmYSjHO$0U(x@`h? zS#NV$Kf>5>L~@@wjnPL%39sbvN=_S=*gKA$Y`EVQfgb@sLKox*$L-Q~Yu|Q5kfebm z7BME+dnKiA%;=6|-X?I{bQ^E$4Y%1g-r3gk%v?vUIZC($a0#gB)YQOpqaw!kK=1_M z33N1S8L}y-a9o0a4;1}`hbN{6{#t8z%?!Lp{q_d~_zpc$LZAi$HJGaZeZ9Ex^w*ca zs(K+P;Gux0^R#VM>%7S#Tm&x(yd-pgn$D-C^dmc4Aczql zM(Ai9!v}(c+HSckf>I5XvcVHx>aw#(##$m+MwU@~Xk0Mb^T(K8R`~dyg4|PB8U@Ym z6+Cye;}4Wt@A2Y z&Gz)}had+a2WZ|hjDGi3`zb;M+oY;(QtIfDa|(})mCybjm8s#OhNnQ_K5DH$YH2Dc zTsgjEnwQHDDB+6+zG!GF&<(QaCoEqlf|GJ`Qcl;t`Gbbn^^P?n*h^q9+s5iH4Z7-Y zzUhykS`F1|+T%ikHf5`}R0IzQJRmf+cbZrJxN>~!0SGDxR4~i0J|D2gqWwe>co8pZ zwJ94DC*S7V4aCQf1b8G+W%av94hxV^w?nX=C+qoE#@+fFT2Qt__DKY}QdO>$MuZ6y zri`}O9{(ePBpFGPQQ$HzZLH7ZTOyc3rqDTz>i*_R%X6oO;Nz_TTiK>HJ_z`6owiN{ z_jtI+(;h{orOkRA^Baobg%VyUY1GO%tKX7&^u$oyo1tWAPot^=H(WlPT5RT^N7+z7MGfPMW&j*_dm zLo#wmMx8<6j>zOkWORcB?iMG%#hHA5DsTT(Zfl%;c=3Sm8_#zigR?5XqXV_-Vk8)swA*9g5poUll>TToo@j7`2||@G1JY^>*VCH1N>C zLfy!QuT93pUHJ_`06+kZG2|vrX5Po2>R2CZYsi zDe;xkXi{`}NxswCfg*?!Ac|Fg@2}i8t8>m2K@C6+OP}&>86P&9znO$!ofg(8BXn;h~7f-4GgML|>apsFX2qpG~8At+TtshY0sfb_+#b6fPCj^L3R9;xYc zzEygi`Q`Iq2L!FNvIGr8iKocfY^ zl+Mt*N#8lxu%3r{W@Q5Br?c_X(F!9~(t5eGzLg^mbzG`C&XhYi==`ZutzS5zgnc~h zGfnD=T0b>3;M!2+!oQo135qLys95qYZ^T}+;{=X2U5=bRzZKkWwPZq%!fG;f0Ejsf2 z<+Nc(MQ~FCH#IZ_dlo8)+3~E!s7##_>P(d>*IAb{WsK)zl<@E2*jU_tQ6z;6b4!+> zgfxIOQ~wUoTLm!x9<_UnOXr|{ZYZHzfNFsrEPo%LGJi&Tts6?X%EMLDy(-ljO4(i& zuYEVuX2M_(Z1_P5A54|4)LBp;EIOk z*_dxee|0#vM+Auk5?P8@-At%c@0BbSdnn70mhld=~=@e-VMQl2&E^aKmHTN~jc|lGRn2#fl~!)T5Rmcq}E4SqgU?)H(d) z}O}p z8-`2Xb}7S_BiN%Ldsuxa%^o%VwbS;9K@IkENc<4RVbgd05E zV8@;O9&s&`+AZ=%kfnhvw)%cvt0(q9R_~3XYk8Qd{Fd59v+%%{X}c^glSz>ZgcneuF%!k zu$VwGp|MopO7vDG%#MRc+UX0=B(BDxY5{6lrgPixX7w!Wf+!&jAj~u$uhARUuyQ!1 z*;z@xOY^nZFo=gBQw!OvHSA>;lI~eIXmDAnFE+fXgqx-Ye_v;PpBema_3WMPr!Vuv zh9NwJm`dEQHSA{+ZJb{9zxdr@vEg=r?WW%PUT5{5C8Lk&mc8fS`(qt8Jj}yk)AV*m zYkh{5)9}%1%#F_e>u@>32!xS=#$aT%JR{p~Q;G=ob7Vg|C)?!Dnr6SVP6W54aEl#& zeCMC@aeOe|A3?DOiZ%4sq9*mY)%KiS8xVAXF5;c&Kd%k35ru-+hK=}m4S_YxX@fSl zHWZUln-D}ONQ9!}e;p*|ugsipezQyjWeQTJpmFf$NWV*m(@u#Xm_RVA_c9ir>CqwX zrvL;8G;lyebJmbw?{%JVcd7_-1ju3GY)UODh`TgmGlHi|c*^qq+HE_=-y2i81;G)i z>Ij?ngoE#56zYPl2nv-@sHAz&$^Nm&ZywJ?5Uzx9Cd%WocmJ?H)p!EpP783F1-L)% z+7{;LIt1djo#)}asUcj`8m=)zc>cqnfwLda!_3X)Dj}EEHM>S%>s#2b*>(gG9Esp) zA+SWQIew%;N2;AormkDPFbe4Dl>7)I=3S$bXB1!;WDf($65ZvYAE>92P>xWzQ8|Obk z1ce+a#lj*bqT%`1AdFTF;-T1gn31!Segh78tG+)^v3PAx!3fOKL zZ=wJ zw~W`_WG#bgxj50-0IoCj1ujHy9ipcf125_dmcF^WK$LJ)2}hN*Hn!{hG&AIFoCq#U z$z>_cI;)nt=I!ayH6DQzaiS;L$l!^y`&o?3-$(B;@B}E^PVZ-MD&rP$~IlbW=%VIV9 zGY7r3tB&JPuEdqrMJxZ9RR6i(fs^?7Bo8NfdRS4s+1_#Bh1gRFe0h~GPnY-6_1S@| zoAymca7PJuSc$cz!Npr!WtoDi9OL1bX)w#u8nRe0YiZTacHND?#fD{aQYNR$2wauC zdzIYI82^(8C$yaCRg!{36-c3gh2WT@Sxrv7v%nJ$7pZ|r7Uo~6XL#+4T62!WyB`_Z zD>D%tE#sqEwJ&g$az&+_mJMfq)GIsuaOWIK+^U7G?5eutM)dNfe`TkmvRO*VG7VjM zI_o?Zy4s} zCd!s7Q36KVaJEH; z;rfk{?eB`sqjU%2_!dcUG&d^zBuyu|) zIscEXymvPCPmz%nb}_cl?sRI;$oC?^Z9FHX%jaw!y7WXtiyQp!h@FoHSG0R#j!G>qjjJaS*`<4QybyLvPX_4QP}k6{6^T0{NzghFrZ> zF0<-BXB#fwALMcyC0ysob&gh~$A-?64Lmlm2*D9098uD&n;9S5Vq9v72-a$0t(N-o z8SS$@1>2JDAb3aM9VFrZ#Qb@*#ru(4NkFW$TiI;~S@y;p1s!8r?*f0n7Gw z3Ow@&ABQR-lvO}p{&K$UxHo=E@M9-jfeY3dg4y+G z!E4K5Nt-%6MG46O$v_L+#hq&oy=avnf-MBLkRC>39fpwDg>Vid}dql#NMmV zo4W8S95aoFG}DZgqc!BPj5WzNb8vzIt3|eVqBK^Os(?wnPPr4c8M` zPw0XOT&CVSlT|O?sKKn+PB_s(Kyc;*WP z$vh;pvNa*)K=K+xyO#)d6WGn{W%`Na&;OG)jfcFrY?C@Z#c?a@@?ST8##m5)?ojS1U|A* zrLvejpx?NxcL>s?sx&E$w5Lu7jp2_HXW2kF%=c zp~`gkYqf@2w)?kF>?{9ra#}q~*r0$73boO&rhb{99-T2$1Zxyzje_1K{+W?`rd@N} z4+u^XIK{qD%Iq`$b@#|Z5%ea#zcmW_sM=NY`N#NA_}HH({(N%^t~vF7DyTlAj*&`; zH1&#jogtoiMPiy$o11fzKcj>|0)Z^V*I&$Ps`T9T1;JY-yk+HDb;;G;ZTi|YBFI;e zd>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl@lb@WJlgfZiS%rmJyqSq^PG(+dg>HIYDYCw#%#valA7X@F2GHip z+$4~#MX71UMT`s#I-lO%Y*^pI&dkH4r=e#KaS;Op50j^cClW77BMHt+)0vd!qn~BS z$io!H5+w!G64&%TOR34zh>3^Ekik#^Cd|WR&0r1ZojY8?&l)e|&&b83#i1n&Q>0mG zucEqAGYhC!UqoLWCd|WR$!Dnu>A@8N!-B;V zNzPNu6G<+KB?(C`Nh}F2C+sgcq4D+an?U#KaOl8=i&AqEK^7GkB^Qf>7)-JsXNg@f OQdrN($N-EH7ytl#QfD^+ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cassert.C302028D9A1C4921.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cassert.C302028D9A1C4921.idx deleted file mode 100644 index b8e76e840d69c047db67c361a7e2fa5a3bebcd10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmWIYbaQ*fz`)>~;#rZKT9U{DWD5gvaY<2TACLxvw9K4TD}8)G8imItAFhg=!HerVKphkHmvP;roYPzh_T(eY>PD2Zd5==|eCay*dTy z>^3tJyKFSnSNFi045iL;b+p`063Fyvu>~S!eAzV4IdNjMIR+z=cYr&YCXguzl<*}C zkXcnYBtO<%0!cz3zy}zha#Zdb=}65Hhywv1?_+?z@z$%$8ZWOAh!cSVzJLMVhmQ2W z>U~)ykVyzs@l_0PY4ld>rDwja0!c)mh%aJ*bwX21*UjaoKoSrr<#*UnA4YhU$2 zfutZ%&X+TQKjYEvg1i?1Oh#Z8zls6g%wExa{OQLwf$#|Uc|QXj%JW{lzoY5CK;jWt z$**L9!#}@Ar+z!yBambSiuqy&Sobt>^^@mc`vfu-fl|J7`oGQ6r5fWJ`M0Y!=frMC z8wZ9LHP75za=va}^wVgPEs@am!x*<1Xu7o+NBY|x73rOGY&^-BoG~M22gkJ!J4d!C z%jZG~OQQx*Lbo4F{L$0Lo~I{!fTnwjF**S>bpc~E0b-WEXSa8{ulP1X2}`3EK(jvw zWq_DUfZdJ+S4!*t>orh94aXSG0Gb+svE7%wu(zXg7tn0Uxr)u<4c%WFAZF>=q2QRa z)!G9wl>$qi1b#nAi*MQsF}o({8a$FZhBO)mFA z2e4%KoVA~Cl*eCyn7V^8$_d?6N{mrSh^dMgzg=Lx%PRTN4J9m%ege&QKTH@at3R>r zHPDrlDqZLa$_h051@F%Hwt0##j{?m;QkRq>o-Hl8_b9;O$OgDAc;?1)Q+Z0*_m&-Pj@&iD73`OVC4e)F60 z-r(uk$;)JJ0UM(B1xD_|GMQ`^{nJFML$m1rXJ1fgSm0WfN~P7PRiWYjVcLK|Rg{zC zyN+vChJ}V}qgDooYgM~LBQ>h9i16T*0TJ5WVSz7($o_u64MI0&Otp8etOjdBd@{8w*k-517*%3P% z!OWwLwi_KqrGwTwXfNtqXq_w7dT6be>QbmIg{#E&6;N3r)zwg0E!B-s*(lZBP}wcj zL(qCi>VFzqPfPW2H19ZCEsmFhlqpCuekM|8N_8Pp7K%DLxT)lSqekX5I;SBy4d)4t zjI>+kc9}%arl1y*S~y<-R!-xO^Yltf3bKJb8!Qq)UrpSN+kb2^039GYU@3r2|8BhZ zqvx=af_OmU!E6E84;)&Z?K0n*0yl-5xnREbi{tI0opsiLM;3AmL;gMc{&n9mF62vv z4Q-tVNgiA%faDJCda}lL2~waDKt=%T!J|%W-ifV*hCJ%S@;>~Wpj(}7M!UX=TtYpj z19>`Ni+A;e^LMnPr4-ym$q!O~lyQ|t(-ENAvqu>Z6M<5&H z^{A7@T?%oj zR98S;A=T9oS4(vx#Enwj3URAccSGDQ)k6>uN%b`3rp2K0=s4nzBS~yh5Kcjo^<*NP zDbBvLyvYM1Ih#PvzXKZ=cyVwUkdO2Rk^OXhPH z*Wd&twiKa}s|A94?URG7guC`b?EuThfg{2bx<+97*DA zg@xid*JD*z>tCYa2_{c4t9lu|>$A$+zIvI0?Z(?#U@z{^-s`$-^EzrS1oA?_j#AHb zomWxVuP#u5?1??AsXUrQb0)>WI=YM%cr3DUrTu5gXR(97YH#Q{kL!-FQS;A${46GB zW$*g^>ntrjD9FGh1G9stcK9iAsA<8Q6!bvS1KEm3H*8+NWrz1$6y$M=Jn?)z@QZIy z7v~s26_8hfxk3zN_b!~7%JrPJj29Rff#R9;i=TMNRQxFA@FnJ`d!)Ef>!Hx?r1XFMYk}Hrc zaBT3iL63pS5DI<+lcO{qM!_tGRStv!@_%8?9!kQDbUKb^ltp?%duLXWK=LahMMC5i36<29JcW~R@71) zM?pLy@nXIkePLU>GsiTZfIG3mxE<3n1W%#5h0Jww4$sCX(~KPk6XY;`+#;VTNZ8E<15)vNq5 z%j`?_1$qZK5=WNSJh}^K+!Z6hqfa^fDaUf*@l1YOc4l)v^%f(KF%u%P=g!p5JG|A` z)Z7M18(boQn70zXKHL8LHxvwD#Q~@!iboxIeg}Sy>G!Ao2LcPPQ4iCIOe1ztWJA|`JFm8vP!Feo?J3~EdZ2Nv9LFj_ z_vE_Io*Xv)j(V6vWD2oW-e^cHk91vX03|?P0+?%!PuDrU^0Q(Ya`!x!JfF(;u{piLJ|vENq+QCugn>z zy{joWfyfEODwFd=&H3;DQ)K`(kkp7LEX<*6>Vr~?ItsEN$r5wZqd3BStMiJR6!;nY zu{l{h_erjo@qv139z=>k#H#zE%kDG!CkC4-7z2ti@u9O~P5#W+n=J2A@GVEaoQTuD2J<8BJv$Buh_Sy#_1Tr8DD3d|)=l=nQBZ#8_ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cerrno.5BD437BDECC7A78D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cerrno.5BD437BDECC7A78D.idx deleted file mode 100644 index f19f21c72756e516a550069cdb9474176f5ce6b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302 zcmWIYbaPWO25Ff&saE>>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl@T2z#m&wx!8SVk`ct6YVJS-hEvZcb)iX@zcjUMaGXNtq?ZFn)4= zURq{4(2(NF+$4~Dic-^xZGg0!|F=%RO>KotJdD~L+TviR0tqfg9S$8h&*aC8D)A1T zMT|U*`W*VaFhxbFIf)>4aZz%yDu}@hA|Qa#=Wg*Hfu$1~S(uranHZR0;tUJ`X0b-u diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/char_traits.h.A86DDC004D15BD88.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/char_traits.h.A86DDC004D15BD88.idx deleted file mode 100644 index e6c17097f4d34ee289ee482483c862c924c7c151..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11402 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clocale.5FF46E6760ACF029.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clocale.5FF46E6760ACF029.idx deleted file mode 100644 index bd7d4711395f5c19f7f7bb235607d7eb259f2218..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 548 zcmWIYbaRtoVqkDi@vO*AElFfyU|i zi;MI#^OAE)Q&RPlRgIj0NZ-&!Gv!ru6WWR|1lY;8st!zFwB`i)gb4=gkg>Y3L~4HH#b~u=Iy2zKtqsK16`Vv k2y#|&QF5^|h`}_Si!bk}3CDUS7G?%e>_Y)FjKRPF0RG^a{r~^~ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clock_t.h.65AFE5BA7329BCD4.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clock_t.h.65AFE5BA7329BCD4.idx deleted file mode 100644 index 910904e409abc0f36a10fd288cc656affa6dca67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 320 zcmWIYbaS&{WMFVk@vO*AElFfyU|MX9zO;Q9pZo$-r`?u8uS8_8jGcd5S39(6n2?kCE z1||juMn+bKqSUlvJ)la5uKo3)pE%7KxmX!F7$qS-Ll^)Q2I+lfOS=8{i6SxkGC_jFaQ9eJX4$i diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clockid_t.h.5545878511E5BAF1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/clockid_t.h.5545878511E5BAF1.idx deleted file mode 100644 index ece3836d6553815486f21a8c4a7ac847494522fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340 zcmWIYbaV4zWMFVk@vO*AElFfyU|m$D6Y&+QUp5qeayEQLBXn} z+zd<%3@mISY_ed2fs=s&=u<`(R)(U~v|>G=O8x5+nk#<1>Sg3&VdP+xhWHj?08kjD k8zx+onv)1(7Z)WLi-Q= zqy0od5OTo3sOZSx5n17f`kxX-`d9RB6X6*%uq5}pjAxPlUfyjZJeB`+TJ@;p-7dnj z-~a9r92V_aDxz2K@PBaAw7{5%{~-Nu%0DCt2@mV;*)6=ce@Ngz7F*K;`Fbh?GwYdo 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/concept_check.h.A4C7BDCF159AD4DF.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/concept_check.h.A4C7BDCF159AD4DF.idx deleted file mode 100644 index 4e22aa020d4588aa5bf7b3958221980e8ecef86b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 376 zcmWIYbaN|UWMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl*SyHT@oS&DRT2K<7oRONGt(U=oO;3e|S-hEvZcb)iX@zcjUMZ#_ z5JQ1xrDdiA4Joe7O#-=~C^fBkA&_ok&-h}o=L<6<7o$FhzB1TxKw|BwcJ|}7k6nSn zavX9JFyV=jx27L+I2QpFHsml=gb6za-cbs=8PUba!>FsJYY7wfQ~NP@f2iIt3ju{emq1R@}S Rkw4`1%AajNH!(6X003bxS|tDg diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/concurrence.h.08E9E50104EBC4C9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/concurrence.h.08E9E50104EBC4C9.idx deleted file mode 100644 index 68868504ea95f9bfb68b90ca25d042d7ca3683e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1270 zcma)+OGq106o%(qkFPQaeIPWAkCuuA(W#QC1jN#UAuGXBv|ThLExdu`Oy`)P-i1wTl)Cf^By$+Fh|-*`l@f2ASL|UFc;7&Ufa&=RfxhGXws< zzFicA+r$3ExMBurC|snsVd@b#(4e@~NL2Akl4KdW6w&0UHLOT-Q^zfON$u@YC}J9t z9FGUg$+!|Q^&sW8@R@e0mL{7@LRRAD={t^fk(hQ`X(eGwa!ivgT~{<&IZI_zI=%Ts zcW0o}-5QN(R-$!8v;LdGh#A(YnK3yYDvnK8RKr^)2oI)zj9#1ecYug4!PQuNR9x>0 zi$?>yNe_x>Ijpwhq#%emadpDOC<)Fa++dsrXPWWR^R1ny%PqQh&6I}+^U#_)G zRnOBd_QA0at+rmo186va4#p|sOc9B3hBz~fXCMFdHyYV_+RX+LHb}iK{JiN{a!EbQ z)FB6s9CX_cL|lcIRq!*;gEJ3a#szQ|7(cv!_t&4U*K5?FtEQ_obyfWm9e?%a13lQu zdW+Tf*4OK^AE|M#)XUlW+I^f!zq`MOSq@5rCFRia&?EO--%lc9xH5d1iT0p!4@zA7 z?aATMv+CdHMf6m8E-;yeRt=*hU=lb^1EzVN0i5A^4sed=9MJi3`}2T#o(q5lo;LwE zdENrt;&~tF8|Uh!2&M?f8G;#}vjnp|FA!Ydd4=E#V_k^`i)S}<+3*zu3{<>0T)uf{ brM#?yK)FD_E_+qjfglhT+P^TGDQDS#uHWv1 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cookie_io_functions_t.h.5A08066DC7F05542.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cookie_io_functions_t.h.5A08066DC7F05542.idx deleted file mode 100644 index 1dd57995a2643c6b6ecbfab8aec1d0956f078b8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1716 zcmb7E&x;&I6t0~lCiWD98}Y{m;o(NIo1IKY2w}4uK{A<@A-Jov8$)twdb(?7D%(>v zR#m$@9{ndgc@XjDK|J{fc#sI510EzO2p;yJARavAz3QonV-~@IDY{;L@5lGOSJmxo zZGHI+W39Y%I1(;B$rw9}f9s6=fj0DO71|1D?d;s@w3`6z9sOb0Ua-)Yg@CcP(n+nr zX}I|A&Mx#OPT-l*BXC0z^~69bCDj0QpA41PitNK3kQR2^?OVxidvCQ7(P35^Bb0j* zbspHd-9?}_K9ErPf5dEW-&}1*yTVmfVRaN=iG%sFn^9M|(kKfb38MkavSpSDYx`x< z0HswhEA2>uu1Is(zHxW2J;$_?2&BS1DfG&IUl=5Tdy$hey$Rg7y%myyDn~s8pdyu8 z2BT8+JuDF$P-a+?fCK4$H&>wAR*Ol&V32MN>p;(W(QC*~!6N;r~mHieZ#S`>3mQK<@S8|j78 zA@@{)Fh(29QMLFf)ekVU6AA&HK26`eUjvMv47iM;a>%tOK|TTv6E{RDysK{!-GykF zT4X5{=&?}9l+;Vd_?^Q_l8lIOl1vR&xYY)^D!|VtF{ZsG#&`(-9&#$hJ7GO^?(5m4 zxkZT^aKE%Jn$}na4L53fS!p6k5;kpOMmKym8Ho$_`EdzWn$u&zR*3y$%)X9)+Np+( zIF3teVyUvC%td^-el@vzD3Xkr{Y8TG!v2W{(* z=l}Zqw;x}uvu7FO4c>UoFSM&Mw!lxF{Hp)c()Q1<)>(vr<;CSyzYyS*2YmP3!#_X! z{*kP+GYD8(Tw3u90Zw>8{=w1N*FT9qt+UezxL&*dl3xgb&nl*P|IvfD?tXK0RA>17 z@|efVej&hu2QVZ0_E)U-%A4Ot4=49tsBwPo;`V%2qI3w%=xw2wO7LK!J7P~_>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl*SyHT@Tu=~SQdy81Us99^z)# z48+*v{JgZxbf6){mAOeEHx#9&74KkVULi^EJg_a92U(v2=#GI@3WMeJdGH6 z7~L4$6ky7}?%eLav3_O*BMakaX06Z6+A#YyEA3TOS88Sf)w}SyD8ke$UpZHF*uAL^ zL%n&&x3B*z*%~n!iKhF&Ii7@sNnQRw2N1ML_l zH1EBme*a diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cpu-set.h.B40F3E2869BE4FF9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cpu-set.h.B40F3E2869BE4FF9.idx deleted file mode 100644 index f74f1061d0cda2ef0c69a55f0eb1f1115c706573..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 892 zcmWIYbaN|VW?*nm@vO*AElFfyU|}QD_#baI+-DA`|GImUe*V2LcX6&ZP;~)Efe=i1|H_m5-d<=h0@|d*q9X_s=3x$E34-%lob z+185G1BHtiig;nd(JT8(mWyj|0@@_QAp`d+&?XfPJ(!{&eR{=K6AvE%+N8{(4EHM2 z%#8~JI9(3`g+(|-;9jlPG0Nb&n|&B4oWzj?H_|EN^0d8t7UzM&!JNTjFthtCcfD(~ zbG`@^cHnS;$4pAb?t&LioAh)2fplo-y+< zm$H`fz|01QfJvD(f>*9zZU*DQ5+e&2BoRWzfr-ep#15tiXaIW|JXUy^%Vo>eU~)yN aIf)>4aZz$HIOQ;JPc08|o>`>CzyJV~;#rZKT9U{DWD5gvaY<382apDXw9K4TD}8YrxhVwB^MlL1=;kka+>qCg9~tB{H(1!TI1^)&=twsHB>EC z9KepL+`HgGqc*A6*N3jPQ3SdTRec`a-Kb-0f>weoY0+Mk>e>9`VVoE$f{7-Tb zSo`$dRmA3v98{!4BpK5%&+2PRSg)3P^>j>)$BiW#q-39_p(?CPYEp`>TNh0w<7)SY z#0K)T5KlEoUSeD+`@wb8S6RQm9`8}Vvp%bjtD54IWjT@RQRGNpMpu%FNII=(n%u0* zt*Mlj!9_5wMD$cz*3>SgUx~`E>d~Agszs9BhF&&THCtpg8P)n?ifm?ULxQjveVMdn zjIOTTfxmK1jhsvC6KVZhHitKFTCb_ezW(*y$v)Y(uS?Z446_W8o=ATNKm#?;2OTXW?C2Cd|M%%h=7=!K%lI2L62FEm#Ou(Ci280>N&k5pOB#@G&=;?MK)c*EQP34rVLeeA%lSncJaV}m!iVafBOB+9` z8-1`cj}#-Rv7oUi`yoz3Rucj=@9Q6akN)L;R7J@OBus!XfnH2OocXxT@RIyuf9GxA zpIazdhNL0K5Y2vw)9D~C<5uc-jq%TluJ0@tJeB4w66^Bo+(wus*)W@$PhVg7Voar^ z96ii}FpFVK!Ef|o)z%fRY4Q#w&mn0HgfS$Uf}f>>_!Z&soheG5MbZd3MlgY<;OF^X z{^Wk}N6#!JWk@;&!YTA*3hwEFx8<9+g14?yA|YuGggGRcf}iQ`wL3j+sg8$~c#(7i z95H0+dG1sdARBDK8}u*94X}}ToSgSp(R5l zR$Ge0g~P=hjlhx-D6twv9EHMBDCYP$(Bt5;x(!>5j?KrYD(ChSKu_51CxM;>m(^p~ zSoG9BF(A`)wF`@1niS7<;h$xAm@d~)FfXME`YJhh#Cnh7Zd5JkNhb1%Me;*MeOeP)8tTGm*#>f0| Uvjrhy@6Ua|Bnm(93Z-uH4~i3FBme*a diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstdint.47B9166DA94B05BD.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstdint.47B9166DA94B05BD.idx deleted file mode 100644 index a8e430fca8055a2ac86564850cf6196f028a4125..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2936 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstdlib.126A0D14F38BA60B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstdlib.126A0D14F38BA60B.idx deleted file mode 100644 index dea61b7daa42c338a4bb4ed40ac96a95009ce9d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4716 zcmai23se->8J;@VSWz2aRV*Y%g;p%Dg!EtT{<|}_J)NUFd*}Q9*WEkc z|LfwYh=@d2j+>Jhm7!Cc;~hATQ@~%7*{Jd2;fv*(;Ilp?Ol#05dulcYc>1glWsB5} ze%u81IKXq@p6bU4&{bIEG6TECXlLT;R;$bk>2RLh>QN7m|fta@F7 zR;}lB2_~~4U1fqVmOHn`WZ7=f?i%CuiJVc*Y)k_y$UiL1^4ppXiR_ldZd&Wj`c!LO zr`hiCCDUY9>o|yLHb89nV!6Xf$Z2RKtaXrcLwz|#J>lz#qxHr)@q`nG04ZgTI=x7D<4u8gMn5|V-AP>RelnZM zPp4vZLj;~8C7;lIai|lq+3yUGjdcQnnGgjf}7dx^uUvKVip0FM$t6%27g( zioJLp%??eUUg0h99!O~?%64(OeTLpD)6#-z0zVQdC4`oUi{6q{9n<8T_O8JDA*Gur zyU8efF6-(V{uw!FUAVvpA*Gindx?jg;*j!jM8+#qguuUvlrEy|B7&Wg>GJv2p0LZ2 z0xuxtL;9iU7kb}q?z!i6zg;Bof$i?^X)D3@JMZ-65vTJJ~XF@8qeg1>OfK2MIkWrgT5d zoE1GHV3)wZjg(`A9wV;ybi0Q3$its%3I%=`QVIzz6nkmS{qb2!b~;c-A>}1ez7%iV zSHG`_(;W^i5qM9eloDDh4iqt@_WD0eugV18A1QrA*(W{Ke)L(`VDF1H0uQhKz@^wl=q@tE9_Z1^>Up^x zBkKj;1u2{8Cedlpedq7+u=t150w02e8bWKtnUEaQs%yp-7X@C9lmbEv#PwW{U9tR> zpZSu&J0c~U&}{L`daGk*^j~TwUKaSbkg|u+J>o#Wx;8rKQQ6bm0zVch<%E_KH+wyg zzqor<8#L&Vz>h=9Awmy{bE(Yld*Bgx7ARwovX9Vx;`85qe6j4V`cap_Pe95MLXU`Z z2{@F#x8#lX9)b5p$^k+Th`m4$NHV=kIWFdLd2V~_4UWhatfY(`e|zCy=AMnxO`NQf zjQ|QZp;nnj07V)sm^dSl8I`B>K6hNs%M}x46W!U*&2d!WFY~vpP`|;N={8!UY6HO3 z8Uf$<+cYeI4g@hbbM^HlXOoKkU5b1YEkv03e@-dRzhkmUw$gC|CiD=rc4 z60xm)`H24fU4HL?JrfAD4{dA9YN}6}27q)Yu@OOztO21#P(qL6hTV13AmSB5ufSoq zUh>z9!9E2ZSbstf*qs1iT?v6Xk;b`sk_V%O4x;@MC;)vsp3dyqBL2lRkl z4P3Ksh5+_504zNWALl(;5xu$Zy=aK|gwQ9T(6(Zvsm+Zj&Nk`%u%lRlDK_Ith&W<3({_O9WYE!1$(B1XrJa& z_wDv({VD)hTSh?J;`j6C%f{&dXeR#6BnVw&&xagYuSbjS==%G9TQ6jSg%l{#~ml2y_f|!wBA+8mF$Cyruviv)*fqV4Wo(v@}_qAOK*K z16ttR0Dx3Ka9RL>O$lhxxo38&YJzJiZ0N%A3&Sxdxgv{<&my+x>tT=YZ0-u=E5J3IABVZwIOE~L*1)Fg&_~FjsyOi_#D#1efI^gI77SeQa-~m9|dT`9)onCu;ofMr! z*-6|n=JwvUn2?UOb+BcrvQ$s3O0Fm)vNB>@<4gpBEVB?=mq#8qoLIEF9x|5ptGhXW zzkQ*_@dN+lcvTZ5^O(@b;&v-l@|b!G!Vs!-=j&QyOi=~Wv< zkZPjK(U(E9_ccC)x^R~0Mf0R>0O*28(P&5{-vD;rbunPC4G}o mWeTx;u}LAvDJ^Su+4>~>KaytVH$Ud4oeObPy16Qq+`j=&kx(Q6 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstring.DBEE10CA3A7F86F4.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cstring.DBEE10CA3A7F86F4.idx deleted file mode 100644 index df3b10d524f8b5d2119650ae22670e14729047da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2408 zcmZveeN5F=7{`AcAm9KBs9ZQWCdS1O=?0hvu^>s_-!E_S4woNr;l9AV7rmFQ8mNEx zf^00Mlu2T-!B|_VETxr8t(f>y3rEEYl2pJXTDoH8dd`I>&zg6@x#xR7=X+j$-{)|1 zQxX#^-6ScYCdI0kEmcmEB&~s8v&E!MaDX@b6|3Q0L)|MHAX|Nwhm16 zvR+efvN!rBd(&j&jo!Fh=B-(_z#eL1V)#xpRlH;319$@icw^M*>@5uBU2~Ixx3bA( zv|~Ei-Z!iaHmnRYXqNe=YEvWU(RF1wC|tD|?H^ieO?o&>o4)!Mk)$6dhKAiXPZLI- zq00wLGH8aE1ji3A2M6c)rH%70c_j))7y_lVQ~<6&)PHL|ddZ)WbqEyGV(%voem{Ka zt7%FMWW)!7LRu&|gqD_@_`E&xi*C z<+NOwBFenL4jR218SzG-fEM^XIfs7=BS!pfnR^&G zAMnM}*q$?tI3tiw(*@w@K4sk8*x^w|RwIx{^8`SD|MJu+)!bD^{17OiB?7Q%rtMPF z(av#30uU&pWx^uw`1Oa*-cFceWGw=_=q>?J9bfg~F@OCuBMJm6X{7*|0S}>UKEuuVZ`#oat)LA9SJcTG@9e@eXKg#=WZ?dW5 zuc(0L$AEHq`$EIU_LNAFQ>D}m_JW2#J1_q=H)HuY7G$0cq_Kp+Tij0XIp?4UIe#Pr zElxSTB|Y%(vG!b$c>>X-^S9s@XSI(SWL{n9_kvBfE@oZ-R*!pXQo6cA@wPmw9<0 zop9#+i<0~7A&|wKbRBt|vcY_;7i61c3&aKDg#c5Ej{&a%ki|!g#SgN0urEjFKhjO_5l1v-DHqLBd?a{BVJkY;oQ4U+?SG`}3Wz z`FswRVr`Tj8Sgt6(#B)8q;CKPS0>p=c*AB?ydD5?by?7$#(lsy< zmm5^wSz0+*bOU5D9(Xl@3BQu?p;TX6=;;_;{0?YQ#(N5Av3T)z0$DuIhwGQJHz&>f z^1toq%{>Q7c6ZEz%>VJ?l=Aj(`n(i77eN-oG}L;0?crAwAA>AbsY%vV@gq0GR|X}2 d!@n}EyvSSo3(`J%6noyu$OTN zPRVF680r+aL9P{@b#}=hCe6=*pJCoSgP)!VqF>Lgn(%vXdRkf9f>ftmTjx!!tgT}W zD`by?@8a58hg=CJl`eHJuuq#)ow;h%hvKmtjkGxbUR8|_PzHS{>m>32q^wc`)dgp< z!Bz1D&LaJjJi6a|AwnS0QT~I`=I}W>E?j-lXhJLlv5CPoCP5%N1Pb_q*Z`mxPPQ?lrbtmvr9Iee75HH zLAeBIdge%DZh)qFK^fBmGV9&dcD%o@zGMTKusdm&az5Xg^=K!^H27%JdzW;SZw}oB zGV6^&18*8Iq%mF~(^#QQR$VFW-Lb3-OlYT3#;gI&w&7yi=%LrX_VYlqZ75IQ9`dt( z>?+7K4QPUS1QYg5h6gW=A31UJ4bU`wNMksGW@QrD)EP4@jsVS;^T4;YarVdE-$7=} z!2p8^TaM4y8T!0o_!rPLjkqMH8EAIjm|>7v+ATS4G&71@RA$nN{||`HxG;582d&iI O^5fcvrgtPfjQa<%3bm8~ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ctype.h.B268CEA0CECCFC59.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ctype.h.B268CEA0CECCFC59.idx deleted file mode 100644 index 1172adc8d4ce1109425d02e0c9b3167145fc80f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4532 zcmb7G4Qv$06@Igv&E4%Rka&R*Fsuo|Ho-n@{)|bXl*o;P8Uu!=5h`doukpp_yJL4R z*Z~y(af$6>mq=Iz(l#X_X(4Hl657zD2pXD-^beFakwR#sl2#2W5rv`R7@x zqB~1vFxQy1y^=dxOsDyaeDP$|j9Z&rBQAO6M?VD8JP%(7$GL_Fz34d$l8v};^Z(B^ z&|V7nMx$<9%320%EjMi^j6^c=m}Mu8SYxBH(ug@MsNptQ#)|rtwY7$0x#5ynxmC^< za~RiXN!k|kn+apFu{q{C#RaTTUmrGOWF;Vjq7?5Kfi7|mHLu(*IACsw%3@n4b$6{w{Wz{w9Tl?LPq1J<5-Si zMx$(vSYnIeCXH{cs9)v1@+LRQ_v1bA1t3~o3yrb3RUL^$(vBU8C8F_kgB9V4EpPfl zU!!HRbX(4sxLd0hZCbRTEFMdwTg$d2(h)DW5i8LUGZSBFig&hOZ4o{rf)|7>#%>kF z95bFsx8S%b&Yx0ECXT+viN<2gvN>)hnsMZwXu`F-96oYO%J$!ikG>_HhAZp(I&oQP&m(z^71F4D;wfpn@(XKQe4%QmRZ@l|NDQudt3#DSx88z35oFN)dQ>QepR@H z!XhN}DQcghLnt`LUu0+S>gscqb*m}NM@qM%bt{u|@3HSsmr|L3J-d#=Or#7GZCHNQ z6M?|V$kFBNDcp&aX0=&*lRUMk;LxsPjT9Clp-pXLgnXj$d<2%yD>?V-$!!$oAYrSz zRf@3ebYF3(e`za)3M6zXT9+av>?d^(Z>c|Xxs5^zQj%&?igCK@X!zLqmmi~GAR(h@ z89Bz(2J_R

#WiBBZpaEmDl%)r_2)nE$;l3UiTQtF}aVCja7%f2^o_l0p>{1{8Hb zPWsq_eW%X^k3B^pf|O20>y+Q4rYUnQuVUUl3X74lL*2oa$tUA^!VcZocw)lEnLngZ zii8oOjmW1`blOp&SX0>PUMj?CJaNff+Y` zM&WiO>?P`6BE>k;e|Y`KeSi5Sg)*dcC|ZZSmy>7Ti=QuBae@NVT>jGsi8?4p`Jgy` zq5S^qXDG}@N=i*hZ}NlHCo1pz>zel|6eD4jXruCWXFtF3LTO;bhZLqF~)Vc{r-~Eij0wnAq>K?yE zjN@nXdg2A+gK*~vg?o_Fu4wIYPQbPro%6w5#~~r?G-66s=JyXdA2tOE)r%(<<86ea z*I%ErXXDu*3G17Kn=zq)U5SMe-AIHvURW5u{)eTvu`oSkW)Hzrg31S8DgV)H-!7OC z&~FmBNmR^VKp!G7L{w~10ezUjFj27&1oT@3ZV?re8PG=vj1U!XWI!J!FiKQBvVh*M zK)a%1Rswp50v(EqHz%NXD$uE@SQP=iOMxy$#flH;-3oLoDz>VCo>3s9sM%`PdzGSI z12$ovW&i^z*~xn4onyeBzn2Mcz zl+Xdi`y}PRPcDA++Hc={WF}j&os4Z~g(H5b04y-?{KEX-i;-nbqeT_t!@3o;vUh~) z&Cndexm1rsTtY3-BB2B%B$R}tgi?@_&{o(gAscK7Ip9dh1y@38NK2@LKnIcVUIKe% zJV;a(O@*YK|FDm4xw{mvv_rwL#Uf@;GJd;p=rW_ipCsV$%MJ@ z)5g5Q-pdcMljtU6yGia+lpK2S-0a00w6K1Sgsu@?OklUsudW>St1E~7>dIlix^mdB zt{nEOD~J8+%3;5{a@en~9QLa#hyCixVZXW%zxna5n!}N6CfjjwUU4?nDCjIdT*w6- zWt^G0d-T&;y2 zwVIi^Mhi0*J~Int7LKaD1y3G7XgBk`YB2+4nmM>U3p2JtW)`B1 zD+ozu4lc#Qj6%%JT!4ic<(HX->UwgKYeT01-5h#p*>7f z#Se9b%@BGl9LdY~4sMTr{hyTTb$N9Z`BYz%w?;zsdG!)%D{RBBT~=E=3U^2-LrOCQ zKbDzyH!0jrB>x^#xJSmlN~Bl8Ph+kdWqk^&I>Y@+q+j+AC}jgVKk6Ubm-vVfJHSr} z=HQKMS-4l5e55P(q8eMG{)9EtXJ~Rwbb&+7by>Yt>nVy3Y0`zH;y+Z7Xhi&yF2+ mmU<6ag#*amOaT2z#2sEe`twtPiIXSY0ojWKaECX^|NRdQXU|sv diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cwchar.A3402FA4C9A9F672.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cwchar.A3402FA4C9A9F672.idx deleted file mode 100644 index 18487900d8367f8aae489a5eb9416aa863862885..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7308 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 LJpOF(MiBlB3jlk; diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cxxabi_forced.h.B8AF18F1501F1585.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/cxxabi_forced.h.B8AF18F1501F1585.idx deleted file mode 100644 index c33d6625ca9d8816ee58155cdeb28c6e3d96b6e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmWIYbaR`=z`)>~;#rZKT9U{DWD5gvaY<38C6ES#w9K4TD}8}ESb29TvD|FNIO7$@egBYHipO==I4m6~=GB*k2+oII8;zK~% z#P$f+jmjtyMjj?Rc{^2bKmdss_NzQ6x(Qk{aWQFfXv)Ead6?Y9+;m{PcTyAg|K`5z z#>mB_#i6AP6ZWmIH@dWnJq{==&mpe>6Sh@)c5uq46)Tv5HmTd0!-RR59F-i65Ii?K zH$NCpCM0`R*xjV{Oq@){9L9nb-4EVr&y#58VRAKdwTCGJMo=P%U0jr040Z!EOooAh VX_=Mq=TGYbm@#QU7R5E9 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 Yp%ohw7W=#YUx++OTT#+CexFSCZ-t$+6aWAK diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/enable_special_members.h.74E7B224F8375F62.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/enable_special_members.h.74E7B224F8375F62.idx deleted file mode 100644 index 2611f89aa99e3fe2ded8549b20a9808ef82a308a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmWIYbaOLfWMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl*SyHT@nwOZAlNw)KkeZyCm=m9ynwykbRIHc5fK79Sg;~6riEd72 zUTKAHdR{4pX;9OX^YhX&(}9LC6j$aZf!tD*npPYKq~n_2XDKy#8Zq)Psxhc3fTTb` zv(jEgb){w&P*{aeMG+#%z%Z%rpQl3cwD~~c9ZU>6nB-s*Y+OBccB!xaFmf@7)&4n0vK6^GM+TEKht4kVgLZU221_` diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endian.h.1FC6A4D6D2846204.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endian.h.1FC6A4D6D2846204.idx deleted file mode 100644 index 24f89baec1356c7ceda84741ac4c22a59f893fde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 826 zcmWIYbaOLeW?*nm@vO*AElFfyU|oM16AvB>A{8VEU!6v*B zC@jq>4L4itzhG>F|JDIeiegi0M#AO5*{u5fiY|h`-yG%TclI)UjVID>W z9tF4q*lznb|E!9<57cYOWe8VvQ6f0*<1gLEKw%9o4Y=^?D@^xaEe?DN6jtX_hYJ^_ w<|KlAR9uu?Yz<;C_LkVc$~2wd%EH9L%*wz75`zFxMt}lV7=wWUm{VW?06Ff!KmY&$ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endian.h.20F8E286A486EE09.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endian.h.20F8E286A486EE09.idx deleted file mode 100644 index 3d94fa80d49b068b3fc49250c209985e208f9f27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 376 zcmWIYbaN|UWMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`V|&t@n$BvIhlE-6}stprTR&kCB^!wc`2ERd3qTPq-x1aEiMLXV<@i7O#<0jl$ut& z9!OiXoenR)pTWV%#VE%iCjxd3khsS^rKl}&t^iP2n^Rj7CaiPB>%7s5t=>#rjItcE z;xJ(zMlBI7Wf*Vexz)3@A3X{K>Xqk^hZ}kLWvkmN{m+SvK-DZ-0x;E|T+dD|a97^| zR4vRQECv&1amtB!9^Ls5D6Gz@E)5d~x;rNk#3?RHE(Y7rnE9ON@Ex1ZZH!C|OmJlk E05DrvA^-pY diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endianness.h.F2D2CC6251A4EAFA.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/endianness.h.F2D2CC6251A4EAFA.idx deleted file mode 100644 index 5c549408d85529f558e139499d339d78a9e17aac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206 zcmWIYbaOk#z`)>~;#rZKT9U{DWD5gvaY<384Uh(dw9K4TD}8`qv!qx*wJ5PTH9j*8|^F!xMN-sUG942&#{X1r$n72OZsY0r~r4!7H`*51m( zjwXCW|CaXKhdt=RkF0kJF=;H4MpJ#!TA`m+TUZfIc%p-7zWmpfx@f|2P4Bamnmmmd zc^EYqG!(!=1SHM`iEP_?c0&M~YX8E?-X0NAX=uXXXD8hC*?OW7P1w-tnbF$JpPgvJ ze#djGZ94^~qX|bdymAtGQ8E`zc<$AUb9ThcoX5z;D90fu4Rhe6zJHzy#na{k-R;8Q zA_o)Z(Qr~Zxoy%~G()&`ww$TUayW@5Y3 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno-base.h.23FC55A99C73A727.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno-base.h.23FC55A99C73A727.idx deleted file mode 100644 index fe0aa7b68d27d8f1d986c6f53840ba4c43497804..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 932 zcmX}rYe-XZ7{~FWoAcS++}xa-Ixm|}2-1Vni%>E!85MCv78yhk6qtBH_R@MZ_8d4I_Tjhhe=p9;Z5B(fh+&R+ zZ2ktW$t7kOMuWG|#C!Abxp&ogeOx}vvdsd|dK=xoW)H`@gof-|u94%tZkFTu#xvQ~ zE`iIbV}x@J)w|!~xf;QYA|-A(_@^Pp>RHu21emPJt9UvR=_C z>sN1DkPTp!qwkX>Qky3ppO*iKR+S)+y0w z9dbIP6OV}dUad(=n~-H7qjsTxr@iip{wA^-)bs-b_s(DPeENJFSqx%YnJznprt!cHY-LMOK26c)mS#%&E^AMV5k;BCGAr1MaG!G2{eD zp!LdlYvPOf)&=09xQ!eOvDEJFmX#*FpA8`cKumaz Z{}!KX_k+N@g*}Z>uGxc^PagC!%s*R{vx@)# diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.063064A523A47758.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.063064A523A47758.idx deleted file mode 100644 index 84ce1c3e21f5da38450c238a95a7b6184938b939..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 362 zcmWIYbaP8$WMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`Z<|-r4{iF_6gqsI7dd;J7eQScOvs<PC^aV$#4avME(Qw%LlXv=mY=M+xOisu I5k^J^0FXXXx&QzG diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.10013861918E601A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/errno.h.10013861918E601A.idx deleted file mode 100644 index eef3d49e22f3e3e1442744c2fc8e37ea280ae890..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2478 zcma*mcTkge7zgl|{jgLZY!DDoBtqCrWs58s5eXXugqa{FfQc0q2MUT(u~)6Abs*Z> z)&s3tL{z9s9nebE17}sVV9}!Xtcvz|?d9peeeZI)``q`Q@%z0mKPn>PfHuQ~`+!!Snpla))0((wP|lV2nj1@L&h3YnBwRGKTU$P@8|GKoups8l2^%H@fq($YmP zIYODpwUGH=Va&-Ck{q_WRFp4!2MpuUc(8`qKF+A<9{=c0Wrs>wf49~~YRFT6W ze3Fu@1LK+|^o0Vl12{}n@;=oax3q+Qy2t=9LCI^j7RPF+h3X^cKo0TWfvUq(13e9p zC&OgoslASS6>T$&kW(R*T9*9Dwg08;0?RUx87gZ_1P^=X=+6u0nz*$FBS%04U4ueHQm)aoDh`Z(01# zcmvDHkW9DJG2ust?s@n5$QEEhlNe^mZKAvFl8`OIlDKhWiq?*~Zpp|cP{Mu(AD{as zqDtXnF9C8e1XIg8*RGcSv7S`q1+ajlO#eQ<>64+9fDGhWFpJWAs_wdXZAxT03$kc= z`$HeDSHiO_WMA;5^ec7lG23M?79zWV3mxqE{72CeD~S*}4&ta~^*vpM-|Hrp!yt@~ zirKJxhzaB5BAbIb@d@YP{Ii{1#mF{bL(4zY(LCP&pjwPv3Z=CClb!7r!5w1~WH0cd zNy|pbWrX`ig z(_uPIVr1dHf3=oGjyxM?Q#xK05cf@fkpkHjTq!Nt^J0s8jruZVGcY5zJ$dJ|tB-wH z&W3C{s+OmhYG*msv+M|tRQvklm{+DjGpms8z>c=maNhH4y~@^=$gvPhTgvpUlV+O5 zuSK2*^XO&Uc2P&s`e9BjvL|@bB)_FjIvugaa09X!#B}qmrBBn+D$ds%V`5f5;JoJ?3z11K-piob;4cQ8;sAY(jit9YXDLawp!dzN@ z`kQ2rpVvHOIRi3ilA+MO-fHGO`;ceA3|c<)W$I1gIo%fIKnSFxx?}!4p^v+nWk2vE z?&WC~oW3CY7FhrSV%yt0UQIpl^>@exP(UpUxfui2yyI=iZs0~~C)<;DHv~?{kkcWZ z<~BMUtM25}&2kx(5%+}D@Vm9Ne?aB{hvu#|UUB#6+HjVq!8B^g+f*>hN#D&fANcfY zuB*x|$gxgpM>YmyI`5q?Kb5WTZ0tY|f*=}DTgtuD;JBUTN~k2>neWwoYv1|P$RZFC zKd~Payop@Yi5v-$)H0i|u$^1CjO9Woq)R(`>TsB^&TW>R!I`+Z>|pEV(RF8$wLpuO z&pKl!9(Hxt^CgZZ?3eO&DjjVy4xBC zMByv|9Mqpwf<7~J5T7-N2odr#aMdTsix@*VbdjV%kLjF?KqBrTrNs~j1P!S2(ZHvU zpRk_bU4a8Mz_LWcKEF-eC4_V_;~;#rZKT9U{DWD5gvaY<2T9FPWsw9K4TD}8VbaOKEN-K2J^GZP);Tno7bCW~;#rZKT9U{DWD5gvaY<2T1ds-Uw9K4TD}8)3t1jXI diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/error_constants.h.7739DB6650F792ED.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/error_constants.h.7739DB6650F792ED.idx deleted file mode 100644 index 01c90da277bd8c3ac2c7b26b4257f867b49e2126..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8514 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exception_ptr.h.6BAAB8CAEF920B5D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exception_ptr.h.6BAAB8CAEF920B5D.idx deleted file mode 100644 index d68378a504fa95bcc715d2f31ee397a5aa02bbe3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1952 zcmb7FUr1Y57(bs$)tg@HwOSLKy56kT=^7K=M4hgkR1Ac<+1BDiOG%U5lX&g*+;H!W zyEG@wN732epP2%%c~F)c&wbWy=sEluxq^bXn=TMH7llQ?6k zI*Da0!%@;_(5BlKLo0f{h>xJ*gcVnb94B&7>3GW-T_u)E(z2z?aXG1Ha?zaf}YhwW>TtEW2-im09uhAW1BNZ3&(_;yml zG}kd=dkv z%;WSXw_Og;f9mmjK$KSD)m7+bzO2kLAzz+7^~>W!pZVSsr48_GfS=KRy|5Bk{PU3y zJktKk{k}p&2&prFuO0try0OwDwF~WyOf5>&P&Ew!j%T21rWD@<_f05<5vAMUzFmsv z!98D!?}7VXDP98i631T&X(T*3@dE8muhSb@6Kuk?H)pa;ElMNRBQis5${9@5^@YH=0D6gyDRlB>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsBOMT#}=oT9KMuT9TQc7oU=vR;-u7KtNMTWkG6uNl{{ENiop2%G@N7 zO+`ShT}%uN@+W+Z{_H-?$;iXl$;i^ls0DEc14B=v<*e0(-?Er^7`qumx)~#35sn1!*@y)pp7t97gONAMaMgBls55&Tw0&sN4D z7=Nm%2J_-2vMszkj8alkDllOlMp+SAIRsB$N*+m0Nkj=rPDM%uNlslv9ZAkW$^c2u zSi~4f&Q!`2NzOvV0!c1aDiujCLnH%94%zEk+dgDJe=ubYFifW~vP@wVfjRm1D~GOi z32BEJxfr=PxKv@n@(~lizfgI47^r?4qtG-)X_!R$pSK&+r>i~};9<0qvQmZ#^Dx?q z*vcY!Zc=VYa-JfdNOIm%-biwOB7R760a5`-a={|ONOI9q(MWP}B5_D^2~r72a>*je zNOH)L&clct={$_6kt<8 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exp_integral.tcc.3BFA54CF549FBF5E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/exp_integral.tcc.3BFA54CF549FBF5E.idx deleted file mode 100644 index b0e5cf9cb0369a333b03b767309490ab719736d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8308 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/floatn.h.DA21C738CC1B6ABF.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/floatn.h.DA21C738CC1B6ABF.idx deleted file mode 100644 index 454fdb2fa398b803a5c2fe1a599b85f0697c3330..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmWIYbaOky$iU#7;#rZKT9U}Zz`!63#Kk2=nG=CD7^G$9q+03g>z5W6>1XC8=aiZhe9mXsEy7VBj&V3V$}FpD=c(ap)sE3ME?&nwkW$}B0?Ps_s>qVcz51ML=8hIrPP01~lLM*t=zV#x$U?DTk>t oOt>gDClSOhE=n#23o;8bJ~*j!c#9~;#rZKT9U{DWD5gvaY<38BajAzw9K4TD}8773%@% zM>S;*JjwH-8MzpxxTF-p761vE*|R3?GMk&j$ipbaA;b?8E=tWw1hI>Yl8d=P3`W+7 Nt3LJ0R~|7i0019%F5mzF diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/fp-fast.h.72CDF40E7648EF43.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/fp-fast.h.72CDF40E7648EF43.idx deleted file mode 100644 index 0ab45a973cedee384e535314f628f7d55a808947..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmWIYbaPw7z`)>~;#rZKT9U{DWD5gvaY<38C6ES#w9K4TD}8~;#rZKT9U{DWD5gvaY<38C6ES#w9K4TD}8G7pI}21T&LJ)h69$@=lL+Dz W7bO>SgBXkfw?EC}H(n6PzyJVAt}jUd diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functexcept.h.807459FDC2AF6C4E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functexcept.h.807459FDC2AF6C4E.idx deleted file mode 100644 index a29a13c508aec9325d0f8e5ea1b198a043261f2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372 zcmWIYbaTsLWMFVk@vO*AElFfyU|6~4AL@lQmyp$^-GJ3^fU94b4pWE z^^;YNoPbE*&`>`qv!qx*wIVsSpd>RtFFqwTEi*5*STBQt7=3A_dC4UZ%{X*aSeV6| znds(Z=9O0HrstJnSPgYba(-S~W;)Q2;>z44kh_ag(~4t&bX?Q>ETtw-BSs!3Z3b-x zkQ4}LR@$qmuGGu|3TyIdDnbMq7_2U@`llH(y@Qd9Nrgj23?@9O@1Lha@wE9s)kO?N paxmed)SN^RySOO1SQ*4%1`!az)LSO@RC|HYMJ8rO24EP&003bWTj&4) diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functional.ACE7A23DFA6A7C81.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functional.ACE7A23DFA6A7C81.idx deleted file mode 100644 index 09b239299ca418146a5d5c56f1fb2edba5873ff2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32794 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 Po+tSHx#05*%jf?C+an9V diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functional_hash.h.412E38477D218834.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/functional_hash.h.412E38477D218834.idx deleted file mode 100644 index 8f884e1123a1b94f7b4806219b7517c800f45972..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5606 zcmbtY3s6+&6~6!Pbpz~W0mT}X6i#7Af|wn=Rh#n$==(-^cZ@j25FF_FY)oI0lG-~XPy_i}e8o#~F= zd(Z!!*MI)=pL2%7f;n@pj1YwU@`9IZoqmTX2*Pmq@AG@BO^jf_9NVh&Y=1+Y)9t8r zT9?-SY^IP?vb4@RiM>mz-Tw59XW_Hd<8i^Otjgg{pI+iuJ~K0dpRiKysV{Xo;iJOk zaWIyOdUu(>+T(UGQBVa>m&aXc4KfBO_D~Rbx$9l7I=?rd*H`87G9h1erQ2C2Gxzk>jn2`tn?CI(D(rUlYu7;%~AXN1~Nio)v(gwfN zm-f8^EJP)KuLGjrP%srk!-1>}4H@G*U( zUTIos2|R=_UMJRc-!G2zoD%^~2>}oIA3n8Z**-JCsUhHnyCRN#kXdE{I3Walr{!Gt z-kJp2MB}X^WWU)T6?mZSz1xa*&g)Gy1)-SIL-}ghN zT&HY6Thx)3&)B*+hl=>f4QFEr429n zIJM=Y_Qhv^z7#Y}4-q2U*%j}+e=O}s08a=3XBHiLF!t?>F9Mt_$o<6B5BB*B?Vm32 zod0rQa~ZQg(rEv5+fV=ccgb4L;L%2SQgqj+EsuZc0t1sm*e|YcZv4&H*I#AQqm0t^ z-}LA1Ua;X8AU!pN^z81me}vsgdV@)eM(G(hJ;Um1RH>!_mk{ml9pqxuC2)0U89`3FHdO^{otsfAjU z7aG{NF)wD*)wrX;@^lCT8;i+?&b*>dfTx9k_s%M8e>}_F1@Pn$@P~{0&wn;@!zq9h zL%>J+4xPQVW6UQ2XN7=En#GbAu2?U!&BYoww`|RUWq13-K4);4e3zK-!o}b(+}tNG z=HA(z`&=Jmu^2VDyZ-&>UnkVuWH6O$%r#Mg2TBjS_x6Qqsqq%LXBXsJQ>`WNKscv$ z)xp#Lo_kDMkey~{RNx_m4=`mbb)}occ5CU&B=)kFzCmJd zs5I^kT;-cp6>%CpDsCF6nb1^_K_od@NVeiKwhoZrL+BpuRymD~*hCz^tWZ`C=1sSoW03+`wDkG#$EEtrX|#x~1sL}dx>xHOr;%}D!}GSpgA;2Y zff6l=Pvi22HP7wp_{jsdJU?xICYr&P1dj1M!bJP*pSw>@_`?@oD$1=irIn_mgebSs z8Eten(%7}Yu>*u2&^pFx^x#)nDMR+XIqr4vK(7HC8~DJlE#7O49;jx)M2lj8Lbce~ zfN49S+qL#Njf~jh2vJ%amPKrBV4v3;EI>1aZmGjQv=uxq8ef!#_QMBy|Mh6}&NdPu z$A`s3iRHgJe_VIl^<~ALDU!VWndQ02Ey*iPDF}cZtwTT6>pB{3WfuUJ}`>)qjmdUenUo zN%D2Ay*@Ifk7Qs~kmQ@hbdyL}HY6A)Qty&XtW%PFpP23w2@9DdzedNrM#p1DOL7y9 zZK83Q@~rMoZKl()FiY}!YFbYvY;#*SJ}I#Jw(o&NZ>K^#jmMnEvIdun*Ex(3W*9P} zCb&aIN%aDy3~$ za7=-TNJaTfrP4g;Dy^RtB;^{bxW3{^gZiGNY*FRc&kmBZB^BrOP^I-1T~e;GitD?i zq+DafcfJw7{N0-!7a+~%=FH8}JhSO(bIC9|xJ~Uj;HfIO9VVhIuPD7QF zTx=;GhMFP*GdfZdpZ673yv9Q!lqp?hQ>J!>k#*9zHubuGl=b6*l(tX5g?%?sQxj!> zV-5Upya&H|ieRNLeeXnP`=;_IATi%MKN$_dyzg=_NuRgOm%u*8vIqZ-!w*4_KbRa> N^`vI=J9OMw;lIH4O_u-w diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/gamma.tcc.CA2DC1F3C7EBE19F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/gamma.tcc.CA2DC1F3C7EBE19F.idx deleted file mode 100644 index 3c20caf3a621f74f8c25435e7cf8bcd453a8b808..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6946 zcmeHMeNa55<%M60b>RuQ|35iFJuA$%x^6p#f9 zQK#){rGOv_et?d+jJ9h<3Y1o?5JuawxKeRhK6D9;MP0Td?4vs`@7edyIwa%l%x038 z{N~(y&pG#=-#Pc*golNM*gNoeD|dwLNr*{}CU`ua74=c3ro<&s-#@=%bVJj78;acoai=Als<)D|X`m%H+rQr)~{sp$A1+L5M zi*NsWgE>dgwPpS810nuaa|jp!^8v7+dk`=U=F@CkfEE-Wdq&=h=C>kS2A{)L=dd-6 zzwdf?@xd>DaOF7re!il%*vWJ;$CQT5r1+7G8vTU;SJ`zxfoC?uGdSHT@6ZcWH zn87OSuEH!_i>0;Li;|I*V|DUnvkuT!@mgna zGM^!9zQ3j8y}^mve`I7#JZTKvL`6lWAXCrLN1t5^ZOA#c$>4^RoHdgq*R6^~B=`}2 z3u*F_@Etb!4hv~4ceya!z9u}9v&J?VNlQgHO|}`_u(vvY6QmWDZhLO}`mQm5rzzlU ztidgs4!Qq%S%=9k&K!vM1}+kv7Vo0gOlB_A&zZD%=Svy5Dc<0Q1okO!Jlryv@QWDP zG`De3A@5G)*mpPVz)$6)QAtM50}s`~WmlcVX$JS#^;Ty}YiQnngAXj++NX^9VPZdr zh5kj4A5HHy$u+pf;?3K8$P(xL=Z@;prhU`x z%EoQTx((?w>&*Vga}>SG^jBd|6=q=#cGF;AMt%}opTzq9E=OOAH7mW9&zUia)0;u& z)*ltlF#~^7{{?j3AfX1?)F2Uq)yP_n7BN_ZtTk-hfrTB|o0g-fdl5C;n+pxT5CvVX zcE8Q>E8>vFe`CXy@RGJ-j$k@@%FaZ-wv<|da*&jR2Qx<%;8Fo126w{3PNtfXpaoAY zQ|(C5fj|fP+)hF@a;!%B`cFbLa%^Vf0&H7=^&3U|okQB&d3B{mrgK+-yRU4^?b2Cq zL-=by%$6$}56ya@s9|{joMq>cU*x^jkKbx-u*f_*>+#Qg8~e0h^YP3;HORdNu~t}( z+|)?FpCCbl+%#<5fqgpgGCBfYcW`y>Dmiw{$SagBPWK2HYA&0#B5RG72!$Z;zEdNHpTJJDGx@WUl;4g+4*oSbpE zcV9;OaAwV{BPvC7mt6uj@Hd#!bSEH!AHhN!`5Rd%k{`)J zQT!+tdYk_?3&mK(u#QNXl1zPBC#aG$zZ_V11LfdT4*D`pfChvbrsNRtDF{9VN5;Z# z@azUDgLPn|1J;$m7}$(Gi)CZr!?Z6#Rz*mE7eP=ZOH$2jGYC+ld1_?EwAY|{8a8f5 zl4f@MAvAA@EgwS5hR`ca{{rk>z#Pd5sKu_en04T*!%lTrUqT6r6&Cf(?F<20Y^%j~ z^mx9L!%qisa4RQ*o@5BmYn^{;qmDmqNZf{GbPp0vV)03=$9;!06?07=wR1+;DgI-6 z!@q35qDDA@h!e<>P6{Mk!^AbL$Ce2Zmf6cy*NjY-$!s_6#@4@IH+Yh5`g*yWV(qZ@ z|5W&&rh?!~ZX%kqyZeQ2V-Ig0PhNat*u);jZTd z3#uw@b$5-N3iyMg)BO=a{YF-E=W>*P)TzdS7kn5j%r ZC~aqcpqa;iUeGqV$~N3i`34}~zX6Cn{S*KI diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/glue_algorithm_defs.h.C368EC8DE1036B81.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/glue_algorithm_defs.h.C368EC8DE1036B81.idx deleted file mode 100644 index f0949011a6127dc7e5f704eb9889867c5cec4cd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22460 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 KZWW&QmBJr=l`?_= diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/glue_numeric_defs.h.FCCD2FC54DA0DE29.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/glue_numeric_defs.h.FCCD2FC54DA0DE29.idx deleted file mode 100644 index e05592420362c5120f6f2cb41f1a816bbacf6c14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5972 zcmd6rO>7%Q6vv-KTWWWk1d@;hl62#^X_7kYu9LLV5?N{suB_04NI12y+N{U0k-fHd z*CnP6m5M|qDh_~@3PcM+tKgy0MmQz8OiFVFUemRv zgdhQ@q(hpn7^SBRWbL><{Ji~M&KH`o%8gPWqJ6^Vk`@!ujWW8eAV^wOImgz3@v6bo&wR+$A z>-ieeF_2lz`r7NY2d!R$ns$HVlcIfI!x`DE6zhLv`PpPne{F=CR&}kE$>@PP9CtM@ z;D3Ofr9dlIao&~>(qHSs! zif(4|Mo#cdDi2jom*s+KWhF_LH67oR=!*Rs>B@W-$y!Dx*D3Y|i(Ig8Sf(o;AG|0M zP`l5$LOr}#r2<|^4)L0E10>@*XqGu$@u-uKq?1avh-5M$0Sts(1_7%Tl?evOXjvr1 zVzHuW#O#WuQB2((KZJi{q8KA3jg>2xMj2ChX;YJ4BxyK3Av^O{kd9e%fkqaU=RE@>fya3`n5NgZhyqVUKSz``3?wnJxD!# ze&g$-*T#Oo%0ZkN%)%^Aa-e z8T3LgHh8#&=Fs)l6GLskbl-5*;RKw(As*Yg#||-fefeB!^z@1g))Y+PW%jiW*#^pI z7ZP{=?flubiUnA}t9WF4*ftP<%1PrNfAgoS4q*u6I_%m?b1-n*UJ8`^A`rCuVe$Nr zclKWDd5v`gmPr>dne_mc3410p@>nLsnap@&nQ&$@ql{%jm&uGRmI+fPGon}~B$>=O zVwvz`^6OV$cw6nec_qLJ{ZfC5CB~p)YXXy5zi?rs@wKz5=BPKf3pwF`uhi2zlByCXSbNDAkL`X;UW|NeShlghBvNRTh8Rr0| zlH4OJa~XA6rp7e@B-<|e^o`FljKEGpaS{eStOS6j^{4XkF9-9C8@r9$CWo!UslJmh z{1b@%BTyWHPZEEZ!+W^<_esg$jn#5m4-ytw9nj%<9$o^Q1+pm02H6zpfu5oqkVDZi zaEu}YFi?~Waw*CO`4km`LW)elM3EVoDJlX*6cvMFib_BUMWvvWqB2lMQ8_55r~*__ zR0%36vNFKRP+Y};Dw?YqP)&0U18QilWk4;>bquJZxt;;_3V%HK!J{`@%EEEqTAk z|HSR(xRe~6asr7HD3}O^ZC+n`9k&%?p&yF1OU+ zYz;PH!3IT}GNQVpYFE3a&Vq#@s2)-l<`#cF35__4a7~F^;$tMy=K0}@gs~fy*xv)i z9vDCbKIf76wyMu-u@KIMdz0|NH4mJPq5bvv`BT-Yp(KpUVAM87W)F|H!D-c>C-H3C zx$W|7cXPI0E9$6y3y0JBba_$F{bKVRih1p{j~ko8XUO4|-tsMwVjJXbGo>_*K;?+=8O^X=H5 zz$M7tz9RU(TKPwNJN9=%u~XTL;c3@}s^nMBVnO1h^(6n)Rll=aq-T3^njPE@xtdY8 z)7&S6KYWPYb|~86M&j38be*|*<(UC2L~&8_7Ts9>b;0e{uk3h>wm_)`MiIZjI$?+t zN`&9=Z0!1R^w0<%zl6jkB+uv?(7qJ%@`W#OhWK^y(ZnyXO=w*cl39~Ed7z;`*n!74 zAa#TCKJRS~+5KB=r9&mKL7qYKOChipl_gNgb|0$lD~lqqgGe=qWPR@Y3xBtDe)=8G z9_p`xo|)L2*p^^m)%W{kz=E-^2a@ED!!Y1KO}BIC diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/gthr.h.224F0F09E7E4961C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/gthr.h.224F0F09E7E4961C.idx deleted file mode 100644 index 9257468a907dffb643fcd684effe38f6381bbdc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270 zcmWIYbaP{4WMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`V|&t@n$BvIhlE-6}stprTWRLMovJaZ)m8Wlvz@&pI(wtq??kOmROooqL;xywi!UZ z48@hXNg$ULrKS}d0O?5f-*Yl8ePb45kXj6E>-AZ+ICQ8Gycr0RZ_DL#+S+ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hash_bytes.h.274FC085A1115B4A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hash_bytes.h.274FC085A1115B4A.idx deleted file mode 100644 index ec65fea87fabbe97d5761aef0fc617041d5bf155..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374 zcmWIYbaTsNWMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl*SyHT@kyxA&pHx|rTCA7BfK5Y%g;~6riEd72UTKAHdR{4p2~ZQ0 z^YhX&(}9LC6j$aZf$T3zO)Fjmq~n_2XDKy#8Zq)Psxhc3fTTd+!_0>}&ue{4X5?a& zf!+ zZG@buv8g4DH>vNRr$X_x`9P?}&nNd&Qri;|1QK@27k0RfE9>xv92MIYrd HGBE%EjG<_c diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hashtable.h.DC8C92A807F065D3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hashtable.h.DC8C92A807F065D3.idx deleted file mode 100644 index 04238fdd852f92ebe247098e804557059068461a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17128 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 NODeb;h+%46^-o0y;e`MI diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hashtable_policy.h.40A3B6E69632E8E1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hashtable_policy.h.40A3B6E69632E8E1.idx deleted file mode 100644 index b7a77530e861a7eab4aa3649afa8be73caad46d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10368 zcmds7c~lff8lRr7>FIM|9Kk_u5C%mYFBEknk*pduG11kC8a0RrC|-cOYE%Tgkci?D zMFoVoAP@~2)Ch_OL?Ivof)g}|93mbd8V`IiWQ*)}ckSDkX7|lsv%KcPZ|Yaq@B8Yj zuc~MIqzMz&xXEPiEt<4uSwOfSkjZ2k_!|};8e9zj{{FK#I3!@SUawyr7OD?k?jN#x zQGnjxWvCB)^h1W|7Y2ui>4W^jg2Me4h6F5FxgsRkf9;?k*?&_lEIed^Ur6AJg??cH zJy!`>6RuyrdRahdu>XSaP(Rpj&vn9AuM7#0g{@t-uzN0{0gJ;X>SVISvh~ZqZ6;+b zzG61k_dEabw z;763)5v3VV1Xv!c$zv@j?o`Y?vf?fw>x71 zYakR21i|~@`UkkIaOy@^I1K5KyF;go$yi#|9};6R5Q|y=bAOk~SgcN^s8iYS`0j8g zr(eol-Fs{?s%SWo<4X=SdU7i~D0%3fhXZ@;G5%eP74|PPJWSlbT=LC+yViJDkI|St zX)hRJe$>+?PEnJF!f>aP=^S`_^a|4ri&~`~2G#lFy>g0^S9EjX<1vz?>F?G(9XHtA z+h~IYT^vuOs(mI)_BNn-=SJTTlcq?Loc?M*FE8?>G^uQQ@3UvFXMb$sW}g{I#eH{R z=nP3gyqr$AUY#<1w$V1SdvZCRY;T?oy(vwpPE%U)5hF4p;=M4~Bp6@Up>1Qj(ZpAcW=`PG=7bYaaES8SBq@%craA+cs`ptwxGm2wL zeJqL0YadDNBhAJ3ACc@M66x;^sd_^S`7?_hQ&}BTIf#6NiZiHs^Z3)&xa`^;nF}R# z_-NJMDewEvS#07y{o8~`7Y_YEEHT<$`>*xx=aSKX33OK%m5U=E{Jw}Bbtr4qt0hp& zO!}Qn+J_gJ#d7KXx%40&FB`rrXy)O&OC?1Qy^RIkc$gSs^k`Fl&HXy!d`XC8Z@yek zi@#Upa-(~jb$xf;2WN^`nYgc*Z`3_6aK5<;2A(3hrbs-nve;|6<~52>Fq#vLa1v*+ z21e6>;#5|X$_nK-$x}m|{1${lYg|W(##xE)h&$5gzV zvDj@Dd`KR9wmZJPUVCI6&SLiz#65)&JXx%XpqmKfklakr%_8p1PutR(-Weh37?-c5 z7~&2Rn;}8NKlDF_H?6oOSBr^w=vgM)x*kbj#2a!Ea(reCb3!*ex$_UmGhaTGr#}wX++J z#6c%0QV>O=+s`~Yc0_89b39yl6RC-|yl=qOBG+7%Bl~2hT+@l-lZ@u1xWBVlBco{) zacObeuriOrFMIUPsn?c${!Wbf0TVZZ+kqi173bK4l18wZHY2&?`LhH`(p=dipWdzE zi6$;cy2JXw`;|u%dvt*Eq4{6GwGK;y;q;1vxS|lQ9$BnjLDZwTk)Rt1!9^!r*wP;I zWO4E|7_jBcb~$pPn1-vybIsS>pO z2i*1tT!^DAR*73x;`ZX&slv5YxNsxIVpX_D6+TQXzlqZ~aU`d#!PPbBc$#p_CS2IU zSgZwCx1i-uaP<=ux8dqG6u0B*b`-zHRj+X&2Zb93uIfZ_7w*`FBWpbhuu(v`+-9*T zpo;MYvdIbeGZt)CC9@&Tg%C7`_o5dAL!k4pg2|1zL214RE~U{Q>YzYI8*0Ync2 zP#XZ^Pxpc4eSp}f6;Q3{`0^D@z582H z+f7t*yw!LFO|hCHAVOc9ditDG7F2Z{HBJb2gXfecC3yd-`{OR9wo57SVb$`j$LbqZ7*AW(r8KWj1K*wW0u)QH$>9I zhv#hn?6lDh`CQI*3bopH_V+WC%{>Kjw5U~D*D8@%-k@}DPztfQXoevnZmH)5DEIrl z-WQHqpUkmn`SdgQi!h5Vk?Tt2?xID@aEXFlU#L5vx zr>^hcatT_o7_h}?kS_z;GI7)RprmVdMq}U0MoTlyp@dn!H?#ou*sjvHtB|m>*G#+D zOu&IUOUGcl^g=m+CtLUce$MbUfC4@Ow)c&H-P-SdA=E6Aw2UMLahZWRWgC~gTVmp= zrd|<5v`#%%YP9rLe>pem*}ku_dSt6s=}u4KAXGYwC9Uk(8>3h>GzlkyXD1Rj+@5swl+wr`P|v-*8%aaKf>DWgljv|pI=L{ zKH01Lx7go?1&37w4y#7<1v5PkE?U_#`L>D6cDMSCe`#y^9XP)>f@>2`SF6&eFC~5s zsD}}?5~nJ0;l($LN8H6td;@L7(U|E>t$b z9uq;oL@~|&+uOENfd^b3z#j8(yFBzf5(DgFL?Vmj5Pfn8WY5^F)NNJ{=1l|ZlXxB} zY`D&Y`swPgPi&X;fKN5trqgb*PfgsOvj=_l;rhv{XHea@9QRiIM$w;#SH$O5*!|pN z^jW3v+Pdgy>5CqT>-*pv67a59|Hp4@YEB(({PpzQ*HDXB3d>gtD?Vpqv2BFqHbTI+ z_bo5(Sn1bk^cLiGz&!fS%KYC<+zsLP=|cRv#R?1c57T%5)BOd)fBj&Ozl;A|`|X^e QIFREqoc~xRlZ*fU1E+`<)c^nh diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hypergeometric.tcc.62C6EC35332E0AAE.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/hypergeometric.tcc.62C6EC35332E0AAE.idx deleted file mode 100644 index 4252f8c73fed58d029a9b622cb258ccea9b8f82a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21484 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/invoke.h.DF3BCAA5A6E33E7C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/invoke.h.DF3BCAA5A6E33E7C.idx deleted file mode 100644 index c7dc38fd818f8255e7cb1a83e039367a19c91933..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcmWIYbaT^VW?*nm@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`pK$BPC%q@XsDl*SyBuXFU!wP)yrTYMsaR_84*fLDhpEMONtVK#xoRG<|cvMQk0rj z?8U^upxds0crKST7b6d&nXZ{(MfZbu+VdouM)A-UPVXF6@mV2I2rsm1W#VE%iCkay>eR-|j^;L($KxT`Xslikqb-Q@v!tH=0 z9v(&;Ase_MK%SM4W7GxoGX@IpjFq!GM$vv^wsFM%sT5W&mS z%7c56hcTZkA4#r=r$`u~vY4kB&Pz?z?8^G!mkIPou1KydOp#`#y^88e%`Bj>CZDDv z%-26>{4>1p%dH3~oWYx+3R69)@1Lha@wE9s;dzV<^BCn|>O-9xUVJ)c{0u0OCY7cI zQ(q&_TsxEb-?t$XN=2zTi6B1}7bO=fgBZZn1p|y+i`E=`Ty(~TiJ6H3m`h*)09o=0 A&Hw-a diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ios_base.h.979B6DBB9A7C8F35.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/ios_base.h.979B6DBB9A7C8F35.idx deleted file mode 100644 index 533071af5b45a2f187c8a55df49c820df2b118bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17036 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/libc-header-start.h.E88219B53B0B0BF5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/libc-header-start.h.E88219B53B0B0BF5.idx deleted file mode 100644 index 5bb5593f1269889ea7d8685df4c29878a1e3554e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 520 zcmWIYbaP{1VqkDi@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`e~_&C8b5F#d;YG*rY2g%;L>VbaOKEN-K2J^GfxTGE0i}b25{Xbu&^EQ&Nj`i%SxV zN`ShHD|5jX6{V&XdoVIE_>1tJ{t}rhz{tfEz!{(fbAx`$t=Up0&!t#-m^@iL`C-C9 zp1P+Ig6GfTk0h7Cl7P(9OfZ3|bept$kH@of8bDj3IiodT!arYo`L{M+^J3&-lH!mu zhY9aI@zug2Osc%9VldS_OwK&cq6l6TPZSa_lP43- zi<~E-)^MgV1!!&}XQB>F3;Udzo2%Zh+W-`H;dD`h38$uPd7x@+zY8d=&Z#a76Yh+T vJFCAm@e)wji_=RBCR~)7lL%rL7bO>i)dIs72AJgkOt_R_R)3P65ds(hy^v@d diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/libm-simd-decl-stubs.h.06B70A57602EA3C8.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/libm-simd-decl-stubs.h.06B70A57602EA3C8.idx deleted file mode 100644 index bb9e1c987a1f690ef0c5999c29753e3e3f1e57d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6772 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.B12624C6106406AC.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.B12624C6106406AC.idx deleted file mode 100644 index 5774edb15a35985a88ec36210735ec4e0dfa3fdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58282 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.h.1DFE7D0FE6434B13.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.h.1DFE7D0FE6434B13.idx deleted file mode 100644 index dab7c9b788e916022b072de755c770ab9d45244b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1018 zcmWIYbaVT}%)sEB;#rZKT9U}Zz`!63#Kk2=nJkPz1_-2O=A>Hb>+6>m7wKo_CFhi; zr0VBn=4O@@>t$e-tgtYPH#5=A$;>OQ&`r-P)lUMd1!_r3*3C#wOi3-$EiOqcDj`XC zL4I*&g<(9O=x7~X=Idu zDSU9eAR$gbT!)d1v6+#pnGqBfV6cPZ{?Dn$0!m15 zNSMQfb*H`5l2(`<3bdh8u~Hu<>|*eRdj;o=IG}1V4l!|<@Wi&>t*$perT~SPFmf$H zn7*6y&5PUo)6;Gos3*N5zc*4 zWfoldwCfsBqLY!U6Jdv}iqn*&DGc|467n4K@YHg?{fZ*bpYxxA!m}B>`WgATsrref#U-hE z8Hq(jsX00NfhGDO`T04;K!$TsYGO%#k$z5QQfftNvVLJnGE^ivCowM_B(4u(8CvLP z<|XHprlbM|b2Ced^)eV>c9a$uVM-QP<|ct$Qk0rj9LB`J@ZfksLY#oO4kH(1CP$_q z#FY#T^H;Nn7tSv?018)fREoibf0u4xf4|<+3MgE`Q6UNwmS|X0uN)9&4HS;zh!TJa z>rQ*AC9NWBvGvljg-5kS=j90qWg9E)tv z|HoaE02J2d(1r^aTXTI~yYf&H$Pk`FX_z4~Q&zsLs@t3cRGq<*0axvHq-y2WSyyX; z!g?Hfa0h<4aZc;rzFiGKVH*w`xa!3ZuM1c%Nt_H6j^>DltA71Ked^*r4O4-_<{aj5 z)#u(xhewQ z3026c~NJ()~a10hsDw000J}y&wPp diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.h.C293B8934AC926BB.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/limits.h.C293B8934AC926BB.idx deleted file mode 100644 index 1fe16996ff16eba5527d5339b2db8e68ac0f1a09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 438 zcmWIYbaPwB$iU#7;#rZKT9U}Zz`!63#Kk2=nHoSE4AL@lQmyp$^-GJ3^fU94b4pWE z^>Z@wN-Kb5Ze~fbUIs&PWo{BkZBc4ku@lfd(PjG|#zdM*GjcIrOZe)CuOUW@_?GjTA9 z!wi`ivgVxhC!J)Vun>n3Ty>%T1cuF%%~F8Ed>njmvp>v_+_~;V>_(t48wVRG+`!=K zd-f^sHn*Mu3bS*t!+ja~?9%UyTOpT$!rUC(a9{@^W8n3sbWE?ktFlL#`c WxG1@p8^mCIX{+m6;w2@+zyJVY;#z6| diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/list.168C0A1C22C8B14B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/list.168C0A1C22C8B14B.idx deleted file mode 100644 index 1f739bd546480f87244304c8524af539194f9739..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 686 zcmWIYbaPwA#K7R3;#rZKT9U}Zz`!63#Kk2=nZb-e1_;=wR2y2AR2HP>CFZ6ogcQ`; zG1%l}7MB1iBvCttw9K4TD}8^MRoaP+nqCgQah--SErPSnU#K^^j~HW7RLP dva_&purjcM1R(&F;-G*7#$aGzLonG9OaNW`vOE9) diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/list.tcc.94671DB6D4C8E664.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/list.tcc.94671DB6D4C8E664.idx deleted file mode 100644 index 332636cccfa70b8606061214f7610c6f4e1d7124..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30468 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcursor.h.F8060C576930CE8D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcursor.h.F8060C576930CE8D.idx deleted file mode 100644 index 470ee021b12f3188d83dfe09cfdbd26fef765ceb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4558 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdatetime.h.4B296C80495006DF.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdatetime.h.4B296C80495006DF.idx deleted file mode 100644 index 10ddcdc77de994b7b87ea492d6b15236fee84200..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29440 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdatetimeedit.h.9A943232AF384486.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdatetimeedit.h.9A943232AF384486.idx deleted file mode 100644 index 680e2bd0f2872ccb6acac7c52996817442e0c0d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12388 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdebug.h.2855F0F64879D845.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qdebug.h.2855F0F64879D845.idx deleted file mode 100644 index ab917a3a5b3d4cbcf7c9c3dc88c956def7392390..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56828 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qelapsedtimer.h.8A5D128937FAC7B3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qelapsedtimer.h.8A5D128937FAC7B3.idx deleted file mode 100644 index 8c1ed6779293a2232976366092f5f4eacb59287b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3530 zcmbtWe{2)?761BjfbBac7dr{b*BCp$h@CpVgkX}GG|LZSLfU3YZI)`SM4ihec5C~> z`P`DVXc?L|6{M|$3axBxtDst$R8~#vI?AfGbZk;ZDNIwFGLbxxwu-DP5f; zsq90EbZRnTs3esu+!lEM8Z(njPE~R-*u8qUI;H9=ye!&aj9KQx@oFUaULOrD(w<$1s z1vfYPu%8#ohzRa-Yq`@Dgr%~VTj;XBH=k_&>FA?EDc1}OVnWPe3XIQP+23&V%zYIi zsUU=QdAmZUAU4iI1PS8TUm8j)m$e#+^J9CmAeUqOE1lO~uAiH4EhEbyeWkUs+7!k5 zC#?U;OXoj~NZd+{Z*jD&#Q6Qy+m6lu?Y%*PD}{Ks-R&|3x_|cSN0&am=8u(fw}Cq@ z#2uzUxAgMv@7YvE3!s<B>-T3ay#4)i^WQ5Y4(Q)yb-7GI1U$VR_x}8!O=q_3 zb#h*e_enlC#(%xBYCOLt^J9tgp}W!6D4}}~fAUnv8|w~>q!PMsm)bq1D0bgt3og8Q zWY1xVYr^Ea{^HR;A1G7*Byj;OP-m+v#r`h@-4}m5b?MA9QUdXk zO>&w7-A8`+^tnG=&b}>iwHO@~f`#D@9oT#LfrVH9y@CTEQb&cO))Z!SLf~+(AFBQQ zMD*0>0>?voYNt+9V0ys*RPHOw3Gwv)ddKeH+-tFjbexP!i>NNb-eNQ1j^z;UU}i8! zGr}Cq4Blu)cw6iytkI0H1~bDn4g$fvOr&8~xUz7*H0%j`i&}S6cc1`l+AVjtp=LM1 zk5$kLRT%PdV+eU@l|da>Bh+Cv!#VaeAN%aPr%(N8orR+vd`B%N`QvBzy>^wK>wuwk zm36JgQXljj^fo^GaTl0r9c{rQK$d`#j2*D#zJ;B_p+H5Sg*S6!DI^W(gfRxLzVn3o z9pCm{ciz%TXKL$!wDI65lyq-!Z^GcS|H!%zTHYDsMCw@XV84vaN2IM%s|PjYpAr~& zQ#eo@akwqqj+))%B&<-Nd3Iuj&l%cfDhP_S47%e(M<6-he(5b(2kvnG{lGOcuPbo^RgY$3~lf+J2D8g z!N=`*y>Tl}`yxdyH7nl4Ng{1o-Etcu6-w2F*4$94T5c?sY7Mn+C|TH7^JxD-H6UuJ zbxToeZ)k7Bdm_^Ip7uM6T1Q=nj3@`<2zT}4I7J!>M{dxfzGw>`y-1^x=%%7JTss^> z1c`Kb!|+g18>t-$A?QRpvSDNhwUgI&{eIxN E0jBsMCIA2c diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qendian.h.A9F85A81B249EBA5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qendian.h.A9F85A81B249EBA5.idx deleted file mode 100644 index 13e8f8dcfc32ddb52dc168ea66de91f56da531c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26152 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 z 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 PDs7`<+O?g9+{3@b1ozmw!A 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qeventloop.h.452FC337516C45B3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qeventloop.h.452FC337516C45B3.idx deleted file mode 100644 index 8ef337c839e9a299d1126e62e36c727a93bbe903..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5780 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 P7HWk3%bU@jBnbThhL$6k diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qflags.h.E597625F7229645A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qflags.h.E597625F7229645A.idx deleted file mode 100644 index 6c81a6d902d64cbadd6215c98b38dc9ce7e2b8f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71804 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfloat16.h.0177AFB713EA8EF7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfloat16.h.0177AFB713EA8EF7.idx deleted file mode 100644 index 51ea23116a23cb720f119646ce000ab2fa7112de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28670 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfont.h.7D9F66D042F7B11C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfont.h.7D9F66D042F7B11C.idx deleted file mode 100644 index bf431e936c85077337607bd232a386896b9ba338..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22514 zcmd6PcUV=&*7u&_sQb|Nrig%`DE0<+MTyw37sL`{j2_?!M`?0E#ja5xiai<&vG)>N zY*$TUP1INtjWM>wnrJjc2}ZqF@3+>Tv(DZ}@B97n-hW=6Cv*0!S+i!%nl)?M&-CdM z8~bp8B(+cKGA7NMZ81rbz2O7@YE>K8FetMUK<*l;DRvi$ z8Zirqpq-2I^+=t!3tZaKic!&eVQeUOg+s0alWQW$8PYZ6lX zWdc#Kr03#LWhbUcZSgZV)he}1wIq&^+GV6BN$o9}wroqPZLB5RmXZEO)+y1+WtG}z zq$gR^?a&N-Wn0H&uqI|?fn@D7&8D^3aZIKK zL?lTa$7E+&93=SC1#1PaY~5|iDcMr2CC!#s7wk^>jb+)BvLr;2VS%+D(tm%nR_9n$CqMJ1< z9eADj?$+#VYnEf6bgHI$4{MSwCr#>sinPa}>yeS3VTUobNOw@m zoh>`fk|~Ky2kS6PPHMJm&S4NIag+@@A^2l+Qd3=vdsxu(L}||q*D~ly3b-HmjVPzl z5V^PJzDs^ z#uF9w)>sp}!;JcHP=RB#K|QOJyqvBQ z55ANN2C_@W-cb~B{Oa5=AR}-l87LTJw0>({b$+>WbiufjDEN9>(hTimkm{MCxwKZd zS3;_7WR63ms}QH@G)BtlJh}F4YnlWGmHMXG(xtw(G^<_0(Hf9tgUKrOOLYl7TGnZs zeh{ZzXHh>`!n9xt@vFZj%VtSPwYD8&h%}DT5K+{~}KhSCH-l*d+Xkt_sC`gbJEr}^GUtreSVdmQ*@3MX+rdloOIhhjvX3;Vr za>n735;M{=Em_vSDOpzQ081|A?Hxx#)RB^;BoX+;`U1IZXjZb0u_R`TfHusr5=q)e zt~5-nIN)b?`tEN@1(zLWOSMKtL`0-yq*)^@IpB@yDVD4(YieplTy{jW1}z#yMkFUD z4r$gT!j_(xnv-M&di#tlYs5&0jtx@&8zI*8B%3Auzms7Hjjc&Zu<83RT>6|4Kl1a*i!IH6y{2`d^6|ZA(we7!6)x*Tm57LK>Epkp_;8@fbga4?y5~ zV^3jAw`nW>SgT}%y;N2}`@=vf0~bWajo71|JT$j<;q*23oKsX}=VV zY!LIIL!0tuBV{;tCX%*?iHC(p%FF-@xqih;BRgAQACqNGg9=9T*ny^P zbm_N;#Xf?*hooV~Zq3&AmGJvUOazKHr(qL`T#osTUt$7lMCWD^b8p8@AUc*V_;Tz4 zk+ZwezFOX3RAit%8GiT14V>0x%sBgR%)}y}BP?ruge>@$wv`v3V%e11rS;pZeP-0lSByq;UBcafOmVTgMwAWJ6xVD6AE#sHoEcrPw zJ3pa8`i3(IlW^}g@;PA$k$$QC;H}tC=W$aQBI#6cj zbTMo#V-LK?U04^Fq4@GOI?GP3?&QJ55^i~SaLLmRiXt_@rrOEv zyhN%s)i+Nw&suBnkZsX@)iP3fWU`no6+}u>PM+$pukh24R7Glo46Wo=&?`(eDcvWb zahBXv4?G*&)hB>=ahiArGtFRTk}~N2gc|?;Dal8X>?mc7JO-p-YV7ual0TjwsT#O${*=0pK$k2ctw(Ow(GwyPOCgSSmjrA zmXEplW8E=oE`59}s6j-i$}j0G$C&vTD^F71jrgwHgQ3f+C{j!8`UrUh*auUs+dZdf zVL`}qfoRAZ7P9Ew&^>kq}1{~%oDd-b+faPtbiQza)We)(I; z)bKLW0BkGMoEa=qQs()&rtkcHeqFdCRYZo$a%DxNT03#mG-bYS`=RYxy_jl>Q~{ZW z$-{g_sxgU4^LL$$*yYW4R#&8f$n&oJZh4VvJiVrBf|g#6>AGQ4F)%eprVu#<1Yv4y zZG>q+mc5#}h9YGkQ?MKizKp4nDL3qK>2JeBYpVPR^u36ca=%gzecQ~`&8!0TZd0F@ zd+$AIQCsC#bqk$i=5spBni)SVYZtwyb|BxWv#jQ()!dV$?A^RS^2@%9>KI*qHZ#rE zU4HfX3J1Td9@IdQqEVR^atrWfOf{9o#3`=U_n~*f?Ff}W&>LFF%?tHeTw{w@zv9a~ zA{D6#iWw=71TmOuVjMwk>bWN~YW!K!NRhITX|OyP42`MAN8y%joC?QxwD(RYNqm=x<=cW`!;>v9O-f-@qXB-7K$_)<&2U?1&GwB zQMYM-{1P+tT$IYc)#dDE=Dp0HO!$56t~=+vyRMbWx9Kd0dF#Wxv*a!!^G{jV=Ux3_ zaBHKL3z?}iXWux^oUmZL7inKb6=^e(q!S5 zq6s;bV~p+0VqUZKcw4(72pWF`&hpBOto*o(8vdY=Qc8b&tncB`gy!H{YqxfvQqzX7<;O|?6aoqd23IV-_m6r zWxhvQWm4(cF8_T$MxXEL&F2D35qrQR9`H!|C9ZBMtv0PcIIOoKMIlptxjrb4siwHY zQ)iW3eyoLgS)3xJBU6kV<0(?3p~5q~OT3fX^-=i`x=KaNT%?EIzO!EsThyz3ydtHd zoKQIw434QL#}Vz$Pxjcor|Y_Sm4B(}y`QW5dBq|oeo60Iy}jPuRQk_;Wuy;K)Nu1~ zm|>U_LxaHUzwetfqQA;FYU6gBRk+P66*2KkT+^ofvx3*_T?19VRabgF_gv4N-uBVG zi+_EY(0`E1zt&kUGV?{|+|`6Ok<0w_+p70f{V^X@%QU!0$xr1H~xYlnEuA>NBZRC4&J4voXQTUGvx&a#YoF4H}1PwO_n zFE%$!R{1QQWidA|)}wrrcTzv@d}Ud(BH2)z(eh{r;Fub<`A|yx*TGGnCzs>>oc;1C z>mwFQvHW+KlJcPSk7qzmJCqYCN5ag(RFmVFIe(4W`u_Zdal=)9Ue{+8Gp}L+G^Qz6 zgPWA5Z5yFTby3a~CQo5i=+~&z-MC&Y_AD`_DpDvic9c7+BGs52;p)_byMs?ewM+;(lE-LXJsq)WsmQ&3AleSpFfe%`Q>vT_*2Yw0a_rhd$GktRT2{Hyic|@i2FZiKLYNvm zANBp>6D#hX8?ExQy4q`*d9Ch6zLn?BFTI;LrYuiGIhUEoWd@N-{L;AHbbA#s_d;T> zB2`AFPI4z7k!p=OhNDm8AL{SwUw*8obV#2d#oWIbroGvtjC76VYkPs#XXJhvKTaE~ zNP|#VuzxUYN-@=hIU?iUnqyWkzqNC`A`L~R@$z`E0j3(0WA+~yyzE?^KffC9Db3NA zkZHWqG+wueiC=9A8C#&WnS1|WwI3EwnILp4Vv~8;WL}+qC9}K9sb1fqyX`Y4#Y`?E z4ab(No2$bN#*~bar>gaAKFg-~g1f|1ASh)KrK}~f9PIP&fG0P4f2c^wD5Hnm13VK` zP5a&-YC6TuSbz1|pY~}g-=q)DB5q!!&)?@&WBS}0S}reur{Q{hjfGxgVf0IlNiEve zI=pFSo+9~UW3h59tXP;D2j|ewUI%h^CFCoTf=qc#&SP*y6u(BB{;{L-TK}CBXR7=k zx>n1Xyj%~KZsne~9eAfvp~`3IEZ;G|?^qSmsa&mu_5G`THA|72VsjC41gvV9YE3x; zMyozc*|+Y|3l+(VOg-hEU?ohAR(dqGoVz^JZIL4RB2y)~68Jf$8k56YYFC^VbgSCh zPZTK=nJW5Mgw+pIBhz<%?cU24u3W70``RjbkNMqWpqBV0%@6sGVVz8O7JKs@8rKZ2 z&fwsC;+MEuRb907V2I}umG9O~u!@^k>E|J{rBzg`4?=-uh0b!2nGfnqTzpn({Q#fO zmnc#as+}!o!%V8{hY=dox>Js`3T8oFZ;6(xcPMW?onz8(`Ix>L zx%B$`-tx%8<%$%93OAG+!rG3hrm(|@ibm!9d28F|<;E@c5$<(_JFhgRw!LU=l>2zO z%D3w+oo4E3-COrcrw-41&~v5AkLxUpn0b-DQSX+iRH`-UF|eG|SynLf3O$lO?lkdo z@HcbUsQgErWj8bL)>-^BKW%@w=FWAB)C#*)Q?3c&A5&wOn#61`8#4I#I+Z`vJn#++ zzQZaPG4V?_P9Cs-NQY+f21Tleq9(`_z)3MRj(LqqS9!0V6M-olnLcFlhYWU6;@8NS z_GNRENnslmX&5q2W%5)8z9@c;j1T&(dVV73#%4u&4;kN+--8}tsxdjdsN0r(x3X^z z+@eU{$dn`}0TZSglQ_ix0)NQ&Fx6 zha*fiF^;Kk?z%krpKT{^SNZq4oCC~!K)3qi*Ht}F&8@makvgKBMsg#Fe3)u-9F7!z zW8`huM^0~?v>2l_AWuCq|{CU^w z=V$Jhfn}G@vXYxu>Om;~a&*+dh@d?#o7O@%|3Wu7=$qZ7&J%Fc>Y*+fvHVKxKNP7w zDpXsp4OR{&vute+4QPv4`CJ zkb^MsOTHU?sln-EZru+lQVKHll6!%FV5*67ERW$i<1Zy&Ed-_-$TW?~)6jRtug2&I zkR6it&wX9q`)~zbteasjGtFgXsKNBMbq^eT(eMjjzE)@XjH{pVs>JeFtpyLoOKIbun{Z)joc<{K`j_qK+$41j^_jcK{if z8cj6o+VP{uNA)|QNL7&OeffQ`52hNEV+LI~P^b9d^|TXZq#?)@Z;ppm4^z@+UhCHT zN7d+X(ir#VFw-3U3L|N0W|`-48K)JgA&Ll-!@!|2)!K2)p27+#L&vV4d`9K>pi@O` zJ~Pi}a0e!Ssj-j0Z|yTT@AbDTzoB=1KQr&weR|!`9`}Zf>3UY>zv(Qqxp_8sUPg}l z>dWLhzf?M}@;y4sa_+HQUlp!zF0Nkss^Egk|Ik^^GWWCkWFCL}=tqU-{O?u1L1&rE z&2#mJ7C$-C(c`z~7gb)Uv&`q_`P{jOOa0>8C##P4yyz+I)AyUPbsMZ3a$uP_);@k<6Az4OlNS9}Es zdKU!+`3Hd@OpRl);hT3-%0#xku1I0X)L-ro8&6C%CWm9R+51<+IG<(LRsLA-+j{1) zUSFWMO{+QoXxEoF6)6Vg)RpVPwhB{C4jtAidGQUaC;Y7P3m~V69pLH#4q-_AlHSK( z*IKe7bLua+WpZA@Z{(gEx%2K})P!Y89V)N;MUnhaPG`9@xDTdUYmTt+!SYAl22ME) zOz$I;UADu7$5dl-%wrGr`K7-fB;Hb_>c~_@t^(m6Q;o^tuvePhxc<80`a3GmMW!d* z?+NbCHZgURe(!c+li&E?-x+hij8q4inwy)$&H+>Em%8NFl!pH*0)|9n2s8&mEW?x- zDqXI4zx#@JepmT1z2i%md5PZ0jryApemk|@Bb9%nS@0G2d&S`rbq7;-=x57GvFp`| z$;Te6{IV|SI5QvDS;{TyRds5|gMTQ}U{uB`TVbMNs`Xo}mO)+EqZJblJyrP^x|n_3 zeV-ocUwrV%^^r$Qo+?rY6jM*G2X2U|CdM)Bg>yghTmQ0Bi6TWJQ-YiTZDDF?t8HnA z@xB?2foBZzOlI7eS84+@Z_vX+ldgfqUDl5N%a`BL zS+?>DTlK(u<%`eVuTR?emm)R7<{HQiz+Evl>fL4Lfl^+!Q>n^N>2khg<}dZl^vbip zcI@?4t!FAfs=pJr>U=J5*54}MqO*L#%wI5PT%BG}k~i$e*_Vn`8?_0N zgTO$TYT7uQaMG(AEA4?T|EcoLAg72u=YG#QY?rn(b-RAqQR&LBr+Q=^c&+l2dTWQ6 z`H;?XM~S$0cGl&8D^hEeQ$wx+V}_}*?|??M->54|9|nvKZkOgRFqDx3@YC**H_2`^G*w+vA%1 z2SIj-X^6X;`FOz}^*etH*%VWXyZ!$6{)7BuhC?>pl)XLn&3oE@L(d#PSsES8bdZeO9Rjh$8s`SuE52;u~yq{7HdOyV)_;^Zf z(32_B@uigLF^OI8=T02tjpls7O%He&-7eGnDYhY=O{oofHpLS0T1qAKT8gdUQz>2e zlintvPbv1%<0+~n9!;qU zdNjov_*P0CU;MR4qhT9=^u>;!nll1Yhl6eYN+Wp=F^jE178}Gt)yA5LU4Y zt5^tK)B@oYGo6BqaL4T?5YDiAXIMkJGzG$0W;)Bvv@rw1ITm=1h0=2;y)ff2Wx4UPj6HM2;z;*KoC!$E(CQpD^IVbP(|#04IFcrI){~~Z8C7c zabPZUH*m~n-t(Cs?SO%!fJYYarh|vf+))s;^BNGAbJKEerhThMsJNVm83-$Q@Csg; zUdMrBB@bT7E7Qpg2&;I|Dqe~1i-53(2d?3v(-tiXi>U^Srryt(tHt*ov<`%L0yv2PU?K}^nL-{=B0Uw;` zeE0ai;g6w}Vjfn^tJ7=&!V~WKg!|Br3kap$vy}VLdpHoDbI<48hn7PiyyBj(xDRcO zfROJNmG9QZpjd%hlLEJv2E_{9>KD2-BE^=pXfb!onWI&4Dt^O#zR`ma85t**Kps&4 zDX?(xHG~}y9Yho`j{+7#%MBqA&{+|FK-)k99UvVM2NawMXn=G?8PKULE`LMC2IEdw ze>>_C>Ht+iumQCIs)SStsY@q+!W|$R!VL^;!6Cs_=!Tpu4VQfmv;lPu>IoPE5$Z;^ zIuVzaS_|zqh5Jn50TdW%redfNcm%3Lcm%YlfFV!`O)RYAI`{b2t6g3veqZP9t`jf; zjfHpwT8QdRoOGgMzr+Suqkzi=Jc42Y!4$9+fli?I37vql5R^b8On?NWBMyNE54+zi{my$iKK*aYN9NCMsM6C42zD^Lj3GMMir_k5{4^~qQ7pDr~`ZjOe{L|0m{V4z4HXL-D$4&FNneLf@u!NhIa5G)Z5qJTGxCUg} z!{FWpu?i#{M0EA&>O(t4$gXFm^~{~ltU%bn{5G&4Iyg|w!(kKq3KB)I2W(uR9jJuR z4rp}*IgkqwzyYTeq8ms_X!IEmdB&^KWFn9Q3J?GXdIBS01C}73fjpSN45*C2Fpx6j z3Rpwn7s&Gnw19O4R)Ol2zgIr1w0%lXPteT2tiLbSfNUv~OW}a&_yfXoraWgA4TKj= zdEr8M#gtbrgj?L>mcD-h8MnE|Z5P6Q?s4CRP|T%bfFSA3=DSJxZbm|Zn^fRJD0Gtw zbpmaW-JrPztn30-jyzr?_$^@mL;ynxa0Z!!KpAL4#A47CB^(CQV*rFf<4Mp9G^{{e zkR(D}U=0LXP*5e11=0nuf@*B))@Ix057))xY`Dkdd(4;Kh=A~j`8{HxMCkGH70ED@*>Dj`$|mIyEimC%{f{f+%FY-#^* zoIyk8wF>MLnmHJqx0qEbW;MvpKqz7LOIT9_p_ElAWwq%En2;{mZ2@qhZWF)-O9ZZk zN(k42o`i4~S~dvEf^Q{+gR!b5Gid z{i|Qe=X*bGoq#6^u?XkPm^b9)q|)CB`GSfHzzYeXO&e|x95@$8%LH;kRT0}lsuHdR zWeGS7$s#xlmIxFJm6*G(VWpd+hv{b=+F}sC1?vb{3)LZ53$~AF7HXf6EGDR-Ay{-5 zKf?Wv@XGXB2=+P2eNO6|OCUVpRUYvA6v_zkf=wXMg~HOHn#sdP{&>fxt4o`~yhbf9 z{n;gOIL7toEaW+>nXoyd=SWNC0UDvnbJoT{c)>zmu$sKiqz!vQ??wT~3)bWXYhxhX z;(@n#I1K`D+~Se9cq;?pHV?eb!wp;M+dT3%Z)G6lyLsii1sba4yH(G3i!=}l+`J0h z0u5CP+^QG2MG}GTA<+5oV#n!vn|6kLFsu7;-3)`z_)PnGL6bB(T;iw+@DGhz;gpt3 zw~Tyds6(bBSP&XpV1j5w2?vBF2m+#2fLi0Am+Q&+t)nubgir)RglNM+ffp4Ocpy@A zNI^lpfGG)?7)481_YxLQ0f3M~SVsVas16;Wu|(j4sHDNQA)hRoHG3o;$X~ILSFCFI zpv)G0{hsq0p}{NG#6Y;u1Ml-nbQ%JV`@GJ59%&#Hx_K44`MD4(7s9YQUit`zgxy8- z5jpOOlJZl0B6nu#BStqhgh|302t}eA1VchPqK{~)JJ|NVcf?n7Mxi9U;rM9lgf8Px z7ym$rB;-dR5*eC6NN5^?JtEW43KtAD1mK8DpyT2Ng;;d@E##}nrH zgee9>32RouS{ewYtWGJbPvIM?JZJ5nvsjmj+5QEKHO#|Tto19_#xO*ad5y`uHXW}( z#x&k&8gJ?ZBO#&PG~Urb$m8wvcr5J}p-LW)&*S|KgaY2YfJYhb9%ga>S-b)vDWJ-1 z9x$5+(K{Ou=J237JcKSjfiRZ`%;iD!Kn8?)+|UEq2ouH=_vD|jXe;Ku`0({1G!f_USoYkZ!AM!FZfq;jR@76t4rDnTR z#ZxiB%x2-USp*%p2{`5k+8|zxUZsKYC9m+3S2f(Vyylf(^E$M`(~x0n0z^hVnKW~1 zyY(v~reh4pn|$gy-L0ZcT;~=c%5X1=Kr$Ls(Bc^{|BMIGS;}19xKkxyOF4(AFIY2YBTJJp3=mvn3E7 za??XD6X1YgYuJ5(R-^9IMLCuTkQ$XNzhE9bbkl)ZI1E?dqD$Wn5PS`_N7NcQ$%v27 zlnsoSI~#S!ClfN|;i+@)kF;H#jgroBpL0Br+Q^*$YII(m!Egyc8!xIu=r=Sng5C^6 z{hIr{<{>n)gn&b35cozDhCpvfN30vs>Bxd~fo&tdBW#-&D07`D*I5Ah01$4ombY09 z9YcU{heh3CZ3&G8gx^@eZ~BP{2oG4m0~f+W7Vyx8@H-3m-G%U!m4C`Y3=w%cFF&1! z(98v)(|NV&ysm+e&ui!NNJFg5=gsnYG!dYe0-Hy@q`Ow!w+cue4F*B-&=mv{k4gxM zhc-h19yu$4@34lz+))j}++hub+EERH*&!X#b+igDbs+0dk^t0^Bm&f7iNMiO2}OS_ z5%4)GA^04Y2-F;vH0-tg^{?~WFGq*-mb{(U3xuXay%0o4E=^lvl;nD?Oh;8L5qLRj zgHE+L4e))BT$*rnSVO?)s0M}6Hzy9k>ad1D(@_mV(_x7K(NPJ3=&&bbYhtUE-usRfuXgV5JLee2!z~`uhpmSIv@N!hr z^}V_`$Ia`p2|I1vJQIcvYan!vT!dhANJq3BT|?7ai>43=IWh$y|#q2mIUIPidu zv5%Ni-s{!PS^Mz3GK&SxV%6v-7zm4*X)#j>3I~KGtl|<@gWxhi*vdV&@&JQ{wsDVb zJb;26aBSyM+j&Pa2w@MgQwTXEPwQa1Gi>!9(?N`5r7WtHb*BB))$>=n)qIh0P@m`Y z3QZ72l!eGd+PBaq0pFDuuqq2!eY%d+2u&BTwg$p}UVlGt>9X~xcYwE`tp~^!Xht$6 zp&7AN1ToS=P5?%v3)CV720|>N@dZ$kWF_pJzxCUPix0nfwjzJRAr`nrszI&c1th{1 zi4HxB^N3UFnHsWNneSFsfi8`Ju#K6vF*Ch|(4b-y0@g^P?9+ek*C%qz5i``e&H}Hq z%7$&jb=K%QYiS_dV1YMWIBu}W8?3p3;|}w^!-6O%gV18ute8a`HU%@dJcBE=T>*|+ zJaiVXM(ZIE=5W&-?m>s2IhSV)oM10LfA-)8AA*>9xZ+w5E=V!F3>kBnKl3)$vrkqfls7M%qHEE8M zf8xPFfHO%IIE9P16M9W?-hj~CE@_Ev8G}4s0O%(!3jaR_sd+k(Vu`?e zQVBhiqn8VqCzTMI0P6^JCza6Q6-xxDlS&BGi6sKdNhNewh3z;XoDQ{LPk46j-FD7h)UwBe1g0ELo~ zG>UZ=H=-*yvO@f+Lyc5{vMjWgw-lxb!iA`)G^i~oRma^h-i=K5Q+kj zy~rwEWD)dU0)$JXA5tGaX|vJR zYQceGbhc~E_ZkbKl9yM;&-_{1`lr6dprb_1`sM83H#_;{?Gl3LphW~Smn=faT(k%R za%nE%Bj|f~+^yvP8oIV{M|AmUWK8q4A7i9@JF3BRmB9;ggE|pCD zylBGtJN9Q{eswBgU1@&Z8T!G!Ge2AY#&%rYjgY%2O#pUD8Uc1O0wYeBrWS|@3Ja=D zQJ3z`&^`jDO9G&t!0!^F;=I^3znZrE>+P9y)Td<7>IK_gVTsWV3F(X434kxjB7iSy zhqzv{C}?+#H9W@Np@|It535uQx}QBO(LNMEmeM~=fbV67@8yQ?#fI-ChVLRaG&+A+ Y?{O`^EV~%u!cz7rT#A8^Pj#OE2T&_nE&u=k diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfontinfo.h.5A04B1B87E9B68F5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfontinfo.h.5A04B1B87E9B68F5.idx deleted file mode 100644 index 0e049f7e4e1f7bb3880e8863dbff3663b8f3fb14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2862 zcmbtWdr(wW7(e%VfjzsI$FeMsby4I3G0378NkgLIt4XI&^0IqbE-kyT4`3Tm zF{b{|YRYCRAJt%vBQ-S|mog9^yqk6B~ ziJVC65FCLTA>e344MMZz4xt9gEtc~<-{@@?c_HWzh@M8l=M&v-eocTcEhsA}ZGDy9%nRSdt|T8llO`Iq2~HiG(yEq zN4MA>Yoj?@OJ?$eO-hp zfOnobOZ{B+6M^FaPGM8D0B=y79sOQENZ=HJGZmR?fY;`h7}~x$_$Wtf08Uq=$C!`p zOVGM2?KR0X1+bRUCc^4t@9qyJE#JC6fhMhj)jD;0_=Rxz)F>QR|C|4j&P#QhIC>Vz z+`?J(;TNp$yJl~FA-$%Fqty`JkYq3dTy%L!f5F{vgB%?Pa6Zo00lZdrtJ&dO3PFz*#se1|MI#VmEd2^l^?> z0i26-V|$xk+;Xe;p8d>}gV8XW*umt?t<$ca7#QW~L|C1-C~qlJM#^b3n)h*G{ej;( zIvLaI_v^v&NhZtC3G^@N44{GF9|< zZU3~EqF7vlO1Q|@lci4KaEZemLWxrpmP;GV?U&9E&HE%Po}zIvDvkxYH@+$Uk6&L0 z^X_1-@>q1qt~QB9kAHUm@(W8i!DW#QYd~FTNx{cHim8|Y06y= zO^h8>PgIf{{N#;U_KgVkLDcryzQuKyG>l?L~RNJbmqI8KG*NZ!CiBVMnr) zEEup82nI3BLIGwF3L0ZsAizvgv0CyW6_5+ER+b5Hx^ZHo-SWeZC4_*b%7G*LUb4AOl7veP1wnO}(@n|Fz!(xihFEMc8*Gy^quOYM!(?%>rZ^S4!AiFrzVqrkPZ4%`Or9CoLE_{R zWvv4~c-cN`yl-(swD6#Jo=461j~?uIks!Q+8uq-{m@Z zD825b6-`ky93QYHZ7WMBY`LS`zU%$g3Gjv>U;Sn1))XG{&1eA-T5<=nz(NpMHKQ}& zNN8nPZ^1iKlW;Z53LgZImWBg;C2NA^eQ zLOpeK-RvA#QgxVSaSD^7f`VpoDwC=LZ9R8-X!)Ew-lNgA(B(I6J4cnfj(tuDm{n#D zIu_)f5Rhda2ta!i^V9<4-n!aYbbrqk62z*q>Y>p<^@+Ev_7DUZ5wooFUZW?9|A ze0QjG`!M?8`iz|C%un$DSo-zY3^VX2LF8`$1R2>>clp$?aElO}s@mi?s36y>-{l!^rSP{~mACy+e+7a$k>ivR!s diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfontmetrics.h.6FB4D77108AC7E22.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfontmetrics.h.6FB4D77108AC7E22.idx deleted file mode 100644 index 0c873a92aa2df9743ffd96fccb9b60f3ead36214..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8750 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 Yz<)3$ML~1_48|9OA;9z1-}Cjq0kZ-G`~Uy| diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qforeach.h.2158A919387EF180.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qforeach.h.2158A919387EF180.idx deleted file mode 100644 index 0f0606bfbcf9603b92754fe4f243b96609f7d1f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2552 zcmb_ceQXnD7=PP!TU(B??eo(i2l_AI227^J-4JPA55Z&$imR@MDh1f(r>~6hp+gNC+4RNQ@-JU<4NpiHaJHhJXg5ESL!TyjR|~GW-RkG^YK0&>h8YgK&UGm+8oD*WJ3tC@Y4-VN#((Td=2%_w21wJ+ij#gsKGpVP#X~% zBT1}EaV+$w+9ylEFCcooUhtY^ZR!-2Ahu;u03?TL0N;PA8^FVZx)Q1(DJs@Q4-cf6ZHt>{E5z+V_AH7rX84x_&A zG<+uK$&$AI_In63bX-GG)3Kh|CEavMoe68L`ynf$$S$?|pVV|PPv7s;qc^72w+j!@a-st^+7;;R~ z^(c-du@;wPEur5pUP6s1>;D%h+AtWKxTI}>$-2+nNcRj)QVas5pp8A!20UpJh7(E{ zZIU!K6v>Q7NbgM;%gs@REgXptuCpNYd+~(_3&%!V800EKtl#fnXcFYGTF_KvVe`+w zj4%3blm#lR%rwNhs$3qEAbWa&*N=_=@~sh9(`w$vm$QUWb=}GO)CPtbDzr`k_^N`c zN|PW*0eJxcKH2QMH2C@Ho&N%V*7M$camSKZ8N`8qJyY*C33Ax;9S@X%|8KjF58PaF zXm8q}nQ3;jgrF&fHm7MIJLDBtdho$?0M5phvxLwDdzZ|8{>VoaCyT6AaJ`zE8o?w~ zy{PDuH{P`GIag#Y26c5ob)iY9dRo`@(rY!Z-zu_}67SlYI+IW}(r`rI4-en;&LgQE zN7q^`4BLnLiqoY-=#}p8FBUZIcGwt}YvE?oRDtW|R%SVV7T-bZ%&>ev|0Lz`XU`T6 zT~aFm*KKoGQrtny4=0M>YUC|WHs79KO2xF-ASR8rr_i2bE_WC0u*GV2mbPqf=?lj? zFSB#OI>dy?%WZxK*Hj(&`o=qtfw;ro!BO$eRa>_%J{agBAU0Pe1#w%GhyU2M{|QLY zgFIR51wRhVz16zrF6%Sh7d}4!)v`gb4t53?(R}G`!J5n##isuSPIIQ{br|y&^iohu z=r%Ql>g511tRMMHXcUM!CCF2*?<)RuX5HG6JTPkXd#RXV1G55ivRrUxa5m*;I0w!i zs5|@|WKT*!D?=yzuJSH;`_#Zs6Wew{9T(acmQZUt@K&ce=-EpJY=LSTi4Hv&kzv2L zQOnY?+duE_+6U<{h{+5A9VTr!*6U78yKi@)qo#rOd(l?cSceTOt(uaT~+Qkf#Yx%L+*I(;BcUN4xcZCq3 zo|};kz=_ZiO}DZap9u? diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qframe.h.AF3A096A5F7755E6.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qframe.h.AF3A096A5F7755E6.idx deleted file mode 100644 index 35a316a82a398d3d256150d79dce506cccd2f6c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5244 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 VW#m&hU9s+3Tg>k-v7=MS{{U68Cnx{_ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfunctionaltools_impl.h.1D5E5ED3A5B51387.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfunctionaltools_impl.h.1D5E5ED3A5B51387.idx deleted file mode 100644 index d40d22e109c5f853799eb416bb9f1eabec10fac8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1956 zcmbtUZERCj7(TuISle}%e$1K;x2_#maVfnk>_fY)EN!eACX5bcDA9R$ciUaPx3}DT zN+@Pgf9Mhc7e1mD3C2Joi5lj|M)VITCi+7#COi^T@fBmbTiN#gI-VdMiPAs&mP!-F zEu2)SQMZ)yfSkw01g8l}iPN;MkdT{b zLm5#LVl2x}Dzd14A!Ki1R5iaA~?ObEoER8)c8o+;#b zy<<+oiXv%aqMVl^lm7=1^GYrwW@V0773~(Nf~Hp3d1h^b{Mcxe)z5YetDK0n3Tutj z0v06^7m z^cu?=#xM}ReD0BjPyZ@~+?0=0x36pu8V17ej=y(lZ1(5w8sW#@vW{LF`sV2xVe{jq zJ6G+#s)q@8_sZ^|VF3J{b(@+arRVq5s6Mkgc=*N9j#52ku_AiFHqdAon86`jCxs+7R7Q*Rk3#5dQwcp;NCf>^oLoci0kUXx#w!@uQ#h-Rzz|QKPli@Q>GH zH>T%ol!Jf=>H>Ed206^82Eu*r=*%BeXRRMml*?M)X1dYY=thq6Dv|U-}h*cHs(CwF}a( zawGDZa~^WyfQl9uoxi^_f8YtEsl3MOTA*kDjHct!?OyW=w+B_UjgVfq^sRsaLVp8q Cpff4} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfunctionpointer.h.DAE0E999D3F1D06C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qfunctionpointer.h.DAE0E999D3F1D06C.idx deleted file mode 100644 index 4834f219d79817f1b5a36102a6b43b435f057010..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmWIYbaSg=WMFVk@vO*AElFfyU|#(J^ds{RkBM*}hgOC7N9?1YkE{H~``1yzO6K9?` zssjqMaIi?hR2%xQ|Mz^7^E{v-d<=X-FkxVLB!bw*MajkDAO@2Zzfyf8t2!$qGXpb7 G00IEKcVfc; diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qgenericatomic.h.6A0C22DFBC3BD1D2.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qgenericatomic.h.6A0C22DFBC3BD1D2.idx deleted file mode 100644 index 2ebd74218feb3e2c710adb4182d6f12479e5c523..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1226 zcmbtT&ui0Q7=GKWb8X_9&9>TYEt!;|jxHI~;kq$43dMrj{pexhL1Xf@3p7bh(&^NB z-NA#nlZrn;JnKdD;zF|U`=$L_gxwnG%iHJu@jTy?FN^tH?oB5^ zR?A;Ch^t@<2k_^(wm#y=gg(=$>th++bj2n88d;yI|997_#8eC-7AaB`k6~mzn6}C@ zFsErts!|~|(OrF&6d~^{)v8s?c8LZHbFO9RYO{!o_rfxny-<%RT~%z9;u1S8r)8AV z>Mc|m6Ps=!dv#6IGvfS_nn_Qm9fgu!AsI=MRxE=^O3iVJxuV!MsZ^u|SDF|-IVwwK zRlP8AT+&UoQqu_HS<5EUWz{mOIBjbvO?7q499?N=U747~)>Xx`tG!jOYMCXyY$&R2 zIc=`O_eEELvu0e{!RvB+Ygm1}dM?uC4?>5KOeAG5K(}|9p#N!p>T7Xaj{3W}IwA~3 zhZ3v|+Z)5D>jtF zuYUaMJNt}-eIXDAdIk=9ff1Bar{f=fi|?__fgnc3q!(Cu`OLub{cPbc$_q8*4Mqo> z@)qB1KPc^<*bPJXeh^|@EanA3Ezm>RZBlY%l$w}*v3~32d7qCLQjikrt6JvxLUmIb zI5Wi;^vqxuzMaZ_+4?+L@bf}!Hg<}U^Mc5W5q1#f7_OvtF(&4dKUDXpf%E_IZe(sg zxp(pPU7QVc2M)2>vBLA6pPSi7D4qkZkHO4Y?54Id1||eyY9|xVoWwIx2U#~e1a?#V on0ox66w2e+sw2^)$%=28-~D!F{!S&^5$^4SFs;^~UX}p-13OkqM*si- diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qglobal.h.1BB3F92FF7EB2D4E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qglobal.h.1BB3F92FF7EB2D4E.idx deleted file mode 100644 index a4005a167cb090f43e64b698a4c8f0d58569eb4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3568 zcmb`KOK%e~5XU!t&^CR)-|u%pS&B+kfy9BTl`3%oafQn9PBvD(_SW{c$w%mw6DPhC z5}$wr@C~>!+oYLFNEFGj66Gha^WX7!JRZM0J3ak17zD@BSuFv_x`H4W$FFrp-1H;l zts*462*a?d69`#m9jGcZ2BZw%y6~`cRC*f5oSz>aghFwdMS%Us+CX^8tOesrRWA*v z6T$s7xK2`>g^9occS0*)IfWj|xYH(K+-U137cp}!R25_j##0Jv9MXJ(Ri+{-RP1M2 zMY7n_q6!8A<5f>PGIhIbsTRtC@e_-sE;HE<4eOZm4Na-z*n6E4CZ+b=BZ*K6tNFP_ zWeFHxkLW8fQnSdQUe@!s>T2}7v4D*&%Y~SPz;p2Vn(pC1YaAK)}GPjaFVTA%PjjdRGCisluzkFMI<4XXc+A9IAL4(wviH z|92|A*IL@V+`~g2tD#VeGSq;FmyS1kFvX}i?++Waf7GfHt&7U|{|AG@_azZj?!6AVrg4-L(nkiylmBCjXqycjo7 zu_gRHxcSlZ^W&>0g<`S0w|g{yl(*;K7e0J?^YU|Hpm@@Cf|Y%vVX@9~vWDB=1%%?@ z<8NDEGyY|FcYAMVYh!a|YI=TRw6id`wmi8yKG4(A)%~cquYYi8cw}s5c42X8J;*Ny z&DMPfL9j#kh;W^7o^Xh8hH#EBH?7$=?jQ&{2zv<^2}cMw30DYP{%Krqnh*A9z};O3 wduFM3fN+6uiEx{+O)kEy7j8X~JE?3BpOjF~Uy5KEf%&KM#5%PXGV_ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qglobalstatic.h.D70EDA33C1796626.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qglobalstatic.h.D70EDA33C1796626.idx deleted file mode 100644 index d20792b8098c0ef56cb1465bf4a6cfddb77cb5ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3536 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 Wx3G4y?h7V_qe23A_Wv8_o&O&&@CT~^ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qguiapplication.h.785D76C858739A91.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qguiapplication.h.785D76C858739A91.idx deleted file mode 100644 index fa21a2553804344d31603517fb4919db0b90de1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8956 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 <3gD{6vOf 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 DhGi9m diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qhashfunctions.h.EFDA8E5E332BD372.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qhashfunctions.h.EFDA8E5E332BD372.idx deleted file mode 100644 index c269a312a65cd073bd2e84a9af49162901891c91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34026 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qheaderview.h.23F2BD834D7DB292.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qheaderview.h.23F2BD834D7DB292.idx deleted file mode 100644 index 031b4e774c61fae901a07a385ff22296ae485db3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12500 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qimage.h.67FD69AB005377EE.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qimage.h.67FD69AB005377EE.idx deleted file mode 100644 index 6444620843d77950d98a41684d4ffb3dba55b8b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20964 zcmb`ud0Z676E{57uDH7l?y#H-9v~o|AS#BSBI1E~AE+osv%or_2nZ|U5u#CyM~p|* zs5v|m<9){Cr_pFsykam0uf#iEi7{$IjJY&V^~~1HYTmqmJbCR9rjTn^iD|Nm-R{abBrLAE`PBvi)fmWhkgsyg%-)D5#*KDp37t|-%< z>xgMZ4YVSSC?zk;QR2vQ%NN^ob2Q!c$j{5C#{9c`za+|{I&{WdZ_V6lbd{=FbE`r% zxaCk~ZaFvUv0eL^R-Jp7v~;U?mHdCJk+*2k{P`AY$-lQ~^$h=3|1!Otx4UjB|F3-0 z{vmtXKV(aLrtdU`e@b4lqtMwSKg%JgpMB*F{mU-&RJN+R`iq1<9rAPY3sVd2c}2r< zLkQ38D$MacB&d7V^%EbjeYm!eS{)zn*0WmFA=hEg8&lAEOkSolCqK{Cj&DH0o}0^; zl3*_=$Q}2b3>i7j-nsTXM~D0|c}@XyMMB0nr=zI1qp*8UoX&KHQ{~K8rXn?;m-9(U%~wWB99?B3AknD#VcCw{0tXl88M0wHc?G$uKuWnIOJ~o& zpXs0g$Ao6u>1fX_Ko5J-NLRj#V@zRAkuxXLt&D$mF3caLa1gSDES#oc1!yR<90ks7 zOr5AF*G~`3@OsP^r;aOd@ZX$F2R8);4ovc#{c^@rY44m8M{Zv`t^gq`-^phYn>z~A zp2-aohUeru;-jOZv-3weqU~dfoQ}L~dtsp?H#fSEGrCn&TvW4YIWu!utCrC@d6~Im zvK(06A-~WOJ({l$B(;x=%Km@CrZ~qj_P?>hS##QPtriX+oAuu~6*@AV|BVAb!Sm$* zTOP?{a-v5otN%Z7$l?CMf8tPp`gE%6?7#8h%W=4J`2Qz9g>uG!YVVZC{_KSxUmqgTfOX#KN3RVN_0GAzDoJ2iwvI*)A$^$FxOErxyl5p#+8>nV_%;u7$jgp zFLeg+OKHiAln+gSR7Z(ZDB{+eCn&5$56 zG_tXhCbtt<1!7FUy4Tk2vF7#D#bb@94anw%d%%@4pv6!*^8xw1TIuEC$hQZEAy1I<)@?ticD&7IP=y2Mhb`WNv0 z1%ip7S-`A~rT!g|;4Q6(Rp7Y_e2AiE_0_R&jeXT@5$d9tEsZVxltkA=^^$}vzrQYd zS%e5A=x*#DsU$kVr-$Rm>{#5^BC-A?#7VH7geKHQlRNoupJA_hOYAjGhyqiAH`U)? z`F@*puLD>=j2O&j#@S3$<-AW?ydLM*(kihYMDPGi51~*+~ z#1?A0UIL~iplN$>WV;p~<&8olmWC|$G2eZxmg|SaxDcCuE${nfAr`?CNurEVeoCVE z@>k2uy6aai40T(U0}KPSWf>YAWqNXJc|D5|g6*3doBJt=-hS8z#&)+Z$AwGm1C&zE zG39tE2?=mLFXVLk!r%rH>qyF;&OE0xZPi{#Uu}9ERngEQSg?JpF*ZU;^d8=cVeNmN zG%!Y45po%`ma!n$4|Q_b?@6OIi92K5lwAd$Rl2e-y?=dVwKJEROKhH|%X45m2a&|0 zP4BaNq&wlU5*v?VTmsuA2zC7siSR@JzyGY!1WDfDL%jmFD-h=TA)165{u|>?w~v$9 zO0A>K%yTmfAc~w6$h`FEOQh(DOeWeUHc%3(o_sT8>e`ZpZA4)b(Bi9LK^3f?V5-i9 z7KymR%MQj(IP>?AB#9N1PJai}@8CsDI@_{W&%H9DV+|IIdnC*!%%&uYPL)0K>iIu+ zRkZl6quVZ<%B)lMT{h^THE@oco-DD6)Wv#cTF*3d7G|ja&5id?Awe%9*vLFLvQUzt zV|lwbH{9ym#UeDtalUALF+fT5dA;%u9 zx_ytj6LdN0^^r(1U8C3t#*Mnk7%^#GX8V_?BgLB<#Rg{Dz%=umupsC5hJ?)S5_?~x z*bS!L;7^0eyxj1YfZ`p!EkZpUZx>@1o08}Xx&Hak;HZ}__m=9fv?-;gO#D zKmVh_eI>R?qgV>2rFtix-Gc7+Zt2s{BGkuDIv6|nDT&^R$C_ileukv}R<>4SaRK}< zKnQhmc9v9a)YIUB7Qqi$bTW1dQWBlT$mx#EpJqi3l-Ov}_*^i~g_^`6`P&Eb-1;|> zAe{)dGSgOl59~0Ch4WIT4pH|&sjaku%oA##a5dgkI{B?37C}S_qK(mEN}@}UcBpx~ z37;JtDzT~BAZ9Y_Ojes%^f>>+%RZlN878sW8pS&1xeiy3%Wp`Sd2nvV%=<4}1b^(L zy|KMbN%T(M{CjIqr?(7Q5-ZbKYys02eVjjxEgPM*az>V$?R?4WCC##}x|*`|(_fiG zVnay{`@y^)w4;p85j<|04i2{n4N!!5V|;*;=pu}JXGEs;?+voVCJ=|U%yX^2O-~(L zb-c$9!?G=cgdAdwF%e3lb9jI1lAx3}J#!>BggE3G^DLwU%l>P_98V@;^@rLR7cy}n zlZfKMkgul(`<_IKr5eQ?W}2g0g77CRYP8O3IznQvQWv95qqRedExdiKR*Q2Z-ISDO zNYf6Oc5ja<-yQXCu0@E%5p*{bU5J^FQoHSCDPscI293gDa8xHn zm%VUoli5DASYpZ4#djcmr>~Y{PmcV$BG_4C5yEg3DaMpYCDBK*XHs}$d)+xDZkq0I z=&xxyB)Ze!+6i}+DcfOm>v*RHxa8f7x!oI{8>Mxr@z)e z{g0sqGbA<+yZ9DN--5;ULt6UEoVoZ)@aJ#1`EK{Xc2D=+s_%T-RyJOK!yS5qyzF4`Yu2 zCDB=U{Iq*&PN&lM0$C{uQD`U>N!MNXhMd1yXZ~{aNRy8<-{UM)-UFsR`gwC`i|3L> zXWOlm*bGgI`Cy)}8_9RuO1~Xhb$g{nXoym@HnxsX5?zY2ZysH5Z9egl#Fl9+7BSNz z-3Gn8cFN_8Jx4_eT(dRkcMYKstveKa&S^j8wSk6HFzb%ZDNk-!TH z;*4<-N}?0QE`3~ixKH!d5=$jjoB-Pi(9Wc(ufFEz}+K{wT-QOb9@n;uybv(_S*v3WaVyKp7Z1&Hj`rPGfEC)Rlg@#OZ^tx?xo zAy8bl35K8@Zy%|-UUg8v0oym|psGLAiMj5qQN1SA+32=~Qw^!w79PBy^0&l-d7IP& zO+LbWk1(6O6--<8**dt)_m|9G$(!A8nID1oNBTYX?co=XERXnTGa4=&Ndr>@i;|EG z6Eg4Q-anYJMPltpk!zsl8r_VY^2%=%e`@&FnrtAp-_E4%%-i)tJYMr&xT5fr$6KxJ zBTbo0SSZj91@O!(HCF7FqG zDcXJD6bm}V?*j%p~PX#vw*)5)(sT(Nu5cZVeQu0}DR zndUR?+CA2D$?1Vlem^O(B^t#6Fdc9k>lE+A^7v+7NbD67V;=LI$FviqwokW~lNZf7 zWf82ncG?)*_$rCMi(+o?^9z8TNMJ&Ow#K&MN}?0o_~z%%M-H7uf;vd>g7F1ECD92g zhSl*|e(V017NHRmBpZ`$N}>~V?Yn16pQ?eU-Bf8e*tJb|aYoVA_Q$^cN?jE4mtgx6 z>bibt(!*Cpt=wBaq*7raXBaZfN(m1eV5KydgNN`x%bXU zY!*_;H^FohB-amd>C~=jeBrj3vl4TXGT#H!d!U)5-u+LFEbcWC3D#-dtOL_Jy_;q2 zf4o1zFW_8tAqsnmG)4L-3H9*)JM(wF72NKe#O7-Z&VubM)F+A&H@{f?{n+&LY8Uch z=6e_|&U!Gd*E^ZBVYlH%%(ROZ0b{^&FJmu1CD9dL-fYbitJl_xZpZOqFdf!U+t1SW z_HFdisml`ULL=P^(q7%ULlL15AJD94>yH|J9#i&g*XLe;If#1IbHFsN^5AJmN6A8K!!3ywRp(|?X+RV)fhFafAYzz_Pn$R_OU74KI z?gzYWZSlQDsEHD^Ft&(L5?zAvKMlRyrF1?LL?c0@e`H-HQ3#Z$)+cj6`Py`M2NDD! zL1SZMe;ScXxgivhX%Gksbj+v2julw@TQ*#tNlCv zQr~CfW6b{;3c3qCcj+`o7WHWS@|RnmDh~$g?kNLX8EEcV!mBT~PiS-NsYUQXF*+MN z`zeVo28Mcu7kM=igmdfSI)xq|CNL4La`P{tJy~o~u7sAA(1DKi+KJm=nYA+=K$Ooj z;XJydu74Dh0Fx^eLC@-LWqD+O;*;4RT*YU$aj_X#CaN*Kbfv0-34-32IG|2xO}UAgF=@5Lm$j4^&Kn z2P{?t4pcz_2dq%z3{>$-|C`sC$Ij}gn1!tVLe`XC5rV!Rx;1ji6_1)C+IYY95KQ)8 z#0_TK1a)ciiRg9uZG~X+NJYFz25yHsbjcKP`fKfidbBh|ymi#x17UO{5#@QzFprtj zT@HgN&u6yztS&hrA|5p%hgp5S|8f>y&Kl|cA7LR!Sbe?!qb%$wYpC~sj71(}P4)hd zvj)dm6!lM$7F0eDv(Q9SdOXGVk5iKEUJyOgO-#Gh=)EeblU|Jw;QPNmipM)IyY}F|TRNj~>@4s#4vo zMpIl%U6cnV4D3fMN0ie#rVXM89Z?=MV9-cu0FySJHvOe_R^x#A=7@pHKamEp- zaUNVKnVNf(I8qq{ktT03*JAzPIXZ} z4N0dVRkv4XAn6RGlD!h;v(Wo2WRP1X%IBcZISe+qVjpP6zn@V74iU9G6?c8Vfl7i#o~2q}7mo$$~RbwXTmL-0V$q70(k-@Cs* zJ(!_60mD4>=Uk4rD1QaMUx7{6bS2cUgvO+4+BDdy8jd3V*SbsZy&SnQhCROzX*{$q zX`SMD)Ib$+pvl4tH9kcZ$9hyW+Wq46mS}X>uz)qJ0lgqm;0lFNqgK>{!c|zIhN`F{ zD7Y%*QMb5O&+S19U18U1#ER&5O&Q`}{b5R+MU*GLFtHm2utd4^h0<>Hl#d1lnofiE zbW)3WEVY;c$#hPMxRF}Sf@IoRqC6WyXG1J`)}nj@nx266^bjM;KR}BgAek(KDE|m8 zeuQLt02I*#4txM3$tH3OFsKSfk!JahAM^-D(Z1w6eDGt)qa7~F8(Hi|mO^nXJfc|3 zO{@z!JT%H`W+gmFx)9}=;58F!>BD*hyxxFXG%TrEhkC!w_js{}DDMQrPB2sSi63c( zU0~Lal-#}?MFn%sKznorMExM;*YaLqNlhaPO2+h z=rWZHe%o>K#=~`Oap6=zp9&a40kcMy*(Ybbp4P6KD3`&DWssmx-Ci*41ryz?M0p?7 z-iLgTzCxKQupM-V;7@9}OqZ+ie;_C@7_uGeLFW_Z&rUX&fx9iDof zY>>_L94N|iExDea%YGrdE!ief&Z(K>OXg6N3xWzl$RiNt(Ltj_D6%5T#n$3LdcPOt zvDUGH^d5rZ?hX@Kp z@;zxi0fG9SJPFp55J(OUUs2Wy2&5IoJ!Ne&c^t=bDdj0{lc>qbe&G{J&KZDub3o%rI zS+_w|kWd93_53ej_yx@FUWwrmm~|WV2ofGaM?L=-+C7F&y3LxxJf|>k^6Er+D)XGm zyeXQG8<}~QF>gAbM0p9Tzl1fRXGl?A$~>1cZ+c%9<+aSPmYFHcD9Y=YVI4D5@RZv~ z!$xM-ZRBQV*v!myQlJOJybrJdI;FYWEgoi8cemTKoO!#u-Qp2ub$7ePqs;2=cGo<{ zeBEuFc$`_u#^HKn@f9qQY@H~dVl7Xxc zE`z_mqHci44e+N(lu1@m57dw}fel~rdL>NXc2mG-3N)mRXF|nsECe+pECe3K90);P z3Lzk{ScN|jJq-YjxeM;#vXHdXa6~G|fm+ZpgO0w6ZJ-K%ZX_LJ-ASi}bwEND;-C|j zvv%byg(iz24>;88;Bno3SKR`STM$T(kS1A0LJ%W5(Xa;<06`UKURd&RmP*s%icpNAo)NGMMCA9<{VvIyWYb z&qJ(kOfG=u1@I#PgeYHt$O{ldd4gx)WN>T-%@Nr`)VPYppwSQ(11nSr22~IQ0~vAr z1uye>j5I?_yNf;pgr7!#la+jBGrwI>({3c}$VL`@Gb zSgfKpsN&OZ^WOP8b|PdHCq_H*&NQ(VN1w=5c2prUZ__#Ztk% zDp;UyeJfZ*1#70~Pcg4kEKs+`r&z=(){OGx&7e`^_z>z?Uc0r{(AnKbXdTlf>W#@S zE?qzRSG|HHq6Y{ZgS+2HND@>Xhmnx#`mXgJI%D2jd78IM?kjn#)E@y&kgbX@Aqfdz zf)y&Rgesyg4tsmi>^Dc_tX49wO6Eg$o9F9RvIxo(00l+k=o1pHyvlE~ceAa9+R#Zf z!lPi1Dh`EuBpeD>sQ44AAp8kdsIU{NAlM0Nouf^tn9wFjucAz-;*<8bYepZKQ;ah4 z2O4^>A@B)~fFn<61ayN&HtxWuXX zQ$4sZ)BP~(;qJ@yFJ}Yjc;ptO`w`ZIEQpBGr5$C1NPK?orX6F0=-lOp-^<6Doen?p zFi@c?(1j#8((6jMU4JZ{iTmwi2>BSo2~5HtNyE281HFesQ1cL2X?b!9qK~o`R8L+j zj!}ikP!9x=!LB(zhUSuhF-WiCVThjaFj%4DV5ov{Fj%4DU#Nma#yM1BFI2&0?0A%Q zCmHDx139Sh7a}D13(Cl`FC-&@UXWhJx)42KU67swU5K6#F1Y$RvW2K)dToAsXMTtG z@lNb7_-md=dU?00f9?2k85WQ57~xG%`A}#O^Mpj zbl~i7SK*F(-cNYeFX++}f_$ns`3U7O(^cdWa!U>{0-Z0)wwj7^48cvMX?_Q-1OQXpXKdg2wt2$ZYVL4L1E*@-7Ux3q#zW2nO7PA!JLwS99q5L5w$31c7d{pA-)2#2K!h;iVn2@ z;^dpcoKLr+G58YteF<6auRi@NVK}||&`?lB6~sjx>DGY@QUz~O1vf8VPw`K3Tz?@@ z^2#q04<~irW)$UNLBm1`%p}TxfbSm=Oz;j-p2U17v0#d7^YEl$A@d|Jndbu*vO4a0 z_wc2NRw-Z+t3zgr=Nm6#%_*PvwEFVZr?a==&T@A#==DSMwaJbq9oSQ^(DwRH!?TeN zQJxHelcAQrWG_R)Wk}NBAg)7$>(GQ=u?WhB`r{BbQc~2#)K_+%9~;11l=OY8?sTMZp4WCLA#^k+o*yj5NG%+@cIgTXogJ~Dd#XZBBaHO ztW|UyReW>mLbu4@^FPr}61tZV>40zskJptY605o9mr1uZd zm#mfngD1UzguZ083~05S51^Q=mH~q&#Z^#3R?C3Flj28ELRQOw!IQC%VH{a4!V98i zRGc8Gj20VKsPI6lpvXK{sHi}yaONFpT{CXhaS_i3&w-NL+2Eb#?{+qL4wBr?2JgZC z`q{7y49mbo7%mY-GA{=U$tcPzz`O!11bz|`&0tssCW1GJc*vPQ0t=mbqP!Z+tHDAb zAW{AcYW)SF1mNP2uAx&|eR^D^@GXu^MKjXK2%LZwDvFUR2*rpSjzbvfR3+>p7IWYt z6%%3+i#c48iV3HP#T=wa#T2l>PTiv!v~!VKMI@3eWHvDF&vA%U{H(ymX&tf3q9TlO;p#Uw;K_~Y>ONaB&pWa53-=Dm% zuE*Eca7^68qyvn$6bhokAxRK|B(Y~v9M2+@$T(qZ6)Q=t2`h;eDn^njzANg#X@)fV zTNGm^Gt6WXy%^Ho!xk!Nl3I|{`P_Ynu#`9z97su1k^LaK#-*EAZ{i%+_NZNxhAGO0 zUWI;iRV0`tw&fU0YWv=bU1=Y{jN2&NbY_^&%mhgwn~1WhXiJif3=USPC`+m!lqFVh zbR`uNx)M9)&`RoB8f(}BMtYv*a4^GGq<8&+0^W?kyccTH4&edluze6o0caj~Y+3;^bc^F} zF*S}bPijy1ahzur*h#}SyYQZr|Kq~MSyzP(4>kXUZn|XrQEe*nlUfj92rE>?Csjl? ztx@zM?`d?;REm@xFNz)z_13q=t4rbT3og&^pv>sdxYmc3Tu9 zLvMY4)&3aAt76wkesbecJ{6Nn9O&+Ye(59-CqWpUOE}#MHkAkon~KYs15;@^zjt8$ z?WVa+|MbF(WZFbKxnvkSPb;+(FOFyFISmHtYkCHx&VZN5CF6LO)LHNnxnvyAk~AB- zk=5g|^PVSQAh~25&yxBByhJV;$FrpV2rrRK#xIg34`4EoPsRZ)Cu` zi5}c|DA{uf3m{jYhmspCWi9D)7v20y|r9>m^*L|rTQA?!Xx(S3nyDeM76=}LMCwI4zQ+D$ZDr~wrpOami) zFfIiS4yL7msNh_Cf0Xvai0w1Zey}zf=*XehWq~+MtQ=WjI`!dPpcnO$U5oFu^nI`$ z=n-@3+%2fh#-v6KV`q5ie9tw8twNSIebKRPOd#8%aJK$ d>I513XRiL4rGF0BKS%1HIr^tv|IF4u{|^9(#)JR> diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qinputdevice.h.339E51D2AAC381C9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qinputdevice.h.339E51D2AAC381C9.idx deleted file mode 100644 index 20a655342389e3793350a70bb075f0bf1f9974d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6788 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiodevice.h.9388E485C0A01200.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiodevice.h.9388E485C0A01200.idx deleted file mode 100644 index 0eee3aa93ea0f6617274ca3c52df407f257fa2ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7180 zcmb_gYg80R7Vd6FV4%f@!A21f1(laG3J8LryoD7(L<0nf4nqTj!wk+01Vq9{kB?|% zBWl$6NK7;)Mvsr<`iOes8aFRZOkzBq_}E0(5H;DD7vd9ca$%!noNB6;LL11#(jLh~INQgB{#VmT#%{>S7LK>%WXJn7 zv%Xntl^AW6smVISlxZ+oNW+?KtY)fOt&%0ZS*tf_s|=F8Im1+9))R9ZM_;XykP!s{dg~0c)@ae{ta=mi z+GI9MMk}?+w0{H076LHIY&MyT$+Q}4nHs%8O4evJb*2VMqiwQ~;Oex*i@~5NvT734 z(fO;6V_P!zxtTmq}R-qn#nRgl?Q!;wwBICtz;$3Zf5irx-ZBNO%7Xf>Mh06+$PeG zUTYxu45`IRw@tQ@veguEWLB|NYqr`znnb~QP~$AERcm{(Z3~Lf7a6s01hZt3hzpa! zP^Hz)aSE8R&?pF*>AEEx=wrKrz}Ze4gEZ-k*+xg+pPU|xexAfw=I9%34_jCkI!Vqk zG#N4b&ujJ89FzI6UEPOGCnK{D=6TyOVS7F{LpH?L!wZg+$jIj5{h@I@fPBxfPaxCMP#Olp!*c|H@ag`rvbC2-37i^q;ef&be0^j2(N&jAMnwzUXwWUHmLZ@MANA%9FX&PW zTomZ31E$KM`Jeuqm~rTiM&O2nj#I|TGxx!!qaD8&9gY>a6wuR^(+9(OPuI7xKJI4; z9S%AsC?*{A$CrE`%s-J4Cvg6tYxo*D@?&QPiZQWqNdl(<-KuJpm*uU$j=$8M5kE=f z6rh_G&Hds0g{6mgx1`=p6SzsBXZg+=2Kwuo4|`J7*Rln!Kj>+`(}F0LPh^zSRIZ+4B_k|%J%pvNl5%JeH&i^7&XugMpF??ib)b1p2tc;r|8Y=KjOPWDWe(_!-$%!PmMQq>Av5a?=UwcPi;E3Z}8R$i!g z+DPTzJY+mkv77Gf~d-Q<^Uq&-uV(nZOMI zJx4i5rro-?A4om1lh7WZjY^}O4sR^nvvFN_@Cv81t<1Yjp7T=U{ko3IlvM(kgs(GI zner}q$x^d$@UOGhI?Z`R{|I@#$Cys`n42EF=E1q+@EYVkNMw}u)<@@bLe2g74FVSr z=Sj+>5Tv5EJke+MhihIJxQU==`_7g(@TEV6o7S{>Zx^@(&>hMSIkcXLgXi{qd}NQ) zl1%ZQB4-O*erkUEF~5Db$i*eBY6%&^f+2^4L2PUjAhNqxkooPR0W70y!m)PYgQiA60Nv;Gnz324#bsP~Y}!+c5rI z_eFv8g!63QY}q-pyC~nfq5G=9C4z2Ow)-PA-}jDJZc5C*CUE0HtCeawp>D@MGiGb% zt(yX;1f8qOl~1S1Uc-IPColg=;D&;Z_l=h;LP2UvNA8yEw*)Q&bepP8j{KdmKVLqs zF63jOyIIt*W@`lia+`c;h7)-d7F z9S@G&T*N^Cz+l^>FQM2W{i^EDy!cw~kp}`7g70IMvGS~&r5ejZABG7|+uy$YKsn3u z;!2iT$qIexDVKUyX)E#Q?^}<1y-|_rZY(D*W0_^7`u6=r`K-trv*U9&Rw0Hd!uY>` zGIQ&e#w!yb35Xji1>go!fWTA&0EPr0FfILnQTkaHCBLsz6ntV&3q9;n=m|^^vY=adoEP-LrZT@q|3aZ@Dn$* z;KR*Pp02pF`z*GbPcK>XsBDBzvKPfq$jMA6WrrY z>|?h4vNSTV<@T9fZZ+jiwU<(#_!csQ^hD(adV;(lFqIX6H?yUT`x|RAT~-5ngVxn6Jq9K@H}`sfwvS zNFrV=R22Fkt9h|3plldw9xqlXDtxdhA#F&+RMH?~NE!lDDFYZ%hQL(906rQr`n%`q z*UlzOu$WaWX60#uwjuUZ)4+bu(LY8v$FHq-Su%(nVoya5?2l>H|1K)-tta!RXY_q_ zlwqKKh&9zbuvTB3wf5B&opark;tJM%1uM@tomihv)*nXspKOluabhl(N{QT2q5CV$hNv8#KB)nyn*(z|^$$N$pYcRpf^Ky48>RAs>p zR2G4$x&n-qB`{T0fT60$o}p?AFw_*WrYZ_>(xI*^ZnI}CB9Yiv=HjJE-*5OR@E+t9 zv8S>M_80FIe6sD!Hy61K33`jzQ=J8S=qv(LeFYe~MqsL|0IOc8RyTAldd0>20Y#)@ z!nI{9$pSB76-!t@amc(K{1IRwYklT!*|M}ne)4nd7A-2L#!uFTCOD1XLZ9vO5V zv8MVC)+rBTHa@C;d8?d*INt8xZ+zwUgMznZ0!sx&NE}fm2uEAix7F-lCGL>z;b{M- z`!Z)~Q+B${1+*h^L^UHEK{JvfXcvqiTH1T&pUlYF=l1xa&WkmQ8gJAVUhD|z7=aie zE=dh-SU>VqzkMj6Ij`i)OJB##a23;9VLQP~Mckevjkauaaf z-nmP+1Qi`4{_R-@qH1r~&eJ#79aHdPQ2!u*!1i&rmMxkc`1_(icrhX%A_SR8QX{-M z8maM*lLMQtM(Izu1n9AHRPn)MOHL8u@%{L);{L3=8&giZj5RxAYVX{A>rVIM#TZr0 z5R`IWOdXLr8p4qm+r!&qppR+xM=oQ>Vpixmm(0>Qm{X(!+lM1k2!66KROn-( z=Z;I;cYMJ|SLEs2eBjUjPWk%1oA{2{Q{@kPD1QP|#SeI$a&y<~tM32c68EMp2TR{# zU+NCw#SA{f4-%3WGx9a9j(Gag&~fbU7{%Q!o7hPOTtPb9j#JDsTcl#j#PI= znHNr6UMyFXd!de!R#5qHN2|iWA`q3I7b_K&UQk1%B~*%zmO(TGL2>h9LsY{UY$9H4 z;amJ5bxA9tMeS&{@~wVQioDnw(;Dk&&Ex0!p-%DQyr6l*9j!LL%@21hUTo8}jYDf? z>D!v`w%xccCj-(NN#U}*SS6AU^oECYzzvVU^kxSb{ScVm=m2AJ2~2NtfUyPyrZ+gi zNN)nun;T&KdV1M!Y;qlO)+^*7ajIdw7}Y;Y-U;MbaZnszfr-8CNX0YQ` Zlwu=PLzjN|nPOnTputRlgBj#_{SW7pSJD6g diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiodevicebase.h.57AFACBC3D314B1B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiodevicebase.h.57AFACBC3D314B1B.idx deleted file mode 100644 index 5b26903f658bf1a7ca8e375b0af31048e9cef007..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1474 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 Hm7@L^&jdQ& diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiterable.h.29A457745ACC4B86.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiterable.h.29A457745ACC4B86.idx deleted file mode 100644 index 8dafdf74e6becb617c999c3c3c0e6a2ca853234f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15276 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiterator.h.420D4A13F79F0A7F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qiterator.h.420D4A13F79F0A7F.idx deleted file mode 100644 index 504ddc77eeecf4fb92b7717d047ae509bad5f8e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11356 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qkeysequence.h.DCEACEDD22610193.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qkeysequence.h.DCEACEDD22610193.idx deleted file mode 100644 index ab4b48b1bdd3bda0b24359907e6127b94987d671..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11968 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlatin1stringview.h.5C4795D24DAF6F91.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlatin1stringview.h.5C4795D24DAF6F91.idx deleted file mode 100644 index 881bb1ac4e1d8b4b67e7d5744b4b9da687088dee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20396 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 ZM-OLW+~P?0EBPN~{0+wo!$i1W{{;zcl1cyo diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlayoutitem.h.8BB060701DDA612A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlayoutitem.h.8BB060701DDA612A.idx deleted file mode 100644 index 5728465632844f184eafa22f9844eae545e29736..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7952 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlist.h.F1E0E6304468B4B5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlist.h.F1E0E6304468B4B5.idx deleted file mode 100644 index 5a0c7589abe039ef9c3649aaca2fc4584793087f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71410 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ŪjcNL1 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 QCIn&gu3&@<1#$fU0g-@M&Hw-a diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlogging.h.78CC882A01A41DDF.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qlogging.h.78CC882A01A41DDF.idx deleted file mode 100644 index fb70f65a77fc9bcc41ff7c7a3b97950b17d34460..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7760 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 K_^H3Og!}_g$wsyzzN4l$RWql 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 UbQv^oFd9VHKxnY|bD;S1KhX^mVgLXD diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmenu.h.0FABB7AFACD22F6B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmenu.h.0FABB7AFACD22F6B.idx deleted file mode 100644 index 9be97afcfaa825836ecbfd49a247aecea2e551e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9856 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmenubar.h.21DA5516EFFBE0E1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmenubar.h.21DA5516EFFBE0E1.idx deleted file mode 100644 index a6a0233d833a1ca3c908cee55a4dac52e5df0995..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5814 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmetatype.h.DAD15CFA6FC9BFF9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qmetatype.h.DAD15CFA6FC9BFF9.idx deleted file mode 100644 index 7a64bc8f0be8bbd0ef9d70da1399cfcb5e546eaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144004 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 N15ku;gHP<&{|9F&G*$or diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qminmax.h.4D5B665F22788521.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qminmax.h.4D5B665F22788521.idx deleted file mode 100644 index bddf4538cd105b1cc6559e994d5ed82b97444a46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1958 zcmbtUO=uHA6n?Q=+f7C@#-=oFT?2`Wg(TbjG}^S)YQfUh-;(N~NZBOYHjqv1?pC5w zJd5H%MLdXC@uG-Qym|2;6;ZJikDe+N1QirS5NCHX*`QV;UD(IGH*dc0y>H&`_{gC{ zcbWi(awBC`F=P$^wv$&kw0y3CEX-$j@Io||EfsacpZ1ILLdYMy5VHfBg|2_5O!&n= zQ`CI%cbv0w!3xD~XjLx%0ba*R!dTBql2#9=iS|F$+De7|)pdqwRCQ#wVMh2hLY<~hx`-!pxPfy z=L<*t!BdL)$!E5 z!u6vRp|!o$k4*zS-#`-_y!zv0E;5C{OAtKm9>Fp;g4~2A9}Q=2P=ru86vw6k-qlEJ z*gtyr^Xt{4PiYOoa4?EZ1AOx)nsDIBo)_;{zdol3z2V+CHVyD-GfjZUi?5bkXIE$q zo#D+uswPA9nEwcM6?iwH_>V2m#v*3PG{jEfzb(fbE5ZkjSVI zjtMc5Q6Ze@NCa%JSLhWPF~WTveF5gN9EX!$bEQ9a$&F5Wxs@=&K9|qUnnhT0Np8D> zq$}xWcnA-;2HcE=ogggMC{*CsAP^RF3YfNp#q0C2Glaz}`D$3aNnZ_%cfiM3manYs zdbqfJk+5*h+%^Wsj*_r7MU{B;*n^)Rt_|HG7wZPMhh;N)IVT;dO1%DFSv7>t8aW1B z890J#4VsNxXLldpc3(Ys{{1HoSrf-#ku`C)XHJ~$nG?r6^5c`uwXS7#$z0&m6W?N& WcCHOKxVL$rssKP$IsmtsNS|L0{03V9 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnamespace.h.9AED58CB1F607D2F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnamespace.h.9AED58CB1F607D2F.idx deleted file mode 100644 index 60fb5752cda34238a3f9617d44c0eeed5f2f2969..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155292 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 I>75tFyQgm~yPh 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�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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnativeinterface.h.5166B0A1D4E3018A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnativeinterface.h.5166B0A1D4E3018A.idx deleted file mode 100644 index 7fc79d51f5f61abab603cc963d415171f5c566a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4360 zcmbtW4OA4@6@EJqvMg&B78Y>%$&xq>HnkLu+L~xA)tWXZH8mwIt)z{faEwW-O-zkZQ(Nm#o1c@k29K>Vy)*C@1srou zIETybefQ^k_kQ<27JI6yP#i*)jh;t>L}4QlLhRETAz(d}*%xyA;iESzkdmD_zk!0-qGu@K+h z#_jg8GEqGWaU=2bsz+`PzGY0eTfJc3mo=718z*z3kXH@`38V4c_+?zGG0-|jdPh*W z3RdR)+U2J!63Z!A5pf%lxIhP1npp+2xCxpeU_omN=4e-NGb@`|o(C&}CDIz=B+{tG z0h@p*1;JhvFnq!xSq)0sSU$um1apc5jk^e1BynwUhP;)cMCP`%@SI=sce{~yeux{V z8Sm{Kr%=5ns76!hpQ+7N=`g94cNyEkvqGaj8n=5=yDt^F&My%n=q9Ho`tg>#T(?Cz z-sZ-LGz+3iw2WYZs2vt@yTrC=ZRZ48VFiU7X|)(oInkg%2^&-j01q&03WNmz2oofZ z2#pZI*MVu&LM#G(q;^gwxTbDtC2r?{QG%$Lc%rDh36q9;s6kc6DJ0m!t88MWrcjUw zitIqk09Ol%62&pW+}v&1peF~iy9_cxRj zIUx-nY9ydn>FsQ7;zb|JJDR^r3;|HLkuYWm2F0gUQa_J10=~6rYfEJ|;^fNkovR5C z1-nVLj8mGCy0<{ww1$yHWRbsNFN0!aVWDqN!uT=e2$$gd&4fd8N6n1~iw5_##l|;a z_$V!7MnPc|lMx$OkaAyLo3l98gVBpe*gJv`h!dJytrE3C38zby# z=@7m)KWkpb!wZfu%v~ebN7!X@*(r06v*%w*fBV#NE0YD;m!>bBp$VG()hVC6*mO1e zUEto7TX65w$Tu$ZY-oNL`Ue0f^zZXEkH5He_>*&hAKE(s|F%b4fA>z^xr_HQNlZzyCQx(~1Jel=fCUqfm%x9G56=6+tD%T0 z#6;rqxbo3KMJN)_j+-6+mNw^CtDk&%g~4FPy#~~4h#jpOdgp_v1M@vY23_x&1M5Ei z(bg|)x<*`2Z^P~_WE!NXPp!|PEud3oFlp08S5E1l|93ur{nv_hLnbeN?!(_ywUp}` z(K&?#>X1@q&e^f|ee24<*6RA2OCOT1h4>}ln`_L?rbV&acim^LDf$+uEk;XN?O8kA z_3Ym&8gxV2yY_iMwhj1ojqW*Q^_K2k9MCm-tmIJqBTvlbbdA2ZX4dxSTZdOMW?b#8 zE(#A0u79YW&>mP$_Mdc~s0r#uvi^SmGvd`U3Hn#+EG?$BIDPV&*D?k!N#I+8OY$i% zBk>&ToD|yJ`NuC*yl~;?if#hBF(XadrlgHBeaeg&e`ksmv@}~j;_)DfBAm*(1y3Vbd9zY=SKWwcUm_TiTZ)OT6rV{Iw@^jiRcz*PyOh-_`)Z=QR?Les6Kvsv|FhZ=^BOPN_s= zFedG>peW6_Gp#e5UV*kAeAQQj`cPtnulgK}`Ff{&XHsU>x({sM`k%AMbivV~fJo}Y zKogj;&*iJ6%VZVLe9?0$>ja=EFcyS2fIRTuC+ivgXE>73+ub=61y!B6ABRY-|Chd6`D~tN? z3`GH}!BU+{E10r-XDaDUAJ&ZvuM5xK3jyf(BRc9~1x-y0h-e3qEcxXmHTm5X0YbR% O6~$E)Kh$lw8~q=eaE~(p diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnumeric.h.CBE0FAE461F0112D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qnumeric.h.CBE0FAE461F0112D.idx deleted file mode 100644 index 59e617ed9bcfb01dafacd8092329bfa41c559611..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6272 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 f^?j=9dmakKxossA0Bs3XKVKzvbVz2)n0s8AW diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs_impl.h.3D23F86B673417A6.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qobjectdefs_impl.h.3D23F86B673417A6.idx deleted file mode 100644 index 27eabd8cf2f0173c8bf6ce28ca67a161a4ac7cf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31906 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qoverload.h.F7064D60B84B4724.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qoverload.h.F7064D60B84B4724.idx deleted file mode 100644 index 5b1c270b89bce92d2d98f2cde2d404545502806c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1668 zcmbuAe@IkW6vyv->iFJsENg0=W-Qxu{eg{d9LGr}vzf6bCv|l;GM2&`$L9~4nV0WP zmX%RN5CsKM5JsgaHaORtxNzf=qBwl!{%dyY1#ZDLc~CQ;A<9$ z$kUh3i5Y3*m)cH*TC65M4GIb~3zxHC6!Z_y9QR&3+i2sn1a?bAbQQS1AgRTH)<2$) zJo&yon_mq5KA$hdg3J9Bxj_sx zIB5=vl#W1TNOK^hWV7hBI6ucDnMIf6vKp&OsdC=R@9?k3>Du3qg&WJlrLarAP;bS} zkt$APG@(=9)Qd&K)`3>24hf+(SdEZ@ObJ67(E<~S6q?-JxQqXL)Rutipb%Vv)kqo) zMlnMf23zagfW2nXExGN+s!FPww+c7{wfGl>T*59CN_=g|BgZoi(Fr*OnL>zXsc63b z??313zJaST6Z29$6JiP8lu4{c9663*h~9`HcvA-PBw63S5QhFL7z2|Ap}~&cNF|t1 z8qwtTtsTnhbCbVA^;ThPK33y3f=mfT8M}CC4#|{m7JUw%2XE`f%l}?^92f3G?-pUp zhkH1B@bR4|?aEt_(}i^UBfuVn8DvT_?m*zbZ-jz?V-d{YTlpa9T2#-aUZStxJ$3Ku M?9ZG;BxcUS|28tzg#Z8m diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpaintdevice.h.83AE26BC9675EC56.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpaintdevice.h.83AE26BC9675EC56.idx deleted file mode 100644 index ab6ff8e8097f5b160fee116c98ed10c97a2d6109..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4696 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 an5?nFSgI3*(fo59|IFf_+5B@1|NL)u;kF6@ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpair.h.7E4415438F6A17FE.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpair.h.7E4415438F6A17FE.idx deleted file mode 100644 index 97a3de07957fd0957bb027c58245232b3e0284fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 zcmWIYbaUIl#K7R3;#rZKT9U}Zz`!63#Kk2=nR<*s1_)@VR2y1_7%Hf#l_lnsrW)4j zD5z8$S%nzEM2u=R88na-=qMn`X)>gwCg+q?7Nlwu2QWrs^k_ z7MG;vWh53ArRL=52bSoY=~?I*=%*(q$D5hxXXYj6l%}Kt#hvquQuPay^Ycm)GxJi5 z(#lixGAJ=AJtsdYF^4iU3KBDmfF>0BCT6Dw0ND)1mAOfZzyPamyHepdd-h@;26hGp zHX%tNB{0Fj$;8OO%)rRT%21S=R?G|xUs;DOwcXpI85w!lq!^?Gz`+e9j=Ehua^ZGB z5(^KTu$HhP+&ng67h!J%PgGu14T)zd>Hy;z`mg`@e3J7#pt+n3oI)^jVbY9T5C=iU z`}Q5_%JnJRzy!2TT37|9iib^9KvWXO%RF#$%B|^Zw*&REaIo;hjI0r7uARyJ?;F`p o1%^dVBFMDjqU2&_5CfD5p@0>}0EXl9qF-N@`uq}SVqs+f0Ir$Lv;Y7A diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpalette.h.A0D6C68FE4FD52CF.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpalette.h.A0D6C68FE4FD52CF.idx deleted file mode 100644 index b6c9b6c86ed5c216c5a9ffd4f47b2230f1e8d0ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11702 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpixelformat.h.1735C8D208876A87.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpixelformat.h.1735C8D208876A87.idx deleted file mode 100644 index 902b362f2412e98e30584ab623829d28240475ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18858 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpoint.h.65D6EB4FC892AB96.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpoint.h.65D6EB4FC892AB96.idx deleted file mode 100644 index 05a845fabf6355c428455d9ab7ebf4810dde660f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17046 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�lOv^)!s1{+;Y$mNXlQ7vyG+SCR zrZ&-MM?V=E`D4{??bs>QOcsRPK9X%*y;818^HX>fU#n%B+Nc7hQ*m34s!Z+u)2j!t z|MV+(7Z3h8xE_c8{Ni>TEXUDd)e0r)!iF1DOEzgECasc_Fa;2CBCT*!n=1VCeHmK| zXTOgcOi`qC5uo5bvW{BA$yrCM>D0b|c*XM#2Os~}-*KtkY-l$dO?#CvDLJ%s&KYEu4-eGJRLK&Q1;G`EUT z+IvB%!mw@<<2ZgGMjppWz zqbQY@u85Pz5%45_HEFf0)J|bZq=8zhN)0Bhf|W4cA&>^WubgxNM1fH%S&2bGR?Axn zA9=<5J@cXW|ApV{Z+QRtWNyq* diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpointingdevice.h.D088C170EE78F2C1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qpointingdevice.h.D088C170EE78F2C1.idx deleted file mode 100644 index ac4b234e5333c273bdfa3ce08c5b3ae77ef384a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7474 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 bnve=vG5C=|1;XhItA7*S{QM0rM#cOWQ?vG6 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qradiobutton.h.54424D6AB6222449.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qradiobutton.h.54424D6AB6222449.idx deleted file mode 100644 index e09eeb5054c2ea33ab65c1a66035e3ef6dc6b64a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2264 zcmb_caZpor9Dnce_Qu8-8;flWWg93vKzVQ|C(soLa^uJYq_PsDZ9L%B2DrUV;Doxe zG(k=L!#F)S!vj+95K1fyqe8C0N+aqFjt~tl^q{(qGBx_WZQtSex8B`$?|r}D-}n3Z ze!idYZ(D9o&ecE+%PP&Su`!&9#4t>Oeh$vgzJj9{{wdsMDrKuSJ2|eZ((fZJ&F{0o z&bmw-gE20qlEcbaE0adkbVZeop-oN)$5d9B>~_X#r3*PaC1F!SB3*8=l%#B+*-DGm zS;`>$cDA&f;T-fXlNmuUSva%1YC^?-OlRji_@8odyFDPwtyN}|6+x?DIWIYECCe3Y zwN@s-nqv`JHe|3lZAEMyV`LF0wkoHC*;?gdwzw&(HX)po2x6b7yP z58O!yZEH`CjV8$m37po6bP8~*2R0w?{Puj7j3B`sDTa-jiB@B3wQ)>H1h`EoN=iw?mjg~mq}RpL(pxej5DI8TS|2q(8^+@D)PZv{ zLImz8d6W+7FYep=cjm`SzsU$OxFf_7KJ=KKDRYdXrCFWvetl!#4jh+I@mRdf3k9?0 z+-u+4>IfhRNMBYqikF z)PVv0(9{|sGK(;g94di8aFJUWP-*qtmZgn5i$ie_04NE1LD9TUAR2Uni{1JFvnlZD z2fFF(b%cltp+eM9QbI-PqmqHZ>{H>rs-%_#LPBXsjR-18s0cDb1T=!uP+c8T7!K!>?32z^jimxAe4Mv01s#d zV$Vu>?I;tvSip%gJ;aWLQVZ1bWgmZ&fM#xV-=2TAbEL)FGyqrJWVLyZg`eOlqU1j2 zlJdL%nQhK$MdlzZ$cL#fWIpxUhd;f8%#k6HVKC{M`akvzZqDf?{7FIJbSeY1Y3^x0 zdu8tJelLJaI;ZMRV%MDTh@t30|GtqG%mF^{Vn9zYs})LwTLx`_`*!hisZF031h z=5H&APSua!E#Z0=S420TXqqr5-(5lgdEB56bhlYe`_WhY<%X`Nb>dYxKC^2Lt%m!BNB;edX}yUztrTzaDthnR~wj%%l diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrect.h.8BDEDE6AD19146A9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrect.h.8BDEDE6AD19146A9.idx deleted file mode 100644 index edd35d478c28f6b3339e20ccf4d6a517eda91fd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35532 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrefcount.h.E2B7FA019F51035F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrefcount.h.E2B7FA019F51035F.idx deleted file mode 100644 index 024f40aea1467da5a9bf1a3126de843e03f05730..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1156 zcmbtTPe>GD6#r&g{dU%2o!y-^_m4=M?iRD|q^8&s5iN8QJXW#*MVBa6xv1qxUNzJL zDQLQymSuUgTvTOc%(T?fsA3qZuFL(F+?nc19g{ERau+*~%UUU?kL6XsGi5`SukO`J zjs8y!ppdiqK^3i}S(>72*VVp>lA5o$pD&rfNg2^qqM2E6?Wmcx6br_%hcG9LBRe3% z_ba!!z}efiUe?7Dni5lC#}Kz85ow|8n}ah$T>|Tdu*6CAj=^x%mrpBJ;%kqv2sd-hKF47A)x9nMncesjWe+ff zdaJ!&#}Lk;#?UIybK~K=9cfu$Yv6q&*XVN$zVFI4r3=HW?*+CB!u3LZ&@mVW6-=2W zq~Y}1)cw~N7>1`Eq(j)7dtVrir+(2N#!+}G@}htL77{~YY{b)OZ8W%li`B-0$dRWB zF%iazc`C)FB#O(^q?Bw$Ej`WxaCppNJdW@PV=}Ifq*fNixA9^c%a;U_kVFk;G; z3gFI>4P@KmW43Q=a_7d-$}GU`?)D}W(@-Q7uNb;6cBo?L zNFt7HTKiW2Zp~#DfrXp6{a9CdviqZn|;~=>%#FduU6ZLTQ6->kHpv oiCyRvt&2vm6ns6pVly<2oO#f8=-b1;E}!fjUS+CDwGHf@f1MmbJOBUy diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qregion.h.1A71AF3EB76D2D94.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qregion.h.1A71AF3EB76D2D94.idx deleted file mode 100644 index 57653576f0405ec3531a857dda91e4933365edd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8604 zcmbtYdw5humcRFM6X^5}TsnlLn~(>2RmeMpU;=rkLqftMBq2)@5;~nGGU$Fep|ZPnxYy-($buk5(0`xb>n;hQ5B_6GTXKsUsvLet zqu=Xt^v0)b%ZN|fl2_EQ($(Yc?;|?xFL!eG_xb$sf2OOeYp5rn=+E@IX}%0&Jk9hy z(f0;x9k}j{_#a5@9*=v#=MrwxKosvT1Wd%=q9WrfAmT0vW=|}?Y4ZSSocQKF@V&z8 z-steVgq1F*-_h6O;a}WcTK_Kk>=U~Bhx)qReLcL3;4DfiYb*;gP3LIl1;i6N%Isx9 z%A6D0oUXoZ!Rc{1`kDs>ZS9?Izsu|J_j?1R*R|2*^|@|h`yK8+AIS$c3r=r9k(XD|?WP=yf}@*8dnC-Q-*fOp3rCr^id){&5<71CGA`uZG1#?(9LY z770H}g}-OW-Q(%+a(I4}noaJ$?*2{Pu5~_AtY==1BGgkt?O#rQIq={hsrU}oyfOoO>-kDG81#2~d-{Yxbo1@6q=V-d_?M5`b@ZQN+~@N1gXj}{6xFWoPM5Z5-%yv|>(E@{ z+vFG!i0Jcq_`%k{x`m-WI%(a)FvWVeFoI0t+uYlgZW4sdKf0T~ZF*jqD#e=xHWEEz z)f!>SM1EbCWUs=6-%mQsZ%gW2D(He-eI^LWcwtQseRH>3I-x9MWPHP}; zIh)q&X|=bjQYPk}YnrPCp$8qRv=M>PY07+{JHP^MnY~$@ej)mYOl!0g7f$CPBU5w-JP`TfnHM*#UEx=yXi`2eVqTQiK)m{!7nAD6 zH-}Uy5z2>6!{HF0%3ZwYy&Vs1Ql)tiH!6+#&Y$TSl#eRYMpUU7;s&Kb7mpo2mb~L& z<_=ZLfVjp~69MHf9O(Zh^6OviR;4V6(@p96!j744TWi^KXiv114Y5;pDj1y>{>$vF z@4nolN(&)wQCjr5hn7}#yW6gf2Dv3(rfeK=OP74>z~Jt)d!wYK7@Z=ggg|^XtaaP7 zc{%%n*1b|$sVhHLzkMjarh&xz!fH*m`oeB6$o%NqfqO}u4&{}$%48^aS&uf)y8aP~ zBOtB|tJ9Ov=(z(gzL5XY1FEzbV!O?rgwdDp%X)gu{>ekCR08qp@YQ-qe|%tY%Y*;c z|8t9Eg?NXk?hvCe{;zTu9q(CTeoU2W(P5Ekkp<%4F7amyqhB3Sr9y}uCWn6B8kX7j zIUfGzSyfsBafz)&H?GTm{p6KNOHQiNY={Sx0X>my?>c{G&I=F!iz?MYTw$w-$J|-l z*00_2ZOF@-X{=Z+wrUN;PbIhce^&eRSAsHRy{TR|t>(!UyX@8M^~q8gl`z%_t4(W+ zn=NyL%o~*20uOe+54)LL!-OYu4t`+_?2gF+?lk!|HB~1mfOm8$NuTr%o`V; znDt*l0a<0M(gSkQ=4ZdS&{6q?wyCT%p)_4z~4~@>d|KooWB4}nNvpmcT z*halMTtjcbwa_pPrh%=ntT|aZxYZSwBj;EEy%d%!=URZY6qYCFSpaMlHcy^sLDFB< z{SPxA|KjyoqRe)Q!Y)xg{Qlzny~~fBU3)HN%1eu{CP)ffYFQcu?4ht_@-h=Q&Vyz>3e>JUpu_}Uz#0xWhW3SZ8Aru7!PDh>;NJS`0~_S<{M{X$I2*H zh8@Eja2sPcY1JH_LJe(h{=5a)T!rN~<+mUy0lLx@9I|2vHilNs@hbKQP?dUfh>G5T zs1)cNnu3k+AU21jU|;yV*3V{)+_#jBPe@A00FaCPDAN0N<@#ll6=n^!(#f9qDa>Q` zL>W}Cxi^UN3SPyKjf%pk7(|bW!dNgpE(+rYjXk3^a$F4aaCjz%X;2t!a+{oQgWHHI z&TllR`SN@l@R-61klgGpy&^?bm71QyP`VG3(IP`b! zEPUX|;8jC_T;!|{h8z?U* z_IPap4G3al^NIqRP)yJc@*)E4tP7n7_Wxvjkh0*o7(OmWz(P*Pjf=^kPk$A;b9&BG zUfl_}QBa1EVqShgF_IOT!D|n&3!nWq_7N&s=?G*^&q}~i#a59LUWK4Hst|G)uRg&3 z+Zi2oTS~)kqm#ieTCh=+P;Xw0fQ@2=bn_wv>^mR2ci+DMd}qfGju&?KFXnu#9AykC z=H&|%&$zMY;^>i*J>=5jvf}a}WU;o?0c3$1hiv7w4aTCjAvUjRz{Zx-OuUu>8?_Ae z<~0o1IVYw?tZNtV(N~82isFX)^P&d*QPhxjUd(`vVuskfhyfc#46%9f0`{duOY-M0 zAH0wDTb?3M$CRjPs5h@=&>OW3S;A`=uydC`as88fDj%lkPz6=LLE28&?fKKw|N2v6 zr=_Lk1NXgp`Sp|GcbxwzcXVNKQIMlom$t&upY40qelfA{XFTUFN?44v2be*2O;kxR zVf@^sC0mD1JYvLo00KNY`iZ6DTFRrOXiLPFS;+jm23qV#znb+6Vh@)LFGe7v*pf_) z7g^9wmSz?gz*3Z4lE`?eg-$Z-D(R{Q@PG94-_L&V`p)B$eAA63-*hWwU1-|&%v(bz z$cm)tNmg8pDB8#hUaVmP0=f02tKgyYZ@yQT`d$C?`igNfP}7l*crAy~yWYs#wc*v{ zznVtr$Pyog*i=}iB{K@BR$)caMYDmQ6;_d2k%1ymVO1GbxhPE(R%@$`LkudcPOdW{ z#uQc`T|XP;A3@gGrHQ~K1Xgl4nj)o zLH8(mGU!-Sqz2u{%1vpND9aoxa;|a{?jcG^jKJP2H(mD%O9@HQ(~QDWWl$BC3M;&;uu4m% z73qbjjLLZiRb{EN8nI!w*saJR3bUu%^9-umQf&orRakXOb*4ep*lH4x_!ZV5H<)od z5EavqXizKVm1ZPHg{_QPnP^ara--RZsV2F}jHd*JHN`X~8dS5~Y&PO;mAuLfl%}v% zF{=^{szq)wBh4$UC8j0OpjOMP%}9+3TOGSP*`QkGRx_}^!dhcnlMSj(ZZjM4-7dGA zQG6?`J+?jBpw`H1%tq{Y$Q@>srwZ$c?MODLPPx+zNU5;S*v@2wa@ZURNL~u-O6X$9 zR)pW|o_gRP!f2(v)xc2-8;}Rg$SMl+W%~+n@)WACrtcD?ad#;MoQg)pazoRYm_H^4 z;k|J&b6m^^Ji$)Tg~Fe9aLjO3>vuWsCDd=Aj|JXRIl6q8VR5(^Z=iQQQ1=`1c5C-6HMwkExl2r0%BCv7Zh|Qmez+V5w;>qv-?&9xg zrijppsm4ssaAzbC49-6#NB)3>u}B${WDTPspM+^INa%!Jz^?!Adt3Kj6pntWUqz_D zQ!^*~-Y$6M4?hs#4T>!1Z%S+p#}Fuw4w*<#Y?tKp0A*C=9a^W@$gv=(iq#iY{~X(IK8 zaZNQ5W8;#0_tE8-6lzT!ON&i9vsrI6Xd+FzagAT`jTWpzvQ!SJPlo(6ZLS z3^ffC6|SkqtbbiM%%U;tbh(-oP3(Vo!EOUJk$-n&4H^SmU9))YrmBGe?C$?x7VH$Q zG1K0VQ(!c;xAe@*GwUqk3MBs{_vmtMe@h2L%rKaB2D9FxAFY!|cF^T%OA0Oh^@X`P zT2pSi(J)$P65J=#!Dz6gYl|%gBw#X9CS z;9g${FUha;Fp7PQ{IvdR=b)k206!GGV%a^6rXp>jM5CA1WYKF2dzo~3I#ar_sJKvP z(Y>Oplip;O7S7mDW7je>cGeCp!IT-txVlf`~fOt0#-^ahPqV-k+_X4%5I zuE{f+qM0m%R`f)=Tt|Ijvdp?HgFeTYtLtSl7K54Vb!gp=qh;-?sl&_+)*FgTEYW&7 zATbZo=!=StW}R6h&=z8ploSobekJB;O_l+;vy>P>DGJM)YV?+dW{tsUaRaY48mwAl zF$ymi>Wbj_hEvI?8Bqe!V6IVPDbQ)MwI-dWNN>;=l@tjh&032-PjAjEb4xESZr-xv zs1j|V-clww1+7V&U8sv@PzbVFG1*3AA(N9Fk=i5Gy1A*DssGFFTK7gE2PBjbSe!uk zMf4?dw?izP+A&qMCRx6JHB9sv|6!25AeT+Ulp*jbU=coq>Z$*eNEL$<^n96W1AXAodW>4LFP# zoylZ0Nv9a2GXpO=CQo0eOOA<&DKHl4Vzi(TIzxfhWYQHD#`LztBt|Di$HwI6CAqUuewM7DgBR6B;Jz7NfJ?V*VL9Gw`m<&4mloKcpj`^#2z$ zM#J9xGdiQSCcV~Ru_01oHd!|#r$JmA{1el>c?>!UCeLInLQQ0(T@tOq_PeMv1zNKl z@#He_T^a;mdVqQfKgjWb^t;~N4_rVlgVPMl0Y{T>G?g)hS~EsYxfu}ilrlxbv=%{` zi-zTtfHE26V4-MOk#JE%$Igf?=~J>)v(ymnQS21iG-!)-xiX`jO~#U9Gh+}qL>Jh^ z`YkHT`n63P>(>#QEXyqBX-GqHc$1ko>?Q7fY&t@O!a00K|n;d`-f>CRTAR?EKxOPM^lqRntcpbC0mPhB6HjonL0y``iH4oE4`9{MeML9m)m zAvhvd6h@oSMiFoap|L6<(81w2kti(?Mwb z9O65NM9U8x^Jcr>7QQ&szp0uQ{&c)#+YS?6TFz( zz-L3(hJoUTB74tUA;#q29ww-1FQhPqdQPE%NFj5}*BKF^c}ecHKX9?1y6vZd@&kti zJh?Y(@A5&dZMc|8*_qVJ#p?md_p@|{Ha0dtkNVG}VDp}}B%2=+_r!86>X$ZZszW}m z5!E%t)+T&kbY}Fz1F32{8u++PTivGZ%{mj!a#7g5TQC(GNG#WDD$i^?{ zrK@QVlz0c%4pwu1c+~k)*}XOCHf-)D{<{UqZ9?wdHJR$0K(4r*GC6xw^X*B}RO zx{@r@?bRK;m{1URPuHIQ;)f`1(O6nNxw+>;^0zRc0Sw4+%?J}e!~xM6pysWg9qlx^ z*0PRj+8gCCnR-s9!8pa7Iz#&e^nVHiigCbc(%>|)sukC<;^FQ6mpZFy1;G)gNbOUk z5t4Y{&Huu)>Au}OX+N-}YMN0^yUGt7Qm`px+VoS0yVqhG0-qX{CP4ha?orPdwL8Cc zat|-Y7rJ}7_6ik0lyz3VHSzv{j$yr=nIy?`GW-|B~Q)wPQ%=0FEicNvcUuH3?@_ZiH#v z3B>7j_tzsol)X7fR89T}VULg?`GM1nzZLP!o-ybh_}9vjd???cmJ$O2M#0ck8ha7d#^2cjQ-bKIb&MqJ47;NhVt zi0hxLMt+w*(5R**z{eRHeuhTL52WzZ8215D>F*YEOcpruKdAZ-8X`X!m5(Z=!)vf5 zUnZw#czTjiYMO@v{g$Y{RgUlQi-oCwE}k{2Hk}EcUJ}^{l>LC#!g<1~D@$y5_ul>0>_evhFH`|=v_Xu}S@dkU`TTi%Z^0&CtNrHntK-~_|I`RW& za_Q4;^|YMzqitM56$z>mRLq@9Di-~ItEnGspEt&b4nnalBEE}=)q}RHIHq^Mvj27Q z2DSvIJU7us)v734rKs9;r%oHH)x#UjQT+Zp zG4IUi^^Tg3M)v-E&GIKenR`n4@RYSVcK*AnLl>0)ub}J-Mdsd1 zdXHH?W%&xx&G9YR76IZ1a`|!Ns}07lerJuEW}+Y-5cLB%bL4p0_sO)As~`0HFn}h4 zk{+iX$Kl+Q9ysLuY|C3GpX}cx+P1WgCB%0L3Bv(*u58Y_oSCuB=8%6(JRd76`tig? zznZr<+^(i0k&E-h^}I5`JuYMJj;+06z*IO?_!C5Rf_TUeoF#g2d97(r!*+n4qc~gE zX=(M=QP=w}78D;yTcGg2M5Yi48d zLmVJRO{P{4ZtnD>7rdDIFd)J;qPF;ZOOhm!#^s@z5%O514~ttH~?H~=1A2{T-q*`v;`+wf^V%h;Gja(ari66?A zmJLsjUHwMDzr|yfpFwJO5If&ag(xUlH~zVm$(Gd|q02Ld2b4)N~+9JdI1MjRZon1J7+O z?(?fV(+C#P%&%FP_<`MtOWvFKC%gEWnws(Lj_Qt9ubk`iY<-*hk{=-?1Nb{s3f{P zubL3be@vK<;ZTwP5Tzk18J)q13eg!t5S5YNKuiYS5U?2ZJBY==&k_cM9f-lOZZh(M zE)#ep`E$rbf_G?+UrcfrlX2)UIer=Gxr`Jba&hm)*~l)wzq7EqiB7H)mDSx}F=_s? ziNLs=a{JH$-}bZ~W7XY36vwR>E z7`y4?ufN#bYj$@I!bx@u(O{&>^7{z0kHo&QV*A0^b|38Hz*DfZs0N(~%P*nK5*pjK zU;Bzx!+bAra6x3Np60SlM^*q7P~DF@un zl@0P^IX=iU$j=%y^Fhf$sY+`T3EV{L+qOGyBHggvc;3U3l_it?9oT+;H}2u7kCFm_ zjoD7jY$tWa*Qf4Js&4WDE4MqW4fg#hv}dXAWQ9w~WkUc+X9zo_Hge1HCe~zaA@&Dq zCt-f5c9qv}FMqOePaT+FS}iWW)oPQoxq&4R$eyJkXW?X!|2X~<4Y{PW2kgwOf8*|i zK%h`bm`cSo5KaX9mS99Q4b)g*Mt~1d)zJvyX9+gMj()kT12+HrNRSiDZzs%lqP{yx zdo6Ln-ZQu($TNxtMTK}HP!wQBq=zsg=(B(^Vz4-4#lC-W2akuqLhL1us3VLQAVmAxgX+NS7kLUpFEsB3kBOcqfpVF|WwBN`P zPjk}l%^SqQ^*Q1XI>36f<|jLaO?K+{=e@{7%WmzNKjn+->E+(*8i0K4eIUZ6)J?`n zaieiR7B@}%A@xd&Ul20|jgYWX)I!8cL6j0gYW3hUK3a?8Pg2*DGytzC9Dj~_oueU$ z6ma|%%3Yy#72#Z?+%=``CZnn-%+_6&oN=p{)dbAzWu21RFW#bM-?n;Gw4Yba>E>VB z1XgWtAb6$#&k`n!>V<9-v`zwHQ5<`w+~1r#c1BYN0q&u__}`;SqoHH66Fb={6jkD@ zT3xoZrq0bB-atGT<`8gPoEmXl;7P)8ak&WII;nUGv_;9Y4syLlL$1*Tlp}(=Kv6(+ zQOOa?h50227wPr?=4$-4FM6~9j_tj{Pq+U3y3ynIN>mk=HP1B`UGi**G7(COI_De4xtbZlrnuC?TlKA z2r{rPA;-u%BFCVeGGZ)yyoyh5W?e7+qK(5YAdn2CBmfynIbBNY@!|gXRCr@8Vb_vS zbe?FN&>_LfxLCxKfs}+JBdLMomaBhla3;-Ras-&+4FOn26+mDaRv`n*^4tg~!*~Hk z#__`Q1UqBLq^swim)}r#0-4yyn)Swg(>5)0LnkXwHF48B?eNIQ<^_+}B!n&TY< zA$J%g;O&Y|^l90r7oMI7yMu^ixLua@g&T&TRpf`>UK}6TJ#e711wl-Zhtdjh4iSpS z#XpW;P25)l@MmprBJP`P+f{_AA~tVV6Qy^AorY}>mDv)i`4kM!P0hAQ+A5a$EL zX8w7UnMZBtFQEgM&^%@QQtG^v+KjKH?v>QaFXk6O7E)dT<=TxI?)}1ZNG4?=igGG8KfJ$jds%6ggSB8z15`xLWytGo+;UsbMyIw9fH&;j7p6GCf~EWhngzxX@WxZh zKBd+Z3_SrzM#yxaT-=WxUzE46YLLUKFa-kRrPK$`fT<7Y5Kh4+tU!GeN6y6Z0QP4Fk+|tKLqSmYKVLXQ%cX&-FV!6xQqP>Ku&f@OWFm zAG;f8Yk_)QdDd8X=4)S7MXBdkVJzG+w_we8(-O8~?1fP+=51=Z$=MoQvv5gHpF?=X zaV;jPi^)LSJ95-A(gDwF2xCcHCF$0B*Wsk1&Nr5Qet35JipD{Dhpj}<2f~wbKse*w ztu5}}4sWHm-msMT-9E$`+%P|H)YteqiJd&>%{%9617H==OSj}$TkojI&Q>Vry zefuDz&Is6tD&kp10V=;@@Q*C#W$n#mf(##$XUa>I{XOmA3w;9q;uqiuX3biLV?3Bk4F>7cKrM-@NuA|K`oDgoMx=JX>!D}f8d8Z+t&~j@^ zikA|5$^wqlF2`v;I#v!`7dzD{9DN@Lw`cF!PO*6DJNU?dl6UMjlhuS!fzgB%>$ksl z&;LEXs&2!UW^`G8ViUJDvEVdt+sPi6J5@-&GOoVr7qw-U~Cg zpwm*u7WWl1wqONPwieCfiJz8#+WE2tRL!2>H+RkL|B3op33S+>3g~RWJmiF~tSgw# z1zVj(yk-%93?@~)l-5P1L$6XJ7=(xi?lSNoC4X_(rk(xBx47~1vCv_UY9UAm0c~Q z?f}pBaVI9lfi)o`j`s#kg##fe1&#`aDRAhJQr|ek;_4IKS0&F_2s7BjM!iPHYZ~g- zyz3yx7cEW=em|t%d$30P;70(iZNYaT6tP7dG0P5yCM4HUThWujQl!i}N(B?@z_Y#6 zez#NKPYtu5E(X@@IT+nya@>ra74H*Pj*Ri9-@NCR7q{l6FM}=iVSKEIEV>yWWX~$5 z>VYRAPmioRyDU%lth~6wL0EStrk$8rehUNn9G&)iw7!PKNR zVT_3`5(7DOkqG59{bgp7`sm)(FtvSbkM#r~KB|A4Y`G~fm%irmA zf8z31r`IEo2zEbxTKx9U&wH%3@`%eu9uc)i9#i6zhPj+~`Wypx;8C(kTs6*AW2}h* z+y{%s=Ixjt@S%0;zbhW}Sg?~)sRX*LXJ?!f=Ny~A33#&Kd#s@Vx4)2hEhP0YQdaR& zEd^==#_~YHJ}|~23y{22T!E6u;tJ@HiYl<9bll_e18JSMdvknzWPCHsR&snBwv9X9 ztvEiVZb~TT*f~CpO>@VzB*zbEG$2L+go+Z2Qk3{<263N3eDL_a*EKztUEK$HUq7lzmcq@~hcMBEnJ{L#M2VXOu(TCw7 zcS9Py5n62l1FjaU)`icmc)c1r?7bS+!$1O6s)E5|NQeakKB0ZkgL3?H8u6SC$14KI zPjL#H;xrUb5v-X3TaXH75XbL(W%@_sXW#kMVd@U-^}Lmp>}PO8xJvx5l5hkI5<{9?vp4yXE?rs23OD~SX06Qco;I7Mj@IAtkJqtXd^_bAEm`J6Thwh85}D1 zmV$A=4ua*F>7+9T%V#Hmk;=l{-KF}p9jmw_l_Tq-h;IRiCI3!1|(+r5jG$(YX=gue5nmc%<>a# zKw^-pea@bJDQC~Vl(Wa(oXtNjy-@lXYou6My;K_|s{jZ2>E=sl ze4ldv0r6>BO)?Pi5s-<5U8IvOG7-I-q$)_nDZ-v20a*IZ zK|-DVngn2mT_~ntPm=&lUU2+0>OGBy;}HYJ5tQ9R1F!^(gQ^&ID-FOh8KL-s-9`g2 ziwNtX-aBYG#@Se82gWT_*r5)A3fLGXIz@0jQh^=Lo^j-}dF@&}`O?9aVC5aWAywSr z8{Pf8-0dE6`xv}oe?h=70p1WQ@KA3mO&cn9o_u)1LHV&Xua=4zOY*Fm9N0XtD`qP= zem(J7Poj{Tu=}+)lUM}Uh0>DHEhHIlt-IFEeDdYFf|FuaamZ3qh-!y*eqd@skslt+ zcobUEHT3d`{9-%!k1c6?KWq4%!!pLi_ujZ*!Z&9fItIt=pPoA8y>oCikOYN?B32Xv zD?<?ihL#@I%sFZG!JXE_IGiOaGMgFNf~>?E=hTe@uU9yqNY8xe1vp`N%@lT~`*n z_r{$r-@_aBktWtE!X8OAil{|cqX-?gj^wwhhx#F3ym#4QYD~5|QMptR)q@2fJLn1x z#)~}5U!y_Sly=bh2+#GApI>pHh#m#wCc2I^AeP*}K&OiW^ z|vE8a3EDj;+oJjp+hQ)M5&Exk-B|v z#i47~kPO2byq@4)7q2G>31KxQP!y^tQM<7K3UY$SiSu#df?^ihzQ>85(mp|2ogm2= zxC%M%PA5obY`e*|m$(8Ho61eBxy1QEieZDIY@`^L9c3fMNPUcr6l0C8Y@`@Frj?Bp z6UL{Y6b1iR=W7zG_`j{R&Q=9VV^N<8d#gvV?Z<5fYENE)Hr{ z*rOx}i&unpv!kSg(mqDmV1l-)#wFyF@k@WOsXgAj=U=!e$cN29U!g9E%W^Z-pl0F#4i*!l-)A{NSW z0Qb9{p`nQXb6~L{HWeRmU^%hVoPzK_O~e{p7Z4nEJ50SXPUZMh)b$kg!V9oaDCT#T z1}TIuQNK&JIjE8;AI%WYe#_;nG0tm$5-8gHNqhl1>?1Z58u)Ihv>2JoJKsAo^pEv- z;W{CJ(~2?*;Iz_`z-eq_Au>=Cs*v#{2ycHU>&N7l_Z=3B_h%R{6(yq$JUdrD^9r-+ zf%Q)EcLA36S-)!{TWo&dFjd25F6PsThaUdd6tOTG60lN1G&)NmmIF%9RVR49!Gjfeyg5(=bIChW*1g?I8VKk?xB_H26(EO+7ffnft} ze4aK;Yvc0@A`5JMo*~v?S23VWv5UNysKiW!`V%&@x~Q$d<+}ogQZ^_9~%_g7)u-> z{!5DQgfbR_;<%4VDjJ56PD|TOdSMWIefZEHk6zLK3fgNAmkG|uw&qnx<_N{7xG9JG zjm@bptRjvpR2yqS&1j?8bac|t0>&H zNca*Gtw1?TNz_u3h;bbUWdZCB;)Qhr0xZDZCte5(AesWoA=JO4=1L{02tEA!~g&Q diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrgb.h.4A29C9FC342151A3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrgb.h.4A29C9FC342151A3.idx deleted file mode 100644 index 8173a227486ff7a5ba6078c8e6d03c0a712aaf67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2054 zcmbtVU1%d!6h28)+nL0VX4+}mhQdR_ga#8eQK?I*Xg`FD`Lc!Dj^Y*wc_cd#&bx6ols8HH7H9`@^h z$T}~z6xejIGA6LAlv5Erp>Rw~cJe=U}Z`(X@Ht8oJurFq&oEG@Hh%Zs}#K z+H7Rk{~O<2yQ;Qu1pjNjRcTi%wPs1HAq{R0>YDkiso+eMO|90}O=wNmHr6$0oyG`S zbB4BUTU~EJt7tmmV}@RD*R1MB4c{&4t7vepw!w9eH#QExwpOZ*%@rrLvZj@-rUB-5 zy>!z9FiJnY9eO(=5EulYQ7I}j1454%B0&%B_J61ZA1Zz0?}HIXl0b8b+&Bmr^#>3z zbmP4%$=+6gKnxkEL}Sc!80vxjGm+k|P#+Kk1f#(OGd4psY?m%6GfdKR@;D^91fgK%V4fWd1Ad#~`tJVb+9MY(5ReftDvip_fFSss zU7QkIe?VyWB?mAjjmgwDohJ8gJolP+apW?A1Tw@UahVy$z)D>DY(Dqv#lepW+=~EN zl4Hzt7+!ty*elmo=e{POAV7&IF=jvzyPYP_y?g%z@y!23U>E^mDLlwbhv9>p*A{kP zh~M#p9|1%ngUql|1K>9AyzVofzWv3Y1mXzDL^31HfY96JlrZ!)v)u&{e|T@_~46qfk`a4~oVM+7dxtUR0LAT9{3 zVyl4{$0~ACIaDQ*9y(NIypZDrTreKd5y}C>8$bRs{`=mSaZLMqeF4rZeJ>gNGwWw? zuQ|w}#GH#$BidFJPxBg>wspkQTtHsY5zav#dlr%b-ZOvVS|*+Y&?gJG=HLJA>cwtC zvtl;j9uif3YHugX$+=-ZKSHO(sQ~YV&{=WTjkprAiY-Il;qirc?*4Fj=1ttD075@c zb6IwYjvU>_vjf?|PVuSeRGgRNLdCt>D&i;hTL-efR2zz0EST1fZt zNn><0o$5q|{z8P)acKucN761`us;~#=S^r>4iEFngwi3Za4``YjYSjgzZI2-WQFgY z(0Dj5@wpMIgcXTzlF+f(SfbN#YB)90X)zPdNSz^NMl;Dyl<&#=dHaOsWBCM+I0jG1 p{tfa00)C7%J1~v1Ichuf=%u+Ab8me$>y-xBx7|+SB{>h<{sncJ2)qCQ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrgba64.h.7EAC3B23774F706F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrgba64.h.7EAC3B23774F706F.idx deleted file mode 100644 index 499c8411d2e618a324ab0eab2ee78677acbc48c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7656 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 Is{%>-A4gFdpa1{> diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrubberband.h.18E73D8C8F6D4C52.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qrubberband.h.18E73D8C8F6D4C52.idx deleted file mode 100644 index 029b2fcc209e9d0eff51db1ee5628370135bdf8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3148 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscopeguard.h.188951AB2A4E8E0E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscopeguard.h.188951AB2A4E8E0E.idx deleted file mode 100644 index 216728ecaf09df01cfa41420f74851d878df99bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1742 zcmbtUU2NM_6uxnsG;vN+Hw{_RL7I-GOPN~FYu9#8Q+3P8I%)ir4hgB6DmQUki~MZ1 zgBn5hG%*bdQbA(_@$)cVn3y`)l!?7CA;uF!Oz^}W0BJByorLx>AtVO(I-Dj$VlP6GA%aV_Js(v4bwymE8QItYqW8z4Ns`lC&3n zWQ=WE)k9iIEo$*>ZJdlXwQ({vohu*G_EuCQ-?~vd#X3m2oubV~PG|9YP&=g6M7RyCVQY)sVl@?XQ&qx+e%p-G1q3gtPqFtGT4a+s{m1=eOuo{DL#AC^mO-%W2xmL-PItYxUW)hzoz zTq~Ad(5)&d&dyg#Ir`E|FO;9xNDBnyNDIacNwZpU;@pCHg7IbkRF-1PkO{E?3n7ai zTsik{B+PRFp>U`RVFZYW<6T%7qVE$LsQ(iTHpFNI8?vUxT4>S4?v0oZAmK`gO&cp0 zy8svokMv-5RO=rZZEC4ND!Ps~q0Q{t)NSqRjz?#zbP}oUsbSovPEvXhH9Ux>WHiK-b-s^J-FRh%reytK z_ZUS%VXVY$`Ki@=H{Zy-PrZS_y7!-FPQHHUq;l2?5afd)^ahCVkrpk+$JVvomoIHH zqQ~kFWDl~RR>7!`H4j`rP^(|7T%=X>M0(-~D86Zjtqh7zU)*`;)RSL7@Fe_Fc$!k^ z31TXMEwCko&;j&&`b8{Cu)ig&=|Xv_xb3xv*Vqh_seZ(d&LEL~3^k-GBM)UR#=f+{ wS$o@g@9w|GO8?p_gVHo|ro2Z?KQ>uGiTOB3qoFX{xYlPG!Q`$!q}g~X*W;xXAk_7q;Jp6E}E`YHPv>c z#_8L~WE<;k4rg3ZiP5fUwz!mzWFg6gr^fYxk_8ta6ct(w&YF6=)ip?P55{+PHl7OY z=4OLa6AZRmitR3+x7)gJh6vC#}|Qs9I>YRoAx&?Ce!rG{Nk+ zi#<4uh6eszSZ{aQ4Q8icsjoE~4VLNkPDi0;&$k&(w^70Ct;S`yu`U;^23r$*cg`le zW@kbJN`Rea12xOs$T-i@uHS z|CpBvx3MqxD0`0*EV$rtWj9+5_Ez6zH{7Cvv0baNYYr1DO`72I4A`OB%?3+BleLNk z$-xUEdn2xFMZB8(6vjR>Jh{~+<|>QXRy)lp+^leTWj4tQRChg)OU}Ih?t}iSqyVnb)p$l1 z>Cfh@+5eHON-zw?RPiwqmj-W4GEv3C*^78Bk3Pmp^D zFoVw~&)GGrrDXr5L~t#SwwgPu)0Elbrgz zRh6ayUK+gA6M?kK^2{Ai&Z$==9pHAkJszXiZ24~MIQ>bdD%}aVGQ3g``0~uRqM}v0 zOqFr~SLv$40oUq^?!CArw@a0>0b2)JJsUfj8tIjMgx^o@b7 zn^h?Va9woWC^)Z?*M+Yv8~n5?r2}4|Tj1H)73;D)s)qQeJm%x8SI|&I+1*HBHf-uk9S^>;SQHiduqZq%s_r-l=rC*q?<}zYchb7t#n;OR zh&Ruc60$yj^fPA$h^}d|ro`Rb{`%LaC*G#@FQ zr29x2B*RC_B$+BlWZSp5}D*9O(9c! zq&vx-K2i?J@knU)Ec(33Bl>9aOwF4+)M)NZ&6_&Zd6Vic1(-UA^~uQS4@*b`42nNw0)4*aHg(Covd{B{DT9FHnQLFf}JFP)~n~9*E4`nobltkIa*C=oPwzERk{W z6k0{9WOPV{YDAMk1i*TjU(R;m7i@>AIm>~1)bYA^8tJ+$RwnqyuoaLWX6+(9ut)S6 zz{w8O-|X1=*rCSF*{o1FA|27-4JiZHpMGFRd#~ ztyXBRU#_Q)GGDsNLGZ;Y6ImLB%B0Yi@TcLJ?a*z{>V;yA1){8G66 zTAryuQfQ2SOsKcW^oT-_s6ZZie9^X3w(0ZPuB^lw0w%I%_fr+)X4|=%mwi}cGFEY2 z1P-gg3uB?=j16iqHm2rG4QenorsfO{>Xtk2E4$+Np{dVV!wX>6oUpBNxtBYo`b=z&Z+=rBDmCq+kn78e_@xN>;t~4g`^fbc(gWE7_tpaez#R z_z&^CL7pbTJz^Nrgv+r#;t0q{MdpnYSa>@+?Te6%;}12vJ23h*PA#+Md=}OZoH*Aw z|EJL_B$-lw%2NA#Kh~%GWX|9B-^-iw9%pL_6+%5LL0e!` zaypJF_jWz`c)>So$=SKKt}Z{3JM)0w%`{D+Gsuh} zuu6r_BC~=(!4*22%nkyjRA@fQ4+4E5Kb18v48HIp3xg|~m9WnU6?>(&*fu?GCJJp&YEQ!%Qs~OWm7`F#V8gb@Z!Op! zLdMkmwgNS7D@1nPQankYNAkkJws{o~?-upAxhQn4IB2aH2PXj=N0uBsw)&ku*$;Cz z<;`6Ht)2m{iwzthf(+mn8mMuhVdsTkWT18&{^h~)B~c%;9Oa!8F9W25IpOyjSmR#9 zj(6{U#%+G{fkok!Ty+>@T}c2C%!N(BFFr6riZV67@Ia01WNLoVff^SbrsfwMs1b6e z<`)~Naa!H|0cyG6p19xlExyKbwvZI+aNZQUJYjh2m)qt*o}_+_%Kfy5QHeW5rhcuqsO@*crG@A5a~6b#%qS= kdGYHX(+wFE8a6mQDk3tv_tzq~$q=vUVDBUQbqSyU0SFX@qyPW_ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscreen_platform.h.EA88485E2520FBA7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscreen_platform.h.EA88485E2520FBA7.idx deleted file mode 100644 index ad05ae4096c519ec1aea6fc6e4da0532940cc7a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1240 zcmWIYbaT7F!oc91;#rZKT9OE4G6(~4aY<2T8zYbb0)c*sC7ETZo_QsyMQMr2sa954 zgaX48D{~U_Qi79BtC(lT>Wt@QQvGxBp&^%F~rOH%VP5{rsbb8_?pOZ3h3 zEc6WY)030q%}n$&^OAE)Q&NHA&iO^D`h|I5>oZ~2>t&EPG&OD z%=|oxj4B5EG`=7wu_P_OD3>C$N`UT4&&f|p%mEscUs_U7TEbAC6Axt-SLP<|14aa& zwa{PlX-?W~Ow5c7Y?>mPN??M46C6#9Y^;S&C(I^WtTYs3VrF7s(^k;d0}~7!UfBzpyu8K+HIRXUO_E(w0AajK_QA)id?()&VB%ncn8>Cht|JRG z{%BuH)DvsX`#6j*N=++P0qPU$5W7$`=`I5!6Pq@Rwmkog?XM>D_b-xl*izfQEt-*$ zhs}z?N&sR$0|U=iyR+Pd$JiMe!Kz_Fu<1^f$=>y4f@p@oq?x$DA>*&5;;NMGbBYHX z3^2*_C#U9>D6iH=(+dkcMlKZ9H`NvfCQiKQ19X?Rv9=Y=V$r9fMPHpW{D8um?3$oF z0|tt&Jkp0)(z>8#!>lxYBojNy$9e`651Ryw1TRcA51R&y2ApT;zy9CzNzU_tM#?bA z2*DJ=0tn4W-OrEeSN@*06-{_v?%bfTPS>4i;RTC&G|$1JoQV?>)lfTm*mQVwL}Ael zqZv8D(GBy{l+yv1le8z^1qBQ+9%0Ufr2;gY{LYCScCB;R_#rhxys9=Hub{GSgK1+31zh^Hwbex%;g_VI7AprnTK~$pv diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscrollarea.h.E8DD046A626C5B2D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qscrollarea.h.E8DD046A626C5B2D.idx deleted file mode 100644 index cd63ebefdca9d08795a89161baac29d0af2cc64b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2970 zcmb_edr%a09N%4*$1Z!^!f~8;JmrzZl`Dzm7DXT| zHnFI*L?~4Vp;RuDgxR7j=Gz3jAQ6S4O-MJHOvUyR!DK0u z6`{1)B1wYHW}2y(#u?L$Nv0yJb%Pjdwx5cW+4!stn*I4`? zDgQ?*Wx2z7xyWYEx7e^UyR}Tt5h|2iNhr@O7HtKDB*@}h!c<3GoL6VsOHmLMd2%Ho z3rdDNx@h6_8=IX^v+!XH4mKv4CZZfDmL-B~Te&DKUuu_>JiwfC2+3MlxmMcs0 zcc40G)?T)5(Dji#<>#sj*2I|fgpadA`j;LK4LR4u@KhkcX4Y%~ctXWTPoxW?%9|ny zf>rC(k&YjNahxVu&*d#slkRr3O%I|-ieOVUsbP*EIKOD_{ETyBo96SB7U=aVy#`=a zT}*a2QCZDXK>&v`p`!raeSFHvQ5B8vdQ%=wwFIm3QjHqA{l_;0-x+9+so^P4I6sCN z69ngV11CdH862jD~|F%aOh6Jn1f?|#35rvdlZ20c>Q9Zt|$Cs}CMN-qz{}j6*#ePsgj_benMK#MKo)Z|5luoDNn6 z>i`zn!OiOj#a%qb0UXIh1_Qir#)X4{sRQ5f6c4b0F}RgKTsH7Z&-St1JVgT>9T4q4 zt?qy6rmxu5%TsEAW0)8%kgKcH+RN@0U*#z;fMc215P+K*&p&o{*IeT%e}Kc7FgH23 zChV6($`{v%`5mMRa;NmONlMt}@aYe9lnzeoXq_jJOG2T1+mj$dC+(`L?|hvkIW~<* z<6YTz7cx~sSD!002r(cXxJAsBxkfs#ig zxYU7U>R1q}WtCH2}=;@5wqV-^IeQ*ed`zR_CeXhgLY#Lo3`B&?m;I+#7z8 zH5!Uz1Ly!h(8RGCTH{_#*`nX6GdCO2rU*KMfjZ?_Gi_!-J}{E3qvPPZ+O1m_rc9G& zAg6IG-~#r^oa{YMOI|~i(LT}sP$3)}V~B}@f`D#Ck-=RGlq(Ini_cUKT1e7C3FhE! zjgL>)Z?K|(rO+u_Fnhl@yTo4GCnEtyt#LH8$+sET{7eTvEO+IoRW6>lX;tA_m;mTX z-1$HPo$tXoJKi1jcs@Q7T8nnv+grQu*Y35dPhb`xCOiXx31$E?F*7hn~>R;@O59=sqP>D)80#;qasOACum^+ za%^Hm;&Tv4up(V}9D**$Gcw~b2xf2+nTIz8#08o0*n`~_RrgnPPtMvo!Z~PY>e&Kx zb~{7>Mkb=fqY@}D9z9m&KfZdeE2Dz+srl63#TWD28@@hqqp6E>k}OEKFW|-s1jORC)p|+8E_=Ib@ zv+?5ofPuRsynu0z%y^6g350XR?uM4tJ^5oF{euMJrUTvR-N|NYMyvgP-**gNI;bNd z0XrV`H{3mXX*~(e5PNHTrB2iJF$q;zcFXJht8?qOkno-p|3cf#QA_@8Ct*(B>RAz| z>*za1f>sC<0cz8`-tKwh^r<@}l+f*ojfW>{JMWWF)PyWqY|G`3~e*vHFf} N$C~Vi@+e=1_!n6Jg$@7! diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qset.h.F5113D4D2082A5F5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qset.h.F5113D4D2082A5F5.idx deleted file mode 100644 index 2014c541ff141fa05d9c9d41f93ac2294c7fb9ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25076 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 UyLGA0&Hw4}(+Tk{6O*|A12D2Uod5s; diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qshareddata.h.81536A7340226224.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qshareddata.h.81536A7340226224.idx deleted file mode 100644 index 1509b75723e79bb0f708902c29e31802dc5f8b4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17992 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 Z(5`J#d#)Xn0mqr$HXN6ver>P*`hPNACW`<7 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qshareddata_impl.h.573B6A3862491E90.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qshareddata_impl.h.573B6A3862491E90.idx deleted file mode 100644 index d1f4d7b7e2d13a6a1d2a0d8e63d85af67e044bb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4606 zcmb_gdu&_P89%;tQrkJPZ|dXPN$NbD$Z4K#Qzva4Ck+XG2bYqx2?ScXwo_YN+sXB9 z(n7*B3Kbc2>$I-4rA6hT{Q;xeN(&Vd-9#TC3M~l4culCH+carxFoCi@#&@p!^&0*t zLHJ7ke82NM-}jyKz0R?3TeW=oHwA=rg;#BhN0gwR5MqT-N|9ryX2A=8=2zak(6?^c zwjn7NiYe0eo@h{xgl`Ti!CRBDgc6ZAH2Qnn%iK~lHC|U%d2i!PCd)9nI;}dCOr(^u zpJZUhBG=5!OnKc*76BSz-7{VQIHj&^#cthx1CwUMfAh)*;LVSg|XmDnYp7oV+PMhs38F zdqlwj@(FvQR3#{X^W4to_I;ij5QQRu>nrQ)RD$r%sn<@t`RSf8B~DO3p|ecrtk=GX zah8sh=7Wi{XE&Ys-Sk&UQLuoH;euhCN>E4Q@v~zGo$gUlm+qpw|WAp$e#UMXY zG~!Z;=7F)&I@0{a?q|}`E7zC17$+$I#mkl@+b%xyO4;9cX#&#ABsW=to_b{J8ddK*m2HuM`z-N z&qTonaL^bmPzl0;OT9|plb0{0QzKpwFJzn`912=r@7wjKE9uZm1yUj71YxMD!PE&8 zA&@;&`RpIjWEYX-)gn5dkSYc925Uo(= z@Htv>36vF^it})tlsTz0U*k$>Ne1UKx$-atD62A6#}w+ja!+&(u^CWY&Bh-uW@VWnhdVn+RZd9usEQRX-JDJB+WYw21M{bo`dFDjsHQfHXdQEX!Emezf2)e%npzX@W|ijbyYg`n~=JyM+4t;xb^Sl1 z?m+(YFFQj4f)RD5P`0mzHRmAOfvFfU3?D;5XR@1k`! z`P|xW&&b8X!oeZ|jt+=?P9lgdE=n%81~HgG1O&jM4aj4Li7_y+BA6`Mf;=BsR@)1) KFflT-G5`Ryo0D$< diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsharedpointer_impl.h.337721DAB3A5F08D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsharedpointer_impl.h.337721DAB3A5F08D.idx deleted file mode 100644 index 4eadf7ea7ee1fe70d8d17c78c2ea34d0a872ffc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47710 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsize.h.2FF56A05E027E54D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsize.h.2FF56A05E027E54D.idx deleted file mode 100644 index e59ba331ef26dd5cfa361dfad428711d8ca03361..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18544 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

ugkLeVLwAg7Q!acqg?R;xr2 zhm~HQ!k9xgq${<06uyl{kqTpuxcOT<1$r%NmS2`XFTkSa_~rQX0u;4#2(xowvUBj! z97MEr3F>tXrF9LRbq#%W4gGWt<#Z0Mu&ff9^m-Z=W*Z5!R%XMPt;;{O1KBR*!;UDb zmESN0(WuE`%tB2Q>qR&`kvXy?&ay)i5_XM8Pt}Mk1I0L@TOlR|7;8Tn$sh z1uAkDg^JjAQB+ZkK*i4DQ1+t~wK%FcMxfG&(kPQ%(yu(9EfKxUh*wK7n{`f^~2)EQXkfUk%WHv%?-g-NEU3n6eJ1dAx| zQ(%1xd_~lC1z1*qkBFkK0A&UE3;ZHjUIZT&K}CI$LZIL;@J6s~1Rr5tZ3O#92oQKP zL~MpAj<6`|>tJ~ue3$_>Y=0dB1l|eGoe(PG9y=j^CnO5o4$gK672a+;#J58tLs|QD6J?%pyI^hUV>|i(~2_$DoroVH1SY*`EbEQS~;0mW{#6C_J z)_U;qMEJR9Njn{MyU@A|?ZQ&pg`vAJnlWoL(qekCAFDr`Q3J@Bb6PZ!r|8dEfUUCR zoBRIt^XiUTz2BM!)ENC<^GtvqosYH-xw0Wuq8F4nA zI_YJCOct9_J;<2XMbj9?g2pt=VJXM2?m>H;(Rwl@|ZAR@NV>V+c0IU}a z^6c6sq@OeUt>+>AJmm5w*o+!O?w|6f!OwKJJa&QtQ>*0QRdR~4SWjLg{CRVpFC#M8+nCjlsq!#vIe5B zUg5|UNUWKNzdV(VJhM^PNabBxH6v4y?7#G^TsFTb(v+T)%jTEOD1Q`vx8um|cr!aA z97rM-Gb$jBxmd;0+B|iS#%&J5QGcV_(P&`Nrrp*m9C<#QQTE7~D_O`3ybQsY&0gST zh`wz00xv_}WwRG}83tZ9dx4kXhRbFz@G^|K+}R6^o{h0)FEC^th6%549!Af@Sb>`` zqzS`>*Vly6O;oSX)%g^TayDbA*$d2Ggt@{C)ay2RZ#6G4Z5w8=WvO|A1GZx!6J9Ib z8Mp&gvlr;tg@LTgG%wKFj=p9u(7FeG*xT<42}&+LrW|r;1m!c6K?mw6gZwDjrNLg42HIA@FAq{~4r+ojm~&Cm>GP_9r3W zB!u#5s1>OOoPtnx4m6x}3VI9tImCYsDPku+hl0;xu)t>^{tTpuoj3#eXJC-PXCdM& z#EHZ5ONjUq;#f~Bly?Ze0O2COZ~@XUK(4^wLGX7FF5(N{LHc))EAaOa{5^!TTGfi` zd@q7S#20>q^dBLYPb-BEt3f|PslX3m+C!KlG{GE9pM$yHVr8mO9y|w!3j8o;JdAmq z@YB-z>5pJ8AG%tcG2>Cp+=2lu7|NQB zil{NAMFifp_?I~luTVz5bR`bwsD>6%30#L^EP@IdF9n-$Fk3SUog8^>Sinb#rYRlU zFhpp|&Mvp6IUU&dW_<^p?_h+` ztotxzA4Uqzx*tRKVtt=A45Eb-I;%Es{Z>9Zs*uPWij-hbBHX4@$(L2 z2KJoE>h%1q!?=CJt?%3NyOBn<7=;h47z-y?4C{#f`Dg0iITJJf!!O_1^ZGl#kR@Jj zFOOhvNjr4?UjvtjL|lf%%aA1$^%Y3GV#c%4Z#ISr#XTF7W@EO%i_pFZBZQ)QNcMk7 zb}^%{LMK8Rzd`c&eyiT4K6w!Us$J^jvC mk_wF}=%OZ0Y#7jQ{{&~Z!T|&G3#0*}DPMdYD83emum2CkWnJ?C diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsizepolicy.h.A573A7E48BFD1C50.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsizepolicy.h.A573A7E48BFD1C50.idx deleted file mode 100644 index a341ef2c7a4c0dcda59ce40f75689a7c95904d0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10232 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 P{|fMfkbLnoSN!}x&E!7$ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qslider.h.5E2CDDA19C546BCC.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qslider.h.5E2CDDA19C546BCC.idx deleted file mode 100644 index c8cbd1bea648665056baf7b967533a340f60ecee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3390 zcmb_ddvH@_7XR+eZJQe|`EDO+nm(Xy8d_Rt$~J8+ot8f2QCp!j*5}qXO)u@$q=DQ^ zd;qRER^_P{XOyu5c3ELpEwp0M#exWw;h~O>4^|yPWnc$gcG+cDoLOMcz3E9G|E`(I zmwe}(@AsYWobx-Uv39|N;;DqxwAViDmsAf&2#JTUq6XzM7XE0T#eq9y?}G|i>h{U) zQV@UV&K>)w88ieGS(O7_C~XMJA&)AN2|69Asx1%-%av-$7kEfFQK|!KryDL%!rOXj znHv7rD0g(K#5*^u(p@>~L*@L+39wQ~>Qc!v*(c3)I-Q*XzvT3+R8*;}(-RCzKA&@` z>MYK`CBMMg;q|r@yPR^D*SE4=0{LBXdxxYd&J~_Ec(uo?D*7w)JO59(UkOHiDC}Q{ zFVN=kfmd>uth&`leA1HTdbIr@@UQf{SgA;=7S`G>RSJeYJ~FzGWLCjT)bUo@CSvj!RtZra@wZtGggjMt_|8B6 z+?$-pvIauS%=+CJ4DQP)d@ubtlUpIMYJaJS89qxwR4K;i_3Ms2&V?V}rKZ_XB3 z8{VF6%8o<$$LoH#?cQryE-RagY6s_tLUqOud6|{xhi?(tBvj|}xk;!_I$+*>(%)St zvWciJj1sWA|Hzd+PVZ z-#j6*$#_2Bm>QJQz$fPD|96F@r-p`qwHU>v@rl!wYguIX1lDl{XLV+V_d~8YLz;pJGgj z)t9mJBq%LYevBq0t#aR*4MX=aj6kbMl^9MHA-U#FwFQ6r(7`T zIGWC-n_7hIqWuS(`_8R@KV#%vRt%gq5mPLl&9^sPGG}(jvjR=v63i$TsD-mccF0S{ zr1KH;iF{;uorfq!9)eioABvHGAl7(?V&olQYoxxSP#o z^Jpc|94?2)I3pDqhH4bVvq(XJ)ToDIThiO6jXxEZGAym&Dl8~A7u|mS(%vttL9B%l z19R*4pRT=_QCS0FEKDezj=aTRz}9$+AkXaH+3Z>rTmsfwW)KAF%<^FxkIFgS0rV%f zI(hBRt*tHa3hgXHUYNlruHWRACb^3Z036VWkJbmOE|{I~KO17grLnJh_qp1GhCkf1 z$#s8I|66MSWIQ&u2>{XB1A-iLUtK!TdF{zbo|L}R^PQo!r5mudz@gvROaMe{A_y}4 z#B&!`$X{)S%w<|KQ?W<{YX6PB6l-IMo5_`(U;jMBtDGy3!+3qS=f}(U>^ik|^cCoR z{15W zt}WMrbtBL`E>FZ5q0OZF7^0U;KY90TA6!>J3oO`MS{6RK{!sg+-y3*JqiGU4C(x3N zl0s~M;CO0T{;73uAMQPA`)%t#-&@{vmN<@D<@u^nO=VNO9YEHg*)-6KaiSngoV_Md{rm7R+kw5}}X! z|J?D#_XFSxXXGNC=HWG0S0AljFgPiR_;@H6t>>d>Z38`ToWAtZ@TfJC0Y?E?Ya;-y zaRjg?z4hbk1)7qOG7bAHjsZBUwSPPt^L(~@|M1hNCY3Q}4y?6lfYvw-;3jPpjNO!G zNt=#Ia8$e~v|i8td{T}u`s_s3g{g^3?B0fnv=19$`EphocNqr_C{Z9X3{og*Lb_7Ox*% zROIZfy9gj+j#z@?rjG;vvKh}@2J!gLiD>|AZN?#XPw&QW+6sTU3D#N{L1w_r^Le(y zPThD{Xy$?~sSG-Cy>HdA+!-S!4E9`Zj;kWA?&}bP4{tsB?4r$0Evp#Jq4nk0ysx(m z9$|1^$X{%*{Ui492?pbF!*l%2o1HsOGZ-#>8^Ko{TD)#y@aTgV8JsRe33?T~<}V#M WRnz!V|E`6sXeN=VOh{yY67oM^3jC%3 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qspan.h.068D12705FAECB9E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qspan.h.068D12705FAECB9E.idx deleted file mode 100644 index 893df74ab5fb2afc8e5920bcacf269206054bd1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27204 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qspinbox.h.EB85D3B1F4510764.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qspinbox.h.EB85D3B1F4510764.idx deleted file mode 100644 index 638aa461ba373133675435521794d35e7438457d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6158 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstackedwidget.h.C50535AFF6636FF9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstackedwidget.h.C50535AFF6636FF9.idx deleted file mode 100644 index c05f9b599660c6616ce7357cf7e655a002187cc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2514 zcmbtWZA?>F7(VxKftGXIUMSw$c9oU_3X`@Vn4wNL$Q)=86%u01)Y4v{+Lq7{P*LMY zK!YC}_+uK0m<4rlY%txJY_hpIaq5h2Zpor<%Es8D(Zpq&S(fR}?d@B&f4vDU=Xu`q zp7-lHw@WML&%dBVsLWll)+dIXEJ8?2|AL`_XOyA;NY9e$kkhqBbk};^4Pq#6IcruN zusGmpafU?Xbi)Q$Q`jFuu5chA`a@-nPJe^whGm7{Ev|({^Z>Di+M#-nSDaW-Q#z8!)}q{vWK9(xjx|ZiMGaP^b(X4 zZ;d4W%-%w>pJ0Qxsm|%8?mSZRRrT~cCjWBa)8W_p;%YM>1YLpsn$ ziZeQXxc;z}$EiT)D0B2c_iX!bhi3J%P02VxE(9W~B$W|SUC@Uii9+v>Wt|Jvn|Z8- z{dvkf0rrP0r`@UVS=7N}70_mdSp)RAVa1uz1N-*yI2q_EiYc++=FZ+<)R8;zQ!=J{ zBO0A1JM!`P^mW;!^~HU@F&^`{0^5l2kU8`}~mgyQ}jK*235^N+OLLSl{YA zZ5h3ll}wLRB4sKZ2~)_VM5Yg{ZPvxN)tT*D%n>cCRf9E0(%JObsO*dZHd~Q&n;TEt3lK_T+rg2Gw4DdXy_4@=+ znxIJ>F|j5By5fjgFq9lf|e zT0ZEX_7_ja!nyh$X_S*R0$3MR4Ltm$#R*$}!;Ff^9 zlQvnpGr5pbNNz5V#o$T?<>c4B8mz%7(%6iA$GV#~FBCqhP=lv`UU*8mDiH!zrUR Q8(-ZJ#9RtWfm0CrA6c2H82|tP diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstring.h.BAD2817AB9DD923D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstring.h.BAD2817AB9DD923D.idx deleted file mode 100644 index 6c408d780274845ffc1744a8e1350470869b61f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83052 zcmb?^2V4|Mv-rf_ota%&GAu|AMlk1`F=x-yJ4Ha{L{LCIJw0>IIbc@I5d)Y|G3S6e z=bY1-{Z~(K?d+c4z4!jV`@Z+iVry!uyQ{0KtE;Gi!q|Slism1#j zu+r6xNs9q=d`!2%a4WHm?0+Kq8%G;ygP630q++z7RtfRF1G~qhrNyTtS$U@>^o?(y z7D#`Vu-2xVWV8Ers|!0@!ck^D

p1* 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%0D^IOnu=w`o0sG(M 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≤&EQ%yMwqzOEU=nI z2{Y(8i#pDdh3QbkqH0*O@b_z2yBgMA0BRYjWj;bchFTU^%i0RSEE}0+^Jy{g-#J(Q zYI_@+o@GnOvb7fs-WJ)~FS7Lz%-Qm79rA5GN2()(E)@^vf)c9*8UX8U#(JAShDz`? zqn{hMncn3xA(sm2`k1j($MwGbXN=a%ZG+D#_H&9`7YLP{(d=im08|PBP^a1Jv;d3+ z7;*J-mH!{I?()sGyxj4JI1h}B> z8vfhm%&%7M{X<~f64vAgx#AED?;(UMU|m6w0d33*ZOkgLjxNyqbC{*(FvFJw!RBT` z0dtg<<0vcq3U$~;v!H-Mo!^9=T)+(U~f{!w*4@N1ZHzjk|&L9AOkaf~XK5O_C8@74_>s$VbPxg^zJd!Ww4` zMX5Q7O2A11*g8=L*lJL?0BrGRaZz$H2P07FRuBONTaehhkl1UH*z1tk2a(ttk=Q$s z*uV*!+Y7!&D;=9Jv=O+7U_J1vgmu7+Ft;-921dbJ#yyM&84ob70d5M}&$tsfO3APX hN$&Y-VqKumR@C=EsC`xGYWrGS+iDlJ^|i0HPupr+t9^B??YWsb_Z~>3AoTb6 z!EfgOzvnyOa?d&6IcI38tEp*m2!hjJx2Z1>^G*{4VIKVBv1st>k#~dILP5j|>K)p@`SdEwiG5K0peukAwqUAMwW@0{&1yUGzU4G(q5E6_C|lgcw-f-jMBsNM;a6#)jd&tGEXu@$|+yq6$l`f~+ z2~);H<>j1$oXKTZuKA9Vk-)0|_4}DH<>lYsg}U>E&0fgBOMbQSNhZvlaFGf8M~h#k zm5}p4{~FE~yyV%(BLdNRd7O1}g%eKo<9X8L$_aZJ)t>J{R$?icRXe%!4T2XoA>nNB z#(cf{{Al0!XO%uY5DN9f#s2a1pY7Uks}&jkA0{om9CMz%70~#vw4e!-k#~C;E$ZB9 zl$4C*<*><%%1+24FC=cBV^bG0V0u8WM0iLy>9-qey0USxtM)t*YKgk@pCzJ6~s5SQivm6ng{fB6cbl*;2z zpjRAQ8HvxWJV@XOG<_=_!I(zj-c*@YKE6bItaN?>4TNJtAnfOD!C0>l*f`(~;VQa= zp@6xhq@*{}7bx*UUpWwlR~rq4LM5J9iK)1(!$=p0Ppwu0+*(S zk4L=Aq2qELQG7+0d_HkCN`NAp8{kpZTzrem9PqcqU?@?SuG-2+2nJ(;s5cggf?U`i zH&p??1vWKx!)Htgay$10gYcPf5%>}r3Pgcu3HJ0Vt`q21#8&n9kF%}bP|y#~U@!?G zFOStFbU~-7C)T?>5CSPD#x7w})*XrT3u+L8Z?R|?1Uq}j2MZg)b)r6K2DB+KfIHW>Lq3Y zq~x778tkvHFW?vWa9`J>Izf0$zjO2(O$%m=LTF9=XDeQ5sf0>yqQ^cspbI^P9e81_4b)xv3mf;AX8)KECwDM{@LZ z9sX>;LC{&RN-Xt#xBr>W&;1HS0ysuLAQL7u(Dk_^R07w|5E!?5ZDfT<=RzAA+t~pIFM= z5^mn@w&&5++AVfCwWaeDBD)@4eEOQ7CmR!*?qtH9Yyppd2)d>;VJ{P4LQ}yrPg#F| z#4ZZAsE51IvJlR$B_p9JeBj+Lzr4KLK__!rTrgR&E+KMs>z%%zp1uo2wDT=9mBINI z&5WPT;j1@x?5S#~7X=^gJl&WM(->w8H!8NY@k=}R2~F-+QP`?3WQ%DF7*lOZTt(Wz zdvE>xyFG2>cs&*m%u#SfVi{KZj;USk`Kv{t8z+h7#7x@p&V1pXx84~^>JWvU>LiQo ziy8!7-8F*$23SUAPVM9Gy~M6h9NQUIa)!Bh{A2vs_KY7}%hMm+`k!xot5XziRTb4b zYwHD_NfK7A14RRmTyv!7w>SBSZ{(PAU^~u*@$JNh=g&K7p6w^wX|^=Sk1Xz9zwLPF zjrm)4ZV-i=VG@3dec}|;Cq4w7Cq1$22iM=1_TF>PfY=t?b-k&+N;|mq2Vefv-=cd$ zqHvR^0E!Gd@HX4^;&q1sXn zhETmAv6e^fe*dqAlG8D=>wHr_?7B>h>zH}xs|8!0KRrN#N|mJwf=bD(go+QI%TE2^ zs^y!ArN~AZETtwXZYj@Qz4w*RFMfMO6h?8sb*4J9-wjXPb;}F7tG5zI4W)6>!XnC&e^vDtN&I(P1@Xqq4$5njdrU$#ep7ZEE zqR@+5jb=rc2)e8(LfiGQ)tkFsyEAb36bPvIK(;9xG%QPsYuGtu*V?cBVdc^BMGU+? zb;0XX)417UhGo>tiLHiz@PEzk&OLOTx>U{58n7-10ING;ng#yjnOo*O01|2p$uMSs zW#mtfTZVIM$(gZV&V85&q#9E}z;Sh4V9v_4e%;Y$PmtHzp50y~=&CS6|DbT1c=&yT)BMLLr@GX-5kYT~%w*ktRA@*U5RGtV>S!I>|a z6F>9JSGLT0ZS8B%lAUB4GhrvW)8ae%<>~C!*V~_dkqBfNvp^twYFxm*Y~P#rJ@CNK zh^+t&%f&J*8e5jC^i+tHWp8fZ)5D)T_>l%`q1x)K!K?M1WISe1*-2DT2WDV_;q67 z7K;TeOT7wHiym&i+jQ-p>Fs1N8DJymBzIr&M$rR&-kW5STvIMgV!t{*N$c8Qed)~G z?zco?J-*a|oB?nFyttP<_*T~=L%#+A)i%?NX>bz8Iq{RoF8Fa|Z(74Uj15rmZL)1!MHYiCU4-)F-2*_HA1O%PUQnhh^W zPtJk|kFnX0v3YodV6Mk><2l~UQQ=cxOwM*c#N#?sX5hVNy%y=<M%mjf}5z$^~rmE;ZStwpH^ZVVjDn<{d1k2$2qPVR1VuT!rK z?&g~)^qAA;$8ZLS2=F~k*4Zu7tnzoIpPQmqq z`kR>=EqMA?mVO&kb3&f6Ib#n~!#mI1$}(?bY5?O|yIIy@rp7B?%1gI1eD5MR3>kJZ z)ya9;P}xqVW~97)q1ZB#Z z1ZBxt1ZB(F1m(y%1m()P1m($j1m(;51Qo~y1Qp7K1Qp3e1QpB01eMCA1Q}!lL1l6o zLFIBeK}Oj~kV!TXR3TRoR4G>yWRWcdS!F9hRdN+UHrYl{wOmb*UA7bCkR1d$WhX%{ z*+o!|TtiT;TuV@$Tt`s7Tu+c&b`#VfHxSe)Hxkq&HxbkKQ!vu}UBLr=h zHxo1_j}f#*-lC$P{U&_PG4^ZEQZRmL;Wfngr6huqrDTE@Ns9=QC7GZUDTSa^DV3l! zDUBe#q$em{N+&2o${;9H$|NXD$|5LR$|fjB${{FM$|WdI$|ERW$|tBmDj=v(DkP{# zDk7*@Dki8@DkaDu83-zq$_Of#$_X+`MuJR|iJ%Ipf}l#Nk|2v@A;>CO396E+2(n2w zf~uuzg6xu=Acy22$SFAqa!D?NYNQ&1YNc9&>Lh4>B>srJUaBX^Ex8G5kQxYTlo|{)D2qJlir>l!MjT28Lo`gB&l&_t|lps zD{Hlu&}0R&hBcJin!8@DNO-~8g0NZy@j_=|n_95*B4<$>X6qs^b{4m(^%O7m7jHuJ z;B`wMIeyc>t$>s=CdabXJ{cd72eQ@Lh7Zbv*_gz>w)ofq|JE6;aPL3O7Cp^UF^$DW z9o)rAe-7_r%ol)Gx^hV4R6r}OIHaH1`TP}M9`Uc9pnY4hcdv8kp4E^N9A`6*vs}$G zzrtpGMZ?(21I0=Q4;5p^010orX@?K6V+Zm|qYi0o(*dot=a9x+2xz4#hcuQZQ)VUF zaQHyvUt@E>#!_*5?8(7+r5A@{SPD&@m1w`=1CgI#vrn)rEdhFp&3=kyp*~DlL7&o- z!(o^^036sX-nzV3Yj!l+A31Gxb&;E zx<%iv4{0dfmA*>z_RK)$pyuB>tvNktTO!YM=B-p4Hay>%zY<@O$n)3cZ_rSIvtXs> z?M42g0nNV+YYgj2nPV?&!Ms}J<@WLxt;i|wC=YAM)Mn}>CC<`{W>VoSt!&l`oXYmf zkcO-w>nN#aYO31Mf<$hsv9)QHj4f)ri4-=DKF1g-TWX!FNzqd4T8&kL$X(pEgH$lJ zhFS+Ys>o}vt6is|#@Qoz`oTD1D5siP^Zp=Nt?3p%jKJ$6qE1}Bk^*hZSvMhhQZ zI@*ja)}+d5{OdO_H~^7n8?$U<^;+aP$Semnj03=+lwK?v6rM29N(UBcJS3o%zAMtk zU&|c_+?G#+2dtR3Vh+xQp&g`^9xO^5n*QU%R}VPv0qJ?dysJ-qz%@?KilA7JKtX=VQzW;sqP`(w;{f>!p&Sk(zy*+0l^j}Zr` zKEkR$Pb>R-nEfGI*?*QfPSVQ$v&?ytR`$o4>x;xM+}oM^HinT*1D=m7YF<1eu^yQJpWdW`9;*ox3 z!SVx7oH_B$86sbuy}DA{%DN@%YH<4^_vU-8s6pg`%0NB#97Vo9WBn3sn|-By4!mVW z9$6k)i~UBtLSO|-uOC-{w+_%shaYK7D1lb``bcA(1X}6lBaPP@&`Jv*X>8yFtu*eD z#>5h6rCpEoi|@bj)}LQ{=vC+iuhp-u(9Yue;_H`bXW`58S+uk0DeI}z&SHbSp? z+i)cG`<`F?wHQio!$LFm!l3VDNHSwu0%&cLPeW#d*^HhBt;9C-4H~i-EN0w?$SvzE z0S#FVRnYBB)s;g>)hHM6#8808Wue)p;G*oSE6^6HN2ZVlND zcC*%lw0GFMHRLcj%-Y57=x}sv$Z2qz(Q}|z>2roO+r6Henh81BcAi}Q*v%bydVLhhQXS1JX^AY2Dfz2vEFrm$Ur*%X3 zhijgDw^HQE^~tL+Ul;kJ#zkwen1al}B{yk#f!ro{X(+{&(u8prDqmM>69#>er?sbb zqqjii8_4L#dqU*d&g@3aNdUEGdo`5f%xTo}@l81h73=r4?5dL;5v zd#PLd1)y|Isb50|yTOg_FY>aEvR*AuHZC>RV=)Ck2DBNwG-O(8s>du&r>LDH)ts2#Qvbwgqg?L)6y+!jad!K!ih8&Ox6W`*_ zG0mH53^i7~oJC$!ThpSUI$K>GR&LPDvDMdMDJpWe-R&lxW^Zt7p4QOT(50b9d!rle z2t2K$xmWYFR()#$@uuSTYl;74b(Rp1Df3rpKGG}q=4gRElpiu;V24YtFjArUPpl&5 zz`lXV2aE&N7@kEwXdYaKEea?eO+$994n;of8g9a${Y1Xmwz&>3c#)4S9jnK?Oypaf zTN<&Cfz<%`i}G_T`ilVn1=g!1+C1vxo#S6VyZgY@`a1d68Ik^tvB9CR(2t3@AZ*mW TMzpUn?dzcSHLQId(!Tx!)2_m> diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringbuilder.h.1575CA4BEECE6BB2.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringbuilder.h.1575CA4BEECE6BB2.idx deleted file mode 100644 index fe9ee7577730f56ffee7d808b1229ad175ffae07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20160 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringconverter_base.h.EE8D95078AE5BAF7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringconverter_base.h.EE8D95078AE5BAF7.idx deleted file mode 100644 index eb24a900cd591b783ad3e5c754f15624d6f5208f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7936 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 JW;OA$fj{q@M?nAp diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringlist.h.B508805E79550159.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringlist.h.B508805E79550159.idx deleted file mode 100644 index cfb250c2796cec364a5f087eaaa2375c975e265b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10320 zcmcIp33OA}nSQ?z23gNWc$H;KmW>xlmMqD(7GD+{Y!ggyfEWxI93#umwqh+<5)O{T z5|%>QZIU@jGZQ9rCTTfslg=d5o+d-4%?!+adir&r zgQ3k*pTm3l@4f%M|N8y^yWHP8fBpg!$2Ik~ZU_l+pOWLaZ2B)2j|Q%&=@0SGR5t1) zOWWyCxPMU~7B^br1HSl1^PMKF#nCh|gexZMT&=+mlur4aZVu485SP|Wj6f?O* zQrlP|Nt)Do++4yW6+vp41Si#ekuM$yJ0;G9{xM-4>M;Rp!kS5=-NqUggx+Avbaz$u zi*8MwoYZwF7I;{QkE|1nebGqh&+^BgI83hmU+$Q3LbUnf{sAFstO!Xz?rd=>e(z*) zW|q50+IA>|-*I2{WL;Xlt-$;~Fp8sTf$ z;q#&;Vv%OtZO}8(nAMnECIg)DV~Gr=LlfrE9k%=eYwu#54OZj0U`e70J#*YJ0}?9b zZ9qUBH8Fz-9}_W1$Z;2iCpi30d(oV*8d=bYp7~N6kB{%KW6N<$d>#TOG*}|xCNfw; z$vcL}xPw@_(~aax-N8wCrhKVr(l35mQjAnW%WWv-^4*k9a!;7SUzSfUffyKOZdTGH zbGW6Vq1x98{(vvoCd3CKy|IbLQVfJ}OWW4ReLX=zGL^{RN_zxfJQC%S+u~cClmGtw zI&r?6Y8>|k!t_|SVRv63NcS8!6bSbU8y5GC8+$Mk2#*^G`lvJ$EQ|`F$gt47eqAu& z_r-eVm1H+V&s^1fd1UWw`Yiw^!7;nyu#7~JACsI@^ z9qFO}hPjlUR5yXx?e>94NU;0X$Kpbmf`3#92JK7Zc6YV6+F|ea`@7wB_CVMlT;D6u z@g~}y*@t|={zxZE<#6Y$f7pI1=ckJ^V7^`NAb{sQ$)uvGNnTWENfG&-d#S51j6cU)$Yv^8|N2{Q@O4K$&zVpMOOeISsq&|CjWwLA zbILCWZ<#NhAIcBuiTFV7S6}+cOUAXe3#AA+1eu3u1V}GjVkT35ye?S2ND^^3WbUR) zN-tb;t7_(@H=Dn`NUbR6IFg-~U66QiD#>d4)`ka0Zsk58X|OVTWj+xf$ZcBL75>#| znV;t@sDZc0Tg#~o(?kuPyZnvNhwAEHiF-}Q8|=l@sN>-O_Qk`;X# zUmg)3IK8Lzwf;8Y=8!B4%Ja)<78LSg7F^xQcSPY(-g~@ET-7x1HR4|8g$>(iAf?w;U?>*Iy`%ZZ|#eha<}i5SGX63*IdVKc(3C>SH1k*BeLl66nSX$NVdQCJNd4|lYV$o z()%>zp9VdVUU>fXK=;)PzkBwwMlqKfcX{se^27tDANkG;nj<~)ugG*a7z|W*Y8tBh z&$X{cYRqFV%fxf#yQp~CN>RM>`Ey;REnTmu6{R$=a?)~)i3bMOlQx@e>YRd~NREwY zBPJp~@a*YVODxJ;_r9hR(^InCX6xo!oNiLTaI*ZKov%yEb!)owi1@(imoHrEHT5d~ zNs7D9?9O~5K5%-^`E5_#e68>enPP5(n<}Qy6cu~R{OZarAGN+ACDsMVy#Picy>N$9 zH!ZK;Xz6;J=c>>(x+0yIQ)xhq`}e;6^z+fDzxSRLmfJzIorb0K!X3UwVViD=lx&{zx*<8PJ{q6OmrH!?TKO?T4ogekAk1wa7~SpEpI6 z;l)o+>O6n_o8L-WoPf*|6dt4(?r`Lf&pl;&@Z%e@=q=I}(daG85To~*8wW4H_49?F z%EHrGA$0P#tCnPokP=4x@%0!*!@7Pae`dl*6b|$7mgD#FIxfkK{1wEI7_W z9R?Opo&?R4kb^YVQ)*tZjxzK1XnQP(p;%Qxm8_^#@b1T zrHY9YTWp50hlR6d8canCix#IMl&sON(PKHmvP!wdnu@%gyMA@wkAC{!HI#RTXGTj3 zx=FXby9yCQvFecr&Yk)P&r~G|*M{9#W0hpcJ2VH4OsU497Df$whv%S?m1MMWv<1zo zB)h=13%nR#JlPAmd%=j6SImimBT$Ap@!|WoKC3LL^%nA^prPQt6bg{y+TwXBz$GQF zl4kS>Ps%&X1F1SiD%Ms+QoS27Sxoh*LP4sUtJ+gt1+g{T+EXY&919#PQWb~PET~zL zN^sI%&~9RJ>T~&;(d9hx*ZSw78+jru6Z|YrL+(%unvf@v&PV`_#*_Gpcpn;#CnGCH z`p{@REzxybp$T)Ar`TA%9cCkJ@-#=CJE4&obr0zFfSDO}Kj`*@8T$vGJO;YQz>HDI zlfz&*3^p`6PmY1%7}&69=E+GgoCF&}BwCEdzSw`U*gpW;15ky>prSPF#6Aqe4o{)O zQul=uiYtl>Ib)merBIe#lx@aN3$>u@rB)2r;{rM%_F)Ko@BA`ccowcN&88uvD#*iO zp6D`lg^ViX3sWpKdH5n3rB~{wvy}#oLC+|o(kPoNRhG)Aa#gwPyb4u?jH*;s$|y^w zMJ9_i(<-CvO1o@Nr_w2-Tq>7r7q`YOlgyLpk?rEm^rk2*7SvK=H;M+tZj|~_>_V9z zFM{?W*s-oZ`*62q@wYDfsb9pN0=W@g=%!+mio@GJKJv3Yv;M7@t`5!*E=26XprBy0 z7c%xj4!Six*})<|CJWtGY+rF0W1kL7{VGmi;?W7QPsL%(|4Aw$_NPp@9iZI-R+c)u zK)Va9m^zD%j_aXMKaNr9b7tgtuqpe&)x6^C&;NczNefy{Ln|J_lTGQHN*J{{eY1?( z0_j^IMI*dYV~ZUz6KJh=tp(8*`(wID?2Fl=)!Nl2?9#AHrd37kj`4WJD#|N%#f}DVoj-i z3>uj;4uj_~G$Y!JHN|rbnlTK;n&LSL&FHKjoQhVxwz>GC2pg{89E6Px8$WsEALq^g z+X7k>EZI(ke43r!oCeHJo)jtz)z~gmFjp3-Stq2=(igC>bPc+qsV_0oP}z|Dn&3E^ z+6x<&qQiKyQoS+@fs-el>dq_{mTS~&vJn4xGN>NRLV+n|7%XR0s4P?^bB{gZX5NX+ zkF+r=ZjZZVzG@m-$b7Y_bd#A$wz+h(jM@UFTR=wdgyNl0!Th!xigv>c=C?y&JOq`@ zFK3|b3@pRG*8XU2#{a#$?{W#Po~D9Y)^O?Sb<-1xeRyg#NL9S$rC4WwlEZO)wvp2n7EbhX{nE3;`X@bG0Nli%ta94 ziI;d=u&nZ=TiHDgp`Bux(lDRdn#;#m_ z<|UPiXwo!VL^Gba+Fac-vn_G=$PBgEvECdTdbeM2g|!jSAD?EM%VrJ8pw;LG>4}S5Rs+EgcqbRM0GsUb`{y!MxZ{ zv*`D>d6kVJ!D`FuYK8<|<}MpUg0$a@N$r@)2C%abRd z>Itwj>z@bfd2ldmUj)ZRs6%VxRTFJL;j3+giQDv7!5 z3D7Wz(0HU=hZ! zq1@6%5^^JgP;T)8iE)pCb_}Y}?r2}iFI^)c|KaJ?<_E6@en(54bjOYp%E6Pt|LA}B zMlti=y>Uh@S1->&SMc=PO}QH~SQ*+4mfcXx z=zXBv2N^7g_km>})H3=YC=Wsg8dvQ790#GE(T6~J2r^h%I|S8-z{BXHpgam0ED4T6 z)lsNp^a)U&fDCjRPkmN*0%kM%9H`Gh4oix2F!LNVGx`FkFF+0ktO!vJ7hnO>=sgOu z;*}wbnJ#UYiQz|38#Ey*paW=_iPwmX{;}pEKD{a>a9a{-yNpm#28$ Qp8AHb>+5Ia=cei>mKK+!<^k<5O3lg94=m9))3eYs z&`(cJjyE&W&&*5CDNRWQiaX~QrRo;~l_gfD0FBejpo%dC5LZ!V8Yoor(xCwdG^)@y zF*_ACWEhGobCaBaf!-=wVQH3fH@KSU~bjU z%>;};4skYd5ir5P363+Mf}+&4Vs2m@$~tVR?cNs6$jHN?!Jr`kmIe|Xd*w7HeA~do z$i<<|p)3XyhS>`g23uOoFnznEnlsEcCN79AP~|)v(&EypFg-O}|NAWJ+cp8Hmz9H6 z0%oLy1xxXvR?$g72S~F^!)+4yl-jEDbM-W!YEceRDVSlLTvDnl|uFd9sJ2KQ$F32`R_i4ikbW$uEw&`7VwkJ_e)#UkkeUY~gZMrNFvSE4n#MqBAaSA#(@rTxkHC3d%c-ZZ3%1m#_cvLa9iMA@0 zpjcnSR=)Shxdy9X5C{#J0}hp-c;?K6ZPmJofK{kM=RSkahT?y7hd+Gg?5RUm!HBun+v~k3{vmSZ+T&NQA2SPPux@3o4wazz z##kcl!6&OSwu|_;9LF+rOpLWXc9=l%B6tC!=>-pL<`-$$x(tB!RYFlX7 z9G*+;z++2}?2cc$Zx*cJyv^EXR|z^N1!+J&q}QfeVAO4NyK&GA>TKg&)h?UdvGMc<&p*22V?9id-`=eG_0{-%ILV9#yn#k+DWlC|a|P}^ zqpf0V1$xI+;TDcicni)kusJ9p8+!~L;b4Sp1S6;n2O(rD`HK&kJN8aNW!lAd12!MA z37l|DLhZAcfBWdjmT$h|`(Eu1XeA0cLJb%XCIPk_u+SC(3&Q1Sg=}03&@SB=aqx}Y zPwDBq<*;%AXH>f>AO=iY(E^b`n|2C{K@&y+yB-cEN=}`@ZtWBn!zRQ)M#G_S98Xj0 z1_$o1zxoHApJI)zrcRrJ(sg9CG<|UA4ExX>qY*J;!Q2^b6Wc6^uBfvBw%gQX*YXIN zLUxSRpaL^i3r(Q`3r!0v(XUa3XHDk^S?5!G}=>Dz*tdFOfGzdoL%s;f@b zsj5?_PM!Ll>&QWQd9GYR=+6dCtFXJQUV=Ea7QVQc|5s?m41=nbnB}TUBL^%Qy}=tIBDND=({229Z0c6emy=#w|%|ry6^u%TZ}B$CmE0Jn@ztJ$SZg z=`Jcmx~itwD;+cJ&SDUT%WhPMY)MggdWy|#R3&CMJ}NBWFUbk=79w)js4{?2&Bn(p z;`f^3Du9kZf3Lqv$6wH?<=Uk2TUNq?O+s(3Dz53(_DXAo-H3}d*}EWrl-W2kf0RWf zDP4-pMwheJ4)r$Ro04AaGIsSS@Sl=KKSHf>v8=4g)*6Qm)P!q#?;NLeBsl-pL_TA) z@n1D5eg+oMyHz{4KvB>zS(LpjV;Ij}<6eA=8ZL0pcCh5hRaNE2YDZq-z zb|JseQ7Pb<@VgS0C=BD3@~G}A$v`M2qqUN`HNsuzv>RPzcAi!lnWF|au(Z}uQ^qSR zjMf@0NYQSzm0N3S>@~)!5~H$(MR*RAjAQM_T4>{_1U3$rwbCZ>a@wucoQc+6QSF*; zRM{A-s$Gr>#|+Sws>&n*CX!d>RI))8)#d!Bv>qkz4dSR)B!N|2fQi*sC+Ij>ti*1K z-B3$fPETlAk(Je|sy9j!?SrLN6G`eVS@Fupu#>CNSp05-O8YcdvD02tTkiUuHvi3e z{qEfU#r$Ma3k$-h;VN`Go&m%9=x^BV$5f!$lwJAnwD?yW=%^{Kn#y-xIkUxlmwOjk z9>ez$E&uoQ|D{oZ4X7&D(Z>v_65UqrU$>gt*{*KZRVA--r_%*;M zZ#D9+#&}yTtg6ygJ{?#}H;+~^K*}(lQs-5sB%?F}3^KLM>U!)o>@zI-ZE?DlG-^BHS-E%dOKJD#y?QSz)7`0zEr#&L05%S)@k{FhZE2_PH(zwD=R z`KYCllD!l7bV0>1m(0GEJ;Uz~VY0mx?lFD=3bw34@c(4NCfC{Ql}wOs`(m`NO0l}i zQ3)4;QgYf$;6mfP6cGx{ZY$?UEZ)PuNjA+rO?hIiE$&RoTYyDRwK|!bY>6*3nT?N- zl&`dE?dyY>8>)asPWuqvD#qbAY8bCfe81#(E&Q@usLAk zO#*Y2C~J|dp}-{o_lDCdlsL-mS;@)CWmOgSWNU4W%U%iGoc8kazB&d6-{&#vxY2?_3>i5B}&zg z*wc7sgr{rZA;yoDpq@BkeYt89`S1qhWa8>np%hXks=Y#^(DfUABCBN_l zX@J^FMc9%p5~S23XEJ}j-@@$2d1#UW5^APbOn%Z&5P~+(DS6BGm6s^Y76f*O3U{cl zk_o=PM0iRdtWBRIeQ(b=oZzjeOGt*mV*F!*r9|+N-{Yr`uen)&tH9TrCR+rypXm0J z03{QAV*{Th0_XDnym5EV>HkX`Oj8C5>=+3+Mmj1PG8$1h@6FxjtvVg8OBa|`YxS2B zB!74L)t_#}?htjfth>N|Cfc7#q>^Ei*9Q%Yp8CN>e;uvtDX>2JKAoim$?>mG+?R8s zSAdQ-5Ex;ic47x9L3&8;HRIqLT>^EqiR21wGZ8lvKPAI9^_d@jur_~skd8h9EGBCw z8>9ruSs%Ez#H{aN@TTRK5VnUH_7Jm@VUwe`&VRSJeOH4hOaq}8MHIzJiQudE7K+Az zsN%FuA63mfVbD`&FM)*xhlNTB_W$nfPCbtIeX*k-odJu?56BOd5+wg={)Qi~Y^&?k zmSzF_cHZqGq(tzQb_>`KzTY&}Y+ex-OnZPFo2j9hc2P3qaeVEU=A%i);W}CYO&Y1T zkp?IkHW@SP{9lR+dUO_rSuo7th{17EBKV44@+!K8q^&S}uZr=eBP@}uiRhY0u#zE< zAw6aro_i@I)|)1Qu+|gZdJ?2$*yLc==oI7CfH+xLg%O2uj3N&M!eN0a$(3T!ut+)dJzOz@2h1c`z?LwoO>_~DHHDSouHkHEerhObGqk|Cd& zyS{(wRl|vN9jzxI(8W}{7z8S3*v4?<)`UY7hGuYK7}+MG+XTXpGi+j9`BOC6@OEY} zt$^8P_-AyK5+qMJ@ZHYBmDPQ9^f^AtT&kT*1C2y~Q9UNdL{TyZEDj zUMl1w7uY(YTL&VSGr>2y!$fI&2fev2{KdRK70HU85|I+ecp~_=Z!2ry=xrlcPyejl z7#$rCQeQ;1i)e_F;Xnhr_S^Q=$#=*4(Xp`H(oUt3Qi5df0bXw$j?8?DOFf*`6GJ^n zUCyw{=V6(mdG%CiQf}$Y_L8{0q?eLmlZ%Dzr_EY_5$j+iIm0%Wz3x046hiHxbSdd4TX=SygdQi6*uv6x|MMFrO|bLnhO$|P zSy57guu9i#;5SKB@Jx-fNjm7dNg{7eP}8Kea1{#rd9F*)1` z@`Uaav=c(41j+O6kB>Thwrh=!c7bKyCfeIXuVmPy;@-;pTPjD-*3l=S$$YAvPdh3Z zHkrHo>%TuW);vc?3t{V2mv-MC_h!ARnQO!V0gP{#^&~;bu+4+^+x~j2bKOe5gpO?$EjQ~|>FHE(5n|iLwwDqluTAN`aL%;2)!x*^jRMh~CZS5E+R-&@N}uR+ z{*P{J*@!;;!UD`6E;K6u*sSkVLn@~hQ8=c{{Z`b zm+0=2I3>d-S!;jYd~8@EG)aJ&d`xs7gVm5TJ`=OF@5!TmeBS%|KF6&<7m$ye=Lm-Jlt>L&TZD~KqFV?0ss)g#?)UGJ>Au&FIggNrxPJ2F&CRO8zH z_SrGzM}}k+yfkLS%)L4~ z4EFI7(Ox13CF4AXNc;HO#k%AR(+2MIqYL?kxR>hpf+3JIWVCei!!LJkb-u!vV`Pm) z*9eo5Gi;K6^1Y^gf4sh*(xKUkL9Er*wo^PRVb>?m{$=TH{UO-|1V;qNF`fv%em?RA zF=yL{D-uTR`78LfFpC9LyMX#D84h9l()*iFW-fa}_UQ%&3=CyFL9%Q8SNVV0`qmMC z*@5!ELn7V*q01Sz>6MvyyYO4Dqw+L{MGT8$JW)NRf2{iZd2{y6cer~1BJHj39U>*j z;Odc=KG|^d{5yI&0m$ir>7Aqm$^SRtp>yNWLGOZ5g-vBz)=^53yyiiXJ>$?f@9Sth zEb=DN-UPEOXV~P7srT9Qi(dM`k4^#(WwB-PQi9|qX*n9~hf8&#)?XQ2d`7=?N zM?h(&hD;5U62VtXg*l_am0J=1?cY{69{pTLheLx?)cX_-QZlYplO(N*EpVO8zcc(4 z_Zm8~?L@a7yaqYLk+SP|Oq-Wk`~`n#fHdY&?L68+$*|3DB}sqZdZ_FRu6PlwffyQK zOXUok^yz!&%ZCRpe#x7JusMb~QBs0r(?6Ea=o~fZ48Le$lm@D8fKlWO+r0M5?aKZJ z#~FT`_f?el3<*7>-sYcee=c`LyS-lr(=4zS{(Ap7DM1DkE_{@ixBlwcw&1$Lu65IP z3y>0|N1kf`(u9)N&U38-`Xue7Kq*1`#Sd;&g~gBy2D+SEBR?;{Hd2Cg{cGPDu1&LF zY)dPkdk<}o04YH-d2et#`pUU$V2ogi^;BCACs@v~$-2VE{^!K+uIp%5XmX2aZ-M5? z88-Q`-Dsifn8uqr3a@y!i)eSjyH3so-OlXq_1QsEf;`@e z%Q|*Ay!|adS_>0>KocL(6c%rY?}QDuJ)fxm+qYr2^>h(GUuiLEiBf{}rez<${KM?Z zJMeOZc`l^dh18&A*rYf-W6u2?ue-st8~C&bNx(sPB+D5#Sze#q8dGpg4Be>2*M%1hiRAm zy9>mNE!M;=*2JP9!~5>9d-lMSgotdlMp&%@JVO3E@xzrpd*;vNghiz7A`*s#&lml8 z;p)9pv=ys_|5~)~VE9!H^q5Pc=aMAsQMUf=y)T9Ydja7X$vQ?X2ty$9L9~c>C|!aI z-u3CfBhI_k7zl$v4-SE#w-R*sS>x&Fue5~`?vnxc$smL&5Ef~xRlpFuMnq*tv4My# zr7{B%{EJ4>Ymx1tX?th^UaBHHK+_J;0@SydT`SUp?{;htg4jh0c9B9n zbm#u@&*bn+Xg~}yKBI1oT*mn!Py>SGC=FI4Jfjg=fHpvn_ERf?G>E>4 zY?-FrGL1hfJAyXAiz7C;R&3rzD}yv{74U207mh?xGRSHvvP)ziT#U%fT5}XSTnO#J zC^D{tn}>i7h(bnlkbp1_^xzl{u5tI(FD^}cA=;?%Vgm{W6d_FF#fA(XG7|fEv2o(K zKzx57-UCC(U=NBFQ67-D4DldAM65>{6|o+ei-hqg)rj!4fwh{=>9|&{g!8C!XwU>U zXd+PFB5TwHHEKGm<)xaSrD_>*As?-T2cgd_GDET<)$P$SLzW?1Ej^?G4{4CfvO%M7 zP`6lQ3p4=>G#>OuO;)2OTW!BsV_d9>#`4_6h~^pgO(s~^)bOcMZtsN6j-DNl8zHjU zIkWT7W#{J2GMDs6m_`JYz*0~8BY=SWM5zR0p_X~E+=AR9^r#Wkf)g$yTIzntxPm(N zt0ewal8uH6fiBo#8RbHYgYXs*WK0XS>-rB5f9(?4J;Mi7ILE&bkBZ2`eZmd+j1pNw zS;AD@R*|iw=9RP;sCpxTcoT7{J_Q zFb!9WU>XoOl7_Nsx-;eLpRX>@Ze{K}(C^v*rduSI=Ll|{{c0ogkFdWEN zhTu>dykqQi$@Wx%)OwPQDuDHH+GO}n zWh0l7QPY-5-A|mjoX7Vj!9PRYn=qfSAhdC?HzN~@)xB9o&8ujpx;GoCc_YnK_vQjk zxIi;-2)b6d(pFeiMGAuS-wKsUhynnr){sRWkf(>;vD@%Glsw?RLgKD zUit`k0zrm4@lYbh2?UOBq67xst*^d)?&U%d?Jvat7t$H;^~vVHrZw;0R@h3v5e$W^ zNQOXFnJFl=d+Ew!$6ek*v^z*3zKi(%AGV9c;r;x|E3e(&e)RB&RwE*^3ie(?R26<> zH+BEBEhuhuE3H7F6_zTataz{xUIhZjR#BK=pZhGf?*8m2S`Cb61=K@ES=FT~sH-v+ zL|uWgY#Om4Vy(bI23m0{;M~!62Wd2(>9g(M8WlZ$j1@R&d^Dj7U*YY%lgCbcT{u}U zvQJ6;rz9CSUSyw<$j?Z;TKzxR!QO56C(ixX!b@g$8b+ zo$$bjY%2}i>RH}T1NYNTs!cjf0}s#3e?woAfH__bM5PCr|{4ap+w#64A$hJo#|fjh+1~TB#iZ;~)zTildr}jD@jS zgjWz9=Z*;=;~tJlkReocMGR4fE^4Vk)3ZU-8)wRWpTtH@s%JT`Q8Pp>FV+Ms))>_C zQcdDgwLJpxptBr($9aBp=Eb+8Ucc-FsqH3~-6S6!2`})Yv-glZbgaGLuoUklWq5iJ zvDa%AoL)UF|0Es%Ny5=KfqO$^=TZ~ipy1xn*m`P05CHa-#?GTAgjZl+X>0>EArK-0 z$R9hOnh^g7kBr7Hpe6+1M0jq;E~F-WiG!eMY$G+HcMR`M8oP*^(9nqB&crUJCiHJa z_7c^;MD^-n+eWq9s2&g3i0k%`)1sf84wkE#2Uha2^48k(L@j$oa0ENm(jP#6-v2vV-PFE@CaBJ9vksEZn=iR>H#y1G>lbC4Vv5r&0t(3JZm)pP3mzP z{jw!}Xh#h^F1;U?^nD8U<5fx zqptM^iMT-$)Q-1E`t`<%;@@DBnS0>%G8mkg!JL@k-l7I&C6dkb?+FM95|mgV2Ns z7BOcpaX(t}4lnqz{CWu=VPdC=k%)NUi-;o&fdL`tl53^#lKTE{&=fRi3UL!K+yq*} zV@ubIc6 z)K&9P4-!R|rcaAPP}Ga{Y~M2wkEX~nj2S)f-sQF|^b$!zTgKI_%>&vIXCah7b+h`l zA2zqTQ1P_FUCEC(@GW(Nw_dE}L+Jt)E_l*gKAgU%!uOu^mJg}RRJiO(Z~3sg zMulsh^hY0BhvA`g)_RE zhOVYPRl#khp_^$>6qE>0&xF%7AK#+rVS{SO5lGyDX?1sJ9qX6(3Y^qA(Q~@0r)fP2 zUQfb3%Sr1=8r~y-CXmEE#C@+}AQSk@;Y(amn9snN50aAp+)DZS9XS-`?AUk!le}Rf1?#6yuX1Fk8|R#;QauM z z>j4DEBeQ6O@#Y8jQVzx9#=tXMA0BVD@x!wYuYLZ``4j)q)9ci!K~G#+kae<+FVn^7;G+Tg z58QiVSU_Su%lQk)7<8yah{^_UCmtBi4id40m=UOmKmLbxLEGn_Y^78fi3VMfBGAeJ zcr$FnunaxVg5O5iQk3sjh_K`r{E01Ng~V(hMfnX@sRSH*Stv64eysV zizCMEyYeUA`#u?dpNv60M7s-HD#xc)4yWm$({vo#8~$=P{zQ}2m-&6#@ji{mGD-oa zE#o=J2wzt~kOSAKH28dmsmpO{?7`pHJbaC79AYS$qJMqD=~las4|L$bquFYIUc%nL z<<^e6nEuO`t$O1#4<;rDxp86`MnQ+lbTR8wjSDu&2XyQlV2OT#R~^3cGDtk6=Jhp`Nijffi2RV|G)jZDFpmdJ`s zMJX6%64~hR(Xnc&EUYXBkDbUIVU8GlGhNNubmQtzE6=skTa3lSa(Nsc*M%W?P-h-~ zM=5kaOO}L|8ZWexGa4#`FH6!U1t1%dCHp74O^a3v)2lR33|)K#jD;7Q&p136g=Ti1yArK<@26r8Zs{ntbPT;(An0D~QOD1VJ?iLru}2-d8=rN1uHTIFH^C9(Axg9!q7@E;4R0p# zctjC-2Q865+CeROf6SDU-^PFXi#I^u(X-s2xIigqRsnv|18)e+oI!ZcavB{J{%Lz_W+1Z2^Ow?h1_TV3a{XF9(+* zpeWoGC<}K53J>va0dZ}21p?ph3Pieb2?FjJF2P-a?@o6GK0pL~c%T{zs37hN)Hrtq qs+dsYwAJ+D^0uMS1!1!Kla0Q6A?4M;8BJcc$t8Bdu2M?WpZ^bTq(R*P diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringview.h.483947F23EF16192.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qstringview.h.483947F23EF16192.idx deleted file mode 100644 index a74efc74adcea370473c3757a3bc4f6f2bf545a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26472 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 JKa%hp?W*eP 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qswap.h.5AB090D7B04A2E11.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qswap.h.5AB090D7B04A2E11.idx deleted file mode 100644 index 0a22550cae103f540b15a2f21862ccb9e7258fc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1028 zcmWIYbaVT|%)sEB;#rZKT9U}Zz`!63#Kk2=nOhiv3=q&zsW!9DGy)5Q)q@1VN;Mght;!hEGILU`^!4>K z@^e%56HALrQu8tri;7Zna`XdB^v(1v^bGXVlau4kO!PDJl5 zNoG!FNhL!;X;G>|a(-?B(3`p?nYpP7xtT!Abn^>s){LB=F;>z44 zCt$QiAN6kev-QG!9tIu;1~wTn8AUL`z{$eI#mmab##)s2hw1Nz)O9=z+&~4w{K6t& zf`OBnkpZG0HLZ9aFcru;Y^m+u7R|`W!=}ujEC5avK;m9qi1d>~vCKeWF@7;&m~qE5 z)OWv3KFNtDT=Sfn;jmww8k%svE+z2*Os#2^cOT?VCF~!*;8DUT&xdbaDWI1V2g>HfB)~g2j$G{ P9GncCFkuD;b_5duXf-=O diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsysinfo.h.3FC08E4B53A487DA.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsysinfo.h.3FC08E4B53A487DA.idx deleted file mode 100644 index 46fb3b77f4aa7678a265011171fcae6e3fc83127..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2110 zcmbuBe`p(J7{}jSmMqC#m*%-N%}i5b(lOK0TtnJY!eD93s@3V%RVP@cq?fntVRDz= zU9=JB{umCc;F!pCt`1!p%*nbbx_?C{f-u-$`iDP2%0N^m4#rS6#rM7BNoD@IgS>t3 z`SE?;=ef_N**7^cG3+B`yfnE~p>}Z-Aw*^$%QiJrU>kmoY4f}El2+8oSly<3%n~(8 z)395!?J{lNOikCVNqx>BxXI`Lv%M=QpP$xVpcZMYPa0;4@5roS*iY!%VvSCg$ZSn3 zmqur`#%8=)8#UDh&8DhdGbvH?J%#B4)++2OG%Nhi-YB8gOq1&N-70fhndTKmSuiS8 zDb_5T>I+2{SuQJ6wlbU<$qXp-s`||EprYw&xmKdgK5m#)S*)6dN-c{Wo$@njhMrj< z_n>FhEsc%u-b8HG(C4)IN>Mcp>z<`dN|&mJX>+A#sj1WQ+tGdVMA!Fqp?V-lHnHruFCKQ5jp{phAHTfg;sX^B zqL@Dz8Qg~XcV0agP!i@62ok#cdc9sqKU)Dx$J-fXC+n zG$U=y%u&MuAY(4S!xk1twwReSg=S=miEyA0k>&0q2X3ve#@R`d(d2e4iGVQ?4i<`F z78BuAq4~ROdTiCTKE*`B-Z1})b}r2d0(=1w{-C4i(igS zd>rsY$Qx?g2uh1-z==xGEA|4iEJ2^x2iT_s{bD~L$P#443?M2JD53&Lu>=F+0AR-w zWW_8XJrd-^9AJM~iS^0f7VPurm3N;zdwKK=)@LG`=)tpMZ5GX69*oAa%*kM2x0%_iu}ehRZHQU)`$oR@%zRFv)NTqUHSB^TMmVtp9f9Hzkee&9{>OV diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsystemdetection.h.D0C11743BDEEAFAA.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qsystemdetection.h.D0C11743BDEEAFAA.idx deleted file mode 100644 index 1bd4bcbfc08e2bb2df2dfe0e3f88e3440d43dbb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 444 zcmWIYbaUIn$iU#7;#rZKT9U}Zz`!63#Kk2=nL$7r4AL@lQmyp$^)vEwQ}q)|i%U}T zG7^i5Qgd?j155PH^eprY^wX1*fsS;?DU+srrS*l|a?GDXAr?$t9Wj zd3qTP#g(~9AXAG{(~4z*HXk_`xa8V{rJRghjLBTdA`lya1BItBa!p|b zISLFW)kGJyaGnB5++pOn!>A3DnE!rSn*p1t2T+>{C3Mco?}j zxTIjhT#Vct+;HAju{A%eF1-l^>i){e^_5W-rp$xAX^YaQkR+hQYeufuj6yI8Q{}sN z!=E`903~iPa@=6lg-PhYit`V>p5F?TxXZ|Kmr)NUAzS2SE8R738BpRTBgaif1DM48 u=R#&v_?~|UO59@PxW%XglK_TNP9lg?T$EhQ4Pr2EPFT?RVNLBB1_l7K>T50l diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtabbar.h.423B200A1E3875C8.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtabbar.h.423B200A1E3875C8.idx deleted file mode 100644 index 04b6f2fdaaf6a1df2117182b47309033dd9a67de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9888 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 Nc%g&oNg>|z`ag@DBi{f3 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtabwidget.h.F6EE9365DCB13255.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtabwidget.h.F6EE9365DCB13255.idx deleted file mode 100644 index 5cdc9c78c64affdc4eab122ce2698ac24a692086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8004 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 OTnrZnGsngBz5W}?xI5JV diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtaggedpointer.h.2F4E30F23592A691.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtaggedpointer.h.2F4E30F23592A691.idx deleted file mode 100644 index 087c459f001396fd05593000c2296215c774159e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7714 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 Cs^_r) diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtclasshelpermacros.h.BC1F21307C1E8939.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtclasshelpermacros.h.BC1F21307C1E8939.idx deleted file mode 100644 index 6e951aa00165a74383f25c4b264689e06ea8d53f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10256 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtconfiginclude.h.B88C50035F6000FF.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtconfiginclude.h.B88C50035F6000FF.idx deleted file mode 100644 index b650eb7b442ef14ba2fdf3026fd39901e50bb2c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 348 zcmWIYbaM+~WMFVk@vO*AElFfyU|fsS;?DU+srrS<`FUxX>3SIq6qr#0 zF$8Kf#bycU;cP+Xat1oC51YFe>4kbci0>h`l>(kDhPCKe7BNwD`J@;Qkhy0|F0 dSQ*4%1`!azq+1txD8AxtFB2m(128OM002+vVkZCq diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtconfigmacros.h.7614BFE7533C7B11.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtconfigmacros.h.7614BFE7533C7B11.idx deleted file mode 100644 index d63c9bd75fc03dea058794e763b9f9fbb4248ae1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 986 zcmWIYbaT7J%)sEB;#rZKT9U}Zz`!63#Kk2=nNf^D1_-2O=A>Hb>+5Ia=cei>mKK+! z=4B)n6{Y6n=m(bQo9S8T8R(}cC&!za=x637=aiz#4i&FIqOOo^R(lXPb!g?80 zFe^7PxhTJwLZebr3yM;c6H7Al^HNgNGV?M)EJ_V6OD!q}8k3xnnw*VnR%vk&JYW)w zi&KkAfUYmD%uNCXZc%DlF*6ebgRH}r+U{-9jEr1N>7413ASn=d&~-rZ*aH=Ips+KC zGh8_OsqUr6S42gC!daYIiV(F747N_c?kv7gCJ7W?$;i2qQ646-=)i*%!}rx1K#6S5 zY$cd5lW?|b`qMNmps+iayEsf(x3I4!e*Hx~pzs<-&NYm(Fo{w-Ny(N%Wk;Yy7)O{4 zOt>}ZV@2D>U(P_`D9$Lj@MCWEzdh5HikZ2X)OplJVXAqUj9rcW5Ij>IQ&Sjk-R+*& zy?d_J0!<3%2#1@bwD6;)BP&kt_6CRYhNB2!V(ZqTUD4fcf z3J-YA1jo7TEd39G!YQ07aF@(H{VPr+KJ^Jun1zEy0%mrhuYtzahM%8+!a-a?LNMX^ zHsY%;{QLMHD4fBWp$roSriGkD5U02(x!4-S0Om{>V1+Rl7(kg63Yc8&xi(~9HCfHV N$jrjZ0L!sJSpa^^^bi05 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtcore-config.h.021DBA4935D10D22.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtcore-config.h.021DBA4935D10D22.idx deleted file mode 100644 index d83e9c81734c86e2419e80006bd1d1e65849227c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1146 zcmX}rdq`7Z6aer$Tkc?UtQuzXJ)OF;U0ZXhnAs-FtkkBEl&0%8b+$*{P1&q}lIVdF zL>i(Y^e!#YUaMJIWJD2)X#J5!(Ze1qiwaD#?5w!oh0FKx<8aRT&Ude2jb6|4DN46( zjmv6s8gWa_$JgOx&H1?gdn(KpQ#wu4Rd%b1Hr6$}Wla_fy}?Oql&Q*Ox{_ha zG-}#xV=Oh>Oz1j0Yod2L8C;eyc3XwHQdxz0-PW!CoUEzB@q89V#dqve%wBq(&kN$k zL7e=5J&N)j`LcUQ!#4qP0Tje?to2k@%U&~LWEse$9A9qlF4b)ejX=(X%t($~bxLMN z&PF0jK`P_;t5C#>ZW)&l+LTWr0UEl1=vG!OuBdbB3!0~ALw>I~*WIJ*aB#}<~_cnF3eZT1E z00Pa#u4k?8gG$8&u}L6?xDA)0jJeQ%ud zOo;rP2YKYHDxOk+#Qy6Vat`E>!Ab+|V{VBnkfI Z7Nh^F94zCQZeme(Y7xl5 z;>z44P~a7%rWJPq>4WF%cjPX5!^6nM%)-GU4w3=^x!TKiPQfePfWmrQdh!rK28LTt z@}w6tJ_-a1^YQRW!h|1ltN-npu2js(!_39QB?=S1Aa`latlVQ~fvUy1#N}YZdqdy) zaq>NR2o#p!l2C>T10yaG#4avMF4hMzm?v9S91<{W+{Vnv#KHiJb)W<=VZZ<=VL$-@ Di42*9 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtdeprecationdefinitions.h.AC8F81BB6635D445.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtdeprecationdefinitions.h.AC8F81BB6635D445.idx deleted file mode 100644 index 2cc1a68467de5310f4e10ee35961bc879969cef7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmWIYbaVT}z`)>~;#rZKT9U{DWD5gvaY<2T6p#jkw9K4TD}85@4in~KA&P$Kb&5~W2?DW{6|cpa}Ip8YMEncM!WbI$J0=li|)H^1M#znPuL zkm18yxC=sXT*yp|Y&TIs5Zd6!X1AIr5#biy8t?wFe z28O`AqB@keO>ruo3o^pJGxVz&O; z08c{be+Oajx{f2p%x#t@d!w5R@Fq^X3epARxPAnNezT?+N3hCMZO3(jFmhVUQ)`MA z2_Ei-5E|n3CIWuB8zN`~M^QA2BNH`oWTs}0QfVqj88m~Vxj^Rv$Js!$dCmix$8#aj zLY^H!9XvaMI(gm+bSKZ1Kr4B!23oCg=b$}VIp4(qxEpGSP(wVF;(a%SrYwG$37|LZ z0=5f$6hqk}LK-(lmnE#)+rc-OHnK9{^tQs|y;q#jVT7%~w!-^Lgob_x2DQ6#&1K{h zmQT7VMr3`>dgh$f0*&RsmTNQ852n1-ADYk-jZ$ExS~BggKXt4-Th|Va5@03TjGLp^ z-qIQRd!n&~uqE0x@?HrE>hb%C9fOS>EH0KEh4HGT;6A#lI&SIlywXe3YA4Z6BpwT z*c3Iok}k?`^H*+%dliN|eFJSVXk@ZXbs-B(vx_~>{^pYB5H?3^%-5~j`lfz0As!8H zy|<`jbG~@#nC}minNdDO^oNN0a-4oCl$Hu8e5B_8QBGh9YLX|nhmIFagFi<(l0~YuR*pZjvNT}&0+gd! zv??e5;#of1*&!F@B49<@UO)XQ|DL>T$k%Ah12#|Vj?cs!!5*PKi_q9X*bbuR(|2sy zt3UID*Wu%+mC&lSvIs-n9+d39R=xqp7Z6sUEn4RRO#@aOd9e`;(U?C)so1GZ0ls(i6@VEKdeqgTD9ppXpCZ`)D{a5iM=zi;Pw-g9|3!$1^RJS z(9pOxfzQx50lE`fi-powS(ScuFVNUX*hZ~xd>1ykDzaH6+X&Z*-u3nNXnZkp0lx7l dhnsRDym>8ZB*U@Uxfk5`EPK(E>GbYy!au3Jq!IuC diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtenvironmentvariables.h.9AB3237984442820.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtenvironmentvariables.h.9AB3237984442820.idx deleted file mode 100644 index fca66fe5dde2d7c43540d5d78b7c6fc19f44ffb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1800 zcmbtUTWAwm82+b?ZR1WanK8{&6MKqPwA7A@h;-RnTZ}|eX#)ijl*#0z9h}UhXU?<@ zwfL~GC=1J?i_609!md(-rzZ^Gb z+a~I>PonRT<(g)RlI56R$Zrc&Lqb>qc*>v;_6}!b^XMyovLB!rklqMAGHZqrzy*;U`!S@o!HL6)C#2t z#&ac`(3L9Xafx7EqlRr2HF6S@l?q~O#vn`#Ta@jgq2)~MNg5Uf3*$U8DAF86XKhq) zE!~Ujpd8DaYlLPDpen`aHs#sK^LQo8B~BI=c4<5!P}-QckXg=&FW5;p2x3rE80S z|0F^uC-lfYDny$EkXt>4pMSmZxDWp&!a7b!$*E*DhkNf&pZ%lb#i9sZoDlDdBcIUn z4O7T`n&1E5i6eJJNN_^8+&xfLczb_GdE(il|7)sHIu%w$b0hdw5L|GS27uJ?^@SgA z91{dl+5j6mLbXbpglN#75N|!*JHB-O!H}?8inK%!XRlv)I5d*IoMs|jkuIJy@K!Pr zzl9W1zb3jwOJdZ4FbT|T(y zpDW)lW*eeXtSMHhm8H=ZS9s6QANc+1$dlMHMv|JOHP!5r+mb_k_Wa8#^JgEj_~aSv zPdtRTANlvw+jFCTvi7t?yTm2=8Zfp${t)MhFxVe@2+u9NJ9T>`y%dQ`a+6%CiFK_l z5$By2C8bS?SB5VsY2^^N_|7n0e^)|X?q;yRAtB8EAT{sk5ZzI|L#15+(r-7cG}SZ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextcursor.h.4060323F9EBA1B44.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextcursor.h.4060323F9EBA1B44.idx deleted file mode 100644 index 316c6bee80dee6ef2a7b3c0c6a972c99d0eda73d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11394 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 a!8876OQ`?2yfI_*g>fcptl7;syZ;82-_(%+ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextdocument.h.783DC05C8FCFFD61.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextdocument.h.783DC05C8FCFFD61.idx deleted file mode 100644 index 09c0991ac06baeb0b2d3a3a55e926faee6b0fe59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16548 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextedit.h.F04246AE77AB7AA4.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextedit.h.F04246AE77AB7AA4.idx deleted file mode 100644 index d2d3f3cff305b534eb78e52bd428dfae0e38763f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16310 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 B>VyCQ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextformat.h.3DCC5A5127B71974.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtextformat.h.3DCC5A5127B71974.idx deleted file mode 100644 index eed88bb7a412d61d751a605c72b665d7fbefde35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66292 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 Ml_jaDf$Goy1#~eelmGw# diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtgui-config.h.EDE12B3EBA6D364F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtgui-config.h.EDE12B3EBA6D364F.idx deleted file mode 100644 index e4b42d31574b91564e842e5c41e7ae122f2b1500..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1442 zcmX}sZA?>V6bJBI26%>rA*;|*s0hW@LR-eVLRdo(w3engthBy_Tw3}IjjB%2D%1a*wP>9!E(*k)vcaYR3CPNp%ssDX`zDcIVXZ4tL~x7?>m)8?0x|9PHs zZfmU7YKM|2s>WX1(dGzR6Df*%9^ZkW-(82F|Gk`UkE24VRJwd^4y82|2s*qjtKaYN zc$8a%O0}X~QKD?I*_zZUrQ2)sgzOIV%^|n4J=hX*%WXcd)7_$QVd}oNW+u_^a0URo zPOsNIcZ$d3aZ)&3;O73{jiTnq8(KU5DiR`>LaBh|;iU_GSGQHpyW8#_JjS7sDWK$Rw&l{A>FT7g9XSP3NOkFr zw?A2Nd)b351!*x`9j((=6=@0r$m?KTAI|mh{BLXy5(u{mA7|PM(v=o=vH?`o%-Y)le;FLt0|=QdWP% z05T7F0(lqgA|W-u z@XeChr(YuHLq4hIz7{?_x%H3p$TE*$?A)`5;J?V(EExxTCCA~Fp$sTLIphjigPSCGwMmaw;sQ1!9v@4kEuxd9pq zSiX~bDRpjxQiLLL*`O=lrW#zaM#kYybmUgWRi$ch8xYke%Qp z*?*46qP|ZT7oYYO<7oYoXm6W3X E1)h8_pa1{> diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtguiexports.h.0485051AB44B4703.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtguiexports.h.0485051AB44B4703.idx deleted file mode 100644 index 75168e7f3503e8a2599e2569993c749273e5ce98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 562 zcmWIYbaT^UVqkDi@vO*AElFfyU|K;rhZ{bdTC~A zML~X13CNt{%G@MS&=sYo6?Xw?y`LK^%LG^JF>Gy>XwH}wA z98CDcvbA^W9rnEg3QKTFD8Yn*(Uu5e7Z)WL>w_39zms+tEYCfn%FM{b%m9mXpad{k LzyLFh!N33j$48mE diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtguiglobal.h.AD776BD26C164B7A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtguiglobal.h.AD776BD26C164B7A.idx deleted file mode 100644 index e16295254be9198260cfe91fa9ff512cb9c4d950..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 424 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtmetamacros.h.2880FA8BC22BF523.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtmetamacros.h.2880FA8BC22BF523.idx deleted file mode 100644 index 4376474043f73520483528201c81c52e3134c165..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26506 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtransform.h.294620FAF417F13A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtransform.h.294620FAF417F13A.idx deleted file mode 100644 index b58cac5d1048abe581023344d11bf66e1ccb42f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15696 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreeview.h.80E03EC4BEA50965.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreeview.h.80E03EC4BEA50965.idx deleted file mode 100644 index 7f6072d29795b564f58926f4a75fc72722c446c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11028 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreewidget.h.4EA5F2D3F587C36B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreewidget.h.4EA5F2D3F587C36B.idx deleted file mode 100644 index a7948eb9bc41e3a23eb1c73ab5610c02d5739110..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19340 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 bzFbhh>&=t%7SwH-mfj*&*FvjG)n5M(P0YFu diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreewidgetitemiterator.h.266475725033105A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtreewidgetitemiterator.h.266475725033105A.idx deleted file mode 100644 index 98578a6a8a999732590731f30511483c325bad15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4960 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 Px(fsS;?DU+srrQ_$@zI{nd!NS$wm3a zdKnCq7*&*7oL^d$oC-9Cp|~ zIVai=PX`LKaIlELgfn%xXSaD(o(BpGa0p1jgn_2zB!W1_MajirGnfobXLX&ueP<^l KBLgs$U;qGR_EJ&+ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qttranslation.h.4BDC706964090D6F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qttranslation.h.4BDC706964090D6F.idx deleted file mode 100644 index ec39dbd429e379c8b5d43d0de1d23ce9e442dbf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1020 zcmbu7-%Aux6vyxAy51FCY**LT-L>nsqE_y>B^pbXw6UN;W$Rl(j5Bw32It4_otae1 zKOlM#66r1ai4u_!QBY4ozE+ey6oHk31VJy_V{}$`7JBx=T+aR6@A-AloFC3+H>(lK zNW)V)wFM7CCMrm~=uB6hUX;?N96@ifhsx;G$y8b7Jh-%oxAcLeQ)s0S3 zSv9Bxj1)zaQK3-KR8g>1(@2ViLfx1`$vCxb%7`K8loZFvZnR% zb{O%#pY!6};%Y}d@@ut$Fw(Vnfenu0OxParL+pbvBmO z$k(^L(CS(CaCJC=6HP7-dk;olMLuG{K^$yx@t(mE-$w337;qDA3cGmZ!Ql4R8Pl07>-3<^_O)ca*z8l3SGugyuroa)4_qaX2Tq)TX4%h7pKlH{oS~c zxdm!J@>dGHmi@DKrv3C1s6#l^>Z+$^Hm|-pnSEO2!;Rj?N^HpFk2kwb#Zl6KQOdmo z-wxana(&OOefoW3^~pNmD2_&44Aaqs(!pY)wZCN4mbRURS6<)V8d!WeQRS^gUY8>D E57V{>S^xk5 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qttypetraits.h.313748CE23FB6E36.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qttypetraits.h.313748CE23FB6E36.idx deleted file mode 100644 index 7ba7e131e95701bcdd1a991fec13c7f8665372bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10614 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 X#X$_FJ`3NNnew_z7#SIWAqxWl;kkwe diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgets-config.h.76997689C7F8F505.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgets-config.h.76997689C7F8F505.idx deleted file mode 100644 index cf9339d1c612ae1ee5679110d0c1f2dd1e4f56cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1834 zcmYM#3rtgI6ae6RmB-J5^iC~=8#c9BpxlMc!A=6DJuybebp-I!5@0^_T|L4E=RuLB) zE3{>p=)Ab?MQT&F6~izt_$@XWbt(A!|3{-MR7Z%#Vy&S_EzT|}HmUX6Y@<z%U7F<#oJ6}udjl04SJ0(KSYbw%ZqZj%0{)O zxXy-Q-dL_M^vQpAG$nQ$IV1-R?1Y_5cz*fEq0qRxCXPM8!-Ho@ z%Q4^6wM!k5Wgzq6xqa^u#kS?)&d3oE;l*=BYL1|@_eWRcc`%QPoccS9`R7Q28}cUD zw3N?2S@z81@u-PoAqc66NtrOPWpJ2dJ?Mpe_9QI3;Qjdxj-w#To#%$`n>VMOoP3dY zv9OD!>ME7O&eRy`hk;Z`CAKuB9h`6q79snCKW#tjq2HK$qD=^LBMXglW!fY;=Bm*s zF$Nf5Xo@p$>F-=VSt~(a4XZu*)qv9Do4D-qP-Itd_2#)b&1s)mb~pmr9o#9qMT z{Vde-i+@T2aw(Kj%f9QeBbR2K<;eD6PuU$~DK264<|O2L7V255zG}o)_wR*i1qPI$ zq%zSr4r()>p4^D+25xSA)AZ!f@hyI*Hz8L-C2c?bMyIa-@stkP3aqHeJzG1^yy zkQc!sI-er%;ONP+%?FW_Ac-cZ9&B;6)>=0q2SOm-hlxQeLOq4+zC^YG8`@<_*m<+n z7hPW?Z-uSIL+`vDnW*#aMP3i5zS=ds&fUFZPo+Gbu84e)U^6oli`Jh8N|RkSVv7uM+L*`+!2mfzzWKq zZ+%NJ)i1e%yav_~ul>QImlgzGMV5esc*hb|z?eurj9kM)&D;&w|K@#5NsaUx28>{& zrZS^r-=Pl=a2y6vppeQ}4_0iNLWG!fExPDQBxPJSs zPmmi}XkcmO$!CM_g;rWW#XtpA5Vs$08L?6Jal8-~`tV1$IqgKeySa57IR;{AiK$1Q z=j8htCXfXnpd~u=-Q99#!4St@;6>+uJVSQz&(7*eWM^=uyL=)uI`aE7voDZCAcTsX zx_Ya(YO(h##IMvboI_8*_^txC{28XUYDh)t0Xq=0CBVczpl> diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgetsexports.h.C0C51FB128E2B6BC.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgetsexports.h.C0C51FB128E2B6BC.idx deleted file mode 100644 index 51e5e6e96443a250ca9f8024328e2627d6500e64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmWIYbaOLeVqkDi@vO*AElFfyU|#u>2EP=u-94t~W;lI2a1QIJu(tyHxTzX0{;m6$Se|x4Y6*Ka% zaPe@7!i0q%XUcoqNzMVP=Hua$fe8bnFA>BpE=n%e2QipI1O&h$9>@cx4H#fK-g4u5 NK*jNs%#2LT3;+ifn-l;5 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgetsglobal.h.4E511DFA22F19871.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtwidgetsglobal.h.4E511DFA22F19871.idx deleted file mode 100644 index 19ae9de59396dbfaed544cc025ca5af0de13fed9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 452 zcmWIYbaUIo$iU#7;#rZKT9U}Zz`!63#Kk2=nbtsYFi6YHNww0~*U!k$P1R2KB%zmu9BtNO=w&dF zWlVTxN_uKZG0>=T2un9PKQApaooeQ#RutqHl@wFWJh*omiYs%IK;c)EnpP|hq>Y5b zbH5zq(_-XeVc}qr1P3idJ|_`G7Z)WL>w_3fAOZqdE{ZOF=KOKmQf5XbW(HV<0Ogor HDi|05VKjqS diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtypeinfo.h.86CE2E83DA835A19.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtypeinfo.h.86CE2E83DA835A19.idx deleted file mode 100644 index 05967de43f735638c8ecc06fc6eeeb871c97f866..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25692 zcmbt-2V4|a*Y^&hA~9m3Xe^kuAfkX^0YpUUf*?{YsIcq~u&@Pp7Z4RIirrX3?1}~1 zU5pxgk7$fNu||moTVjnGqsE@^oI6}#*}LzT@BR4YnVG%wpVRNT=ia&F6B8B^5+@Uh z0%c)imAp=3EfR^E!T+>6jr>Y;xWGSKG5n2`DkNI1I65vbiw{$!sv~(#8m|#<$yG|V zEL*{gqjiC54Nn_&yhbHa*a|;WG;%(*?&D%5QqhWa>F_M2EKXHO(zIfAsyNQWMI6_| z&CN|LQOU$v8eYq*bOfy=L?v3Wq~MPKp~oBsgqvNR&8Nu1hB*z`WTCom`bBIKWNp zuM+bTtsL|~8VVlVpQ@3h$-!!pEYMIQO&80-9cn^4TU*PALUe#;>2d(c)WpYNeo3}Y ztppRGKzVNBSap>Rz!-w-&^d%0DwV2MfLoHgRJlryM*Ls-$^)Z04rogyI%&Eq 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 V>c@H;U~0XI6TyGge;aD9{|_#th6(@x diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtypes.h.B4AF9D175BBD084B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qtypes.h.B4AF9D175BBD084B.idx deleted file mode 100644 index fcc4a0709f2199c3ea1bb8f572da5884a608c13a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6612 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qvalidator.h.366510219A10A0E6.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qvalidator.h.366510219A10A0E6.idx deleted file mode 100644 index 09529267986cf2635f9b0f1864e382ac779c254c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8662 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 rI4<28g0)B_mGeJSWLvvOY>A9fbdZd8g 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

h$4O>yvC@;!7|zXXV7Ra*B39h&~_$+MB+2 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qwidget.h.6759F82B1EB68CFF.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qwidget.h.6759F82B1EB68CFF.idx deleted file mode 100644 index 97359ffec479ea59f691d219bf7fac1d28c200f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41936 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 z≧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 SHfYhTUj0Uv+Cr$Yc>I6T1NDLc diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qwindowdefs.h.2B54FE6A0C80381B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qwindowdefs.h.2B54FE6A0C80381B.idx deleted file mode 100644 index efe78880dac747ae4675993407f4a3bfb04cb0c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2308 zcmbtWe{2&~9DhB#*KX~$cDu6Q8yg$@g}rT(WuQwLS1OYqTVXf^g5KKOcC+iX*P8=% zhSWp?gt3587Bg5xhGP(Q5+NZ3As8GWMleAa1(kprSZ0hdNDTPB>%A-fXWUEr`tI{S z{e0hjzn}NrRyBG&f143v{f(Qtd6_dJgwo*?ktLyxf`u}?4WUp#@Nu#r29cKy2%$ES zll;i*7Px@efxIikmjoVpn>isU^Aaq0;57?Axkm!HMd;RM*lHF09lX3;h{$BUf(wO| zAH{Z7^Xf*>FZL>s@~x6v8~vzV2=EIThUpZ$d4}tW$b7JqlO#S6V7xL@>#TEDF&#eN z^R@FCA?OSA_<6utQR11fPYlX%I$mn;^*cLfq7>x1`ACTK@iUVV+q!t4?C0Af|5xYf z9)StV9X&!vKy2dzGm`056aAk~(;|w2h>}-{=VVc0B2WTIuiar zdHuWkPLHg%APW%Ke6~`Z;)Kq-?|wbxcRgpK638KQa862`uz;{%-k}b<43}Brgvm(j$LYU@ADF0E{XnJ^m+B$X5|9Me zuZ8$|i;nf}_+-6-veMP4+NQ}NEA2rZ{VDs~jUSZ`UdM(+Is<3Gp<;u024K}I8cdvG zNQyZ`gUyEyYB(RYmH~OWU@tb-}AT&CX>&&xjfSrxA z;S$8gso{g0Q2Lw6hL9RRC6L!;jq@B6-c-G%$0?KZouM3XcUV5<#8 uW5XYPPFY4IU*t(;VOOTu&~E`Wozs)4PvFXjCynV2yAA1ukNuOQ@&5r1OD0qR diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qxptype_traits.h.80D623DA52D2059B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qxptype_traits.h.80D623DA52D2059B.idx deleted file mode 100644 index 452e3dd24f93ec0fa66569a62ef19a3dbc61ccc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3256 zcmbtWdu$YC5dXTgg?sd%UHXC^-9DfXuD7MMwKl z+KTvys6jz|1Pl=k28=|F3MgWXQKO=f7$wFi2_YC0(fCSGAPA!K?cJPLO7M?fa+CXJ z=9~G=%x`wDx2vP$bvq&Lp{~&(YDk%c5FWm|p~>%N!4LNFR&HA0G3Zb%DjC%4cDq}J zU{um|!57=?5-K+}c#N?aRiq&*EYZUH=GNp5R4$ctdadI!s>vfXG{Lt+Q-`kg^{W%y z{MY*2qRJstx9~7Tch@kp_kZ zhIl3fg@z@TKM`ya(Z{20g%9!ilSxLPi%_#K=4FFqlZN!Zn9H0iI}-2pdEgSpQGofS zPe09^>NGn1zi+w+<40OFznX4@GBB#Z2m#0IvNp|))!9ngBQ$u2U_>NCU zR7i{lMkpAn;8$y1f*e*bm;2?YY>c_B{)nvOt&plvA+DQVLOW=6L#Wm% z6*kh*nC52ZKC!XJO_G!#K~FzPkVVzVfE=YBQ4}NU5EZ4kZcrs6X&Q}2#npz`>~3+_ zi{W4}(A+4>N-!D^QP8)m8Wo2d>RI^#Lz84fcSj}@DyR;{0Em`=1-zSFI0HI4Acu#f zpr%d|*=THhk!hkATt@|Q6qu(T4@QU@qnc!>+F}A5&AuK_LZ){6 znj;Q%f*%^pHK~h98azA=s@2uk)w=|?g)SjM(s8y1wt^T7QNfutgp5ehILw~hg9dnt zj}7(rafB3nUw`W-$^(uZF298EEd?zVrXZH78H6}8_^hd0-|Fso-YCrGraK8=W2@m! zK`b`*LI8(7eQht1c&(`+X zxB`IJW$mgl1+iGCz`F|^emT5m_^D%^zCx}7;FV{VXPE-?FT4Ct^Pw|^yKGz`Bv7)I zB2y5H1)9U|H{5?NyyfEWuNH8{aK9q6!fpz@KXuRfl<=ZM%r^y^zdYJ~ zcXW<&+{TrGx!zHqX9_gu_Qfu&{HywNxIKsPwT{|+Q=oa*s)ugp*XNzc;festW~+#+&|l@F3FbB zb8Iw(_t|_-QxMCvWbLkaUGL7&*dKr%;LUf;&oc#v-@AL&(uWsLyK3WR0=%Z|rd(4b zxWjr!G&-PLfhT)s&b)Z2IxmB>^NLsL#HPc^uLSVqY!*;bRFh|k} z@*;2~IY40yM=19$aIapt=)08wh2~QyLP5qunT+n3E~Dtm2XC&}ej9lAkRAtm=e>7m zk9x_gf!bZ-E=TpLlY2fcfBQ#`%jA7?eIimNlON0(EWp<6Y^t8JZ@+U3jJ4KTTZL@4 zkGpc=+ta0|pI!4HfX|wim1-DHowJ$?_g}+?>xOSe;xF*McJ=I&?au+Y5>k?f;3AIh zw!=%>UIg`WvV1zKv6YaC?I{+HD++41pSUx)nxJNTiE1nYaIt+vn!!MNn>OG;5FgxS zTZ!OTd~;yEb6eyD;98rzb`Ij&y>-s|gFn6e6{x%U?pZiZ%m_i)=HgWEyz=Y8@Y8e8 zLQ_SjI1ka=$8~uyvJ6Gxi^M98j8rkL!-*@9pp$f_riKm3w3@4qh1>a-c`Xa@U1I0^^7{nDWakHp2P*Lde^w+$ tGUQk4{g6^%4Z0T8MRtwf@z@#17fW{kFeNW{21z{^2+75ugrulJ$iJg8ve*Cs diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qyieldcpu.h.9FE4C39152C07856.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qyieldcpu.h.9FE4C39152C07856.idx deleted file mode 100644 index 88182556b4450926b29277d770bfe34aae8538e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 654 zcmWIYbaQKCVqkDi@vO*AElFfyU|fsS;?DU+srrS<`MCu^ z-9;&>C8^0JnfZBo8I%}TP?VpXT3nn@E%Qo}^YhX&({mG(i}H&pb6RC)YEDXWK`GFb z!blL?xuBGxEI%^^7^aoENs7SWT%~#Y@J2fxb{+aiiW;u!7PH1OU@QB8XL7lw7P2Vt|qp6fnaWKtIp<>9W0KpWRAk LW)@ZkR)hoq`fsJV diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/range_access.h.6E96073B5F63565E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/range_access.h.6E96073B5F63565E.idx deleted file mode 100644 index 4085c43dbff24711df93534b97d1c156d46fdfe5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7654 zcmd5=3s6+o89wKF6_&kVf+7L|j(`YgS-=+{VhFh?d5Ah#wT>Z|-HR;jE_8Q6X_~Y? zt1*wN)$uh&qn#1ci4Q;>BWS0|pnYgjQaiq46Q8L@r?IK2n(2S;*|WQ_tANo=cI2M@ z&-u^){O$Jjxg7eV`<(mrUTUDnbB7_FOpTlW4$A-Wc`UxWB*;2b%EhA)_>a4Nb zh(hdYt!j6u#OzeiwnI^Lq9Q z1U5hA0c_}0A-rMWRUN9zG>|-6f#|JX-@^1*fbdw%_%2X*fB`)y%umw)o~i$y{C;$l zQ8!GAQ(>J?wF8KtFFuaIJy7y@h>2gB(8zhC^}ONQRyQs90n)rm2l3xO3Oyah&EcXTY^Kb=w!ba?J^y9 z{95ha_ZaNn>Z}&FA7Cb&bY;zk4f10zx?lo{0sVN*?{3*W9Cm}* zX0+6pRD*G7#&ht`ke+TRH9H*!yJDNGmMBJ}>Tsl%_vnhlX({25=>AGq=yj)pX0XI* zSHL*r%CVMW*UvV$W_Z&`N-px*hWG&V*dYx*qK^_M{4RvJBaT@3omgirt%e_sVYgS1 zQ){mUNGP=k$+N^+I_-gULn1UC@Y4y~>Y7sHBs3bB&SLQ_*1Hy@i;wD;N12w! z?wI|_|8~bqC?A;K6~uQ1oohk5gl7gB(t+vb`OhY;JGL{MF)bCurNG1%Dk&_RN*cZD zwEXuODOdm)`1_x(ShJfuM$M)^II7vc%yBXK1Z;41meRMn$$oosUO|BVBPuOur(6O0ClxuZIJfRT%SOt zn5OLKWEj5jFWhY4&Dg zJ+o&m7T1D3Y@zD<;!0PUJbvxyX@+&11x~eg4hfJWDC;8 zMLw;iBJkE6v%Y@khs>+ZSlkR=v4u+NGoGqDyu8qgV;BBG!wxgJBBml9>4wFQ(4@o^ zo|%^uxC9vJyR`$0J3tCssL_HZWqMqG?3??@Ip$S?SP&r72UVljy!s+<>y0n|v--T3 zn#zRAWKUeujmvA7lqFqb9&HiCE#MJbsFbHPNEB`qKmPrnPTU9(rW9$mBDp-a9HN_& z1SB5bH?wg_^c>T#?s|pa5@Q)cy+N8ccD2lLDF~s4%&C8izj^>+QC=@ZtQVps@KXiULr>19-w6E7}kU}ImU7sGy%tT0% z$LYs;QLl?i3Myzl2rdzPS#hY%!`ZjO6 z9qZe@=`&b=#+$x`^_M&}ugCyPR*rd$0&Wh9nYd~CQ-UO)#D@jiKe zW#P?=xP^roSdx=bGT~|Br5yyZg3bl)3m<$sbJ^Du1W`5(Fb(8&P?Vc-N;4kLi#f0Q z03TZI`R$&=hYNz(u$JHvaTbp~i^uaANb)%xdJYffH18B(IqMJnBJU1h6733nyXPkH z?g5fn&)_0>$AAOYC-^~f-Gqdp4apS{++iWZhVbCd3~st?%xt&$B*PueAg!BlF%o!^ zy#SBru1WGj9KH}odgw(sbP*2Ybk_bmF~2)Ez9vwT8!>6bX*`$`WGT2AM|Z7 zyY9<}aPT17MOJ~16TV|UB66(244Ip9tJ!dN%uq9k~!9)>Vp z;lKvkX!$i>IboaiRer#u35r-R3 zchGt1=(n>PK8rl;;;&oM@rsRM+ZVS( zDe0+o|BlbRpRzLXA0X=}HXOwnycC@8_{R9>tH;iW5|jk}5gf%2BxumO6F7nwHVIzw zpmjndH$s9DK-Vfn@XpTXKmZh-|2*FJ4#|94ggnqG(Icj(o{IUUQ=3-a`y9d<6By&p z@3{|WkDa}}>0&ocoX?_gn@ynH06u^A)oF7l-`M@oqJRi)bzkdJ7ceHFMj=2Fq}IAr#HH@yE~0g1 zRW?Db`vzK3Yt<^YqE;=|s;DSdQNNSC3@;|rO(BThvH{;F%QX^`AP773U#(FoEaRmu#7Os*D5Q<75^ zN%CNgB3Uj{Ni>QSr6frtQ7JT2kr;(k%taS{HC2I-NfNbMq>(45CP_31D^FF))pDgq zEs`i_iV_t{h4xo0L7ARBMXnNMAUPrl5`lO*Dojx!v`i$ED^rpcN*&)SNHQf!E}Am) zbCskiO0`C!ttBN9iP6kVm5UTgO|sNhNdUaj-h_jDzB6vJC6*V9VGIa6&6YV5~c+iUKG@N zo1#8)B`VbEhbVnbXpqhxl*q6cLZZ>65YosggcLQ4f{@9j677ffo032`P9(~c5h4+_ zcVtLNNV-}TqEJec(q-}xsdrc}^e-edG(?K5ffQka>C|BYX?0D|s3Z!Fn)pWXjf9vg zmm&?OE0R)(WI5uK6;c)Ysz^#w5K4(Mg+O*EQjz}>sS0TdK~!yeMmt|RSfDZz#fxI=)MNbH84)h@i1d`raSi3y$ za2p;7LZICwcQ@&%Ct6UD4wSPn_sq8LSFCuz4T0(aw+?jB6D`P12io3y><#{q2pb;3 zMW7N=T!M6>2(6Rk`eC`pxMW)%5rRMmNbvy#q6iHd*pe7%oe}3@5BOq2m<>ePpp%{u zR=T?*HdK{9EL%I=(*}r;oL$g)7xdK=twsc4h3@TaP($xC%l3M4fGYwm0lXzZs3(Lq z2`qGKKXR@*{rc=3FCOqmpyPmh960KUR+7ICbVF)Ep0k3!91ws&4*>50aMlwoC_o3Q zv2)t^{`3of9?>3w%1Ch;x;Ki@_vSm6cSCt%Wq%&g27&TOaUKFuga#e+s`Qw1WXxAK zzzczjp>r|x*Ax2gnumrw>*yYKc2_&QIeJJOtWLiuWU(C_?L0QG0v)zk*4#d4x3r?IXqe$S!(9gHDv?JJwcQ zn8PD%5U7e2SCOH5LW34f+7s$^b@&fF&=G-_k=$jZot|iQ>Zmj3rTjxov9w@%WP3fa9S%OWdzL}%oe>w(*P;Hf9rFFWt( zeEZg@bB8&=1IgJ4c^jdlo@nKG=;RE&rmXb~UQlfhoRFMVK(q?^H$||Vmf+bEyA@q( zc!Ud*Q$UIfP?J!ERys1aeDvi_=`}XM4}tQaa~|~36K!Qw5Zu0%-?cqA`Ys2!BhVed zyMtnvB3h8UPNV77z54ENvHy!lv_qf@Qe1(mqX=Eyy7;T}Ud3&HYy&zW(0=H=ABN}& zU7c*cTDHS!X(NwtM4&=aT!A~fh@#69AYem9OFwqE>RS^mI^0Hp97 z=y(pef4lVVv%p-(Oj7s;Sib>0%tziyo49MG7eSK3>#*Z>XaKwk9dANs3?zjwVaJz- z<*%XRYq}iw(-vHP?~E_Z?>6E}r-s8sTT)nS;a+RufeW;Jc&$YQ%{N-OHCl*h{*{IM zD?|J%i||*5_LzN+a8Mg&OE!Rn`p3+7|h4FW1Bz zBZp@fl{}X4SnK%mx%a7G7AEsq3;H=O-0se-XY2*xFnHIl=|Skm$_xc|UZ8*~3< z6kXl7Ja7ExO@uA${;N|=(URM3M`;DIdj{blH)=y_ppDz`)|d9%JBC}gV+`YAU2o?* zjL_Jb8{4R{;XexPLThPdYJsMZ!ud-X^!a7{;M;&Sh{C2o7 zHpTgzd3$>cmUd(vS3f-YsN}Zq;Ko|euTi3vmVtI2jH=^#G0D}>hVcZKk7glG>wznt zpjZpHf`F|cm@Y2^L1iEWM?RiCqb`A(I^%*_M^yp)cmTO$RCGR#|`Z{*Y#%n6?ZVNPNllf=6aw^7I1(_{oWU(P2I>ftJ5yUzi zR>#_>xWCR1W(;BZysPh5y4r@Ao5H9mHfQuJy5H2VGwbf5Yo&V1z3G-=j74Kp{LQPWk-4f#vtqUvHcjFDk> zZ&_oLQdr-Wb@y`n`uFGOHs^=44vr6B4N|^|KgeFtO^>L#ue;sU3SyU~X)4TJxS?Ws zgh{yZvemO|oysCu-*b8Rh=^BDp0XD-wWOhWt~wyfMAgFkllG2p_bv*JdEBhrI^dpU zc&~!hbI1=-j6Km$N1KNBartN}_~_Tu%AI#EieYVok+FY1kLxV#X%11N5RKjOvPajf z#j&jYc#Bn!zht{};>;E{vhbYT%vmoNR`xQ9no%|Dls)EM?ade-V6J8S?FhF%tlMby z7t-^Jg-`pk4yX88Za36t-?JCQb$RhD_QSb;tTj?Eusj>{qU1}n`x&_(&NiUFnObdv z=cA8Y29KQ8^ICti#f&T#xO&>6JG)m8U>$D1cyFKho3wN=Yv(TC-fp9Cg;f$U7t*~xKLjU#}!P+_SnlTjM)PgY_ z;9D*G1i7`(_{!wLGib!TZ;o%qO)zPrgiKlUjKHS}j1oFmTWp9s7%5={LfPt`!m6cG*0CS$F(;)sF*MOc=V58t zgZhsfpU9}n1J$BDpUd}{fjDi8e4AS5h<*E0zkiNwzQCDg_Bl&|xQP)Hqv^6q5t9tK_=tD| zE+HbpfXlS#k!jJ3zH&A2S`GZ^*E(x~>ssJJzt(vOzIX_ta1Ng@Yy^Id^g=Yg@HOy! z4O$nT@zI(+?>8WTmfsA#n+^H5z~e1wU5Lg0b@PK*K9pVQxf8^Rf4z^OTE1Fjx$>VX4Z7|Rzv1e}M!f$o2v1I}}Lp)4OQg5-QM z_SlzibP$k_xP@CtCga2w=ogARC&x+Htp^*PnmYSzzPhupU_`t&B#P1;K2 zb9!6V@EPf>+iHeVcKmKhc7{1jjKZYP-e8}SGiftfTlkBNAEVoZxO~rAkaFw8K2Foe zuor|^3!wO<_IBX-#INm90kxk47kDJxQOoO_=CF2XydMPBKy3!WHQ*HvsDRq}feWrb z`z~YYguG0~KErcEn?&xiYniNd9Q?3En)9H35o3*6mpeK3o%_XNbL<$!j_(3-cyM{2 z#jIUEVr=QrkxS1kF8Gcbenk{H#LFaG&zH)nh;WCp) zYsCq_0jZl8EH_)s$YRQu)i1A&{&fYT&sjbWJvKWkd?h1rh0kL3?);6b%%(On^}6S? zkG#3uxXQ#iZN0-@+o^Z2Vf~O>lW|bei(jJ^#BT3ZXy0)`Z3jALGdA{c$G?OAsBg(; zt@`rq7Z=9vgzHRz)5q0uQjoq@ez+Xiz_k_FGst&~G!Q&noVAB*&zN8qM&Ny9?3Uai%Sj6NrC$ zwQtZc1CQnwyomafn`@3|qj)BBPLBE1#U|IJ4c4sqI6$OczYXQ?4wJ-T5^b-i{_+R- z9WTEBdOPdp@0lIwMPv$l;YLkDDxLHc#|NV)zg)R1t>HOn>8M{mx*H_>i`@wzj zUd8}(vwwGGx~gcei3FTbK#QEI9q)Knq|H!rN}v4R40@hvo>e8Nl4=eHt8C$va+yONA)g3y3RpAS>p?fy;H%u?NZGwJ= z=_U7V&>wpPA8q{i&x2j?nE=}Kw9P?Cr@Q=md7ZCZQ_QGQ0e-Ace=E?J+2z`Qy;`xFLTM zwm%8&>GCJg@rmK_H0wy)b!6-HUH@zN@Cf!g&DweHtolxBWBvLZYe9Hn2HIUtokfNF zBJBp<_UnNI?yRiQ2Hk+ohP%s4K~O2ZyBu#^MV%UTVimRt9-E>9>aZ$YzzeFlIA>by zdB*-ym^@lIJ7)QL69>N-Jw8@kA9cZ`AjEPir(x)>U(B9wUaR=>7-mjvTLOfn5DL zf4G~~E^%>x2mO4QMk*p>J~--enAW&fBhW@NDs z=_gzAG&N7mhA}eCq2wG5SaIelW0zYS_wV`(-}ygdJ@KlYF3M;#GWNN-DU6z8qMgmW zGQXwI8Jhy1ZiB*~IxQB5KRy-*6;LO{;sSiW3@V^bg~bI2Ci}PCxODZE$;{1e+@U!$(mVLUAIDnoVB9ErE1r)Ev!3*zgw>4|FQ8NdqMbQC*u~2b?f#{Q-|N3AIY9?xcN1EtFk9F(Q0#WC&<0 PAOzG)Ywc%S`s@Dy@xk#R diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/refwrap.h.4EE4CF02590E49B9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/refwrap.h.4EE4CF02590E49B9.idx deleted file mode 100644 index 9a609201f452bc9c8f52df7a00bf6d7174caa8e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3544 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sched.h.A585A48500495348.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sched.h.A585A48500495348.idx deleted file mode 100644 index 7fad1e6b9686824fbcdf8be09c6ca9eef18146ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2042 zcmb7_d2AF_9LHa2%kE=`YkPn_=#*BwUADW_meMX)OWQ3al(P$q4K34|+1-)d+0D!> zv>c*PFNk7{m{cIa1Br=fVrvuo2Ng7!28z_6i4rj)0W>tCUUFUXl}}g0J@0+_H&X7Z{XI1TD6f=?LQ##tEoF9H> zJ@jX?159$PId-CMJpKA#X_@&>z;(EedN&MaUOcwqk_T`VuF4_mzV#P=?z8_mA8;Pd zqwSEXLrP=Xro6*;{oqdK#dY0adAZCZHaTzC7E>p{H~ zFC_;6-Rs^sG!)&hV;6SOl>6@nQ*-x?Y)EG8vn;cy31cs^6#XMwWm!d|GoHK>`Q~{Z zoT_nkHtDI#6Y3w{em4%d6qnKjcT}Zo!zW8r!1M4tIv8*Aa!WzihdQ2v=g{pxn!A}v z>3(7t;01U=F7ZB|^@MZThpoc?Wz4w^?m-?VZaTz zfnxs)yL;ALzH$_B87`yv)Ij0-$@31r3z)?$-B97u=(XCdy*kdv`TAdnarF%LZ@H0H zegbeIE~FcpfAwlh-=@PK04~8Lbc@ctaXxI77WD%5VINHycqzL5cW%$efZfOth!^`MQPS$OHXCUY4Gk|B~+2nmhM!B<~PW$bGU);djV#Mu4$e#dwe z$O}9&9<`LUc*mnwXKN{m(%!5*(EHe}5y(=H>*;j9o77hIe0KV6z{R+jo-fzi1?}IK m*!}>#2rr^FDPn}v4ON9#4M=-~-@k%AC(pmU$J?8fhW-W*MBhXJ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sched.h.E8530EF262253892.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sched.h.E8530EF262253892.idx deleted file mode 100644 index 25a38ed32a802278598858841db638531635aa92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3548 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/setjmp.h.71DEFB3DCC800794.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/setjmp.h.71DEFB3DCC800794.idx deleted file mode 100644 index 3dd0b37e6f3d311ef425afcabee396677b728b80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmWIYbaP{2WMFVk@vO*AElFfyU|N125Ff&saE>>`lZE1`k8sjIi)G7 z`V|&t@n$BvIhlE-6}stprTR&kCB^#1sU=yt1$r3_#A_+fFG?xStV#uHVkoZ6O#<0i zl$uuT3Zxggp6TwaI;FzM#VE`nECzNAkg%BiInZ86D20)SQB+w}7bYyXs@iDp|I1&2 o!m_Ng{4imlX*r1?PH|Cku{emqXl<(V-_wLMjFE|f2_ygk0C-11xc~qF diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr.h.98999B52051858AA.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr.h.98999B52051858AA.idx deleted file mode 100644 index a50040aebce612348f480ac37d530fdc583fe90e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18272 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_atomic.h.9687B284C9814D78.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_atomic.h.9687B284C9814D78.idx deleted file mode 100644 index b2727d058509ea4fd07b671cbf8c8aea0883f434..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8840 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 CGC9@& diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_base.h.232999EA0B0B9FC0.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/shared_ptr_base.h.232999EA0B0B9FC0.idx deleted file mode 100644 index 0cc8b4a1e953f8bfd7917f1cb7e425dfd609e48c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25422 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 Dy5UU! diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sigset_t.h.32273C537A103809.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/sigset_t.h.32273C537A103809.idx deleted file mode 100644 index e94bb42ab307510377be99196d85494da4503bbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 362 zcmWIYbaP8$WMFVk@vO*AElFfyU|+1TQ%e-`(-ev`)AJH@iWN%o z6_QdFl5+Bsvr|)a6iV~p%={vS^2E%N)D(rZ{31OC1%|ZDoK!1)ef`qnBK^#~qgBVO80s@#HC^m|SOtiOWWMTjSXK7@G diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/single_threaded.h.918E7314A6EC8DC0.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/single_threaded.h.918E7314A6EC8DC0.idx deleted file mode 100644 index ef5698acf850c4698df6048bbe532faf5f858c10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/special_function_util.h.84282786DB21CFEC.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/special_function_util.h.84282786DB21CFEC.idx deleted file mode 100644 index a5879533dd55231e2daad65505ea3ba2c88cf8db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 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 E0L-sOVgLXD diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdc-predef.h.9EA93D70716BF84B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdc-predef.h.9EA93D70716BF84B.idx deleted file mode 100644 index da4995c2e962f26fbfec56a771b59e29b3c868e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254 zcmWIYbaVU0z`)>~;#rZKT9U{DWD5gvaY<38I*Hb>+5Ia=cei>mKK+! z=4B)n6{Y6n=m(bQhvety6ayK~MX8A;`9=CUnMtV?smc0hA0J;_l9G~|7N46~5ucconVuJ4qL)Dz8}mwYa_DGPK}iwayq2GqR-9Ur zpGGI|0lk)znU+R3?-gfOrP9r^@?>CIr?qX6OaP3o;>z44P?jr7O)IWpWMIgfaB%*S zN%{;dJRAy|3T7ZF5a8iZ(^j*9uo)P*ICMF5MPWQ14sRZBNf=M%P|{h2nssbUTpSJ@ z4&pFj9*#VoJZTtjmO{#<&o8!#0Bup?Q9@Fr!K)zwQ^dt#!eIg`8^C~vBZ?;qu2Rsc zjLE%oer%2NR00*5bC@G3isy-kEAsdwcTH@iViyw+ zha9gQ+yX8RZ4PZAm`T>!hQc>Xw7Y;N*>TuO!Gw7@GI=uPU_8UfU%L|Q0~Y~3rKqlG z3KQnxP}fv9hw->Lj5&hTRzA-(2HvF(8D;ql#Gb0O-WMcynaL52GcVPe+)i3}nb%A^U@t1>e diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdexcept.58B04C7E9859AA5B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdexcept.58B04C7E9859AA5B.idx deleted file mode 100644 index 20aec441c4be34cbf94e57ef4c16214c5adc1051..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9162 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdint-intn.h.EE0939E700184847.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdint-intn.h.EE0939E700184847.idx deleted file mode 100644 index 49bcc250a36938b222707e36d79927ed0de11d67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 488 zcmWIYbaQ*a$iU#7;#rZKT9U}Zz`!63#Kk2=nKOVi7}z8im!xFomDn+)W#*(>>Fev4 z78mJf<|XHprljguSeV6|nds(Z=9O0HrstLFCuNot>qB(t0(Ir-Wssn+q_QBj7^nlN z(aV+Jp9a_n}L;qfk{$GQW8usaDpAq$jBPw zbMW+z1JmNU8Gv46k`R)R1QQ4as&*M1A9&IdxEa`h3Z#UjB*6qiL8`Cg-o}l~lDHYz zfeOS0#l^t{LP1e#T5&OwTNt?@ZU8%hfdS?MpfJdKs3-%>UZ60@QkXEzHlQ%bDwyy* w=C#l7M*B>Fev4 z78mJf<|XHprljguSeV6|nds(Z=9O0HrstLFCuNot>qB(tmIAfq>1B|hv81vfwHT-a zq|?wWz68uLHi9zDOrQ)4Ak9!*nVZxCbfVKQvzjN9Z#!}`0Nu|dAuJ&cCKx!u&Szv~ zZU1rPWk}%n7H$T1paO9raY-*I$OUl&*a-{_Fc$!YLDoY>8DRDTg+Z3WgkiP;g+W%q zg!kGl@!A`Z_8urK%poiT6J{t%%}E4tii?tq#X$^a5CH*9va3HFtWfve!^q4409{3R AkN^Mx diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdint.h.22B451C129B23D79.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdint.h.22B451C129B23D79.idx deleted file mode 100644 index fef4346cdcfc268373ca66b3ea664f9326487ba2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4626 zcmbW4dt6Of8^`xrInK5L)Zd-ccrk9U3Q`Rw(4e{1cvpY^QEnH(Gt zz}s`&7HBZi+5iuTj&dFuhTJo}-J=4D<2vi8mU2bo!{6c(umI(wDcE`(MyJWYDZZ1HEE& z`gpTfv_9Tvw$5bqiP6oD^3rNlYK_6mXi^zWpVZp&LN6Gz{{Lwg|H%z4LHU#qTo|QQ z89r%n3+EfuMqQ!?8o~Hx%~2Um{RYi4$&~^9TT})OY*88V_j8P zvsjhc(mu{)fCm~J_Hwxjr`dmk4*!PyrMWJWJEtn`4i6 z5xCAE=3}3GxsP6S({3HCzZ!h!VK2AnE1oWMDQ zAiy!eT{KK^e%naTa~FO6*wCZ47VTdDjFu(c7EQoKi`EP z6F55%cshCZ6b%#nkZ?1}zHa1cfolhXp`C^*MMDLad`PWX)o!g_?GFOy3Ia_hjjL!_ z4-5Y_adnbg|7wBj1cIsdQ(Z*E1kO#5Y(Fbq(Sa%7GMC`m}FxJxTQ$h41lJxyE|TQJ$eI+C&;08M#GKeByt_}7Wq_TbJ%Bo{$KTgv)3PIHFrzT5%8 zGEA0Xh_0phsBdp`8Ti-**(frwRR)HrT8gk~(u&n#Gdn{I6EQ*3S&Fopz)hEu@xjU-K>)U5vK2!LT1rJ_?C5K+=2MW1NiK#3WGN3$?OvL3 za$E?23`8>6sG90SCZwhOLV;5or@@k*+j`sED%9{LxSu2bIZH}ulLA0@C`o^(sK7yZ zR1*sBjfiYy{jUg4pAm7>Dhxm&CWS2Eksf8&8b_U*2A~L&A~w{biDQZ#!>&gFIE=|* zmIThPe)Ny?n-B?LA13=)S8vv5RtN0Or62{76gJp~4YwNB+qa(%pb3#C1RIW}9CH5& z#VM{(kcLPai)`scEAQOjZhZw{4I*n8hzzbTRr>xh3&0YxL{8-9a}N%^zh|Be?t6&b zV|r15n0Nh37 zE*t;HM>Fgf*ZP|QB$7mVJTGl|)#r7s7lV5TCOcS1{r8=mdBbmJ5`a8R@-Uo|mU8X( z+Arcuh9m>nhRHUT_Cq5(KRvd5(^3GHh_6KQ$K|}9|L>uX_pAi48I#SdMPAgjJCz~F zDL97sV=Q>mu?B#iY0|5u!wlT?B$M3I5e9C0eo5}5cKsfeT+^-x_c}z@v1QnI_}I|_ zx+UKNSU?uYp%~Izg{)`v-2m=gnCxPqP%NxF_oL%M3XWiMgyrdp4>lvzLE#$#m2{E=pvSlrC+YkKH$A*1 zcauS=(i`8=Zr&pPEt1a$ZFpm2z?H7s0W=`ez(CixDNo(Hpj-ecn51BNb+$HFU2WDz zQc#RZF^g=u`E+Q>f7)Eip`oA}k!rS;?9@!y7}aBYF@T+z>||XvH)(E!^f^s|kr?H# zuKXkV?#X@&O27?sk4q z4>DWuBKJDcDxsK@h<>p5IMtUqVM4g zrybs3ZUCU;b#l_X7A@+3;^XyKZEY08tcJnQ2urb11X=~QsD)aEwy0?pS~+YsiYx?w zE$X|FVpq$02~w1_tXCjKMa%kSq`2I&{s1W+w5&J751p3v>`WgATsrref#U-hE z8Hq(jsX00NfhGDO`T04;K!$TsYGO%#k$z5QQfftNvVLJnGE^ivCowM_B(4u(8CvLP z<|XHprljf@m!xFomFQ(K!0ae3F2a;7uFOpWxuhsHt+*dZNBP^t{(913#K^_S%fTxF zb|jE^Hb+L~nc}_@CN4&8Zf$*-Fb|_Chp7&Xw|&<_kL|&c(|~%lxV7Y9!uL3HovVb{ z76SF^bL$(ygn1Y(IV|BOeNhYU-`V-`I#913x1J(Q5zt*Zi6BmKQF5_3h`|IRAb@c} Om@lV+qOckx69WL%^H&W3 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdio.h.6919C07CB89D47AD.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdio.h.6919C07CB89D47AD.idx deleted file mode 100644 index 7962313c3fe81739e0c608bf20b30e54865131f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29858 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 ba*RL9ALKuS|8bvMM*PR}e8lp6fIa^oieM{% diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdio_lim.h.09E79B5FC5C8DF86.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdio_lim.h.09E79B5FC5C8DF86.idx deleted file mode 100644 index ffb30a9a6359a5954ce4c5ebd48f3a717f176f2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 390 zcmWIYbaSg?WMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`V|&t@n$BvIhlE-6}stprTR&kCB^#1B`KNt@j02fdKo}7Dsz)S`ioN2ivI%XOR+w# zY;#mt7`Yhbx#U5%fWeB>nngBC_;i87vYfI)FyXClGwiM1CfYOdFv{`CNyCJ@zo)Uv zcD)S;39HK)z=SyHCf3vmcZ v!c>UDK1Jb<_0ks-M7h$T=iMV!N33jZfj6h diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdlib-float.h.126E8959FAE2A511.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stdlib-float.h.126E8959FAE2A511.idx deleted file mode 100644 index ff5e3920adc42e1b35b7c3fa2a1d52cb0896daba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_algo.h.AB8A282D138620E8.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_algo.h.AB8A282D138620E8.idx deleted file mode 100644 index 245c3a4c253200aeeebb6cb42a136272d4541b78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108226 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 H&-ecaStqtJ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_algobase.h.0FAA8197C6E90065.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_algobase.h.0FAA8197C6E90065.idx deleted file mode 100644 index e0b8280169d2ac7c5e2554a93fa0c2f345c1c1b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34222 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 E1N$WB)&Kwi diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_bvector.h.4E41E08954D1609D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_bvector.h.4E41E08954D1609D.idx deleted file mode 100644 index 66d62b9ca196195222d783725ed264e4c33317d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23442 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_construct.h.4CF95CFDA6FB4B9F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_construct.h.4CF95CFDA6FB4B9F.idx deleted file mode 100644 index 29031565fa7460194da837fb64919c54e53054dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1362 zcmWIYbaV4!Wngel@vO*AElFfyU|CnXlA#;29$B^Q&eyQH!pl?dH=spY`*kz!@VP?n#W0!%BFxk=f;Wb)a+eCub; z?QA>@TtW*sG22K`624PM{cGhivFWtLBly~wla03xK!@vVn(8$En$ixe!7&uv(7&sV!rZ5zxrWLya(%QRrZ{H6}(3YMQzfx>~hf#xtzX;#{+sIJt^0t$QZc__k6 zKX~b(oa67FEG8bl-Hal;8I@ti@bJB16nTT-H}*{qxa0f0hm(iTkHrt}Xdb>SmMkP* zCnHNIBNBfeBgZ^O8JKN6d|Mb z5D}Q@GVA;Ta5fL^}y7WlL+!vaZz%yHHg9YZo%b%^URUI ZSp<0n_!$I2Vi3R!V=yrABbWjRCIGQ=iU|M! diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_function.h.0FFB6EA3463E337D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_function.h.0FFB6EA3463E337D.idx deleted file mode 100644 index fe6da7d9a70d1aaad2fce99311aa8f30ce9309d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34796 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 D6CkG? diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_heap.h.2202DBFC4AC7A855.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_heap.h.2202DBFC4AC7A855.idx deleted file mode 100644 index 7ed26dc6e3fd5ee476c892f84ccfa95f73a9d058..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9860 zcmeI2dsJ3c7QpX0XL|*_SApaeh$xRl89#XhM3V+im{~;3IO$j^k555B==(r3hcVxX z#E_Z@A^1QF$(A4s7m84V8d*XiQWzy_A`=QKl3L zA|WA8hzy8OewPc2W8$;{8jU7duhYaVi;PQ-(rO}Iy@He0M4d$-J9Bd65Y!s;Sois7C|kN&58kvd7=6GS6)voJ$p_P z%oU+70$s$y>@0?}*kYhLQBdyg!u$6MQ-W_bsm+xWC|8=h3vjnz6Sb+d{7Sy}n8pi| zFhGONW9===-coH! z2S^7CvqlV!{WdB6G+>iiX5UG_y2fAB<_-fKR+_8BP}kp_A~evPPPK38$}uh!s2^BjPch&lB-H&$ozpi{~C9 z_VAnuVkU6` zE)6|OPqaMh=Wyuzd?2 z;Fp ze@(=%dF~}*FV9;++zMR%3J@z8?>XKR@+bSgCx>~zVNbVq1x_=cVZ`Tt#KyM8Kecy; z1<0Y+q1==lIysc{-!$Z(hPX*N9m(lvH1p?l+Vz>nN_knd!E6H{3n)PJ2fY4z7bu> zf9LKsA(dDDX7IgOtw`{2Z4?(7tjK51=;*2^4=y%X(c_gd^MCXlzr;?Gm-;LXWYf`` zu5WrVN=J_AXbR&@G$9jBWqb(PA3~EDmm>R8o*R*OBYK*ZpF<ubx%(nM z-ej<%4fW2p&#d-MHR99td%5Iz*p}MOMl|8kCG8Ct))p&a{jiqnYcjTle)~duy0s)f z3(wlJd2InK;7AKvjuIe&qhv_tXdQxeh~qp2c|4y$aDwM=5q!(@eFXP;&ccv|Ieirv zDtKf1 z&h=ZevxoUqO!wU@#}n{-!>o2|*V*9LC)m7a@Q`X;9=qzGe`W44+mA4v6xnE3vWrOa zK_nhT7aWxUE$q;YN=$q}N-;uApgK9vi0Y_SK#YxDMs7n%GPw@f)bacf**rvUbOA2OYp~54%yAR8 zY2vvV+cY!oexo@nc+1jaQIZ>w*nr$=CrR=NES|s|XAv=raQqDszu|csh}(cGKMLYe z#uqeI-80*45B^H#p!=UIy;DC={>X^Wh7@&catf>u8PNoqH&x;*HEBv8uZfwDPg&}s zQX|?%JyEeu&DB!df<8VvQD?WQ+ztj}0eTta{#byK8VfL1V*$o$EI`Kt$Z9OWSd9g! z6(Fmz0An>4V64UhjMZ3xwWr1cjMZ3xu^J07R$~FiYAnE5jRhF1u>fN=7N8k2kkwd# zm8-D;V>K3_X<3lfSb%y6$Z9M=BXf||Sb(N;-?v-;(L(Feaw9rS=va;I829v}Sdw>R zaW@|~)nKuP@gl48*L(7XW5awwocv33c1G;ul_MlsH(592X_CB3S~ZsTqa^=KTz)1V zG@~IY84b6cFqQV3Bv-=tN_dR++w*mO^NTJ$`mquFZS6U|_o2K?C&q%j8BN-Z-08i5 zoPq2!_-yGRW>K7mzcW!>y_4|fB*-7)x<{=npVSR%Do6#C0(DcG7Id!}9XMLQy4B!GV0Dng z?mU|t7l%0ynq0m9ux)N&+c2xO9$VnI;DfR&zi*sy8z=9s2)TKn{M8O+t@0rfKjb&; z_F{1_zajSkiw}6NB4QQ4;r0^|e`5Satka5-VNZ7%aW0|D3&nxe4<@Js(>0bdHq?(K zXu*Gvjd7_}7tIg`7AZ_Uozj~)+-fb`mwnou7=G7?U3SK+XxxM!t?ntgjW3b- zB~m^CQ4dM3#bPbyxP^!lM>pcDXwmR4c;}k&)~^I&}rks`;F1-BK4a7 f6Z!CqDS}JUogc~QQIasa|B`x)q9@9?Anf$tSCHjK diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator.h.2F3524DC454A6598.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator.h.2F3524DC454A6598.idx deleted file mode 100644 index 459fb64d23ca619bd1adabe050fa3959ef5dabd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23922 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 V6u2?_;ljQjT}2fm?Vs1q{@*@6gzx|W diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator_base_types.h.9732F67131B44010.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_iterator_base_types.h.9732F67131B44010.idx deleted file mode 100644 index 4f7245ae51aa3c4addfa0e669fd4567165c309a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4180 zcmbtYe{2-T6`ncFnfqav0~#=3cWmQ;51$VMBH$#3;1qCiRpgkeP10QV_V(`9-0dE_ zdp1`GRNF}qF-=2S(kfCCi<&eEM2aYgrU_C-XoXb%2(gKyiV#R?Pz$0Wl&T3)>6@K> zd$uXcAGPeAn>TO2_v`!S5FKsn*0oP3q&3mDEvr~k2_a-A{F#=a4wu3Q{^MtCP25nG zBx9|5Hmhr_PPG(6vUG#V8Obyo{ovA>R!y;G30*Onrdw%MOR;#~VhJUwY6{a7(^3-5 zD&!Qfn2n6pwM_t0OaPK4jj38%F;t5s4L!>M2azqEnNqjHOg*cx9^Kdi7@cXwg=CTe zo3x?aNmBCAqH{gGs;x@Iy-OEA4#F*3T8fCTO2+ccJw3`>>s8Odni2!O+} zG@U0e3tRW!@N(UZ(jw&qpCHuB8Pyqso|$=1kB&xr;tUTnt$K$cOrD3I== z4SElg^?U{zVTXw;tLx$A@onxjB-O&2lh9`D_y5uAPDml8XpmM0qCx#8bc30^ssdXh zF$mKm83~hTHF;7v2ZiCh075cSdEO4F=^<<}blgEUIUvjFssd6nR>9_n*&rwZ97?FB1*6ZaW*R;xlQ3-!2JCQ=6B7UcM)=8`Hw-uklxA58vW*v5 zPg=5gs|t`TP(sxjY^FQ?9Pa=)z$CzY(2bPW62QL#mxq)|>A>`K7RC+42Skm<6_IIN z;uMD1V70TsOa;4aHky=9UsGJ+q(I&&-xt36$YJB$Jcw*>&LVa(3lxXptw zAxV>!ai&dzOXDmZiaj}58IO$lw2-xG0>o)gPs$W)1)16{V-o)acT>f8c+PK^XRujj2vt?z&vNzX2@9l2kKFb2J*wn?_XC0gMN(S+w#ZHK&P7EGdoVFEn29b1QV+f=6V1)yiP0wSogO%{;9ZHpw+-kF(u^#LECJ2j z>6JSwa=yLqi^|MwEAAAHd0hf*EByhB|O2C5mO;V}p!7R1QNFTH*Gm!ED4km-=@leFSVy2x43<=Xa513&rl z<$~8Ur_vibO#`RtTxUU-KlFb2`)3bc>xGgb*$Xs$fi^h{x;*_G{X4JzY~;sY&s~u0 zj=+wY_JjC*CDcy#`+tAGYlBv@3krrz257|qt#uZ}$mqs952xN543ODS&j_s_q0P>M zF8i~&2g=@g>lv?S9)#)gb=BGr-ji}W%;uq%75fg??(uqNfkWIEue2ZBA!s`ssjMC@ z-CX}71c6%4(fV@`L@XHO;i1(lpFY|#3{8VP&d~4~y2@G5<*C;ndrqEz={4Ro5_*#c z-h`%!h4}naJ$5K>^yI!nM{5pv$=AW@QQxEU><7;UxCm4#8U60|_^W%~;3%b`vovrP zP{e|PUir(n>izF6JO!uzX==ZItNi8*_kj5_4P2&`c!0u$w1g^=lPE_x5L(2(=TbN7dXFD( zhl6{k-CKh|>;Ku8`|RA%CW!Dko%K1b!HiI};4h?#Kqyr>;5tSB`oii3b+6TT0Z?0c zTQ%aNZoylq75lflZ`BJ2w*HIz_j{`PJ+%mgGKM#VhOxBiI~IO+ymn;klwj!bwU2K^ za}elSeumCQCI?~I<>%>aP-g8~st$U>1@_Kh!cD2q9xg zq`_3bty}~Of?N3rU4-uiL6ha@=pvLWC(F!RG*a~M^HlVCmf;?C57gtLM{_Wgj3ggG zULqJIB@~a#fX0A8o+%J z?@|Xchyr)_S7_N4>T)I+x=Qc5O6!X6-=Luzl;IvPl_`GvGC^}N6kix$g{!#ENB3=V z4Xb|p@2dSD-Jf?2+Pgj8U+ny_-!<&6zO?Mb=990uh6Al7y{p?d9CHo7`d!bFveJfA q*jTp)90PGrOhYzn`B3?P4mdwE@B<;CitqhkUS#nT*F7_5kpBYK;)$yO diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_list.h.9477E4C63C8F9398.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_list.h.9477E4C63C8F9398.idx deleted file mode 100644 index 0ceb8ada97c2e3a04a8d910b4969079081082669..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37558 zcmeHw33wF6*62)6Pj$~s&vZj}LZAaA20A1VK(>Gc5M{ZFh`3#iLo&cfG81PeEP7Q$ z7G+03wgAfV1G1yC$RbEsWCsBy$SSfZghdRC2=DY%pXovF`|qFczW2YEe7~PsIa8;q zt4^JB>QvRKQ{6gt=&FIO3ddYGZ zw?81e-Y9hDxdQ{`9B+Ps)93bkJ!vWq{O!z_>cn}dP2vR9E*j~ub@%nr&e}UJN z>-O~4J3uKIYPT#uL~O4QKBtxmwfz4!sp&8TY2zB;&hhs4IScx@bDVj31LZuI-w&h# zq6V=BK1gag;0-wQ4!OG}jey`SRVKAP=Zr%y;IxRE`Uydlpm( zT;}xU!e>1JCoqVQepTa@fE$?BnUfQwg*VjLRH#Pf&R*^Tz#c&)x5w}DsqB`X3tdwG zkevZQ8YmZd-5y{Zjq89{RPGG+s0|FZ&s$g^`?X*FDm%9cQ0dCS%|HKQvs$ga1uDIP9kKiaT~jNggG#GOat+9F1xu)e z1@;P#Q?B}#x4`97Df#j%f8q8vE;-j**b~G8{sP|U3&T#eo~pQ0x&h>ggNqSVm zs+=1L@?I*G?F~E}lvwCe|309#G*Qa|0qzZevoC0?f;=a1o-9A-$#eJBgsGn^M`azg z1wrA;RasHxZy)^R&9AR9zZ--}r3}@L9&bP{@IiBPUAd{U-z)nId-`*HZlEftuM{99 zRPgdEa$S@iXu4WPWyk)mTxdcE^_zLUy*?1}d_OeVozqA5dVs(lmn#=a)1eHwfvmI% zsn8=;i92)pf+(xq@p$E2m@uHTC{S5>(3V2lJC(z|@IO%156QS68XeRm>Kvza#IJs| zz?B1E1l10Vs<$qw(BlTGr~;*peNclzC56yxCoP%h&VkOW)BrW0{-Ki8?WrFmI*btI zksx1X!T1#xfP4g11I%q6IUh#fHxT7j)gG!YQ$Ldlg4;sX3mx1(e;`%v5B#8324o4q zLq?aLVr(i)~Uc_qEE+OhWCyLE?g z!MPNEae4fOK2=@ABmhI#3pfDPkYDcQ^X60T&U_&?OVu(BTL-6Qe*q8z$Ok&l3uS`> zfG8QDI)IY{KJP%4Pt+08`i(Y%3m99IES23=WdYNF=ad*0aGnVK_8lgfFP#Pf6!<6~J5#28KG|>NvK^0a8J#nlG94 z>(_5Bx7E^iTH0R4a(Qw!M75PT5IJsNPGO$Y*AhOaGKvfnm1<7(bOrjmTpp-WZD;!+ znO(FwP+3l%6K2{z-n?ADoC3Cy8%hKvA=epjss!rk@_`@$pMq%P$2-pY9J$ANFx z4M)|aMdOXue=YP-cBuG6Irz1QGJ-`OY*;E)#@Nt-&?JiRP~icH`cRHq=%F70{h{9g zF;k_DI@5bpgSvac+pP_mDjpq_|3M=H(ss+`bYtSbF+9cp3b)qw9X?Cz} z2!P`91k|j+K!aKsrZvCI(950YYLT9vUg-CwQ?tXBo|BZ(7XD3d*f6~(uxz^4aaV43 zLBN;R=f6}2I;$$1?3_NXoWB3XGU{Na1#)u!OCRtD^0I>k{$+bqp#)Xh+XEfwS*T8% z|GGW23@G>PfX@ju_}3-e9=AGY!wl*Rw#z{24f-cL#5e|OD;q*QpmxBZ{!g`1Q{`-p zWAmK@vejjlA>ZZe?J^*@CbkOwnW_J!{}}d{{%7kDX6sf4&`X2^DwRa1M_=sv>OaJhoufJjq+F|reRk@y`e@j)F>#I ztj0@L&cFwk_=YJ>rX-!bly8%mYF!OViH(%lY+8aSx1VJfv_Cr>P@Vvk^Bg(PS+xXF znoqxS^_Q}y4#CjsX@jysVmC;FmKZF&*%1|Ow3*i@9KQJ3pydvmp%c`zk8QAzZKEYv z&(n>MEsS|45Fr>^LOqv7_Od8wiCT{_SkLu&HyzR6wuz&?>c#f5D)%hpo<+b~#Gilb z^lZc-Sz;pKLuEWEhPD0kvM?OSiiCy5gCD4^W38*kZ(mLSRt!qLpSbLRs}RX`cV z8AoxPmLQ7xcuB{IsI7G*<|#lKFOczqpe2a%kId#*4{!cFNn+Xp$`}h7W0AB3QTD8L zE_gC7C0SyU0cAHwc5@ajK@?IusesR_{fNXw0?Jn$`HHh?38H)(*xfy~Y;Zk^i361P zdGbDVnkI-6b82a$Bd@ne6%5Y+b&DmoSmL$BV6hOXdyLU;?vmAM!)Hr!QzfP&)HBRM zhB@q7g7x%RwP3;{MJwt{Oglh1!I2Z3pe2ZMGplo}9?l-=5>pE}??v*WUAby8UbXOu zP^HSXVb8bU(LiFl0m2HFtY8IYm)*F_9%9X`-*>(j*(x?eV*Umwr%mi>6R(VOkZ}$x z)-rGUM|SU`lZ^#KbLi1(iCqnRM-!dzI_^7L(iduvZwXvd&J{*+Wcq;oX`~U+Vq*V}hY6eCn=|+%-D1#9-lALy$EGCd?{3 zIiXXQ%}@nCb&#!gkWJAN{8YO?oL|N7TiQOFX$&Z9%w&z(swIf>>yEE8uebl|afwL+ zlvzBP#oM$5QC7M(-I|{f-I?<5aXUF~w<$D1l8|*~2&#n&{n5yuR}JmQ`*)Z!@%p zPwikccCgL01nbFot@)Y7u4^wz%wvFZ!a`1199n`XRXXik_jzoSY)Y9jGbsbg&;(KB z-=g048}?`@g9sT!tO`vKrCG|YHy527_gW0|9DHaUA?paIC5RG#|8JA>dmZU%Gh_hD zZZ>H*TVG2MB{T6I?~+~(dkKbSFxqn^b}ld$O;pBWf}?%bH+(_zzSDrDvcw{ZT?9xp zQIW(T(y&iAedst=*B#VW$}%fiW)-vqKenu4X&ZC5gL$;$LkJlHy`l-C#5{Vt>W>4r z_LG=LKo%w&*~vzWGTBBZ+iZxEbn;r^y+hyhr?p%%lS@E8njnh5il_br&*Y&LWezdU zA!daph|=cfuAQUXtsN>cZGbjQEM$pA)DlEVAJ^*m!Qq<$r8b~^YcYOnv1lD9Eftb-P*f79c=)m z0o1a9BMZ0)EkTs*_$_bD*qAlKW~i>Vg>CjN`?!`M%4ZQb-{;;uGLClo4>S1#=t2`j z5uXtocgv5PATduuTdo_~>qe_m%#&h1B>tOT@Amn77qUMNHdi@M$a&(>60Bunqt$!Z zNe8FW31c=#W`kO!38LJdcB|1u&ksvzTZ+x37}`P;MCtf@dg_+4gr!vAZW_r=&@(jA z1x~0t_?pnQ!3z4R+l1UEfJ} z#AE@=Ity6`V@(r8Nq=)?^=&iftfQ*_Fh>qUpJ;+8`+jzx+}Wq|Mmh<;Cy@7G5~K;D zM87fT*VcDl*-R(oUwHBhw1p;!;>!JfPuIDxZlRNUAzNrwwphs)YiIyQJ~r}+>}q$n zP||&BCZ7W7Xo7Wg^tam6apvG{L8Vx4or$b7*_0c0;|)7Ol*wZjTGI39?xKw?wUJVr zpwI+Sn5A92yncDoZaUYl;K&M?YiWWg3DPoK*GZoPiaPHPvXen}K}!&2b70Bkz|x-& zQlsfAN3Md=L=!~WfBER;=|bm25)%ux+~LR_pe;=hrI~ZjNMp|VA8dvifU=iuvX||w zC5Y1D{H5kEeKhYVwH~%`WD8giG(nW)j#uyR-MHhp#MFUWCR>b?LHE)GQBJ4N>DOav z+zHCwhY2|h>`fCyIXa>ALeDww~jdMxYQE zv)09|LrV-6!D=!XzzqERvMH-4+wY&F!gkKco&#Z9&6Cx-uuVvNyxl0ny$ceP4h=rT zlQS>@(gZ)XuW-$l53>9H8dQkNavNC=b}LOnCwZ1Y|0lUjl(^|sFXe%7`xO9ewFkZ*;=u7LT3Cb~7V zC_Xj$PUMlR5+g%BlXx--XhRdMXT$!4j>)Y%UzeC?0A-tvY_nOl1W{gf{`_oC=gi;e ztW;zrMKCMT1X2D&ex>oIoU|LX+hYkC3$qeU5T$#1$xo-`SAVw|65&G!*n|UYs+J(i z(a5Dy+{&yno1s0R>|`77WLs$oqL`}mA9po(-W`c~9JKE)hTR3m*GxN^sT*Ij#LkU| zF8K;jIsnQzmW*RzRzQebbqZ^{-z>{yQcCxtLYHv`Jsus-kSL$~?h3PY`gK!YXG3`x!yR z=CR6I!EsiQba<(w>QYA}iZQEP6{D_-F}NyYl{;e9J7Q!wT<4CMtiwM`Q9nyD14f=I zRc6M%zp&Xe`)gnL%3x=eTgLcX#sr+(SYa_1+_CxMYC#km?^0 z8F>m8>ZIy;5{+t3P>zwPVOp6tPB%#I-T2Y?LB4N|Crn^L*>o z$-{@TT!m97#pxx=<s6);KOvw4{OA|KFFXOeVEZt%p3mBSDo!9 zt1{Yd8EvnRjRmv8PKxaHba<_utkvNU@7}BbWTygqrJDp$o{WsP(}|h~_c>ugr<)6ws?ipsCEUnG5N--B(%*ElR8Ei~*HTG~d@d%DphVV6p@HO!;O#mA$nf)-k0*IVLo_gY<;#csC5>kG48mWW-JXw+O6-OPePM@s z1hI}FA}#~0+R?90;R~F6flER=QBbaN$=5gq_n-ykV?Oy~Ucs$HSnBf9F+K`+vIONP zUiyiT!fjXho+WmKB>|5I)unLkSW5zqy`W6BL`=2B;=Zz=EVaZewN%HmqZMy@^DeF` zs$1@535p#s7d^Sg9xm&#I(kOwrh1i5<=$HLYGBo=SxUJ{HF#@d^2G~$YNewHIw=4T zP!9z(UC=QBGN@MqGROEfQQn%rFRWkT1ROOW^oTl9V2>icT==7L>i6}*eEWlO{K3@H z7uQ=QcB>SNFuGYV7R|i^YfyKm#2MCT+?_&q3ph2VP8NvRc$L5B>AvQS3P(Kj4uKv~ zpAhWPtAnq+UTbj23|OH(Zg^ZqQq7!ZDJuG@Q%1QZ?T90-*LSC%%BXab_QkvDKgsdF zMwPB(xbq1+Gt?IdRS0?lRk3RRKgcrz9Ky@R=6ZNOFM!`k^)hp^zK?RAB%UXVzK?R7 z)VfVl@f=<~=dUrFOVRgLiut<5d?R!$5WuS@=0i)OKBJDYR2gH5*JspqmgsdBS+{96 zS)@&tYPwBx&yse}(hS$?>RDY%ku?LwTlFZ(SZ2+{eH;M}&s%M=K7ps|g0j|;w${;1 z@9$|xz0;1y2;W#VbJ*lBMmH_DaG>K9NFjBX!Wz4_{cQX@?4K2K!;Pof$KPvN zZc=n>bNotH1L?6!Cr)_W2;xND-cX#-+fA}+K5jVp;00x_vdCN$4>@7K(k!nrr=jng z3O~BW++K&bnyp*SvAXzeHOpJgX*ztdDjXzMSr(pY}>f>GhJbMv{;N^EY`;!3Ca@D zzC^5vFq&J?b?ViO8S%;g_^`o@hTUO}Fq0=U`Ot!DhPi!ejmZAp%dPOxl?4Yc>3_G=KBB`Hj1d>Y z^RF1AuY~8{G&Z>z{{6egCU?W(kC}vznKZq==?t09#OUx$rol`mONVDO)n_wd?Vr!Y z&S%2fzle!j#Dukf856OL32Xln zOmzpDTIlWDV9MNJ`kM|Hn`#uB(sg);sm=~l6CFNaN;_bBOoy+VBCng0bhyk^rOXtz z(R14*-8O}d_abxhB6Cw6e*ss00T)J}6`W%QS5wdbii`Y;3#)$%Cv4#o^!(ji)!kfe z9X`y7hdEh?PjFEuxMUqZ&)Ls&HFWqY7jcyfqxUR6auy%A=msrBuf5KAbge8oA+icO>Y+>VHVsn(( z!oD}mAq{hc(f7Wi&V5JNc#Rd6v0^6nH~anEoBfo_*%eN8;dL0$Q1mVgYN!U=jgzz1 zv~X6q9&PP#pm_hWu06rohF()lGaiSEID;DDwiv@Rc1?5i*`P1UicYCH=$#knj-|bmyB}=Ui zeYfWuEBVIi(06-&wHkl5TF{S7P$t>PB%1>-5y5$ljV!e}&`(%UJ`s$c2o^jf6qIw0 zs^=Wlbb6d~JaW#F9u7A@=g89G-yKzccf{%NeTR785u?Ma#f;Tr3mx7eayvv3Ve}$&Mbg7=&zF^Ll@AvirZ-(=X`8-n{ z6%_0Unn;l;Ou_$PB0uOb^2$SAK345A8V<(&4!^9Qwv)VG>CDo)10SoCw6N~$VDqe{n9S*#S?bBh{&nL;fhb{Ia*)6nTEnxZ_>E-0?<*(?rrck6izz_IGc9U!>iBH8vzk*K)@es#< zTUc(=HeYkA#=PUL3PF?YWh3^owegaiI&DYnV{7BIjnf?*j?$a5$mfEx%4T1s-;?R* z$^H7&@(KMb9sA;yV32fr5f~}3eC^>uo@#5}1*P}kb&kWOZ}uPg@`Cp(9N$iAl46=O zH(>~H#SoG)gk++YgC2^B^F#%^j(hq*6MFL*Gthelwk_zjXUstR5w;ZRWoOI)yU<}? z?g%qLw>nH)9U;4>%g@Vmiq4)KUg3y2bYJb*$KQSQgGwh5crU$VKqDK^PH7^d~6Lk0%Z@k5ex>MX$i{+{%MqfhQv)J!h z;`Jp&k=0&gjn|hD%dGZg)_61v)dOSu7Hhn|gt%noFIl7YCB$T#FxgfObtpywGphAIzyH|aMWf1XbA7QXrDMUg zA)_lD4L#SlUqAHRfiV@1-OU#pZhX6Cld%=9;ZwWpe)Le&h;d+g?vM;SBpG)w(0Kz4 zGa8)*x%Lg#x?*z7Wwpdf(Qr}>?RiYP^7i_&eOJeoo1Ggz{z7V%PO%dz9P!Yf4BV|~ zcp9Y9=udVJYct0*sobQPw!VkB@T2XMDjX@$6%W{jM&m(JJheUltyUjOlPg@0y2RJ6 zy>H~yspTF+^g0B6Ps0r%DJ*ktuVNCJ>E*8RyMBG&TGDKNQMn852z1>%Z&AG&6^{5X z8-8gUc_C2o8opuXXV+RDx6Z6|Q!`t%xySuR_L=48!4B((mgZgRH4B30yl#8F3T`;T zZED7Tfr-%JON{Xn!|Cuu6PaidbogUa%*WvYE2fxYri8=OOfl2K;Ta|}BfR_^6PXhZ z?`IwR*+>jABPc`7_Mzqo6jr!(VrgT<$F;^aVF_I zX0KdbYY}V^9+3D0QdppwV-kN%hmWOiyxQ(`?2>=`vZ#>Kw$8V!K3Y=YxC-5_!L*{W z2~j0s{3ght5ebpFSH}))^ug}JrIn7IKFJ^c&8a%4DqqK5IMw&_cTeqIR^gb_wD4;B zw7JpCD;=xhT_UjJX(UgSI^Np2@fRPwwzAUo7(9r-geVhwR~~ISN%^|wg2X@YV+fU zEX|HyxvJ6$+iOv)-ncQ#u&&&uBF1e1y+i~5qOfi4{{7T3eVeQYi)y$za=5uVW(dkA zF?o|13XOz^J`gXK#s$_99}GtEuYylxr+6mMyHNA%a`&OjxA$ILc&6H>N;j(LQV5!m z##7cw`(XSYJlKQ5`fE%%8fO^`Vw`2L@o02q%$T_N<`YNX&)N1+lq3wh{7{4)ixzwt zYxwJx8(ZoZyWe@e&9@a!J4^Y`NpH6v{cXAVaChcQZPHG*+*$5|-QS9teddt?yZ-G( zNxHcYx$xB7U6oD}@T3`(42|clb6xqAOx&}pn_rvq)b9V8djFfJUUaAaC-H7*_;r0m z|Nn}2gH8kBk^Y~v8oX5zj1{kUWUxIvxKc@cW@`1hjrWvWJxoeEx&PCtfqj)usxgES z7#}ovK9UX{Wgvrw%*Tx8`>R*$^h5mN3OA{Ad2B*EQ_)iuui>Uc)B8MertnCGqqys} zTCaY;e00TY`1RV&{;W4X`G;V<*9N!Ejqrk^8t=8{MN$h7N7Z<*8FRQMctQwnTh@%_ z)+Xroh3;+;w2eM4fl?$W$2oGGtBxUx;OLzbPjX2*e1#)dxaugMYRED18keNQBY85C zua1|G)gW);Xg*1YC-P(>UtJGL_AxJh%qJm?S7)GM^eqd$VgGNV$yI;$?%&M6wJ)i3 zn)bQ+Q*sN=btdV?%=U-0s$X` zk5%dUm&~?HW)Z#D)p1qd0@L#!^bZ2xS#y;?%u(n-q(*;H9|qI$2NByKBI0Fj)k9o; zVoT2-LTp3y@QP}581=CeJ%22*jU}QUEoMC7#}h$^A9N%KUtq$mBR0MKHbS-$D|#rZ z&s;@sC)ITL5Fv+%71<0PSR&G45~;)I2suZrIv;Pd*|yn4{b0D%mQrd<#TAh1Yn$?( zkc!(bs;_Ozcp)|1w>D)R5lZY5zOVvwgIzdo zmoU@@_{Q3~8+IG+13y;niZ5)nb&6 zzgn!hT7S($P_~K2ZK7Gv-!2-rhr`E2_L#`){QIM5`BAj%@MSUTvKWWE$?6M}jV_B# zb@+xDb3=^R;ki=eTqzc>DMEB0DPykms17fZq83SUc!^Ja1Fq2`si_XHkRn$|vG_oP z`le6D3h7ZDUM)qfmf|pMnfiiZqt#MV9o`^CZII$H;Jo^>W}^*KQyngrEX9%?BPYW3 zQz@}nNa-+hA{5*S`6TXX39g#g;IJ5+>v~^Jn4ay9)w4eyx0@(I$e2_AlUg zE%<7hPOASrIJC52_0T13<4gbcE+xKb1r`^5jSY1-+6<8Kpi!|lzbL?rDZX6c%vXFm z4y;c4ZX6ODAB=<3QTkdOW(dk@o}3O3*ZezAe&?g`E)dQuKqLBi91?F&U%5Zmt<9B6 z$H0BNWv3myo_z&Gb`2Z3h7CQE^!Et+pp_{juT(g$z;!Ti1%2BO2Oo_-;0pS%A7%*3 zRw;R_R1ar;u#zO}Hpzi7-u!y#0LZGn`-c@-(|WXQ`t&!ynFXas(;i*WJzr2>s{K+k z9eO3=m9S_ouQhxvEOt&#)tpe|l`mhbd-urRgTIw~se|SOL zY&<1>Ucao|pTb89;l&>MLLt^DC`Wm6lo$0#=@)r&kr(mUO;9FSj1w%@(Cn#fwHUWr ztaxQK$B?%D?XrUMx9A@+rnje>?v;T`{`Z2MluY#OxLV-6Rq13NUyTH-mcA8PzyVC$Q0#pXzK*@GiiV!utI(U}M~0C_Tp7tz%QEP0+R;6pvW!+tg}c;kdPqT6+7waa8}tk)*>r9kDwd zi8_4R5p~)T_Nv_!F>;ESfcXt3oWAmP%g*;elRtPd9VHM*N8j4S5`yxe0lU=NPHuJa z>w6HuV4o!JlfojR?3eicQnaqZzLOl^Nuk?BAnTHNG#tM~;!DEuPe|m16p7_=x%`mT z^j9wi*jo+00IIk6!Bd}Rlco2M6>Pj;;U*~z?+Y6G!5tx=E6=Ht$?wbYKcW5+iu-0T ogeDDxAr#HcUomN592>-D%hYw*SVqv(43?jEA%+XzM<~cLn z-T``AcAp%l$DNy<)zBn?@6JBDo|@WU*E{HS`Z#m${doZXtY`Poy%{b&*V)IVdk5sW zbZ4&K-l_NZ(R*CpJWrOcck|@AbaxLwsrxOU%1YN=nXW#rEN?E>0dL9GogNo$RYL_D z(k;WCtHWPsmieQ*uQSt?mFChtu1u%b4QMzIlE`N^nPw{hTc9+Z|i&Y^DdAYZ+h$2nfEp{ z)z8o5dU}s+kDig;&o`#&F0aee$DQRHce8(eoaru8$O5?C0V;&Ca(dF?wOL*#2!+Q- zr|0FE@{ruyH6R6KD9=?-&vCjvxhZ--U`~df20ZERg33T(K{@(@Xmoex!e@4t?$phv zOwr2B?g=X5&FJG!)4lFK@OEm%_}bxM8Q1$xuX zR1#fy}G1U>U+`(&W4*^qXDFHP-`nVFpiI&A`{7uas9@;y&NSO5G6go;wPHJRDg z)GM!U)}3N@0$u>mJn3?oF9yl*n9Am18t>HGI`s^XtH*WY%ucJh5E` z``R{gwoB2SP|sh}wn%K}fzk5hx=s1|^JAd3&aD6O*#{Ea1q|7}59`T!xu(MAWx3x3 z%LPM~ThHWI7vPN36k!;bwq{4Wwe$522vU8<59HF?(fm1|5MGK?zjk6T*rj zpBe=4kk(B3XIib?yquhD52%wn9XRM4VbE1KD1PfmQEfb6?7`y(?G%uI|vu!?e-Oo9|r()1hvuRLC9}p8aply6a>F!*w+b>Xlh10=a zLldAD&<9ja-|JBHe5MnsGEEM=G}%b?GtnHTyjp7 zw5HO8eAc_=r1%9L#L_3G?ex0+2c_sq1DpO=v;zj!qZR*mRsQc(zRLcq7N(ej1#0m( z^+DVIcZ&Wge_usglW(RNW|@;Q2$7#X6+d;$8Pv|w7G4CO6+cpW#ivX@R}}e8Ou#Rc z^Om-GUbpEsw6k`Y5q>+bNcuO*HCmgdSzx1?plEN?L<2>1ZDrlJn`(VT2|7HEYZ1KR?#JopP0 zxG96Kz=!g(yp}YN{|!K!Zb=6>g+4_a4Yl$Ff{|-U?ScD7L(j3%&8t{R!<=D z05dGE{$39#nx%(3)783BqegkTo<^WWnR)51Mrn1Lc7(r;nlx$D-R;e71f588<#lTzpzl1S?^obgsx&q|U*GBV$w$3*#fcp+U67;5Z z>wvFx{xI1ETrx{Qqby#}fK(J$m@z8&#fUBJtI1t93t9SRyVEW2{4G~=2lVOwN3g{b zn*80X!=v|GRKD#~7GoKwE#o5mz+$B5xFB`kRKq)NN?BTS9U#5R7(vYS;9TAgnQZ#kR)`) z^t#XYfyGzeUAgnn+c#wg9}mUb1hP#~{QyZeWk2`oki%E44!#YLjFY%=67d5h`6Ikx z{o8w93v%#vfn=GLEVHV9fFw7|TjjORK4OpLyFG0&MsVB+&h7_DQl5S8^HB%n5C`8C zYMCyO>4M@1NU~)`BN7&}KP-}O1tb?Za)Gn?0g_l&>=t@W_&D6bHwKcOGPhF>@dG63 zHQjn^OPiIED&GW1mUG&2u9hDl$@S@THvDk^6HyNSSs)ogxFJOI10;D@do1x-;^k=C z>3l26hfY&~Bxz@ZANV8xlUUWFLoJKA`xkK?{QyZ?O#SWf)#BDQ9sK=3a>YunSnYm* zB*QK)`|#G{vGI038dx`+Q-%ZUC_s{>30vCEywpOcV>CqKhQJt6fF#pCetG8WA0J7i ze3>kBlYuW3Ajz@&(;5lI!|JG(N1-iqxu$cuHhzF4Z-03;^Wy1_bsc(>h+PW#(IqIdx4*n5%*$9D*5Hvr)mu>su%`actklKU_!~~w3z>5Y2NOHK&sVADH zuDajBJIr2*WUgrS10-42@N~kRH~Cf${yrc%Et1oqY7`*JAIoN*KJZ2G1GFs@1Tq2I zLIILE9xj!B98kZFgMSWcS*nnwN{AmINz~g}rKut!M@XNU~_zyK5FcTJU5P|02|~f+s6@*$?iec7+8mZm^5pKCCmYwia~Qgi#0U9XM_dV|)oOW}4wk0?NrF{f%a zfAWEcfTRJ`GR4MCu}OY_B(@Ht4zyVGf|K^Bm?y>1BMOkDD99nj&RGK_<~SE9Tmig@ z0wme6_~MD4!qn~#z6Fq!*hq;j#1D|f9n3JOAsfNMP=F-;Ltl!F|F%t8=xK%I!6d*~x79Cb3jXpX`wLAeMy^w3TkZb7&NYZ)E)2eOtjj;|s3P{db z$vK!PC_s`HS$8A;Gw1v`2mcI^9Ji9=R>cpHr1*ik?{wV#!*~bZ0Z8`pWG`>`10)$& zcVzCu!f6vUOGmH^8&q)v7*z^PqssY=YQpT;(+}==Yocmt2KBh(+;x2)SjRKbr&E48 zdTXL)X%BT=QpHP92L;S9r*EyZzu};9Qyu*CP{(a6xovg$0oLSDFWhr58poIt;k zxNl&jDL|4hpLsd0{&xw}=t!4xq!dP)0wih7#V+f-P-#&Bc|I64#{NzIHUJDYsa>k9{;0JUrqxlLg2C_s{+ z8&^NI7JvUG^@XNL+!XMIC_s`P1H1Mef8g{+N-|2~Mga*0NV3malGpqEw_j5OGE^Z$ zL98f1lFj>n?0V;o+%2jl2HLWKYr24I?*~X?P3$&xbEo93lrM#Z6arr;KoZ-hkDRPM zHGhX{c>rqZ8QC+z_kqPrTuoR$sKUGC_s`y%kv-acw^9aRO;sP++6U1 zC_s`~H*0?u9`W=}2md&{WWPZ6gF`?8l019pr@PBP>;5Cvqq7Qk7K|zdNYZS2ttqct zFaJb6-c44r2@DwpNb>p6ccZ)Yd+;C~iQ(7OR zUfl(eTmY|*0wn3O@w zSq|PM1xOO!@KJY-(qX@;mdAi(G1qJ{*Vzw{KF;le76jgNZL}P(yTOg{qmJyBhlDb|BLVrp$wo2+&DF|m>(U>Ny)8rsr^ohn& zSzRgzp%*6_n{2f<*>sd#(fCx2{8Wub4?;9fsbQzo2%JPPq9G~%I0i03G~+js{3Zrt z4`Fr|Ntqaox@UTtLFHm3I-#cOBwZI9pjHvJPRrcXOVy7f`Eo{it1rt19(pWrWkL-a z*RfbMW2ndt6)W(JkG8BXh>jG&nqK8XuX2&NAOe?F)JKX*IOdvhMQn0KY|dD9Lu_|L z?1-$=j2)7`LrTIihUZD0k)$4mDl}s$fxiuL&VivJEq^0z&{xom6|%lUPC^;bj1oDa zM6QFD6hl(bqatE0B6eJ%DE`0{j``rW6Jzox<%*(c{HjL&sz%|8Uo_6CA?MUk^eRN- zvKn?-4M(3+G;XM2H`H)k{9}X*6rYB-@C};ri4^pS6ocZe8QZ0x?NSWudby;QOHt?^ zYDPX$^GOtA#SA%Uh8%<954KbeS}w=1uKy_8f0Sb}R-_rHW&3G47FmIDH4t|iRAUVr zFMwgIfzbfXm@AOELJeHB!wOCy8-*HZYBgi4K(-1sFwFL1yHDzl7%s|{EJGImUA>#a zD>A1Uqpf7LwL*NpZFH#q`Qu|NKY@WgyW$Jzu@-LTY@4|#T#RYPW-fj+*MQ-tINK>M z3YS^nHgfT&xCRU_ z7+g|n#(Z9#&&QyXV&Vz&`9=)?nI}K<;b_P;;}9Qwh_8t_a*k8{VM**Lh9zO594!f> zB`Z30ia$7sgqkr`5~fO4^b0?HeE3JLZ!A`-EWQ}^gr?DuC%$pitvd}KeJm%a+L?I_ z(n61Dgto%HjHjC&E{uBC8&>U@i5kQ4{s=X86|D~NfQF~B0OQiU;*UmS z0VthFE{oAPHK3h?8fa)535B!y(Hrx(MOWe?2CLx-8luK0PQEeh&h0*(W2zl{F}4mp zqJeen(TO&nh4RVs;wtd~L+ua=`dx_lU8srP7fc^wM7~&)&BQash?!zd^u9Fkz9JTg zHPQRh!260?FU7OzX{!{qRf=cR(=<71njFujpQUotQaK){AH^Tw#};FNAJ$|vtdD93 zQ#>b(vr6lriiN57J;i*7#?e_-7mVpEmkXAYi_o87wdb zUi)1L4itDTUknZucx|Q_94PSG0x_5ge2ExWBGzJF{(8y2UJ40R0Q*)cBv1kD)8r78 zCU8w<`%*as6`*9`qyk6T!*wfl4LwPT_wN|>A9Jj%{_N;sRdqGjyp^3)(4Bz7Z!A= zb`5`L_OOA!=Wpm(<)Op)2S^P~RY0jh*jn+WD4@O6jA5L87#G4EUAh5)R~1>u=2~C za+wPXjDnb(eXN}Bo-_Pj>kn}w-!=^^hun%4yu$E}JlV+GaL*Bz(R^ePAH(pkdGa-H z!@xB}d3eWWK8)dec(RALv1RxWNgg68xL^SOOO1v}O&LB)l1E7j#!w)&MQSubYKlP? z4K}0I<5oNFQ$s9M3B9UB)cSRC$(A}d9h&inqW+=S89qb}8KQ=7zw~*|WAVF&LQqsy zhN?jfAFqnzRhh}d2deymsxW+-DozV5pP|Y#0?R*A#g78Z=cw|W!19HvxG=DMkt#0= zEZ?9;Y+&(j2soU^iR#5)QDm=8sp=daZj|R z`yPR9cV|au7yKF4mumEAwFW+~8I#nulhpPMpR0;WyjYB;Nat8tv3(6{7kj$>dxoFH>}^a z`k6|e3TCST4``|yc2#Zl?V0PFHa`yqGbQUxDFO8+uI}5T8qaFd4V>{k0@))}tOU^T z1J~}I8D>eHQ)-3x>sI9{wN>KUGg}{j?&WI7{#xh0`oLOt@?}^}jpf3|a?u#AGVxkt zx!Q;?|7?BA&B&)-tu#)U4+z6SvjB0NFblAi;?MoV0$8~5^<0ami$%n-R5qKySWibS2+-bQs!_UjM^KuBohg->Ts~yAWnlZ*o##rr`6#$}b)y7)G8D3;1 zMOHgz%xK1V8yRo2W6q&woUxHJHaq5tf_&P7F4`h6Z4pxLY|15DD8nZ!WU^w%)tP3@ zQi5hF5txdq8M75-wi3$lt%_r-5{=1mun(!kZdDQ)zFP_1t;Ax^tY++1YV1~$7`{gd z-lIeX;xT)a1jN1HU3~OfueV77?H3$Ta zuW^tMaAb;kdodr6Z`8n&ho9r?F#HOyUEymo{0<*_hp)}>5kl|?L1*{`A!341m*LZe zpy@&_hR+ki<_Sp*-z$Xg6$0M3UkKYDSbj)|IwT}B`g2zMIcr6GQ-`Jh(YOBj)JirF zISU-6Im>9;FlQMGXu>iUG~UKd?eJ-9XQisp2*MLIaT%XL>3{;7u8aj+y8P$cy@#La z4u1SsV%@LA2F&gq6N8V5k<9LWE@_`jVa%?5FKORPVa$$Qlay;x2(wG0i87jmFgvrF z)Ll&)FgtRd1fM67%udXbwOMi)vkP<2cb zZ&v!IW2-0jt9Al_c~Q_+dQ=5_)VwU=)~pb(5{^^i|tB}=Wrn1Kjsr#7GJNulp*wYtD@K-miA7Syno1z{|%A z#)0>GMX+CCeni&q+kW5o!hgn9k^?nm1@L&CNTZ6me_d?~Wo&zA)&^ zt9vd^sInw9dHAK2kjJ7YR_Y9%kOcOa$0M;TnlYKPP3FQGUT!7j)(}i9#JwBf0X;8? zJ$ir6&iwZCg~?TJ@r*D36pc15iLuNMpf$!LjXc$B$fGN$F}u+}PXOvwU%t+k|JZq1W`}HNF~8 zUPA#rZ;b`~p@eqN-u-4twG#>4kok)k7CkPGJ#75S_p_%z)OHyVt{}lHNIWhm;FuT* zE+O$44Z{=%7&m&F9H%+VZGZxLf*cDl$wyTDr^fM}pwYg2fRI2lZdu7KYZ%U2nsLV( ze8*a&0#ELkv}41ED=JCG#qk5~AGtGcWwjfgIekWKK9+Q>`ZYYiRpLiGH{Q1jjOP$8 zdRl{*_B z_QjrO9+A^mkA&i!rNJRmd7Ko?5+J8Y@)Ri;SpW^y5~spS*?&Iei5+)dE<6$Y zRkaf*yyxT}5CWyQtDtD~ye~4rU2E|-aF@wd!FE;9a2+8UqeN+xXhj=@*Rbe{|MC^A z0g^6xQp$&8+LvbB=E-e79IsT-jAa5@CWPbV8?a|9kaa>hCPTteWs#d7cna!>Xg?y> zV4LBmMf+*724>%zcN+v<7voq`P?;1|CdIJ@%n%YZgv7B0%wZCAn8e}CXx`uxbc)2G z&jx{aVm%wUIlfa4-6`vAL33OVJud6Gpn+qIRxRHe%aT+!S+z~pSeAsc$(ppu+LYl- zY-EWo9B<-)sazpLlyDRY%^0NwjZ)$;d=E*ViZWV>W_Y1O3YBm?OQ0ERl%O?A9Htt= z&0dPKR*7bKvEnFJYGHa8B;hD}vC@#?rAlb2qT@|8Fn&s6snVF?WlC_FQZo>bFH;&I zj>$?80;gB(FhRKYLIX8r-OhJ!cuF69BW_y&3b3qzrQAsRiFxJA)hZ{3j1wn)cMrf4ql;n-Aay(3_%AMh?ZbO{uY< z*{&)};p93;_s*T}-Bazx5G@X{hTf2cta)H>jo8P2j@w_!vOMw7#7;uNQh~)bp!qi4Gv5_l`10Rtx4Lb7Q1@rwB@N9_bFFYgRx@sL&2Mt8 zFyx{cKk&&v@bxijZ*CFREh6_1J3*S)V`CCs)mpdP-b_4c8gK6nGzdd%S z5|@A7cRlUWVp~n2TjRyUr=sxmd=ty}V;@;KddjN$5tBh&v$`+EVxrSr7Rt*1;vwp~hvic@*36r?`fq1J)Tt|i% zb8*F7oj_HNyUx`KRON)df#z=>37bc1B7@Bv8iNW+6chawL|;J+Ci)vm?Tw@XQ~krF z;bGD$(2q|(MVc}{zJ%x{#J~tDt~Y>x^ol=hI9~Aw%Vc`L9~OXTFOYm85|5dKu@T5L zArf!X!HfT572kz_?6FB))FdvR;iW=UsSuC$-P|yay&@zs{H_pkSBPPL?KClXni$3W z+PPxzT;|up-B4oq1+fOZ>}{ShV zqoSIH|1cE;dPJ}1L@Rwe@9SGjyxU8wU61e#H+V+(9`gRIPl1;o_wD&gP8+5{0T1Y% zqByFk*ib-k62*dDz4dbz4{L20{b57h| z`|2OC$yOjn7l?7_Ji>BBj9$oayc8E$NpHkOR^kl;FpBg7Tr4;=DQo-194Fj+Q_Ur*())U`M=O<1`hz8#?!bC^tQI>~3plhjK?|FpRU8D-jEP$4M3%c|2LD5+GQ8DP z$FRdWMdp8+aPNJ;a3gT0)7-Pb?NST+yp~)~T5cP2bn4>}Su82+YeicumU`@0W9JX@ Qf*GxfT8Q!(=$4_^vM}%nMr0-Rz`XoD-OOVrRnvFiR1M89{QGPcKlyuIe(GqGe+nw zqm25jq%@=6l9OrFCuQloCt2IDJ!Upqvd!sw{a|ypQEwVy2b;zNE+hHW&U)ZkI3EIs^7O1J)K8k3Z2OiwoI&BoLuiwX4B>-$=)@>Em0G0Chq zrBijRJy6x44ID@opwS4lpX7}6EK`cnYy@4fb!g6}rpc_&f@T^i6b)@z)dqQThS_Y) z%FIYlF{O`G#z76*pub-KKiWUT3|(5EYZ%4#`f$6}^fXVr*>GhTjOH!)dQSJX%;|~T;X_)i0>@16ZxY6!}NyAf(`mrXR+`@v|BkMQa>WYtRIyz);8xUMvKv$W=gmDg>{f=NhwCF6EYDk zCbWyUPPL`M6%zUxbE5TwGo$srY-_+6t?!YVnvvX9A3knkw7$iJ*uVck&csOC1^U_F zX#8(LZO#6Dt)sz^e{+O6pzq&MU|jUyF&8wJV70Gx@uypN0kEvyf(<_n&b0l~UIE#y zZu_}|^0RFYCU#{KU?+gjh6Zf2)xcS&t$}HnzlLAvL^2847L#?C>&o;@%7O)+k*?3k zG@6qv8Ri7XpSpBm8vG4y6Ca;7HYqbAvJC@EBqQ1SWTLefX1H;rDV-Ufk&((I#}9}9 z#xTkBw`5~_3X_})TM=XRQuu&5Ni>0HTA#MFnHi>Z_{GkdjU!+Kf=#V~A7eCU85=*8 zoo->0&GsGuo5G~PUP_;$8X40vQ_m1dU9%ZiZLd+Wo%FQ7t^j?%y5$>D+UIUY|OMICXX^Ek8U&S zZ#|P`NlipMI)B8JZnBu*oiyHPPE0jrS=9oqM;a}O4VGt2=~+gzg=w(mXk(6TCt&ak zyf|#%ZBvw*F&5eyo{dZRlEx)kw{<4XXa-}TiVa^95^cVgX!Wtg2H#4w z`&4>HijlU1t`ypZ!LJdK4PO(KZ;HIpH|1;B24vSR3_6B=suj<$&AHk5f@9dmVf~;g z+4f3!`@@cj!-|i8k%t#(wh?zws~9|-$p-tNu@nHKe6^aEayH|R$uOlbldzNjyUDV0 z(uPNC8Ai)IJyqXa&FZ+dys0?1T>Oci81LCA+SDpTfH8L|)85g@fJsb#fxf{+2ZIpq4NO?Jq)Ecq57 zlpth$*U-74fofMB*AiNJ&Xec7tDPX^*inAR+(p>{vFfsvCrf$RP7q=`a<$vThb?tF zE&w2p3Hz83J3&at-@+0K^NBmP%XKw-T`e0ZLC7BN!&i6x66{MyG>2p7aFT%%grwYN z{!9R)}zKq^$ELgiv72q`#zc8dG5lpq}!0+3%-?5`@(P7pHwd+mwa z?JI)RTz`N}mM1r}eW3Wa`z2p%T6faZ!B(@R8s>%)gd|LgZCS82HqwRhgBFU}j>T+G zJ3+|V(e0)T3hp0CTPft&LNFO62w8k_;d9NSH(TkrzR*e`A%#R^CkR=$Cj9uAnw8Ny zt~)^TRU}^}+X+H4qPDJxJeSp)&hULg?h_XSB?vK2IsN4GKy8f7B)q~HZixI1aBE5! zNl>vmcUBZOo+y^SER1Zg!2%25b_{~ znRjFGD1ca9a+W}5!SbL4A)_|eKA4;p)mdg<25sg_{9H-46RS3yO&j;JfqNsbwCked z+@PHs9J#@{*a^0i{VZ=z_>za+slSv9q#XQ(5`<_%e(!N^$i*JiwX4*m3YI)22pM!_ zQF@mtr+djv9B8vp;unH8lvuTqZQ5{?g^zxW3+^p5@c>#W@hbsDi528x1LdsRzxW@s zF21hgVnO9IDso1pwG-^Db^n(y@uRQw*KwX!1FFb6m`+L%GK5UM_w4xPx9O<97s&T8 zDoPM?`HwZ%KfCet9ctrKJbQ{)8z@1@w(om&%Un0@Jvy0d)a)9VOiB<^I_|AP|G9JC z*KwUemvWAjb6Pt=$P@R2VJ9xdCeiJ%P-F|iZzw^?sue+xzY8w{h;_bK@MHySL6jiG zV{E|NmpAMhPFKQNmYjw4LRD0`5K0iz3S2 zC_#w({ny_aa&K9hj%yFP6bNjAK+a;pPOvT| z2s!om=hFGx@8?jvRI;QJ22BY%yx|}5J zNg~(@Lbf(5_jv!ao-zB{%~m2pN|@`BqWP{^iu` zuJPsjS zV%w}@d6^q(h8%ppjXJ^(HQ519`lk zx8~EMop(~3tmWCYU=vCZQqV7N;F3ib0n!OrB9+vC@ z2qg$v`|%$>Qxad=Ei+wUdtWB;%V2w_MA_cY>~E9Mt?VDWbzC4Qyi-MXs$A^^+nM>H z7nAmBAwaCoeUy-+;Fgp$K(^-|zk9U#9+~M1U6o3FDRf1N(p8A(t`l#)T(VcqbpX(C z&2SIf2O~*p2&lok`mW3JnHy8hhp1%^@Z=`)1B@%HyR~LUZ>ADNk4fH5t+ZMq(qy!;Dr?>xd$%z3sT$pwM8R0V`)b@emtl(KI z&y?rh@ZtKy>Y2{6(?L~A5VB^(uRFGPsJlsb{bGSFhFzZ$gp`^1p-)QVZ_xqYV#zIN zg%X53FW*|=JN(=|>aTS?sRMtd1R;|azqzKYtp1)06AY@ZX4|iZBQ+%mX)~>|WA?g- zk6oB%04ZVPO4wKI1R<_{R+Nb2Kl)Q<`ohZDBJo=!(M}kN@U8CkB=;i81NTMVuv+q5EqUQFm^W;cJU2>SGwquhUYkL6dS^z}hjiT@K4TiM zb}(N$cQo>e>H{?^8}Am`km0U!CLlMDc&)KDfERy9j-B5)eh z)4Mo!{bj#t%i|xf(=>T-c$;TA`yC#8z&kt$=*=AkcykAx=(QaMv;KV6`nA_HU7b1& zUhJU-daK74@H!6ydY4Cm`i@WVtA+3AU|n5f;a@b~Vr9ca7XC%!5gVL@^FPLg;F&}= z+~u3y<%4mFVl)7HpfLdK;oq-%mjrc`JRIio%?>}7`o3-PbUG@GB7nhY>;Rj_*a7T< z*1!S&4EHcrTF81S{3b#+5qDg_s$Zx3l}|tH=b+KGVR_GrVd zV7LOTK!X&h0|qHTKqC|=z|aH;Xj}pX7?1z~jYgmV!w|g27Jk5=W%~|{V%e~rknO}1 zPw}#0Cvn?J0+Gjw2CLE_1vYf5v;K3Tm1n5K;3kxtqrP_8(A=qcE}R%0G4Ie7=fJ2t z^X6VF=-9%ctD6%R7V3WQ6Ye1Bw(CRx5m&wpZ}RfQPz;!t#$j;y7=Qu0(69>%wv5k6 zy;)Wm+2pP_y}R9~==Xh5PVI<+9`J7(w4ckhgl|CY9Pm}1XwOMhYuF0|%k zLlGfG#2@!;>!|syk{|N;>Qr&|pwzhh>fc)x`{g-%w{|GY8h&-O5bMzON4a-C4$JKu z3$K?RObFwEd1s5*e09vytd7VGgk-1IyEN-)xc^rl!jK@HaX@OeSo>W(-tu1 z1})G?8@7ONaS+h>8Vc@jES|n(+uXP&j}ngq0%s4;Df7~_^TJy_H_V^JKke)=Z!600 z59l56taFo9$M7K-hsF-kI0L(1zSEkVVT(Fmy|VyJ)E|H!AEF; zh8(elNyT{+{+M3Yv&o~xGbU_tG-8PpgaN&spoga;jwLpE_>o_fCrxg1A<pC-8a*Ptd?TK5^)kQwLA}_||Y(#lNXq{-%n?qpEC} z$!llw-gpXz90lKU9UqMWIWRV_JAuM?P_wC(OvebkKAR8Uv#kAfVY7 z6!;cD9MiiOpWS4gFpVQD8P&mScRs8P=G!HQQp5g5e&|j z6hh#OPKEbKXpyFd5QsS;(1B)xP=J{r@L!t$LBWe%zt|P#hpcmLOAg_K=YAhQHh<{) zJO}T|Nm@GF1&VShQkxnPBi!HGx?>NPHm5ACKv_HF=5kC@u4E0seCYk zE*lo8$O4rQhN^CkGUJ?GU6b;yRBD)y#IQeMha zd3GuBhVP}kwD<93AFsvSk!+~sNhPnveO5M{ zV=x=CWny5i*h1m+ zM7KQAw=v%=PYgwV>F#&kO20h3$ibCxz_3BPJ-uozj)L;y4R=wuTHItEznu51uRd$>a@f(1Nz5^+;aY%c zeV9p_%x|!>J(&-0ADY5f!o4$C)eKgRxjE~dN|VoO@lMrkL96h9Yi(CJ9US}hyKQIp z9kaU0gToC9#z0F6a12;Vpw-w)2=Hgwu$R^DWdkwsZsl9-Wn&e-hSk=vff%@!4K-|w z8a7tpYgzAFwmBwVWJo4P-C{doo)I#KY|A>fy^;p2XXEPGK6u%X4NqC=DeH^p7uZ-h zshIP{fUuPhDdt)${27j%;k@u@B^%ChZs)il}XGpn+{cB(^3+KdC$EvlUZr*{flUR7?`1dCz{>otXKjxPRQ_2{jW ztB-GT&_PvN7qfJ=&t|7OV3i8EB&|(B-y7Mno%>6@OE*KGcUiZ)Y&1HFsOivQ+st9# zIBgoMTi{YaOIxsMSlTLbOy!1k22g#bBBxbu7;useR|RraaKj7{WNQhzN8B)QzH!4V zW4Wb=w>gX&i)COiv_uAb?78o|FmtmRW&i7m-*wHVex2y^O_@_;;DrWMqop~h8u}dw zXh9ANaGQb`3oXOJNgw82_R0O_%&sOc7TiXl2U^90U1PQy1hjSsgN%4h17&I14nBcL z4-n8Qod$tDu?%6{dX!%X2+1$pG36Ih#Bc?-l~60~ zLG8|Z&Q0NWaAXIk#TzwbNjaaLT(H9L=E!bNi$P5pVw$>g&QIZwa^xtd#eHJ1$%gf!$9mEKgW>b?H{R6^ zhN3UgrBw7(_^qP*RZK8+5?-TibqOADC0a1NGbW`{Wk*{bh zuN2jljpZjr{$ykMDN%i@vHZNqpKmO`AgV7kmfsM)Z-_yds{?-!wY8#;!q1hw=1PH> zGm;JSB-eS8x56)!ycbGAn6i)!izMwL$w%RrNnXpOKwQKy-;!&gK6#E{L!j4E$$oH>!_I_!N|30T%C|^iri$(vDC!Ux^kT z3LZ6rzj8b{O5Bf;=KJmxngA5@vzvXJZay{Om_S>P>tc%F8DM{a?QraL!?+^zXKym#T1pqd;|b*{D}*vd=p_VH_6r(S^-( z9R+wU1TAURDJt_v^G;8r=7(Rjm1cFg#>OcZori3Phisg3aXH38byk$}4!X;S-{m8* zGz-gD;Z#CvSFwk{L4Up>-0OYGsU_cO{m+!l>#tvO7}d{bA0=1T9{-V8-}`RWY>1*` zJ?mD_hA28#a=J=Rujp9EyVmhRs3SymMAr&22=__Za9(shukcu38=$dQ)#4c7PtG`U zo%6!XJ=Cpnd6wWhO9()3g#&{imka(%xa)x+KM?#ex&zM( zEglH53V)T5tHeuL&)d~xyV^@xuY1+5d({D0AtD?0sWto5ehPm@O|GcDl=XW3s%%G65A+zk?2t*>M?%^MLA+vk=Rz@OGLL4F{m*g zQX;lS{*!eBN0WQTD;n7_(sQIQ7C~F1XfBV{ZpyZjE4t>2?idw=D59vz6SWGzNOV~w zx;0kIwMcZwZXk*&YDz?{!v7$)_(6Z99dHSNPei?`$>{uP=}RV%yASJ1P8pR-DgzDD5p^Ll>~E8uOhNuss#Nn$=gc zQH__8zMhS0yo^FCxmL#a@Os_IdI<@6x1*3#q87^;JxY4JRIRp^A!it`u0y5V$R9zW#@XruH zK>zpv1wk|SRO`03u5WVJ$xNHW6YDdZ-q5GMs)+@vXZ1}k-?+3e{YYJA(nF{7f`5Pk z#-V?GfyTjG6bR_wT;Q7fTGLD4<>uaJpkuk@UoJJOciAs_?w1;hC#)4_9tV|FAQVhV z9!C@&Yrdfe`Ue}>b*Ck|ydN|7Ja_OF#`^zlV~x*X9FoCh$z++6vuu?<4eBsVLuC&G Te+iTF-(SZ0$Hj2r5zPMqBhR9H diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_numeric.h.0363404D15CD0360.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_numeric.h.0363404D15CD0360.idx deleted file mode 100644 index e4798fdbc4755ca8bbc1b805bfde05c25c717220..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17862 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 GH}W4G?OJ^R diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_pair.h.3CECDCC6EED8CAE6.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_pair.h.3CECDCC6EED8CAE6.idx deleted file mode 100644 index 901e226d219bf804959ce1451c2ae58a3b49c157..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8792 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 bw3JT{J~s0Ffuk&Kn3QJr@V{a7AxZxQU=e-+ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_raw_storage_iter.h.BB95DCEDC42F529A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_raw_storage_iter.h.BB95DCEDC42F529A.idx deleted file mode 100644 index b29322c6c8018bba08672040fc12683d3c4f414a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1184 zcmZuuUr19?96r11an9>ll#+Xpn`vN*H}?=W)&doEtu|bHN^xE9uI|peKizZYpF{|Q z!Xh71LJAi2R6PU{Bt#EB_|StDSWxuRU$CGI34G{5I_J)xpg6W4XW#cb-}!#uFB0hN zoG(VGJsucKX;fiHw4eP5HT4l2JMfP~lA;NnNIKO_g=S1iH55W5L!(4ejG>IF(?p6$ zgi)GA6Pj*HrbcoGqxCe+uMlP<&YQ3k8edU%G zc|fN`Ce(DIEaI8 zt023zH`KK>9r+f@pLPj$M#pj7X%(O|B}=c$&aOQv(8GAxiFpCKYiRx5V5{%7ODJQv zBRJx;3ea~xzVY9W-u>wkN*Nu-VW(Aq{@run>*nL&FPBilXj(85%=O=H@qfd z6{~KDMZ`&*bVCXvPT5kG@UMUBPqKC@;IWC=hkQ~YPlO#?0Ey7t^yg2X3{u z9)|8)Gn)a4+`h-UN6}~vz~G-b;kyKpw#DbQX7#math?XSe;o3tKDTgUeLl3j3x@ER z2wyvhK*9{>>joG$%?$E20}OAlZoXcCP0djDF}E=7_KFcPRZ`C9z;n|_x<3`Eoe2F0 D6#aM@ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_relops.h.6660ECC9755BF665.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_relops.h.6660ECC9755BF665.idx deleted file mode 100644 index 233a288faa55132d1dbd4ff60d48044aee3744e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1428 zcmcgsO=uHA6n>kuvE8mwDSGfAFVadwW0&?MAsb^Xf!wN;o{C|!nQf+Qc9)r1=u!i= zUOb41h}Ry9NDtyk5ig=QJ$MjL^)4ugcMsz1rrV|=#U^p{4Ff^ECk8)SOr&7m`$A2JDYg%m-hI<>S#O5#hYE@EkjY-(G^>52( z*XuKirq04F?gT+Tyf`+#m0y-{HCxRk@Vz@f>c}5#NO(- diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_tempbuf.h.42C5B1935AA58E32.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_tempbuf.h.42C5B1935AA58E32.idx deleted file mode 100644 index 8412e4d8022b2de42ebbd0e6fd43e82311ea7ade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3864 zcmb7Ge^3^$-P`*fEbQ$byL-qr z6*4MCyov)iq!w2mKzbBE^RkPa_s|jl9)E z0gUPbkq{N@K~+YNVT^o1NkU$%391;-MMW-52FzM4$}L#dMY$g70Jx_CW2pd=>R^f* z(nUXfDC!L;08qLJ$+UpdgtcWPx{kQ`g0evH5U_&Ubp>kCc~M514h-rcv7(|%VY+PI z+sF%$5DEl<>8cB(Yzz)ih+o4}3sFJ^l8TN5MF!P^f{wifgrlGYRSgr08&QB4)v|H~ zr9|0cFL5U&5LRW_Urv}sbwmK^^{QBd|FRdt1wOzFq8>sHsF?T#WicwFCjJyFK8L$5 z;B-Px6}mz)k?gBc3oiwsJkbXbvNA(e;AP~&(*j^`VVMiEBeYe~F@W<#R2)kg)d`a_ z{5*6TBZ(9Sj-(XuR&g_A0nU&p66(i(1!e-M24%j57bV^!;q?$7Qi4cpP=XTS?uS7k zSaP&;Bxj+9K@;z^LecWc06eNHEg}p>1RaEKP?bFhw+c8iBB(wHBPZ)PqBNQ{t9672 zNhC))ub_IYyJv>h9TnT*{N~sONVlf@0OQmmDnU&OA%1%9y~q>#R-DF1@<~AN92u@DkC3~O_6z+@Vda>a&TKy z8qig*=<~UCA|JSyMWM^7vRS_6j&Ha*DWSB5@`(~Ib-7$YO?8Q~AO*eHCFHHCf?ror zk;?;9<QWT&WF6C5oe@uOZ3(H$t zO0_7Wm(oIhPZeBSqn8rIz6)ozaTJ$Av4UO5h`dlq332osijI%_GA;Pwor-@F}>uOzV4D_K&!FUutsh>+n(5-YEb=T{i*vH$IDq3DKD)@N8<9+msz-dG}`3o zK7TXEM0nL?_u+}>AI!CgKeTdXSAWwVoealbrxUKzOCn!4@WQcuOhO+sWA8h^Hhy47 zVu2~qQ?2O~sPG)W=lWt_^*f3KVW*(SrmxP(} zn0=U8c$mqK*}cr#UZ%vbojqsx_QH?cpr)`&SZ}Dgt+}t}2RnZ3vmo{0X>sRYi@FwqK#sV)j)!?P_c&?pA+x`h|<}jV7YbP(^NDzq1kQ*)Vs*G9z9c zryE8;Jtmp_cgz{MB@|zhO$XaYdTu=O=7nYp2B~c;|NdUi<>myA^`v+*jGluUnZojz zg*iMwX89KTR>UkNTgi)A>SA@)Sr0w8hhAuiy>9Qbi$^}3YK0xSM%%8@$p$@+?O|*^ z%#7`5@Fmr8sry0KFtaJl)EEdH+s(}DW@cuXV|$s3US^YV-Z7e!v8nx`gC;rFZU60= z+VHt9(?L<`tu?QS|LL;Oselj0W#h6V5HICQ1qR=(zxO|}p)2({i|Ad{XI1lV>&GnI zs!w;^kv{jm2+gmyS0@{!wsH1^!>IE`i2m-?>Fxe{Gt!UDe`#bpGmZpiLvRZG=vYwW*7-buls9QI$J%viCI$ zT2n_t4;&m0zHX|()<5NX;gtn%m<|$?*RCBn_>&W+gQ~M{Emt!;Pr_vuT{xp=`}D%a z?C8Q7_N$o(UUx4zangji z3#uKW;}6AFdUt>8rNO4%?|*NX*n)xKw#LdK3&mV<4e__PzVZiC_RPlyOa69r>+n7E zeK{KQw1%Dyn!b=<7ejfq$qaBlWj>`S{`p_l9H+a0U)SIp8x;= diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_tree.h.0C1ECCD6AD44DC1C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_tree.h.0C1ECCD6AD44DC1C.idx deleted file mode 100644 index 00d93fe88a6c8f5a6bb127dd0a3076cf2ce61579..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68546 zcmeHQc~lcu+fOF51TsnH&ICj@BVa(;+;Fc}t=g)uwpOjyzNN_GhJb)u)mj7>Pyx3p z3hJv?#HAuGSOi2cZdD-`v6Z@_7F@u!TC4buFV4*M>mO-*a!yXZb3L`0pU=HFcP77Q zxzF5X*a!Xl7pUa2zF{BCm>eD-g3Dwwj{h4MA3Nc91%L7SkB`@^cHM%9jSY^E4G-@z zD14@$eq>0bpPs)O8o^&p4foUcjh-A663buoj*N^B?Ws4+nB%ASn$`Yq*PA(~b<-Dy zMn}cP>;LK3{{XeS+edU`6 zAhz`8-doFhOb&_ZDeEycenRAg_?bOrW22)ZWue{1@_(nvA|^zJcMA**oEjG!I3X%D za%xz3U}&rMefa+Z+qDZEJ0U(UFyu8)LgJ%i1IGWQ@}V&?!SOR=!g&&g@b&*0PpRe?=qGQ5iUq9`Z@5qG99^%zI@9+vA)~%Z?ZhAp zoIF+`m&rWG)!Yi1^Rp{0b8037S7`hSt$gz#v%}@G<|?_87}k%>8hu>eik9j4LWeQ( zFs6C)A+sYDGCO-YMeP0d+Qf+4{YKF;2fk1xO;*yHHy<)P0&6OC`Mhy!=EXVVX_+Hm zr~o4i_?DVJq?SIdNcbZC78lu6sEj7d_?DVJq?R5=pXO+H*Z8JFixuQzg$6WzNG*BO zexuk7zoMp&rz^;GzEIPLR7e&Z9uenB%4J!nXGiV5p_KXJpagR%!Q6!V#=$a$%QA(V z&>RkOC@zO`n6db3z3+ObL>%m=xcx9bL2)Nwd|Jt#R_dhkl}fe}#+Q`rB^cjQvbSKI zW9OD**Fvhl-_C76j5F+28TM*Po^P+ow`U}L&R%m4#trtM!Jd=k$+Rk&hU%}QyRW0) zk>q>m?t5VTl6HDYJ4^C(wNttp!n@SWE;TF33)D;jjE!ooQ4J*dS+(x0+EK#QYKLld zGYMyFK(+?zZ<&TE(?IQC)_}{fyg>sRVEjr0Ucop`3(~YudmFT11B~;uAP>gpwBQ_! z?`s|IYoY$FV899nYA=rgc`zM){^DLc)ewH9_I{*pEya`FN9%F5#f(Q_Zo}u)LOIYhj$A(S>m(BP?7`BX~_HE8fmt9%CI-?hr$Vf<37d4N578 zQmVPsektW&N{L>G2FIv&$EYAlZlWAbaD5YHFi~wJ`CgT7ugXcn8`NGK)S~hIq-VZi z;e4Dz;T1sPl`Vx=qdemeTs<>@;%&e&T6K(Ogm5PcJJtFR#ix{l2H)C|-`cr0B~)ZG z8tkzn_rTa>N17yjH1MMDy=zO5D&R;JY-*&j^2_hW6+O#%tqO0u!{g(<57mX9w6nN7 z4D5C*diKFz>@Xa>U^FizKZyeq(3pVeH%D~UxBYF^TAJ_L1Dbq5I}6H~{G!qS{edxR zG&({-sZ~cu_X&rQ*_Ulp7?`pexOH~Q)^8qCKu^D!~iPJ?nx zQ!ZgscYPY+%e6$RgjC6?+dWY*f`SpN1|t{BC;6lruOK3#nGM#RVl#AL zqin;KdQSoe_XzDh0-EIafY3gG@g2(Pj`VsT2Mv^a0|m{cGOAglTAY;DrXh9djf@~K z6eFM*!KPvaVV15Odow3l2)FBIt;}TV`xy|U5u_!Jl6@v0P3rmy44q zX|RqU))CF6I4ey_rYRx$T`hiB>m~XbsNGO8 z+dAysOAWo-GQE&#N2cAXrhT3Aotm(3GkYTmdoH_vwBs&kBEqfXjLNi-98}RFsSViv%|Tn!vnsoT;DiUj)NzFegedq zYCjLc-KSKI{t!_aQQ4|gK0Qo#VE>ui4^dtK)H3e1 zjHiSPLGwZYZ3%c7xE==3?uMzXODYR(30TfGE9YFL`j5GQ$6N;icUiMBVMyVPPtB^% z&hPj8{oy!d4Dyu7Q`(fLOqe_ODbaKJ7~W64!ku2>qAImcFAA9(a3Q!i4Wiwn1BKW3 zG??Z!El5Ih+~+{DB)M0T9Fp#oJMNTwOQn}!&Py;~38!P;=~x#Duf&{IVyz{-25Y_s zYa`)IjLXElB)l1O+>Al(@4&bnusjcQ%!B0xSWp4hU#fo?3pxzrDokI6L6g2OV*VGg zo>KWsSjS6PKM7yMT(4o`YX=(K#GG!z{jbBC*TMb2hjI7d{yoMVAH)57fpITjd7{EG zQ32iGVnxtm1=Rm^MNm47H{tG^aOn5gihFIvq2FUW?z$a^`nwnR*o$|N?xzkn)Zv{a z{22FqjCYi{jU+=8a%1~CeiFB;Uks5OK9&BdI|G8h~0NO4j;4N^(ZR1&(M<)r&^ z5_(?WkY3-A(DPbP>erJHA2yMOO(gVuwvzg-uzWjd*bd99D7K37l=^p_(p;xnNca|| zyG23I>o!H-rracXJ;m0;^&e8&hm>BD|3*3dMnTW>Ii-G1L38~ZDXx)%^ktq>H%|$D z-vTAKKnclHl+99<(DSXa)703B{S8hGdpgbcUNCZU$jRB1lXI9J?bqr@@(Z(JT-)RF z)x8gP3qcG=47VwU8~dA%R#bmDR)@b?xF(EX@HY$BB;2%cO~5p$#F!t;uGpkC$I@VCgZ)B&1DzPj^}eGO9*@k;UWykUiH6Sxb_q|5hc)3 z0^OGiVuS-fcvWdShfq+J*o*S<<#kz+ zNF$I&SXCnelgClh6~&Qe!xh&F%M>+sL=>+&Zy#neO1%gT zym+{!&)UQ8t*4r`>Rk^$bN}|zJ5%|cfcKEx9#VYG$sZy}a(NQ|tstqruS4*(KbilE zo3lp@9rVXEzJ-_es+acAoP;d3U6xvGaavT^;j6hTrXxRr{Df8gMCUo*xSgrIKZD-` ztO{3D;r7BXmCuoCN6D)_KuyPhQO=6U?@d9y%tX z>zKI-79Z;PjE}GzPBV#iG&sXBXBhD;=GSwT{3{r7?$GPGNxroVbX@2mz#IZl`9feQ z1b%`oqrp;EwUiYP{pR0Rvp%WP*~t8_#(9);VrHHOkGZaoxn4s3^Yvd&Up!`8A_@yo zSYT6O!Kxr1#pW$;NxYphQk{&{y8@$WaFTL3DecHhgLIX9x(d>O43$1Z1s$+kOY3WC z2rpE7EL4jchK;#CV)NLNg=US%;G4OjnK!O1M5=^T$);3kez~Vpzqy?jq1Y3}p4N>$ zKiN|>Z1K@#L_|bHs}iwYw_ELZP53<-xpL&nZOWB*SMA$9&8K?`vY^OH1I2vaKZ@yN&9l#eIs+7-{~9+ZZNi->De z#BJAalph%Av;q+q5!a@OJ9&ZXbn_p`l@@<3xVCVlHfQz!m~HPQ&A5jLd}gFYT~T0eOAYO}A2mpS;%pWeQ7t;JR6VbQlJ{)O}FBkx9R;O7%>m*d;z_R@sF zEL@X?>jbwf!J+KmTlC7Tw0sYGt?)It+-UnBWG9fFu&SL1*X^I-KK1!l zUj6e)Z9eHF*adH`^SduwEXqcs9W>gpsnHI0v1QMXUX^V_rWKi1tD4pY+dp3(>iTOA zZ(5B?52I3C#gyECLZaSSwS!-*QI0FhacEK4A&vZyhLjeSnOM1rh439#eh0>1bMmh_ zNWPYnua$6hVDbIF*PM0{IJie>?-AnZ7&v%9Xdl4%4&`)*YAzUm95hhw4brL+92nKC zQOyZ*+NY1#$pg!GA?JXcgH1Vy`)M;fEIK{)JLDXYbFiv&*f@D%=~b_*h=@2MqE(4F z>guGubFZG=ja)f$KY6*>0<*KTplMXnrKP^((daY5}sr}uJl`ElMxx&21Dw=ha# zCtSX({k$~S;`wW(eaDXb7JZS2sE?>`RqFe9D0m_3xpgm3{kJ#z+p)d>bZqVMeJH9x zQH4!K6{j|jE?cJmc^}W{U4(WQA#Qxqr=-9mw)w&XYW_Vb;haZ6=c64UoDaY_pK#45 zp!3lV63z!)2i}{Ruj-5Qm4oDgH{dV&GFwRyH*(wJ~epE#qh4D`+;wKo_tB86D4?fvAI_J7` z2~sAcOjcDUxBbs!tjO=@pz)1t-4qQTgpV{nf;G zPoj_wg={tzvJIcrY}0k`89!M3EoUGxo~#|Rvzq2iOWn?IPHG1>g% z{H_ny3_1P(Zjj3>WW<*v9Y;EDRUPM6c}=y zYA=kh_jURA* zY8A4$$l}_R#SQ<$-zDFe-V$~yNE`PXyjd#eHDNKg23|z2 zAGv;;a{cy$e;5#56?4hrNxl0Cn%rhB@A8y%TF?zld$|0L!M%w`@hMMH(^}Q;Pr6*r;O$)T>l^-4+5zEQGg!> zP=8MY&1nGjH-(j_u+Z~7#geC3sQ!N+dwa&MZuKiggA%G!2_>F6MuQZUM~cc<`YBhc^ea{3 zYzG?Lp}9M>t0aF;dpxJ1@{Kgt2+LE{t|@BqY(;kDfFmrJ{43w}x98}!oYnGV)lWNr zMF9*7V5}OzeEIP&s-S=GsYOIYM6@aqX~w(u#F)I>h=_=YRwd%gsYhOHi$8G(5fKs5 zszhYA<`ac{b5o{9SA=KwrUnzaIC<7&& ztMtxQ1_&4jPt|Tu)&3Gr*BH_@og}1EN9)9v*P#ja}ilXIV*lY4eD4!9gG`ULnDmWaE3LUSpMS5s1x^NLY^Ua zi`=bM-R+T}New>hDxdK-|S+jGuAXGfu4E|4NUw zUaJQF{wEtUptFCv{^G&s79Y(`pXwRz7*_n8U%FXA`BYGy1!bqfIm+c6)keT=S6pj2 z+W0!7i(r#Oj#hS14#f zL5ocVEwb3~$dK2zATBmEF8K9@`t|>s{;2@E=T62I5s`_d*NsFZgv8P!R0yIb|5lsDu+$g*aQvwysn0lzL7yV^Gp8B!R>?L& zFIjY^@p@@=ios&FMatjpO%am8WHU<^z142Cb#zQi(^+(>lBCtj9Fo-6gjmw-HpyVq zTXZ(Fr7D+6lK);q@=f;Cae9knPLcFReX8DML(7__By(DN)hW)!9D>bun}=kJ-e$KT zsamazuRZ!{QX|!d7$)guaavP&M5Hth>6C0nwwcT}WWZ#*!J?OR4s8uKgU)F9n?4yY zAY1NGq7IHR>a4au?G=X*3~LMO{+NOuXW3tI-^}LO?767M*_*K zR}F04GNx|6nX2TK)oiyU=_Oemc|n{a(onN)g26PtquU872BYyWa6*55iVoF72PKuP zl6l-jeG*D(gXvMllw`J>Y!NlPL`pGRrsyomkEkMfsw7pdBD|tpL?%?<_9SPCy6wl= z;3yGUMAa03QZpVC(pvP#F|Cn}D7u%-Z|XZFnO(+6DHe0;I}tqOUvli2s8+aasO|LU}SP{#RuZ9y+a4 zOuTcS800!^C3#Ps9w~)R>+C^uC^9{Qdb)WIkzHcsT9jT(lftIfMba>Is-hzp?Q?bJ zHp$A@xY8g;Us0o_RVlKaPJOGp#~D|wOx0j=gF0zufOM{84^BI^<y@fcHCxhqQ`HzK?Z6>};`${fY7+(wdwIy~1GETg`wxg8(C@Wj>i!8*r!HN3bd>BS zgav+Ce%%)pyS)>?4#9c&j$PP4U_B$)NyxI*QLi+ zcxvphQCBUu^=2tmH%U*5d}QO)$K5t4ZIj$mJ8gcdwuwrLd6Po(^)XRVQFf~(%3w+| z+LQHBNo_jEp-)t&PEq5K&!Vh0qgH1eZyu+!>N`%T^OQ85!SV#`RbpBDJpEK#l+I{0 zCuwaK9n!M)8MgE^y^EQ0=+>)Bu6yKYZ**6d91}xT(F=8IY3Vf#X-(Azlbu~C;&=5+ zwb4B!I3inZk~7%V22)X6R>P2oJUPK1sZTX3n*FBPkc{q3(^JQpXo|XZX6uC900Spb zk*z5)j|X{ti0eZ6G!azIC_0D>oR}QkW9{)kfeJ-THz2qHgIpKNN8?A!OoOMi+&|^L zpGARcgP1aSkbxvQFO*MXHP@j9k`!0=?R#@W$Mg`W5X3YcOb?X5D4(Xjj4UPY*_Q42 z1x39CsvTlD%7dePkn2ME1U7=f4t)&W1}->o{)JZrsy$-L;Xw``?7BFX@{yNPAKFq_ zu)NPSfr>y(1w1I=16>!#a=g6UyxmiFOuOK-Mxfdvro%KiOb5Cyl#hP{R+cn!xoM-2 zWIHHOVTfrd50>(6To;FrfGnw9>^#QYzwgfi6^@v)7?8yTxh|AXK*Q!TlSQ9moheaN zPSM{@pIuW?K0q85I4WrB!b^ACuL;Tk;)is=hjgHV_c8wam;eQrGk)cazk;(tKsF%w z^FiZ$&_tnUaei4G!C%A$6mbOqTvgM#Dh=k(?f&Yikej0Iq}_^sDOBz_P8 za{xOB5cA&${QH2==P=+8lXwNkuHXp%?Hs$E#HTs_G)K(8$MN?_ycM!rAu<0bWREI% z_MxtDTcRq`!+%TrG&Q%npWDI9;yreD`NY<<2X&?eaUeBN!ePP(H>Z{lY@D=$Sj6}j zF`)|H1^stH0++z%B`{K<@8$jX@}c-}UUunr&X!g)dZE>B@$eS!hZ%7nfXc+#1Ykl! zpNr*vqy1t%{JB#TRN8(1kFhKecfsd&!ESg45KCb15*VxCdwk$M-hJxz`)HsoY;g3@ zdf&=$TZ3$N_B2@IqJ)4Q+mC^xj>)Pd+c zTomj)TyW4kE~>n~ZspzKwRRQv3w93t^sUv2^&YzJt@CgGdvL-?kE}dr3140sn==xb za-Q#To{z&m5yZ>9-(|iT#*>&0V}4n;dlU-(uh8dL7>+Bi=@fHhn=|l@dbjcA$;$`7 zkT@#E%d)WRVBZOaJ-4LPyMIQv9iKA!+*Jb#^+ra$k!h+lX}NNRJI|lN&J+?S=z<2e^B)MYDQj=S}``A`*OufBp`cLm8@`8LB>5u%(oqaPn4; z(L-=l=6HSzTWG9zA0;;2c0H;4*Cr1QpIdN(>UcJNGBQ0iFx7qA@bVA+%2p@MbPQ+F zQWo6-pF<;#XI&h!{qSTjOGdvLZ7aVFIpff`f`=8nyKSx95SRVA7-6sX2y~mi;+f;c z6;n~$HkKW$#=DFl=F)5~P2h5xEhq7Q2JUAXD*TlUtR(Sb7A|H9`VJQEAn|Dyo+j~4 z7TzTBEC6Q#Vtx)_a{!^wA;2CY@p29>=Lr6M4(5~iB*&iQi1`&9TS4MH2=gE@|0@W; zQZPQ6(01&6bbxCtr1*s8z`)rv>OGLFvb8U+|M=Y*NW<=`?k#a(y3POb{=;-QtKRiv zMqe5J!MHEx)w?2Zp9~2a@YZwlJ@%Y#BR<`iu<&4}2cc8U_0C%izhrvZ=3@B1tnt2I zHZ4Nuz!iqM!bISh3*uFVxvJoescC&1?k!k?72!<$(*^tgw@X)VPr#+wPx6;czQkioiesZwp-FnZl(NtMnz)f3@m-z=jHe%GS zhnh-!|6m&Y!90WUvLz1&N!Ar>(Ydu&MXgo2Z+Bytw-0M^Eqa|tjm-UM?6RbmH*$Ri zaVD*qNr&N+SrBK_n%N{?L~9n2crmS6OyXm-<`^A@brr;AjAj`VrgTpq1L0%P0;?*B zXMx{Y&`QBKfaV4WQ}9nf^Am~ZL(P0h&{sgs3KBo$H4k}$K1-#UrE+5!b$EUL&enOT zM%KgN^{|VwP$3L1RB-gDV{2B&_R3=gF_R9+q(c>toTdX#)1iumYngzxOenT6Gv1IP z9Xgwbj^so(QKeM%2AbVK6ZjU*-XigC2JU7WDExOAc!$JuSvZ#^==m(nC-Dguo*?lx z7G5LqA1wTX#H#?i3K05y4%p90yqJTFIbyv$4(5^gD90YfxfM~_8v;M^AgI(`yKbBRM!p9j?u*^6EzRcb zK&f_tZ+wAw-!V9D7NaloU2*DdYBp!9HZXsOhlFQ$QY#mz8tp<79&n8wD34K5)j;%V zjU@~@@?d1{mF8b~NSIx0?efW*D_=4|ECuaKL3=y{ppG`Uf_F>6Z$(i5;d~{685=}y zE1EH}&k-++QxrD=-WirODHf(2)?^g{isx|!oZ1c^jb*pVB zJxrN*yY2K3#>_m0BwXa5y~y{%F+m*z?{`Ic=2dvOcUaO(H&4|X0D@jop}ye#Sq<36!RTyIs1Hs$kti}SoYogE(1T;$tg z{RQz7-{cbS?tq4OSe2Z1{l!u*v!`N~Z(m>QTNmp+StoBwm;~?Xzd^64_Cl~1suV|_ zf(=e7FK7huE^Kg@#7FoBNBBngVc*5O&Bm<0lX(>i;xQ)p7}HJ>^g9#yJ3}1wtJt7b zY_LLK!}+XH-fjwFAqNV%h6?>IA8?m<_c#~#jP5r2U)!!d@dM(5)c0)6l7ruQSt?9Q z&~`jssVzr6TZXDxhRWULk7?3yW`6j>axc^O*W#E<`(AHa;W(SU@u`Fs^3(SF`Tctn?qI!xd?|pFQ@$>21PZkIxzYpx&#b`%1rz^J#?-y(|jd diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_vector.h.A2FA968BFB875BEC.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stl_vector.h.A2FA968BFB875BEC.idx deleted file mode 100644 index d579800f8271859f9d9b3a4804009da2d3fc7ad3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23386 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 BKoI}{ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stream_iterator.h.B499C87E9521D236.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stream_iterator.h.B499C87E9521D236.idx deleted file mode 100644 index 9f8bc8d429a20a3ba6ba2dce7960321139115c3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5268 zcmb7G4OA4@6@G7pL6%`elwAa+BPc@LWyK;Q!9OI_A4nR)5y**>Wp|K8*j;A^l~QdA z+G=b}OH!p+tI0_ksX0QdiIEenO*Ds~9*jn#wp63UP}>7Udy<|g(mOMIcPV<#M9%Ww z+;_kG^X|RxzE`j$H}_ZL30dS^vc6i7?LmZ)aqut6qU(iV_)z|gJink!bP44=|6|d! z*5wo=-cuucYh>Of3!+{2h`c0J+ugFuA@Su3C5wW+T1qj3Xkmp*;vH3XN#eaIZFdJG zWe>kj1U)=_z`941O;H44t=22>g0wZnp@2!!l)BVRhsOZswy4)^129Nsn&M!auT1Z8FJH_NIizZLe06x?vv4!p*_wFpfpd zunO~SIKWh6H4LDJ;L)V#5q}xG+~1>$Nr52Oh;CjMYXsg^uGS$sF7cvJE{IC;I$h=P zCAeiQe~S^00^mJv5R-Vj%nNR()l+WOG7Dv?7Ao&is#QU_J#xzTG^W&}q{LCvrJAxs z$(Mn$2P~zKGLNTK=U?B?*oP{s-CAk#Kx>QRliYv({czh?%^?yF*|C&DC|7o4) z{|q4K!sm#+Jh1RkUqG2pPIW?(otc@?9AQM~un=$^@x#_-wPw|hKsJt)d#G86i53E> zwz_QdC_+lk6`c#-aAr(|VSF6n`YF>-Ip0J^YhBuWw01F{z` zzy7y~55AsiGQ@y}3zWG)O}+^sZzdjHwC!$nN{At1BH?BjXT+!j31x!71`Q7Gd3Is_ zk++YgMi|VX;|67JfEU_?I_O&spSzn*rAHW|0CI;icL1VI2(g@OIBm=SA~%fu034lV zot2>u$R3iSzUm(Md0rR^2MzC2>-#j_HzCCKm)3DH6Y}!4y{a^r!H1#?4`_76Q>NwKG9s)z3txBYDgJKKgT@BsROcqkutuhtNq_= zv^{iCrUUk%O$c#+w2s;N%S-hkh6&(gD>b~e!fLxQN96U)x6=1oJn4O+mzrOdam z6Kz60Pdy#?MPdEjosc&0q$s+GR|jN&_ipjI?2lLM(e{x&Av>8<24r{D_TB0b8~25g zNRUpqrq59aWPd1yTO51xT39j;oNS^@6WG@#C6b|PBx7@CeHXtvZGRYvg`BoiYdf9e zn^4c9WfMOtiTu$Cvw;UQ#Y}OCIw1RHL(HbVeZl9od{!_O9H$J({>M<&wPkyqm!PJ= zz!7RaLNk05Lh3fh1fAa%^B<@yFpy?VOIHVE_k8;6f(}dGpjO-6G`gGeoHikZK&zL= zg%Q${@$}h*-gaUL;_B&`dO8+QjzZ6>r?ZjXdhfn<@ltQNF0glbdl%i&rT}{>+e+-{<-F?R& z)74OaGL1P@JldiQMBgHeYJXY3?ONaTKSVdMYS|%^RnJ<0QjXRzYSL0GoGLy1gB1z=6Mh?f?*F*uYwNAvR z=G__M?l#W`d^VFEjd*wGlPgbW-p$aho`MD4{R?MA%-2oPuF-REIN$vJLR}y>b81wZ zI7aMdY+ga#{LdEa%44?&d9BssRK?GF>q zuK{mtIktS%hSwBqQoEcmTCvBu8#})4sfEPFjgE^!?_d10=c#?KoPWW(S0x&rxBug+ndv-Ss;7cum(4d{c}vs&5HY%yM&>IgtS> z*PNSxhYx!x_@ccouwwETFB^QdzoZ4cX{Ydu#m7b{n``ep5%Q-XmRm_z`kN)oRnp2~ zluYGe)R&ZgN&Pfq>v;X(;rRWaJJpoxj|*A|GWs4dSOhG0j55b)WPt9V<_?;Gr%0)0 z^97oKm+ipIwLjc)y5@jxz(%zU*qYxkwdn#!8`IJbZF&BnF7T}hn+}wk4!)-g%=_ei zNz3(^2X6i}=Nj}hTb#{*3|Q^}jXMyy zKPJ~r{^a7Nx4+Ug^OI-(9yV*mJH5KV!J5C`+b4JYOBZ-%HNP&TU_rkw5Ff!1Bjp8* zp}X>`yJNs>|F5n*wowSZ_BO^C!`ryZ9uJKGF93qN{R;?{M2BQnTE-ac8-#FwJZ2Bw L_1?YL=@{}qV%)%l diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/streambuf.99CE91E40278C69C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/streambuf.99CE91E40278C69C.idx deleted file mode 100644 index d9f5c463815bef7b04315816df9dc28bd7b52c91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13516 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/streambuf_iterator.h.27BB5433434D1975.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/streambuf_iterator.h.27BB5433434D1975.idx deleted file mode 100644 index c54e9a552912ae080b9ad83809c8c67e5f2ae70c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10956 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string.A57BF35B82FBB728.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string.A57BF35B82FBB728.idx deleted file mode 100644 index 4f2848162f7f6d4889c98fb4f2dc0c15d88712cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2460 zcmbVOO>7%Q6rODCB;MV|NgcbB=Fhg`Lz*;;Lls)fa$FbLSt_X71SP#-tv73Xo%K4} zU8_zDhc>E&TB%T|$^nVA$A|+}F9;QZ;DC@2su1G91*NKrs8o_lK=~Cgv(D_)AR(KP z{q)}WeedUcGb5i6)9EW70FEq)wX$MKE&zZJeND?yGuXf@K6)k^vsPCWT`DWVBSp!W ze<=atD`g`V!;X4^Sk>tCKQ^A6YTP*Gn2ypIc_Qf8^M<5aW&-3SQDisCbLu!w~AEGs=BEdR+At@(hEvfl4Zp-n}nE_mX)+Z1@W!40LfQ% z*-|Td3lP;(j1~?6E{s63xVkLP*-BfDXgsp!(f9^6H7uoO33|1x80b1QdyM|$+SCqC zXQvPB*Hpb)+h5SD|GGyz_e!qld9{GpFG^++Jq=5-SY6sLfc;kJ1>oF$P$ich?A&(r zo~)L0p*8?Mc=xD$Exj?`!R#GqhY}}wZ2`LKFUr59j*k zBDIT~TjOuRH9{c6+QgAda_lW2}SuoFyb%pkj3dwj-8~BitAZU`vB2MJABG&LxrL0MQ$w|OBv=Lr=`{B1QKD~*mn2FBB zN$2EPqe%En(?|>c1!qWn13d)lX6*w`A*nzrOycn{9Y}{sojlA0GGQ`n9*O}mOpa{) zjWZjcT3`K$3Y+uJ`AEa)wrCRW*ED4FGpy{wqP_w|0ic_z4u=5r(OvlUJ7cR`cW$2T z=@0OpUEN-PpKte`-X4|%JoWNZ75_=vS^Y!-fTOB21^{-`U6!i#H_f(t=x#4n{|2UC Bs&W7T diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string.h.979B97B48AB27554.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string.h.979B97B48AB27554.idx deleted file mode 100644 index 6e54b741538deb3bcea4a2622c9bb5b9073a8886..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14032 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 I{!Wtf7yJ)QP5=M^ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string_view.BEF992DD425465D6.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/string_view.BEF992DD425465D6.idx deleted file mode 100644 index c9a99d54e05464dc170114bd922e1b5ac36897ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28256 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 WqSLB%=KcSGCO@so?dj-9g7^cq!HYZq diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stringfwd.h.6515E9CFB6CBEC88.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stringfwd.h.6515E9CFB6CBEC88.idx deleted file mode 100644 index 27e87dff0ca0ecc726dfcb8e67289e1cb63cf9f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1098 zcmWIYbaQiJVPJ4h@vO*AElC728H9njxTGl4oDs+X0UHo6FWrv8Q31kI$WK#nNLEPB zNG!r8W@r{)f=%4m2vfWqWC&0=Ei)(8N?%{Uw75t=GcP%(G$mC(S=Go1i1ZB&^^-D7 ziuH3-bMuQT)5=ryGKf+SaV&226&7akW+u8hnR%rZy6JhP7#2buker{FmYEK;w74Y2 z$_gAddFc$LhGq~87)p(epsaEz%}`vKo74gfy6IJFACFw=a^q&;;bdTsSB%#J6AYXT z48WjfWMmEIblsbqD$vKxzy(y`r{JdsCO`_9zzU=p%(>R}KEKY*zzb9mq!6SICO`^U z!3rYpYgX+E@qf$BzztLoqZp$FCO`_9!3v5}(~7l#hF!VdqkZDTC3Z$Gb|nra5pdK3 ziGOY8UTe(12s3fAJBc{SS9Cvkr#(-inFq{+DT-@)pQY5~X~f9GuFasW0279J4`?LF zZ!oi@%)!G}4>F zTLz|D=Z03?TPEE(KqDo zD@Y6$Z#?WVTrpy>NaA6S=ZY7D1>2;)f1V1()8+%6lERQ82eSpH73gqKe8X%}YF_=} zS&hpBpbJg7O^_^i*LSyqx$N#c$(WgMIv)d#^pN#Xg9%r2?W_vSoAMec?8@K@w+ZGf vpiQ8J1GA|pH760|nBt=3Vr3A6UGu>6bC+&!+rq@b#=rp*fdDobgMk46&gLha diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/strings.h.9EB46A34EB89BB5D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/strings.h.9EB46A34EB89BB5D.idx deleted file mode 100644 index e38432be89270b1a45e9963b2b60b6487895b379..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3392 zcmbtWYitx%6u#4TX}3EI_6eo7y)Et1Ez=I&7Sfc5;x5&S0cnd5V$x1$XSWmPQDUyVKR#(b48dC>-rf%7Ve=AcTtG)eTLYUIK#o)YtB9Zs%1+H!wfIX}Cde z-pAnDy`fBHXkT#gRP%gGyQK1*B=i~>ga<#Zi=*aQ<$s(s!)U#K81{8V1u~H7ZAcZP zcO}GDhOA>P?F+|glQiBop2ATIky!+t%GNWR#M@)~%p) z8R}*RXW-C%35;1pr<#kPlaL;OdJiA=Rh^h^9AfZYKI|=xXK+e16Q04d(hM=BlIsYm zR0FgvxX)}f$3=d#)mGM(M!i%xt<|rzbRS3`+;1r0` zoaoFb7xtgeFT($W+D^qaIFgaAt}r%K9NF64gX<-6k6jDgqf;$4U0NBg8D}V zO+|crLl~A$c!yBxHx%IW^|J+&7x6#>K_X+vQJ)yyv6y5t)-TG{+XWcm{)$o zG-@J*us>XgytD@eRsmt+rR6__sI#__brM{|lbwIdv{M^x=>$je#(ON?2 z_4gK~EzHbrnE&LFU3+MR38C6o4KWlfSz*QSY*tyz**AWEnMT!wP)FB+i^ALr%f*pj zZ|=<9viby#S_xr-@=Z`HkoTdSa?8ft%=zL#_wai(Y9d5W=u;xDLl@)3hO-n{bNY{y(VMKgyebcphiI7!byoK~;c z`YjzfAQ1Xm&ZeJfwJ;4(ujy=rl_1Ls(_d!QGr>j!)!h2 zFHl>3WveUi931)a#F}_6&D8j7s)!MqiTEQf)aUPWA;WLDP|}}tp>fJTPPyO{W`&`Jth6^Qe z(uKw;JWjdrB!wr__|)f-xyLV_nS=O!Nrqt3jX`9i;P+|zUx#;7o_u#f~q`WYNp18nQb z_=4IRTU&i+*VsF6{k{LX>6fl5B}Tw69d#ioPjVcP2?R^leA{Q#+Z&JVoV)l9ZTqs@^$LVu&l^jST)uXzYhR1NBq$lY@HpK>Ni*La;Zg*E1qdK!p;P-9wT=E^V6Uwh@3 L=d#x{G@^e2)dyoN diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_FILE.h.2B6C435DE91D3DF8.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_FILE.h.2B6C435DE91D3DF8.idx deleted file mode 100644 index d84f20bf75c6ecc50365d90d434c1609df98dcd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 428 zcmWIYbaPw6$iU#7;#rZKT9U}Zz`!63#Kk2=nWaD)4AL@lQmyp$^-GJ3^fU94b4pWE z^(!pQ;>}ESb29TvD|FNIO7)X6ON#YNDhpDJ^)eVp)S(Zwt~9wM-p$j;6{wq`xH2~h zWOGq!TJc>V{r<7=&FClbER0-C`5gH&U`GK76Wb$PH!7n}ESb29TvD|FNIO7)X6ON#Z2Q%kaP3-mG=h}Tk5S&&++A0Jfp*6ym8Qj)B&Gw6DXz>-0=d5^HLX}2NXNKs$nsk-)t!-xS(rmu7VI^M md`=>WE-p$gRt7PE;Q<3oFa`qyv*)Zu0txO5HZw6YF#rIvzgD>b diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_itimerspec.h.7F2AA6FE7224B30F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_itimerspec.h.7F2AA6FE7224B30F.idx deleted file mode 100644 index 1837e5d121bf4ec17b4d9f2ac71058ba91807c5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 632 zcmWIYbaN|UVqkDi@vO*AElFfyU|Xhxvm6$Od~4$N>2mqymX)WyMfjnVS?33^WnzZ8?X8H|X*) zuyHc5aEfrsg9!!>aF8-wT;G4USjFQE9|Jp3noERB228-DukX0!IjiUNeKwE)3p+cz zAedm_WMBZs79%4oLs4p4aU+sFj9g&zVHz{-79M?JXxai4X5?U$fmq4_w-zW2vJf*A>PNlqe&Q(Tl>tPEl>g9r#< WiCM3@ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_mutex.h.A62EF32C01DB3505.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_mutex.h.A62EF32C01DB3505.idx deleted file mode 100644 index dfc4513bb990394c57e2262eaf4df71d484867e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmWIYbaOkwz`)>~;#rZKT9U{DWD5gvaY<389gqftw9K4TD}8z44kO@VpX~nKU+QT&Y zc4l!!6eAa-3a5$^*l-}x`c0#5)AtiAfWpEY!U{0q>5fn5`1#0f0t%aRnybKsfu`jo Yf;h!R$;I3t2IHn4rj$%}mMIJj0CRyeCIA2c diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_rwlock.h.76DF445C3AA414C9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_rwlock.h.76DF445C3AA414C9.idx deleted file mode 100644 index 52fd1f759da518210196c1a3ecd256eae522bd74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210 zcmWIYbaOk!z`)>~;#rZKT9U{DWD5gvaY<38J&*>2w9K4TD}8x^)vdF?YIIM7yzalGlu{G diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_sched_param.h.B3F662015F7067C8.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_sched_param.h.B3F662015F7067C8.idx deleted file mode 100644 index 79b7ab475d97aa9a9104f2fb0af3f9d5f8c66c2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 382 zcmWIYbaN|XWMFVk@vO*AElFfyU|^$*IM~>I%il8L26yIf+S`IhiGudI|~*X_+~xR{Hw-rNu@1nR&@M zr75ZU6&7akW+u8hnR%rZy6JhP`bn83#rh?c1*ygQ5G&%r2E`X77A5BDWiTM|kl9vN zFkVq+ei6_@pqndmlN^8!ULXJK6f;Y(2{s84Fu}k9_ANtEYFe=?kZGvB=o|BmCV56KCSeX?HHaj_c%U%IY?v_2 kP@pi#M3^IhrsX7p)D#yb7juIcOc%GzZ7KAhQpLak05G;@i~s-t diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_timespec.h.0E09B6677A8D6A08.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_timespec.h.0E09B6677A8D6A08.idx deleted file mode 100644 index e943096304ee16524b470578105956467d57ab9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 zcmWIYbaVU1#K7R3;#rZKT9U}Zz`!63#Kk2=nXQaK1_;ZcE=f&HQOHkI$jwYHf{6o7V@S))Nww0~*DozD($CCG&M8ev z)vvHHi#IdT&B@Fwt44gn|5fKq-FaeW(e1GfDxr_GRWMg1wU|{89=i&zw44e!M zz!bp9$jVTZnpV6XXx8VQYu+$E&5>Z@VHM&NQh=DwzyRc_2${inJyTX%9N)?n!pOzS z#K9y16W00tb?)u03ey;QScTby1z^H3rvp`k+zoRJ%*jAukb7amFd8Tfawp6XxmDFh zd;eel3N%}gMUW3B40Lx+B8XF5lw7P2Vt|q{6fnaWKtJ>U*#4xxMnHs_g_(_k4Iu#l D)OFj% diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_timeval.h.4A17C4CCB9EE5883.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_timeval.h.4A17C4CCB9EE5883.idx deleted file mode 100644 index f9edf327818e3bf3b690328130306862faee412f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 520 zcmb7BPfG$p6o2cgYl=$|A>9T#bV&yyq&yXZAan|Z4#76AqYkXQGJix5Qm5!rAE6IW z-zBK7eTRbj0KHus=-M#zevcpT{obEB>vlSj185Jr^9k214*;9^l$PQPF*_$jiwP$) z78y?Tm}w#uVPR+_(?}%9aT0STxzgo{2xX#pn8X9pH=3|WC1lJnfk+mQI7x(&uS%CefU{VCNnDhf2{Norz`+ZsQ!7G64ulu#kKxws=@8wPD>HcA>2)H!Y^E^K@ zum<4Zbql-6?ep~Vi26{({A#7Tkr|s0k`L9zpE^!C)3>@7kxs=|MFFfT(y644%D?S@ m-ktYOk#zCOO}TwV9}oLu_v_WS@2r-^C+ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_tm.h.472DDF26D5924DB0.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/struct_tm.h.472DDF26D5924DB0.idx deleted file mode 100644 index f5a1e5aaf308ca17a7319189e3e9493e61f0bbe3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1088 zcmb7>PiWIn9LIlgUDiLz>s%`$f&_$#=oXc2%rOSKG1x&wnRxI}+vLT@HR;Gp)>ROd zAp=nl>J&lnq9Q6@26_=svJEeu#@Jy8@i@VoqA2)#uls>lL;HQN-_P%*Zh$H`yh8uYeJFy?|5tyv{!tz6>9!%GG%&oXN%`L24?)f2i5n01> zvbQ>7Rg%~WId`$H@`zg%?vxY3vvtop-*AK{=l1nl7I=P*581Yzh{(o!*Akc8vx5Vr zfxe!aA11Rs7sAA@__46%--+Jp|DLe%SrR8M#Q~m;1N;mPVU#WeaozLeu3Aqbx%$Et zvD^f1xv5q^R7+hgf;;k8V+%HECq!DNJtf_+VAbj!G`kTJz)&mBeh)vxzRS=F3EMLoi9ec_kk2tUAO%;T{9gL3jSKB@?Fc2HM zVW=QHu{pPSV)Wc90~2vtPa7%-Pi>6eIk|TA2ZQa1i>$aq1>uN$;`l%IwQS3J%PEj^ ztfg>zN8}o7DVpl3J;6X}%57k+rM2B#_W)9lwe(KYq#SGMn`%;xwe(CiDaKm*rJB@Y zExl4rO0kwcsV0?JOOI5OLae1fs(+uk^6b%{>l>Pp>PmNY(c_R&oR&IiI^wmm91)Qt XcFIkgjMkMZO#kX$dVTwo)&_q8N^2Ue diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stubs-64.h.C743FD695F310B00.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/stubs-64.h.C743FD695F310B00.idx deleted file mode 100644 index 51528fa6286cbee77a2f1c1b526e1883dd252ebd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 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

IV}}-9Gj9+;*U_C8wo4Ot|<}w5@B+*&RS( zLrz0b=!3yB1qJnmYt&Bwh0Qt5^fz|78nYcs7n+2I+`^SCF;h9BGTFsa^IT!%=677rt diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time.h.EDC06F0AFB6EC7EC.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time.h.EDC06F0AFB6EC7EC.idx deleted file mode 100644 index d8047fb75b07f6b237dd33552b6cea4b1a49225c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12630 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 Y*;?P;W_KjuWt4}I@Rn`fa=o|wf00>Y(*OVf diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time64.h.1807D6F5124100A2.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time64.h.1807D6F5124100A2.idx deleted file mode 100644 index c2909eeb99593521b72f9df3ecf5cd6169e05fcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmWIYbaT7Gz`)>~;#rZKT9U{DWD5gvaY<381&{`Vw9K4TD}8 z#VF1pE(SIhNVsP_J8rDnWDFFR<&>3x3G4j+I`{Tgg=vgDjM6O9d@y0pAJQ%7LMAQ& j3JY-viNb`7QgaeP?Bb&2Vr~$F(M5fF(gA@@-xwGG+6psk diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time_t.h.CAA645D29A7A0EF9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/time_t.h.CAA645D29A7A0EF9.idx deleted file mode 100644 index 1e74e4faa303450f52555e5e908f24dd36fb71fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmWIYbaPW+WMFVk@vO*AElFfyU|>`lZE1 z`k8sjIi)G7`V|&t@n$BvIhlE-6}stprTR&kCB^zBl?AEAdKskZ&86b9*r2^Xd2B!bw*MajirK_-|C(3*sKw!13>RTUYT7ywJHMuz|Z diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/timer_t.h.3EFB88CBA2B5B801.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/timer_t.h.3EFB88CBA2B5B801.idx deleted file mode 100644 index 852dc0a2541dd1e8c0d888014f8aa88ad2bf909a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 328 zcmWIYbaQiHWMFVk@vO*AElFfyU|zd=Q+Spw7vWib?2<|Ziu9hqFm{w3Skcr`Zz&$ux)U;wfpvw2`@6wVk>|tW$VrJxEl!W*YVE|AVq#Gt&l$w(WViy-B Z7mI@!OdtXRm{rqwCpCVQf6B~;#rZKT9U{DWD5gvaY<2TK9B~3w9K4TD}8uZheaO~H9kH{uP0`s)ofRY8G;ofoQO^*`(Kn5ICD6OMY4(s z27|#RI}MWEY;~2026ud1QQU;FYTB`-c9+2IIOdJ-AEGne3QdVOtouXNi;RzABOtL8OG>s<7 z$_|Q4hJ%S^Qj8K&By$CbO;p9*rwIu}aacvC(QX#uO;p=VYx@y$)idgi5!WL8c;cla zKG{OHP8CA?-qG{B8y7Sjx*g1uL0~5dNyAh@dqZ*1ver?yP@Z^$oh&2|Qw8lmy0!-9 zx^6~$lc9w84D}i6uL|)c1eWGFuc|}tjz4u=B2U8L`t-o`5LNK{t6$XJ+V#PcX*>x4 zdx|h6TotrWL?+F7Hra0$PX>UUDx?lm1#R+n^OpMBefc~Y2zH{77^Vu^!*9jxD_woh z$&(PUX9zQNs-V3yEOec?zEt4}5B8+NlLS@J{;d7>bfw_OB|Py5d#W&1rwZDSv-5wy z(fQ?ip7?=1U6`&@1?|a+4b2aRZ`sU~Az)_+8DXlRo$Bs!#HG<~JQ2W7@lNqq1#Rc< zUyhDw`)&tM27{d-B>TeLUscd1PSGOwcoA~q?y;&JYc6_m1AP>#4DPGNSH%jL zRVtR(Wq0uCgO^(U083O7FdAzYFe_Y)ep0)N?pe1jg!A`F_e~GL5^UJ;;$Beuy%315 zp*7l)SmA(Kd1I1~`EPn#XGuE1RkVtYHuV#foqhB0tfsMmS8#L%r|qR{QQ`{nR!uY* zHfjsNcuWVFbq8YH6JXX881;F}p>@~At|Y(<=mIVGyu6myevzK3fU9Y>w)2_e{*sdR zH%tR;qNWJUjXedJH5BH?UINS-32{_N*7uz82&JRM2 z9S4}T8zv#6$0^ynDvANG;^-<)+oJj3_8CW?Z8CvT&(V5LdoFY5T=3oNPALPUjFxG4 zx-c(!Z}IK`8(=dv>u_1@WWcPAaartOz^r`{#~-w z&?VZEsdqM=EgJdq>DFsU^qZh^!$*dX#q2mtAev1QOcI%~ zb;zT+U7G<{(n>AKyVqBo?%(liGvHEMs=ZMhIe^)`!6f4!G+zIwxndjO297px+AVF| zQ`a)Qw~ZMEv_MOPqX{sZOPJ>Lpw1Xwz{Rfs=h9p)`f*lIVBfZe|GHLk33Ds0q4_vElFZt`NO@tjjeze)5Tid;s^!I<|pn1M<-x5Hxaj#zW6C5 z%yJ6wQo2-I5+^BOHbybJqjOBRY5VarfbG<-Eh!&Jhi{n9cEB#`(gx0NvEl|_C$x4KLWg*qsuw%mTt%#hNofOUW%*;>uDn diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/tuple.11670F49A1019C73.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/tuple.11670F49A1019C73.idx deleted file mode 100644 index 7e271634281f808a155cc0d5bd72f790634b1093..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26626 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%0A0T4G6=8+Z&5!R)rZ^hd66>cvPT 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/typeinfo.632314867A8F1BE8.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/typeinfo.632314867A8F1BE8.idx deleted file mode 100644 index b00f71872dd72ad042316cd95562faf9cb9dd58b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2518 zcma)7eQZ-z6u;-u(Z23&>qhCuvdMFEkv-y~_-|u$ohR)8S$XG{w!@dkR6c1x;9{zMgOC1n!VSfCwye6upctV!9B{j8>mE(CW zmEA3;vN2WDc+8NE-W-o9x`Df4Qyphb&F5skFUE65O3mti+}@Cod)2(G7zWSe3|Yyd zhrLQV6_?k<@&XncW` zG~d0QkB$?IAKE1Ay6c_h}- zx(>gQ6)Pgql%YpT^$REemwr;wlReR1gX{loKtVFgD5l0a!wzt!=D4O9s&@P8(sI^n zHDV*))@F~C-E7%Tl6Fj~CxxZJjnbMGl8V6&lC{0E?btzAi|M_Y=o5&-bn4TlQ#Ci1 zhXhZ6iDTdy1Id|~&&KHBPk)ab`}Xa-146Lc-VtY@ZU!1i;pZzqT>bpPD-Q&Oxiw7G zM6Jpi=vdiv;k92M|C0xViWfrrFZOq z;c~4IqOMMXH0632{P6U)@{SXK1%z^pA{vMWt$`x=y?_7COCLOa(~3YGf{GysITNX9 zJfW|^XOA!jeg|39EJ7BD4x*^lgebHy;Y4k@zT~6vFTPs#5NJTR&p3QzZVBr)0;4ZCVuSi8@a3ay0>SL%b- zJ}AjI{%Bip*U@P%_{ELV#wD&AFXN>s2>k$}je1IkP%j7;+G*P(9)`-p5F(sVNiaDZ z`ukqKe0AyZy5}SZccdVR*t{vIC7FthhBh5sL!0KLAc@F;ahOjsu>>Qw*+B=L=byit z{v~ljkPwZYe()1eCGjW(jzWlJ%B9?I(Z{{GyP`Wphmxp;w1w1ZNi5VCnyDrdGNQf@ znyCnqcoLdU!cy1P2AnGogJ&2jsMr$Ldf_lEa%GzxuKoxFN1%~tM6^a=*_@^#5}C0U zCW*(2>nsI(SFiaqir0$1Y&)MxlNbnyIJ~wzZ)MEp#J=gq*lFW@0oR z*i0r5#AJ-oW-z((hr8PEdHCbs=9({h)fn92B6J+;#$mZDPe98Aw7K#m)J(#it~>?x zQxI|G8EBbt_35cVsG08sk(K5s!8&p7Di|H0$oj*J?P4Sbdo1Z=VYUS&K L*T=k+IAi|+9C_%o diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5A59583DBE28918.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5A59583DBE28918.idx deleted file mode 100644 index 24e69bcc187b3c4398dba19870b458762cd66399..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2396 zcmb7`drZ?;6vxlOAJF!8N)TZVM7L#2V8u=*NH#GhE-d&OL*2~cBNdA4c!({Hpb@nK z1LhQ3C{W&yDx(B7#gqxG;utP5>xLM!OSHulN43f4FIz`|0W&vL>_sj0^`eiz20gu>rF*D1=d`n zKF??D6@)N>PBNeNPpOhteG;5ZO@Ayok zp|1;7g^`cH1X%U`k#F^JlN!`YK4dSMS_5wubOSpZ`c-X1>d4?DgvmO@VjI58edABSh!GX-d zJucp_IGSC&IFW==WTQOG*|jg;zYv|JBcTylBL*uMdvfoVvC8u+Nf<#kg7M1Yw^~bd zWzqf=68e$#W2_<^w!OW4U9o2k39ZOlaj_yC8o5#({Y}c*813=a&m8%bzG*2dF~9P&=DNGpAvin?F5Ke&s8 zT??|Z)7E5>{RFZJzQPIZpl#{?6I;o?64jOb5ZV&0J5%iLo#fGptW#Ja?cGQIZI=ur z^dalxp2yS0}Xo#ErT^5|koII7@rdnKocYYP6avasid8p=E zN9diCN$-(I3$hk2oQqG@g}-s9mIOaCKkw4;?YVh_tGAsZ!H&$%J?_;Qbx|!DEV{2TlrHf$9pLVb=4mi|I9k9Td75Su-zB z=EK;Ez}EUc@`zEz1h3clrtF8YKh3zw-iyr3Yw+xqv&Y;|H=ZH;BkCjE{*zqW_J(8+ z+1DYf;|s?QXC&X;{o^1BO~{(KaCy`Dp_Kj==bzI^)u^uK-6ltXI@Bn8l3M`kMYbc@ zMRp)KL~cN65V;Y7O3mXr5vW3(n-H2rZboPpxdov`WEX-<BIhNPt$vpYv@sNJ` f@_ItgTVwY^F>GFF2q=GvNDWbJ0K)h*lu!Qwoj}4C diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5E7FE6DA0F78AF5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/types.h.E5E7FE6DA0F78AF5.idx deleted file mode 100644 index 0ca52ef9f4c0bc36d6975dfad7856e1cc5885a22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4442 zcmbW5dr(x@9mmfB74M!4F3Vk3KxGwq8DRwx6%sY^iKGw_ja5@z_TGinWmos^2Cz_V zQmvv9Ba#{G0|S{R(#nLfVyKB|eFR@s<0I9Wq)cTr&e*0kolFw7{oTj8$3K#pm^1P_ z_k4e!bMD=<=l;H6Nx`gHCD8~?7Yk~tq@Z&ELMR4)(i+p9gnN`EM54^~QcweDBD$FI1CJ;R`v+Jwe&AGFS=EBpNA8}wAcDfkIDRVKo@`LQ#VV=PNv z$@N4tjJ=c}JH&2%pd3>f4k|s|bfD_WcAyG1YQg7M-vE!#4~Z30Ekv*1?S`((FDfsB z4-O9OKLSxDwd6{5_NtImSuY?}c;Hn~UKd$^edLfVx%@s+1}#+Pf|mq3I5S$z%2j0; zkI$x8>f$OhNtL{QUj@+mEkb2-r9S}E)%!lSxLjLR{t&9dTlKy2gu3T2LGcI)Q_WMY zYCxP?E-)UraKWkKcXOW_NKiHaMdl)_8W@nYD%E<j2ss;vp(YlFi&-BLm7rJ zM4tJ>Ij(R5L74#U#+KbUUhfnr3?cYLH!&6}kcB0%ZU={7Ym;LAVGZ_9qGx|E;<0Ng{|F=}8y%+d`<2d|zj6J!J6Cbr$g zNqWbiwRZBq^)(H@BxpE5ndVHZ8W?bR=1Y9rv4OuLXfObI<~*w!7|`4LKHhdQd?P^_ z0PMvvd+{*6W6(D}&xKz-$ZsMj4WNxUb|W6CcMOsbE?EBcP3KmEtN?w2ZJ)pcYaN5; zFD{F{JEyXVps@h8;FuP;oz^kv&Y$}0TRu44Oi&6yZJ2Mvv3kd##JczcCyx}qLC|=B z)?w>9_%gMQK|^1fm@~;Q>>wx$ppll5acW?|`AP3&zI$p%D?!5mm|&R@rv?T*-~IOA zlWo>_2ucNDg=IyY8W`~Y;%k$|INVOqH~^Akk`vUxfO)e%A|2lzdXJza07}iJRy8o- zQ}ei4-0r`h_PTY6=_(g(70#INn zh*JXt+})1zo%frs5cCuPdvMGi*mkXB(CyPRmUkZ6d6l4WfNo&x4cJkwV~~AJ)Yd)K zS8ftC3ZNyHC2?wCKtp40*Sy}G+XRgUV3~QDRSgW-b$a!f>U)8I5;O>afF%&81_oT+ zy;fXA27N_P8~`cNDK<4QpeXm_uDnMnj|dt8K#jS^ss;u?1$N8zuvxyX$68Kob0BOI zw&1~AFq}-S)t*@M^cS;VQ4+n_)Qe#utoevttE9oFta23Y$-D;?gNDAeT0a-T5P|CE{v+wkgdl%Pc!_&0l0j(H*ebw6C zlB$pP|GO{;_@&%Z6&!0PH zhw(xej_ks4u(ZYteK@@jPoQI3++n^}*=eF;+LTd49?tn$I4|VzIZ$o2#tV!2#gC1y ze@xSjF0{&nlf*DvR+gv557upL8D&>Hm=NN9#a6YK9>+8$LndNm}P zaC{R6)6yC>7)U7YLS@vEQg|y_&lP~pefy4=HI>DZax*H^PPt&JR zM}vg!V|s$R7$h_cqxYcB1qt1+^bBP#RjwnSy>M<6R^MCC90 zum0k8=YbB8y`0zh4hnBnTuSk_c7mMGw0A9|F0S zt2Jcma3Cx8MsImMe@B)ryQv%GY1}k}4qQI--Q~hJy5UU{M~m>wr`C9(E~yS&nvS|~ zau)_`*V^9i1oXi3pB`8XzRd=9K+mpjdGo@7Umt@+?BG~|^3+p7Rt%NO)JZ{BY?R95 z|8_6R(Qxeo$f>4OV{@pjf~MtXrs_p#};G-8S_EHBCq;j!74Kuwc#acRgJ9 z=|El>5i!E3k-XrK@IN-Hj;uC50580bBVK3qlo$5ni2ZDQrzo$ax#=ID!=19ZY-7)< zDTAyyGJODQ#ULv_Ol4}oAS>=m<-KP=o;oM7?;DW2G1tvrOX|mvP|TR};KE*~GLQo< zxly?=D?w{f^a3H{qatLu7D9&QY5&`y<3rdq?JpU1Y*ZSAObp=JrSQ!8`cw5CZ%Twj O4KYVsxJXkBkNyucV(;q! diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/typesizes.h.A6E116B64E63B90B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/typesizes.h.A6E116B64E63B90B.idx deleted file mode 100644 index 294dd7edd607d213d668ef9494bb31371e1d6c5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1126 zcmX}rYe-XJ7zgk(%J!TxjCpS=I`THRPAoU4b2^<)XC`ZwXn0}iW=mVLOF2UmFPK(} z8WAadNh>dqVv$%jNv#i(QbAN&RG$h8%Q6i=)HCC}2M#;@`0vm2yqu%gYBa@LDN0?Y ztv+eA8}O0x#@lAMnicrFd6~?W#sr3895yRswv<*n%8X34Tvj5B6<3-qj%sna#laji z+ii^9S!J}DYmBzN$FakC@|gSoR-?)GZVN@leLnY|37Xl?+0KcF_`v_&6xA@*8pEA^ zmdd>w7eE9-T+JCzhM)^;LmFWCbY5+^ed6%lG_rB4i;5ecA5v z+bz8K-sFAAg>)gqGQYh%_hIvBEOG)Q@L68!v5TC3E-7+4qzACvl*$MbR>G2yvmlF{ zNo~W?z3QqVHzz@oADccq{`9=xTb&9y4bsRuW1&vxlV`6r$k7l@(jFmq96y^X4j`vM z%5Jvg)zeFcHN$E)vJ|9bo#%Av$U2kLWexe4B}2&J5KboH-_=MKOTG>xOF%+6;_<1q`O%D7WPk7{?_i)$ z&XVBP+#Iq7G-Q(2LCMyY2W0V6n|=h^{aQ1+y5)E|mVB3^VNeSr{3wrCqzk z_H7d0N^YN&(4u{6Qpax-TPFpT?K`EkO-gvzpW4CCe$o7uw-cJD{M^26VoIA5Uhq^( zVjD05x$y^5)u}}PO1s45wh66*@R#KOOzSJZbV%u#n$R+(tsf=%^^~6zQd1I|CwJ=5 zHnDR;%kL9ABz>FQHmOrWa{GiP9b3Ph*r6njcanboTh`v~kktNfr&=bZCbUjz|84Sj z{*HkwlaSH@#n#gQO*=?hQ~!4fA0%1HDY5;bKQ*Oea$?(r8VMhMpOnxvu~TwumYJZg zCZy8eu|2S?+t4Y&x~lJ_v`=^^$)DO0&bCZV{3f|=a%$(l8?BY_UP^NNRJd@-sSru> zulSw?&DT!&I4Lpp`=pKuZ>O|LYWqL4Kkk^Enw0QO+r;)iBy_UxeS&qlN}~KWDYf+h3V|Ijq$m*7D{%~GvX+P&5>#or-t zI;EZctCV&hCjFB7N}FW(O-j3OQc9G81N%4jVXdG#p*BB^w+{beHE5RGZIhUq6o`Nw zB-E&0iXYcN$2HM$Ep%KP9mk{NI_S7AI+@q|z9vdSO_T%_D~c4wiK0X?q6i^A zyD(XovgEKudw2)~7radhJW%bM{Pdkw(gKX&iS}(u82)eCCbjI4+}>6r6u59He>nk3 z|LY0J<6loej{bTA^7Ypfkh{O0fIR;71myIuCm_FnJpsA?%Za}y!@AyoCHy_*HUIvT zzbE|f>Hd4N|DNij1qP+#J>ux=I4XRbE_I*mbq-u%& zPN_-lzfbJgF{y3aYVW63s}ol*u6niaTDMN9Q@dJn`_^s!ZIa-8vy_e?K1zfNr+w=G z&cti}3@}*prvN4GWmyQSpD+P%rs}!$v-rM zOXEMh)US0+Zu3@RXLyhQV?!nN^FPbm>rjIKE9rSXDX~pb$B&Yee*T9Uv)U+ucfdc( z7-~%YLqkdJ{r@maZ-a@Zi5>r;mG}IezHjPJO@)@;Kg-bviEWZo{wtPRw(gkHwr!J+ zNs0e3Ni91-d$ePV)TDO**pU4){AX9FCDezh&`SQNiAhat{Xvh~q_tN!`_Pfe%R->0OstyZ&o&G>|t9Xckr|E}84(6VZ8b)~9x z>e#y4ckn{}F||&$Z~Vz^+f-|w)ai%Rlnx2+rzX@%sFzT^YV)LT{NGuGghc+nOh|-Y z!*@yTgRgdfa)Q-tvn;3l9QS=GXkx$GF{K@JVM?C3@Aw;lA42>2d+2=pn$kWsv296x z{Pz=9lkPvy)%YLI{im`2!G1!m|NLd`|2!4{pQq~l=c&5?d8$4-Wk25kapEtjvN?ZA zRmmxws*+PURVAlzs!C4bRF#~n_n(QVUn<#ZbC+E8z;U2;9XPVu-mfPmfA@WADeJac zFy-f9_0TS{!+VMCliHRPzIG+`yd_IIvrx)Vf3}pRdDZHwSqHBtwe1i%_)BNn(!3k! zuXYM3KZHVCa#YemwNR(;KS=6iwLVjz|7%$+DP0|`PNvnz3}m4rs_D@&T=$Mi&;@MY zsV%gSS|yk2#OrZ>XlJS!6iMhWb}H2=Db?S>;-<9yiN%JFODXibZg=YVmk$@pxD}U_=3j}VelAY3?4(2!Q*=9xIRBd z=HY1y(&2Fm9-~-Mq$o}lC5jP6XvgsI+eFD{GF1Tz58}4TLfgu7@SobTc?`` z2S!Rxv}8B5)K5v@SvU2kq>ic3!)345zrvE*`>!YA2LA0tt-qhB{r3~`e?L*@?i=&TV zkRt-nEp?ry896e%v%lV@Y0B5(wDG-bT;Mjt3Xv4bGUwoz!G01p}^RLi+{DmK)=J%&lHTAV8a%Sv+(oe==#PO(I8%+ysp1qHV`oN(7aM)`u$U&zHXUV zEVvg7o)W=0rC+N5dvx;#l0lYRoQZ-l5u&jL<2<=IJf)!hG2m!GX`nZ#5D1w1l<&9f zkET6v8f2Ni!8lW1X)V7r;8)l!MzFW*n)BNbG>6;Y4?h1kU19TpkN#XJGNk)cOGth;l~fR11HX4QG6orAagy9g zoWP)|o1_+@8gs2k1IF-}Kbszb9 z<+27DYH?CSQX>Na(>HTHnRmZvF6c*D`pzMpBLV@_cYS-;p2OW+l{d(T$h(8}s|c*%b`Z z64bK=b2bzYTQJI^gsL;Hdt<`kzFLXwB7}4iB1;70yd)g^y+TY{MT1PUQqn?iQ7#ZL z{hm$YqebgG`3#a}>4y+w2$T(5FwWv8Q8Fdj9CHH_r9!3Tgw?FY7Ny1p=n7 z{K=!Ki$A{w>NG2}y##kJA)-VuPQ^CUpWl;G_gRBbpw!jtJ{Jg>I&-nVXTp_bpf0cy zd0%kfhsVhljMM3x^wJYEOFd_hPk{2J`^yS}fT^oCTpj-V%z;%5vfnasS};yS6_0DiQJvBsj5NlS^5)#`vg=%wqTt0^^@E7{MuK| zAoYPVM{v)9l-hz(Jnp}==hm@hId9%<1Du`~=ZBCVq5}cbe^z14ljgDC)G$aD zQ1>M6o{$V%FiK9nxNh5T^aDympv)EAb0IgjV3c3WEespjuUk!nY_nq7D;Rs>!rFpy zTvLxY$3Hm$oQYNu=ql)4;lkO1aW2G-KKS(E&+!JS1C+Ibdo56G!6-$Ev-c$59}1L@ zfHGMyCqr?z1*0sTU*pv5K%dY$J20aNek`Y2}6u>qhSWF@wlyIEu)VEQe4 z#pCfk)`PwhsNZ+L?+pY@o!DvUjWWxwG%$z)>KF7EA_D(hv9 z8Zk=*;}p+swxnTfF>p3poIb?pL&}v1#(C>v`A+q7<~KCRBa3rUa9@OLVGG9b)jAaM z(=GavL2g={BZB(~RL8bpoFO}2+gR)OX~5}jUG|a0J(74z1mk>lxlKWeauqmxEIX$J z;}qOJTQJT~a^0ahj;zK8X#|u`dZ&tkfTFx?TJu$dybqMSf_WG2t}PhlzE*kgq9OBNGssaZ zraZyOgT&f`ahe`HC;xoo&({so!^-qk!F?6VtSuNP<=4#6=MIt<2I*&Ues=#{F%U5Q zkF)!HG5P$qHw@AM)OQ5;9WY@FMw#sQT-yA&^;-s6WhG^eV61_p*n)9BIXvL&1!XI} zZIBOva$YdcLym00DBlX}drbK96QH~fl*58~7#ab#V3dVNjxQZg8^2?aXrQFHQ#^ry zslPk#`MN-<^R7YMpsuc0uM-HEx=o#K(M_}#pq_4}Ge99ICY+l+c$pMyTF-f zafS#XLxc(?f^pIs9=@6wp7NeSE?bjd<2ld*|e`F9B zsH^GKUI+wC?f#{>ahWlngSxAAUk4NSU?}jmV4N1$+vmUWMEuwwzXN5U5Hb)FY70hr zDLJlV(UUiUvcyX0CBe7^_tqASv*P(vkLA%rfHT+Pj3UM;c>UUfadst4U$^X~&`%5! z50puQdlEdxwqTS&Z`7@oJ@KVaN|VW!nK?w6LrRwj#(8??>lM+@B!Zc>7Nb;hU8-j5IOxS{P zVrRCf`SW1?YlEmjiPz&J0s&L+sc`12R}y~#bqJ_m(qD=Q1WcXt{?Uk@7Qo-Cvf^(h2-Dve^&?uOuyA% z2jd&W$C{T`8qlfF#Wgx`r&Zy z$rGT@xAdRtpH>V6OrN#m=c>)5lc4Ww>HiG*Gdd73eT&uS>sIXk%6A5-2I~ESdq0#- zTQJJ~j~=%jS9&o}PFW_F2*wh)5Vl~P?u}a?Z!@@dvO)G)oC|_+0bWD4V4O}h$8Wtf z?1z6Dq%=?(>J5E?fT`CMO`7+@nEdtzd1#qPBknYKH`s!48nvA?ByxUKib2*}oMnQs z43c6C#u+=T^p}U;cnLT|tozzBq-A6vVEWfTPL~!{Is*C(%f>jOkArw@!8n!MuHC%g z2X_aVI7*fBKj(a|Odu$w1V$1Bzm&c$MvQLo z*xQ0}zFyzxxY}hqaMCPJ1_{X^(ItX$3g?EWw)!O6Zx9(Mjr2y90s&JmK9ie1-n9|b zzk#~15YiWlvMm_pr!|YqMD=*{XJ|E9nSMLu?Z`mD^iO`Au%$}K++Peb*3$PA-2H^` z62Ul~KNx!Sm~WlMu~Pa~$X5}8fayKgH>EcEpiO6kWLo-1g7FCMuq_zpt*KSNj9Iz) zSA#SM%1~ksg-XsAj54iTwXrep-2cNM2P`ua1Y-i2u?6GY96ouZ67}`J4H6EN_U`uO z0s&KhE=84z(0YKni1?^DL8^lKp5VR*h0PX>GA#G!I(4q(^fE|2pv(~5Gax0lV3h2_$`3|< z{J6J4Y5`@7;NAjOY{4ki>U{CE-Y?_(LGQ>)$g3f*RtN-4Klq~uwz=9=2QC?CkmDAoJ2ARLxwi%5RNFeX zXmtFF!BD$dY5B+3N-#zN#}Yc^r|#rwn3g)(L5B~4%(OVG1Y;F&Y{5AF4*mP}78|mGGt1%( zBE}#n5w>8Qh>bn2Og`6du0b|hoUMYf73|o8akTHZ7rt0~GjMuXoHikCA_D=_|H}wJ zbT)3#e1mib^*15kLG2pBbWU4Tq~fw3>3fH z?+FANd5u9XS)A9* z*J1(z(@)RX+M>?gfuMf_)Q1G~5WLrI!6@6V&e+lFt^Vr`@)}Ua5_2rPPi?^{#oF!F zp?hAKz>d`|S>c9I`l@1!FUCY{58V z+Z8q*nG~@HMxm`DHJ<3>NyQSuIJf`Z{mb$XjsmA5P&&9fcme@a&$;l9YtZ4-pgvKUOS%g!~a52$+6p;pAHztLK8g0;rqlO}v4CsYAbM-01Qo;fO(2T0iei zjNUMmWDCX_|2XINp0~yVrv*?J3g$v61-4+6k0WmOm|JctP|5+NwqCnIAYkeSNng|- zpL!6~g;p$Yy5IB!0;a#8x3H%??(9*69Jcfsf{_82$`*{%vg|h>+?@L9F@r3%IC}(R z4{&V3I4>s`Z_|G3cHAK6EzT6dm;%?+7L4S_!1O7vwr}wH^q)X~+DgV# z!FUQuwFTp>3j6a|-P4h04AKlJU5MEQo*P>*%BSup{s&W=0i^~|h7;URNK;1N?X>=f9>g7jn6u(&~ z@}fa%gSrQC_ki&fTQJIkYt^)CWnaH!kavMHRxrmx39|*GeD_M8(s^wnP_9`yT_Lzv zK*ehd#-UffPHbAbPrgC6TAXWwaSg7!Ef{A@+e^pO#7{39OiS;eTQ5YiL+fwo|Vj_l~aM61=b&>*dVvRg2BL+i#C zjPhIR)uS7y76D~TAi07u268a7EzXV1N_4{o6? z7{%M*h0^QBt^>+yE1?63F#rmyEf}Zz{-n;Oi>lo*$Wx1RTX5fo;%E!T8Dzw-&TU8T z8f1~hc`O)@;VHKTy~X>z+a8Tb%8Ju^ldoEf{Bv`DVQfchi6~*t#g6g?ttn z2$(+a;Q8Zq>kS8ev1KEjxYMB=*n)9Fi<(b=l=K)l)q%22aBqX;+JaH4?>cjH-7<0? zKEqhi3=%>H36)9&;}{iJm3eDS25@wsG}aqO1_GvD{zFFYADJ;l;5A^G=r4r!2NSkn zoVlkyPprT5IB@P*shuvkr$bU~!8jQe3c59W>ojnh0HvFtcM~d>2u3-4Fd}it^3o3s za=|k5yZiSFfq?1vAN#fOYwa$A{#Q`93TYJ+2$=fef!agnHSF-vAhDqS(EVYBK)}?+ zN8f+_=V8BsS^{-FyZ@9 zp9t$72%{lua9SCFt3qyjgzl9XLZ(5+fc%C6>^dHz7gZFe7@ z;#o4Cg|FCbna;*|uI!u3ui(w6`N_gdl^k%7ChIjP>rGkGo;L=xs6KnArRbs49(oy; zw5}V|hepGozoz+DJG`qM(M+NFcR9SfFuvySUcO7sMA_ z?9;O5uPRn`v38&4j}zlu%xy;VR}-tb*f%iEUtO&3VxRvse+{vQi*@QXe@(Hbi?#hU ze=V_=i+OQq{@P+~7i;xv{&+Fo#lFgD{yJhE7yF2=`Rj^xUCcK_^VbvWx!7Ak^Vb*a zyI5CP^EVJ1xR}?O=6_Lq(Z#+uY5s;{Ll^r9p!r`CUvja}JevPy@nsitAkqAd#6~VQ zUak2Xi;Z3E?W*~Akmw!cd3O1rc$2ETNNtYykg9ty-bdp0k$A2@KGrWO@qgPs{W)#%E-D2IF(G?;Nl4G=CR^ zb}>R(P1k5L zBgu2vRi<5Win__P8^%3kUk{$bKU(FTAI+E?c&GCFlTTdaVk-mJER7_IpQ>;FuxrQnxf)#qOfMF1`bu?45Bb+D-B#P#hFB5ZkZZ5 z28y$Y!kh**|9-99ehoDf4r<|G4(-aSc85C$;dC8Y*w6 zwTRPNu+Cs^ywFUtU3mEw9Iw&wnukX;L8B8eo~Y4@7*EpZB#akmbOFYTwTQ)9@R?`6 z!SHC=4#7O)43%c!hTS-oj>C9@>YKnDddz_s4B6hp+|V4A&QZ(p9L!beT#VdU6VT823zgCW}knH$wt;etI z0o}*(X}#QOJ%ZzNdg*g|d5$mX<|RFx<3c^G5Zk+@o42t3j$ZZ-wtr9e-qWM_?~8O# zksiq~^S_21+fLU!$3qo5R6))EVG13F@d(8?LJ7W0Q{$!G3ts<8g;&5?(R)@z6=1#? zo-YQ8ntzD1;t*%>=4t-X&WO>@;7gWydqawBPj8;02P%Dl%jH9rKE(L3>U+$~>0b5a zt?Sx9>w@O@1iiroy*bPC3x5n;{It2EgJQA6T*E=scn&PP)YD1PbTXG zuAv|f5!}oP3|?wZPqs5y$tc}@gPt!)(V=oH#9?`GnDcy zvrus>bSB2L72j+nj_Fy24vit(xt<$3snL@f>T#aZ=qZeEXyG?BQ~>X5^gh-XX|xFA z2O52V@k5P1#CVlKR~f+`DJy1hmx?u7%!z7=hd)c``PJJ_ob<$(hPyP;(Q2aOGnO@Y zB*gg9A{rGKExtcm{D|pCpDLYo@7Fg%9HM`Y!kf#No6lmFM^cvP@8#LP}!}881Cb-nVd;}g% zx`U?k^l1Kp4muFyK@K_y%hIt1et4!Q#442@>sWG&X{VvLt+bScKmG`fuA zGecip_Cd4Dp|a**Pomf3miYz}y#eEmBzhypn@IE~j5m|$%^1&e#LRNM!0w>tU#G>a z(}I{y)PSeLo}|IA*m_FWQ`AG+gb6Mvm)xL<%`ed z^D0pD-w|W(h{1%csBMBx`&`*xR=nq7#C<23pCUL?61@Q zyfMort3cz+o~XhNk9N}0PE`4fandmuk9Ee5b=KkcFT+VQuztMrnen`)*8ER(`jo%M z-+Jy*mv#AnnpHIaLP8f3^q?&y5es=2&(goNki5<#dO+v{%zr>CJ-`L)0crezyvg|! z9dsgoA|^U2O>_j`u2xmkc%lRG2Z?l$h|)7itTaeO{6S*lK_cRh7U^irA1ziIjrpU+ zhNH#TczWiD@pHgLiO;O&pCh)KBYw^CI3v(-c=%FhyK{1U8R z;%v19>w9VOy)^XuURtYO8v1>fMzeU02Mq+RQkI6UN0!z&OAFp_HgyZ07;D-Ve_qB* zbi9O~mkAP`fbm3$PQ-YUL?>aKCDAO5b0wO~alg6r>~A+Glno3hJm1HGDy9XFs09wx znq294cBKPVBx{^eYn(wnn_32KEo)jCPk)X?b0pMV&6T2ZrC>B{#u>aQt?6d`XI(_v zMKt-{>MGK%7x zzscVpn*WhTA7TAtjXuWsiAJAbyxO3vjbJx}O^<`yY|V}1$++&I*BzyKehVD50OLYO zl|n}?uD|7|e2b5l!Z?vwxeIoDFddp2XdL-y>zI8XNEVO$`43NRi>%MPT$=C|e_Mm@tQO7D2;8ISQy z>Y0i0V(M9p@p@W*Jw^H3Nj*EU{xJ0%#`rAtoW=Me^<2dGD)n5&_#yQ?#JHGxiZM=C zJn0Hb|4_v<6yv#yXD-Hzl=6!dl-@OpXARbGR6H9o-lllAVZ2-M?8f+j;yHlvDaCUN z0aFx%%c)H6o9rG8uJPR>i=JG7Vc!SHc z0pndR&n}FQxI9NNKIihB!}yxZbB*KP<$lxOIMK8M^fR*^5!t-PU=wknA#6{-JJ1kjp(COYo7hiMV!O&>U@E!fKnI^=runHbO2o6p5~zTSL3#tZf43o%}-H(!kLQoZ?7j5GCD zGW9ojd@J-vUo zK|CacGAB_D<{XNLg-|vfQG)>$@u(2WMp!hMwkVz#LfMQ)4Q7#xSAbpyky&g(L4+ZH*DG{SE9;ZZ%!+3@gF$3eHitng` z>=i4%VvOggzBww=XRE$!j0;s?A;x#qh&z0^9LkF;VzmpUZ@(*IKgM0Ph_3ug#3wP6 zw@k}E907G~cSmG*UQw|E01uMAt^j|KiWOR{pgOjTO1t0z{BEkR8&46PG3BdoMNoq#H2a=#1Uy zME$8vPPz%}H#_NOjJG(S+v04(Q@Yz3wcCk?+739Q4q$xL8FdunQ_iSU7@v1WoyR!e z8JF*TmD|7WjJl5Xx17*|D*U3@q@b5RvQJXQ|AxG`Nc&{9{7pM1-9CHY#_qZH=9NW*6qw?_YFU!%F zvA#f#D!}^Na?EXPuSkwA!u%(4^b?GG(wLqUUH^VGrXR)wX~aN^-nPSN)G&(f-)I^+ znxgwNo<@zw`YAMS3Pty4CXJej_48=VJRIL*8nqbfm(!T#Sih1+ucYXHuBVafar|3o z%ofbwNuzdRd;4h2KCC}XqYh*J2^w<(>(A1tvsizTMqR}CDvi2|@eLY%1E=pUt$LTD z^8AoSJ;eNC8dZ#O4<)XLg05FzC8n=}?oYZBm9C)cKU9etit#8VZWR9gI3;cz#*>xE z$qKq(GnBX)SU*>Znv3l%QX&^&ex?$WiPMv##N=SSMu}R3f4@dbTv91>qn|lBe6b1jmp4yk{UG$KxWzaz$Ul_OH33u3`O6SJX|6AGo3)V18FEuB(R9KS1*h(1IThm_r|Y*s#`Q;?168 zgdW45W5)?Sj`0I6@&PtGSf_*as;sZXyz#)SwU!e%dxOv$1UawVB=jc6m$mTA8v0C= zq02U7j#FnOlVOM)S zDsFg#N;hDaf{iNOi18*hc9R+$Cf59$Rk|7Lx2SXr#@kfiHtv!DUtbJ5k^9ZD^{?PU zT8m%tWQ-K)NIZ-@N~EJO&JbfW#Nd#H<{u~0aacb=jGe&s2a*~m{R`H##>0~ zEf{YlrMF@{(-AV$;o(JjmLp^q#%r~Zwb&DHoffi=<1%F@?(4L9WgI*c1EsP9B~(54 z(ab(t1!kD7O9y4pUX6~I!4)!Hft_r!WSWI>j_k|fx1OzD2ZrpG>$sswE;`AD3iD(a zos98Rmv5>oSeV%ockrFaTHcPEIV;k$_^a?ak)Ff&ycl~Py94BjG!N@9im?~5{<==D z>p^#t&BJeeTlc4()u5hAbA+ckf;AuW@`MW1UQUmv=(t9YV>iqb8a;t=p%z}KA%}%~ z8oh`0xdzQOf_`#rT|THqtTp*~G=(B96j3d5Q;fMO24D9s-#3-lPHA2P53;&+6t_6LUSHU7AvT$$$LGO z(lb5#r?I`huL(&lBISxm@LR%$s_`3YM*Lh8288E{;q$Po^9Iqo0lQA$6vJ;~eWnzi ziD#GOO5R*4Xc$~?rSSb&e@yZo!}`h2ij%ol8&sgqipw}=s~AGo?WGHO){7}Erf5L8 zi$c5LmsB^!*NxYF$+MdqMSHr}1ZVO8H(}wwIbngVAqjWLUO1B9p_39lDPbQyiJrpv zv=nn%3N}oiPwu<&i<9-@p~_s~^en)G#xu0A8Cviq#a5(*80~c^d5rTYorgVk=TkZ# zkbCg5QGGCEuU5$orO7l6e|YLI)BYHz%f56z>|AC4gwJ0%SGP_-c(97avc)2D zE$=0j?Ij_cCY4RYc!X4T1jhTE<~}EST^x3rhcQ0kG*4iB)@h!__@dLii1AgYc@^Uu zPV)xFcb(>4j2}A9hZq+-&0>su$Yu{2rLV7S_Qg0|Hq$X4Dw{(w9wnQjFdiqH<1n5q zo0Bn~A)7NWo-3PkF{`%{~|ppymLK zhfs3}#v`dY65|YNW?(#tnv*b|PR;2U&!OfVj2BXKA;!z7xeViMYGz}+mYQoZ-bBq! z7;mTMc8vE>a}UM`sd*6NW7Ir`@o8$F#yF3fc^F@&=4Ffvs9AvVZED`exQLoX7(b!r z6O6klW;X@hkKT&e8{__p*&pMF^e#MqL@!G?xvdERD3^Fvp2^5RkJ_F!&P%Q#$!}-48{{w za{|UwRdXuFvs7~y#`9HkKE_K_a|y;PRC5K!xvH6q@jBI9hw(Pm+=lUP)!dEo0o6Q! z@ln-0it#DcJcaRj)jW@JzG~)Ud|frKV|+_BZ()32HSc5mST!GG+|^}vb)oCu%VqY$ zIL&3IVLZrX4#If2%N&mJ7?(K);|VTv0>)Ea=2VPlxy)G@&v%*gF<#;_mtefYWv;+D z*Jb8nyv}8=!+5jH+>G%Km$?Juy)JVv#)n+yA&if^%;OlJahYc@zTh%1V0^`8UctD~ zWfo$5-(}v%xY%VDW86bCd+@1kYzi@qwpojC^9IiuLeJpQwX=kt#rUxn^B9k|4b$l` zKHA3C?{=$!WxKiA?he|Wk43>Gc?a!*aZg8VPe(o08P@#09JCkK_jb_U8253|J{b3P z(7qV=bI^Vmr#WaE#{C^t`a53Y@nvc>Q$t<5lKDjMRf|9`yxL9=%z zOq?_`roLPAZ`Vt2*UPc7WS9%0haBXCurQ9Kmp_B2sGZflXZaK|&3|1FyN;)z73k#( z@D#Kgdgu+^!|mVH&6|1!j&JMbZ)5v+^|E*QAT;=a=-&G{z9)M5Cz$_K_ddn?V%<}$ zSK{_p7-1`n;1s%JsoU1h`1p(Z(3i*|@i_#2>)1f*Zs60$+4O#R9;{{K`5oLr=nlS+ z1Wc78bSK8ww1{gOa*FMz(|-K=WNrGXb<~d77oE_bc9`=V!Qmd5l;JS9VVv&>%g2k0 zbQ8;V6H)!S+G(zKqTg?JMs4OZ>(~@o7_70EwdXlFtkJ_7npAQ`qen2lpjEiQ=d8jV z*64MtFVJWK#yJMfF+$iCXY1ud-^pGppGTbGq8Tm}@i-S9hw%iLZvr23WQ*#9p^Je9 z^|_&Zh34Zy*UJjMjPX^)ca;yqvX%G2(2>BZ``plEg-%wGhw~JLPQiGZ;+v+#vd51t z&ku&|rTMv`OD=i|JDugbXgCAoRAsz`J`7Hlq9;qJ)UK9dR`X9Yvy<0Mn7z16 z6X?bEb%gij@^wF>9?Vj?gHNTZjqK3}8x7+==t zWsI+A^a{pTHF_1}EQ4klrCF(5+aW9L#`4#iz~rtIj<6FB?y*yC-wHkYXxkf-Ypp4pq?8P#Wz_gHyL|5XDZ%I z1;wAEcyln$SG@Tc_fS1ORAg_V>RpJ}8rZ9P_hNiV^&Y}_lFK{Eh2opz^3K6H+vUl2 zA^Tfho~;;Pa(OOs{N1z52fSa9*(@+BRDFT75x-+Iv=?UZd0=cO3wYS<{VRAG9pa)x z@aXDL7afZ6aF=g5A8k!+b#2j0-!6J38k`Nu%S*_+JjTbQ>0{E8v)^vp<>gaBKm!X*d#;zfa{lvFD@0|;y71)DOY@lOdpVo-a-#eWa5fv@MEqgSX2UQZ>wIOb6a9Xkv-vz{D{gP4v(ZW?O5aB3 z+Z&xwiy`_Qbfi>g&xvu(BO(pnYcTX2Z?QmgsCeH*JnY=U}`* zie13p%-~lp(S=yQSc+YY^|y6;n=iGZu3y+cuX3jr&|}CVMiyS9C6~B!33C5kL)>dP zW;^Ua#_fG|c#4;)bQ#WQrb;t0UZMI{@Qky4c)*ao`3^TUlhT>^!_6#8XJI^t`sVOY z*vz#Z4B1=sa6?BGdK7yyA5-Wtj87=O6Wn*3`Ot$Qdm|riXq-aF;Z+F6D|9@@6BXY? zzA6FR_y<~J)~-L?Ojn6^mCzTdZW8T=ad#=UJNG_-r&gjpu)dd6sTZFc!d4K2u8FmK z5Rc{np$G5+SqBL{i19tG>OBqBqUkzK*K4pQ65DtPE<;XW(;;qnAf*GTn^&iUC>@0H z5b7I3gT4%GVG5Z4Z|_XR4P`rNwi8{594F1ec%?ITrL#JZDA!4Iv3`}4uEKb=ldi^i zjgzjyc&(GJ#dv^52WTk%fm+N!EjWKP?BejBo}JM8U1;V$CFP!yptt_84ZoIKUE#NP zp{>zOY^Jk8jlcWWvn`k4{#)BE@oW#4=wPWd&(;u$4#9Y+6gyN3CIjaCNpu+2kB};j z;7!U4e{|e3toE<(Luw`yaWc`^dfw27)XHwtf^FLeb%(XferNgnWi|iT;@57rLyhKd zBerp~HSab558@AQ_K92b|0w?GW^OZ@{}=HWH`~KU^LG|IyV;~#&HtzPr6B&d7;QWN(Qx zatX%0w8&oEzlF^Mf``T4GmGEs`%ZcvFAh-Tq(vA%bow4TgEyP)u?0OSdt)tbXt_q0 zYh`(s;5Ssbz-*H6U!E?@ri;=_et;`f7GV!h6DMs$Z`sq^S zbbRZ!NReAGej-IZk%CiWSn~?rtk!m9{CXa8&_j4^?XZI$#`uV%>JdETc)}5Jf_HT_ z|2ap@IXo7(O{d%VSlrH!?k(PF_GtynL&C6U4QG&c1%b@+E?} zUeMVJTj1Iyh+71m?HB{KgdlDcbher@cwz|RenDp&Olh!ng?LlY*{&9_T!$du5p>o9 z0M{`=yeH^v9~*EP5yT=vXWQq1tC%1@5p=d9FTBo(*n{Y7X>tvmUc{b6XI?NcwoAlb zL}&dp4VGOOhZCKx$PRkh+Y5J$r^=qGxFftm_N>4-SN7y$d|US3#=q}Jz5Q@Uc{D9I z8c&a&N4@i~emV6n$9Nz0?!)*5^`5}Euj1{CJI>Qp&ve{zUZ#4MVZ2)PuErhZ9ja#s z)?ZLP7clPQ^7P>yVOWOPK|LA2+nsMYrO?uWc^64dWdy-wr+)#`gCEhg^GCKW=D-lg_|H zoHLztCdRXzbQZ?5opd(Fi=1>3#><>^8OAG|F)N(GL4CH1Amqs2I*=#ixlOGaKld@S<8rxZRlkSg0rEfyts#E`gRQitRDjw|?Voy)h*6?|o{*tO!aXU2oiz?bzN3BO0skXC<3bbtKH$aR#@#bb+W9G*1} zG`6_gQFgZjjp<)^l)H|{CVPwJdt;xWequyFyt-b76p?|)BG*WfYjC6Iq!fM<``De4 zBF}R&hE1G;reOGX1M|+V&-ssSfs@m_mXHY3Gve;nuhT}i4Meg zghWSh%(mZz{MdVL@`OxM=_K5To~+Wz7*ADwQ+c17tp*L(+uER$n>j`3DT2OYo+k7( z#*eg^M|^$?Oybt*P~FR_c(&*>n6)T9>y26kP8@J)Iu&|d`Szv z#C@q@cDWXskMU(K^fJa*w9qRUU)4gdVth>tyT;46^-ZkIb-WI2fmWsf<3cU85dZ#$ z7J38Yn_B2ijBjb7w=lk~h2F;ajuv_cJwZL-hBD=$~;sRIf8sZ^ZF1z40)-dc|Xq2NWJDr{YC!!QF_f$7?0Lp9L*Ogh1Cu8_%Zl;jMeLm#qnq8^)s;jaeCcx zdSh;Xyk2iSzJ3$+`V%pKn%-cV-i-5S=nZCIJWFpd3*$L@gE<(_(;Ljgc!Azv0mh5; z28%FWqBmHA@iM)^GK`n&FD}RV&(dGa!g!?~w^Fam)4N@Ne!E_a;~jdn9eO>E59(E5 z-)W8y>D3SE^*KJR*F24{{~5jJ8H~^Bwa@A=asD~I$~kQByk6_P-jM6_^jdisU(jn^ z!1$70?GjF3z8;^C@9$+j{xZf_^!O_nU)AHUVtie%b{*R*&}$Uv4S0GA_3DKpjBw ziC*&wj_;{n`zf|ptk){W*RP8a*Tq2hzmE~u2V>Z#Xpn*GkHJR#V2pobh_42;Ja@#8QaZ^Vzsc%l(E5!;(-RGn$m;n#Pe5w{TQR~Xe+7^r+^8CA0|KijCD zZJ_d*W5ng)->)>PuEhLYw&I2sfwc`cH?u>cJ9xteykaD}6XV@d>~6ly60A0()4O~ryf@F^ zDtGSw+1BMXe^arko9%I?`QH%VaI>u!HUGQfyKc6XkmheCwsNx#k~IGp;umhVYnJB! zM*POjHtp2>--_S5+2%i*|0nS$H`{Yn^Zz0K;bzab6nuGC5k*>rzSB%ZYE6}bI=_;&WBgU-3Ly+fndR`BDlW6`to#tVD zL8liuW_!iM^|1Dd=h^5j(%vHSfa)XCJ{b2EWBT$H6WM@0G^?!b8alaI^pEnZOuq0edd$)W3!@dgb zi`~BZDYPHP{S{w-?gn=MqsMK>m0tWE7+NA2ON8>=P@YWl@Z`7)GQEKDCE0h0PnPT6 zxb^WigKH;)p$md>K|sayyh6__=>Fy@G!Ns8itnNloUg>T*n!%#q2AEP({qi`YXnU( zy-w(Lj4x^7m-t#wR%?-t;XamAfBB$eLHB#@?m!1?J}EyR&obUgd^_<1!n?_{yYZeo zd&#qVG2Ty}+mDB64w702Nn`#vA10L#<2`eZlBP$oW6W_#urG$1^!(Qyv9iROE`a*N%_kdUnP-ONw9i>ejBN99nZop zB;kcP{+lG?CboZ@RJ@HBXueB)ck%VRPs-iL-q2kg;a%|#I6WNUJun{N@D1QI?KS@( zN7x`doqdACoPc-C$#Hmd@QyjF9A#GF0i?AKb1mj?aD;Eb@ojdPo3Vb6BV-RAU^?LN z9>DewJHig*^c-`9AH()eI!d3!16CItVHYsJz!6%22fS`Lyf?7@+m5og@lIj)92M{3 z0ka2=kOw$@UB$9p@ubo|VwpbJIWJB0risA^3WmZ(?*NPkisc51!L1QA{|GUBgcuwa z)%>HxvZJv5$zu7*c&D-%qIU+iw?r(x1Uum_7ro1|ex(??5)asI6U}XSlI$)qd>4-Y zfM_1T`r~4`<2b$N#ISRCXSB;=xyx98UktmC^^e4|k8pmTh@nq#db&wwH$2IpMp(KSv6B2EeB(DSR!~Z;-qj zu)WPv+0A&sa+?&s4fA(OWp`rzDXH8k?0k7v@}9-^@+5B_#+M}TC5*30-fI{aO5Q?@ z?@Hdg7(bFckMIC$u~e}be?{);EZ37yQidHPo#p#GQT~TI%MZnPjMF>DiOTORXT@1g zv})*Fr)MtSFDl1r=HQi#*E^%uJJBn7o3s2jY=4*2+=cmjoaP>k4?4|*7$0+*$1pza zG*4rk=QQ&$zU=f~#_2C`ngv*Y+iBj$xX9@(!u%&r^9j~>lg(~;CFI_6Sa19(ufOc+ zFC*vM!E%|wc%|kMa+whrkCnY+WpsTf%3%|+y=k&J4aYZIHfLkJKsFa(yj1oq#qnp! zW){}3lFd~Zub0jB7;llyEg0{V&7BzUlfCM= z%|eXt$YFP|y$7=S0PCO1=2MJ&(Xd|Fhd7OfrC~e>cB8;6RS&1;aJ=&K7#cc;q5=O2 z)SQ6zQ>k|<-@pR)=c48;te;QA=HvL5P;&{^ub^Qouzoc)S7ZGKT4n?Ow7ZptZN>au z)ZB&n`)SyItUp4{BUpcuhMmOvbJRSC^_Qr53FB+jyoT{jYTm^79`)R#s60QS<|C}{ zqL^Lq%F{g+Z%^KUgmF?Ote=8>rUxqKK+GSen8Pq0t$0V{-;YZyr^}mHz#vs&>_R&Z%98pvUMTaFBx{i7|<0 z?kPieI_V6Zq|@o{Ox>B&Nq6R)?oK+L2;zt!lOl+Uir|0>iUWhF2;zVPiU>|PAkLzI ziXd{gz20Jf`}fEFt-IcP@B6NG?|*!F>QvRKQ?+aFXZSwIai%9uDvJvTj_H|*oM;Y6 z#8in?b3iKcbhH0-R7Rg^_MeG7*Bmexx6d;@dAR?4b3i`Y3r$ZU+EX|sl(4Vnx00qA2tUZ#`8OFdXA(0l<7HzeBSh& zM{YCwx8e2ZGCf^rkL4k;Qh-Cuulc}fGC(YPS@Dnzv}g0%vpJ|x&Eo^+aTveW@Ih;& zE|^Fe;KAE4?pDY9)nR|edOn~YKi|OnH((rVKkv66w?D`u56YAP9yrVg9>()M!b6V8 z^IhLLXUScer#=-c{dhGfUWH_`#U?GrQjvU<@{yOCzNNBs@$&eU7mSYb zog4Q-XF_|`kG~MPu>a@2&Xxyn-11b{+Asf|hT_>K6^?GEp$zQBHT+V|vlQ3N7xj>f zxCXecd#~dfU;!Vn0Pn#{KByA!;q5$lyS#@JH@tr;`{1rGh0|xe5_|4?$n2LO8?qzEHox|r~516^+{*9r^{7h?3e2ge)RmHuf%UstOOM+a2Jmy z8jCVG896l>@d>n>?evYtr7cxtkBPqGE^l@#lt6pV+ZTA`^{r2KrE6_q9xGDTvG z6*U!kniW1xwg$TypBIKSyp%!?ti8g zHd9u`i*5pzZJ^|8pJx@62`dsxQ7V_=UM&i+I9$CFr~YH5rL6 zO2mwsDK46VoaCY;0^GQakb)9(sm@i(;llGo=7P%JP5l zyUgbTqBibH_GFOVJCX;UXU_-yZT<58{K@U#CA(~8Y%ZA$?rxmF9&phC9H$Pt=pgc8m+!C~K(~Igsq%?ii@*JM(%`UU z*|Ny)I3tdbs(MmYcn0>EvrARct~Y)4GOahSE@jV|qn-c!_Yv+**819t%#Xci z#*klM{g*hxY{fkrzr%Hdu47od$DkhMUc=Wb!{nEy&P{jv-}+u$<4=P=g|OjuM%OX= z+{35`xt9&@#b@TCMHgkX`E}jjKb*&XFV1g=60`$fauF^^4Wu#i(jB-WoVw&UYe?7rgY7wM{>Wr!Zde#4DgV9&b>*0k_L!gC-*< z7*Pp$mnIsNi1sAm9X9%uS?!t<@zpw&pica1H7=^b+hx0pwj=L!`F6_N$F6u5HHj0H zpa}{DTf21X(xL9PTc>X1>pERW?$Ph=(P6qbU+X9{PN&6*pL(9%2Wgdyw~%Z?9bU6$ih&El*!QL5Qau z=R=RQKzYP8*3(zM6Zu%U9g_C&e{LLIX;nvL7f)1u~~%6pDRIcT4+(R}1w zjdGC}X|xD=iAGD1muj>Wd6`DbkP9>_KrYm%5P7*q%aK=Tv;w(Eqax&$8m&ZLrO_(n zHCp%@%paI--8~!gR_9t#bI~s_&!Ty<6F3j#Soh>$9_k|No<+zd7L~~DlYe)ueeRI~ z@#2n8SKR6Nrmi!n4&Tgs4cd#m&+zS&Z|XNA(x>IW@c7Lg?N{9UaYy-1%E!u*B~Ds` zyv*raCM!*b|LWG5chlaUEXLUq^??!aK_ha51bggk05B#0|-LhpRc;I{Xy=A9s z3b%s7#wnKFyW{_D5v1bRLPE@WVF_Z9_bhwX`qBGuJTmL+y$w9@5_`$Aweoo2_w4tU z-F%q`zGPooc169&JyY0n#Y%0yMa{i>SS%yfC~S>lefVUv^P3HCpA-ci3Ol7(R~jB) z``+bK>7oEaVOJH)ZuTJ@(JISOt=TPwF?&mAb&HfKm1U~dS~Ko^=7~qo@W3X`y9pCn znzfK-OjH@oZXYdOYNB#QADFB|fyDub_W%Y~dmP>#)n zn(4hJ9rsTi3r}kL=(PkfH(h2tzRc(wVImj)cIDV_UQPV>r1i06?YH(&yf!we<%^H@ zCl2O;$Jyg%QS02cs(aV&PsZ9*9*~tYT)}ej)bf&oy<50wjf{DyH2cQ1muY*-X{6 zy~@IGrm|V8IpdSo$I{;q7x(-emCaF2yNLe(>jim#82|FN#`8~35q(rPs1IyFb;C{S zLz^({uvvX*Gx7rM!3Eln?7K$<;K=oBt}!N!!7|f0lj4xa znZ9w-&-He9ZF|0V#}x5k8@u%&tW{;&}LjAj--$8C}r$(JxkiD6hOlouuxmz37 zEtj1)g)(Wc6=YASH&;;M*_XB_ixXd>xR>A?qryQIIGx?-ppD2?4qug=-iAMV_oeU~ ze@qqA+gL3$7LS;s4M@Rcx+*QS3hjHfki9tNKcIykK>H;v^x~MGv`xJlY5wjmb-kjIc$>+l)cmFd1qN zzkQBOd)-u!yGh@gm?|PVAF+>awY!t>z{l+4Tj?hc<^FisqvEwYSz(ivTUY-jYwf>Q z4G|+ug2ED%ThE-y9#fX^ig+O%Wg$ngr1lgGJ%wxS6eBDJ{ZSc4c!q32pu9D-VDjBB zq=}z>lIos>_iL_6xp;r(nUsgT(DW^o_iOaPuim=;LgLLG)hO;7ynkAVT5!>RlISGz zY4V+xi+HtqdhL7PR8JKGbB!5Q|z8MJq@`#RA+Mjtgs zhyADO_onJ_{2YB$4%(OL4=&RoJ^PgY@G1QXdH&;!2gadNVuJBtf&ts784so*&oCaI zVZi5?7!NHm`sS=WP-cuOGvNHHjK`{sXXNn?IYu4A{;Iu>QN73=&QTrMe{z#+)F$kw z*lvz&$NqZV=BRG$-Q6b;& zD*rk|oc}S!eGJdP&PjE6zI&at7kQu4w@;pbbS#+Sf?62 z!Fz5rXNZ^gMC~UNwO`tI)WSiVzqqmE`Ao4&nxYMuf|=$Uwa|^Slw9;f*FqbSFKc0! z@#Q&N51Eab!+CmW9!B*y>LDA^zC{n+g7)Kj$Z@ov)kDrA-_XNuVAj9_BWwX?zHTuF zZTSy1SbqC#8Rr;XF!}Q}`X6VCzDs46r%cAngx;(*phgNx3kgT-wt5uI9_{vwc7wq7 z1h;1ba;n>tik$8CWFs$d_g~=d(*O{1A8t>9w2ypY*^QGaKc6LjnqjvL>u2X>6n^wn z*<0UEoF&dTSM%iJN~+xOl;amY;_w{7l~D|NVsJuu#p$_%E2YgY&t^G66s3b^|I4^i z>M=b%a;0>$G2MV%S(<+4T_fwI)Su55nKu)(MWhu)Bt`z?fcnz|>U)w8sZSnKzn0vj-q|F5*eq~Vz5l5C8)-kT-hUkVggWActe|3| z0xIgHtk7bC(`wXdiS^r1=iX_X-P~&>~OZ_7}9l7o=mE1ukmQ7jggX+K_hH!;l58Xv43_QHhCVXZSTd zzZf*90eK1=Iz`53nW%uebDEsuGEo6FWIFDD zE{mEgi#}N(k45L<{#G#G3b|flfz>Q}HQLMA;4&G{XMwHEzg1S+vcL{@=MFr69rM?r z{Qw(!0MGXri#*2qW@6(0WhV1b!>^h`PBW}*TrIvaVO?w^OBU!dQ)K<|smu)tzHYO$d}?B zziNF*wXBpE*H6E5D{jACAF>_ohxMU{WfGtmKlJFMxW8sSx*7ST9(@w|oF07+xmAyD zMZT;@UqTt5{&8aqmXCe ze#5^XxykT1AvYWTX5`aG^l3c*3x@v!+S?6(J94KH-HF@x82%o#$2$D6vLK!X#ycX% zJK+AG>=-uL(KkzBfn-NSvZGJ8R6O5~h-t_(9MLlzaDB5Kk=eMv`40blJl-OQe-ZLB zhkqGzkz-g99>3V(FGhR0!(WcP(c#~SyxHO3jJ)09-;TW75xpDFcb_A2AD-_)hyNgM zf5PEEfqcf{KZD%r@V6p&I3hc6f7cxTYiPgW@ZUflN0H+Qu75m5#v><*@+RraV1cRR zpGtid$1IRZgEOfwuqfVdHesT!Z#?ceoc=WA3}EDLD%jw^Ryw~a9i@e`CY`+t(Uz5|{g!X1X=mhVJf90r{{`H>-RW;f?sodS zkw?3RjdsED#=87tU2wloa``7Ar@H*9$kSc^>Buu({+Y;gUH-Yqc`kn*a=vR=J|4f& z6n8E`Jqnzuo2Ej=b9yxf{3N=Zf5ie9+}Th}$1^ zMI3d({m|m_x1jy3%YPR6qHEYiJip7X=*up+zq?%iF5JG?>EDT5XGYiI=NnCbBiav}k%#g8j+_4DXg_88Pa&T- z{pXR}%!oF;9$lut3+=HyI+nxvPvb+UNl{WJDxjh>(4Nij$mV@6Qx=%VBj?GC85UT> zqt-}CMkXqt!netaDY0JRgX?6X3JcWp$a?&I1CMBsN`Ne|pAX)T+aKg35Ax^a`tmRz zdKl052#-D@&o^%3*s||NuFMrah+f6htANX~)kUq?apR(kE+V(Nd~LD=M{UI8F`pm$ zc7gC4Em4Oqks2G@Kbkh|&t0!A5{4x9N)qc!U%IVk*c;;p&t4=B-K7L|q5GrWMfK?J z*yo~s$c-*vqjZ1l|7gR)dq-C+;zGW_3eCncjrmsCd@Rezv%>O_7g}Kpkr!KGi;#Gk9Z~7O0*jxntDfs9pfXnTjMYHEV4mig zhg_?9YLQc!Clv)WvY00exrlj+kk>NLTI6lavkiGK^Xx@F$UFy;k2BA4NL#{GBRmg`Noiq>6iYrimQ=qwc+EX zON^hL(l(ynRpMb(tNAr_4#hqbD^vM`ecE~&nj0R zD93PjmHJSXOd%9WKm5TBGW;oOjrqeBywBGfb|USy)fG<^iZDPIyS+;~@kC6?@YYD# z8oTp@xYaHxL6#}HAg6UVweO=UWp0cR;N;=kQMrAq<=ZM}5sSEso;G+3Ia(>&xHJt{}&(%ld>U|v< zcwmt}Y>_@vj^f4okYfB<+AM05`M<+IS~F-utFcntxEYE&1INh21|7y+mnMUnkdGR^ zqjC(Y|7cZl^3Q*W1q+ezKXJx*Vb9OH&XQRO4|#;p=l+IQKzR-bHU;6wJIHR`sp zzbzSh^(+s3#y+#`revaKTVazFtFK~BWc9F0#j?|Ugf^bS&MQ`5$?X5bnSP7Yc6>6g z>&VS(F;fYeiGxg=L2dZkv>VipeA)0_mcNyqTq=r@zO}xE%C+@6t=B{3y|Y254agPx z@Cq#C*`yEMg!kS-eaJ!SxgQ=ANZda3o7E!1JyqjVHK?tertxXW(=|RFIYZ+a$e9|? zM4q9InxR2fO_s*9&^}Y+Gm&R$e3oSEgGWa2`%bL>UPvk^Y?{JtSyz!&p|Es?+gb5K z?M`9S6>evUiKJ+Si5v_2sS!!h3d>aZKfgZPSe4V+Dr%G!mZk8k%>`o}Gmkb3`CEm} zR=8acCzewR%U1ZUKYir8$Y1*?4#bT{GYK0ME1VIaumK})8TmIk*s3T zutQ;D0r=p8#F#q|WQo_%LWM0OLz+OR5Yg*d8#rsrYggZ!YD$x?iNLDXdoE-wrGoFlAEgC^2X&tWM!}Hjzj{ zRoGsITgS!^dGeDdMPsi03fr%6yLf?%#07Rh;dUm2P&-lBVTIe>r^Q4|VNK%rKUo+0 z-GV8@#Y9VCM-z6P3b&V?q63z~jw#&E1`;Z`3TqbEpAStgOj-IA7jmfV zgu-ooRH4qPu#*b6`|5Bp=&{oZw?{!9IH$04is<9~*4t0qI^h%#Tu|5r@qNNKzPxn0 z_@aSUg|&+NVekF^Z|;6g{Qegec2VJW+YByBN?EtU?HW^&R-mx!!Y;J0*M6d27G3-l zc0=Kx{qoZvy`KBGCXs!vvKW>Bx~uB0FMhjCT(4M_#j4z{trykeDjTD6I|o@*hpTM7 z%KN?Z*rTWCD56|pg32bS-0pBLMpTteQn{T2DsoL#CMrGb);S{ARAmV&5Bbquw^q!k zXcrC+l_ja%UJ~#?ipo+{zH1ZfF5LK)PgI|)EKTKYuQ^`-;3vT%o2yB+QO$h!~uD0z<}w~)65`7C+Q zB6pFu3%QrPy~v49Zz8IXr8>Q-$oWohK60URP$8GbYI zu5)_pkPkb(hmnsv2OY=bop*ZAqrJ=N?LwaD@=iqcu5_0-9XZS8%|f2z^3Fj%;PM_o zKH?g51l7jQxV&f3e$C~*hJ3^2y@5Q&^p3$)vUGD$I;ve|nS-*Bb4_n9ZeL(}3y@cu z-j&FerneG#hw0sc++cbekdK+(W60-B?>Wh~DutNnq$$B^3QTo28?+g#sJ9rj1$nDM zTamXJv<*3)Q@m{b$iDjd;jr${*N74FfA6xWrhV_scw_zOVzD&-gnbfZw{;RTG=)tS zC9i)yc_5y>diuXx@7kRe#Z&8=?>p?Dg3!9F|BcE`?X?C&O_UA>6>m*x>TI7-=5<9(o}aEI@}seYCs2Dqe+d(2Tb1q=@+{C z+jqbD{FS@PMDcN<+P@GxA$F;rE_8s+(L8gc!$#CEFi$epkYqAXCh`*9vjp3;m2gjq zjPckFFT`{HOz<-hajDR#LZ*j`KA#$GM6T4R61hsFD&!iCY9wDM-2DE)wsU2|p?BQs zcN|lQo2`D$$S16RCy-BBo>Qofb=vZrMm}SC&LE$)JZF)wSp%=hJL;x1$-pk;ZfjsS za+2GV#*WJjuv2+@2Z8S#D1j@=Uj9Ch{z|XO`r!V>!<}(|i9~@vyB?gVv}X z`LLC#L1k*6h6@XaT_T%d1YsE^Y(zv@4MI35)SdG+#vsWDAo-9+`Ww`E7 zBT7SG?Np+v$m!%um%h%D7YBJO+1*3_`Gjy7Pnsw`RT8Dg4 zr-R5%IyE7uaZ2NT!=G5va!NUZ_5bZJmYcQZ zR}WsEvR?dR^@^t+m6fJDX*%|R&u~%(@(ibMhD?}v<)!$!Q@;EA2Jwrn&^#+-X6V+l zc{Q&*H+iEt!VJ|j19fX+IK|+1isclG9LIfeQkd&t;w$exopEBL_)e=-&nj%ExQ-86 zCsW~jdHcG4F-t4O5er49ZXCJm9aQgt{O)}Y+K1fe@HNVAqISP=w@Wl2ch6Npm1HZY ztsIIdw{hBrT*Ijbc{``=$a{F$9@OL9%Lnh3dYnA4kNft?aFnR>;9-rp{ZSr%6y2W3 zIUUFSH*;!6KEde(ato&x$;~gO=gi6&u}SD_Wvjv2DyTcnC%0phjX#w&wK6IH3^NTWEH?48^w}(XU_L?UK?_aS=+-0enH&yHF zcwqZV#BaV#aWBJ>r^Z1w`2OGSpzX*z9lo7%J`n0&vSecaew+XOa!YP=rXiMHd&yMt&4@-Fi2k|S}* z7yF)fe!RX$gwTsrPZ8>g_NW7UFr+?C3mu1{jU3IBgZiSowcy>@^CFE6Ohc)Gne4Wi z7^+ywZe58zD9TyCa_sR?!#p(@8mVWVdgMcF;33?9GaJy172Idpz_Vz-#s*wNdz|ix z!=4XmdcQR688Kh?%tw2HKBxdg=BM?L(^wfb-WWJu2A_oHo-rs9L*7%3K~s^ljF2p> zq*`itm;OiS#qg{}uf-Y&pYe1aUCuwevfa03|DfmwiJpPx^Z! zhP<*z9B(VXZL7Q)`ak)LrVpKu)r-4of;MV`2C=ne+MUa={J%`Qw@mAkUK8GM2;sKJt;ew> zO{FVxDlPC2Sa3bU@4w(ojwMuXTXYxRg)v^VJC z4LF!(8xh$?U&5@I)*BHkkjL?eaWZ?v4xWkMFH3P};b3>(pz|2kykO7;5X3rERrqHg3K^7Y73(+Mm#2D1X2w9qExV_L{DR98Bqg`7d|*221Fk(~(SXdySy z9>+rBa7r|rh0ew-zZ@2tgS?Q1E<`S1AqDvP^(-C1NWDqhh*Rjez_jH9H&UddPp(acj}=#(O$2I)T6yk4{1Z5XoO9~DN&LU zmV}&cgry_TGQwsd&o@HmVjLvi20cjOrtoxw!Kvo1P|eBR|dFB2C>&M>V>DRoT_Ci0v; z1**^f;-WrV^<0xaHc=0(d9tMr2@^#Oo+P;%7xf>^lYyMCd-COKnFWfur&ua53|~-m zE%|-zh`9d$bqxB?F{OOK5Bnc#iZ~*^>S)z78r_E-F6wagxjaSstBWopUv>Ge$_k=a zgL(qja(;euM^n|Hso1gQkV%KIr_EuL4kI5ieMe-Eo7unlc|q%`UyB41A=+}!L^)Ts z^B2Ssrm5~}7?C+<(lLy{95?AW@(I&-LPli18EXFhr_(#lg*zWGK z#8a)XV#TsMvxqpW!Zs<^mU9oK7Qb*zWV-B7*bc?AmA!eOL17Jw<-4yw{BLdaQ=#9f zu!D;Ai~Qh-omrbkh`zcCJET~4Y>o$76xO0x&$SHt>XFi=KjDG13OlP;fdRIt2@*Fc{jtR$G zY=$gGE-}3&C~C9C^lm{uX?jme{((Z@e&U{$A~!2gpm_@9%sC{m@bz~;x^P@PdaIP6 zRp|0>cThXJ_&Xfbfqcc`yCPlwN6%0HP*48F3GsxDvPL~ApRfj%8l*gkaLB9Fh}_8| zIysbuBw3VXJ!ZddnuEVA*goa+o4b7?_z7?-jMiwh3{{HfU85M}SdC(lt2tH6-X(AD z?|5w#b?1>V}KG&psH@BCbcA8Wg9(dUb+H6L9F6XwpRFc+(dzhoTIp z-nzVUY>PO;2E(&K&W)FyyN92!7*Fc@D}$&Ua8g za-o9?kyklr6>_PAN|Dz)XgzY3gQ}3XI%q5MP6zEou5(Zwa-)M9k&ij(81hL6okTw8 zpmWHV9CQi!ii55ocRQ#Xc?{7Qy!R&%O+Zc{NMD# z(PHERq5|ZVL@SX?h)R$*5N$x-M6?Nc8__o8T|~Q(_Y&klTsckvoYxk$Z@GkYk+`i**j;oirYKvXdqwCp#$_d76`^AsKBX4xlM&!*-+Kjy2N!yWkJ83uaJ}2!%KIo)_ z$VZ)Y6uHGoEy!n`bQbxdlP)56I;j)6$4NcNu`Y_mA$+`x#v@O5(PZSQE}Dv*>7q>J z*)E!moa3S#!P*D6)vhk-s+;Q$U9xM6S>Ysb;yk_ zYD7NlqQl6?U347zl#5OwpLfxDNehvenzR&og-I)r*O;^hd96unkt@OuCNt9+P^Idre=joR8j= z>7)WVX)EkmT0j5Y^Jm0dt4Q+{Ne6{p942yiJ`DO0=D#}`?PTypcQM+9T+65yc{iio z$a@&=L9Sy|hrE|X?Ug!hLbjAqJ=z;sR0G;iS#(Oqe}qHMqSMG{EINaH)}phL?f$T0 zMp@-{Rk=O)*N*IdY4A$}?ACuGrDv=XJQmxpp3&(Hy8O=SbQbxXPUn!%>vSHuO{X^G zPMtcD=NmL1=lg36T7x`=(-awuZ>X8Pg5UQ7;wqJ5(} zVk5?QD^+hL+AGx&m1wV0y;W$hQb$yweUs|lg!WD9h)rm(R=w3|uU1D?qkXgL-Hi6l z>WIx~-=ccApnZ!vVhh^yG|JQ9_gJ8XEI3)sYt5>$5rI&fE-v=ZM+t4vyjyvFpck#8y6-zav}t^~ECJF37%1t{TD z=%Pa86)xWjDd{tQSZ&Med~%0)y)9Ec%hbMWxMk#k*E(|=Iz&vmK)tI#D*xW(X9}cJ z@6Bd$Bd*~ya!q~ynhMR;vb7P}+I@0x$kv|E*1(>`MkFz?C$Z;~uvuIN8t@Rj|h@SfBFw%{+&zg|Uw<}Ve@X7YNPnUTKVPK3Q-q%{)qhs1L$8HW{f$!n9r^iM z{fS!qe69XYEq=a1f2=`=@7JLJu|e+>N){QR#uM2FoPW0QPPPH(zruK81=?2_@2o)k zIR3;q+4e=Wz~b+WzE~R#6?G3kic`)MMsg3 zyL`u8eF{S$Sh@AGNFm#*dbY|?k`Oo0Jc}@EVj~~4QH~;Z*|0c+ZHjvvzPFDO z9mPfTF`{G0&E#vA4n4b5vKW3|3w{m4>ysHx#uT#zMhVCTj0%ve8C4^9FzP_g&?!T{ z)$L$_IR8X7C=utvB_@^NC{b!sDe_v=w^oiC{W^b<+x`CaD`H1mm7uLSY8)gwh~-#^ zhz=n)k*`UXXW7}tVs@US1Scub#Cowoiw&4kO7aGF~ zr3x(%^jg#_1KK0g-uiI%%*j_pcy|vUxJM>Wi;`|0vR8%!ZzjAC+9%6AZYI1BY{cyk z@aO}m`*Dbe9>UbnCLZ1-{on4e^8U|dW?dEj_Q$Np;8y5RsRR4HURLQc@>w2w7SqpX zSu{&FA^3BobCdVp+dBt}5_A^29|N@UMp(RTmm~VL8R4fedHkvoeib?1;ft5@wL+4> z5uWMjo6Cx9D~E3d+G`!*wP>G5;q&C&R|G%FcUj7xifl}0c$^dVH{BUN9eJiRd?s?9 zGdvHu(dlcHa+>0Yb^3ad7rT6mrTnAtbh~^d$gM74D{_Y`yhEzwiEz9bzRra6+hd0B zL5|_!G4l7e+Zu^Sd$Q7RGTzZC2Blz$XR1M|$Z1AYn$&3)DJ}+0MSHq2EFJIo9*cTp zm7N{=6whR?5|oS2zFeWW4Hh z6#1Aw{1~QWwCH!VU`j?BACe{~Y5Vquzn!xB)@$NYeHZi{L>M;dv`O!)`4XZII#nZY z)<a6Hk9oM_!=UrmuSZ$(YA9+Vt!-5W3Ci9&+Gx_2^i zf;BS1dR%UwX#F_RdRFojYs3`mr;?MbXOgVfBqv)BCCdaOk?CeVnqs{m?Wxv~RO^1p zY1Z9o*3TqQweFsZJk1(5&3Z`M)2+ej*Z_69HF!F5hIK~;cz~g6G z!?JMyGp(UBWwx$pplC(S!t0l94a>&u=UdV9u|aE|NMb-$%Muw9Sf^Tw{gRSR*9w zwY+<+J0#azzIy9!$xYVaCcOSftieZ+k6Qkt)+o9CG0S@l_jlZiIBt!U_GT-h8To`2 zaRT|I6?PKO@01mJ3V+|zR^(~qGgjmo*Fp*m>OF1uOi5b&ousR?F9l-}j;w za#8Af-7M7zy@c1Z-5T7E-~Y1ZyNsW|YWc6?_2{(xoyga$sB3t?by-ne$lX>{H*$|P zxCf7S!}8z2{q^o!}yWxj!Z^Qb%&5iOJBZ%&zHGxFT?HEy6;-+{)zm(%iV*^-S@S&g3Cj}N zOlm`JH>29kd*pJj!=w(hUpDD7@>SD!RhBgfEhslFa0lBb_Wr9S$DeZC=nfL|3DwM1 z`%9-^Bd136#q8&_ANc^k`+)Sdh*T)iD1Lhj<|?;xYQ_CsBSN!O@DCaL`{fb$iB!rlQvVJAVrL12m@-F7t#X!%jmU(KC zcQem!=q&B{*I=dCHNexI9x_U{7*+l8}>K zo@C?{mnTKC=TF+IF5klIV#f7C@C)E=YtX0xbA}oAt9j+`mKpda3Tf!Pd+wW+yKjgG zsYeOw!F;I`E;@lR))p7FAfIyiPRTT-BjbF{?`FQ+E5^hRf+@_9z*kuNd2B)MzskqxWft?eZt0k7V_4O@Ekst@(b-p-=OnRfqD z>Ahxwi~5f)O6g=4xUN5PUGK|sWq}3!fd%|2`}bi&JM`g7DfupXr16p4d0$u5FW>*` z+rgsGpFJYqV#n5Q`RdDezj{Ftra#(k0B^bFbNT0=~;#rZKT9U{DWD5gvaY<2T5s(Ihw9K4TD}82<7DJv5>gj306Pds6feB&TXHt=8Y35zIET0#Ot>gDClSOh bE=n#I2Qe5y1OzY{_B~LSUzIDv$jATyoE|{> diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/uio_lim.h.DF584C6AE54BEA07.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/uio_lim.h.DF584C6AE54BEA07.idx deleted file mode 100644 index 2d24569e6c4b14ba7cbe236e24e496e09f437b6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmWIYbaPw7z`)>~;#rZKT9U{DWD5gvaY<38C6ES#w9K4TD}8*AT)hmS36;4?Al*f&X~lX#I$-6yb8omm zPiN#}6y^{X2OA6|_@3KL&^HYK0u+|zkQIap7p3MTg4o4H$;I3t2IJi6?h^#3a&Bf| F005eTEYbh~ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/uniform_int_dist.h.5937C8C5B8D24592.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/uniform_int_dist.h.5937C8C5B8D24592.idx deleted file mode 100644 index 2b77968f28a63be815577c0105daeae169ef3c70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12628 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 KjDHQ{U;iKO-&CXk diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.F95B2A6E27B9D4F9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.F95B2A6E27B9D4F9.idx deleted file mode 100644 index a51ed3f2111fe69fa656eb43b09d26e09079657e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1576 zcmb7DPfXKL7=PHK~O8v$(oB#)mh?ZC6&`ocV`Uca?Cd zOsXQmM!7;{45Y>|WBh@Y)faR(M93+oAxNrPmL;=HP8S{VF_8=`Dg}r1LPe8JrL0M+ScC=~sw}E0 zn!dEZ$>@TFVaf{>1DMFM_n%}vUqUL;1=bh(fSG` zfQN+*Rz)=xILOGTmU3HgaLyI+uohLz`5GF0q?+IJu5=r)1jA{uJ=R0 zp7+ilqh(y)`mr*+l^F;36q@2Gn|A5;)w-iSv0TEN7@(P0F6~Jlr;$dhv*D4Q(G`d^ z8JHZRk?!37li`i~kHNiw77oh!Fp*k%G|W6>SZ*dX6ShOnh33LEBz;3G)<)4P)}Ah{ zdVbULA=SnnZ0x)>KmG#kbbLBRSuB@~CsR~Quqs*g8$>o9 zTA<5X>JN7%yY?yg=3Ot_-PP6^>|lNE0lyb@(C-KZZP;l;uMJrncH1yu!!{eX+t6>r J{j+2_{sPS-w$}gv diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.h.91AEB6757C0F604F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/unordered_map.h.91AEB6757C0F604F.idx deleted file mode 100644 index 94b7a976e918e4d33f24fc0d9e8b13475c7c04ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28122 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 Ch}yUS diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/utility.85FA95438DB4CC5B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/utility.85FA95438DB4CC5B.idx deleted file mode 100644 index e8231c8fc09f263ee3ff7ace877fdeb5662acfcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8608 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 b@S}EZnbtH#2m1ISeSDujcBGGO=;MC@80?vb diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/vector.5540A75A3880CF9C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/vector.5540A75A3880CF9C.idx deleted file mode 100644 index 0c66eaca99c4ab68659af36beb35e1920d14cddd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 890 zcmWIYbaN|WW?*nm@vO*AElFfyU|CFZ6ogcQ`; zG1wq+fxNQR zBaCL`0&8?)GKjo9nSVlD)B7x?CQl=v>Oh7-1)zQ~=zbWYl{3ZAkBO5fSTWcPrW$CZ zTBtS5D9uWH71foRSwOx1eEuL;g2AM|f1V1()8+$(;~3)PV8YRX3a@q7z5M}nfH{Y` zI7}Gm?wmvrr?@D&I2**^01*(t1!FKU@K`VMUd{epC7Oecg@coeot2w`6CulvV1jZF Q6mY{B3=FIYCL4kY0F?jgH~;_u diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/vector.tcc.180200071CE817B3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/vector.tcc.180200071CE817B3.idx deleted file mode 100644 index 41551da7d3e7f98f3ae50389f7e1080b1bf8fc6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21536 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 Q9Dm%`X6i1_*9?aL0D%xPp8x;= diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/version.4CDCC1C10BD10FD3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/version.4CDCC1C10BD10FD3.idx deleted file mode 100644 index dc7d915adcdbfafa4442ccf6815164573c253465..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2228 zcmZvddr;Fy5XZ9!<}TpWQqkfAAH1|A1Pq8GqEZLtEe|Om3dkb_6Tpxl5D-u-4@CtA z0U4eRsHniyj<(b)gH{|m+M=ae#13|}6_r+n5z!8IW9N7Ak7kl#?(^N-+uPk+g1kIE zPZJ*R(>SjTMZ7A;kjLYFgugVEQnm~KzWXG|J?$ z327sI9`C0=M>;wRGyno<0n!2s{)>sn({3LW4^8Cjgm4;e&tZer7tN#UyNwVB)8M5X zj6@=*ZL|hRFLmjd8qr~Y>Tki} z;0U$TsIBE3#AQIrfL&vBZhhs>&S~Z-WRWa0&OW)b$nt(=-8{tJ#CtA>JvEv&DFcZM z5J%JK#T>R6-00(Hde0VdEznw+#|aG}iJo5^yA*{G8p5Kv+j(Zo#&i=Q;=@1=19RkL zJ}xb`uNHy{w1Q!)-qG7KP5+?goCtSp6>PQP{M$FBYN8f%)>GQ_T>0Cv^@sy#0P}9z``A)e*yM%yAdrK= z8c6O_`+PiSN++}dY11ETyz#NDM4z<&?pqspzBfWqC;(cZuWhz;Ocdhx zTqh)w#MxX#I}NmvlTBR_i0gsWgDod`^4+gJOD&B-!HGIaIBa(L+-JdeV&f230jUC( zW^p(%XsLdo6Al461gv|O|7Q0j*8WTa3Uxs0z>0GfY*W1|%C<`<6agvH*Y}2rLAg+lJaWaQLYI zD#yp_dL8y49_*}Te_2cWXJr&)@5%Xc=45@~(2}5E!%B=yz}nDSHxb``Oh95Nd2i)r z^AHLrft&<(tC9At&dI%9 zWhgWNY0%G~)b_gc9}AyUq7W(wW%r=9dxp&`dTJ0SkOUzYRL?}WVn)`5I>hlL-kQUE zck&$FzTek~_&Ctx`obFCk5hf3>CxH}I>9ODeN-n@1E~g<#-FDyzixVUwGV~ubUT~I(>zPX*PMmd zFH`!Uhy#n~7o*#OW7Odx;vAa8O7tvYG$n7KW(4tOx|v1uM_7$jtC7nS#9qXU ztBp+yI}ESb29TvD|FNIO7)X6ON#Z&6EjQFauU;v^)i5FROTju^cSV36^j7v2$hLHl#z>3nL`<53mBZ5W1{~zl3xNStj3`x026-pap!}o+%i3&umpz$KTKHok>n>S z{}ESb29TvD|FNIO7)X6ON#Z&6M5j)`Y=FY*9O|MlVV0I(6Fh#u z@&*b^b4bI59Ofc0;iwXi?KhcsHUfp^ zIOO1}7hmz=TN)nP1QfR9u!Nf}YLd;c(sRWOps)#t3EbU$c7`8a}kOmTaCw(7#VRt5$D(F0&1 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.27C0562D93BBAA12.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.27C0562D93BBAA12.idx deleted file mode 100644 index 1e97b97c8750c5c6e25fd47c2a4188127752f81a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmWIYbaOkzz`)>~;#rZKT9U{DWD5gvaY<38Igkc}w9K4TD}8ujKm_n450qX+$50RqSUlvS0Fuk?RLp(#k~=X zT#SmGiXvcRfy61ZBiEDFPObwA>vHPCh0FKr%n|zaW;ak+m_t|;rW$BkP9lg?T$EhQ R4Pr1#mo^zTJnR5^0RVddF`WPa diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.83BD995621576773.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wchar.h.83BD995621576773.idx deleted file mode 100644 index 05379976e470f5e1c5c52d980a4ec2077caaebcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27834 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

*sJn$OixyIO_$l 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wint_t.h.DAC5928CF0BA7895.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wint_t.h.DAC5928CF0BA7895.idx deleted file mode 100644 index 9523f12bef2a1d9a44203425d74de63705b52893..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmWIYbaVT}z`)>~;#rZKT9U{DWD5gvaY<38E06|*w9K4TD}8*Ij#Tz diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wordsize.h.23D8030BEC81E6F1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/wordsize.h.23D8030BEC81E6F1.idx deleted file mode 100644 index 75e065c267717aa52ed9cac80da6b85696951b42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmWIYbaOkxz`)>~;#rZKT9U{DWD5gvaY<386_5slw9K4TD}8`qLkvys#LuUhT_WHB#`c+)U;w(ApLpgnm3G3 zb0iqK7|1iy)vVH760o XDlSSc<_0kse>5LCz1XSQnt=fT>54UU diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/xopen_lim.h.E4E4BC8C11167D14.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/xopen_lim.h.E4E4BC8C11167D14.idx deleted file mode 100644 index 28a2f0367da9fd9c2c0b1bee4c4f8f4ba71942df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 548 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeSystem.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeSystem.cmake deleted file mode 100644 index 2ede6c38c..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeSystem.cmake +++ /dev/null @@ -1,15 +0,0 @@ -set(CMAKE_HOST_SYSTEM "Linux-5.15.133.1-microsoft-standard-WSL2") -set(CMAKE_HOST_SYSTEM_NAME "Linux") -set(CMAKE_HOST_SYSTEM_VERSION "5.15.133.1-microsoft-standard-WSL2") -set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") - - - -set(CMAKE_SYSTEM "Linux-5.15.133.1-microsoft-standard-WSL2") -set(CMAKE_SYSTEM_NAME "Linux") -set(CMAKE_SYSTEM_VERSION "5.15.133.1-microsoft-standard-WSL2") -set(CMAKE_SYSTEM_PROCESSOR "x86_64") - -set(CMAKE_CROSSCOMPILING "FALSE") - -set(CMAKE_SYSTEM_LOADED 1) diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp deleted file mode 100644 index 9a5e8f8ce..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp +++ /dev/null @@ -1,878 +0,0 @@ -/* This source file must have a .cpp extension so that all C++ compilers - recognize the extension without flags. Borland does not know .cxx for - example. */ -#ifndef __cplusplus -# error "A C compiler has been selected for C++." -#endif - -#if !defined(__has_include) -/* If the compiler does not have __has_include, pretend the answer is - always no. */ -# define __has_include(x) 0 -#endif - - -/* Version number components: V=Version, R=Revision, P=Patch - Version date components: YYYY=Year, MM=Month, DD=Day */ - -#if defined(__INTEL_COMPILER) || defined(__ICC) -# define COMPILER_ID "Intel" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# if defined(__GNUC__) -# define SIMULATE_ID "GNU" -# endif - /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, - except that a few beta releases use the old format with V=2021. */ -# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) -# if defined(__INTEL_COMPILER_UPDATE) -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) -# else -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) -# endif -# else -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) - /* The third version component from --version is an update index, - but no macro is provided for it. */ -# define COMPILER_VERSION_PATCH DEC(0) -# endif -# if defined(__INTEL_COMPILER_BUILD_DATE) - /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ -# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) -# endif -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# if defined(__GNUC__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -# elif defined(__GNUG__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) -# endif -# if defined(__GNUC_MINOR__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -# endif -# if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) -# define COMPILER_ID "IntelLLVM" -#if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -#endif -#if defined(__GNUC__) -# define SIMULATE_ID "GNU" -#endif -/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and - * later. Look for 6 digit vs. 8 digit version number to decide encoding. - * VVVV is no smaller than the current year when a version is released. - */ -#if __INTEL_LLVM_COMPILER < 1000000L -# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) -#else -# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) -# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) -#endif -#if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -#endif -#if defined(__GNUC__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -#elif defined(__GNUG__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) -#endif -#if defined(__GNUC_MINOR__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -#endif -#if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -#endif - -#elif defined(__PATHCC__) -# define COMPILER_ID "PathScale" -# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) -# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) -# if defined(__PATHCC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) -# endif - -#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) -# define COMPILER_ID "Embarcadero" -# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) -# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) -# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) - -#elif defined(__BORLANDC__) -# define COMPILER_ID "Borland" - /* __BORLANDC__ = 0xVRR */ -# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) -# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) - -#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 -# define COMPILER_ID "Watcom" - /* __WATCOMC__ = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__WATCOMC__) -# define COMPILER_ID "OpenWatcom" - /* __WATCOMC__ = VVRP + 1100 */ -# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__SUNPRO_CC) -# define COMPILER_ID "SunPro" -# if __SUNPRO_CC >= 0x5100 - /* __SUNPRO_CC = 0xVRRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) -# else - /* __SUNPRO_CC = 0xVRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) -# endif - -#elif defined(__HP_aCC) -# define COMPILER_ID "HP" - /* __HP_aCC = VVRRPP */ -# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) -# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) - -#elif defined(__DECCXX) -# define COMPILER_ID "Compaq" - /* __DECCXX_VER = VVRRTPPPP */ -# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) -# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) -# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) - -#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) -# define COMPILER_ID "zOS" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__open_xl__) && defined(__clang__) -# define COMPILER_ID "IBMClang" -# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) -# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) -# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) - - -#elif defined(__ibmxl__) && defined(__clang__) -# define COMPILER_ID "XLClang" -# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) -# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) -# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) - - -#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 -# define COMPILER_ID "XL" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 -# define COMPILER_ID "VisualAge" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__NVCOMPILER) -# define COMPILER_ID "NVHPC" -# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) -# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) -# if defined(__NVCOMPILER_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) -# endif - -#elif defined(__PGI) -# define COMPILER_ID "PGI" -# define COMPILER_VERSION_MAJOR DEC(__PGIC__) -# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) -# if defined(__PGIC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) -# endif - -#elif defined(__clang__) && defined(__cray__) -# define COMPILER_ID "CrayClang" -# define COMPILER_VERSION_MAJOR DEC(__cray_major__) -# define COMPILER_VERSION_MINOR DEC(__cray_minor__) -# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) -# define COMPILER_VERSION_INTERNAL_STR __clang_version__ - - -#elif defined(_CRAYC) -# define COMPILER_ID "Cray" -# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) -# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) - -#elif defined(__TI_COMPILER_VERSION__) -# define COMPILER_ID "TI" - /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ -# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) -# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) -# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) - -#elif defined(__CLANG_FUJITSU) -# define COMPILER_ID "FujitsuClang" -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# define COMPILER_VERSION_INTERNAL_STR __clang_version__ - - -#elif defined(__FUJITSU) -# define COMPILER_ID "Fujitsu" -# if defined(__FCC_version__) -# define COMPILER_VERSION __FCC_version__ -# elif defined(__FCC_major__) -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# endif -# if defined(__fcc_version) -# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) -# elif defined(__FCC_VERSION) -# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) -# endif - - -#elif defined(__ghs__) -# define COMPILER_ID "GHS" -/* __GHS_VERSION_NUMBER = VVVVRP */ -# ifdef __GHS_VERSION_NUMBER -# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) -# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) -# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) -# endif - -#elif defined(__TASKING__) -# define COMPILER_ID "Tasking" - # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) - # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) -# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) - -#elif defined(__ORANGEC__) -# define COMPILER_ID "OrangeC" -# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) -# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) -# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) - -#elif defined(__SCO_VERSION__) -# define COMPILER_ID "SCO" - -#elif defined(__ARMCC_VERSION) && !defined(__clang__) -# define COMPILER_ID "ARMCC" -#if __ARMCC_VERSION >= 1000000 - /* __ARMCC_VERSION = VRRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#else - /* __ARMCC_VERSION = VRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#endif - - -#elif defined(__clang__) && defined(__apple_build_version__) -# define COMPILER_ID "AppleClang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) - -#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) -# define COMPILER_ID "ARMClang" - # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) -# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) - -#elif defined(__clang__) && defined(__ti__) -# define COMPILER_ID "TIClang" - # define COMPILER_VERSION_MAJOR DEC(__ti_major__) - # define COMPILER_VERSION_MINOR DEC(__ti_minor__) - # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) -# define COMPILER_VERSION_INTERNAL DEC(__ti_version__) - -#elif defined(__clang__) -# define COMPILER_ID "Clang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) -# define COMPILER_ID "LCC" -# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) -# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) -# if defined(__LCC_MINOR__) -# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) -# endif -# if defined(__GNUC__) && defined(__GNUC_MINOR__) -# define SIMULATE_ID "GNU" -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -# if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif -# endif - -#elif defined(__GNUC__) || defined(__GNUG__) -# define COMPILER_ID "GNU" -# if defined(__GNUC__) -# define COMPILER_VERSION_MAJOR DEC(__GNUC__) -# else -# define COMPILER_VERSION_MAJOR DEC(__GNUG__) -# endif -# if defined(__GNUC_MINOR__) -# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) -# endif -# if defined(__GNUC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif defined(_MSC_VER) -# define COMPILER_ID "MSVC" - /* _MSC_VER = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) -# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) -# if defined(_MSC_FULL_VER) -# if _MSC_VER >= 1400 - /* _MSC_FULL_VER = VVRRPPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) -# else - /* _MSC_FULL_VER = VVRRPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) -# endif -# endif -# if defined(_MSC_BUILD) -# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) -# endif - -#elif defined(_ADI_COMPILER) -# define COMPILER_ID "ADSP" -#if defined(__VERSIONNUM__) - /* __VERSIONNUM__ = 0xVVRRPPTT */ -# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) -# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) -# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) -# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) -#endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# define COMPILER_ID "IAR" -# if defined(__VER__) && defined(__ICCARM__) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) -# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) -# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) -# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) -# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# endif - - -/* These compilers are either not known or too old to define an - identification macro. Try to identify the platform and guess that - it is the native compiler. */ -#elif defined(__hpux) || defined(__hpua) -# define COMPILER_ID "HP" - -#else /* unknown compiler */ -# define COMPILER_ID "" -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; -#ifdef SIMULATE_ID -char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; -#endif - -#ifdef __QNXNTO__ -char const* qnxnto = "INFO" ":" "qnxnto[]"; -#endif - -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) -char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; -#endif - -#define STRINGIFY_HELPER(X) #X -#define STRINGIFY(X) STRINGIFY_HELPER(X) - -/* Identify known platforms by name. */ -#if defined(__linux) || defined(__linux__) || defined(linux) -# define PLATFORM_ID "Linux" - -#elif defined(__MSYS__) -# define PLATFORM_ID "MSYS" - -#elif defined(__CYGWIN__) -# define PLATFORM_ID "Cygwin" - -#elif defined(__MINGW32__) -# define PLATFORM_ID "MinGW" - -#elif defined(__APPLE__) -# define PLATFORM_ID "Darwin" - -#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) -# define PLATFORM_ID "Windows" - -#elif defined(__FreeBSD__) || defined(__FreeBSD) -# define PLATFORM_ID "FreeBSD" - -#elif defined(__NetBSD__) || defined(__NetBSD) -# define PLATFORM_ID "NetBSD" - -#elif defined(__OpenBSD__) || defined(__OPENBSD) -# define PLATFORM_ID "OpenBSD" - -#elif defined(__sun) || defined(sun) -# define PLATFORM_ID "SunOS" - -#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) -# define PLATFORM_ID "AIX" - -#elif defined(__hpux) || defined(__hpux__) -# define PLATFORM_ID "HP-UX" - -#elif defined(__HAIKU__) -# define PLATFORM_ID "Haiku" - -#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) -# define PLATFORM_ID "BeOS" - -#elif defined(__QNX__) || defined(__QNXNTO__) -# define PLATFORM_ID "QNX" - -#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) -# define PLATFORM_ID "Tru64" - -#elif defined(__riscos) || defined(__riscos__) -# define PLATFORM_ID "RISCos" - -#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) -# define PLATFORM_ID "SINIX" - -#elif defined(__UNIX_SV__) -# define PLATFORM_ID "UNIX_SV" - -#elif defined(__bsdos__) -# define PLATFORM_ID "BSDOS" - -#elif defined(_MPRAS) || defined(MPRAS) -# define PLATFORM_ID "MP-RAS" - -#elif defined(__osf) || defined(__osf__) -# define PLATFORM_ID "OSF1" - -#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) -# define PLATFORM_ID "SCO_SV" - -#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) -# define PLATFORM_ID "ULTRIX" - -#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) -# define PLATFORM_ID "Xenix" - -#elif defined(__WATCOMC__) -# if defined(__LINUX__) -# define PLATFORM_ID "Linux" - -# elif defined(__DOS__) -# define PLATFORM_ID "DOS" - -# elif defined(__OS2__) -# define PLATFORM_ID "OS2" - -# elif defined(__WINDOWS__) -# define PLATFORM_ID "Windows3x" - -# elif defined(__VXWORKS__) -# define PLATFORM_ID "VxWorks" - -# else /* unknown platform */ -# define PLATFORM_ID -# endif - -#elif defined(__INTEGRITY) -# if defined(INT_178B) -# define PLATFORM_ID "Integrity178" - -# else /* regular Integrity */ -# define PLATFORM_ID "Integrity" -# endif - -# elif defined(_ADI_COMPILER) -# define PLATFORM_ID "ADSP" - -#else /* unknown platform */ -# define PLATFORM_ID - -#endif - -/* For windows compilers MSVC and Intel we can determine - the architecture of the compiler being used. This is because - the compilers do not have flags that can change the architecture, - but rather depend on which compiler is being used -*/ -#if defined(_WIN32) && defined(_MSC_VER) -# if defined(_M_IA64) -# define ARCHITECTURE_ID "IA64" - -# elif defined(_M_ARM64EC) -# define ARCHITECTURE_ID "ARM64EC" - -# elif defined(_M_X64) || defined(_M_AMD64) -# define ARCHITECTURE_ID "x64" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# elif defined(_M_ARM64) -# define ARCHITECTURE_ID "ARM64" - -# elif defined(_M_ARM) -# if _M_ARM == 4 -# define ARCHITECTURE_ID "ARMV4I" -# elif _M_ARM == 5 -# define ARCHITECTURE_ID "ARMV5I" -# else -# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) -# endif - -# elif defined(_M_MIPS) -# define ARCHITECTURE_ID "MIPS" - -# elif defined(_M_SH) -# define ARCHITECTURE_ID "SHx" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__WATCOMC__) -# if defined(_M_I86) -# define ARCHITECTURE_ID "I86" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# if defined(__ICCARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__ICCRX__) -# define ARCHITECTURE_ID "RX" - -# elif defined(__ICCRH850__) -# define ARCHITECTURE_ID "RH850" - -# elif defined(__ICCRL78__) -# define ARCHITECTURE_ID "RL78" - -# elif defined(__ICCRISCV__) -# define ARCHITECTURE_ID "RISCV" - -# elif defined(__ICCAVR__) -# define ARCHITECTURE_ID "AVR" - -# elif defined(__ICC430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__ICCV850__) -# define ARCHITECTURE_ID "V850" - -# elif defined(__ICC8051__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__ICCSTM8__) -# define ARCHITECTURE_ID "STM8" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__ghs__) -# if defined(__PPC64__) -# define ARCHITECTURE_ID "PPC64" - -# elif defined(__ppc__) -# define ARCHITECTURE_ID "PPC" - -# elif defined(__ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__x86_64__) -# define ARCHITECTURE_ID "x64" - -# elif defined(__i386__) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__clang__) && defined(__ti__) -# if defined(__ARM_ARCH) -# define ARCHITECTURE_ID "Arm" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__TI_COMPILER_VERSION__) -# if defined(__TI_ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__MSP430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__TMS320C28XX__) -# define ARCHITECTURE_ID "TMS320C28x" - -# elif defined(__TMS320C6X__) || defined(_TMS320C6X) -# define ARCHITECTURE_ID "TMS320C6x" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -# elif defined(__ADSPSHARC__) -# define ARCHITECTURE_ID "SHARC" - -# elif defined(__ADSPBLACKFIN__) -# define ARCHITECTURE_ID "Blackfin" - -#elif defined(__TASKING__) - -# if defined(__CTC__) || defined(__CPTC__) -# define ARCHITECTURE_ID "TriCore" - -# elif defined(__CMCS__) -# define ARCHITECTURE_ID "MCS" - -# elif defined(__CARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__CARC__) -# define ARCHITECTURE_ID "ARC" - -# elif defined(__C51__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__CPCP__) -# define ARCHITECTURE_ID "PCP" - -# else -# define ARCHITECTURE_ID "" -# endif - -#else -# define ARCHITECTURE_ID -#endif - -/* Convert integer to decimal digit literals. */ -#define DEC(n) \ - ('0' + (((n) / 10000000)%10)), \ - ('0' + (((n) / 1000000)%10)), \ - ('0' + (((n) / 100000)%10)), \ - ('0' + (((n) / 10000)%10)), \ - ('0' + (((n) / 1000)%10)), \ - ('0' + (((n) / 100)%10)), \ - ('0' + (((n) / 10)%10)), \ - ('0' + ((n) % 10)) - -/* Convert integer to hex digit literals. */ -#define HEX(n) \ - ('0' + ((n)>>28 & 0xF)), \ - ('0' + ((n)>>24 & 0xF)), \ - ('0' + ((n)>>20 & 0xF)), \ - ('0' + ((n)>>16 & 0xF)), \ - ('0' + ((n)>>12 & 0xF)), \ - ('0' + ((n)>>8 & 0xF)), \ - ('0' + ((n)>>4 & 0xF)), \ - ('0' + ((n) & 0xF)) - -/* Construct a string literal encoding the version number. */ -#ifdef COMPILER_VERSION -char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; - -/* Construct a string literal encoding the version number components. */ -#elif defined(COMPILER_VERSION_MAJOR) -char const info_version[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', - COMPILER_VERSION_MAJOR, -# ifdef COMPILER_VERSION_MINOR - '.', COMPILER_VERSION_MINOR, -# ifdef COMPILER_VERSION_PATCH - '.', COMPILER_VERSION_PATCH, -# ifdef COMPILER_VERSION_TWEAK - '.', COMPILER_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct a string literal encoding the internal version number. */ -#ifdef COMPILER_VERSION_INTERNAL -char const info_version_internal[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', - 'i','n','t','e','r','n','a','l','[', - COMPILER_VERSION_INTERNAL,']','\0'}; -#elif defined(COMPILER_VERSION_INTERNAL_STR) -char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; -#endif - -/* Construct a string literal encoding the version number components. */ -#ifdef SIMULATE_VERSION_MAJOR -char const info_simulate_version[] = { - 'I', 'N', 'F', 'O', ':', - 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', - SIMULATE_VERSION_MAJOR, -# ifdef SIMULATE_VERSION_MINOR - '.', SIMULATE_VERSION_MINOR, -# ifdef SIMULATE_VERSION_PATCH - '.', SIMULATE_VERSION_PATCH, -# ifdef SIMULATE_VERSION_TWEAK - '.', SIMULATE_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; -char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; - - - -#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L -# if defined(__INTEL_CXX11_MODE__) -# if defined(__cpp_aggregate_nsdmi) -# define CXX_STD 201402L -# else -# define CXX_STD 201103L -# endif -# else -# define CXX_STD 199711L -# endif -#elif defined(_MSC_VER) && defined(_MSVC_LANG) -# define CXX_STD _MSVC_LANG -#else -# define CXX_STD __cplusplus -#endif - -const char* info_language_standard_default = "INFO" ":" "standard_default[" -#if CXX_STD > 202002L - "23" -#elif CXX_STD > 201703L - "20" -#elif CXX_STD >= 201703L - "17" -#elif CXX_STD >= 201402L - "14" -#elif CXX_STD >= 201103L - "11" -#else - "98" -#endif -"]"; - -const char* info_language_extensions_default = "INFO" ":" "extensions_default[" -#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ - defined(__TI_COMPILER_VERSION__)) && \ - !defined(__STRICT_ANSI__) - "ON" -#else - "OFF" -#endif -"]"; - -/*--------------------------------------------------------------------------*/ - -int main(int argc, char* argv[]) -{ - int require = 0; - require += info_compiler[argc]; - require += info_platform[argc]; - require += info_arch[argc]; -#ifdef COMPILER_VERSION_MAJOR - require += info_version[argc]; -#endif -#ifdef COMPILER_VERSION_INTERNAL - require += info_version_internal[argc]; -#endif -#ifdef SIMULATE_ID - require += info_simulate[argc]; -#endif -#ifdef SIMULATE_VERSION_MAJOR - require += info_simulate_version[argc]; -#endif -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) - require += info_cray[argc]; -#endif - require += info_language_standard_default[argc]; - require += info_language_extensions_default[argc]; - (void)argv; - return require; -} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeConfigureLog.yaml b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeConfigureLog.yaml deleted file mode 100644 index 9672cf5ee..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeConfigureLog.yaml +++ /dev/null @@ -1,360 +0,0 @@ - ---- -events: - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake:205 (message)" - - "CMakeLists.txt:3 (project)" - message: | - The system is: Linux - 5.15.133.1-microsoft-standard-WSL2 - x86_64 - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:17 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)" - - "CMakeLists.txt:3 (project)" - message: | - Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. - Compiler: /usr/bin/x86_64-linux-gnu-g++-11 - Build flags: -DQT_QML_DEBUG - Id flags: - - The output was: - 0 - - - Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" - - The CXX compiler identification is GNU, found in: - /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/a.out - - - - kind: "try_compile-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:67 (try_compile)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:3 (project)" - checks: - - "Detecting CXX compiler ABI info" - directories: - source: "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-sM7VJB" - binary: "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-sM7VJB" - cmakeVariables: - CMAKE_CXX_FLAGS: "-DQT_QML_DEBUG" - CMAKE_CXX_FLAGS_DEBUG: "-g" - CMAKE_CXX_SCAN_FOR_MODULES: "OFF" - CMAKE_EXE_LINKER_FLAGS: "" - buildResult: - variable: "CMAKE_CXX_ABI_COMPILED" - cached: true - stdout: | - Change Dir: '/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-sM7VJB' - - Run Build Command(s): /usr/bin/ninja -v cmTC_7d2b7 - [1/2] /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG -fdiagnostics-color=always -v -o CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp - Using built-in specs. - COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11 - OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-linux-gnu - Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) - COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_7d2b7.dir/' - /usr/lib/gcc/x86_64-linux-gnu/11/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D QT_QML_DEBUG /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_7d2b7.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccx2j6QG.s - GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) - compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP - - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/11" - ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" - ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed" - ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include" - #include "..." search starts here: - #include <...> search starts here: - /usr/include/c++/11 - /usr/include/x86_64-linux-gnu/c++/11 - /usr/include/c++/11/backward - /usr/lib/gcc/x86_64-linux-gnu/11/include - /usr/local/include - /usr/include/x86_64-linux-gnu - /usr/include - End of search list. - GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) - compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP - - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - Compiler executable checksum: d591828bb4d392ae8b7b160e5bb0b95f - COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_7d2b7.dir/' - as -v --64 -o CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccx2j6QG.s - GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38 - COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.' - [2/2] : && /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG -v -Wl,-v CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_7d2b7 && : - Using built-in specs. - COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11 - COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper - OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-linux-gnu - Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) - COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-D' 'QT_QML_DEBUG' '-v' '-o' 'cmTC_7d2b7' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_7d2b7.' - /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccI2BA30.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_7d2b7 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o - collect2 version 11.4.0 - /usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccI2BA30.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_7d2b7 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o - GNU ld (GNU Binutils for Ubuntu) 2.38 - COLLECT_GCC_OPTIONS='-D' 'QT_QML_DEBUG' '-v' '-o' 'cmTC_7d2b7' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_7d2b7.' - - exitCode: 0 - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:137 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:3 (project)" - message: | - Parsed CXX implicit include dir info: rv=done - found start of include info - found start of implicit include info - add: [/usr/include/c++/11] - add: [/usr/include/x86_64-linux-gnu/c++/11] - add: [/usr/include/c++/11/backward] - add: [/usr/lib/gcc/x86_64-linux-gnu/11/include] - add: [/usr/local/include] - add: [/usr/include/x86_64-linux-gnu] - add: [/usr/include] - end of search list found - collapse include dir [/usr/include/c++/11] ==> [/usr/include/c++/11] - collapse include dir [/usr/include/x86_64-linux-gnu/c++/11] ==> [/usr/include/x86_64-linux-gnu/c++/11] - collapse include dir [/usr/include/c++/11/backward] ==> [/usr/include/c++/11/backward] - collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/11/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/11/include] - collapse include dir [/usr/local/include] ==> [/usr/local/include] - collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] - collapse include dir [/usr/include] ==> [/usr/include] - implicit include dirs: [/usr/include/c++/11;/usr/include/x86_64-linux-gnu/c++/11;/usr/include/c++/11/backward;/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] - - - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:173 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:3 (project)" - message: | - Parsed CXX implicit link information: - link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] - linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)] - ignore line: [Change Dir: '/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-sM7VJB'] - ignore line: [] - ignore line: [Run Build Command(s): /usr/bin/ninja -v cmTC_7d2b7] - ignore line: [[1/2] /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG -fdiagnostics-color=always -v -o CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-linux-gnu] - ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] - ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_7d2b7.dir/'] - ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D QT_QML_DEBUG /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_7d2b7.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccx2j6QG.s] - ignore line: [GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] - ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] - ignore line: [] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/11"] - ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed"] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include"] - ignore line: [#include "..." search starts here:] - ignore line: [#include <...> search starts here:] - ignore line: [ /usr/include/c++/11] - ignore line: [ /usr/include/x86_64-linux-gnu/c++/11] - ignore line: [ /usr/include/c++/11/backward] - ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/include] - ignore line: [ /usr/local/include] - ignore line: [ /usr/include/x86_64-linux-gnu] - ignore line: [ /usr/include] - ignore line: [End of search list.] - ignore line: [GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] - ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] - ignore line: [] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [Compiler executable checksum: d591828bb4d392ae8b7b160e5bb0b95f] - ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_7d2b7.dir/'] - ignore line: [ as -v --64 -o CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccx2j6QG.s] - ignore line: [GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38] - ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.'] - ignore line: [[2/2] : && /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG -v -Wl -v CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_7d2b7 && :] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11] - ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-linux-gnu] - ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] - ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-D' 'QT_QML_DEBUG' '-v' '-o' 'cmTC_7d2b7' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_7d2b7.'] - link line: [ /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccI2BA30.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_7d2b7 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/collect2] ==> ignore - arg [-plugin] ==> ignore - arg [/usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so] ==> ignore - arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccI2BA30.res] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [--build-id] ==> ignore - arg [--eh-frame-hdr] ==> ignore - arg [-m] ==> ignore - arg [elf_x86_64] ==> ignore - arg [--hash-style=gnu] ==> ignore - arg [--as-needed] ==> ignore - arg [-dynamic-linker] ==> ignore - arg [/lib64/ld-linux-x86-64.so.2] ==> ignore - arg [-pie] ==> ignore - arg [-znow] ==> ignore - arg [-zrelro] ==> ignore - arg [-o] ==> ignore - arg [cmTC_7d2b7] ==> ignore - arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] - arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] - arg [-L/lib/../lib] ==> dir [/lib/../lib] - arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] - arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] - arg [-v] ==> ignore - arg [CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore - arg [-lstdc++] ==> lib [stdc++] - arg [-lm] ==> lib [m] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [-lc] ==> lib [c] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] - ignore line: [collect2 version 11.4.0] - ignore line: [/usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccI2BA30.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_7d2b7 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_7d2b7.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] - linker tool for 'CXX': /usr/bin/ld - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11] ==> [/usr/lib/gcc/x86_64-linux-gnu/11] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> [/usr/lib] - collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] - collapse library dir [/lib/../lib] ==> [/lib] - collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] - collapse library dir [/usr/lib/../lib] ==> [/usr/lib] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> [/usr/lib] - implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] - implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] - implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] - implicit fwks: [] - - - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:210 (cmake_determine_linker_id)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:3 (project)" - message: | - Running the CXX compiler's linker: "/usr/bin/ld" "-v" - GNU ld (GNU Binutils for Ubuntu) 2.38 - - - kind: "try_compile-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake:101 (try_compile)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake:52 (cmake_check_source_compiles)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindThreads.cmake:99 (CHECK_CXX_SOURCE_COMPILES)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindThreads.cmake:163 (_threads_check_libc)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake:76 (find_package)" - - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake:36 (find_dependency)" - - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Dependencies.cmake:34 (_qt_internal_find_third_party_dependencies)" - - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake:136 (include)" - - "CMakeLists.txt:12 (find_package)" - checks: - - "Performing Test CMAKE_HAVE_LIBC_PTHREAD" - directories: - source: "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-OucvjQ" - binary: "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-OucvjQ" - cmakeVariables: - CMAKE_CXX_FLAGS: "-DQT_QML_DEBUG" - CMAKE_CXX_FLAGS_DEBUG: "-g" - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_MODULE_PATH: "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6;/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/kwin" - buildResult: - variable: "CMAKE_HAVE_LIBC_PTHREAD" - cached: true - stdout: | - Change Dir: '/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-OucvjQ' - - Run Build Command(s): /usr/bin/ninja -v cmTC_3d9f7 - [1/2] /usr/bin/x86_64-linux-gnu-g++-11 -DCMAKE_HAVE_LIBC_PTHREAD -DQT_QML_DEBUG -std=gnu++17 -fdiagnostics-color=always -o CMakeFiles/cmTC_3d9f7.dir/src.cxx.o -c /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-OucvjQ/src.cxx - [2/2] : && /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG CMakeFiles/cmTC_3d9f7.dir/src.cxx.o -o cmTC_3d9f7 && : - - exitCode: 0 - - - kind: "try_compile-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake:101 (try_compile)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake:52 (cmake_check_source_compiles)" - - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapAtomic.cmake:36 (check_cxx_source_compiles)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake:76 (find_package)" - - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake:36 (find_dependency)" - - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreDependencies.cmake:35 (_qt_internal_find_third_party_dependencies)" - - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfig.cmake:45 (include)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake:76 (find_package)" - - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake:143 (find_dependency)" - - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake:43 (_qt_internal_find_qt_dependencies)" - - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake:43 (include)" - - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake:181 (find_package)" - - "CMakeLists.txt:13 (find_package)" - checks: - - "Performing Test HAVE_STDATOMIC" - directories: - source: "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-5qGokV" - binary: "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-5qGokV" - cmakeVariables: - CMAKE_CXX_FLAGS: "-DQT_QML_DEBUG" - CMAKE_CXX_FLAGS_DEBUG: "-g" - CMAKE_EXE_LINKER_FLAGS: "" - CMAKE_MODULE_PATH: "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6;/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/kwin;/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6;/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/kwin" - buildResult: - variable: "HAVE_STDATOMIC" - cached: true - stdout: | - Change Dir: '/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-5qGokV' - - Run Build Command(s): /usr/bin/ninja -v cmTC_6f9ac - [1/2] /usr/bin/x86_64-linux-gnu-g++-11 -DHAVE_STDATOMIC -DQT_QML_DEBUG -std=gnu++17 -fdiagnostics-color=always -o CMakeFiles/cmTC_6f9ac.dir/src.cxx.o -c /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-5qGokV/src.cxx - [2/2] : && /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG CMakeFiles/cmTC_6f9ac.dir/src.cxx.o -o cmTC_6f9ac && : - - exitCode: 0 -... diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/TargetDirectories.txt b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/TargetDirectories.txt deleted file mode 100644 index 0da3a22d8..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/TargetDirectories.txt +++ /dev/null @@ -1,9 +0,0 @@ -/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application.dir -/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/edit_cache.dir -/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/rebuild_cache.dir -/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/list_install_components.dir -/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/install.dir -/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/install/local.dir -/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/install/strip.dir -/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen_timestamp_deps.dir -/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/clean_additional.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/clean_additional.cmake deleted file mode 100644 index b2e53edc4..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/clean_additional.cmake +++ /dev/null @@ -1,10 +0,0 @@ -# Additional clean files -cmake_minimum_required(VERSION 3.16) - -if("${CONFIG}" STREQUAL "" OR "${CONFIG}" STREQUAL "Debug") - file(REMOVE_RECURSE - "CMakeFiles/qt6_application_autogen.dir/AutogenUsed.txt" - "CMakeFiles/qt6_application_autogen.dir/ParseCache.txt" - "qt6_application_autogen" - ) -endif() diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/cmake.check_cache b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/cmake.check_cache deleted file mode 100644 index 3dccd7317..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/cmake.check_cache +++ /dev/null @@ -1 +0,0 @@ -# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenInfo.json b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenInfo.json deleted file mode 100644 index 0bf7ee051..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenInfo.json +++ /dev/null @@ -1,559 +0,0 @@ -{ - "BUILD_DIR" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen", - "CMAKE_BINARY_DIR" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug", - "CMAKE_CURRENT_BINARY_DIR" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug", - "CMAKE_CURRENT_SOURCE_DIR" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6", - "CMAKE_EXECUTABLE" : "/home/austenharrell/Qt/Tools/CMake/bin/cmake", - "CMAKE_LIST_FILES" : - [ - "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/CMakeLists.txt", - "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystem.cmake.in", - "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeSystem.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeNinjaFindMake.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInitialize.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Initialize.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Determine-CXX.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCompilerIdDetection.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ADSP-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMCC-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMClang-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/AppleClang-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompilerInternal.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Borland-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompilerInternal.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Cray-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CrayClang-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Embarcadero-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Fujitsu-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GHS-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/HP-CXX-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IAR-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Intel-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/MSVC-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVHPC-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVIDIA-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OrangeC-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PGI-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PathScale-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SCO-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TI-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TIClang-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Tasking-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Watcom-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XL-CXX-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindBinUtils.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-FindBinUtils.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompiler.cmake.in", - "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInformation.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeGenericSystem.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeInitializeConfigs.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/UnixPaths.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXInformation.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeLanguageInformation.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CMakeCommonCompilerMacros.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU-CXX.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCommonLanguageInclude.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCompilerCommon.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitIncludeInfo.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitLinkInfo.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseLibraryArchitecture.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCompilerCommon.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompileFeatures.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/FeatureTesting.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompiler.cmake.in", - "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersion.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersionImpl.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigExtras.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtInstallPaths.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Targets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeature.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXCompilerFlag.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckCompilerFlag.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckFlagCommonConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeatureCommon.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicAppleHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFinalizerHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFindPackageHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicGitHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicPluginHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTargetHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTestHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicToolHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Dependencies.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindThreads.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckLibraryExists.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckIncludeFileCXX.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersion.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersionImpl.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigExtras.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtInstallPaths.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Targets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeature.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXCompilerFlag.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeatureCommon.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicAppleHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFinalizerHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFindPackageHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicGitHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicPluginHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTargetHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTestHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicToolHelpers.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Dependencies.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersion.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersionImpl.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersion.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersionImpl.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsDependencies.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsVersionlessTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersion.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersionImpl.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreDependencies.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapAtomic.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreMacros.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigExtras.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/GNUInstallDirs.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreVersionlessAliasTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersion.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersionImpl.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiDependencies.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapOpenGL.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindOpenGL.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/kwin/FindXKB.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPkgConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FeatureSummary.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapVulkanHeaders.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindVulkan.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersion.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersionImpl.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusDependencies.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersion.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersionImpl.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsDependencies.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsVersionlessTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusMacros.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/MacroAddFileDependencies.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusVersionlessAliasTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiPlugins.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginConfig.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiVersionlessAliasTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets-relwithdebinfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsAdditionalTargetInfo.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsMacros.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsPlugins.cmake", - "/home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsVersionlessAliasTargets.cmake", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/GNUInstallDirs.cmake" - ], - "CMAKE_SOURCE_DIR" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6", - "CROSS_CONFIG" : false, - "DEP_FILE" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/deps", - "DEP_FILE_RULE_NAME" : "qt6_application_autogen/timestamp", - "HEADERS" : - [ - [ - "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.h", - "MU", - "EWIEGA46WW/moc_mainwindow.cpp", - null - ] - ], - "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], - "INCLUDE_DIR" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/include", - "MOC_COMPILATION_FILE" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp", - "MOC_DEFINITIONS" : [ "QT_CORE_LIB", "QT_GUI_LIB", "QT_WIDGETS_LIB" ], - "MOC_DEPEND_FILTERS" : - [ - [ - "Q_PLUGIN_METADATA", - "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" - ] - ], - "MOC_INCLUDES" : - [ - "/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore", - "/home/austenharrell/Qt/6.8.0/gcc_64/include", - "/home/austenharrell/Qt/6.8.0/gcc_64/mkspecs/linux-g++", - "/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets", - "/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui", - "/usr/include", - "/usr/include/c++/11", - "/usr/include/x86_64-linux-gnu/c++/11", - "/usr/include/c++/11/backward", - "/usr/lib/gcc/x86_64-linux-gnu/11/include", - "/usr/local/include", - "/usr/include/x86_64-linux-gnu" - ], - "MOC_MACRO_NAMES" : - [ - "Q_OBJECT", - "Q_GADGET", - "Q_NAMESPACE", - "Q_NAMESPACE_EXPORT", - "Q_GADGET_EXPORT", - "Q_ENUM_NS" - ], - "MOC_OPTIONS" : [], - "MOC_PATH_PREFIX" : false, - "MOC_PREDEFS_CMD" : - [ - "/usr/bin/x86_64-linux-gnu-g++-11", - "-std=gnu++17", - "-dM", - "-E", - "-c", - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp" - ], - "MOC_PREDEFS_FILE" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/moc_predefs.h", - "MOC_RELAXED_MODE" : false, - "MOC_SKIP" : [], - "MULTI_CONFIG" : false, - "PARALLEL" : 14, - "PARSE_CACHE_FILE" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/ParseCache.txt", - "QT_MOC_EXECUTABLE" : "/home/austenharrell/Qt/6.8.0/gcc_64/libexec/moc", - "QT_UIC_EXECUTABLE" : "/home/austenharrell/Qt/6.8.0/gcc_64/libexec/uic", - "QT_VERSION_MAJOR" : 6, - "QT_VERSION_MINOR" : 8, - "SETTINGS_FILE" : "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenUsed.txt", - "SOURCES" : - [ - [ - "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/main.cpp", - "MU", - null - ], - [ - "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.cpp", - "MU", - null - ] - ], - "UIC_OPTIONS" : [], - "UIC_SEARCH_PATHS" : [], - "UIC_SKIP" : [], - "UIC_UI_FILES" : [], - "USE_BETTER_GRAPH" : true, - "VERBOSITY" : 0 -} diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenUsed.txt b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenUsed.txt deleted file mode 100644 index d772d52f7..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenUsed.txt +++ /dev/null @@ -1,2 +0,0 @@ -moc:a87ad0d1757acea1a5e989eec06f1479a98584cdaff252b689ffccd3690984bd -uic:55d75f6c2343143e74260219861e386474a5bb3f2c7a91517ae794743f6723cc diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/ParseCache.txt b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/ParseCache.txt deleted file mode 100644 index 2338bf2c2..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/ParseCache.txt +++ /dev/null @@ -1,414 +0,0 @@ -# Generated by CMake. Changes will be overwritten. -/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/main.cpp -/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.h - mmc:Q_OBJECT - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20functional.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20iterator.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20memory.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20type_traits.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q23utility.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qalgorithms.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qanystringview.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydata.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydataops.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydatapointer.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qassert.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qatomic.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qatomic_cxx11.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbasicatomic.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbindingstorage.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearray.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearrayalgorithms.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearraylist.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearrayview.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qchar.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompare.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompare_impl.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcomparehelpers.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompilerdetection.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qconfig.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qconstructormacros.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainerfwd.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainerinfo.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainertools_impl.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontiguouscache.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdarwinhelpers.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdatastream.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdebug.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qendian.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qexceptionhandling.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qflags.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfloat16.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qforeach.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfunctionaltools_impl.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfunctionpointer.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qgenericatomic.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qglobal.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qglobalstatic.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qhash.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qhashfunctions.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiodevicebase.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiterable.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiterator.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlatin1stringview.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qline.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlist.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlogging.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmalloc.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmap.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmargins.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmath.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmetacontainer.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmetatype.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qminmax.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qnamespace.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qnumeric.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobject.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobject_impl.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobjectdefs.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobjectdefs_impl.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qoverload.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qpair.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qpoint.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qprocessordetection.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qrect.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qrefcount.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qscopedpointer.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qscopeguard.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qset.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qshareddata.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qshareddata_impl.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsharedpointer.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsharedpointer_impl.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsize.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qspan.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstring.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringalgorithms.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringbuilder.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringconverter.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringconverter_base.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringfwd.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringlist.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringliteral.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringmatcher.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringtokenizer.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringview.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qswap.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsysinfo.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsystemdetection.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtaggedpointer.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtclasshelpermacros.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtconfiginclude.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtconfigmacros.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtcore-config.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtcoreexports.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtdeprecationdefinitions.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtdeprecationmarkers.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtenvironmentvariables.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtextstream.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtmetamacros.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtnoop.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtpreprocessorsupport.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtresource.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qttranslation.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qttypetraits.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtversion.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtversionchecks.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtypeinfo.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtypes.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qutf8stringview.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qvariant.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qvarlengtharray.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qversiontagging.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qxptype_traits.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qyieldcpu.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qaction.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qbitmap.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qbrush.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qcolor.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qcursor.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfont.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfontinfo.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfontmetrics.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qicon.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qimage.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qkeysequence.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpaintdevice.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpalette.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpixelformat.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpixmap.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpolygon.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qregion.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qrgb.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qrgba64.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtgui-config.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtguiexports.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtguiglobal.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtransform.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qwindowdefs.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/QMainWindow - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qmainwindow.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qsizepolicy.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtabwidget.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgets-config.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgetsexports.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgetsglobal.h - mdp:/home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qwidget.h - mdp:/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/moc_predefs.h - mdp:/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.h - mdp:/usr/include/alloca.h - mdp:/usr/include/asm-generic/errno-base.h - mdp:/usr/include/asm-generic/errno.h - mdp:/usr/include/assert.h - mdp:/usr/include/c++/11/algorithm - mdp:/usr/include/c++/11/array - mdp:/usr/include/c++/11/atomic - mdp:/usr/include/c++/11/backward/auto_ptr.h - mdp:/usr/include/c++/11/backward/binders.h - mdp:/usr/include/c++/11/bit - mdp:/usr/include/c++/11/bits/algorithmfwd.h - mdp:/usr/include/c++/11/bits/align.h - mdp:/usr/include/c++/11/bits/alloc_traits.h - mdp:/usr/include/c++/11/bits/allocated_ptr.h - mdp:/usr/include/c++/11/bits/allocator.h - mdp:/usr/include/c++/11/bits/atomic_base.h - mdp:/usr/include/c++/11/bits/atomic_lockfree_defines.h - mdp:/usr/include/c++/11/bits/basic_string.h - mdp:/usr/include/c++/11/bits/basic_string.tcc - mdp:/usr/include/c++/11/bits/char_traits.h - mdp:/usr/include/c++/11/bits/charconv.h - mdp:/usr/include/c++/11/bits/concept_check.h - mdp:/usr/include/c++/11/bits/cpp_type_traits.h - mdp:/usr/include/c++/11/bits/cxxabi_forced.h - mdp:/usr/include/c++/11/bits/cxxabi_init_exception.h - mdp:/usr/include/c++/11/bits/enable_special_members.h - mdp:/usr/include/c++/11/bits/erase_if.h - mdp:/usr/include/c++/11/bits/exception.h - mdp:/usr/include/c++/11/bits/exception_defines.h - mdp:/usr/include/c++/11/bits/exception_ptr.h - mdp:/usr/include/c++/11/bits/functexcept.h - mdp:/usr/include/c++/11/bits/functional_hash.h - mdp:/usr/include/c++/11/bits/hash_bytes.h - mdp:/usr/include/c++/11/bits/hashtable.h - mdp:/usr/include/c++/11/bits/hashtable_policy.h - mdp:/usr/include/c++/11/bits/invoke.h - mdp:/usr/include/c++/11/bits/ios_base.h - mdp:/usr/include/c++/11/bits/list.tcc - mdp:/usr/include/c++/11/bits/locale_classes.h - mdp:/usr/include/c++/11/bits/locale_classes.tcc - mdp:/usr/include/c++/11/bits/localefwd.h - mdp:/usr/include/c++/11/bits/memoryfwd.h - mdp:/usr/include/c++/11/bits/move.h - mdp:/usr/include/c++/11/bits/nested_exception.h - mdp:/usr/include/c++/11/bits/node_handle.h - mdp:/usr/include/c++/11/bits/ostream_insert.h - mdp:/usr/include/c++/11/bits/parse_numbers.h - mdp:/usr/include/c++/11/bits/postypes.h - mdp:/usr/include/c++/11/bits/predefined_ops.h - mdp:/usr/include/c++/11/bits/ptr_traits.h - mdp:/usr/include/c++/11/bits/range_access.h - mdp:/usr/include/c++/11/bits/refwrap.h - mdp:/usr/include/c++/11/bits/shared_ptr.h - mdp:/usr/include/c++/11/bits/shared_ptr_atomic.h - mdp:/usr/include/c++/11/bits/shared_ptr_base.h - mdp:/usr/include/c++/11/bits/specfun.h - mdp:/usr/include/c++/11/bits/std_abs.h - mdp:/usr/include/c++/11/bits/std_function.h - mdp:/usr/include/c++/11/bits/stl_algo.h - mdp:/usr/include/c++/11/bits/stl_algobase.h - mdp:/usr/include/c++/11/bits/stl_bvector.h - mdp:/usr/include/c++/11/bits/stl_construct.h - mdp:/usr/include/c++/11/bits/stl_function.h - mdp:/usr/include/c++/11/bits/stl_heap.h - mdp:/usr/include/c++/11/bits/stl_iterator.h - mdp:/usr/include/c++/11/bits/stl_iterator_base_funcs.h - mdp:/usr/include/c++/11/bits/stl_iterator_base_types.h - mdp:/usr/include/c++/11/bits/stl_list.h - mdp:/usr/include/c++/11/bits/stl_map.h - mdp:/usr/include/c++/11/bits/stl_multimap.h - mdp:/usr/include/c++/11/bits/stl_numeric.h - mdp:/usr/include/c++/11/bits/stl_pair.h - mdp:/usr/include/c++/11/bits/stl_raw_storage_iter.h - mdp:/usr/include/c++/11/bits/stl_relops.h - mdp:/usr/include/c++/11/bits/stl_tempbuf.h - mdp:/usr/include/c++/11/bits/stl_tree.h - mdp:/usr/include/c++/11/bits/stl_uninitialized.h - mdp:/usr/include/c++/11/bits/stl_vector.h - mdp:/usr/include/c++/11/bits/stream_iterator.h - mdp:/usr/include/c++/11/bits/streambuf.tcc - mdp:/usr/include/c++/11/bits/streambuf_iterator.h - mdp:/usr/include/c++/11/bits/string_view.tcc - mdp:/usr/include/c++/11/bits/stringfwd.h - mdp:/usr/include/c++/11/bits/uniform_int_dist.h - mdp:/usr/include/c++/11/bits/unique_ptr.h - mdp:/usr/include/c++/11/bits/unordered_map.h - mdp:/usr/include/c++/11/bits/uses_allocator.h - mdp:/usr/include/c++/11/bits/vector.tcc - mdp:/usr/include/c++/11/cassert - mdp:/usr/include/c++/11/cctype - mdp:/usr/include/c++/11/cerrno - mdp:/usr/include/c++/11/chrono - mdp:/usr/include/c++/11/climits - mdp:/usr/include/c++/11/clocale - mdp:/usr/include/c++/11/cmath - mdp:/usr/include/c++/11/cstddef - mdp:/usr/include/c++/11/cstdint - mdp:/usr/include/c++/11/cstdio - mdp:/usr/include/c++/11/cstdlib - mdp:/usr/include/c++/11/cstring - mdp:/usr/include/c++/11/ctime - mdp:/usr/include/c++/11/cwchar - mdp:/usr/include/c++/11/debug/assertions.h - mdp:/usr/include/c++/11/debug/debug.h - mdp:/usr/include/c++/11/exception - mdp:/usr/include/c++/11/ext/aligned_buffer.h - mdp:/usr/include/c++/11/ext/alloc_traits.h - mdp:/usr/include/c++/11/ext/atomicity.h - mdp:/usr/include/c++/11/ext/concurrence.h - mdp:/usr/include/c++/11/ext/new_allocator.h - mdp:/usr/include/c++/11/ext/numeric_traits.h - mdp:/usr/include/c++/11/ext/string_conversions.h - mdp:/usr/include/c++/11/ext/type_traits.h - mdp:/usr/include/c++/11/functional - mdp:/usr/include/c++/11/initializer_list - mdp:/usr/include/c++/11/iosfwd - mdp:/usr/include/c++/11/iterator - mdp:/usr/include/c++/11/limits - mdp:/usr/include/c++/11/list - mdp:/usr/include/c++/11/map - mdp:/usr/include/c++/11/memory - mdp:/usr/include/c++/11/new - mdp:/usr/include/c++/11/numeric - mdp:/usr/include/c++/11/optional - mdp:/usr/include/c++/11/pstl/execution_defs.h - mdp:/usr/include/c++/11/pstl/glue_algorithm_defs.h - mdp:/usr/include/c++/11/pstl/glue_memory_defs.h - mdp:/usr/include/c++/11/pstl/glue_numeric_defs.h - mdp:/usr/include/c++/11/ratio - mdp:/usr/include/c++/11/stdexcept - mdp:/usr/include/c++/11/streambuf - mdp:/usr/include/c++/11/string - mdp:/usr/include/c++/11/string_view - mdp:/usr/include/c++/11/system_error - mdp:/usr/include/c++/11/tr1/bessel_function.tcc - mdp:/usr/include/c++/11/tr1/beta_function.tcc - mdp:/usr/include/c++/11/tr1/ell_integral.tcc - mdp:/usr/include/c++/11/tr1/exp_integral.tcc - mdp:/usr/include/c++/11/tr1/gamma.tcc - mdp:/usr/include/c++/11/tr1/hypergeometric.tcc - mdp:/usr/include/c++/11/tr1/legendre_function.tcc - mdp:/usr/include/c++/11/tr1/modified_bessel_func.tcc - mdp:/usr/include/c++/11/tr1/poly_hermite.tcc - mdp:/usr/include/c++/11/tr1/poly_laguerre.tcc - mdp:/usr/include/c++/11/tr1/riemann_zeta.tcc - mdp:/usr/include/c++/11/tr1/special_function_util.h - mdp:/usr/include/c++/11/tuple - mdp:/usr/include/c++/11/type_traits - mdp:/usr/include/c++/11/typeinfo - mdp:/usr/include/c++/11/unordered_map - mdp:/usr/include/c++/11/utility - mdp:/usr/include/c++/11/variant - mdp:/usr/include/c++/11/vector - mdp:/usr/include/ctype.h - mdp:/usr/include/endian.h - mdp:/usr/include/errno.h - mdp:/usr/include/features-time64.h - mdp:/usr/include/features.h - mdp:/usr/include/limits.h - mdp:/usr/include/linux/errno.h - mdp:/usr/include/linux/limits.h - mdp:/usr/include/locale.h - mdp:/usr/include/pthread.h - mdp:/usr/include/sched.h - mdp:/usr/include/stdc-predef.h - mdp:/usr/include/stdint.h - mdp:/usr/include/stdio.h - mdp:/usr/include/stdlib.h - mdp:/usr/include/string.h - mdp:/usr/include/strings.h - mdp:/usr/include/time.h - mdp:/usr/include/wchar.h - mdp:/usr/include/x86_64-linux-gnu/asm/errno.h - mdp:/usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h - mdp:/usr/include/x86_64-linux-gnu/bits/byteswap.h - mdp:/usr/include/x86_64-linux-gnu/bits/cpu-set.h - mdp:/usr/include/x86_64-linux-gnu/bits/endian.h - mdp:/usr/include/x86_64-linux-gnu/bits/endianness.h - mdp:/usr/include/x86_64-linux-gnu/bits/errno.h - mdp:/usr/include/x86_64-linux-gnu/bits/floatn-common.h - mdp:/usr/include/x86_64-linux-gnu/bits/floatn.h - mdp:/usr/include/x86_64-linux-gnu/bits/libc-header-start.h - mdp:/usr/include/x86_64-linux-gnu/bits/local_lim.h - mdp:/usr/include/x86_64-linux-gnu/bits/locale.h - mdp:/usr/include/x86_64-linux-gnu/bits/long-double.h - mdp:/usr/include/x86_64-linux-gnu/bits/posix1_lim.h - mdp:/usr/include/x86_64-linux-gnu/bits/posix2_lim.h - mdp:/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h - mdp:/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h - mdp:/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h - mdp:/usr/include/x86_64-linux-gnu/bits/sched.h - mdp:/usr/include/x86_64-linux-gnu/bits/select.h - mdp:/usr/include/x86_64-linux-gnu/bits/setjmp.h - mdp:/usr/include/x86_64-linux-gnu/bits/stdint-intn.h - mdp:/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h - mdp:/usr/include/x86_64-linux-gnu/bits/stdio_lim.h - mdp:/usr/include/x86_64-linux-gnu/bits/stdlib-float.h - mdp:/usr/include/x86_64-linux-gnu/bits/struct_mutex.h - mdp:/usr/include/x86_64-linux-gnu/bits/struct_rwlock.h - mdp:/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h - mdp:/usr/include/x86_64-linux-gnu/bits/time.h - mdp:/usr/include/x86_64-linux-gnu/bits/time64.h - mdp:/usr/include/x86_64-linux-gnu/bits/timesize.h - mdp:/usr/include/x86_64-linux-gnu/bits/timex.h - mdp:/usr/include/x86_64-linux-gnu/bits/types.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/FILE.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/__FILE.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/clock_t.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/error_t.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/locale_t.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/time_t.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/timer_t.h - mdp:/usr/include/x86_64-linux-gnu/bits/types/wint_t.h - mdp:/usr/include/x86_64-linux-gnu/bits/typesizes.h - mdp:/usr/include/x86_64-linux-gnu/bits/uintn-identity.h - mdp:/usr/include/x86_64-linux-gnu/bits/uio_lim.h - mdp:/usr/include/x86_64-linux-gnu/bits/waitflags.h - mdp:/usr/include/x86_64-linux-gnu/bits/waitstatus.h - mdp:/usr/include/x86_64-linux-gnu/bits/wchar.h - mdp:/usr/include/x86_64-linux-gnu/bits/wordsize.h - mdp:/usr/include/x86_64-linux-gnu/bits/xopen_lim.h - mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/atomic_word.h - mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/c++allocator.h - mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/c++config.h - mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/c++locale.h - mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/cpu_defines.h - mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/error_constants.h - mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h - mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/gthr.h - mdp:/usr/include/x86_64-linux-gnu/c++/11/bits/os_defines.h - mdp:/usr/include/x86_64-linux-gnu/gnu/stubs-64.h - mdp:/usr/include/x86_64-linux-gnu/gnu/stubs.h - mdp:/usr/include/x86_64-linux-gnu/sys/cdefs.h - mdp:/usr/include/x86_64-linux-gnu/sys/select.h - mdp:/usr/include/x86_64-linux-gnu/sys/types.h - mdp:/usr/lib/gcc/x86_64-linux-gnu/11/include/stdarg.h - mdp:/usr/lib/gcc/x86_64-linux-gnu/11/include/stdbool.h - mdp:/usr/lib/gcc/x86_64-linux-gnu/11/include/stddef.h -/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.cpp - uic:./ui_mainwindow.h diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/rules.ninja b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/rules.ninja deleted file mode 100644 index 5e56f6d92..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/rules.ninja +++ /dev/null @@ -1,72 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Ninja" Generator, CMake Version 3.29 - -# This file contains all the rules used to get the outputs files -# built from the input files. -# It is included in the main 'build.ninja'. - -# ============================================================================= -# Project: qt6_application -# Configurations: Debug -# ============================================================================= -# ============================================================================= - -############################################# -# Rule for compiling CXX files. - -rule CXX_COMPILER__qt6_application_unscanned_Debug - depfile = $DEP_FILE - deps = gcc - command = ${LAUNCHER}${CODE_CHECK}/usr/bin/x86_64-linux-gnu-g++-11 $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in - description = Building CXX object $out - - -############################################# -# Rule for linking CXX executable. - -rule CXX_EXECUTABLE_LINKER__qt6_application_Debug - command = $PRE_LINK && /usr/bin/x86_64-linux-gnu-g++-11 $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD - description = Linking CXX executable $TARGET_FILE - restat = $RESTAT - - -############################################# -# Rule for running custom commands. - -rule CUSTOM_COMMAND - command = $COMMAND - description = $DESC - - -############################################# -# Rule for re-running cmake. - -rule RERUN_CMAKE - command = /home/austenharrell/Qt/Tools/CMake/bin/cmake --regenerate-during-build -S/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6 -B/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug - description = Re-running CMake... - generator = 1 - - -############################################# -# Rule for cleaning additional files. - -rule CLEAN_ADDITIONAL - command = /home/austenharrell/Qt/Tools/CMake/bin/cmake -DCONFIG=$CONFIG -P CMakeFiles/clean_additional.cmake - description = Cleaning additional files... - - -############################################# -# Rule for cleaning all built files. - -rule CLEAN - command = /usr/bin/ninja $FILE_ARG -t clean $TARGETS - description = Cleaning all built files... - - -############################################# -# Rule for printing all primary targets available. - -rule HELP - command = /usr/bin/ninja -t targets - description = All primary targets available: - diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/Testing/Temporary/LastTest.log b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/Testing/Temporary/LastTest.log deleted file mode 100644 index d853a2109..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/Testing/Temporary/LastTest.log +++ /dev/null @@ -1,3 +0,0 @@ -Start testing: Feb 18 11:04 MST ----------------------------------------------------------- -End testing: Feb 18 11:04 MST diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/build.ninja b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/build.ninja deleted file mode 100644 index eda43f1ba..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/build.ninja +++ /dev/null @@ -1,247 +0,0 @@ -# CMAKE generated file: DO NOT EDIT! -# Generated by "Ninja" Generator, CMake Version 3.29 - -# This file contains all the build statements describing the -# compilation DAG. - -# ============================================================================= -# Write statements declared in CMakeLists.txt: -# -# Which is the root file. -# ============================================================================= - -# ============================================================================= -# Project: qt6_application -# Configurations: Debug -# ============================================================================= - -############################################# -# Minimal version of Ninja required by this file - -ninja_required_version = 1.5 - - -############################################# -# Set configuration variable for custom commands. - -CONFIGURATION = Debug -# ============================================================================= -# Include auxiliary files. - - -############################################# -# Include rules file. - -include CMakeFiles/rules.ninja - -# ============================================================================= - -############################################# -# Logical path to working directory; prefix for absolute paths. - -cmake_ninja_workdir = /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/ -# ============================================================================= -# Object build statements for EXECUTABLE target qt6_application - - -############################################# -# Order-only phony target for qt6_application - -build cmake_object_order_depends_target_qt6_application: phony || qt6_application_autogen qt6_application_autogen/mocs_compilation.cpp qt6_application_autogen/timestamp qt6_application_autogen_timestamp_deps - -build CMakeFiles/qt6_application.dir/qt6_application_autogen/mocs_compilation.cpp.o: CXX_COMPILER__qt6_application_unscanned_Debug /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_qt6_application - DEFINES = -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB - DEP_FILE = CMakeFiles/qt6_application.dir/qt6_application_autogen/mocs_compilation.cpp.o.d - FLAGS = -DQT_QML_DEBUG -g -std=gnu++17 -fdiagnostics-color=always -fPIC - INCLUDES = -I/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/include -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include -isystem /home/austenharrell/Qt/6.8.0/gcc_64/mkspecs/linux-g++ -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui - OBJECT_DIR = CMakeFiles/qt6_application.dir - OBJECT_FILE_DIR = CMakeFiles/qt6_application.dir/qt6_application_autogen - TARGET_COMPILE_PDB = CMakeFiles/qt6_application.dir/ - TARGET_PDB = qt6_application.pdb - -build CMakeFiles/qt6_application.dir/main.cpp.o: CXX_COMPILER__qt6_application_unscanned_Debug /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/main.cpp || cmake_object_order_depends_target_qt6_application - DEFINES = -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB - DEP_FILE = CMakeFiles/qt6_application.dir/main.cpp.o.d - FLAGS = -DQT_QML_DEBUG -g -std=gnu++17 -fdiagnostics-color=always -fPIC - INCLUDES = -I/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/include -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include -isystem /home/austenharrell/Qt/6.8.0/gcc_64/mkspecs/linux-g++ -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui - OBJECT_DIR = CMakeFiles/qt6_application.dir - OBJECT_FILE_DIR = CMakeFiles/qt6_application.dir - TARGET_COMPILE_PDB = CMakeFiles/qt6_application.dir/ - TARGET_PDB = qt6_application.pdb - -build CMakeFiles/qt6_application.dir/mainwindow.cpp.o: CXX_COMPILER__qt6_application_unscanned_Debug /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.cpp || cmake_object_order_depends_target_qt6_application - DEFINES = -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB - DEP_FILE = CMakeFiles/qt6_application.dir/mainwindow.cpp.o.d - FLAGS = -DQT_QML_DEBUG -g -std=gnu++17 -fdiagnostics-color=always -fPIC - INCLUDES = -I/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/include -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include -isystem /home/austenharrell/Qt/6.8.0/gcc_64/mkspecs/linux-g++ -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets -isystem /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui - OBJECT_DIR = CMakeFiles/qt6_application.dir - OBJECT_FILE_DIR = CMakeFiles/qt6_application.dir - TARGET_COMPILE_PDB = CMakeFiles/qt6_application.dir/ - TARGET_PDB = qt6_application.pdb - - -# ============================================================================= -# Link build statements for EXECUTABLE target qt6_application - - -############################################# -# Link the executable qt6_application - -build qt6_application: CXX_EXECUTABLE_LINKER__qt6_application_Debug CMakeFiles/qt6_application.dir/qt6_application_autogen/mocs_compilation.cpp.o CMakeFiles/qt6_application.dir/main.cpp.o CMakeFiles/qt6_application.dir/mainwindow.cpp.o | /home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Widgets.so.6.8.0 /home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Gui.so.6.8.0 /usr/lib/x86_64-linux-gnu/libGLX.so /usr/lib/x86_64-linux-gnu/libOpenGL.so /home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Core.so.6.8.0 || qt6_application_autogen qt6_application_autogen_timestamp_deps - FLAGS = -DQT_QML_DEBUG -g - LINK_LIBRARIES = -Wl,-rpath,/home/austenharrell/Qt/6.8.0/gcc_64/lib: /home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Widgets.so.6.8.0 /home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Gui.so.6.8.0 /usr/lib/x86_64-linux-gnu/libGLX.so /usr/lib/x86_64-linux-gnu/libOpenGL.so /home/austenharrell/Qt/6.8.0/gcc_64/lib/libQt6Core.so.6.8.0 -Wl,-rpath-link,/home/austenharrell/Qt/6.8.0/gcc_64/lib - OBJECT_DIR = CMakeFiles/qt6_application.dir - POST_BUILD = : - PRE_LINK = : - TARGET_COMPILE_PDB = CMakeFiles/qt6_application.dir/ - TARGET_FILE = qt6_application - TARGET_PDB = qt6_application.pdb - - -############################################# -# Utility command for edit_cache - -build CMakeFiles/edit_cache.util: CUSTOM_COMMAND - COMMAND = cd /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug && /home/austenharrell/Qt/Tools/CMake/bin/ccmake -S/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6 -B/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug - DESC = Running CMake cache editor... - pool = console - restat = 1 - -build edit_cache: phony CMakeFiles/edit_cache.util - - -############################################# -# Utility command for rebuild_cache - -build CMakeFiles/rebuild_cache.util: CUSTOM_COMMAND - COMMAND = cd /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug && /home/austenharrell/Qt/Tools/CMake/bin/cmake --regenerate-during-build -S/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6 -B/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug - DESC = Running CMake to regenerate build system... - pool = console - restat = 1 - -build rebuild_cache: phony CMakeFiles/rebuild_cache.util - - -############################################# -# Utility command for list_install_components - -build list_install_components: phony - - -############################################# -# Utility command for install - -build CMakeFiles/install.util: CUSTOM_COMMAND all - COMMAND = cd /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug && /home/austenharrell/Qt/Tools/CMake/bin/cmake -P cmake_install.cmake - DESC = Install the project... - pool = console - restat = 1 - -build install: phony CMakeFiles/install.util - - -############################################# -# Utility command for install/local - -build CMakeFiles/install/local.util: CUSTOM_COMMAND all - COMMAND = cd /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug && /home/austenharrell/Qt/Tools/CMake/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake - DESC = Installing only the local directory... - pool = console - restat = 1 - -build install/local: phony CMakeFiles/install/local.util - - -############################################# -# Utility command for install/strip - -build CMakeFiles/install/strip.util: CUSTOM_COMMAND all - COMMAND = cd /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug && /home/austenharrell/Qt/Tools/CMake/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake - DESC = Installing the project stripped... - pool = console - restat = 1 - -build install/strip: phony CMakeFiles/install/strip.util - - -############################################# -# Utility command for qt6_application_autogen_timestamp_deps - -build qt6_application_autogen_timestamp_deps: phony - - -############################################# -# Utility command for qt6_application_autogen - -build qt6_application_autogen: phony CMakeFiles/qt6_application_autogen qt6_application_autogen/include/ui_mainwindow.h qt6_application_autogen/timestamp qt6_application_autogen/mocs_compilation.cpp qt6_application_autogen_timestamp_deps - - -############################################# -# Custom command for qt6_application_autogen/timestamp - -build qt6_application_autogen/timestamp qt6_application_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}qt6_application_autogen/timestamp ${cmake_ninja_workdir}qt6_application_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /home/austenharrell/Qt/6.8.0/gcc_64/libexec/moc /home/austenharrell/Qt/6.8.0/gcc_64/libexec/uic || qt6_application_autogen_timestamp_deps - COMMAND = cd /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug && /home/austenharrell/Qt/Tools/CMake/bin/cmake -E cmake_autogen /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/qt6_application_autogen.dir/AutogenInfo.json Debug && /home/austenharrell/Qt/Tools/CMake/bin/cmake -E touch /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp && /home/austenharrell/Qt/Tools/CMake/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6 /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/deps /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/d/f094c9b08365a0bafbf51585d76ebd73b00fcb962290905d1a92d0fbc1dbe1a6.d - DESC = Automatic MOC and UIC for target qt6_application - depfile = CMakeFiles/d/f094c9b08365a0bafbf51585d76ebd73b00fcb962290905d1a92d0fbc1dbe1a6.d - deps = gcc - restat = 1 - - -############################################# -# Phony custom command for CMakeFiles/qt6_application_autogen - -build CMakeFiles/qt6_application_autogen qt6_application_autogen/include/ui_mainwindow.h | ${cmake_ninja_workdir}CMakeFiles/qt6_application_autogen ${cmake_ninja_workdir}qt6_application_autogen/include/ui_mainwindow.h: phony qt6_application_autogen/timestamp || qt6_application_autogen_timestamp_deps - -# ============================================================================= -# Target aliases. - -# ============================================================================= -# Folder targets. - -# ============================================================================= - -############################################# -# Folder: /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug - -build all: phony qt6_application - -# ============================================================================= -# Built-in targets - - -############################################# -# Re-run CMake if any of its inputs changed. - -build build.ninja: RERUN_CMAKE | .qtc/package-manager/auto-setup.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/kwin/FindXKB.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapAtomic.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapOpenGL.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapVulkanHeaders.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigExtras.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Dependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Targets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6VersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeature.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeatureCommon.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtInstallPaths.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicAppleHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicExternalProjectHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFinalizerHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFindPackageHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicGitHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicPluginHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTargetHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTestHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicToolHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicWalkLibsHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigExtras.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreMacros.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreVersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusMacros.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusVersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsVersionlessTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiPlugins.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiVersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsMacros.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsPlugins.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsVersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsVersionlessTargets.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompiler.cmake.in /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXInformation.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCommonLanguageInclude.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCompilerIdDetection.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompileFeatures.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindBinUtils.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeGenericSystem.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeInitializeConfigs.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeLanguageInformation.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeNinjaFindMake.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitIncludeInfo.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitLinkInfo.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseLibraryArchitecture.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystem.cmake.in /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInformation.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInitialize.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCompilerCommon.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXCompilerFlag.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckIncludeFileCXX.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckLibraryExists.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ADSP-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMCC-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/AppleClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Borland-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CMakeCommonCompilerMacros.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompilerInternal.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Cray-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CrayClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Embarcadero-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Fujitsu-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GHS-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-FindBinUtils.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/HP-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IAR-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Intel-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/MSVC-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVHPC-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVIDIA-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OrangeC-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PGI-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PathScale-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SCO-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TI-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TIClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Tasking-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Watcom-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XL-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FeatureSummary.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindOpenGL.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPkgConfig.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindThreads.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindVulkan.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/GNUInstallDirs.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckCompilerFlag.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckFlagCommonConfig.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/FeatureTesting.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/MacroAddFileDependencies.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Determine-CXX.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU-CXX.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Initialize.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/UnixPaths.cmake /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/CMakeLists.txt CMakeCache.txt CMakeFiles/3.29.3/CMakeCXXCompiler.cmake CMakeFiles/3.29.3/CMakeSystem.cmake - pool = console - - -############################################# -# A missing CMake input file is not an error. - -build .qtc/package-manager/auto-setup.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/kwin/FindXKB.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapAtomic.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapOpenGL.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapVulkanHeaders.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigExtras.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Dependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Targets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6VersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeature.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeatureCommon.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtInstallPaths.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicAppleHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicExternalProjectHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFinalizerHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFindPackageHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicGitHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicPluginHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTargetHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTestHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicToolHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicWalkLibsHelpers.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigExtras.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreMacros.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreVersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusMacros.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusVersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsVersionlessTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiPlugins.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiVersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsMacros.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsPlugins.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsVersionlessAliasTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsAdditionalTargetInfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfig.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersion.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersionImpl.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsDependencies.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets-relwithdebinfo.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets.cmake /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsVersionlessTargets.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompiler.cmake.in /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXInformation.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCommonLanguageInclude.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCompilerIdDetection.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompileFeatures.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindBinUtils.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeGenericSystem.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeInitializeConfigs.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeLanguageInformation.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeNinjaFindMake.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitIncludeInfo.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitLinkInfo.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseLibraryArchitecture.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystem.cmake.in /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInformation.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInitialize.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCompilerCommon.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXCompilerFlag.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckIncludeFileCXX.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckLibraryExists.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ADSP-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMCC-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/AppleClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Borland-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CMakeCommonCompilerMacros.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompilerInternal.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Cray-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CrayClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Embarcadero-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Fujitsu-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GHS-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-FindBinUtils.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/HP-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IAR-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Intel-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/MSVC-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVHPC-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVIDIA-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OrangeC-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PGI-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PathScale-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SCO-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TI-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TIClang-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Tasking-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Watcom-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XL-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FeatureSummary.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindOpenGL.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPkgConfig.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindThreads.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindVulkan.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/GNUInstallDirs.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckCompilerFlag.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckFlagCommonConfig.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/FeatureTesting.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/MacroAddFileDependencies.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Determine-CXX.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU-CXX.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Initialize.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux.cmake /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/UnixPaths.cmake /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/CMakeLists.txt CMakeCache.txt CMakeFiles/3.29.3/CMakeCXXCompiler.cmake CMakeFiles/3.29.3/CMakeSystem.cmake: phony - - -############################################# -# Clean additional files. - -build CMakeFiles/clean.additional: CLEAN_ADDITIONAL - CONFIG = Debug - - -############################################# -# Clean all the built files. - -build clean: CLEAN CMakeFiles/clean.additional - - -############################################# -# Print all primary targets available. - -build help: HELP - - -############################################# -# Make the all target the default. - -default all diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/cmake_install.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/cmake_install.cmake deleted file mode 100644 index 16bda7d00..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/cmake_install.cmake +++ /dev/null @@ -1,74 +0,0 @@ -# Install script for directory: /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6 - -# Set the install prefix -if(NOT DEFINED CMAKE_INSTALL_PREFIX) - set(CMAKE_INSTALL_PREFIX "/usr/local") -endif() -string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") - -# Set the install configuration name. -if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) - if(BUILD_TYPE) - string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" - CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") - else() - set(CMAKE_INSTALL_CONFIG_NAME "Debug") - endif() - message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") -endif() - -# Set the component getting installed. -if(NOT CMAKE_INSTALL_COMPONENT) - if(COMPONENT) - message(STATUS "Install component: \"${COMPONENT}\"") - set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") - else() - set(CMAKE_INSTALL_COMPONENT) - endif() -endif() - -# Install shared libraries without execute permission? -if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) - set(CMAKE_INSTALL_SO_NO_EXE "1") -endif() - -# Is this installation the result of a crosscompile? -if(NOT DEFINED CMAKE_CROSSCOMPILING) - set(CMAKE_CROSSCOMPILING "FALSE") -endif() - -# Set default install directory permissions. -if(NOT DEFINED CMAKE_OBJDUMP) - set(CMAKE_OBJDUMP "/usr/bin/x86_64-linux-gnu-objdump") -endif() - -if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) - if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/qt6_application" AND - NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/qt6_application") - file(RPATH_CHECK - FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/qt6_application" - RPATH "") - endif() - file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application") - if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/qt6_application" AND - NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/qt6_application") - file(RPATH_CHANGE - FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/qt6_application" - OLD_RPATH "/home/austenharrell/Qt/6.8.0/gcc_64/lib:" - NEW_RPATH "") - if(CMAKE_INSTALL_DO_STRIP) - execute_process(COMMAND "/usr/bin/x86_64-linux-gnu-strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/qt6_application") - endif() - endif() -endif() - -if(CMAKE_INSTALL_COMPONENT) - set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") -else() - set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") -endif() - -string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT - "${CMAKE_INSTALL_MANIFEST_FILES}") -file(WRITE "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/${CMAKE_INSTALL_MANIFEST}" - "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application deleted file mode 100755 index f8aec8198abaad25971a6b1318b138e334bdad23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1543648 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

WwNc6T95WIlW&i&Y+md^4V2uks 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

nqA3q4)MjjO$GG8+}z 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%0Du^jZ}BTv;yI78i5aaA>tnI1}Aq?kp@|$o+c;S5N zn`wBgz%>Kbzri-dZrvR6(n1RtKpCW}0ogaW-**t%+d*kdj=K~~lheW3hj35e)w1~^ z12G=XoMMeEwi5_y2UbN; z3Wy&TQSqcqN9plQG8>xX-pC0WQo);ylp}I-MxSmmQ>BQXg&2{Kf(0Jzt%{OHQ0(wy zfD(x7vIKLsX!E6;@*U=F=6RHWKnBK5mos0auWs&d6HX|nMb)6As)EKA%yg2Hc^EOW zkVz;^+lb~Csw2ijyzDjV8cy%+>>!+@+3dI=Yv)xo=443pcRm>?1T~olSjGdNCZ;`x4Zp4_?WS<$$LZz z$r)F9R&t9AXX7eZjUd)36JWWTl(JofttKXHIc=1jmc-inRrTff>nG>pNPaaNvbml@ zqEwfOJR$|)86;=hN+aZOtMgU;!wTm=4W^DHlV}S#2_v}g!0w$>$g0aYpO+#yt@9|p zn8++)RHIPXia~QWeF;LTG^8FzSD4RVQgdk1{cdk#6SD(7cbo?1qtJ;*qlD}ylHIM z(bVPQ&>P3x1vhgXbOjX-WRc?-4aW|Too_U}GHJ-DJtgRLPfZ!q9Zy@r9v+T(yP&Du zLKO6ue=4OZ(;?EIp zlp-28irI6hJ8sh?=bsPc@^e5ERmM^js4y|+z{A%@t8{5*iBtD;j~BhC26z!I>Ku*N zI8R=eAfM3&Zni_pr0|Z2Gyq2mO(yNR535dzqAxN{Yd|YgUr}8o0%V1p$AOlM75!yY zp)|(xq^qE&mXkF=3{fw!*%LEMUHnRM4Ey@OV4%3&=b1Q=Rbn9M=deQj-3!KCgwUfl z?l51(SIIfhJHLaxh>n!8Ih&<3CJdd4M2UZbZ72ssBmSOzC?CTtj zTgWpl{Odj{Ksg04l@jjVu5Ygn`d7DGeK{|Nk+CFgV-o|_!!gov<~s!IYbbk6iekKx?_vi>d7Mu0aZKmG;x*vBIj97oK;*_&flC_}_9ePJhK1oRCZu0p$NiX#FfDqFLuk|CxQRA1;xv8!LpeR? z6zO=JITmDw9!J!h7+I-Lvv3`yL44d;&f!FMoqF{T(RUuOCAlR{Iw@_zc>{%lkV7Vq z3wd_Xj!n^QAS4D8!rE&~sI$^Cw@Z(n(qN?Y%5h+Ww^w&Bt-{k+r8f5cTE!}!Ln=`l;Zatl8>DJSz`Cv>T1rj}-u+Mv|q10hG zNoy^tcclNCo@A$M_S~91w`R|+*>h`JH1;$KJ?MS*{Mv%dg`aZrS*deJF^f?^32XBs z%1-2YasNO>h0c`m7bx-|_{R7Vkc!|SqVF(m?>=qsK5g$lZSOv9?>;?SX)_{U-qbll z+=d6X76__el2}(iqEQ?)Mgg+{oa5M6v376F?YeHToW#y|W$e8LdUM6h0r=#qMN|ew zyGV;dp5V6<1u*FlC-)_~xH5~J307>$&NKGmCnkRi*QV2a!;NjJqNbY5l^M$)&+;6s z^vai5Lk-7fXASiQL1}qfr~}wJ)J~=YnA*NCfEqK0sw`JHCw;w8_=PQZ>Ycr|9(&{V z@mOCkXBOlD7dr=*hUhX*FeI(5n8BTc2~#efXFL;`{t|c@wk8hz+7zgdC3Jv9U}^B{ zmB=P5lObXwDyS@OJOQU%dE4jeG_Z=Wd?UIYVC=&+YhY@_c?JW*?!lszh?1%&7R1I> z8K-dk8k=D$-5#W4z&TXNhU8g&-B?bB$ivIaMhEj9#aC_I-FGl`SL zd~9+h+xA6iw|!9pZeM1Izj?gN7H$q2FnGYv5rwS=tMqmZg+mx`g6v_d7sZ8W2A&D1 zgmLMTMV-)LRAhFp$B5{Ao{x*oDOUUhj_2wiCxVX3$z3F1WqD77;j|FOXF)qH(LSOEP^Jr~tj}m{?scNY z4Jd#C$tpM}b89uvGQp>Oax2E)=Z!dmNdY?wj=@o4K!L@7{0=R%HUQ<+5+j)lQty=g zn49CM{h;&gZ(wLfG#Jw9MK-2GQHdEA69zS8FhW!U2QHH&ap$u?GM%s~0!7ag6CT4pE`qj<6tO`nmK0oZcV_QssxoRW~a+hSe7436oF@+A(rBExaQ}!GNPpsc+ z={)>SUDN0|6?U_kdp36om1KV-VfL9sMnvtg+aT49 zNPb^CbV6O#S#<0ByQq(jfG5xn&Zg>U^RF}N>@y48W%Ps0=E#q8fP)S7nko31dy6JK zFt0mxx%V?wNbi&QL#>V)iKh9{P1prkFFkmjqj3K0O)$SCJm2hm+$njH^h8tU5#-7z z*fF!Mf7S64P2`gb4rRA8EZT|LJPfr+6FZD)6YNA}cicC{_+p2yO|4aVR6tTWEkq9- z@DaNU^Z~&w!bD!&?HA<@$xdj3muv7=1!IY>-|h0>AHu6Z8GA*<3~ouMt^5cGYp#~M zCf&#r_96YSP`ise8}-iCPOC3!x-kTOq=M8EQbU&F2D-Ejf&@E_aJo2@1zE#9W^>4{ z2LFeZ7J>=HylQ6yqUBhHfLS)+#X@%hqz(<<#?NAa2-%_zb=%o*WG)Le3sb50avs$R zh$U1;NDl(Dig*iya?0zD)n(DMj4BDd`(@pg@at_r4}|>MoJ3LTp_~))h9ObZ?l~m0 z*rB@`wuHl>UIS}4Kx%yNjhOe;E6VcElOM5*@D)-EJ-d7h9O96@mEP4?9%K2NE6vUR zaQ^={BK1E;7oNr!4O?N1Yok>3%}1*Toy+u|um3q_l_z%j5srgYs_@w7$rt%y$Bfm= zU>4F*tGj$|2dp#x)u(BR)0gGM(d|+^)1mN=4-d;&HyP`hWz=k6S-s6uLhXs_V*;Wo z?6f%S<_j+wcRd3`66?RhAD&rhfIxW7f>Ce4IaqK}?+e1B+)yfMwcGk4qZ*irw~b(n zKF&^gN?6ToN@K|6)nXm0&Y?>UGl7P33IQw-*w2C&s*e`c5i@@qO}CppnLWuopPwh2 z3Xz-PfhAfoebW$q&O`{hFCwk^dxChii$s~Ql&yRm!1`w!8eh8ZuE?2Q&OlH#05T&b{P3_7BNdflb~6WXLga@Q}+dyOas3+k!}fv zCMe67pPVx}+#K37KJ#%yeO6G?0oIodV3epb)k#MmI49K2OFoWXj5%P2&3%e-3wXwA zV|UQQ*ooUqjA7iV&?AocJbF53bt2`h0|(>8FFoqx>5a}5(X;M#aAH2T+H3J}UED{? zishAyeC+ksVEa7E8#g<9mN*@ZbCf$>hI$UWM?HA1z~L+o2`w`1m7jD&?4JeC*7u>n zDe}-B5#eCcP8o%o%V9xlqjP;5`-OZ8>g9FY&JRjbDs*onzxUPdvZVZWG=>aH5fiNr zX`B(GCw|)VVo2T)XVMDS{VYn&asFH~N$QxUlLv#Q$Tj46s2lxGo=hOeQw?N)g~kmVN%BU~PwX&t zfFbqF!OV(MF^yHJKGq;j)gr>`cvgO-c-0B!pE;tqq$8Xhko%#3N_c+>7-i$a^Q74C zIdyD~g3iIcV5(gPfB1<$;UfxVy6~iubQEF_&#`$ZdI$o$WK2a;90073m}9&G|3>Aq z(-cw7jm)7!EI=q+qM^W)kLR(Vf}~-fzK>{J7(_UoVP_Q>F^5#q!Aw}Nvn&);vygLM zAXR^8EA>gn7=sF!&HvEp-=&AG)5#F>*vakTI7Wjmy}{1v0*J+83Z@?p^H&-Y1i# z26X!c9=&vblk~_u`w&s8>095`?Y8N+H0TEZF)g0C+}RY<3ZBZ*@cn(rIZqXrE^0U? z5@CcF5gcJveoZt$7p2*a(H#O1I&k9b?t-t6(W=ZNI#<|9P#~V%Ay#ezYfqSQ7C9A_ zwAgpWDSU`%gNzOfP<{xyuZz>759?jgIZ&U*XqBpSA!nOdwl(}1vh84?;piH}?q>@y z7UuOyIT97wvZ7FNtaZ?RWmDTy44gVJ6AqBb55-9xt2m0UKy?prV4iWYv_76YsS6?V z(?)fZlPK$wctrgmWIEMBPC1#$nUhi8M6o`roRvcSk`Gn882pcQcg{*)UAHOcq<}$p zVZ+jeFJr@{YO=a>;c51I;s6SXW&(0Nu|_YXVg;UzA&X;O;tMsxfmG@_(5R3Fmipce zNj372B&*iBK+@{RY7aiBfz*w4xR%_w|7h-aH(3wupv2cv2=?~7s23l~?mwEr#pU6n z_+La6r?5rM9SDYV=%W_3a6R5RWyz6l<6L_I3d;JG#jA}5^aW`_RMtU-S*r^&sP{un z9ccX$wt8OjL8IIz${UuUpGY*_h{b5G?h1P~q(g!3>A?pJ@_ZWAgzJS1O5@l{c1m7* zQtSrA$~0s$uy-S`XNo*U%AVwad$xEaYGy1Mt5^Zw>m3UE8=6B;oqR}gypWr+m}Tf&Ip_Gy&a&J{h_jV5gP` z(DMwzU*UST!j)V^VfhXtEPP zdODCZ@xED-!DwiM78s=BsO3YPV3bv`#N?q^{S=--JI$@t^@Ho;SD5b6AwGnxo{jo1 z$&G`#W%2$K;%ulZ;^(-g}<2o482=L<1DUp$;Nxvy|AdGm?C6@&j;U8 ze9HOj2$C>qhAM+(16doW#0VXf^ngzInrr5P&t7!D|Bn_%UFw9HP z&GM5g5%FpxqHvLg;m}UA5mAd$OUol&$t)?C6fxsqvY2UULibJuo_q_!jk9dn zt;*8XE9Yb!#k@3GaSlw(_4SDMm!FwwJ~&Jr6FBCXeUE6|;00SN&&rU@iiv-54eq5I zsQ9wd-5emv5lV9KWDSAbYzl6;0{JnUWj;Ge>G2yN3o)He4~k;QZEWqQouy9)&B=>Xxh&E-v+11G>l-Ji#2-zPu6W8kQc(kd(86$B0jc zkLkJ4rF#2(vj=bIEvr}t?@I6^jTH+vmx=M!u_A44nOaR1ssk4~gKQSzI*YDr(e-q6 zJriBeM%Q!E^?Y=_5M9IHo1qJfAqbr>f2ABxz=?=vrqxH_h!kBKy)*OfqOvpm+aYfT zpN2zO1RwD$nq~wHj&+`a{SgjixY0j&h;KDwtF9}m_!mm<$}6JOHy!bJ$%olb?VHN%Wi@b8ArN^uEV;(9)(?=vQCg9 z9RkZTQOuPp_Q7yS>L|&ZjSRw&BgH{l)~(FlB~;KL4WPS^h9$t|qXNGPl%QF>wZ$!M zc?CvFQ{;KPtxdi8%Fmv;!Rn3XqEyZq&MH{oMmSvnLqdz8duIz^&|nU=n=gRDJ8Y<( z1W|cJB-#`RT|pr5Ee&NyaES#sjp!b88%fn70KtWmdOI>NvdH8;q9XEn%I#xqiMC$b zw?HK=>9ZntuuS9xX5QjWx5F~C9HA_&esK$KJ`tfA7d<$#Y#}d3t-?iG;7Uv6E6RPCtxg^D1xp9C-_Adf5=1&A6NKbm8MxQ z^4iIBh*6l$=od)W#E%}g1yy@($~!+eUTJv)E)esV#q{2s7f*qn#*-Dxd&J~2nl1b+ z9yp1V0!G3LM#>En(`jM1g-kE8a5!%EI8ub07*gSTfLPZpipVm5a}OIKFjg4RFS2K! zJNKN8?jEd8E4!@@PlF3xr`{4y$&O1p%bbRXJlwfgpmqcennt;1VUtFj1?C(k7_W8#y*t7yL*E(&{Ba3A|KKw<12XNH%QUpn^cJj4wMsD z!JLDGDQF?8&n*s4hIsiTTD8n75wK;#(J9NJm2q5-ui{&`cDidYpD=?}wB068*^fP_ zl8?|oCy&tMJj7?Hz7X0~QDwjw-&>7R@fM;&KBnlhUv3||92};2t{@=~iGg3lJc@!z z)Qw*L`x7`HyX&xTipw7R8lxDQSVnavjh%!zv(`m~EBp;uJl#=ijvma$V^}NYMRPuB z98NhoNR>>MwJx#)5z{S?DU4A$(kMi(B&eD`)Ig+kV)J%lrcj40$VV`xuuCqEn?i+! z1)LgJX?ck-Oy2l8w8@)z#Bqc~B9`LQY(JnITAPVvQ)2P>YU8&Bxj-+^9BOCe5OR3l zbaI`}9R(M`0;#KxW+!pK5E-CDQpM=9N>t&UG+QtI^Pjss6|hLCP9@Tom0Qzmht6qT zpnf{~UD<-BPI9j;#&okhlMOcmVj;cApJhxi4;ph@3J<`_P+UeqkQQE08gBKRPasy8 z*to*tU(h;->v3A+S%lv>UMgTvF`h=gNRs)Zr7zXJEuLo;3O=GV2BwcAXyeK<346-7 zaLN4LK`t76=el%aomQe#IDkz77K!C^IF}{j=c*Sr;;j`2|z0B%wsS!5tCekJkHUhh|oHVSTj$20;I>`vv>js%hb@O65|A??Ib3rxaLM z*-zUjo`c6Y2xrKBrJW%%M|wAt!dxm+;0aQaW92sEfjw76)^NGcy+{XG_E30u$6*Diq97+6Bc9F*W7_-QvnA(qC7PUDf8kdZb4MasXE}vOE zb*6q*4|wc#HN{>>TJL6KZ3oHCG%0zv)7WHWF=^8vWcn`MMbS|dyO=4FLF|keL5f2N z3LLaT;ME}}I;2|Dr`Cv+rkzzn)MP#);?w*v7-3}QO`rmbtc*DRoNVrNZ@Xl{!cw#; z;tMYbd~9y@NaV!_f#)c*gaO*CjLsJ}6b);^o*Fg|<5k-{ zovE8DIgB92BW-Y$P)G&#u$8lg+b}EUWAm{-L!R`WY83AHyuHC0*Na6!MEvDSOCix` z6X_0^_k#XXqFzF+hV?y07qG4sH-b69auJ;atPdo^aGiQYn-bAaNK1H49V9=87XbrV zW`oFEOeVS|m=VKKRYL21_UAmwb6lGoaPo!bVs*H2wf1%nmMq;Xl3gP)Nz+rhhn)M$ zP_idS+eWH#ijzy*SxaR(DvVP4lVD?L`BEH-+`{Vn%AyAW1uuh*=3O_`TO<68B+}>h zI;%|C;c|E{Z8LQ@7Jj(SM>aJ;ZH)FBa@$hfQ}WufW3OMoUTKD`7u=BNx?6DTk)8t^ zx&ZR38G`nW1a7jNL1UxYZsc51gf(s+taZV_1Z{}qFymM~qU70ezuuw21iL5~*dYtC zKq4%`)&4=_+^S^ja6dTY%6o>TF2v8JuETgSTOZ7vJGLLLgt|ChTjbwp6np1f_QO1K zhovl=YnAVEWH~cGJ1QQBN-SK}axOJJ-66~gvnc50AD>4C({V?|#`3L;Fk_UB+6)_V zraO&9ZhoS}n9l|~x{mWixO(HfR2$$^xzkkt?8jtUnusolz`aV>Kx#4M2_|+RU!T-X z7B|-eY-&vV5N!-pzK{vTEen?=_YROfONf4MLh|~;V!~IlcoT5x9Qv%!m#nUL3w4=Xd%x9p&jFGv^M9{Nh}R&OAnfL(_JUTmo9nuPqZ@)M~i z{UW`qMi|zWNBtyD?yye!B8SVQ`7L3mKi^;_j|M`|5J!mBB3?qFqc&|{briM(DES5l z!cXO88MRq{S8Ymlo8g6Pl520sT9;ZXiuT!%Be*!^kmz^1YsgJ^qfd>Kv-l&llX=~d z&c|83u7QtfGUAdNyjTQfI>gjpGT@|w5@5L3N8^haMClMP)Pw*VMGPO zqJz-$g10K722vG%b8yCpwv1rhloqH4Me(<6x;dB7%2md3YD=edb2@Rl+URbFZs4GQ z5pHjTLAOn<4Ov-XWl+PxUrvY1nQ%E;|MGcQ!VeEO_;B0Mzc^O z@=XiGm}R8Z-$U9W_$Wwcg%q|}t(sS|M2a=Pd5V@Yak0toAt*{aPzUzJbJ=&37g%@< zsLeW{dy&{BS|1Wr>U60pL;`f^7~5C6w>2PG%$o5-lDuMg5aa>#tDD5}OJmfc>Tb}T zhQi~zRyifltW(^X7SnhS75Yv&_0UIrMO*G&dTz5pM%t7kX-};!wGjx^$@f-t7x2LTHDUsO@1F$?3~OT1DA@ z;9D%M-8tkOKqj>!D?wmlz%-4kEH|}*L@~YY0Vq3WR5A%+f~j~v5Kp%*&IB;cBDBbd zdB~;@W`>%Xyus5|(_ThJ^d2ln1Fsn*Nm^+R_I4{5e3VqbqPb)PSKypb%hT}IL?6w9 zKwKKtGg2^OD$PiWc&FOFccfzxaBfzVivDlZCssd zjLDpdJ@y!+BSd2&Ka*F>L-~6)c6So~`VeF$&4LNcGYc5eZ}N^tDJ>%66^M%Lr;%zJ zuM$Jn1goszvf>AQH;xy&t%;Z1kQ9hDj@hZ{0=X=p{s`v<$wvk@aPn&NBaws^A)CEh zmZv9g{$7B^rq47Shbj$QC@g0uAS@?-o&`aG@Luq>l}tm!V*>}7Y%fbhFIt!c#w`R4 z$r?y})aps%boC?6yOw(Hmi!?}8<=Ed_H!bk(8z^R7L(<%l8_I`!-&Yl=CtBO>70#3 zy?e|tL{q*99}M;pPE5QUY@-KM&Fz7CasD~EjJY6Qx%8*pEdH>Y;9$;%(rx8>;E7w{ zYHePEXsV~t{GdCmsCUzyH|uc5`DTkg7o4s&Ehm}sdbOpic)tPvIQv7Qq4$xXQCX#e@D4e?C!Zxdr0|6h;TVXlwz>ut*R7UF zX4sIyIubv;AQ?-l2iY2kiJK!1j58{@LF#bXc~uuzu2*+w=DsnWh0`XM?liShIH~+p z5N~pcg6flLaov0uy>d}1+LhH#f2G-Lsd33ae*CGH4|$~=O9d^>TQc*$C%#DTeZ|lL z#8FqC$_}iBry15FKDBahi9gc`U#hqcWT!T8$GI6&2_R98;^KLQ+2fpxPx*Sqabh46 zS5`M#T}wLz4_l|5HTVK{4#1Tm@m}H1%pq05xl(Ku!In_lIxtMigk!GELq^^_)Ob?tdj@ij zIKzrUuP(Kx`6iFTTy%p~O`|YVc|eX)nmO4T^dS?mqW5mMFUH|@RDo(jYcRmpXsruz zE#qKE5KIe4y3mbvKjrAKpdsap5>y?X2D#BDUX4R%NJN@zwPIdYPs^~BMdwx`{X2HS zdkr+4e^e9#W<{9m`7Bf(Vr%5}=qU5KN zh*7>aRs>g$g!#q#+ZTBcd2d7QFqoRjwq1f8IlN z;(Ke5Y;yOWZ?Lkh8Qe(WH5ZS>OUpu8>EN*2Fp;^ruZas)x7T_%=HH8)ILlEh7ha%^ z*5*S<+R?oKs3gF3S#ZrTSXBHJ2U?`!=ZWAvEt6QcS&K<5=L7NwylvRCz`SOK7Sxal zDJcgpWW;E0EzW>xn=6}4*XIvFptusisp1|bA%gEh@kARRU1+EDGXSi~4cpPo zdOd_aq5Juvl0k)qj6*SF+15OL#F*(K|9cx`U^P*XoO(;^a3+KGLcWOim{AKi4qI_i z*Eqqb?pbN*e8@_3I;mh1&mM9ocxT?|->i^=6=+U?T2yETYnd=x%V0fJ8|>1i1u9N1 zui!w=Gl?AEa#-$Dy;a1ez)%%C*5$@KYUv`+wQ`39UkgM0^M-YX-Ug>We8|d=>B_%V zj(1fbK~yoRZ~;}Ko@}rAqcSW;T-80Z+MF~nX#|&V$88sO5zsN8B5>&EC#(cHm556y z^2%58!YQ0&f_PJ*eb4C{BhhK7gsynFZ9?G-=Tp>!qU)&DTYD~rYdhvoBOtQbd#uI! z_K3@M{#T*})^{n{1ti6=9?23u*W<$O!r|i*+9Bh$#MtDq#bl;y(20qiA7Y3lf-{pL zvuu&&))Mi~uqtcBtpPoHtGhvWMXJ`>xAchDGPm{TG$xI+t=i*&5M%tTPr(VkyM-)j zU`vtg4~`Pd`;BoHsl;npF8K$*CaiIM9SPc%IVn`v1e`+CEGgs zU9}8KPGW&caF)n6H&>Gl$PNOk1w$U_AXsLzQSKH}G2o^PK{A`*0J>W5F1=UpaxvZ#JP#D#qlZGD>0FhOZ0KPF;(P7$BC^k z7|d2YQ1yn$z>@ETV@PV0$(p+PQajCw!FIE)91}T39Py+n2u>hvG~T2lUX*a49*!jusfhObZGZ7z!hAe3bD#e2rpOj$B5bXU5&I-8Bcy^h`rn z<@h!nw2s4H6Hme62R?D7Y8~O}K8Za$=5cSFmdlKi2Ay5Oiys}W0Oy8bt~dJ z7h2#=@ao!5ZrEt7uJNt-3^zD@?KL;)GlDA+XB-%K51iFntq6T0=n-Y|+MBmGv=dCP zUSNJ7z`suTwwL<~_|3sO>a_H?n>*m7CHSAuzsZ0jkmbSZ7Be*yLSl`n;H9Q?##8!@ zR(p3xe??oUV0t=;n=;M~D0BIv|I*!+&i4kJ3;NQW8@6!oy1FyKp%c2**=Ik|lVlt^ zVChbFEqkF=gr9Ahs+-^|w)xf1@69z7eUiaQ>#lz{p-6;nLV}k*4J+68_p^*Y$Vw@Y zU;WiCkfXUt15QI<4qK)ntBfXsBHfO%j_WdYnkq60Al_%(F^k8Ob_+2BBb;1e(Sn(t$^bC3u4 zP8~|=&nm=6uj_t>2nu`ZdXuDyqbA1UmgXww5m?n-g{Fs>B&HyVx>pD=IwilYGA+7H zFJ0*gl2_nG55BDez$P2$v-owL#$#TDjlypXR^=zNS%zU~8=DospSVlh_LFC8z5(7I zk$QFp>K}I9vpS>L@w4XmDhMy?=k^)`t#0l$?Z|+;7$`C(ZgU-Bx-xmatu?+DK33;u zc(vQzIY0tc0V1K8UWrwS-i!n*VdvFa4+U1_CUq9)C0O8yxg|vFEMtv832lSsTRiJ| zi_YF>)z>p(+Z{uD4D;b=sXu=dbLG&>!}8yV+nD&)`T-{lY2=_1;S~;;weDJ1t|1kn zv>mpqECM!C(_`gcD`r9TsFZyTdMih?9Gn~rtb<#yf=C@|`3ef=3>YM(P|P&i&Gs6O zIzAr(-S98(HTOZ&5vrufaHDz9hc6Iycx=p`d>fS0+%gWzY^?$RgmFoRXh5gta)nBvAyQ;ryS8uNVnO)sey=zk& z)~cuM>b2DkfAs@)^``1C+SMDXU$Cq7>dcnjdtddt?doOKUAwxw`q%C1!Rn{%YNh(J zZN1|^-BJAuyZp}T>6QYYs6J&^Z>j!kyZX-Rw?Co3zP5VGu0D20_3L&yRXuh?f4;YR z&aT?kU$v|It6%n4ckO7q?drSjs#X0DcJ=D&*X`ka?ovr?;zxsW|>yZZAl+);hiO}+f-UwVG^qd$CyeEIan>i&oI z^4{tP{nbb8>VfLNv#Z(a%YRAR{mnb7KWmrE)jzST#pOtNMBW>+DCh-Cfl)cGa$a#KS)4VblMUYgf0ccJ;#^ z_E`_he#Nz0va5FWDG&RMhaLY_*KX0S+SPyTVW0A_2R`Q7eTQAOtN+NuKH*_+{WaI_ z?RM3!{-THdx`(~_*Im1}*;Tvx4?OH+9`>e>yLKn+s$Kp29`-99_J&WmcJp@CuKt{d zebmFg?USzEtX;LMKkH#1@vzr@%C(!et9JEC5Bso(z4p_tU1nG9>fiOSr#$T5&uF`c ztKaRfe#)-ys{SLpYFA(R8`|zf^@_jxn|AeZ^|$QmTdH5Qt5;S3i(S3FI`vsMmXmhX zsXk>_k5`ZUrvCb?cT|7dF7K-T8@qaA_0G@f&-Yc|VplKMomBo`-thd&e||b`@r?l7 zfnVPLJpJXUHFzmLi`w4{_??v_m9P9a*3dqV8vLjo2kzHtgFl|YmjS<{@|wz1m+q9N z`a+e;HGzL?W#Np%lek-%Sr1>*QWo4_A7_-`igHG_XHf&YNP z|7imM1%rP+fq&lMzm>rM#NfZ3z+dx%(fIilYwy!_OBQ+>O)W&yl3P!=INVaECv4C2)s7FHPVMe_ocr z9sb;%z#aa)Jb^p>`PKyP@aGi?+~LnF6S%{lS0!+VKd(;U4u9@R;0}LYlfd5yJmI?E zo50T){Iv=E#u&UhYVF;6eF@mY{_jiR4zH#Rp5oO^@?3{kvkBbc)m#F1cr~BE9bPRM z+>O)WRqM|DdExNti3INO>P7;0c(s$j9bUB)xWlVX0(W@TP2di%b`!Y6tD6bj;Z-kz zJG|;AaEDie1n%%^FM&I}x|P5kUfoXM4zKnT_`40?4ifm^G5EU^_$Lki-zM<8zd`Zs zdlGoZ;Qw6$|4D_*>nG}q)Z z{6R_kZ~P`5rV+Qxy8*9I3aId&B_)h_T1oGyu z7+p1R@OJH>$a@@(}2IO@`}p)jLyHp;72ey_-W|xO@J58 z+g~k#|6mFH9|F$(=rv&Wq|Y1NYmW^6dK`H8Y3T2f68JXY?BDCq?9LxCxL3y+{0j#6 z+8%?y1p;Z&b1#;_n}GAVUQcKJ{7^~z-zkCrTkFT`$*iBRm$ZNV-TGXwNVWFMfESJb z`%2)Sw0^vn%KCW)5Q*>QwL=EqHn`V_8T>N__xdM;|2x2o#`C;yEylO|0q1kQ^4a=% zJK#nAG_1YX2U`30l(heOYwz`f*8a04?f-KL{Ds&!9H-ZKTR*P@yl9-~OW=Rq`tizp z>*s?d?f*py{L3Zq7l9yioL+@*{oez4(Kt_A`}BPLZi9Q>pY`*T2KQQGga2O!_u5{A zpMRB($Lo0wz5{sCcz(*-dsV-+|71z~KPrKL^Q(*dzrO^24RFqz*Tvd%2PN%)-r9SO zx3z!T;9hTR@O$sk{=FX7;0u5k&BJwpAE|uXhBgG-CVw}rAFuy6_}?n&=VR91TNteU zmkjRpy#{~U;NDbZ@Vj19JkI+|;O{Jf_W|cTd()Qn|HB6N)+2*|+~D5KWAJ}l(*KL^ z)&9NR%G%!#c+q)x67Zt=?^!?IDq;Qnj={YZ$KZczaBmti_^V!9sr(F{@CDP4fen_w z3xF3r_cq`~`}YG6R4PX+K(2&O_#w1^3FNXDCh!khKOcQupNHd5{ytRl+}|yMf2{=m zs-qnLk;?nlwOvnB1nZ0)^K)`s>~gL}J=!C(6N;_-Y( z349lDzLz)3SU(>$xVMTK{3{0c24;i5_}hw~`vBnV|F<63hF~Y;@BIe%W@m%{iov}d z(%@e-c*?*11>i;VfA6>JbGBkCE#x#F?+#+!T%26Mg4rN1pY_XzqbooKQDL# z`$tcNk8u^fq&Tg@s?@p=l2cn4eSR0s=>Xf(BQ`)Hy4fn3BWmi@AhEr-(AxFC#}7= z%v$^Z0yyQM_d2`Mo%+M`?o;~t6AAr%G2lOQ=RK7t4Gu9-{$3Aw(Kr`N;5&eG{N5sO z{d}&Z{hyVW7mf28;75nMsoVsdQoA(W}@&BR0y%UeYUv*6N9?s5g;K~~TFM6*>O5jfb&gXh(BJ1dTOWJ?P z+IyEHYyT00d;b=L|DM6UADF=(JYGD`cLL7wc<&Bt|4Sw9|4j+}c~iyxzZ~$R)@S_j z2Eh4T?-OG`o-(-ifid`cN&mO3z4z6z_8%~~chEBUCk*aAO$`23gL@AngI~yWoZe^1 z;BCN**8N9I;Qz$>@m^il&%Zag_r){#%WB2_PnW{*K z1NdDw=J?~ZwfEj$_T!V%{zzr}aRoU3=l4tcdH#$(*Sic_KSu#SQn|a5z<;;|{t3Wehne`2 z@qyoL@B2TOwExo*_&3ez{Ci(6>t_n^p8>r+YW&8o!EXXyH2?1}f&X#|{9gi2`rzHR ztpDfFD?GJp+--30p=#~x2KPR!2ES(T^xWSEylDJCXYIYOi_-{c%uaVBY<;$yhEow_jlO-&c6b=+W_|QFG~7(THr@2UtQORAn)?`(i6qw zd}9gx(GvJ>3H-+a=lH#Qtv&ajl(hd>CGe+9;P*YK{ik}%1%sbn)dzwdlE1%iaPKu~ z@XFgb58xBl6!1lZ-vcMI{zFOo>f5#dRR4Sw@FM&_Spwe__>s#0VfgtX8|QmV z+W%d^`Ci_0*4lrqr2YL5>-v7Sp$*Sj`$q+CU!so&;OyV~F57SKDQW*dmcW0n1pZ&G zfA11*{lED;^tq|s;X%NQ=Cfh#Q#tzkrTvl0k;k>;cUb>_ucV*Y}z!<@&b*UNk>ft$phF`!@`p%I`m3($7CF zfq&Kd@c|At{(DXqkLPWG^L@QvwzaRUtoH`lG341mAZ@FG@YM&lv+YQ88c9@W-vC(a4SY~4bF+>O{+uLU?0fdhYnj6Qaid&#cW~bGVSi=TVGxQEn zl>)&zjg7r_`+$*-;Tsa~w+6YUh1m}p?>dK6$H+~ox!M;Q>3d3xWg+X0#FT1w4Oiyl zTvj{3x{plk-F0Shkm4F4`T05Il3}>!>fX+vfhIQ^8gwPi=8&}+F~%sRZGoM&TiH2O zak)9-S497o|9S$yHujM9Vnh$K;rEaO1;fNkAXR)DnTu{UeSS}Q6cQ34>Bah42~O^x z%cjwEMFPzH3um>)nR6FUE}m;NE;O=pGc}~pW{{;tRZHmb(z(Tz735sALNfIWrv$=B zoSSBqRJmbPQ?#tjqaoto3^C-Ms|ZzmM$Ku^8%!s7YmB{V*B;aa19 z*6ulb>PqF*^}^;w?ro0^>|kih48L?fNaS7xhbXm*v9u>xYm@ zKB|E=!-;v78Cv!GaO?SY7h&^PQ0xGi3fw&z@`3}JK0wDO@2HnjcPdR==bjNKHp}Kv z^KG!o!vv=oKXUY_KEKr*oC2>^zg55R=(U|ok219{>%{3jTuup}uV1=V2cK3){eqP_ z$x+DEVG>ik2$rY_GvbmTGqt3GnoO@|**VeQ?%sA2Fm-vweRHo9pU5N9v@vb(Vbiqv zrDK9)a5SyH zi^*P~#=?Y$eSwKKR&DmsJ(H#8drl)ONG)qIL74J3jV3ckg8r}yG#dEArSo7MZvlR7 z&{$$Ncl;JJN`QINA-~0R#g{~7eGnxz%ZS})N!*b{)=#is$7y5<0E^!58$O-5jKpmD z-IQCRYyk_Ol=E>3N{h-tAlIbTKFc!P$x%v)*;WC)S-5;j^HZ>LydSEcFh5Jvx!Q`^ zG-?Vln>sSAG_SR!WJ=&SIdyZF<<#KFh2YioXb_+R{KGs2n_`**Y;qxBn1QSQt8dGB z@%vfkMN!;WBdD*rw(-thDBsvwhLxZ=WRFFSg7Dq-#pIhOk-$Qj_s5WgXenDh*FHfu z>B{2OM&r?Syz|xVPBz!L0Ge*wZVJhMTFk`4l81Asl?5i;^%#$?Hfne?8@<)7bIny$ z0J0Gx;bIQty3C<+wg8EOX?zY>8z^4`DZ`$;bhUw3oN6?z;KoFod3OHLn>juYMx4L3 z6VIS$U`@czc$4QgZY~M2pVW!ocN!PbFm0U$sX>RhR1mq>w{J8yk?i}CGv}61 zE;VY$W`qpQnyaN&fs#bB z^9~hg;;2(kl}Tg-%rR_mV|-yV27+n5fvdhnGTer2q2v) zMR1rWNPQms)G%)edJyxA**r3UC1gW3p6?1Jns)aFV9vL@;J@@RpT8{Gx+9<)A^1+u ztxO@E8It#qVX1>z(bow~OH_eAx_g4xzFb}#>k9)2b3Tkk!m!swUPN$G`jAjnoM<^4rSxA6+rAmPe=y5=pq=+^LCJD@%Z#7EV z01$zJ*=8ovSDAnzg6 zqFk)U+3*-hjgl$c61wqPPt=mHw~_SKG%+!o0nQx+(=+Q+4U*3cq|=x8$}Iwq4=8vg zJ-r+se5qWE8PR02DoCK<1!_!ttqkg6V+;BSr}>2b zsRNPjLU+*GJist`u;Lh1uE)>fMC7OTOgPkXahCJXu|ArWD8jQ0Cch2Pq}6?=H4Eb$ zr=Oi+hG8)y25N)_G0hSt!t=I%65L@!0gb#wW24_~Y=e>@32WnB)Mu`U0ymJH8tlzr zl}T;-7dv{KEg>!FjX-yBZ0a$(z&aAwkT#mth;oV>KY$cHhtI>@<~1qHzuz>~GBGyc zgpDEoIkv&(wwtZ3ZO}BXLNv3p%r)FWLeGZg%B5V`R;*GgeS&3H9Li2X^KRe#1Hh?f zQ6ll>_4*7HqtG~^qbn-q#xy6JPHE2a)$H00zh81toA($c4I(V%P5+h^Md@oAmunB~1ji-ZZ z=ad8oh2;7+YE`(&&n_?dufAuG5VJyGExjC!JU^GH1fyPu~%sYwxAb49cA z8l@V=S-LJ~)Q;x&PvAJSMEZBMJd*mABGL9uboG63qhZ@$mnsw498O^-GAA0ltve59 zB@eWl8z}3*iV7&+E@`5@;&s|-UUR1h)c$ED_Y(dpHY^90ZWigQor>iw2~~IrFFKO5 zmeF`#h46PP8p(i#+ragJE^bNbp8pUBx!V0$qT|4+^XGjJ+ zvP$n=NP_Q9u@k&EEThlLW-*@ThUtN~&ZX{#7@;rj_Lsr7Wm6j{6xr(@z^zw#8h6lU znbwxjRe~%EkiKv;`}N{vYj}WP%=REx`kbPlS}N~Ve&4B8Z`lG^Q%n{x;$B}K=|oab7unr z{$3M!HKbfOHEqan|a3!4?8E!m2*1;y3LkDsr!-jy&w4d%4|)G}~R zv@{bf4ZYzGyEO58Q5~DUms>gUOY-`<;Kv4i1KD=6z*k!Xv2i*vz%MGcwC*gbpFt2t z9%|TPkWo6I(={waw|CHh`3r?(2eoO`xr!hS)L?0Cwood&@ve+~tsa4meLVzo=imaA z>E&h=zoX|M|Mpri7m{pKEpbX}K4tUK7YNa8;$O~B5Ow}4(3DO@P{!11XpIv98ri*e zr%&g^(wTn3Tyq0ILG~(iOXByDWTL*m$v|ND|dAzW%(k&d0 z&ki(K;$$LBB9w~54p2PBhdrPw5;iDXEf(a#R>Elo}W6RNqJCn<#GIA7zKPr$YS zXDG0pBiRH$@e4BX7cj3-&fiiMzLV|3L2+Wcwc+?fAkkU(%}zhxu8~oo#3_kqubQ6y-iYTr21PQ212$&ioNZ=gX&A)^%A;+s1^EdIvVmlanlV zcDuaS>>a3g&Rpc~rr_|332n`$=ntwft0bu0!oL3n3WbTLIL`pr#xlSZ61-kW=m7|G zbFjV*X2Ork9|2B?Hhv&wdsb_NmV2)hX|ocuFu8?DdRB&kV)NRSAT-0@n1gUM!g24;3Cle*?Ada*4P2RccPkM} zkZU4Te+Euz!%M)}m6WY50Nb!toH7BMx- zfzm;w*NlXj6IgK#I3ksVV*~yl@GMYx5r*ZMhi(xP@y_aQDg}hB2dV2s4G9UZp!aE! zrc^PMQM#5;2#Q_dHRHXVo{p7c{ew0lE%7<%>F2h)5-+aZ%CSy&&^!iv_px0luHg23 z5P_uH?gOn210k&M0b1asIV&(%jv+7ISPk%B0q}-PVe(Pa#P`g)_ezuw$M<#2icYOk8Q zLi=#n?1#fZmoj9=wBmxo^|6}+KW^w;E63Km?Kbu|er~SqZJ`I&D)IKo^{ulYj;U7bb0=Jud~H6+#1Cb^SeM3+_H2u^Zg;-Tm&he%$UqDZN!HUs=!#_xUAD=*0Vx z8s9(P-TyOyafq&epV!Rtn-Ra`zjXb78b8MOAGQ13=Ow;)^moLr-RCdhdwl;c5ek3q z)3sA5a}w&G`+N#t76{w}Yy`~3czyHh`p=D${c7vK4OcfYIC2}E^qiFcK_pUV$p_wN9DiaKlk8f?j3i(tDpAd3B7UG?ssVD#_jOv zf55%*^IcuGBM<3~UvVAVBi;S(^9{H;zTejactr32i7-^TI+}ccYjVHKZ~dg*@5bqF zOTW+IevZWr)8+4d%I zy;2a*;lt U>_yT2fBt=X|IZ~iBws84ADI&%SpWb4 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/EWIEGA46WW/moc_mainwindow.cpp.d b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/EWIEGA46WW/moc_mainwindow.cpp.d deleted file mode 100644 index 60987121d..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/EWIEGA46WW/moc_mainwindow.cpp.d +++ /dev/null @@ -1,408 +0,0 @@ -/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/EWIEGA46WW/moc_mainwindow.cpp: /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.h \ - /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/moc_predefs.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20functional.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20iterator.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20memory.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20type_traits.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q23utility.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qalgorithms.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qanystringview.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydata.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydataops.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydatapointer.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qassert.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qatomic.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qatomic_cxx11.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbasicatomic.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbindingstorage.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearray.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearrayalgorithms.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearraylist.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearrayview.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qchar.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompare.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompare_impl.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcomparehelpers.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompilerdetection.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qconfig.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qconstructormacros.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainerfwd.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainerinfo.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainertools_impl.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontiguouscache.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdarwinhelpers.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdatastream.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdebug.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qendian.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qexceptionhandling.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qflags.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfloat16.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qforeach.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfunctionaltools_impl.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfunctionpointer.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qgenericatomic.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qglobal.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qglobalstatic.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qhash.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qhashfunctions.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiodevicebase.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiterable.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiterator.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlatin1stringview.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qline.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlist.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlogging.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmalloc.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmap.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmargins.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmath.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmetacontainer.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmetatype.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qminmax.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qnamespace.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qnumeric.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobject.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobject_impl.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobjectdefs.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobjectdefs_impl.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qoverload.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qpair.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qpoint.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qprocessordetection.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qrect.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qrefcount.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qscopedpointer.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qscopeguard.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qset.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qshareddata.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qshareddata_impl.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsharedpointer.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsharedpointer_impl.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsize.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qspan.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstring.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringalgorithms.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringbuilder.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringconverter.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringconverter_base.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringfwd.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringlist.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringliteral.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringmatcher.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringtokenizer.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringview.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qswap.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsysinfo.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsystemdetection.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtaggedpointer.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtclasshelpermacros.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtconfiginclude.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtconfigmacros.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtcore-config.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtcoreexports.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtdeprecationdefinitions.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtdeprecationmarkers.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtenvironmentvariables.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtextstream.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtmetamacros.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtnoop.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtpreprocessorsupport.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtresource.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qttranslation.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qttypetraits.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtversion.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtversionchecks.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtypeinfo.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtypes.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qutf8stringview.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qvariant.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qvarlengtharray.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qversiontagging.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qxptype_traits.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qyieldcpu.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qaction.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qbitmap.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qbrush.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qcolor.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qcursor.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfont.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfontinfo.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfontmetrics.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qicon.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qimage.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qkeysequence.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpaintdevice.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpalette.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpixelformat.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpixmap.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpolygon.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qregion.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qrgb.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qrgba64.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtgui-config.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtguiexports.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtguiglobal.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtransform.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qwindowdefs.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/QMainWindow \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qmainwindow.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qsizepolicy.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtabwidget.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgets-config.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgetsexports.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgetsglobal.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qwidget.h \ - /usr/include/alloca.h \ - /usr/include/asm-generic/errno-base.h \ - /usr/include/asm-generic/errno.h \ - /usr/include/assert.h \ - /usr/include/c++/11/algorithm \ - /usr/include/c++/11/array \ - /usr/include/c++/11/atomic \ - /usr/include/c++/11/backward/auto_ptr.h \ - /usr/include/c++/11/backward/binders.h \ - /usr/include/c++/11/bit \ - /usr/include/c++/11/bits/algorithmfwd.h \ - /usr/include/c++/11/bits/align.h \ - /usr/include/c++/11/bits/alloc_traits.h \ - /usr/include/c++/11/bits/allocated_ptr.h \ - /usr/include/c++/11/bits/allocator.h \ - /usr/include/c++/11/bits/atomic_base.h \ - /usr/include/c++/11/bits/atomic_lockfree_defines.h \ - /usr/include/c++/11/bits/basic_string.h \ - /usr/include/c++/11/bits/basic_string.tcc \ - /usr/include/c++/11/bits/char_traits.h \ - /usr/include/c++/11/bits/charconv.h \ - /usr/include/c++/11/bits/concept_check.h \ - /usr/include/c++/11/bits/cpp_type_traits.h \ - /usr/include/c++/11/bits/cxxabi_forced.h \ - /usr/include/c++/11/bits/cxxabi_init_exception.h \ - /usr/include/c++/11/bits/enable_special_members.h \ - /usr/include/c++/11/bits/erase_if.h \ - /usr/include/c++/11/bits/exception.h \ - /usr/include/c++/11/bits/exception_defines.h \ - /usr/include/c++/11/bits/exception_ptr.h \ - /usr/include/c++/11/bits/functexcept.h \ - /usr/include/c++/11/bits/functional_hash.h \ - /usr/include/c++/11/bits/hash_bytes.h \ - /usr/include/c++/11/bits/hashtable.h \ - /usr/include/c++/11/bits/hashtable_policy.h \ - /usr/include/c++/11/bits/invoke.h \ - /usr/include/c++/11/bits/ios_base.h \ - /usr/include/c++/11/bits/list.tcc \ - /usr/include/c++/11/bits/locale_classes.h \ - /usr/include/c++/11/bits/locale_classes.tcc \ - /usr/include/c++/11/bits/localefwd.h \ - /usr/include/c++/11/bits/memoryfwd.h \ - /usr/include/c++/11/bits/move.h \ - /usr/include/c++/11/bits/nested_exception.h \ - /usr/include/c++/11/bits/node_handle.h \ - /usr/include/c++/11/bits/ostream_insert.h \ - /usr/include/c++/11/bits/parse_numbers.h \ - /usr/include/c++/11/bits/postypes.h \ - /usr/include/c++/11/bits/predefined_ops.h \ - /usr/include/c++/11/bits/ptr_traits.h \ - /usr/include/c++/11/bits/range_access.h \ - /usr/include/c++/11/bits/refwrap.h \ - /usr/include/c++/11/bits/shared_ptr.h \ - /usr/include/c++/11/bits/shared_ptr_atomic.h \ - /usr/include/c++/11/bits/shared_ptr_base.h \ - /usr/include/c++/11/bits/specfun.h \ - /usr/include/c++/11/bits/std_abs.h \ - /usr/include/c++/11/bits/std_function.h \ - /usr/include/c++/11/bits/stl_algo.h \ - /usr/include/c++/11/bits/stl_algobase.h \ - /usr/include/c++/11/bits/stl_bvector.h \ - /usr/include/c++/11/bits/stl_construct.h \ - /usr/include/c++/11/bits/stl_function.h \ - /usr/include/c++/11/bits/stl_heap.h \ - /usr/include/c++/11/bits/stl_iterator.h \ - /usr/include/c++/11/bits/stl_iterator_base_funcs.h \ - /usr/include/c++/11/bits/stl_iterator_base_types.h \ - /usr/include/c++/11/bits/stl_list.h \ - /usr/include/c++/11/bits/stl_map.h \ - /usr/include/c++/11/bits/stl_multimap.h \ - /usr/include/c++/11/bits/stl_numeric.h \ - /usr/include/c++/11/bits/stl_pair.h \ - /usr/include/c++/11/bits/stl_raw_storage_iter.h \ - /usr/include/c++/11/bits/stl_relops.h \ - /usr/include/c++/11/bits/stl_tempbuf.h \ - /usr/include/c++/11/bits/stl_tree.h \ - /usr/include/c++/11/bits/stl_uninitialized.h \ - /usr/include/c++/11/bits/stl_vector.h \ - /usr/include/c++/11/bits/stream_iterator.h \ - /usr/include/c++/11/bits/streambuf.tcc \ - /usr/include/c++/11/bits/streambuf_iterator.h \ - /usr/include/c++/11/bits/string_view.tcc \ - /usr/include/c++/11/bits/stringfwd.h \ - /usr/include/c++/11/bits/uniform_int_dist.h \ - /usr/include/c++/11/bits/unique_ptr.h \ - /usr/include/c++/11/bits/unordered_map.h \ - /usr/include/c++/11/bits/uses_allocator.h \ - /usr/include/c++/11/bits/vector.tcc \ - /usr/include/c++/11/cassert \ - /usr/include/c++/11/cctype \ - /usr/include/c++/11/cerrno \ - /usr/include/c++/11/chrono \ - /usr/include/c++/11/climits \ - /usr/include/c++/11/clocale \ - /usr/include/c++/11/cmath \ - /usr/include/c++/11/cstddef \ - /usr/include/c++/11/cstdint \ - /usr/include/c++/11/cstdio \ - /usr/include/c++/11/cstdlib \ - /usr/include/c++/11/cstring \ - /usr/include/c++/11/ctime \ - /usr/include/c++/11/cwchar \ - /usr/include/c++/11/debug/assertions.h \ - /usr/include/c++/11/debug/debug.h \ - /usr/include/c++/11/exception \ - /usr/include/c++/11/ext/aligned_buffer.h \ - /usr/include/c++/11/ext/alloc_traits.h \ - /usr/include/c++/11/ext/atomicity.h \ - /usr/include/c++/11/ext/concurrence.h \ - /usr/include/c++/11/ext/new_allocator.h \ - /usr/include/c++/11/ext/numeric_traits.h \ - /usr/include/c++/11/ext/string_conversions.h \ - /usr/include/c++/11/ext/type_traits.h \ - /usr/include/c++/11/functional \ - /usr/include/c++/11/initializer_list \ - /usr/include/c++/11/iosfwd \ - /usr/include/c++/11/iterator \ - /usr/include/c++/11/limits \ - /usr/include/c++/11/list \ - /usr/include/c++/11/map \ - /usr/include/c++/11/memory \ - /usr/include/c++/11/new \ - /usr/include/c++/11/numeric \ - /usr/include/c++/11/optional \ - /usr/include/c++/11/pstl/execution_defs.h \ - /usr/include/c++/11/pstl/glue_algorithm_defs.h \ - /usr/include/c++/11/pstl/glue_memory_defs.h \ - /usr/include/c++/11/pstl/glue_numeric_defs.h \ - /usr/include/c++/11/ratio \ - /usr/include/c++/11/stdexcept \ - /usr/include/c++/11/streambuf \ - /usr/include/c++/11/string \ - /usr/include/c++/11/string_view \ - /usr/include/c++/11/system_error \ - /usr/include/c++/11/tr1/bessel_function.tcc \ - /usr/include/c++/11/tr1/beta_function.tcc \ - /usr/include/c++/11/tr1/ell_integral.tcc \ - /usr/include/c++/11/tr1/exp_integral.tcc \ - /usr/include/c++/11/tr1/gamma.tcc \ - /usr/include/c++/11/tr1/hypergeometric.tcc \ - /usr/include/c++/11/tr1/legendre_function.tcc \ - /usr/include/c++/11/tr1/modified_bessel_func.tcc \ - /usr/include/c++/11/tr1/poly_hermite.tcc \ - /usr/include/c++/11/tr1/poly_laguerre.tcc \ - /usr/include/c++/11/tr1/riemann_zeta.tcc \ - /usr/include/c++/11/tr1/special_function_util.h \ - /usr/include/c++/11/tuple \ - /usr/include/c++/11/type_traits \ - /usr/include/c++/11/typeinfo \ - /usr/include/c++/11/unordered_map \ - /usr/include/c++/11/utility \ - /usr/include/c++/11/variant \ - /usr/include/c++/11/vector \ - /usr/include/ctype.h \ - /usr/include/endian.h \ - /usr/include/errno.h \ - /usr/include/features-time64.h \ - /usr/include/features.h \ - /usr/include/limits.h \ - /usr/include/linux/errno.h \ - /usr/include/linux/limits.h \ - /usr/include/locale.h \ - /usr/include/pthread.h \ - /usr/include/sched.h \ - /usr/include/stdc-predef.h \ - /usr/include/stdint.h \ - /usr/include/stdio.h \ - /usr/include/stdlib.h \ - /usr/include/string.h \ - /usr/include/strings.h \ - /usr/include/time.h \ - /usr/include/wchar.h \ - /usr/include/x86_64-linux-gnu/asm/errno.h \ - /usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \ - /usr/include/x86_64-linux-gnu/bits/byteswap.h \ - /usr/include/x86_64-linux-gnu/bits/cpu-set.h \ - /usr/include/x86_64-linux-gnu/bits/endian.h \ - /usr/include/x86_64-linux-gnu/bits/endianness.h \ - /usr/include/x86_64-linux-gnu/bits/errno.h \ - /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ - /usr/include/x86_64-linux-gnu/bits/floatn.h \ - /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ - /usr/include/x86_64-linux-gnu/bits/local_lim.h \ - /usr/include/x86_64-linux-gnu/bits/locale.h \ - /usr/include/x86_64-linux-gnu/bits/long-double.h \ - /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ - /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ - /usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \ - /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ - /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ - /usr/include/x86_64-linux-gnu/bits/sched.h \ - /usr/include/x86_64-linux-gnu/bits/select.h \ - /usr/include/x86_64-linux-gnu/bits/setjmp.h \ - /usr/include/x86_64-linux-gnu/bits/stdint-intn.h \ - /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \ - /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ - /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ - /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ - /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \ - /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ - /usr/include/x86_64-linux-gnu/bits/time.h \ - /usr/include/x86_64-linux-gnu/bits/time64.h \ - /usr/include/x86_64-linux-gnu/bits/timesize.h \ - /usr/include/x86_64-linux-gnu/bits/timex.h \ - /usr/include/x86_64-linux-gnu/bits/types.h \ - /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ - /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ - /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/error_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ - /usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \ - /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \ - /usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \ - /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ - /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ - /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \ - /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/wint_t.h \ - /usr/include/x86_64-linux-gnu/bits/typesizes.h \ - /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ - /usr/include/x86_64-linux-gnu/bits/uio_lim.h \ - /usr/include/x86_64-linux-gnu/bits/waitflags.h \ - /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ - /usr/include/x86_64-linux-gnu/bits/wchar.h \ - /usr/include/x86_64-linux-gnu/bits/wordsize.h \ - /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/atomic_word.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/c++allocator.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/c++config.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/c++locale.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/cpu_defines.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/error_constants.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/gthr.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/os_defines.h \ - /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ - /usr/include/x86_64-linux-gnu/gnu/stubs.h \ - /usr/include/x86_64-linux-gnu/sys/cdefs.h \ - /usr/include/x86_64-linux-gnu/sys/select.h \ - /usr/include/x86_64-linux-gnu/sys/types.h \ - /usr/lib/gcc/x86_64-linux-gnu/11/include/stdarg.h \ - /usr/lib/gcc/x86_64-linux-gnu/11/include/stdbool.h \ - /usr/lib/gcc/x86_64-linux-gnu/11/include/stddef.h diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/deps b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/deps deleted file mode 100644 index c14fa9d40..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/deps +++ /dev/null @@ -1,757 +0,0 @@ -qt6_application_autogen/timestamp: \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20functional.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20iterator.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20memory.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q20type_traits.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/q23utility.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qalgorithms.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qanystringview.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydata.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydataops.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qarraydatapointer.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qassert.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qatomic.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qatomic_cxx11.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbasicatomic.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbindingstorage.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearray.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearrayalgorithms.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearraylist.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qbytearrayview.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qchar.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompare.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompare_impl.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcomparehelpers.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcompilerdetection.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qconfig.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qconstructormacros.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainerfwd.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainerinfo.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontainertools_impl.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qcontiguouscache.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdarwinhelpers.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdatastream.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qdebug.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qendian.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qexceptionhandling.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qflags.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfloat16.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qforeach.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfunctionaltools_impl.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qfunctionpointer.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qgenericatomic.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qglobal.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qglobalstatic.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qhash.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qhashfunctions.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiodevicebase.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiterable.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qiterator.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlatin1stringview.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qline.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlist.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qlogging.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmalloc.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmap.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmargins.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmath.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmetacontainer.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qmetatype.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qminmax.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qnamespace.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qnumeric.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobject.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobject_impl.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobjectdefs.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qobjectdefs_impl.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qoverload.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qpair.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qpoint.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qprocessordetection.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qrect.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qrefcount.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qscopedpointer.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qscopeguard.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qset.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qshareddata.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qshareddata_impl.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsharedpointer.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsharedpointer_impl.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsize.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qspan.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstring.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringalgorithms.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringbuilder.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringconverter.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringconverter_base.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringfwd.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringlist.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringliteral.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringmatcher.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringtokenizer.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qstringview.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qswap.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsysinfo.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qsystemdetection.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtaggedpointer.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtclasshelpermacros.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtconfiginclude.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtconfigmacros.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtcore-config.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtcoreexports.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtdeprecationdefinitions.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtdeprecationmarkers.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtenvironmentvariables.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtextstream.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtmetamacros.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtnoop.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtpreprocessorsupport.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtresource.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qttranslation.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qttypetraits.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtversion.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtversionchecks.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtypeinfo.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qtypes.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qutf8stringview.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qvariant.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qvarlengtharray.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qversiontagging.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qxptype_traits.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtCore/qyieldcpu.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qaction.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qbitmap.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qbrush.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qcolor.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qcursor.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfont.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfontinfo.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qfontmetrics.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qicon.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qimage.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qkeysequence.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpaintdevice.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpalette.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpixelformat.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpixmap.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qpolygon.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qregion.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qrgb.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qrgba64.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtgui-config.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtguiexports.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtguiglobal.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qtransform.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtGui/qwindowdefs.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/QMainWindow \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qmainwindow.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qsizepolicy.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtabwidget.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgets-config.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgetsexports.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qtwidgetsglobal.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/include/QtWidgets/qwidget.h \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/3rdparty/kwin/FindXKB.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapAtomic.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapOpenGL.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/FindWrapVulkanHeaders.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Config.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigExtras.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersion.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Dependencies.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6Targets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeature.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtFeatureCommon.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtInstallPaths.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicAppleHelpers.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeHelpers.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicDependencyHelpers.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicGitHelpers.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicPluginHelpers.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTargetHelpers.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicTestHelpers.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicToolHelpers.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigExtras.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersion.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreConfigVersionImpl.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreDependencies.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreMacros.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Core/Qt6CoreVersionlessAliasTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersion.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusConfigVersionImpl.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusDependencies.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusMacros.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBus/Qt6DBusVersionlessAliasTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersion.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersionImpl.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsDependencies.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6DBusTools/Qt6DBusToolsVersionlessTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersion.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiConfigVersionImpl.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiDependencies.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiPlugins.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6GuiVersionlessAliasTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGifPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICNSPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QICOPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QJpegPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QPdfPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgIconPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QSvgPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTgaPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTiffPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVirtualKeyboardPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandEglPlatformIntegrationPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWbmpPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QWebpPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersion.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsConfigVersionImpl.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsMacros.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsPlugins.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6Widgets/Qt6WidgetsVersionlessAliasTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsAdditionalTargetInfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfig.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersion.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersionImpl.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsDependencies.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets-relwithdebinfo.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets.cmake \ - /home/austenharrell/Qt/6.8.0/gcc_64/lib/cmake/Qt6WidgetsTools/Qt6WidgetsToolsVersionlessTargets.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompiler.cmake.in \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXInformation.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCommonLanguageInclude.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCompilerIdDetection.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompileFeatures.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindBinUtils.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeFindDependencyMacro.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeGenericSystem.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeInitializeConfigs.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeLanguageInformation.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeNinjaFindMake.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitIncludeInfo.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseImplicitLinkInfo.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeParseLibraryArchitecture.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystem.cmake.in \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInformation.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeSystemSpecificInitialize.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCompilerCommon.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXCompilerFlag.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckCXXSourceCompiles.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckIncludeFileCXX.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CheckLibraryExists.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ADSP-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMCC-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/ARMClang-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/AppleClang-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Borland-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CMakeCommonCompilerMacros.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Clang-DetermineCompilerInternal.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Cray-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/CrayClang-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Embarcadero-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Fujitsu-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GHS-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-CXX.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU-FindBinUtils.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/GNU.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/HP-CXX-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IAR-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Intel-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/MSVC-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVHPC-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/NVIDIA-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/OrangeC-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PGI-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/PathScale-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SCO-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TI-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/TIClang-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Tasking-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/Watcom-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XL-CXX-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FeatureSummary.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindOpenGL.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPackageMessage.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindPkgConfig.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindThreads.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/FindVulkan.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/GNUInstallDirs.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckCompilerFlag.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckFlagCommonConfig.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CheckSourceCompiles.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/FeatureTesting.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/MacroAddFileDependencies.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Determine-CXX.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU-CXX.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-GNU.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux-Initialize.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/Linux.cmake \ - /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Platform/UnixPaths.cmake \ - /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/CMakeLists.txt \ - /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake \ - /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake \ - /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeSystem.cmake \ - /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/moc_predefs.h \ - /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/main.cpp \ - /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.cpp \ - /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.h \ - /usr/include/alloca.h \ - /usr/include/asm-generic/errno-base.h \ - /usr/include/asm-generic/errno.h \ - /usr/include/assert.h \ - /usr/include/c++/11/algorithm \ - /usr/include/c++/11/array \ - /usr/include/c++/11/atomic \ - /usr/include/c++/11/backward/auto_ptr.h \ - /usr/include/c++/11/backward/binders.h \ - /usr/include/c++/11/bit \ - /usr/include/c++/11/bits/algorithmfwd.h \ - /usr/include/c++/11/bits/align.h \ - /usr/include/c++/11/bits/alloc_traits.h \ - /usr/include/c++/11/bits/allocated_ptr.h \ - /usr/include/c++/11/bits/allocator.h \ - /usr/include/c++/11/bits/atomic_base.h \ - /usr/include/c++/11/bits/atomic_lockfree_defines.h \ - /usr/include/c++/11/bits/basic_string.h \ - /usr/include/c++/11/bits/basic_string.tcc \ - /usr/include/c++/11/bits/char_traits.h \ - /usr/include/c++/11/bits/charconv.h \ - /usr/include/c++/11/bits/concept_check.h \ - /usr/include/c++/11/bits/cpp_type_traits.h \ - /usr/include/c++/11/bits/cxxabi_forced.h \ - /usr/include/c++/11/bits/cxxabi_init_exception.h \ - /usr/include/c++/11/bits/enable_special_members.h \ - /usr/include/c++/11/bits/erase_if.h \ - /usr/include/c++/11/bits/exception.h \ - /usr/include/c++/11/bits/exception_defines.h \ - /usr/include/c++/11/bits/exception_ptr.h \ - /usr/include/c++/11/bits/functexcept.h \ - /usr/include/c++/11/bits/functional_hash.h \ - /usr/include/c++/11/bits/hash_bytes.h \ - /usr/include/c++/11/bits/hashtable.h \ - /usr/include/c++/11/bits/hashtable_policy.h \ - /usr/include/c++/11/bits/invoke.h \ - /usr/include/c++/11/bits/ios_base.h \ - /usr/include/c++/11/bits/list.tcc \ - /usr/include/c++/11/bits/locale_classes.h \ - /usr/include/c++/11/bits/locale_classes.tcc \ - /usr/include/c++/11/bits/localefwd.h \ - /usr/include/c++/11/bits/memoryfwd.h \ - /usr/include/c++/11/bits/move.h \ - /usr/include/c++/11/bits/nested_exception.h \ - /usr/include/c++/11/bits/node_handle.h \ - /usr/include/c++/11/bits/ostream_insert.h \ - /usr/include/c++/11/bits/parse_numbers.h \ - /usr/include/c++/11/bits/postypes.h \ - /usr/include/c++/11/bits/predefined_ops.h \ - /usr/include/c++/11/bits/ptr_traits.h \ - /usr/include/c++/11/bits/range_access.h \ - /usr/include/c++/11/bits/refwrap.h \ - /usr/include/c++/11/bits/shared_ptr.h \ - /usr/include/c++/11/bits/shared_ptr_atomic.h \ - /usr/include/c++/11/bits/shared_ptr_base.h \ - /usr/include/c++/11/bits/specfun.h \ - /usr/include/c++/11/bits/std_abs.h \ - /usr/include/c++/11/bits/std_function.h \ - /usr/include/c++/11/bits/stl_algo.h \ - /usr/include/c++/11/bits/stl_algobase.h \ - /usr/include/c++/11/bits/stl_bvector.h \ - /usr/include/c++/11/bits/stl_construct.h \ - /usr/include/c++/11/bits/stl_function.h \ - /usr/include/c++/11/bits/stl_heap.h \ - /usr/include/c++/11/bits/stl_iterator.h \ - /usr/include/c++/11/bits/stl_iterator_base_funcs.h \ - /usr/include/c++/11/bits/stl_iterator_base_types.h \ - /usr/include/c++/11/bits/stl_list.h \ - /usr/include/c++/11/bits/stl_map.h \ - /usr/include/c++/11/bits/stl_multimap.h \ - /usr/include/c++/11/bits/stl_numeric.h \ - /usr/include/c++/11/bits/stl_pair.h \ - /usr/include/c++/11/bits/stl_raw_storage_iter.h \ - /usr/include/c++/11/bits/stl_relops.h \ - /usr/include/c++/11/bits/stl_tempbuf.h \ - /usr/include/c++/11/bits/stl_tree.h \ - /usr/include/c++/11/bits/stl_uninitialized.h \ - /usr/include/c++/11/bits/stl_vector.h \ - /usr/include/c++/11/bits/stream_iterator.h \ - /usr/include/c++/11/bits/streambuf.tcc \ - /usr/include/c++/11/bits/streambuf_iterator.h \ - /usr/include/c++/11/bits/string_view.tcc \ - /usr/include/c++/11/bits/stringfwd.h \ - /usr/include/c++/11/bits/uniform_int_dist.h \ - /usr/include/c++/11/bits/unique_ptr.h \ - /usr/include/c++/11/bits/unordered_map.h \ - /usr/include/c++/11/bits/uses_allocator.h \ - /usr/include/c++/11/bits/vector.tcc \ - /usr/include/c++/11/cassert \ - /usr/include/c++/11/cctype \ - /usr/include/c++/11/cerrno \ - /usr/include/c++/11/chrono \ - /usr/include/c++/11/climits \ - /usr/include/c++/11/clocale \ - /usr/include/c++/11/cmath \ - /usr/include/c++/11/cstddef \ - /usr/include/c++/11/cstdint \ - /usr/include/c++/11/cstdio \ - /usr/include/c++/11/cstdlib \ - /usr/include/c++/11/cstring \ - /usr/include/c++/11/ctime \ - /usr/include/c++/11/cwchar \ - /usr/include/c++/11/debug/assertions.h \ - /usr/include/c++/11/debug/debug.h \ - /usr/include/c++/11/exception \ - /usr/include/c++/11/ext/aligned_buffer.h \ - /usr/include/c++/11/ext/alloc_traits.h \ - /usr/include/c++/11/ext/atomicity.h \ - /usr/include/c++/11/ext/concurrence.h \ - /usr/include/c++/11/ext/new_allocator.h \ - /usr/include/c++/11/ext/numeric_traits.h \ - /usr/include/c++/11/ext/string_conversions.h \ - /usr/include/c++/11/ext/type_traits.h \ - /usr/include/c++/11/functional \ - /usr/include/c++/11/initializer_list \ - /usr/include/c++/11/iosfwd \ - /usr/include/c++/11/iterator \ - /usr/include/c++/11/limits \ - /usr/include/c++/11/list \ - /usr/include/c++/11/map \ - /usr/include/c++/11/memory \ - /usr/include/c++/11/new \ - /usr/include/c++/11/numeric \ - /usr/include/c++/11/optional \ - /usr/include/c++/11/pstl/execution_defs.h \ - /usr/include/c++/11/pstl/glue_algorithm_defs.h \ - /usr/include/c++/11/pstl/glue_memory_defs.h \ - /usr/include/c++/11/pstl/glue_numeric_defs.h \ - /usr/include/c++/11/ratio \ - /usr/include/c++/11/stdexcept \ - /usr/include/c++/11/streambuf \ - /usr/include/c++/11/string \ - /usr/include/c++/11/string_view \ - /usr/include/c++/11/system_error \ - /usr/include/c++/11/tr1/bessel_function.tcc \ - /usr/include/c++/11/tr1/beta_function.tcc \ - /usr/include/c++/11/tr1/ell_integral.tcc \ - /usr/include/c++/11/tr1/exp_integral.tcc \ - /usr/include/c++/11/tr1/gamma.tcc \ - /usr/include/c++/11/tr1/hypergeometric.tcc \ - /usr/include/c++/11/tr1/legendre_function.tcc \ - /usr/include/c++/11/tr1/modified_bessel_func.tcc \ - /usr/include/c++/11/tr1/poly_hermite.tcc \ - /usr/include/c++/11/tr1/poly_laguerre.tcc \ - /usr/include/c++/11/tr1/riemann_zeta.tcc \ - /usr/include/c++/11/tr1/special_function_util.h \ - /usr/include/c++/11/tuple \ - /usr/include/c++/11/type_traits \ - /usr/include/c++/11/typeinfo \ - /usr/include/c++/11/unordered_map \ - /usr/include/c++/11/utility \ - /usr/include/c++/11/variant \ - /usr/include/c++/11/vector \ - /usr/include/ctype.h \ - /usr/include/endian.h \ - /usr/include/errno.h \ - /usr/include/features-time64.h \ - /usr/include/features.h \ - /usr/include/limits.h \ - /usr/include/linux/errno.h \ - /usr/include/linux/limits.h \ - /usr/include/locale.h \ - /usr/include/pthread.h \ - /usr/include/sched.h \ - /usr/include/stdc-predef.h \ - /usr/include/stdint.h \ - /usr/include/stdio.h \ - /usr/include/stdlib.h \ - /usr/include/string.h \ - /usr/include/strings.h \ - /usr/include/time.h \ - /usr/include/wchar.h \ - /usr/include/x86_64-linux-gnu/asm/errno.h \ - /usr/include/x86_64-linux-gnu/bits/atomic_wide_counter.h \ - /usr/include/x86_64-linux-gnu/bits/byteswap.h \ - /usr/include/x86_64-linux-gnu/bits/cpu-set.h \ - /usr/include/x86_64-linux-gnu/bits/endian.h \ - /usr/include/x86_64-linux-gnu/bits/endianness.h \ - /usr/include/x86_64-linux-gnu/bits/errno.h \ - /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ - /usr/include/x86_64-linux-gnu/bits/floatn.h \ - /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ - /usr/include/x86_64-linux-gnu/bits/local_lim.h \ - /usr/include/x86_64-linux-gnu/bits/locale.h \ - /usr/include/x86_64-linux-gnu/bits/long-double.h \ - /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ - /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ - /usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h \ - /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ - /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ - /usr/include/x86_64-linux-gnu/bits/sched.h \ - /usr/include/x86_64-linux-gnu/bits/select.h \ - /usr/include/x86_64-linux-gnu/bits/setjmp.h \ - /usr/include/x86_64-linux-gnu/bits/stdint-intn.h \ - /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \ - /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ - /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ - /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ - /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \ - /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ - /usr/include/x86_64-linux-gnu/bits/time.h \ - /usr/include/x86_64-linux-gnu/bits/time64.h \ - /usr/include/x86_64-linux-gnu/bits/timesize.h \ - /usr/include/x86_64-linux-gnu/bits/timex.h \ - /usr/include/x86_64-linux-gnu/bits/types.h \ - /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ - /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ - /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/error_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ - /usr/include/x86_64-linux-gnu/bits/types/struct___jmp_buf_tag.h \ - /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \ - /usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h \ - /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ - /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ - /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \ - /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ - /usr/include/x86_64-linux-gnu/bits/types/wint_t.h \ - /usr/include/x86_64-linux-gnu/bits/typesizes.h \ - /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ - /usr/include/x86_64-linux-gnu/bits/uio_lim.h \ - /usr/include/x86_64-linux-gnu/bits/waitflags.h \ - /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ - /usr/include/x86_64-linux-gnu/bits/wchar.h \ - /usr/include/x86_64-linux-gnu/bits/wordsize.h \ - /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/atomic_word.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/c++allocator.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/c++config.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/c++locale.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/cpu_defines.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/error_constants.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/gthr.h \ - /usr/include/x86_64-linux-gnu/c++/11/bits/os_defines.h \ - /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ - /usr/include/x86_64-linux-gnu/gnu/stubs.h \ - /usr/include/x86_64-linux-gnu/sys/cdefs.h \ - /usr/include/x86_64-linux-gnu/sys/select.h \ - /usr/include/x86_64-linux-gnu/sys/types.h \ - /usr/lib/gcc/x86_64-linux-gnu/11/include/stdarg.h \ - /usr/lib/gcc/x86_64-linux-gnu/11/include/stdbool.h \ - /usr/lib/gcc/x86_64-linux-gnu/11/include/stddef.h \ - /home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/mainwindow.ui \ - /home/austenharrell/Qt/Tools/CMake/bin/cmake diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/moc_predefs.h b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/moc_predefs.h deleted file mode 100644 index 67eaf4776..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/moc_predefs.h +++ /dev/null @@ -1,434 +0,0 @@ -#define __SSP_STRONG__ 3 -#define __DBL_MIN_EXP__ (-1021) -#define __cpp_attributes 200809L -#define __cpp_nontype_template_parameter_auto 201606L -#define __UINT_LEAST16_MAX__ 0xffff -#define __ATOMIC_ACQUIRE 2 -#define __FLT128_MAX_10_EXP__ 4932 -#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F -#define __GCC_IEC_559_COMPLEX 2 -#define __cpp_aggregate_nsdmi 201304L -#define __UINT_LEAST8_TYPE__ unsigned char -#define __SIZEOF_FLOAT80__ 16 -#define __INTMAX_C(c) c ## L -#define __CHAR_BIT__ 8 -#define __UINT8_MAX__ 0xff -#define __SCHAR_WIDTH__ 8 -#define __WINT_MAX__ 0xffffffffU -#define __FLT32_MIN_EXP__ (-125) -#define __cpp_static_assert 201411L -#define QT_GUI_LIB 1 -#define __ORDER_LITTLE_ENDIAN__ 1234 -#define __SIZE_MAX__ 0xffffffffffffffffUL -#define __WCHAR_MAX__ 0x7fffffff -#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 -#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 -#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 -#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) -#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 -#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 -#define __GCC_IEC_559 2 -#define __FLT32X_DECIMAL_DIG__ 17 -#define __FLT_EVAL_METHOD__ 0 -#define __cpp_binary_literals 201304L -#define __FLT64_DECIMAL_DIG__ 17 -#define __CET__ 3 -#define __cpp_noexcept_function_type 201510L -#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 -#define __cpp_variadic_templates 200704L -#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL -#define __SIG_ATOMIC_TYPE__ int -#define __DBL_MIN_10_EXP__ (-307) -#define __FINITE_MATH_ONLY__ 0 -#define __cpp_variable_templates 201304L -#define __FLT32X_MAX_EXP__ 1024 -#define __FLT32_HAS_DENORM__ 1 -#define __UINT_FAST8_MAX__ 0xff -#define __cpp_rvalue_reference 200610L -#define __cpp_nested_namespace_definitions 201411L -#define __DEC64_MAX_EXP__ 385 -#define __INT8_C(c) c -#define __INT_LEAST8_WIDTH__ 8 -#define __cpp_variadic_using 201611L -#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL -#define __INT_LEAST8_MAX__ 0x7f -#define __cpp_capture_star_this 201603L -#define __SHRT_MAX__ 0x7fff -#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L -#define __FLT64X_MAX_10_EXP__ 4932 -#define __cpp_if_constexpr 201606L -#define __LDBL_IS_IEC_60559__ 2 -#define __FLT64X_HAS_QUIET_NAN__ 1 -#define __UINT_LEAST8_MAX__ 0xff -#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 -#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 -#define __UINTMAX_TYPE__ long unsigned int -#define __linux 1 -#define __DEC32_EPSILON__ 1E-6DF -#define __FLT_EVAL_METHOD_TS_18661_3__ 0 -#define __unix 1 -#define __UINT32_MAX__ 0xffffffffU -#define __GXX_EXPERIMENTAL_CXX0X__ 1 -#define __FLT128_MIN_EXP__ (-16381) -#define __WINT_MIN__ 0U -#define __FLT128_MIN_10_EXP__ (-4931) -#define __FLT32X_IS_IEC_60559__ 2 -#define __INT_LEAST16_WIDTH__ 16 -#define __SCHAR_MAX__ 0x7f -#define __FLT128_MANT_DIG__ 113 -#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) -#define __INT64_C(c) c ## L -#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 -#define __FLT32X_MANT_DIG__ 53 -#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 -#define __cpp_aligned_new 201606L -#define __USER_LABEL_PREFIX__ -#define __FLT32_MAX_10_EXP__ 38 -#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x -#define __STDC_HOSTED__ 1 -#define __DEC64_MIN_EXP__ (-382) -#define __cpp_decltype_auto 201304L -#define __DBL_DIG__ 15 -#define __FLT32_DIG__ 6 -#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F -#define __GXX_WEAK__ 1 -#define __SHRT_WIDTH__ 16 -#define __FLT32_IS_IEC_60559__ 2 -#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L -#define __DBL_IS_IEC_60559__ 2 -#define __DEC32_MAX__ 9.999999E96DF -#define __cpp_threadsafe_static_init 200806L -#define __cpp_enumerator_attributes 201411L -#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x -#define __FLT32X_HAS_INFINITY__ 1 -#define __INT32_MAX__ 0x7fffffff -#define __unix__ 1 -#define __INT_WIDTH__ 32 -#define __SIZEOF_LONG__ 8 -#define __STDC_IEC_559__ 1 -#define __STDC_ISO_10646__ 201706L -#define __UINT16_C(c) c -#define __DECIMAL_DIG__ 21 -#define __STDC_IEC_559_COMPLEX__ 1 -#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 -#define __gnu_linux__ 1 -#define __INT16_MAX__ 0x7fff -#define __FLT64_MIN_EXP__ (-1021) -#define __FLT64X_MIN_10_EXP__ (-4931) -#define __LDBL_HAS_QUIET_NAN__ 1 -#define __FLT64_MANT_DIG__ 53 -#define __FLT64X_MANT_DIG__ 64 -#define __GNUC__ 11 -#define __GXX_RTTI 1 -#define __pie__ 2 -#define __MMX__ 1 -#define __FLT_HAS_DENORM__ 1 -#define __SIZEOF_LONG_DOUBLE__ 16 -#define __BIGGEST_ALIGNMENT__ 16 -#define __STDC_UTF_16__ 1 -#define __FLT64_MAX_10_EXP__ 308 -#define __cpp_delegating_constructors 200604L -#define __FLT32_HAS_INFINITY__ 1 -#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) -#define __cpp_raw_strings 200710L -#define __INT_FAST32_MAX__ 0x7fffffffffffffffL -#define __DBL_HAS_INFINITY__ 1 -#define __SIZEOF_FLOAT__ 4 -#define __HAVE_SPECULATION_SAFE_VALUE 1 -#define __cpp_fold_expressions 201603L -#define __DEC32_MIN_EXP__ (-94) -#define __INTPTR_WIDTH__ 64 -#define __FLT64X_HAS_INFINITY__ 1 -#define __UINT_LEAST32_MAX__ 0xffffffffU -#define __FLT32X_HAS_DENORM__ 1 -#define __INT_FAST16_TYPE__ long int -#define __MMX_WITH_SSE__ 1 -#define __LDBL_HAS_DENORM__ 1 -#define QT_WIDGETS_LIB 1 -#define __cplusplus 201703L -#define __cpp_ref_qualifiers 200710L -#define __DEC32_MIN__ 1E-95DF -#define __DEPRECATED 1 -#define __cpp_rvalue_references 200610L -#define __DBL_MAX_EXP__ 1024 -#define __WCHAR_WIDTH__ 32 -#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 -#define __DEC128_EPSILON__ 1E-33DL -#define __SSE2_MATH__ 1 -#define __ATOMIC_HLE_RELEASE 131072 -#define __PTRDIFF_MAX__ 0x7fffffffffffffffL -#define __amd64 1 -#define __ATOMIC_HLE_ACQUIRE 65536 -#define __GNUG__ 11 -#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL -#define __SIZEOF_SIZE_T__ 8 -#define __cpp_nsdmi 200809L -#define __FLT64X_MIN_EXP__ (-16381) -#define __SIZEOF_WINT_T__ 4 -#define __LONG_LONG_WIDTH__ 64 -#define __cpp_initializer_lists 200806L -#define __FLT32_MAX_EXP__ 128 -#define ABI_ID "ELF" -#define __cpp_hex_float 201603L -#define __GXX_ABI_VERSION 1016 -#define __FLT128_HAS_INFINITY__ 1 -#define __FLT_MIN_EXP__ (-125) -#define __GCC_HAVE_DWARF2_CFI_ASM 1 -#define __x86_64 1 -#define __cpp_lambdas 200907L -#define __INT_FAST64_TYPE__ long int -#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 -#define __cpp_template_auto 201606L -#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) -#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 -#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x -#define __SIZEOF_POINTER__ 8 -#define __LP64__ 1 -#define __DBL_HAS_QUIET_NAN__ 1 -#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x -#define __DECIMAL_BID_FORMAT__ 1 -#define __FLT64_MIN_10_EXP__ (-307) -#define __FLT64X_DECIMAL_DIG__ 21 -#define __DEC128_MIN__ 1E-6143DL -#define __REGISTER_PREFIX__ -#define __UINT16_MAX__ 0xffff -#define __LDBL_HAS_INFINITY__ 1 -#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 -#define __UINT8_TYPE__ unsigned char -#define __FLT_DIG__ 6 -#define __NO_INLINE__ 1 -#define __DEC_EVAL_METHOD__ 2 -#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL -#define __FLT_MANT_DIG__ 24 -#define __LDBL_DECIMAL_DIG__ 21 -#define __VERSION__ "11.4.0" -#define __UINT64_C(c) c ## UL -#define __cpp_unicode_characters 201411L -#define _STDC_PREDEF_H 1 -#define __INT_LEAST32_MAX__ 0x7fffffff -#define __GCC_ATOMIC_INT_LOCK_FREE 2 -#define __FLT128_MAX_EXP__ 16384 -#define __FLT32_MANT_DIG__ 24 -#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ -#define SIZEOF_DPTR (sizeof(void*)) -#define __STDC_IEC_60559_COMPLEX__ 201404L -#define __cpp_aggregate_bases 201603L -#define __FLT128_HAS_DENORM__ 1 -#define __FLT32_DECIMAL_DIG__ 9 -#define __FLT128_DIG__ 33 -#define __INT32_C(c) c -#define __DEC64_EPSILON__ 1E-15DD -#define __ORDER_PDP_ENDIAN__ 3412 -#define __DEC128_MIN_EXP__ (-6142) -#define __INT_FAST32_TYPE__ long int -#define __UINT_LEAST16_TYPE__ short unsigned int -#define unix 1 -#define __DBL_HAS_DENORM__ 1 -#define __cpp_rtti 199711L -#define __SIZE_TYPE__ long unsigned int -#define __UINT64_MAX__ 0xffffffffffffffffUL -#define __FLT_IS_IEC_60559__ 2 -#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" -#define __FLT64X_DIG__ 18 -#define __INT8_TYPE__ signed char -#define __cpp_digit_separators 201309L -#define __ELF__ 1 -#define __GCC_ASM_FLAG_OUTPUTS__ 1 -#define __UINT32_TYPE__ unsigned int -#define __FLT_RADIX__ 2 -#define __INT_LEAST16_TYPE__ short int -#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L -#define __UINTMAX_C(c) c ## UL -#define __GLIBCXX_BITSIZE_INT_N_0 128 -#define __k8 1 -#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x -#define __SIG_ATOMIC_MAX__ 0x7fffffff -#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 -#define __STDC_IEC_60559_BFP__ 201404L -#define __SIZEOF_PTRDIFF_T__ 8 -#define __LDBL_DIG__ 18 -#define __FLT64_IS_IEC_60559__ 2 -#define __x86_64__ 1 -#define __FLT32X_MIN_EXP__ (-1021) -#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF -#define __INT_FAST16_MAX__ 0x7fffffffffffffffL -#define __FLT64_DIG__ 15 -#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL -#define __UINT_LEAST64_TYPE__ long unsigned int -#define __FLT_HAS_QUIET_NAN__ 1 -#define __FLT_MAX_10_EXP__ 38 -#define __LONG_MAX__ 0x7fffffffffffffffL -#define __FLT64X_HAS_DENORM__ 1 -#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL -#define __FLT_HAS_INFINITY__ 1 -#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" -#define __cpp_unicode_literals 200710L -#define __UINT_FAST16_TYPE__ long unsigned int -#define __DEC64_MAX__ 9.999999999999999E384DD -#define __INT_FAST32_WIDTH__ 64 -#define __CHAR16_TYPE__ short unsigned int -#define __PRAGMA_REDEFINE_EXTNAME 1 -#define __SIZE_WIDTH__ 64 -#define __SEG_FS 1 -#define __INT_LEAST16_MAX__ 0x7fff -#define __DEC64_MANT_DIG__ 16 -#define __INT64_MAX__ 0x7fffffffffffffffL -#define __SEG_GS 1 -#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 -#define __SIG_ATOMIC_WIDTH__ 32 -#define __INT_LEAST64_TYPE__ long int -#define __INT16_TYPE__ short int -#define __INT_LEAST8_TYPE__ signed char -#define __cpp_structured_bindings 201606L -#define __SIZEOF_INT__ 4 -#define __DEC32_MAX_EXP__ 97 -#define __INT_FAST8_MAX__ 0x7f -#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 -#define __INTPTR_MAX__ 0x7fffffffffffffffL -#define __cpp_sized_deallocation 201309L -#define __cpp_guaranteed_copy_elision 201606L -#define linux 1 -#define __FLT64_HAS_QUIET_NAN__ 1 -#define __FLT32_MIN_10_EXP__ (-37) -#define __EXCEPTIONS 1 -#define __PTRDIFF_WIDTH__ 64 -#define __LDBL_MANT_DIG__ 64 -#define __cpp_range_based_for 201603L -#define __FLT64_HAS_INFINITY__ 1 -#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x -#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 -#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) -#define __code_model_small__ 1 -#define __GCC_ATOMIC_LONG_LOCK_FREE 2 -#define __cpp_nontype_template_args 201411L -#define __DEC32_MANT_DIG__ 7 -#define __cpp_return_type_deduction 201304L -#define __k8__ 1 -#define __INTPTR_TYPE__ long int -#define __UINT16_TYPE__ short unsigned int -#define __WCHAR_TYPE__ int -#define __pic__ 2 -#define __UINTPTR_MAX__ 0xffffffffffffffffUL -#define __INT_FAST64_WIDTH__ 64 -#define __cpp_decltype 200707L -#define __INT_FAST64_MAX__ 0x7fffffffffffffffL -#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 -#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F -#define __FLT64X_MAX_EXP__ 16384 -#define __UINT_FAST64_TYPE__ long unsigned int -#define __cpp_inline_variables 201606L -#define __INT_MAX__ 0x7fffffff -#define __linux__ 1 -#define __INT64_TYPE__ long int -#define __FLT_MAX_EXP__ 128 -#define __ORDER_BIG_ENDIAN__ 4321 -#define __DBL_MANT_DIG__ 53 -#define __cpp_inheriting_constructors 201511L -#define QT_CORE_LIB 1 -#define __SIZEOF_FLOAT128__ 16 -#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL -#define __DEC64_MIN__ 1E-383DD -#define __WINT_TYPE__ unsigned int -#define __UINT_LEAST32_TYPE__ unsigned int -#define __SIZEOF_SHORT__ 2 -#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 -#define __SSE__ 1 -#define __LDBL_MIN_EXP__ (-16381) -#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 -#define __amd64__ 1 -#define __WINT_WIDTH__ 32 -#define __INT_LEAST64_WIDTH__ 64 -#define __LDBL_MAX_EXP__ 16384 -#define __FLT32X_MAX_10_EXP__ 308 -#define __SIZEOF_INT128__ 16 -#define __FLT64X_IS_IEC_60559__ 2 -#define __LDBL_MAX_10_EXP__ 4932 -#define __ATOMIC_RELAXED 0 -#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) -#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 -#define _LP64 1 -#define __UINT8_C(c) c -#define __FLT64_MAX_EXP__ 1024 -#define __INT_LEAST32_TYPE__ int -#define __SIZEOF_WCHAR_T__ 4 -#define __GNUC_PATCHLEVEL__ 0 -#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 -#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 -#define __FLT128_HAS_QUIET_NAN__ 1 -#define __INTMAX_MAX__ 0x7fffffffffffffffL -#define __INT_FAST8_TYPE__ signed char -#define __cpp_namespace_attributes 201411L -#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x -#define __STDCPP_THREADS__ 1 -#define __GNUC_STDC_INLINE__ 1 -#define __FLT64_HAS_DENORM__ 1 -#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 -#define __DBL_DECIMAL_DIG__ 17 -#define __STDC_UTF_32__ 1 -#define __INT_FAST8_WIDTH__ 8 -#define __FXSR__ 1 -#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x -#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) -#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ -#define __INTMAX_WIDTH__ 64 -#define __cpp_runtime_arrays 198712L -#define __UINT64_TYPE__ long unsigned int -#define __UINT32_C(c) c ## U -#define __cpp_alias_templates 200704L -#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F -#define __FLT128_IS_IEC_60559__ 2 -#define __INT8_MAX__ 0x7f -#define __LONG_WIDTH__ 64 -#define __PIC__ 2 -#define __UINT_FAST32_TYPE__ long unsigned int -#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x -#define __CHAR32_TYPE__ unsigned int -#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F -#define __cpp_constexpr 201603L -#define __SSE2__ 1 -#define __cpp_deduction_guides 201703L -#define __INT32_TYPE__ int -#define __SIZEOF_DOUBLE__ 8 -#define __cpp_exceptions 199711L -#define __FLT_MIN_10_EXP__ (-37) -#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 -#define __INT_LEAST32_WIDTH__ 32 -#define __INTMAX_TYPE__ long int -#define __DEC128_MAX_EXP__ 6145 -#define __FLT32X_HAS_QUIET_NAN__ 1 -#define __ATOMIC_CONSUME 1 -#define __GNUC_MINOR__ 4 -#define __GLIBCXX_TYPE_INT_N_0 __int128 -#define __INT_FAST16_WIDTH__ 64 -#define __UINTMAX_MAX__ 0xffffffffffffffffUL -#define __PIE__ 2 -#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x -#define __cpp_template_template_args 201611L -#define __DBL_MAX_10_EXP__ 308 -#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L -#define __INT16_C(c) c -#define __STDC__ 1 -#define __FLT32X_DIG__ 15 -#define __PTRDIFF_TYPE__ long int -#define __ATOMIC_SEQ_CST 5 -#define __FLT32X_MIN_10_EXP__ (-307) -#define __UINTPTR_TYPE__ long unsigned int -#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD -#define __DEC128_MANT_DIG__ 34 -#define __LDBL_MIN_10_EXP__ (-4931) -#define __cpp_generic_lambdas 201304L -#define __SSE_MATH__ 1 -#define __SIZEOF_LONG_LONG__ 8 -#define __cpp_user_defined_literals 200809L -#define __FLT128_DECIMAL_DIG__ 36 -#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 -#define __FLT32_HAS_QUIET_NAN__ 1 -#define __FLT_DECIMAL_DIG__ 9 -#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL -#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L -#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 -#define __UINT_FAST8_TYPE__ unsigned char -#define _GNU_SOURCE 1 -#define __cpp_init_captures 201304L -#define __ATOMIC_ACQ_REL 4 -#define __ATOMIC_RELEASE 3 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp deleted file mode 100644 index de9bec650..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/mocs_compilation.cpp +++ /dev/null @@ -1,2 +0,0 @@ -// This file is autogenerated. Changes will be overwritten. -#include "EWIEGA46WW/moc_mainwindow.cpp" diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qt6_application_autogen/timestamp deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qtcsettings.cmake b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qtcsettings.cmake deleted file mode 100644 index 815241fa1..000000000 --- a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/qtcsettings.cmake +++ /dev/null @@ -1,10 +0,0 @@ -# This file is managed by Qt Creator, do not edit! - -set("CMAKE_C_COMPILER" "/usr/bin/gcc-11" CACHE "FILEPATH" "" FORCE) -set("CMAKE_CXX_FLAGS_INIT" "-DQT_QML_DEBUG" CACHE "STRING" "" FORCE) -set("CMAKE_PROJECT_INCLUDE_BEFORE" "/home/austenharrell/school/2025_Spring/windninja/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake" CACHE "FILEPATH" "" FORCE) -set("CMAKE_PREFIX_PATH" "/home/austenharrell/Qt/6.8.0/gcc_64" CACHE "PATH" "" FORCE) -set("CMAKE_BUILD_TYPE" "Debug" CACHE "STRING" "" FORCE) -set("QT_QMAKE_EXECUTABLE" "/home/austenharrell/Qt/6.8.0/gcc_64/bin/qmake" CACHE "FILEPATH" "" FORCE) -set("CMAKE_CXX_COMPILER" "/usr/bin/x86_64-linux-gnu-g++-11" CACHE "FILEPATH" "" FORCE) -set("CMAKE_GENERATOR" "Ninja" CACHE "STRING" "" FORCE) \ No newline at end of file diff --git a/src/gui/qt6/main.cpp:Zone.Identifier b/src/gui/qt6/main.cpp:Zone.Identifier deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/gui/qt6/mainwindow.cpp:Zone.Identifier b/src/gui/qt6/mainwindow.cpp:Zone.Identifier deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/gui/qt6/mainwindow.h:Zone.Identifier b/src/gui/qt6/mainwindow.h:Zone.Identifier deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/gui/qt6/mainwindow.ui:Zone.Identifier b/src/gui/qt6/mainwindow.ui:Zone.Identifier deleted file mode 100644 index e69de29bb..000000000 From e275fbe4bc9bcb5affeabc1ed393d155a028ea58 Mon Sep 17 00:00:00 2001 From: Austen Harrell Date: Tue, 25 Feb 2025 17:21:17 -0700 Subject: [PATCH 014/435] Start implementation on Leaflet --- data/map.htm | 341 ------------------------------------- src/gui/qt6/CMakeLists.txt | 3 +- src/gui/qt6/mainwindow.cpp | 18 +- src/gui/qt6/mainwindow.h | 2 + 4 files changed, 21 insertions(+), 343 deletions(-) delete mode 100644 data/map.htm diff --git a/data/map.htm b/data/map.htm deleted file mode 100644 index 373f50931..000000000 --- a/data/map.htm +++ /dev/null @@ -1,341 +0,0 @@ - - - - - - Leaflet.draw drawing and editing tools - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - -
-
-
-

Point and Radius:

-

Enter lat, lon, and radius, then choose Data Source and click Download File

-
- - - - e.g., 44.334 - - - - - e.g., -112.555 - - - - - e.g., 10 - -
-
-

Bounding Box Coordinates:

- - - - - - - - -
-
- - - - diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt index 8896b062f..fc5aa3d27 100644 --- a/src/gui/qt6/CMakeLists.txt +++ b/src/gui/qt6/CMakeLists.txt @@ -11,6 +11,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) +find_package(Qt6 REQUIRED COMPONENTS Widgets WebEngineWidgets) set(PROJECT_SOURCES main.cpp @@ -42,7 +43,7 @@ else() endif() endif() -target_link_libraries(qt6_application PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) +target_link_libraries(qt6_application PRIVATE Qt${QT_VERSION_MAJOR}::Widgets PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets) # Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. # If you are developing for iOS or macOS you should consider setting an diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index ab6f69972..1409fe5c6 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -3,12 +3,28 @@ #include #include #include +#include MainWindow::MainWindow(QWidget *parent) - : QMainWindow(parent), ui(new Ui::MainWindow) { + : QMainWindow(parent), + ui(new Ui::MainWindow) { ui->setupUi(this); + //Load HTML file with Leaflet + webView = new QWebEngineView(this); + QString filePath = QUrl::fromLocalFile(QCoreApplication::applicationDirPath() + "/data/map.html").toString(); + webView->setUrl(QUrl(filePath)); + + // Set up layout + QVBoxLayout *layout = new QVBoxLayout(); + layout->setContentsMargins(0, 0, 0, 0); + layout->addWidget(webView); + + // Apply + ui->mapPanelWidget->setLayout(layout); + + } MainWindow::~MainWindow() { delete ui; } diff --git a/src/gui/qt6/mainwindow.h b/src/gui/qt6/mainwindow.h index 94cd27c73..ad872ad0b 100644 --- a/src/gui/qt6/mainwindow.h +++ b/src/gui/qt6/mainwindow.h @@ -2,6 +2,7 @@ #define MAINWINDOW_H #include +#include QT_BEGIN_NAMESPACE namespace Ui { @@ -18,5 +19,6 @@ class MainWindow : public QMainWindow { private: Ui::MainWindow *ui; + QWebEngineView *webView; }; #endif // MAINWINDOW_H From 58158db6a32ff081eba431ea814bb8c08ba83bb3 Mon Sep 17 00:00:00 2001 From: Austen Harrell Date: Tue, 25 Feb 2025 18:36:08 -0700 Subject: [PATCH 015/435] Update map.html file extension --- data/map.html | 341 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 341 insertions(+) create mode 100644 data/map.html diff --git a/data/map.html b/data/map.html new file mode 100644 index 000000000..373f50931 --- /dev/null +++ b/data/map.html @@ -0,0 +1,341 @@ + + + + + + Leaflet.draw drawing and editing tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+

Point and Radius:

+

Enter lat, lon, and radius, then choose Data Source and click Download File

+
+ + + + e.g., 44.334 + + + + + e.g., -112.555 + + + + + e.g., 10 + +
+
+

Bounding Box Coordinates:

+ + + + + + + + +
+
+ + + + From dc2a579face546b2e4d48ae564fda821254c35c1 Mon Sep 17 00:00:00 2001 From: vboxuser Date: Tue, 25 Feb 2025 19:36:33 -0700 Subject: [PATCH 016/435] Leaflet working (kinda) --- .gitignore | 4 + CMakeLists.txt.user | 402 +++++++++++++++++++++++++------------ src/gui/qt6/CMakeLists.txt | 2 +- src/gui/qt6/mainwindow.cpp | 7 +- 4 files changed, 281 insertions(+), 134 deletions(-) diff --git a/.gitignore b/.gitignore index fb63a1933..011b20d30 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ # Build folder debug* +build* # Doxygen doxy.tag @@ -43,6 +44,9 @@ doxy.tag *.creator* *.files *.includes +*.user +*.user* +CMakeLists.txt.user # Weather model files *UCAR* diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user index 010cdaefc..1d24c8858 100644 --- a/CMakeLists.txt.user +++ b/CMakeLists.txt.user @@ -1,14 +1,14 @@ - + EnvironmentId - {ffebe718-7e6c-496a-80e5-5cb3ef92867b} + {0d93c7a8-8bca-43b6-a4b5-f063e3c54c90} ProjectExplorer.Project.ActiveTarget - 0 + 0 ProjectExplorer.Project.EditorSettings @@ -28,311 +28,449 @@ QmlJSGlobal - 2 + 2 UTF-8 false 4 false + 0 80 true true 1 + 0 + false true false - 0 + 2 true true 0 8 true + false 1 true true true + *.md, *.MD, Makefile false + true + true ProjectExplorer.Project.PluginSettings - - true + + true + false + true + true + true + true + + false + + + 0 + true + + true + true + Builtin.DefaultTidyAndClazy + 0 + true + + + + true + ProjectExplorer.Project.Target.0 - QT6 - QT6 - {410b4c54-95c1-4d21-bd01-659bbf2c80f8} - 0 - 0 - 0 + Desktop + Desktop Qt 6.8.2 + Desktop Qt 6.8.2 + qt.qt6.682.linux_gcc_64_kit + 1 + 0 + 1 - - CMAKE_BUILD_TYPE:STRING=Debug - CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} - CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} - CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} - QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} - - /home/cody/devWindNinja/build-windninja-QT6-Debug + Debug + 2 + false + + -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_BUILD_TYPE:STRING=Debug +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_GENERATOR:STRING=Ninja + 0 + /home/vboxuser/Documents/windninja/build/Desktop_Qt_6_8_2-Debug - + all + false + true + Build CMakeProjectManager.MakeStep - 1 + 1 Build Build ProjectExplorer.BuildSteps.Build - + clean + false + true + Build CMakeProjectManager.MakeStep - 1 + 1 Clean Clean ProjectExplorer.BuildSteps.Clean 2 false + + false Debug CMakeProjectManager.CMakeBuildConfiguration - - CMAKE_BUILD_TYPE:STRING=Release - CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} - CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} - CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} - QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} - - /home/cody/devWindNinja/build-windninja-QT6-Release + Release + 2 + false + + -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_BUILD_TYPE:STRING=Release +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_GENERATOR:STRING=Ninja + /home/vboxuser/Documents/windninja/build/Desktop_Qt_6_8_2-Release - + all + false + true + Build CMakeProjectManager.MakeStep - 1 + 1 Build Build ProjectExplorer.BuildSteps.Build - + clean + false + true + Build CMakeProjectManager.MakeStep - 1 + 1 Clean Clean ProjectExplorer.BuildSteps.Clean 2 false + + false Release CMakeProjectManager.CMakeBuildConfiguration - - CMAKE_BUILD_TYPE:STRING=RelWithDebInfo - CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} - CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} - CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} - QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} - - /home/cody/devWindNinja/build-windninja-QT6-RelWithDebInfo + RelWithDebInfo + 2 + false + + -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_GENERATOR:STRING=Ninja + /home/vboxuser/Documents/windninja/build/Desktop_Qt_6_8_2-RelWithDebInfo - + all + false + true CMakeProjectManager.MakeStep - 1 + 1 Build Build ProjectExplorer.BuildSteps.Build - + clean + false + true CMakeProjectManager.MakeStep - 1 + 1 Clean Clean ProjectExplorer.BuildSteps.Clean 2 false + + false Release with Debug Information CMakeProjectManager.CMakeBuildConfiguration - - CMAKE_BUILD_TYPE:STRING=MinSizeRel - CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} - CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} - CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} - QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} - - /home/cody/devWindNinja/build-windninja-QT6-MinSizeRel + RelWithDebInfo + 2 + false + + -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_GENERATOR:STRING=Ninja + 0 + /home/vboxuser/Documents/windninja/build/Desktop_Qt_6_8_2-Profile - + all + false + true CMakeProjectManager.MakeStep - 1 + 1 Build Build ProjectExplorer.BuildSteps.Build - + clean + false + true CMakeProjectManager.MakeStep - 1 + 1 Clean Clean ProjectExplorer.BuildSteps.Clean 2 false + + false + + Profile + CMakeProjectManager.CMakeBuildConfiguration + + + MinSizeRel + 2 + false + + -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} +-DCMAKE_BUILD_TYPE:STRING=MinSizeRel +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_GENERATOR:STRING=Ninja + /home/vboxuser/Documents/windninja/build/Desktop_Qt_6_8_2-MinSizeRel + + + + + all + + false + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false Minimum Size Release CMakeProjectManager.CMakeBuildConfiguration - 4 + 5 - 0 + 0 Deploy Deploy ProjectExplorer.BuildSteps.Deploy 1 + + false ProjectExplorer.DefaultDeployConfiguration - 1 - + + + + + + + + false + + true + ApplicationManagerPlugin.Deploy.CMakePackageStep + + + install-package --acknowledge + true + Install Application Manager package + ApplicationManagerPlugin.Deploy.InstallPackageStep + + + + + + + + 2 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ApplicationManagerPlugin.Deploy.Configuration + + 2 - dwarf - - cpu-cycles - - - 250 - - -e - cpu-cycles - --call-graph - dwarf,4096 - -F - 250 - - -F true - 4096 - false - false - 1000 - true - - false - false - false - false - true - 0.01 - 10 - true - kcachegrind - 1 - 25 - - 1 + 0 + true + + 2 + + false + -e cpu-cycles --call-graph dwarf,4096 -F 250 + WindNinja_cli + CMakeProjectManager.CMakeRunConfiguration. + WindNinja_cli + false + true + true + true + /home/vboxuser/Documents/windninja/build/Desktop_Qt_6_8_2-Release/src/cli + + + true + true + 0 true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - + 2 - - ProjectExplorer.CustomExecutableRunConfiguration - - - false - - false + false + -e cpu-cycles --call-graph dwarf,4096 -F 250 + qt6_application + CMakeProjectManager.CMakeRunConfiguration. + qt6_application + false true - false - false + true true - - + /home/vboxuser/Documents/windninja/build/Desktop_Qt_6_8_2-Release/src/gui/qt6 - 1 + 2 ProjectExplorer.Project.TargetCount - 1 + 1 ProjectExplorer.Project.Updater.FileVersion diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt index fc5aa3d27..5b08e16b0 100644 --- a/src/gui/qt6/CMakeLists.txt +++ b/src/gui/qt6/CMakeLists.txt @@ -11,7 +11,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) -find_package(Qt6 REQUIRED COMPONENTS Widgets WebEngineWidgets) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets WebEngineWidgets) set(PROJECT_SOURCES main.cpp diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index 1409fe5c6..544adee56 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -1,8 +1,11 @@ #include "mainwindow.h" #include "./ui_mainwindow.h" +#include +#include #include #include #include +#include #include @@ -13,7 +16,9 @@ MainWindow::MainWindow(QWidget *parent) //Load HTML file with Leaflet webView = new QWebEngineView(this); - QString filePath = QUrl::fromLocalFile(QCoreApplication::applicationDirPath() + "/data/map.html").toString(); + QString filePath = QUrl::fromLocalFile("home/vboxuser/Documents/windninja/data/map.html").toString(); + qDebug() << QDir::currentPath(); + qDebug() << filePath; webView->setUrl(QUrl(filePath)); // Set up layout From 8b07a1c695219ed78c511bdfebaf98ad6bc880bd Mon Sep 17 00:00:00 2001 From: vboxuser Date: Tue, 25 Feb 2025 19:38:39 -0700 Subject: [PATCH 017/435] Leaflet working kinda kinda --- CMakeLists.txt.user | 483 -------------------------------------------- 1 file changed, 483 deletions(-) delete mode 100644 CMakeLists.txt.user diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user deleted file mode 100644 index 1d24c8858..000000000 --- a/CMakeLists.txt.user +++ /dev/null @@ -1,483 +0,0 @@ - - - - - - EnvironmentId - {0d93c7a8-8bca-43b6-a4b5-f063e3c54c90} - - - ProjectExplorer.Project.ActiveTarget - 0 - - - ProjectExplorer.Project.EditorSettings - - true - false - true - - Cpp - - CppGlobal - - - - QmlJS - - QmlJSGlobal - - - 2 - UTF-8 - false - 4 - false - 0 - 80 - true - true - 1 - 0 - false - true - false - 2 - true - true - 0 - 8 - true - false - 1 - true - true - true - *.md, *.MD, Makefile - false - true - true - - - - ProjectExplorer.Project.PluginSettings - - - true - false - true - true - true - true - - false - - - 0 - true - - true - true - Builtin.DefaultTidyAndClazy - 0 - true - - - - true - - - - - ProjectExplorer.Project.Target.0 - - Desktop - Desktop Qt 6.8.2 - Desktop Qt 6.8.2 - qt.qt6.682.linux_gcc_64_kit - 1 - 0 - 1 - - Debug - 2 - false - - -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_BUILD_TYPE:STRING=Debug --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_GENERATOR:STRING=Ninja - 0 - /home/vboxuser/Documents/windninja/build/Desktop_Qt_6_8_2-Debug - - - - - all - - false - - true - Build - CMakeProjectManager.MakeStep - - 1 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - Build - CMakeProjectManager.MakeStep - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Debug - CMakeProjectManager.CMakeBuildConfiguration - - - Release - 2 - false - - -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_BUILD_TYPE:STRING=Release --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_GENERATOR:STRING=Ninja - /home/vboxuser/Documents/windninja/build/Desktop_Qt_6_8_2-Release - - - - - all - - false - - true - Build - CMakeProjectManager.MakeStep - - 1 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - Build - CMakeProjectManager.MakeStep - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Release - CMakeProjectManager.CMakeBuildConfiguration - - - RelWithDebInfo - 2 - false - - -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_GENERATOR:STRING=Ninja - /home/vboxuser/Documents/windninja/build/Desktop_Qt_6_8_2-RelWithDebInfo - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Release with Debug Information - CMakeProjectManager.CMakeBuildConfiguration - - - RelWithDebInfo - 2 - false - - -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_GENERATOR:STRING=Ninja - 0 - /home/vboxuser/Documents/windninja/build/Desktop_Qt_6_8_2-Profile - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Profile - CMakeProjectManager.CMakeBuildConfiguration - - - MinSizeRel - 2 - false - - -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake --DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} --DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} --DCMAKE_BUILD_TYPE:STRING=MinSizeRel --DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} --DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} --DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON --DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} --DCMAKE_GENERATOR:STRING=Ninja - /home/vboxuser/Documents/windninja/build/Desktop_Qt_6_8_2-MinSizeRel - - - - - all - - false - - true - CMakeProjectManager.MakeStep - - 1 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - - - clean - - false - - true - CMakeProjectManager.MakeStep - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Minimum Size Release - CMakeProjectManager.CMakeBuildConfiguration - - 5 - - - 0 - Deploy - Deploy - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - ProjectExplorer.DefaultDeployConfiguration - - - - - - - - - false - - true - ApplicationManagerPlugin.Deploy.CMakePackageStep - - - install-package --acknowledge - true - Install Application Manager package - ApplicationManagerPlugin.Deploy.InstallPackageStep - - - - - - - - 2 - Deploy - Deploy - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - ApplicationManagerPlugin.Deploy.Configuration - - 2 - - true - true - 0 - true - - 2 - - false - -e cpu-cycles --call-graph dwarf,4096 -F 250 - WindNinja_cli - CMakeProjectManager.CMakeRunConfiguration. - WindNinja_cli - false - true - true - true - /home/vboxuser/Documents/windninja/build/Desktop_Qt_6_8_2-Release/src/cli - - - true - true - 0 - true - - 2 - - false - -e cpu-cycles --call-graph dwarf,4096 -F 250 - qt6_application - CMakeProjectManager.CMakeRunConfiguration. - qt6_application - false - true - true - true - /home/vboxuser/Documents/windninja/build/Desktop_Qt_6_8_2-Release/src/gui/qt6 - - 2 - - - - ProjectExplorer.Project.TargetCount - 1 - - - ProjectExplorer.Project.Updater.FileVersion - 22 - - - Version - 22 - - From a4ab9714388cd3e72ebabc07fe580328172e10df Mon Sep 17 00:00:00 2001 From: aaharrell Date: Tue, 25 Feb 2025 20:05:43 -0700 Subject: [PATCH 018/435] Update .gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 011b20d30..73b5ce238 100644 --- a/.gitignore +++ b/.gitignore @@ -46,7 +46,6 @@ doxy.tag *.includes *.user *.user* -CMakeLists.txt.user # Weather model files *UCAR* From bc694a20d02d04136bab599c0a5a64c19c6b04d9 Mon Sep 17 00:00:00 2001 From: aaharrell Date: Tue, 25 Feb 2025 22:47:07 -0700 Subject: [PATCH 019/435] Update .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 73b5ce238..42fda89b9 100644 --- a/.gitignore +++ b/.gitignore @@ -39,7 +39,7 @@ doxy.tag *.swp *~ -# Qt Creator files +# Qt Creator files & user files *.config *.creator* *.files From 9a7aeea4bbbbd49cc76bef2c739af2ace93b7959 Mon Sep 17 00:00:00 2001 From: aaharrell Date: Tue, 4 Mar 2025 08:28:43 -0700 Subject: [PATCH 020/435] Updated map styling --- data/map.html | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/data/map.html b/data/map.html index 373f50931..b67c04d63 100644 --- a/data/map.html +++ b/data/map.html @@ -10,10 +10,29 @@ html, body { height: 100% ; width: 100% ; + margin: 0; + padding: 0; + overflow: hidden; + box-sizing: border-box; } #map { height: 70% ; width: 100% ; + max-width: 100%; + box-sizing: border-box; + } + #data_entry { + height: 30%; + width: 100%; + max-width: 100%; + box-sizing: border-box; + overflow: auto; + } + #data_entry form { + box-sizing: border-box; + width: 100%; + height: 50%; + padding: 0; } .option_hdr { font-size: 0.9em ; From 50d7349be1426c2c6bfbf3171212f6eb972405c4 Mon Sep 17 00:00:00 2001 From: aaharrell Date: Tue, 4 Mar 2025 08:29:31 -0700 Subject: [PATCH 021/435] Update interface with tree menu navigation --- src/gui/qt6/mainwindow.cpp | 170 ++- src/gui/qt6/mainwindow.h | 9 +- src/gui/qt6/mainwindow.ui | 2124 ++++++++++++++++++++++-------------- 3 files changed, 1477 insertions(+), 826 deletions(-) diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index 544adee56..0e6f0e384 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -1,25 +1,145 @@ #include "mainwindow.h" #include "./ui_mainwindow.h" #include +#include #include +#include +#include +#include #include +#include #include #include #include #include +#include +#include + + +// Menu filtering class +class DirectoryFilterModel : public QSortFilterProxyModel { +protected: + bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override { + QFileSystemModel *fsModel = qobject_cast(sourceModel()); + if (!fsModel) return false; + + QModelIndex index = fsModel->index(source_row, 0, source_parent); + if (!index.isValid()) return false; + + // Define the download path + QFileInfo fileInfo = fsModel->fileInfo(index); + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + + // Keep the Downloads root directory + if (fileInfo.absoluteFilePath() == downloadsPath) { + return true; + } + + // Ensure filtering applies only inside Downloads + if (!fileInfo.absoluteFilePath().startsWith(downloadsPath)) { + return false; + } + + // Allow `WXSTATIONS-*` directories + if (fileInfo.isDir() && fileInfo.fileName().toLower().startsWith("wxstations")) { + return true; + } + + // Allow files **inside** `WXSTATIONS-*` + QModelIndex parentIndex = index.parent(); + if (parentIndex.isValid()) { + QFileInfo parentInfo = fsModel->fileInfo(parentIndex); + if (parentInfo.isDir() && parentInfo.fileName().toLower().startsWith("wxstations")) { + return true; + } + } + + return false; + } +}; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), - ui(new Ui::MainWindow) { + ui(new Ui::MainWindow) +{ ui->setupUi(this); + // Set default window size + resize(1200, 700); + + /* + * + * Create file handler window for point init screen + * + */ + + // Get the correct Downloads folder path + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + + // Enable QFileSystemModel to process directories and files + QFileSystemModel *model = new QFileSystemModel(this); + model->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs | QDir::AllEntries); // Ensure files appear + model->setRootPath(downloadsPath); + + // Enable file watching so contents refresh properly + model->setReadOnly(false); + model->setResolveSymlinks(true); + + // Create a filtering model + DirectoryFilterModel *filterModel = new DirectoryFilterModel(); + filterModel->setSourceModel(model); + + // Set the correct root index inside Downloads + QModelIndex rootIndex = model->index(downloadsPath); + ui->treeFileExplorer->setModel(filterModel); + ui->treeFileExplorer->setRootIndex(filterModel->mapFromSource(rootIndex)); + + // Ensure folders expand and collapse correctly + ui->treeFileExplorer->setExpandsOnDoubleClick(true); + ui->treeFileExplorer->setAnimated(true); + ui->treeFileExplorer->setIndentation(15); + ui->treeFileExplorer->setSortingEnabled(true); + ui->treeFileExplorer->setItemsExpandable(true); + ui->treeFileExplorer->setUniformRowHeights(true); + + // Show only "Name" and "Date Modified" columns + ui->treeFileExplorer->hideColumn(1); // Hide Size column + ui->treeFileExplorer->hideColumn(2); // Hide Type column + + // Optional: Set column headers + QHeaderView *header = ui->treeFileExplorer->header(); + header->setSectionResizeMode(0, QHeaderView::Interactive); // Name fits content + header->setSectionResizeMode(3, QHeaderView::Stretch); // Date Modified stretches + model->setHeaderData(0, Qt::Horizontal, "Name"); + model->setHeaderData(3, Qt::Horizontal, "Date Modified"); + + // Force model to reload children + ui->treeFileExplorer->expandAll(); // Force expand all to check visibility + + // Get project root directory + QDir projectRoot(QCoreApplication::applicationDirPath()); + while (!projectRoot.exists("data")) { + if (!projectRoot.cdUp()) break; + } + + /* + * + * Functionality for the map widget + * + */ + + // Resolve the map file path + QString filePath = projectRoot.filePath("data/map.html"); + + // Enable remote content + QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true); + QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); + //Load HTML file with Leaflet webView = new QWebEngineView(this); - QString filePath = QUrl::fromLocalFile("home/vboxuser/Documents/windninja/data/map.html").toString(); - qDebug() << QDir::currentPath(); - qDebug() << filePath; - webView->setUrl(QUrl(filePath)); + QUrl url = QUrl::fromLocalFile(filePath); + webView->setUrl(url); // Set up layout QVBoxLayout *layout = new QVBoxLayout(); @@ -29,7 +149,47 @@ MainWindow::MainWindow(QWidget *parent) // Apply ui->mapPanelWidget->setLayout(layout); + /* + * + * Connect tree items to stacked tab window + * + */ + // Top-level items + ui->stackedInputPage->setCurrentIndex(0); + ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); // Solver Methodology (Page 0) + ui->treeWidget->topLevelItem(1)->setData(0, Qt::UserRole, 4); // Inputs (Page 4) + + // Sub-items for Solver Methodology + ui->treeWidget->topLevelItem(0)->child(0)->setData(0, Qt::UserRole, 2); // Conservation of Mass (Page 1) + ui->treeWidget->topLevelItem(0)->child(1)->setData(0, Qt::UserRole, 3); // Conservation of Mass and Momentum (Page 2) + + // Sub-items for Inputs + ui->treeWidget->topLevelItem(1)->child(0)->setData(0, Qt::UserRole, 5); // Surface Input (Page 5) + ui->treeWidget->topLevelItem(1)->child(1)->setData(0, Qt::UserRole, 6); // Dirunal Input (Page 6) + ui->treeWidget->topLevelItem(1)->child(2)->setData(0, Qt::UserRole, 7); // Stability Input (Page 7) + ui->treeWidget->topLevelItem(1)->child(3)->setData(0, Qt::UserRole, 8); // Wind Input (Page 8) + + // Sub-sub-items for Wind Input + QTreeWidgetItem *windInputItem = ui->treeWidget->topLevelItem(1)->child(3); + windInputItem->child(0)->setData(0, Qt::UserRole, 9); // Domain Average Wind (Page 9) + windInputItem->child(1)->setData(0, Qt::UserRole, 10); // Point Init (Page 10) + windInputItem->child(2)->setData(0, Qt::UserRole, 11); // Weather Model (Page 11) + + connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::onTreeItemClicked); } MainWindow::~MainWindow() { delete ui; } + +/* + * + * Click tree item helper function + * + */ + +void MainWindow::onTreeItemClicked(QTreeWidgetItem *item, int column) { + int pageIndex = item->data(column, Qt::UserRole).toInt(); + if (pageIndex >= 0) { + ui->stackedInputPage->setCurrentIndex(pageIndex); + } +} diff --git a/src/gui/qt6/mainwindow.h b/src/gui/qt6/mainwindow.h index ad872ad0b..1adaaa2e1 100644 --- a/src/gui/qt6/mainwindow.h +++ b/src/gui/qt6/mainwindow.h @@ -2,7 +2,9 @@ #define MAINWINDOW_H #include +#include #include +#include "ui_mainwindow.h" QT_BEGIN_NAMESPACE namespace Ui { @@ -18,7 +20,10 @@ class MainWindow : public QMainWindow { ~MainWindow(); private: - Ui::MainWindow *ui; - QWebEngineView *webView; + void onTreeItemClicked(QTreeWidgetItem *item, int column); + + +Ui::MainWindow *ui; +QWebEngineView *webView; }; #endif // MAINWINDOW_H diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui index 9cee87681..0da80dcc2 100644 --- a/src/gui/qt6/mainwindow.ui +++ b/src/gui/qt6/mainwindow.ui @@ -18,14 +18,14 @@ - 300 - 300 + 490 + 500 - 0 - 0 + 1000 + 1000 @@ -157,18 +157,27 @@ true - + 0 0 + + + 0 + 0 + + false - + + + 0 + 0 @@ -191,10 +200,43 @@ - 1081 + 200 + 0 + + + + + 225 0 + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + QFrame::Shape::NoFrame @@ -208,7 +250,7 @@ false - + 0 @@ -222,12 +264,15 @@ 10 + 5 + + 0 - + 0 0 @@ -240,7 +285,7 @@ - 16777215 + 600 250 @@ -276,6 +321,9 @@ 12 + + PointingHandCursor + @@ -365,13 +413,56 @@ + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + 0 + 0 + + + + + 0 + 250 + + + + + 600 + 16777215 + + + + + 300 + 0 + + - QFrame::Shape::NoFrame + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Sunken - 5 + 10 @@ -405,13 +496,16 @@ p, li { white-space: pre-wrap; } hr { height: 1px; border-width: 0; } li.unchecked::marker { content: "\2610"; } li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A solution requires the selection of one (1) Solver Methodology:</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 1. Conservation of Mass (faster, less accurate)</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 2. Conservation of Mass and Momentum (slower, more accurate)</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Select either option for more detail.</p></body></html> +</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';">A solution requires the selection of one (1) Solver Methodology:</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';"> 1. Conservation of Mass (faster, less accurate)</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';"> 2. Conservation of Mass and Momentum (slower, more accurate)</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';">Select either option for more detail.</span></p></body></html> + + + Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse @@ -426,13 +520,13 @@ li.checked::marker { content: "\2612"; } - 0 + 5 - 0 + 5 - 0 + 5 5 @@ -447,19 +541,22 @@ li.checked::marker { content: "\2612"; } 0 - 0 + 5 - 0 + 5 - 0 + 5 - 0 + 5 + + PointingHandCursor + Use Conservation of Mass @@ -482,23 +579,39 @@ p, li { white-space: pre-wrap; } hr { height: 1px; border-width: 0; } li.unchecked::marker { content: "\2610"; } li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">This is the native WindNinja solver. It solves a conservation of mass equation, but not a conservation of momentum equation. This solver is fast-running, but may give less accurate wind predictions in regions where momentum effects are important, for example on the lee side of terrain obstacles.</span></p></body></html> +</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">This is the native WindNinja solver. It solves a conservation of mass equation, but not a conservation of momentum equation. This solver is fast-running, but may give less accurate wind predictions in regions where momentum effects are important, for example on the lee side of terrain obstacles.</span></p></body></html> + + + Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + - 0 + 5 - 0 + 5 - 0 + 5 5 @@ -513,19 +626,22 @@ li.checked::marker { content: "\2612"; } 0 - 0 + 5 - 0 + 5 - 0 + 5 - 0 + 5 + + PointingHandCursor + Use Conservation of Mass and Momentum @@ -541,6 +657,50 @@ li.checked::marker { content: "\2612"; } 8 + + QFrame::Shape::NoFrame + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">This solver conserves both mass and momentum. It is based on the OpenFOAM CFD toolbox. This solver should give more accurate wind predictions in regions where momentum effects are important, such as on the lee side of terrain obstacles. Because this solver is more computationally intensive than the conservation of mass solver, simulation times will be longer. Typical simulation times for this solver range from 10-30 minutes, but will depend on your domain, resolution, and computational resources. Note that some options (e.g., point initialization and non-neutral stability) are not available for this solver at this time. We plan to make these options available in future releases.</span></p></body></html> + + + Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse + + + + + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 8 + + + + QFrame::Shape::NoFrame + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> @@ -548,28 +708,81 @@ p, li { white-space: pre-wrap; } hr { height: 1px; border-width: 0; } li.unchecked::marker { content: "\2610"; } li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">This solver conserves both mass and momentum. It is based on the OpenFOAM CFD toolbox. This solver should give more accurate wind predictions in regions where momentum effects are important, such as on the lee side of terrain obstacles. Because this solver is more computationally intensive than the conservation of mass solver, simulation times will be longer. Typical simulation times for this solver range from 10-30 minutes, but will depend on your domain, resolution, and computational resources. Note that some options (e.g., point initialization and non-neutral stability) are not available for this solver at this time. We plan to make these options available in future releases.</span></p></body></html> +</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">This is where input parameters are defined. Analysis requires:</span> </p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> </p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> <span style=" font-family:'Sans Serif'; font-size:10pt;">1. Surface Input (.tif) file:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:30px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:10pt;">- Can be uploaded from a computer or downloaded using the map on the right</span> </p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:30px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:10pt;">- Optional diurnal and stability analysis</span> </p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> <span style=" font-family:'Sans Serif'; font-size:10pt;">2. Wind Input:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:30px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:10pt;">- Requires one (1) of the three (3) options available: Domain Average Wind, Point Initialization, or Weather Model</span></p></body></html> + + + Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse - - + + + 0 + 0 + + + + + 0 + 0 + + + + + QLayout::SizeConstraint::SetMinAndMaxSize + + + 5 + + + 5 + + + 5 + + + 5 + - + 0 0 + + + 0 + 70 + + Elevation Input File + + 5 + + + 5 + + + 5 + + + 5 + @@ -582,6 +795,9 @@ li.checked::marker { content: "\2612"; } + + PointingHandCursor + Open File @@ -589,8 +805,11 @@ li.checked::marker { content: "\2612"; } + + PointingHandCursor + - Get From Map + Import From Map @@ -613,11 +832,17 @@ li.checked::marker { content: "\2612"; } - + 0 0 + + + 0 + 70 + + Vegetation @@ -630,6 +855,9 @@ li.checked::marker { content: "\2612"; } 0 + + PointingHandCursor + Grass @@ -666,11 +894,17 @@ li.checked::marker { content: "\2612"; } - + 0 0 + + + 0 + 70 + + Mesh Resolution @@ -683,6 +917,9 @@ li.checked::marker { content: "\2612"; } 0 + + PointingHandCursor + Coarse @@ -713,6 +950,9 @@ li.checked::marker { content: "\2612"; } 0 + + PointingHandCursor + @@ -723,6 +963,9 @@ li.checked::marker { content: "\2612"; } 0 + + PointingHandCursor + Meters @@ -736,6 +979,9 @@ li.checked::marker { content: "\2612"; } 0 + + PointingHandCursor + Feet @@ -760,17 +1006,26 @@ li.checked::marker { content: "\2612"; } - + 0 0 + + + 0 + 0 + + Time Zone + + PointingHandCursor + Show All Zones @@ -784,10 +1039,16 @@ li.checked::marker { content: "\2612"; } 0 + + PointingHandCursor + + + PointingHandCursor + Display Time Zone Details @@ -814,6 +1075,9 @@ li.checked::marker { content: "\2612"; } 0 + + Qt::TextInteractionFlag::NoTextInteraction + @@ -827,16 +1091,16 @@ li.checked::marker { content: "\2612"; } 0 - 0 + 5 - 0 + 5 - 0 + 5 - 0 + 5 @@ -854,16 +1118,16 @@ li.checked::marker { content: "\2612"; } 0 - 0 + 5 - 0 + 5 - 0 + 5 - 0 + 5 @@ -873,6 +1137,9 @@ li.checked::marker { content: "\2612"; } 0 + + PointingHandCursor + Use Diurnal Wind @@ -915,16 +1182,16 @@ li.checked::marker { content: "\2612"; } 0 - 0 + 5 - 0 + 5 - 0 + 5 - 0 + 5 @@ -936,19 +1203,22 @@ li.checked::marker { content: "\2612"; } 0 - 0 + 5 - 0 + 5 - 0 + 5 - 0 + 5 + + PointingHandCursor + Use Stability @@ -986,197 +1256,609 @@ li.checked::marker { content: "\2612"; } - - + + - 0 + 6 - 0 + 5 - 0 + 5 - 0 + 5 - 0 + 5 - - - - 0 - 0 - + + + 6 - - + + QLayout::SizeConstraint::SetMinAndMaxSize - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - Domain Average Wind - - - - - - - 10 - - - - - - - - - - Input Wind Height - - - - 10 + + 0 + + + + + QLayout::SizeConstraint::SetDefaultConstraint + + + 0 + + + + + + 0 + 0 + - - 0 + + + 0 + 5 + - - 0 + + PointingHandCursor - - 0 + + Domain Average Wind - - 0 + + + + + + Qt::Orientation::Horizontal - - - - - 0 - 0 - + + + 40 + 20 + + + + + + + + + + 10 + + + + + + + + 0 + 100 + + + + Input Wind Height + + + + + + PointingHandCursor + + + + 20ft-US - - - 20ft-US - - - - - 10m-SI - - - - - Custom - - - + + + + 10m-SI + + + + + Custom + + + + + + + + PointingHandCursor + + + + + + + PointingHandCursor + + + Feet + + + + + + + PointingHandCursor + + + Meters + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 90 + 0 + + + + + 90 + 16777215 + + + + Table Units: + + + false + + + true + + + + + + + + 0 + 0 + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + PointingHandCursor + + + + mph + - - - - 0 - 0 - - - + + m/s + - - - - 0 - 0 - - - - Feet - - + + kph + - - - - 0 - 0 - - - - Meters - - + + kts + + + + + + + + 0 + 0 + + + + + 40 + 0 + + + + + 40 + 16777215 + + + + PointingHandCursor + + + Qt::LayoutDirection::LeftToRight + - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - + + °F + - - - + + + °C + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Clear Table + + + + + + + + + QLayout::SizeConstraint::SetMaximumSize + + + 0 + + + + + + 1 + 0 + + + + + 100 + 0 + + + + true + + + 50 + + + false + + + 20 + + + 80 + + + true + + + false + + + 20 + + + 20 + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Speed +(Select) + + + + 10 + + + + + + Direction +(degrees) + + + + + + + 10 + + + + + + Time +(hh:mm) + + + + 10 + + + + + + Date +(mm/dd/yyyy) + + + + 10 + + + + + + Cloud Cover +(%) + + + + 10 + + + + + + Air Temp +(Select) + + + + 10 + + + + + + + + + + + + + + + 0 + 0 + + + + + 1000 + 16777215 + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 0 + 0 + + + + + 0 + 20 + + + + + 16777215 + 20 + + + + PointingHandCursor + + + Point Initialization + + + + + + + + 1 + 0 + + + + Select Weather Stations + + + + 0 + + + 0 + + + 0 + + + 0 + - + 0 - - 5 - - - 0 - - + - + 0 0 - - Qt::LayoutDirection::RightToLeft + + + 200 + 16777215 + - - Clear + + PointingHandCursor + + + Download from DEM + + + + + Download by Station ID + + - + Qt::Orientation::Horizontal @@ -1188,669 +1870,472 @@ li.checked::marker { content: "\2612"; } + + + + + 250 + 16777215 + + + + PointingHandCursor + + + + Download Most Recent Data + + + + + Download Between Two Dates + + + + - - - - 0 - 0 - - - - - 600 - 16777215 - - - - - 8 - - - - QFrame::Shape::NoFrame - - - true - - - - - 0 - 0 - 517 - 647 - - - - - 0 - 0 - - - - - 8 - - - - - 0 - - - 0 - - - 5 - - - 0 - - - 0 + + + + + + 225 + 0 + - - - - 5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 0 - - - - - 100 - 0 - - - - - 16777215 - 25 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Cloud Cover (%)</p></body></html> - - - - - - - - - - - - - - - - - - - - - - - 0 - 0 - - - - - 16777215 - 25 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Date</p></body></html> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - F - - + + + 225 + 16777215 + + + + 1 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + - - C - + + + Buffer Around DEM + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + PointingHandCursor + + + + + + + PointingHandCursor + + + + mi + + + + + km + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 0 - + + + + Qt::Orientation::Vertical - + - 16777215 - 25 + 20 + 40 - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Direction</p></body></html> - - - - - - - - - - - - - - + - - - - - mph - - + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + - - m/s - + + + + 0 + 0 + + + + + 0 + 50 + + + + + 16777215 + 50 + + + + Input Station IDs + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + KMSO, PNTM8 + + + false + + + + + - - kph - + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + - - kts - + + + + 120 + 16777215 + + + + PointingHandCursor + + + Download Data + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + 225 + 0 + + + + + 225 + 16777215 + + + + 0 + + + + + + 0 + 0 + + + + + 0 + 150 + + + + + 10 + + + 0 + + + 0 + + + 0 + + + 0 + + + - + 0 0 - + - 16777215 - 25 + 0 + 70 - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Air Temp</p></body></html> + + Start Time + + + + + PointingHandCursor + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + 0 0 - + - 16777215 - 25 + 0 + 70 - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Speed</p></body></html> - - - - - - - - 0 - 0 - - 16777215 - 25 + 70 - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Sans Serif'; font-size:8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Time</p></body></html> + + PointingHandCursor + + + End Time + + + + + - - - - - + + - Qt::Orientation::Horizontal + Qt::Orientation::Vertical - 40 - 20 + 20 + 40 - - - + + + + + + + + + PointingHandCursor + + + Write Station KML + + + + + + + true + + + 10 + + + 300 + + + true + + + false + + + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 20 + + + + + 16777215 + 20 + + + + PointingHandCursor + + + Point Initialization + + + + + + + Download Weather Data + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + + PushButton + + + + + + + + + Downloaded Forecasts + @@ -1858,8 +2343,6 @@ li.checked::marker { content: "\2612"; } - - @@ -1884,6 +2367,9 @@ li.checked::marker { content: "\2612"; } 16777215 + + PointingHandCursor + Qt::LayoutDirection::LeftToRight @@ -1964,7 +2450,7 @@ li.checked::marker { content: "\2612"; } 0 0 1081 - 19 + 22 From b0a15318c7d604cea31820a2df64e71c3f6f3cdb Mon Sep 17 00:00:00 2001 From: aaharrell Date: Tue, 11 Mar 2025 17:40:46 -0600 Subject: [PATCH 022/435] Updates to UI --- src/gui/qt6/mainwindow.cpp | 55 ++++++++++++++ src/gui/qt6/mainwindow.h | 2 + src/gui/qt6/mainwindow.ui | 145 +++++++++++++++++++++++++++++++++---- 3 files changed, 189 insertions(+), 13 deletions(-) diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index 0e6f0e384..49d9b9f2a 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -1,12 +1,14 @@ #include "mainwindow.h" #include "./ui_mainwindow.h" #include +#include #include #include #include #include #include #include +#include #include #include #include @@ -177,6 +179,14 @@ MainWindow::MainWindow(QWidget *parent) windInputItem->child(2)->setData(0, Qt::UserRole, 11); // Weather Model (Page 11) connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::onTreeItemClicked); + + /* + * + * Downloaded Forecast explorer + * + */ + + populateForecastDownloads(); } MainWindow::~MainWindow() { delete ui; } @@ -193,3 +203,48 @@ void MainWindow::onTreeItemClicked(QTreeWidgetItem *item, int column) { ui->stackedInputPage->setCurrentIndex(pageIndex); } } + +// Recursive function to add files and directories correctly with Name and Date columns +void addFilesRecursively(QStandardItem *parentItem, const QString &dirPath) { + QDir dir(dirPath); + QFileInfoList entries = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); + for (const QFileInfo &entry : entries) { + QStandardItem *nameItem = new QStandardItem(entry.fileName()); + QStandardItem *dateItem = new QStandardItem(entry.lastModified().toString("yyyy-MM-dd HH:mm:ss")); + nameItem->setEditable(false); + dateItem->setEditable(false); + parentItem->appendRow({nameItem, dateItem}); + if (entry.isDir()) { + addFilesRecursively(nameItem, entry.absoluteFilePath()); + } + } +} + +// Function to populate forecastDownloads with .tif parent directories and all nested contents +void MainWindow::populateForecastDownloads() { + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + QDir downloadsDir(downloadsPath); + + if (!downloadsDir.exists()) return; + + QStandardItemModel *model = new QStandardItemModel(this); + model->setHorizontalHeaderLabels({"Name", "Date Modified"}); + + QDirIterator it(downloadsPath, QDir::Dirs | QDir::NoDotAndDotDot); + while (it.hasNext()) { + QString dirPath = it.next(); + if (dirPath.endsWith(".tif", Qt::CaseInsensitive)) { + QStandardItem *parentItem = new QStandardItem(QFileInfo(dirPath).fileName()); + parentItem->setEditable(false); + addFilesRecursively(parentItem, dirPath); + model->appendRow(parentItem); + } + } + + ui->forecastDownloads->setModel(model); + ui->forecastDownloads->header()->setSectionResizeMode(QHeaderView::Stretch); + + // Disable editing and enable double-click expansion + ui->forecastDownloads->setEditTriggers(QAbstractItemView::NoEditTriggers); + ui->forecastDownloads->setExpandsOnDoubleClick(true); +} diff --git a/src/gui/qt6/mainwindow.h b/src/gui/qt6/mainwindow.h index 1adaaa2e1..3b779177d 100644 --- a/src/gui/qt6/mainwindow.h +++ b/src/gui/qt6/mainwindow.h @@ -16,6 +16,8 @@ class MainWindow : public QMainWindow { Q_OBJECT public: + void populateForecastDownloads(); + void toggleExpandCollapse(const QModelIndex &index); MainWindow(QWidget *parent = nullptr); ~MainWindow(); diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui index 0da80dcc2..3a194e3cf 100644 --- a/src/gui/qt6/mainwindow.ui +++ b/src/gui/qt6/mainwindow.ui @@ -255,7 +255,7 @@ 0 - QLayout::SizeConstraint::SetDefaultConstraint + QLayout::SizeConstraint::SetMinimumSize 5 @@ -967,7 +967,10 @@ li.checked::marker { content: "\2612"; } PointingHandCursor - Meters + Feet + + + true @@ -983,7 +986,7 @@ li.checked::marker { content: "\2612"; } PointingHandCursor - Feet + Meters @@ -1385,6 +1388,9 @@ li.checked::marker { content: "\2612"; } Feet + + true + @@ -1829,7 +1835,7 @@ li.checked::marker { content: "\2612"; } 0 - + 0 @@ -1871,7 +1877,7 @@ li.checked::marker { content: "\2612"; } - + 250 @@ -1911,11 +1917,17 @@ li.checked::marker { content: "\2612"; } 16777215 + + 0 + 1 + + 0 + 0 @@ -1990,10 +2002,26 @@ li.checked::marker { content: "\2612"; } + + + + + 120 + 16777215 + + + + Download Data + + + + + 0 + 0 @@ -2008,6 +2036,9 @@ li.checked::marker { content: "\2612"; } + + 0 + @@ -2032,6 +2063,9 @@ li.checked::marker { content: "\2612"; } Input Station IDs + + 0 + 0 @@ -2120,7 +2154,7 @@ li.checked::marker { content: "\2612"; } - 0 + 1 @@ -2175,6 +2209,9 @@ li.checked::marker { content: "\2612"; } PointingHandCursor + + true + @@ -2208,7 +2245,11 @@ li.checked::marker { content: "\2612"; } - + + + true + + @@ -2268,6 +2309,18 @@ li.checked::marker { content: "\2612"; } + + 5 + + + 5 + + + 5 + + + 5 + @@ -2301,7 +2354,10 @@ li.checked::marker { content: "\2612"; } Download Weather Data - + + false + + 0 @@ -2315,27 +2371,90 @@ li.checked::marker { content: "\2612"; } 0 - + - + + + PointingHandCursor + + - + + + PointingHandCursor + + + QAbstractSpinBox::ButtonSymbols::UpDownArrows + + + + + + hour(s) + + + 1 + + + + PointingHandCursor + - PushButton + Download Data - + Downloaded Forecasts + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + true + + + + + + + PointingHandCursor + + + Select Specific Time Steps + + + true + + + false + + + + From 6435c26cf2c5b0336a7de920e9fa1e5325afc13c Mon Sep 17 00:00:00 2001 From: aaharrell Date: Wed, 12 Mar 2025 19:33:20 -0600 Subject: [PATCH 023/435] Updated ui variable naming --- src/gui/qt6/mainwindow.ui | 42 +++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui index 3a194e3cf..065577373 100644 --- a/src/gui/qt6/mainwindow.ui +++ b/src/gui/qt6/mainwindow.ui @@ -462,7 +462,7 @@ QFrame::Shadow::Sunken - 10 + 8 @@ -848,7 +848,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -910,7 +910,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -943,7 +943,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -956,7 +956,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -975,7 +975,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -1025,7 +1025,7 @@ li.checked::marker { content: "\2612"; } - + PointingHandCursor @@ -1035,7 +1035,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -1048,7 +1048,7 @@ li.checked::marker { content: "\2612"; } - + PointingHandCursor @@ -1071,7 +1071,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -1288,7 +1288,7 @@ li.checked::marker { content: "\2612"; } 0 - + QLayout::SizeConstraint::SetDefaultConstraint @@ -1961,14 +1961,14 @@ li.checked::marker { content: "\2612"; } 0 - + PointingHandCursor - + PointingHandCursor @@ -2003,7 +2003,7 @@ li.checked::marker { content: "\2612"; } - + 120 @@ -2079,7 +2079,7 @@ li.checked::marker { content: "\2612"; } 0 - + KMSO, PNTM8 @@ -2105,7 +2105,7 @@ li.checked::marker { content: "\2612"; } - + 120 @@ -2274,7 +2274,7 @@ li.checked::marker { content: "\2612"; } - + PointingHandCursor @@ -2373,14 +2373,14 @@ li.checked::marker { content: "\2612"; } - + PointingHandCursor - + PointingHandCursor @@ -2399,7 +2399,7 @@ li.checked::marker { content: "\2612"; } - + PointingHandCursor @@ -2439,7 +2439,7 @@ li.checked::marker { content: "\2612"; } - + PointingHandCursor From c0091da145fd4c37928c9a591afdcc549f12aa98 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 14 Mar 2025 09:21:01 -0600 Subject: [PATCH 024/435] Adds ninja as a dependency for the cmake GUI, allowing the C API to work --- src/gui/qt6/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt index 5b08e16b0..80db50baa 100644 --- a/src/gui/qt6/CMakeLists.txt +++ b/src/gui/qt6/CMakeLists.txt @@ -43,6 +43,8 @@ else() endif() endif() +add_dependencies(qt6_application ninja) + target_link_libraries(qt6_application PRIVATE Qt${QT_VERSION_MAJOR}::Widgets PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets) # Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. From 9d3f4c139e3e9d2687172b64c85faba8ff5b7747 Mon Sep 17 00:00:00 2001 From: vboxuser Date: Tue, 25 Mar 2025 11:07:49 -0600 Subject: [PATCH 025/435] Updates to main and library links --- src/gui/qt6/CMakeLists.txt | 2 +- src/gui/qt6/main.cpp | 163 +++++++++++++++++++++++++++++++++++++ 2 files changed, 164 insertions(+), 1 deletion(-) diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt index 80db50baa..e2052b2a0 100644 --- a/src/gui/qt6/CMakeLists.txt +++ b/src/gui/qt6/CMakeLists.txt @@ -45,7 +45,7 @@ endif() add_dependencies(qt6_application ninja) -target_link_libraries(qt6_application PRIVATE Qt${QT_VERSION_MAJOR}::Widgets PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets) +target_link_libraries(qt6_application PRIVATE Qt${QT_VERSION_MAJOR}::Widgets PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets PRIVATE ninja) # Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. # If you are developing for iOS or macOS you should consider setting an diff --git a/src/gui/qt6/main.cpp b/src/gui/qt6/main.cpp index 58a0a6349..cbe88af39 100644 --- a/src/gui/qt6/main.cpp +++ b/src/gui/qt6/main.cpp @@ -1,10 +1,173 @@ #include "mainwindow.h" +#include "../../ninja/windninja.h" #include int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; + + // From tutorial: step 1 + NinjaArmyH* ninjaArmy = NULL; + const char * comType = "cli"; //communication type is always set to "cli" + const int nCPUs = 1; + char ** papszOptions = NULL; + NinjaErr err = 0; + + err = NinjaInit(papszOptions); //must be called for any simulation + if(err != NINJA_SUCCESS) + { + printf("NinjaInit: err = %d\n", err); + } + + // From tutorial: step 2 + /* inputs that apply to the whole army (must be the same for all ninjas) */ + const char * demFile = "big_butte_small.tif"; + const char * initializationMethod = "domain_average"; + const char * meshChoice = "coarse"; + const char * vegetation = "grass"; + const int nLayers = 20; //layers in the mesh + const int diurnalFlag = 0; //diurnal slope wind parameterization not used + const double height = 5.0; + const char * heightUnits = "m"; + bool momentumFlag = 0; //we're using the conservation of mass solver + unsigned int numNinjas = 2; //two ninjas in the ninjaArmy + + /* inputs that can vary among ninjas in an army */ + const double speed[2] = {5.5, 5.5}; + const char * speedUnits = "mps"; + const double direction[2] = {220, 300}; + + // From tutorial: step 3 /* create the army */ + ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speed, speedUnits, direction, papszOptions); + + if( NULL == ninjaArmy ) + { + printf("NinjaCreateArmy: ninjaArmy = NULL\n"); + + // From tutorial: step 4 + /* set up the runs */ + for(unsigned int i=0; i Date: Tue, 25 Mar 2025 14:41:08 -0600 Subject: [PATCH 026/435] changed project directory to properly point to qt6 folder --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 38ba03448..f3e18a591 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -521,7 +521,7 @@ if(BUILD_TYPE MATCHES "debug") if(PACKAGE_DEBUG) message(STATUS "Copying boost date time file into build/src/gui and build/src/cli") endif(PACKAGE_DEBUG) - file(COPY "${PROJECT_SOURCE_DIR}/data/date_time_zonespec.csv" DESTINATION "${PROJECT_BINARY_DIR}/src/gui") + file(COPY "${PROJECT_SOURCE_DIR}/data/date_time_zonespec.csv" DESTINATION "${PROJECT_BINARY_DIR}/src/gui/qt6") file(COPY "${PROJECT_SOURCE_DIR}/data/date_time_zonespec.csv" DESTINATION "${PROJECT_BINARY_DIR}/src/cli") endif(BUILD_TYPE MATCHES "debug") From 2b4b7335da2c3a30e23e050f17c41fcfd5d6301c Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 25 Mar 2025 14:52:15 -0600 Subject: [PATCH 027/435] Added ninja to target link libraries --- src/gui/qt6/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt index 80db50baa..e2052b2a0 100644 --- a/src/gui/qt6/CMakeLists.txt +++ b/src/gui/qt6/CMakeLists.txt @@ -45,7 +45,7 @@ endif() add_dependencies(qt6_application ninja) -target_link_libraries(qt6_application PRIVATE Qt${QT_VERSION_MAJOR}::Widgets PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets) +target_link_libraries(qt6_application PRIVATE Qt${QT_VERSION_MAJOR}::Widgets PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets PRIVATE ninja) # Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. # If you are developing for iOS or macOS you should consider setting an From 3199df961268f13acd5f29ac13d7b6e59fc09b3e Mon Sep 17 00:00:00 2001 From: vboxuser Date: Wed, 2 Apr 2025 06:40:26 -0600 Subject: [PATCH 028/435] Setting up model data --- src/gui/qt6/CMakeLists.txt | 1 + src/gui/qt6/main.cpp | 178 +++++++++++++++++++++++++++++++- src/gui/qt6/mainwindow.cpp | 2 +- src/gui/qt6/modeldata.cpp | 201 +++++++++++++++++++++++++++++++++++++ src/gui/qt6/modeldata.h | 9 ++ 5 files changed, 389 insertions(+), 2 deletions(-) create mode 100644 src/gui/qt6/modeldata.cpp create mode 100644 src/gui/qt6/modeldata.h diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt index e2052b2a0..78e1806a8 100644 --- a/src/gui/qt6/CMakeLists.txt +++ b/src/gui/qt6/CMakeLists.txt @@ -24,6 +24,7 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) qt_add_executable(qt6_application MANUAL_FINALIZATION ${PROJECT_SOURCES} + modeldata.h modeldata.cpp ) # Define target properties for Android with Qt 6 as: # set_property(TARGET qt6_application APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR diff --git a/src/gui/qt6/main.cpp b/src/gui/qt6/main.cpp index 58a0a6349..ee21445bd 100644 --- a/src/gui/qt6/main.cpp +++ b/src/gui/qt6/main.cpp @@ -1,10 +1,186 @@ #include "mainwindow.h" - +#include "../../ninja/windninja.h" #include int main(int argc, char *argv[]) { + + + /* + * Setting up the simulation + */ + NinjaArmyH* ninjaArmy = NULL; + const char * comType = "cli"; //communication type is always set to "cli" + const int nCPUs = 1; + char ** papszOptions = NULL; + NinjaErr err = 0; + err = NinjaInit(papszOptions); //initialize global singletons and environments (GDAL_DATA, etc.) + if(err != NINJA_SUCCESS) + { + printf("NinjaInit: err = %d\n", err); + } + + /* + * Set up domain average run + */ + + const char * demFile = "/home/vboxuser/Documents/windninja/data/big_butte.tif"; + double outputResolution = 100; + const char * initializationMethod = "domain_average"; + const char * meshChoice = "coarse"; + const char * vegetation = "grass"; + const int nLayers = 20; //layers in the mesh + const int diurnalFlag = 0; //diurnal slope wind parameterization not used + const double height = 10.0; + const char * heightUnits = "m"; + bool momentumFlag = 0; //we're using the conservation of mass solver + unsigned int numNinjas = 2; //two ninjas in the ninjaArmy + + /* inputs that can vary among ninjas in an army */ + const double speedList[2] = {5.5, 5.5}; + const char * speedUnits = "mps"; + const double directionList[2] = {220, 300}; + + /* + * Create the army + */ + ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speedList, speedUnits, directionList, papszOptions); + if( NULL == ninjaArmy ) + { + printf("NinjaCreateArmy: ninjaArmy = NULL\n"); + } + + err = NinjaInit(papszOptions); //must be called for any simulation + if(err != NINJA_SUCCESS) + { + printf("NinjaInit: err = %d\n", err); + } + + /* + * Prepare the army + */ + for(unsigned int i=0; isettings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true); diff --git a/src/gui/qt6/modeldata.cpp b/src/gui/qt6/modeldata.cpp new file mode 100644 index 000000000..c81d70f15 --- /dev/null +++ b/src/gui/qt6/modeldata.cpp @@ -0,0 +1,201 @@ +#include "modeldata.h" + +class BaseInput{ + private: + char* demFile; + double outputResolution; + string initializationMethod; + string meshChoice; + string vegetation; + int nLayers; + int diurnalFlag; + double height; + bool momentumFlag; + int numNinjas; + + public: + char* getDemFile(){ + return demFile; + } + + double getOutputResolution(){ + return outputResolution; + } + + string getInitializationMethod(){ + return intializationMethod; + } + + string getMeshChoice(){ + return meshChoice; + } + + string getVegetation(){ + return vegetation; + } + + int getNLayers(){ + return nLayers; + } + + int getdiurnalFlag(){ + return diurnalFlag; + } + + double getHeight(){ + return height; + } + + bool getMomentumFlag(){ + return momentumFlag; + } + + int getNumNinjas(){ + return numNinjas; + } + +}; + +class DomainAverageWind : public BaseInput{ + private: + double[] speedList; + char* speedUnits; + double[] directionList; + + public: + DomainAverageWind(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, int nLayers, int diurnalFlag, double height, bool momentumFlag, int numNinjas, double[] speedList, char* speedUnits, double[] directionList){ + //potential for data validation thinking controller handled. + this->demFile = demFile; + this->outputResolution = outputResolution; + this->initializationMethod = initializationMethod; + this->meshChoice = meshChoice; + this->vegetation = vegetation; + this->nLayers = nLayers; + this->diurnalFlag = diurnalFlag; + this->height = height; + this->momentumFlag = momentumFlag; + this->numNinjas = numNinjas; + + this->speedList = speedList; + this->speedUnits = speedUnits; + this->directionList = directionList; + } + + double[] getSpeedList(){ + return speedList; + } + + char* getSpeedUnits(){ + return speedUnits; + } + + double[] getDirectionList(){ + return directionList; + } +}; + +class PointInitialization : public BaseInput{ + private: + int year; + int month; + int day; + int hour; + int minute; + char* station_path; + char* elevation_file; + char* osTimeZone; + bool momentumFlag; + + public: + PointInitialization(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, int nLayers, int diurnalFlag, double height, bool momentumFlag, int numNinjas){ + //potential for data validation thinking controller handled. + this->demFile = demFile; + this->outputResolution = outputResolution; + this->initializationMethod = initializationMethod; + this->meshChoice = meshChoice; + this->vegetation = vegetation; + this->nLayers = nLayers; + this->diurnalFlag = diurnalFlag; + this->height = height; + this->momentumFlag = momentumFlag; + this->numNinjas = numNinjas; + + this->year = year; + this->month = month; + this->day = day; + this->hour = hour; + this->minute = minute; + this->station_path = station_path; + this->elevation_file = elevation_file; + this->osTimeZone = osTimeZone; + this->momentumFlag = momentumFlag; + } + + int getYear(){ + return year; + } + + int getMonth(){ + return month; + } + + int getDay(){ + return day; + } + + int getHour(){ + return hour; + } + + int getMinute(){ + return minute; + } + + char* getStationPath(){ + return station_path; + } + + char* getElevationFile(){ + return elevation_file; + } + + char* getOSTimeZone(){ + return osTimeZone; + } + + bool getMomentumFlag(){ + return momentumFlag; + } +}; + +class WeatherModel : public BaseInput{ + private: + char* forecast; + char* osTimeZone; + + public: + WeatherModel(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, int nLayers, int diurnalFlag, double height, bool momentumFlag, int numNinjas){ + //potential for data validation thinking controller handled. + this->demFile = demFile; + this->outputResolution = outputResolution; + this->initializationMethod = initializationMethod; + this->meshChoice = meshChoice; + this->vegetation = vegetation; + this->nLayers = nLayers; + this->diurnalFlag = diurnalFlag; + this->height = height; + this->momentumFlag = momentumFlag; + this->numNinjas = numNinjas; + } + + char* getForecast(){ + return forecast; + } + + char* getOSTimeZone(){ + return osTimeZone; + } + +}; + +modeldata::modeldata() {} diff --git a/src/gui/qt6/modeldata.h b/src/gui/qt6/modeldata.h new file mode 100644 index 000000000..7659708dd --- /dev/null +++ b/src/gui/qt6/modeldata.h @@ -0,0 +1,9 @@ +#ifndef MODELDATA_H +#define MODELDATA_H + +class modeldata { +public: + modeldata(); +}; + +#endif // MODELDATA_H From 93f1b07b05e969d2f19117dffc4a1a9e5a5a5f4e Mon Sep 17 00:00:00 2001 From: vboxuser Date: Fri, 4 Apr 2025 14:42:50 -0600 Subject: [PATCH 029/435] Model data for qt design --- src/gui/qt6/CMakeLists.txt | 2 +- src/gui/qt6/main.cpp | 12 +++ src/gui/qt6/modeldata.cpp | 201 ------------------------------------- src/gui/qt6/modeldata.h | 108 +++++++++++++++++++- 4 files changed, 120 insertions(+), 203 deletions(-) delete mode 100644 src/gui/qt6/modeldata.cpp diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt index 78e1806a8..038b638b8 100644 --- a/src/gui/qt6/CMakeLists.txt +++ b/src/gui/qt6/CMakeLists.txt @@ -24,7 +24,7 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) qt_add_executable(qt6_application MANUAL_FINALIZATION ${PROJECT_SOURCES} - modeldata.h modeldata.cpp + modeldata.h ) # Define target properties for Android with Qt 6 as: # set_property(TARGET qt6_application APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR diff --git a/src/gui/qt6/main.cpp b/src/gui/qt6/main.cpp index ee21445bd..16965ef8a 100644 --- a/src/gui/qt6/main.cpp +++ b/src/gui/qt6/main.cpp @@ -1,9 +1,18 @@ #include "mainwindow.h" #include "../../ninja/windninja.h" #include +#include "modeldata.h" + int main(int argc, char *argv[]) { + std::vector windSpeeds = {5.0, 10.0, 15.0}; + std::vector windDirections = {0.0, 90.0, 180.0}; + char* windUnits = "m/s"; + + DomainAverageWind windModel("demFilePath", 0.5, "method1", "mesh1", "vegetationType", 3, 1, 100.0, true, 3, windSpeeds, windUnits, windDirections); + + /* * Setting up the simulation @@ -40,6 +49,9 @@ int main(int argc, char *argv[]) { const char * speedUnits = "mps"; const double directionList[2] = {220, 300}; + + + /* * Create the army */ diff --git a/src/gui/qt6/modeldata.cpp b/src/gui/qt6/modeldata.cpp deleted file mode 100644 index c81d70f15..000000000 --- a/src/gui/qt6/modeldata.cpp +++ /dev/null @@ -1,201 +0,0 @@ -#include "modeldata.h" - -class BaseInput{ - private: - char* demFile; - double outputResolution; - string initializationMethod; - string meshChoice; - string vegetation; - int nLayers; - int diurnalFlag; - double height; - bool momentumFlag; - int numNinjas; - - public: - char* getDemFile(){ - return demFile; - } - - double getOutputResolution(){ - return outputResolution; - } - - string getInitializationMethod(){ - return intializationMethod; - } - - string getMeshChoice(){ - return meshChoice; - } - - string getVegetation(){ - return vegetation; - } - - int getNLayers(){ - return nLayers; - } - - int getdiurnalFlag(){ - return diurnalFlag; - } - - double getHeight(){ - return height; - } - - bool getMomentumFlag(){ - return momentumFlag; - } - - int getNumNinjas(){ - return numNinjas; - } - -}; - -class DomainAverageWind : public BaseInput{ - private: - double[] speedList; - char* speedUnits; - double[] directionList; - - public: - DomainAverageWind(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, int nLayers, int diurnalFlag, double height, bool momentumFlag, int numNinjas, double[] speedList, char* speedUnits, double[] directionList){ - //potential for data validation thinking controller handled. - this->demFile = demFile; - this->outputResolution = outputResolution; - this->initializationMethod = initializationMethod; - this->meshChoice = meshChoice; - this->vegetation = vegetation; - this->nLayers = nLayers; - this->diurnalFlag = diurnalFlag; - this->height = height; - this->momentumFlag = momentumFlag; - this->numNinjas = numNinjas; - - this->speedList = speedList; - this->speedUnits = speedUnits; - this->directionList = directionList; - } - - double[] getSpeedList(){ - return speedList; - } - - char* getSpeedUnits(){ - return speedUnits; - } - - double[] getDirectionList(){ - return directionList; - } -}; - -class PointInitialization : public BaseInput{ - private: - int year; - int month; - int day; - int hour; - int minute; - char* station_path; - char* elevation_file; - char* osTimeZone; - bool momentumFlag; - - public: - PointInitialization(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, int nLayers, int diurnalFlag, double height, bool momentumFlag, int numNinjas){ - //potential for data validation thinking controller handled. - this->demFile = demFile; - this->outputResolution = outputResolution; - this->initializationMethod = initializationMethod; - this->meshChoice = meshChoice; - this->vegetation = vegetation; - this->nLayers = nLayers; - this->diurnalFlag = diurnalFlag; - this->height = height; - this->momentumFlag = momentumFlag; - this->numNinjas = numNinjas; - - this->year = year; - this->month = month; - this->day = day; - this->hour = hour; - this->minute = minute; - this->station_path = station_path; - this->elevation_file = elevation_file; - this->osTimeZone = osTimeZone; - this->momentumFlag = momentumFlag; - } - - int getYear(){ - return year; - } - - int getMonth(){ - return month; - } - - int getDay(){ - return day; - } - - int getHour(){ - return hour; - } - - int getMinute(){ - return minute; - } - - char* getStationPath(){ - return station_path; - } - - char* getElevationFile(){ - return elevation_file; - } - - char* getOSTimeZone(){ - return osTimeZone; - } - - bool getMomentumFlag(){ - return momentumFlag; - } -}; - -class WeatherModel : public BaseInput{ - private: - char* forecast; - char* osTimeZone; - - public: - WeatherModel(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, int nLayers, int diurnalFlag, double height, bool momentumFlag, int numNinjas){ - //potential for data validation thinking controller handled. - this->demFile = demFile; - this->outputResolution = outputResolution; - this->initializationMethod = initializationMethod; - this->meshChoice = meshChoice; - this->vegetation = vegetation; - this->nLayers = nLayers; - this->diurnalFlag = diurnalFlag; - this->height = height; - this->momentumFlag = momentumFlag; - this->numNinjas = numNinjas; - } - - char* getForecast(){ - return forecast; - } - - char* getOSTimeZone(){ - return osTimeZone; - } - -}; - -modeldata::modeldata() {} diff --git a/src/gui/qt6/modeldata.h b/src/gui/qt6/modeldata.h index 7659708dd..c8f56c54f 100644 --- a/src/gui/qt6/modeldata.h +++ b/src/gui/qt6/modeldata.h @@ -1,9 +1,115 @@ #ifndef MODELDATA_H #define MODELDATA_H +#include +#include + +using namespace std; + +class BaseInput { +private: + char* demFile; + double outputResolution; + string initializationMethod; + string meshChoice; + string vegetation; + int nLayers; + int diurnalFlag; + double height; + bool momentumFlag; + int numNinjas; + +public: + // Constructor + BaseInput(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, + int nLayers, int diurnalFlag, double height, bool momentumFlag, int numNinjas) + : demFile(demFile), outputResolution(outputResolution), initializationMethod(initializationMethod), meshChoice(meshChoice), + vegetation(vegetation), nLayers(nLayers), diurnalFlag(diurnalFlag), height(height), momentumFlag(momentumFlag), numNinjas(numNinjas) {} + + // Getter methods + char* getDemFile() { return demFile; } + double getOutputResolution() { return outputResolution; } + string getInitializationMethod() { return initializationMethod; } + string getMeshChoice() { return meshChoice; } + string getVegetation() { return vegetation; } + int getNLayers() { return nLayers; } + int getDiurnalFlag() { return diurnalFlag; } + double getHeight() { return height; } + bool getMomentumFlag() { return momentumFlag; } + int getNumNinjas() { return numNinjas; } +}; + +class DomainAverageWind : public BaseInput { +private: + vector speedList; + char* speedUnits; + vector directionList; + +public: + // Constructor + DomainAverageWind(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, + int nLayers, int diurnalFlag, double height, bool momentumFlag, int numNinjas, + vector speedList, char* speedUnits, vector directionList) + : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, momentumFlag, numNinjas), + speedList(speedList), speedUnits(speedUnits), directionList(directionList) {} + + // Getter methods + vector getSpeedList() { return speedList; } + char* getSpeedUnits() { return speedUnits; } + vector getDirectionList() { return directionList; } +}; + +class PointInitialization : public BaseInput { +private: + int year; + int month; + int day; + int hour; + int minute; + char* station_path; + char* elevation_file; + char* osTimeZone; + +public: + // Constructor + PointInitialization(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, + int nLayers, int diurnalFlag, double height, bool momentumFlag, int numNinjas, + int year, int month, int day, int hour, int minute, char* station_path, char* elevation_file, char* osTimeZone) + : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, momentumFlag, numNinjas), + year(year), month(month), day(day), hour(hour), minute(minute), station_path(station_path), elevation_file(elevation_file), osTimeZone(osTimeZone) {} + + // Getter methods + int getYear() { return year; } + int getMonth() { return month; } + int getDay() { return day; } + int getHour() { return hour; } + int getMinute() { return minute; } + char* getStationPath() { return station_path; } + char* getElevationFile() { return elevation_file; } + char* getOSTimeZone() { return osTimeZone; } +}; + +class WeatherModel : public BaseInput { +private: + char* forecast; + char* osTimeZone; + +public: + // Constructor + WeatherModel(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, + int nLayers, int diurnalFlag, double height, bool momentumFlag, int numNinjas, + char* forecast, char* osTimeZone) + : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, momentumFlag, numNinjas), + forecast(forecast), osTimeZone(osTimeZone) {} + + // Getter methods + char* getForecast() { return forecast; } + char* getOSTimeZone() { return osTimeZone; } +}; + class modeldata { public: - modeldata(); + modeldata() {} }; #endif // MODELDATA_H From 2f438865018ed93fefde4464df69ac0a434736d5 Mon Sep 17 00:00:00 2001 From: Codymm03 Date: Mon, 14 Apr 2025 21:48:05 -0600 Subject: [PATCH 030/435] Setup Provider and tested domain average run. --- src/gui/qt6/CMakeLists.txt | 4 +- src/gui/qt6/main.cpp | 191 ++----------------------------------- src/gui/qt6/modeldata.h | 184 ++++++++++++++++++----------------- 3 files changed, 107 insertions(+), 272 deletions(-) mode change 100644 => 100755 src/gui/qt6/CMakeLists.txt mode change 100644 => 100755 src/gui/qt6/main.cpp mode change 100644 => 100755 src/gui/qt6/modeldata.h diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt old mode 100644 new mode 100755 index 038b638b8..e3ee411f2 --- a/src/gui/qt6/CMakeLists.txt +++ b/src/gui/qt6/CMakeLists.txt @@ -24,7 +24,9 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) qt_add_executable(qt6_application MANUAL_FINALIZATION ${PROJECT_SOURCES} - modeldata.h + provider.cpp + modeldata.h provider.h + ) # Define target properties for Android with Qt 6 as: # set_property(TARGET qt6_application APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR diff --git a/src/gui/qt6/main.cpp b/src/gui/qt6/main.cpp old mode 100644 new mode 100755 index 16965ef8a..6972aadbc --- a/src/gui/qt6/main.cpp +++ b/src/gui/qt6/main.cpp @@ -2,197 +2,24 @@ #include "../../ninja/windninja.h" #include #include "modeldata.h" +#include "provider.h" +#include "vector" +#include "iostream" int main(int argc, char *argv[]) { std::vector windSpeeds = {5.0, 10.0, 15.0}; std::vector windDirections = {0.0, 90.0, 180.0}; - char* windUnits = "m/s"; - DomainAverageWind windModel("demFilePath", 0.5, "method1", "mesh1", "vegetationType", 3, 1, 100.0, true, 3, windSpeeds, windUnits, windDirections); + DomainAverageWind windModel("/home/vboxuser/Documents/windninja/data/big_butte.tif", 100, "domain_average", "coarse", "grass", 20, 0, 10.0, "m" , 0, 2, windSpeeds, "mps", windDirections); + NinjaSim sim(windModel); - - /* - * Setting up the simulation - */ - NinjaArmyH* ninjaArmy = NULL; - const char * comType = "cli"; //communication type is always set to "cli" - const int nCPUs = 1; - char ** papszOptions = NULL; - NinjaErr err = 0; - err = NinjaInit(papszOptions); //initialize global singletons and environments (GDAL_DATA, etc.) - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - } - - /* - * Set up domain average run - */ - - const char * demFile = "/home/vboxuser/Documents/windninja/data/big_butte.tif"; - double outputResolution = 100; - const char * initializationMethod = "domain_average"; - const char * meshChoice = "coarse"; - const char * vegetation = "grass"; - const int nLayers = 20; //layers in the mesh - const int diurnalFlag = 0; //diurnal slope wind parameterization not used - const double height = 10.0; - const char * heightUnits = "m"; - bool momentumFlag = 0; //we're using the conservation of mass solver - unsigned int numNinjas = 2; //two ninjas in the ninjaArmy - - /* inputs that can vary among ninjas in an army */ - const double speedList[2] = {5.5, 5.5}; - const char * speedUnits = "mps"; - const double directionList[2] = {220, 300}; - - - - - /* - * Create the army - */ - ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speedList, speedUnits, directionList, papszOptions); - if( NULL == ninjaArmy ) - { - printf("NinjaCreateArmy: ninjaArmy = NULL\n"); - } - - err = NinjaInit(papszOptions); //must be called for any simulation - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - } - - /* - * Prepare the army - */ - for(unsigned int i=0; i +#include #include using namespace std; class BaseInput { -private: - char* demFile; - double outputResolution; - string initializationMethod; - string meshChoice; - string vegetation; - int nLayers; - int diurnalFlag; - double height; - bool momentumFlag; - int numNinjas; - -public: - // Constructor - BaseInput(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, - int nLayers, int diurnalFlag, double height, bool momentumFlag, int numNinjas) + private: + string demFile; + double outputResolution; + string initializationMethod; + string meshChoice; + string vegetation; + int nLayers; + int diurnalFlag; + double height; + string heightUnits; + bool momentumFlag; + int numNinjas; + + public: + virtual ~BaseInput() {} + + // Constructor + BaseInput(string demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, + int nLayers, int diurnalFlag, double height, string heightUnits, bool momentumFlag, int numNinjas) : demFile(demFile), outputResolution(outputResolution), initializationMethod(initializationMethod), meshChoice(meshChoice), - vegetation(vegetation), nLayers(nLayers), diurnalFlag(diurnalFlag), height(height), momentumFlag(momentumFlag), numNinjas(numNinjas) {} - - // Getter methods - char* getDemFile() { return demFile; } - double getOutputResolution() { return outputResolution; } - string getInitializationMethod() { return initializationMethod; } - string getMeshChoice() { return meshChoice; } - string getVegetation() { return vegetation; } - int getNLayers() { return nLayers; } - int getDiurnalFlag() { return diurnalFlag; } - double getHeight() { return height; } - bool getMomentumFlag() { return momentumFlag; } - int getNumNinjas() { return numNinjas; } + vegetation(vegetation), nLayers(nLayers), diurnalFlag(diurnalFlag), height(height), heightUnits(heightUnits), momentumFlag(momentumFlag), numNinjas(numNinjas) {} + + // Getter methods + const string& getDemFile() const { return demFile; } + double getOutputResolution() { return outputResolution; } + const string& getInitializationMethod() const { return initializationMethod; } + const string& getMeshChoice() const { return meshChoice; } + const string& getVegetation() const { return vegetation; } + int getNLayers() { return nLayers; } + int getDiurnalFlag() { return diurnalFlag; } + double getHeight() { return height; } + const string& getHeightUnits() const { return heightUnits; } + bool getMomentumFlag() { return momentumFlag; } + int getNumNinjas() { return numNinjas; } }; class DomainAverageWind : public BaseInput { -private: - vector speedList; - char* speedUnits; - vector directionList; - -public: - // Constructor - DomainAverageWind(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, - int nLayers, int diurnalFlag, double height, bool momentumFlag, int numNinjas, - vector speedList, char* speedUnits, vector directionList) - : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, momentumFlag, numNinjas), - speedList(speedList), speedUnits(speedUnits), directionList(directionList) {} - - // Getter methods - vector getSpeedList() { return speedList; } - char* getSpeedUnits() { return speedUnits; } - vector getDirectionList() { return directionList; } + private: + vector speedList; + string speedUnits; + vector directionList; + + public: + // Constructor + DomainAverageWind(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, + int nLayers, int diurnalFlag, double height, string heightUnits, bool momentumFlag, int numNinjas, + vector speedList, string speedUnits, vector directionList) + : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, heightUnits, momentumFlag, numNinjas), + speedList(speedList), speedUnits(speedUnits), directionList(directionList) {} + + // Getter methods + vector getSpeedList() { return speedList; } + const string& getSpeedUnits() const { return speedUnits; } + vector getDirectionList() { return directionList; } }; class PointInitialization : public BaseInput { -private: - int year; - int month; - int day; - int hour; - int minute; - char* station_path; - char* elevation_file; - char* osTimeZone; - -public: - // Constructor - PointInitialization(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, - int nLayers, int diurnalFlag, double height, bool momentumFlag, int numNinjas, - int year, int month, int day, int hour, int minute, char* station_path, char* elevation_file, char* osTimeZone) - : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, momentumFlag, numNinjas), - year(year), month(month), day(day), hour(hour), minute(minute), station_path(station_path), elevation_file(elevation_file), osTimeZone(osTimeZone) {} - - // Getter methods - int getYear() { return year; } - int getMonth() { return month; } - int getDay() { return day; } - int getHour() { return hour; } - int getMinute() { return minute; } - char* getStationPath() { return station_path; } - char* getElevationFile() { return elevation_file; } - char* getOSTimeZone() { return osTimeZone; } + private: + int year; + int month; + int day; + int hour; + int minute; + char* station_path; + char* elevation_file; + char* osTimeZone; + bool matchPointFlag; + + public: + // Constructor + PointInitialization(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, + int nLayers, int diurnalFlag, double height, string heightUnits, bool momentumFlag, int numNinjas, + int year, int month, int day, int hour, int minute, char* station_path, char* elevation_file, char* osTimeZone, bool matchPointFlag) + : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, heightUnits, momentumFlag, numNinjas), + year(year), month(month), day(day), hour(hour), minute(minute), station_path(station_path), elevation_file(elevation_file), osTimeZone(osTimeZone), matchPointFlag(matchPointFlag) {} + + // Getter methods + int getYear() { return year; } + int getMonth() { return month; } + int getDay() { return day; } + int getHour() { return hour; } + int getMinute() { return minute; } + char* getStationPath() { return station_path; } + char* getElevationFile() { return elevation_file; } + char* getOSTimeZone() { return osTimeZone; } + bool getMatchPointFlag() {return matchPointFlag;} }; class WeatherModel : public BaseInput { -private: - char* forecast; - char* osTimeZone; - -public: - // Constructor - WeatherModel(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, - int nLayers, int diurnalFlag, double height, bool momentumFlag, int numNinjas, - char* forecast, char* osTimeZone) - : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, momentumFlag, numNinjas), + private: + char* forecast; + char* osTimeZone; + + public: + // Constructor + WeatherModel(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, + int nLayers, int diurnalFlag, double height, string heightUnits, bool momentumFlag, int numNinjas, + char* forecast, char* osTimeZone) + : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, heightUnits, momentumFlag, numNinjas), forecast(forecast), osTimeZone(osTimeZone) {} - // Getter methods - char* getForecast() { return forecast; } - char* getOSTimeZone() { return osTimeZone; } + // Getter methods + char* getForecast() { return forecast; } + char* getOSTimeZone() { return osTimeZone; } }; class modeldata { -public: - modeldata() {} + public: + modeldata() {} }; #endif // MODELDATA_H From e53c94844456426cf7fa0b02d7cd7cae42df0aee Mon Sep 17 00:00:00 2001 From: Codymm03 Date: Mon, 14 Apr 2025 21:54:23 -0600 Subject: [PATCH 031/435] Adding missing provider flies from last commit. --- src/gui/qt6/provider.cpp | 526 +++++++++++++++++++++++++++++++++++++++ src/gui/qt6/provider.h | 27 ++ 2 files changed, 553 insertions(+) create mode 100755 src/gui/qt6/provider.cpp create mode 100755 src/gui/qt6/provider.h diff --git a/src/gui/qt6/provider.cpp b/src/gui/qt6/provider.cpp new file mode 100755 index 000000000..33824b61f --- /dev/null +++ b/src/gui/qt6/provider.cpp @@ -0,0 +1,526 @@ +#include "provider.h" +#include "modeldata.h" +#include "../../ninja/windninja.h" + +#include +#include +#include + +using namespace std; + + +NinjaArmyH* ninjaArmy = NULL; +const char * comType = "cli"; +const int nCPUs = 1; +char ** papszOptions = NULL; +NinjaErr err = 0; + +int NinjaSim::domain_average_exec(DomainAverageWind& input) { + std::vector speedVector = input.getSpeedList(); + const double* speedList = speedVector.data(); + + std::vector directionVector = input.getDirectionList(); + const double* directionList = speedVector.data(); + + const char * demFile = input.getDemFile().c_str(); + double outputResolution = input.getOutputResolution(); + const char* initializationMethod = input.getInitializationMethod().c_str(); + const char* meshChoice = input.getMeshChoice().c_str(); + const char* vegetation = input.getVegetation().c_str(); + const int nLayers = input.getNLayers(); + const int diurnalFlag = input.getDiurnalFlag(); + const double height = input.getHeight(); + const char* heightUnits = input.getHeightUnits().c_str(); + const char* speedUnits = input.getSpeedUnits().c_str(); + bool momentumFlag = input.getMomentumFlag(); + unsigned int numNinjas = input.getNumNinjas(); + + + /* + * Setting up the simulation + */ + err = NinjaInit(papszOptions); //initialize global singletons and environments (GDAL_DATA, etc.) + ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speedList, speedUnits, directionList, papszOptions); + + if(err != NINJA_SUCCESS) + { + printf("NinjaInit: err = %d\n", err); + } + + /* + * Create the army + */ + if( NULL == ninjaArmy ) + { + printf("NinjaCreateArmy: ninjaArmy = NULL\n"); + } + + err = NinjaInit(papszOptions); //must be called for any simulation + if(err != NINJA_SUCCESS) + { + printf("NinjaInit: err = %d\n", err); + } + + /* + * Prepare the army + */ + for(unsigned int i=0; i(&input)) { + domain_average_exec(*domainWind); + } + }else if (input.getInitializationMethod() == "point") { + if (auto* pointWind = dynamic_cast(&input)) { + point_exec(*pointWind); + } + }else if (input.getInitializationMethod() == "wxmodel") { + if (auto* weatherWind = dynamic_cast(&input)) { + wxmodel_exec(*weatherWind); + } + }else{ + //error state + } +} + + + + + diff --git a/src/gui/qt6/provider.h b/src/gui/qt6/provider.h new file mode 100755 index 000000000..0858bdd05 --- /dev/null +++ b/src/gui/qt6/provider.h @@ -0,0 +1,27 @@ +// +// Created by Codsl on 4/8/2025. +// + +#ifndef PROVIDER_H +#define PROVIDER_H + +#include "modeldata.h" +#include + +class NinjaSim { + private: + class NinjaArmyH* ninjaArmy = nullptr; + const char* comType = "cli"; + const int nCPUs = 1; + char** papszOptions = nullptr; + int err = 0; + + int domain_average_exec(class DomainAverageWind& input); + int point_exec(class PointInitialization& input); + int wxmodel_exec(class WeatherModel& input); + + public: + explicit NinjaSim(class BaseInput& input); +}; + +#endif //PROVIDER_H From cce97aaad38a4eeb7eb8a8b503b27a7b65b87a75 Mon Sep 17 00:00:00 2001 From: vboxuser Date: Mon, 14 Apr 2025 22:09:42 -0600 Subject: [PATCH 032/435] Completed majority of front-end logic, implemented state machine, prepared for tying in API --- src/gui/qt6/CMakeLists.txt | 2 + src/gui/qt6/appstate.h | 42 +++ src/gui/qt6/main.cpp | 163 ----------- src/gui/qt6/mainwindow.cpp | 547 ++++++++++++++++++++++++++++++++----- src/gui/qt6/mainwindow.h | 41 ++- src/gui/qt6/mainwindow.ui | 111 +++++++- 6 files changed, 668 insertions(+), 238 deletions(-) create mode 100644 src/gui/qt6/appstate.h diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt index e2052b2a0..b95075b21 100644 --- a/src/gui/qt6/CMakeLists.txt +++ b/src/gui/qt6/CMakeLists.txt @@ -24,6 +24,8 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) qt_add_executable(qt6_application MANUAL_FINALIZATION ${PROJECT_SOURCES} + ${CMAKE_SOURCE_DIR}/wn-resources.qrc + appstate.h ) # Define target properties for Android with Qt 6 as: # set_property(TARGET qt6_application APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR diff --git a/src/gui/qt6/appstate.h b/src/gui/qt6/appstate.h new file mode 100644 index 000000000..64be3c480 --- /dev/null +++ b/src/gui/qt6/appstate.h @@ -0,0 +1,42 @@ +#ifndef APPSTATE_H +#define APPSTATE_H + +class AppState +{ +public: + static AppState& instance() { + static AppState s; + return s; + } + + // Solver Methodology input states + bool solverMethodologyOk = false; + bool useCOMtoggled = false; + bool useCOMMtoggled = false; + + // Input states + bool inputsOk = false; + bool surfaceInputOk = false; + bool diurnalInputToggled = false; + bool stabilityInputToggled = false; + + // Wind Input States + bool windInputOk = false; + bool domainAverageWindToggled = false; + bool domainAverageWindOk = false; + bool pointInitializationToggled = false; + bool pointInitializationOk = false; + bool weatherModelToggled = false; + bool weatherModelOk = false; + + // All Inputs Ok + bool solverReady = false; + + +private: + AppState() {} // private constructor + AppState(const AppState&) = delete; // prevent copying + AppState& operator=(const AppState&) = delete; +}; + +#endif // APPSTATE_H diff --git a/src/gui/qt6/main.cpp b/src/gui/qt6/main.cpp index cbe88af39..035b4e3e2 100644 --- a/src/gui/qt6/main.cpp +++ b/src/gui/qt6/main.cpp @@ -1,173 +1,10 @@ #include "mainwindow.h" #include "../../ninja/windninja.h" - #include int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; - - // From tutorial: step 1 - NinjaArmyH* ninjaArmy = NULL; - const char * comType = "cli"; //communication type is always set to "cli" - const int nCPUs = 1; - char ** papszOptions = NULL; - NinjaErr err = 0; - - err = NinjaInit(papszOptions); //must be called for any simulation - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - } - - // From tutorial: step 2 - /* inputs that apply to the whole army (must be the same for all ninjas) */ - const char * demFile = "big_butte_small.tif"; - const char * initializationMethod = "domain_average"; - const char * meshChoice = "coarse"; - const char * vegetation = "grass"; - const int nLayers = 20; //layers in the mesh - const int diurnalFlag = 0; //diurnal slope wind parameterization not used - const double height = 5.0; - const char * heightUnits = "m"; - bool momentumFlag = 0; //we're using the conservation of mass solver - unsigned int numNinjas = 2; //two ninjas in the ninjaArmy - - /* inputs that can vary among ninjas in an army */ - const double speed[2] = {5.5, 5.5}; - const char * speedUnits = "mps"; - const double direction[2] = {220, 300}; - - // From tutorial: step 3 /* create the army */ - ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speed, speedUnits, direction, papszOptions); - - if( NULL == ninjaArmy ) - { - printf("NinjaCreateArmy: ninjaArmy = NULL\n"); - - // From tutorial: step 4 - /* set up the runs */ - for(unsigned int i=0; i #include #include #include +#include #include #include #include @@ -60,6 +62,479 @@ class DirectoryFilterModel : public QSortFilterProxyModel { } }; +MainWindow::~MainWindow() { delete ui; } + +/* + * Click tree item helper function + */ + +void MainWindow::onTreeItemClicked(QTreeWidgetItem *item, int column) { + int pageIndex = item->data(column, Qt::UserRole).toInt(); + if (pageIndex >= 0) { + ui->stackedInputPage->setCurrentIndex(pageIndex); + } +} + +// Recursive function to add files and directories correctly with Name and Date columns +void addFilesRecursively(QStandardItem *parentItem, const QString &dirPath) { + QDir dir(dirPath); + QFileInfoList entries = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); + for (const QFileInfo &entry : entries) { + QStandardItem *nameItem = new QStandardItem(entry.fileName()); + QStandardItem *dateItem = new QStandardItem(entry.lastModified().toString("yyyy-MM-dd HH:mm:ss")); + nameItem->setEditable(false); + dateItem->setEditable(false); + parentItem->appendRow({nameItem, dateItem}); + if (entry.isDir()) { + addFilesRecursively(nameItem, entry.absoluteFilePath()); + } + } +} + +// Function to populate forecastDownloads with .tif parent directories and all nested contents +void MainWindow::populateForecastDownloads() { + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + QDir downloadsDir(downloadsPath); + + if (!downloadsDir.exists()) return; + + QStandardItemModel *model = new QStandardItemModel(this); + model->setHorizontalHeaderLabels({"Name", "Date Modified"}); + + QDirIterator it(downloadsPath, QDir::Dirs | QDir::NoDotAndDotDot); + while (it.hasNext()) { + QString dirPath = it.next(); + if (dirPath.endsWith(".tif", Qt::CaseInsensitive)) { + QStandardItem *parentItem = new QStandardItem(QFileInfo(dirPath).fileName()); + parentItem->setEditable(false); + addFilesRecursively(parentItem, dirPath); + model->appendRow(parentItem); + } + } + + ui->forecastDownloads->setModel(model); + ui->forecastDownloads->header()->setSectionResizeMode(QHeaderView::Stretch); + + // Disable editing and enable double-click expansion + ui->forecastDownloads->setEditTriggers(QAbstractItemView::NoEditTriggers); + ui->forecastDownloads->setExpandsOnDoubleClick(true); +} + +/* + * Dynamic UI handling + */ + +/* + * Helper function to refresh the ui state of the app + * Called on every user input action + */ +static void refreshUI(const Ui::MainWindow* ui) +{ + // Alias the AppState + AppState& state = AppState::instance(); + + // Define state icons + QIcon tickIcon(":/tick.png"); + QIcon xIcon(":/cross.png"); + QIcon bulletIcon(":/bullet_blue.png"); + + // Enable mouse tracking on tree + ui->treeWidget->setMouseTracking(true); + + // Update Solver Methodology UI + if (state.useCOMtoggled != state.useCOMMtoggled) { + state.solverMethodologyOk = true; + ui->treeWidget->topLevelItem(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(0)->setToolTip(0, ""); + } else if (state.useCOMtoggled && state.useCOMMtoggled) { + state.solverMethodologyOk = false; + ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently too many selections."); + } else { + state.solverMethodologyOk = false; + ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently no selections."); + } + + if (state.useCOMtoggled) { + ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, tickIcon); + } else { + ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, bulletIcon); + } + + if (state.useCOMMtoggled) { + ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, tickIcon); + } else { + ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, bulletIcon); + } + + /* + * Primary state machine for inputs (surface, wind, etc.) + */ + + // Update surface input state + if (ui->elevFilePath->text() != "") { + state.surfaceInputOk = true; + ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, tickIcon); + } else { + state.surfaceInputOk = false; + ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, xIcon); + } + + // Update diurnal input state + if (state.diurnalInputToggled) { + ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, tickIcon); + } else { + ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, bulletIcon); + } + + // Update stability input state + if (state.stabilityInputToggled) { + ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, tickIcon); + } else { + ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, bulletIcon); + } + + // Update domain average wind state + if (state.domainAverageWindToggled && state.diurnalInputToggled) { + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); + state.domainAverageWindOk = true; + } else if (state.domainAverageWindToggled && !state.diurnalInputToggled) { + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, xIcon); + state.domainAverageWindOk = false; + } else { + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, bulletIcon); + state.domainAverageWindOk = false; + } + + // Update point initialization state + if (state.pointInitializationToggled) { + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, tickIcon); + state.pointInitializationOk = true; + } else { + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, bulletIcon); + state.pointInitializationOk = false; + } + + // Update weather model state + if (state.weatherModelToggled) { + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, tickIcon); + state.weatherModelOk = true; + } else { + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, bulletIcon); + state.weatherModelOk = false; + } + + // Update wind input + if (state.domainAverageWindOk || state.pointInitializationOk || state.weatherModelOk) { + ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, tickIcon); + state.windInputOk = true; + } else { + ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, xIcon); + state.windInputOk = false; + } + + // Update overall input UI state + if (state.surfaceInputOk && state.windInputOk) { + state.inputsOk = true; + ui->treeWidget->topLevelItem(1)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, ""); + } else if (!state.surfaceInputOk && !state.windInputOk) { + state.inputsOk = false; + ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface and wind inputs."); + } else if (!state.surfaceInputOk) { + state.inputsOk = false; + ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface input."); + } else if (!state.windInputOk) { + state.inputsOk = false; + ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad wind input."); + } + + // Track solver + if (state.solverMethodologyOk && state.inputsOk) { + ui->solveButton->setEnabled(true); + } else { + ui->solveButton->setEnabled(false); + } +} + + +/* + * Signal and slot handlers + */ + +// Use selects Conservation of Mass +void MainWindow::on_useCOM_clicked() +{ + AppState& state = AppState::instance(); + + // Only allow CoM or CoMM to be toggled + if (state.useCOMMtoggled) { + ui->useCOMM->setChecked(false); + state.useCOMMtoggled = ui->useCOMM->isChecked(); + } + + // Update app states + state.useCOMtoggled = ui->useCOM->isChecked(); + refreshUI(ui); +} + + +// User selects Conservation of Mass and Momentum +void MainWindow::on_useCOMM_clicked() +{ + AppState& state = AppState::instance(); + + // Only allow CoM or CoMM to be toggled + if (state.useCOMtoggled) { + ui->useCOM->setChecked(false); + state.useCOMtoggled = ui->useCOM->isChecked(); + } + + // Update app states + state.useCOMMtoggled = ui->useCOMM->isChecked(); + refreshUI(ui); +} + + +// User selects an elevation input file (by file) +void MainWindow::on_elevFilePath_textChanged(const QString &arg1) +{ + refreshUI(ui); +} + + +void MainWindow::on_openFileButton_clicked() +{ + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + QString filePath = QFileDialog::getOpenFileName(this, + "Select a file", // Window title + downloadsPath, // Starting directory + "(*.tif);;All Files (*)" // Filter + ); + ui->elevFilePath->setText(filePath); + ui->elevFilePath->setToolTip(filePath); +} + + +// User selects an elevation input file (by map import) +// TODO: get DEM file on button press +void MainWindow::on_getFromMapButton_clicked() +{ + // We have to use batching since the Javascript part is async + struct JSFieldBatch { + QMap results; + int expected = 7; + std::function)> onReady; + }; + + auto batch = new JSFieldBatch(); + batch->onReady = [this, batch](QMap fields) { + northLat = fields["north_lat"].toDouble(); + southLat = fields["south_lat"].toDouble(); + eastLon = fields["east_lon"].toDouble(); + westLon = fields["west_lon"].toDouble(); + centerLat = fields["center_lat"].toDouble(); + centerLon = fields["center_lon"].toDouble(); + radius = fields["radius"].toDouble(); + + delete batch; // clean up + }; + + auto run = [this, batch](QString fieldId) { + webView->page()->runJavaScript(QString("document.getElementById('%1').value;").arg(fieldId), + [fieldId, batch](const QVariant &result) { + batch->results[fieldId] = result; + if (batch->results.size() == batch->expected) { + batch->onReady(batch->results); + } + }); + }; + + // Kick off all the field reads + run("north_lat"); + run("south_lat"); + run("east_lon"); + run("west_lon"); + run("center_lat"); + run("center_lon"); + run("radius"); + + // Verify input validity + if (northLat != 0 && southLat != 0 && eastLon != 0 && westLon != 0) { + // AppState::instance(). + } +} + +// User changes the mesh resolution spec for surface input +void MainWindow::on_meshResType_currentIndexChanged(int index) +{ + switch(index) { + case 0: + ui->customMeshResValue->setValue(256.34); + ui->customMeshResValue->setEnabled(false); + break; + + case 1: + ui->customMeshResValue->setValue(162.12); + ui->customMeshResValue->setEnabled(false); + break; + + case 2: + ui->customMeshResValue->setValue(114.64); + ui->customMeshResValue->setEnabled(false); + break; + + case 3: + ui->customMeshResValue->setEnabled(true); + break; + + } +} + +// User selects Diurnal Input +void MainWindow::on_useDiurnalWind_clicked() +{ + AppState& state = AppState::instance(); + + // Update UI state + state.diurnalInputToggled = ui->useDiurnalWind->isChecked(); + refreshUI(ui); +} + +// User selects Stability Input +void MainWindow::on_useStability_clicked() +{ + AppState& state = AppState::instance(); + + // Update UI state + state.stabilityInputToggled = ui->useStability->isChecked(); + refreshUI(ui); +} + +/* + * Wind Inputs + */ + +// Domain Average Wind + +// User selects Domain Average Wind +void MainWindow::on_useDomainAvgWind_clicked() +{ + AppState& state = AppState::instance(); + + // Update the domain average wind state + state.domainAverageWindToggled = ui->useDomainAvgWind->isChecked(); + + // Only allow one wind methodology to be used + if (state.domainAverageWindToggled) { + ui->usePointInit->setChecked(false); + ui->useWeatherModelInit->setChecked(false); + state.pointInitializationToggled = ui->usePointInit->isChecked(); + state.weatherModelToggled = ui->useWeatherModelInit->isChecked(); + } + + // Update app state + refreshUI(ui); +} + +// User changes Domain Average Wind -> Input Wind Height +void MainWindow::on_domainAvgPicklist_currentIndexChanged(int index) +{ + switch(index) { + case 0: + ui->windHeightValue->setValue(20.00); + ui->windHeightValue->setEnabled(false); + ui->windHeightFeet->setChecked(true); + ui->windHeightFeet->setEnabled(false); + ui->windHeightMeters->setEnabled(false); + break; + + case 1: + ui->windHeightValue->setValue(10.00); + ui->windHeightValue->setEnabled(false); + ui->windHeightMeters->setChecked(true); + ui->windHeightFeet->setEnabled(false); + ui->windHeightMeters->setEnabled(false); + break; + + case 2: + ui->windHeightValue->setEnabled(true); + ui->windHeightFeet->setEnabled(true); + ui->windHeightMeters->setEnabled(true); + break; + } +} + +// User clears the domain average wind input table +void MainWindow::on_clearDAWtable_clicked() +{ + ui->windTableData->clearContents(); +} + +// User selects Point Initialization wind model +void MainWindow::on_usePointInit_clicked() +{ + AppState& state = AppState::instance(); + + // Update the domain average wind state + state.pointInitializationToggled = ui->usePointInit->isChecked(); + + // Only allow one wind methodology to be used + if (state.pointInitializationToggled) { + ui->useDomainAvgWind->setChecked(false); + ui->useWeatherModelInit->setChecked(false); + state.domainAverageWindToggled = ui->useDomainAvgWind->isChecked(); + state.weatherModelToggled = ui->useWeatherModelInit->isChecked(); + } + + // Update app state + refreshUI(ui); +} + +// User selects Weather Model Initialization model +void MainWindow::on_useWeatherModelInit_clicked() +{ + AppState& state = AppState::instance(); + + // Update the domain average wind state + state.weatherModelToggled = ui->useWeatherModelInit->isChecked(); + + // Only allow one wind methodology to be used + if (state.weatherModelToggled) { + ui->useDomainAvgWind->setChecked(false); + ui->usePointInit->setChecked(false); + state.domainAverageWindToggled = ui->useDomainAvgWind->isChecked(); + state.pointInitializationToggled = ui->usePointInit->isChecked(); + } + + // Update app state + refreshUI(ui); +} + +// Enable double clicking on tree menu items +void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column) +{ + if (item->text(0) == "Conservation of Mass") { + ui->useCOM->click(); + } else if (item->text(0) == "Conservation of Mass and Momentum") { + ui->useCOMM->click(); + } else if (item->text(0) == "Diurnal Input") { + ui->useDiurnalWind->click(); + } else if (item->text(0) == "Stability Input") { + ui->useStability->click(); + } else if (item->text(0) == "Domain Average Wind") { + ui->useDomainAvgWind->click(); + } else if (item->text(0) == "Point Initialization") { + ui->usePointInit->click(); + } else if (item->text(0) == "Weather Model") { + ui->useWeatherModelInit->click(); + } +} + MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), @@ -70,10 +545,13 @@ MainWindow::MainWindow(QWidget *parent) // Set default window size resize(1200, 700); + // Immediately call a UI refresh to set initial states + refreshUI(ui); + // Expand tree UI + ui->treeWidget->expandAll(); + /* - * * Create file handler window for point init screen - * */ // Get the correct Downloads folder path @@ -126,9 +604,7 @@ MainWindow::MainWindow(QWidget *parent) } /* - * * Functionality for the map widget - * */ // Resolve the map file path @@ -139,7 +615,7 @@ MainWindow::MainWindow(QWidget *parent) QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); //Load HTML file with Leaflet - webView = new QWebEngineView(this); + webView = new QWebEngineView(ui->mapPanelWidget); QUrl url = QUrl::fromLocalFile(filePath); webView->setUrl(url); @@ -152,9 +628,7 @@ MainWindow::MainWindow(QWidget *parent) ui->mapPanelWidget->setLayout(layout); /* - * * Connect tree items to stacked tab window - * */ // Top-level items @@ -189,62 +663,3 @@ MainWindow::MainWindow(QWidget *parent) populateForecastDownloads(); } -MainWindow::~MainWindow() { delete ui; } - -/* - * - * Click tree item helper function - * - */ - -void MainWindow::onTreeItemClicked(QTreeWidgetItem *item, int column) { - int pageIndex = item->data(column, Qt::UserRole).toInt(); - if (pageIndex >= 0) { - ui->stackedInputPage->setCurrentIndex(pageIndex); - } -} - -// Recursive function to add files and directories correctly with Name and Date columns -void addFilesRecursively(QStandardItem *parentItem, const QString &dirPath) { - QDir dir(dirPath); - QFileInfoList entries = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); - for (const QFileInfo &entry : entries) { - QStandardItem *nameItem = new QStandardItem(entry.fileName()); - QStandardItem *dateItem = new QStandardItem(entry.lastModified().toString("yyyy-MM-dd HH:mm:ss")); - nameItem->setEditable(false); - dateItem->setEditable(false); - parentItem->appendRow({nameItem, dateItem}); - if (entry.isDir()) { - addFilesRecursively(nameItem, entry.absoluteFilePath()); - } - } -} - -// Function to populate forecastDownloads with .tif parent directories and all nested contents -void MainWindow::populateForecastDownloads() { - QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - QDir downloadsDir(downloadsPath); - - if (!downloadsDir.exists()) return; - - QStandardItemModel *model = new QStandardItemModel(this); - model->setHorizontalHeaderLabels({"Name", "Date Modified"}); - - QDirIterator it(downloadsPath, QDir::Dirs | QDir::NoDotAndDotDot); - while (it.hasNext()) { - QString dirPath = it.next(); - if (dirPath.endsWith(".tif", Qt::CaseInsensitive)) { - QStandardItem *parentItem = new QStandardItem(QFileInfo(dirPath).fileName()); - parentItem->setEditable(false); - addFilesRecursively(parentItem, dirPath); - model->appendRow(parentItem); - } - } - - ui->forecastDownloads->setModel(model); - ui->forecastDownloads->header()->setSectionResizeMode(QHeaderView::Stretch); - - // Disable editing and enable double-click expansion - ui->forecastDownloads->setEditTriggers(QAbstractItemView::NoEditTriggers); - ui->forecastDownloads->setExpandsOnDoubleClick(true); -} diff --git a/src/gui/qt6/mainwindow.h b/src/gui/qt6/mainwindow.h index 3b779177d..307efe7e7 100644 --- a/src/gui/qt6/mainwindow.h +++ b/src/gui/qt6/mainwindow.h @@ -21,11 +21,48 @@ class MainWindow : public QMainWindow { MainWindow(QWidget *parent = nullptr); ~MainWindow(); +private slots: + void on_useCOM_clicked(); + void on_useCOMM_clicked(); + + void on_getFromMapButton_clicked(); + + void on_openFileButton_clicked(); + + + void on_elevFilePath_textChanged(const QString &arg1); + + void on_meshResType_currentIndexChanged(int index); + + void on_useDiurnalWind_clicked(); + + void on_useStability_clicked(); + + void on_domainAvgPicklist_currentIndexChanged(int index); + + void on_useDomainAvgWind_clicked(); + + void on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column); + + void on_usePointInit_clicked(); + + void on_useWeatherModelInit_clicked(); + + void on_clearDAWtable_clicked(); + private: void onTreeItemClicked(QTreeWidgetItem *item, int column); + // DEM inputs + double northLat; + double southLat; + double eastLon; + double westLon; + double centerLat; + double centerLon; + double radius; -Ui::MainWindow *ui; -QWebEngineView *webView; + Ui::MainWindow *ui; + QWebEngineView *webView; }; #endif // MAINWINDOW_H diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui index 065577373..d3dce0a29 100644 --- a/src/gui/qt6/mainwindow.ui +++ b/src/gui/qt6/mainwindow.ui @@ -360,54 +360,87 @@ Solver Methodology + + ItemIsSelectable|ItemIsEnabled + Conservation of Mass + + ItemIsSelectable|ItemIsEnabled + Conservation of Mass and Momentum + + ItemIsSelectable|ItemIsEnabled + Inputs + + ItemIsSelectable|ItemIsEnabled + Surface Input + + ItemIsSelectable|ItemIsEnabled + Diurnal Input + + ItemIsSelectable|ItemIsEnabled + Stability Input + + ItemIsSelectable|ItemIsEnabled + Wind Input + + ItemIsSelectable|ItemIsEnabled + Domain Average Wind + + ItemIsSelectable|ItemIsEnabled + Point Initialization + + ItemIsSelectable|ItemIsEnabled + Weather Model + + ItemIsSelectable|ItemIsEnabled + @@ -462,7 +495,7 @@ QFrame::Shadow::Sunken - 8 + 9 @@ -560,6 +593,9 @@ li.checked::marker { content: "\2612"; } Use Conservation of Mass + + false + @@ -791,6 +827,12 @@ li.checked::marker { content: "\2612"; } 0 + + true + + + *.tif + @@ -813,6 +855,25 @@ li.checked::marker { content: "\2612"; } + + + + + WORLD SRTM (30m) + + + + + WORLD GMTED (250m) + + + + + Landscape File + + + + @@ -944,6 +1005,9 @@ li.checked::marker { content: "\2612"; } + + false + 0 @@ -953,6 +1017,18 @@ li.checked::marker { content: "\2612"; } PointingHandCursor + + false + + + 0.010000000000000 + + + 999.990000000000009 + + + 256.339999999999975 + @@ -1374,14 +1450,26 @@ li.checked::marker { content: "\2612"; } - + + + false + PointingHandCursor + + 0.010000000000000 + + + 20.000000000000000 + - + + + false + PointingHandCursor @@ -1394,7 +1482,10 @@ li.checked::marker { content: "\2612"; } - + + + false + PointingHandCursor @@ -2322,7 +2413,7 @@ li.checked::marker { content: "\2612"; } 5 - + 0 @@ -2345,7 +2436,7 @@ li.checked::marker { content: "\2612"; } PointingHandCursor - Point Initialization + Weather Model Initialization @@ -2469,11 +2560,17 @@ li.checked::marker { content: "\2612"; } 0 + + 3 + - 5 + 3 + + false + 0 From 2c8aa209ec61aa22fc6dad3b34b85ea762149d5c Mon Sep 17 00:00:00 2001 From: Codymm03 Date: Wed, 16 Apr 2025 11:52:26 -0600 Subject: [PATCH 033/435] Adding fetch functions. --- src/gui/qt6/CMakeLists.txt | 1 + src/gui/qt6/datafetcher.h | 154 +++++++++++++++++++++++++++++++++++++ src/gui/qt6/main.cpp | 16 +++- src/gui/qt6/modeldata.h | 18 +++-- src/gui/qt6/provider.cpp | 16 ++++ 5 files changed, 195 insertions(+), 10 deletions(-) create mode 100644 src/gui/qt6/datafetcher.h diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt index e3ee411f2..be6d6c2a2 100755 --- a/src/gui/qt6/CMakeLists.txt +++ b/src/gui/qt6/CMakeLists.txt @@ -26,6 +26,7 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) ${PROJECT_SOURCES} provider.cpp modeldata.h provider.h + datafetcher.h ) # Define target properties for Android with Qt 6 as: diff --git a/src/gui/qt6/datafetcher.h b/src/gui/qt6/datafetcher.h new file mode 100644 index 000000000..42c1b40f2 --- /dev/null +++ b/src/gui/qt6/datafetcher.h @@ -0,0 +1,154 @@ +#ifndef DATAFETCHER_H +#define DATAFETCHER_H + +#include "windninja.h" +#include + +using namespace std; + +/*TODO: + * Implement exhaustive tests for all wx_model_types for NinjaFetchForecast + * Implement tests for NinjaFetchDemPoint (example code in apiTestPoint.c) and NinjaFetchStation + */ + +int fetchDEMBoundingBox(const string demFileOutPut, const string fetch_type, int resolution, double* boundsBox) +{ + /* + * const char * demFile = "data/output.tif"; // output file name + * char * fetch_type = "gmted"; + * double resolution = 30; // 30 m resolution + * double boundsBox [] = {40.07, -104.0, 40.0, -104.07}; + */ + + /* + * Setting up NinjaArmy + */ + NinjaArmyH* ninjaArmy = NULL; + char ** papszOptions = NULL; + NinjaErr err = 0; + err = NinjaInit(papszOptions); // must be called for fetching and simulations + if(err != NINJA_SUCCESS) + { + printf("NinjaInit: err = %d\n", err); + } + /* + * Testing fetching from a DEM bounding box + */ + // Bounding box (north, east, south, west) + err = NinjaFetchDEMBBox(ninjaArmy, boundsBox, demFileOutPut.c_str(), resolution, strdup(fetch_type.c_str()), papszOptions); + if (err != NINJA_SUCCESS){ + printf("NinjaFetchDEMBBox: err = %d\n", err); + } + + return NINJA_SUCCESS; +} + +int fetchForecast(const string wx_model_type, int numNinjas, const string demFile){ + /* + * const char*wx_model_type = "NOMADS-HRRR-CONUS-3-KM"; + * int numNinjas = 2; + */ + + /* + * Setting up NinjaArmy + */ + NinjaArmyH* ninjaArmy = NULL; + char ** papszOptions = NULL; + NinjaErr err = 0; + err = NinjaInit(papszOptions); // must be called for fetching and simulations + if(err != NINJA_SUCCESS) + { + printf("NinjaInit: err = %d\n", err); + } + /* + * Testing fetching for a Forecast file (wx_model_type are the names listed in the weather station download in WindNinja) + */ + const char* forecastFilename = NinjaFetchForecast(ninjaArmy, wx_model_type.c_str(), numNinjas, demFile.c_str(), papszOptions); + if (strcmp(forecastFilename, "exception") == 0){ + printf("NinjaFetchForecast: err = %s\n", forecastFilename); + } + else{ + printf("NinjaFetchForecast: forecastFilename = %s\n", forecastFilename); + } + + return NINJA_SUCCESS; +} + +int fetchStationData(int year, int month, int day, int hour, int minute, const string output_path, const string demFile, const string osTimeZone, int fetchLatestFlag){ + /* + * int year[1] = {2023}; + * int month[1] = {10}; + * int day[1] = {10}; + * int hour[1] = {12}; + * int minute[1] = {60}; + * const char* output_path = ""; + * const char* elevation_file = "data/missoula_valley.tif"; + * const char* osTimeZone = "UTC"; + * bool fetchLatestFlag = 1; + * / + + /* + * Setting up NinjaArmy + */ + NinjaArmyH* ninjaArmy = NULL; + char ** papszOptions = NULL; + NinjaErr err = 0; + err = NinjaInit(papszOptions); // must be called for fetching and simulations + if(err != NINJA_SUCCESS) + { + printf("NinjaInit: err = %d\n", err); + } + + /* + * Testing fetching station data from a geotiff file. + */ + + err = NinjaFetchStation(&year, &month, &day, &hour, &minute, demFile.c_str(), osTimeZone.c_str(), fetchLatestFlag, output_path.c_str(), papszOptions); + if (err != NINJA_SUCCESS) { + printf("NinjaFetchStation: err = %d\n", err); + } else { + printf("NinjaFetchStation: success\n"); + } + + return NINJA_SUCCESS; +} + +int fetchFromDEMPoint (double adfPoints[2], double adfBuff[2], const string units, double dfCellSize, const string pszDstFile, const string fetchtype){ + /* + * double adfPoint[] = {104.0, 40.07}; // Point coordinates (longitude, latitude) + * double adfBuff[] = {30, 30}; // Buffer to store the elevation value + * const char* units = "mi"; + * double dfCellSize = 30.0; // Cell size in meters + * char* pszDstFile = "data/dem_point_output.tif"; + * char* fetchType = "gmted"; + */ + + /* + * Setting up NinjaArmy + */ + NinjaArmyH* ninjaArmy = NULL; + char ** papszOptions = NULL; + NinjaErr err = 0; + err = NinjaInit(papszOptions); // must be called for fetching and simulations + if(err != NINJA_SUCCESS) + { + printf("NinjaInit: err = %d\n", err); + } + + + /* + * Testing fetching from a DEM point + */ + err = NinjaFetchDEMPoint(ninjaArmy, adfPoints, adfBuff, units.c_str(), dfCellSize, strdup(pszDstFile.c_str()), strdup(fetchtype.c_str()), papszOptions); + if (err != NINJA_SUCCESS) { + printf("NinjaFetchDemPoint: err = %d\n", err); + } else { + printf("NinjaFetchDemPoint: elevation = %f\n", adfBuff[0]); + } + + return NINJA_SUCCESS; +} + + + +#endif // DATAFETCHER_H diff --git a/src/gui/qt6/main.cpp b/src/gui/qt6/main.cpp index 6972aadbc..22f940972 100755 --- a/src/gui/qt6/main.cpp +++ b/src/gui/qt6/main.cpp @@ -3,18 +3,30 @@ #include #include "modeldata.h" #include "provider.h" +#include "datafetcher.h" #include "vector" #include "iostream" int main(int argc, char *argv[]) { + double bbox[4] = {40.07, -104.0, 40.0, -104.07}; + fetchDEMBoundingBox("/home/vboxuser/Documents/windninja/data/output.tif", "srtm", 30, bbox); + + fetchForecast("NOMADS-HRRR-CONUS-3-KM", 2, "/home/vboxuser/Documents/windninja/data/big_butte.tif"); + + //fetchStationData(2023, 1, 1, 1, 1, "", "data/missoula_valley.tif", "UTC", 1); + + double cord[2] = {104.0, 40.0}; + double dim[2] = {330, 30}; + fetchFromDEMPoint(cord, dim, "mi", 30.0, "data/dem_point_output.tif", "gmted"); + std::vector windSpeeds = {5.0, 10.0, 15.0}; std::vector windDirections = {0.0, 90.0, 180.0}; - DomainAverageWind windModel("/home/vboxuser/Documents/windninja/data/big_butte.tif", 100, "domain_average", "coarse", "grass", 20, 0, 10.0, "m" , 0, 2, windSpeeds, "mps", windDirections); + //DomainAverageWind windModel("/home/vboxuser/Documents/windninja/data/big_butte.tif", 100, "domain_average", "coarse", "grass", 20, 0, 10.0, "m" , 0, 2, "/home/vboxuser/Documents/windninja/data", windSpeeds, "mps", windDirections); - NinjaSim sim(windModel); + //NinjaSim sim(windModel); /*QApplication a(argc, argv); MainWwindow w; diff --git a/src/gui/qt6/modeldata.h b/src/gui/qt6/modeldata.h index 6a02b964e..eda814e6e 100755 --- a/src/gui/qt6/modeldata.h +++ b/src/gui/qt6/modeldata.h @@ -19,15 +19,16 @@ class BaseInput { string heightUnits; bool momentumFlag; int numNinjas; + string outputPath; public: virtual ~BaseInput() {} // Constructor BaseInput(string demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, - int nLayers, int diurnalFlag, double height, string heightUnits, bool momentumFlag, int numNinjas) + int nLayers, int diurnalFlag, double height, string heightUnits, bool momentumFlag, int numNinjas, string outputPath) : demFile(demFile), outputResolution(outputResolution), initializationMethod(initializationMethod), meshChoice(meshChoice), - vegetation(vegetation), nLayers(nLayers), diurnalFlag(diurnalFlag), height(height), heightUnits(heightUnits), momentumFlag(momentumFlag), numNinjas(numNinjas) {} + vegetation(vegetation), nLayers(nLayers), diurnalFlag(diurnalFlag), height(height), heightUnits(heightUnits), momentumFlag(momentumFlag), numNinjas(numNinjas), outputPath(outputPath) {} // Getter methods const string& getDemFile() const { return demFile; } @@ -41,6 +42,7 @@ class BaseInput { const string& getHeightUnits() const { return heightUnits; } bool getMomentumFlag() { return momentumFlag; } int getNumNinjas() { return numNinjas; } + const string& getOutputPath() const { return outputPath; } }; class DomainAverageWind : public BaseInput { @@ -52,9 +54,9 @@ class DomainAverageWind : public BaseInput { public: // Constructor DomainAverageWind(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, - int nLayers, int diurnalFlag, double height, string heightUnits, bool momentumFlag, int numNinjas, + int nLayers, int diurnalFlag, double height, string heightUnits, bool momentumFlag, int numNinjas, string outputPath, vector speedList, string speedUnits, vector directionList) - : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, heightUnits, momentumFlag, numNinjas), + : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, heightUnits, momentumFlag, numNinjas, outputPath), speedList(speedList), speedUnits(speedUnits), directionList(directionList) {} // Getter methods @@ -78,9 +80,9 @@ class PointInitialization : public BaseInput { public: // Constructor PointInitialization(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, - int nLayers, int diurnalFlag, double height, string heightUnits, bool momentumFlag, int numNinjas, + int nLayers, int diurnalFlag, double height, string heightUnits, bool momentumFlag, int numNinjas, string outputPath, int year, int month, int day, int hour, int minute, char* station_path, char* elevation_file, char* osTimeZone, bool matchPointFlag) - : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, heightUnits, momentumFlag, numNinjas), + : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, heightUnits, momentumFlag, numNinjas, outputPath), year(year), month(month), day(day), hour(hour), minute(minute), station_path(station_path), elevation_file(elevation_file), osTimeZone(osTimeZone), matchPointFlag(matchPointFlag) {} // Getter methods @@ -103,9 +105,9 @@ class WeatherModel : public BaseInput { public: // Constructor WeatherModel(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, - int nLayers, int diurnalFlag, double height, string heightUnits, bool momentumFlag, int numNinjas, + int nLayers, int diurnalFlag, double height, string heightUnits, bool momentumFlag, int numNinjas, string outputPath, char* forecast, char* osTimeZone) - : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, heightUnits, momentumFlag, numNinjas), + : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, heightUnits, momentumFlag, numNinjas, outputPath), forecast(forecast), osTimeZone(osTimeZone) {} // Getter methods diff --git a/src/gui/qt6/provider.cpp b/src/gui/qt6/provider.cpp index 33824b61f..9477bc232 100755 --- a/src/gui/qt6/provider.cpp +++ b/src/gui/qt6/provider.cpp @@ -34,6 +34,7 @@ int NinjaSim::domain_average_exec(DomainAverageWind& input) { const char* speedUnits = input.getSpeedUnits().c_str(); bool momentumFlag = input.getMomentumFlag(); unsigned int numNinjas = input.getNumNinjas(); + const char* outputPath = input.getOutputPath().c_str(); /* @@ -72,6 +73,12 @@ int NinjaSim::domain_average_exec(DomainAverageWind& input) { printf("NinjaSetCommunication: err = %d\n", err); } + err = NinjaSetOutputPath(ninjaArmy, i, outputPath, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetNumberCPUs: err = %d\n", err); + } + err = NinjaSetNumberCPUs(ninjaArmy, i, nCPUs, papszOptions); if(err != NINJA_SUCCESS) { @@ -140,6 +147,13 @@ int NinjaSim::domain_average_exec(DomainAverageWind& input) { { printf("NinjaSetNumVertLayers: err = %d\n", err); } + + + err = NinjaSetGoogOutFlag(ninjaArmy, i, true, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetGoogOutFlag err = %d\n", err); + } } /* @@ -159,6 +173,8 @@ int NinjaSim::domain_average_exec(DomainAverageWind& input) { const char* outputGridProjection = NULL; const int nIndex = 0; const char* units = "m"; + + //Google Maps Output outputSpeedGrid = NinjaGetOutputSpeedGrid(ninjaArmy, nIndex, papszOptions); if( NULL == outputSpeedGrid ) { From 9403ed9b4b5a6c5015dbcd1b7a79c6284dd9e327 Mon Sep 17 00:00:00 2001 From: Codymm03 Date: Wed, 16 Apr 2025 13:02:29 -0600 Subject: [PATCH 034/435] Adjustments after merge. --- src/gui/qt6/main.cpp | 2 +- src/gui/qt6/provider.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/qt6/main.cpp b/src/gui/qt6/main.cpp index 22f940972..c5fec8db5 100755 --- a/src/gui/qt6/main.cpp +++ b/src/gui/qt6/main.cpp @@ -1,5 +1,5 @@ #include "mainwindow.h" -#include "../../ninja/windninja.h" +//#include "../../ninja/windninja.h" #include #include "modeldata.h" #include "provider.h" diff --git a/src/gui/qt6/provider.cpp b/src/gui/qt6/provider.cpp index 9477bc232..71738bc5c 100755 --- a/src/gui/qt6/provider.cpp +++ b/src/gui/qt6/provider.cpp @@ -242,7 +242,7 @@ int NinjaSim::point_exec(PointInitialization& input) { bool momentumFlag = input.getMomentumFlag(); unsigned int numNinjas = input.getNumNinjas(); - ninjaArmy = NinjaMakePointArmy(&year, &month, &day, &hour, &minute, osTimeZone, station_path, elevation_file, matchPointFlag, momemtumFlag, papszOptions); + ninjaArmy = NinjaMakePointArmy(&year, &month, &day, &hour, &minute, numNinjas, osTimeZone, station_path, elevation_file, matchPointFlag, momemtumFlag, papszOptions); if( NULL == ninjaArmy ) { From 469870ee2447d856e45c74fa59036c853a0b0db4 Mon Sep 17 00:00:00 2001 From: Codymm03 Date: Thu, 17 Apr 2025 15:27:43 -0600 Subject: [PATCH 035/435] Fetch Changes --- src/gui/qt6/datafetcher.h | 6 +++--- src/gui/qt6/main.cpp | 17 ++++++++++------- src/ninja/fetch_factory.cpp | 2 +- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/gui/qt6/datafetcher.h b/src/gui/qt6/datafetcher.h index 42c1b40f2..96fc0fe49 100644 --- a/src/gui/qt6/datafetcher.h +++ b/src/gui/qt6/datafetcher.h @@ -1,7 +1,7 @@ #ifndef DATAFETCHER_H #define DATAFETCHER_H -#include "windninja.h" +#include "../../ninja/windninja.h" #include using namespace std; @@ -74,7 +74,7 @@ int fetchForecast(const string wx_model_type, int numNinjas, const string demFil return NINJA_SUCCESS; } -int fetchStationData(int year, int month, int day, int hour, int minute, const string output_path, const string demFile, const string osTimeZone, int fetchLatestFlag){ +int fetchStationData(int year, int month, int day, int hour, int minute, int numNinjas, const string output_path, int bufferZone, const string bufferUnits, const string demFile, const string osTimeZone, int fetchLatestFlag){ /* * int year[1] = {2023}; * int month[1] = {10}; @@ -103,7 +103,7 @@ int fetchStationData(int year, int month, int day, int hour, int minute, const s * Testing fetching station data from a geotiff file. */ - err = NinjaFetchStation(&year, &month, &day, &hour, &minute, demFile.c_str(), osTimeZone.c_str(), fetchLatestFlag, output_path.c_str(), papszOptions); + err = NinjaFetchStation(&year, &month, &day, &hour, &minute, numNinjas, demFile.c_str(), bufferZone, bufferUnits.c_str(), osTimeZone.c_str(), fetchLatestFlag, output_path.c_str(), papszOptions); if (err != NINJA_SUCCESS) { printf("NinjaFetchStation: err = %d\n", err); } else { diff --git a/src/gui/qt6/main.cpp b/src/gui/qt6/main.cpp index c5fec8db5..929fe8175 100755 --- a/src/gui/qt6/main.cpp +++ b/src/gui/qt6/main.cpp @@ -11,27 +11,30 @@ int main(int argc, char *argv[]) { double bbox[4] = {40.07, -104.0, 40.0, -104.07}; - fetchDEMBoundingBox("/home/vboxuser/Documents/windninja/data/output.tif", "srtm", 30, bbox); + fetchDEMBoundingBox("/home/vboxuser/Documents/windninja/data/output.tif", "gmted", 30, bbox); + /* ERROR 4: `/vsizip/gmted.vrt' does not exist in the file system, and is not recognized as a supported dataset name. + NinjaFetchDEMBBox: err = 2 + ERROR 4: : No such file or directory*/ fetchForecast("NOMADS-HRRR-CONUS-3-KM", 2, "/home/vboxuser/Documents/windninja/data/big_butte.tif"); - //fetchStationData(2023, 1, 1, 1, 1, "", "data/missoula_valley.tif", "UTC", 1); + fetchStationData(2023, 1, 1, 1, 1, 1, "/home/vboxuser/Documents/windninja/data/", 10, "m", "/home/vboxuser/Documents/windninja/data/missoula_valley.tif", "UTC", 1); double cord[2] = {104.0, 40.0}; double dim[2] = {330, 30}; - fetchFromDEMPoint(cord, dim, "mi", 30.0, "data/dem_point_output.tif", "gmted"); + fetchFromDEMPoint(cord, dim, "m", 30.0, "/home/vboxuser/Documents/windninja/data/dem_point_output.tif", "gmted"); std::vector windSpeeds = {5.0, 10.0, 15.0}; std::vector windDirections = {0.0, 90.0, 180.0}; - //DomainAverageWind windModel("/home/vboxuser/Documents/windninja/data/big_butte.tif", 100, "domain_average", "coarse", "grass", 20, 0, 10.0, "m" , 0, 2, "/home/vboxuser/Documents/windninja/data", windSpeeds, "mps", windDirections); + DomainAverageWind windModel("/home/vboxuser/Documents/windninja/data/big_butte.tif", 100, "domain_average", "coarse", "grass", 20, 0, 10.0, "m" , 0, 2, "/home/vboxuser/Documents/windninja/data", windSpeeds, "mps", windDirections); - //NinjaSim sim(windModel); + NinjaSim sim(windModel); - /*QApplication a(argc, argv); + QApplication a(argc, argv); MainWwindow w; w.show(); - return a.exec();*/ + return a.exec(); return 0; } diff --git a/src/ninja/fetch_factory.cpp b/src/ninja/fetch_factory.cpp index 9e6fbc757..a5b513f82 100644 --- a/src/ninja/fetch_factory.cpp +++ b/src/ninja/fetch_factory.cpp @@ -48,7 +48,7 @@ SurfaceFetch* FetchFactory::GetSurfaceFetch(FetchType type, std::string path) if( type == WORLD_GMTED ) { - p = FindDataPath("surface_data.zip"); + p = FindDataPath("/home/vboxuser/Documents/windninja/data/surface_data.zip"); pszPath = CPLFormFilename("/vsizip/", p.c_str(), NULL); #ifdef HAVE_GMTED pszPath = CPLFormFilename(pszPath, "gmted", ".vrt"); From a2b1ae1a8c7008422cbc6f3708f5c5cbeefb27b7 Mon Sep 17 00:00:00 2001 From: Austen Harrell - VBox Date: Fri, 18 Apr 2025 13:27:29 -0600 Subject: [PATCH 036/435] Updates to GUI, model, controller, provider --- src/gui/qt6/CMakeLists.txt | 2 + src/gui/qt6/appstate.h | 3 + src/gui/qt6/controller.cpp | 125 ++++++++++++ src/gui/qt6/controller.h | 27 +++ src/gui/qt6/main.cpp | 10 +- src/gui/qt6/mainwindow.cpp | 235 +++++++++++++++++++++-- src/gui/qt6/mainwindow.h | 22 ++- src/gui/qt6/mainwindow.ui | 378 ++++++++++++++++++++++++++++++++++--- src/gui/qt6/modeldata.h | 8 +- src/gui/qt6/provider.cpp | 195 +++++++++++++++++-- src/gui/qt6/provider.h | 16 +- wn-resources.qrc | 1 + 12 files changed, 947 insertions(+), 75 deletions(-) create mode 100644 src/gui/qt6/controller.cpp create mode 100644 src/gui/qt6/controller.h diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt index 0245ded20..c7ecf88e7 100755 --- a/src/gui/qt6/CMakeLists.txt +++ b/src/gui/qt6/CMakeLists.txt @@ -28,6 +28,8 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) appstate.h provider.cpp modeldata.h provider.h + controller.h + controller.cpp ) # Define target properties for Android with Qt 6 as: # set_property(TARGET qt6_application APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR diff --git a/src/gui/qt6/appstate.h b/src/gui/qt6/appstate.h index 64be3c480..940102788 100644 --- a/src/gui/qt6/appstate.h +++ b/src/gui/qt6/appstate.h @@ -23,11 +23,14 @@ class AppState // Wind Input States bool windInputOk = false; bool domainAverageWindToggled = false; + bool domainAverageWindInputTableOk = true; bool domainAverageWindOk = false; bool pointInitializationToggled = false; bool pointInitializationOk = false; bool weatherModelToggled = false; bool weatherModelOk = false; + bool showAllZones = false; + bool displayTimeZoneDetails = false; // All Inputs Ok bool solverReady = false; diff --git a/src/gui/qt6/controller.cpp b/src/gui/qt6/controller.cpp new file mode 100644 index 000000000..44e8d464b --- /dev/null +++ b/src/gui/qt6/controller.cpp @@ -0,0 +1,125 @@ +#include "controller.h" + +Controller::Controller(MainWindow* view, QObject* parent) + : QObject(parent), view(view) +{ + connect(view, &MainWindow::solveRequest, this, &Controller::onSolveRequest); + connect(view, &MainWindow::timeZoneDataRequest, this, &Controller::onTimeZoneDataRequest); + connect(view, &MainWindow::timeZoneDetailsRequest, this, &Controller::onTimeZoneDetailsRequest); +} + +// Listens for solve request; facilitates model creation and provider passing +void Controller::onSolveRequest() { + // Alias app state, used to determine which type of solution to run + AppState& state = AppState::instance(); + + // Determine which run to perform + if (state.domainAverageWindOk) { + DomainAverageWind domainAvgWind = setDomainAverageWind(); + provider.domain_average_exec(domainAvgWind); + } +} + +// Get time zone list from provider +void Controller::onTimeZoneDataRequest() { + // Call provider to get 2D vector with timezone data + QVector> timeZoneData = provider.getTimeZoneData(); + + // Clear timezone list + view->getUi()->timeZoneSelector->clear(); + + // Populate timezone list + for (const QVector& zone : timeZoneData) { + if (!zone.isEmpty()) { + view->getUi()->timeZoneSelector->addItem(zone[0]); + } + } + + // Default to America/Denver + view->getUi()->timeZoneSelector->setCurrentText("America/Denver"); +} + +// Get time zone details from provider +void Controller::onTimeZoneDetailsRequest() { + QString currentTimeZone = view->getUi()->timeZoneSelector->currentText(); + QString timeZoneDetails = provider.getTimeZoneDetails(currentTimeZone); + + // Set value in ui + view->getUi()->timeZoneDetails->setText(timeZoneDetails); +} + +/* + * Helper functions that construct the API input models + */ + +BaseInput Controller::setBaseInput() { + QString demPath = view->getUi()->elevFilePath->text(); + double outputResolution = view->getUi()->meshResValue->value(); + QString initMethod; + if (view->getUi()->useDomainAvgWind->isChecked()) { + initMethod = "domain_average"; + } else if (view->getUi()->usePointInit->isChecked()) { + initMethod = "point"; + } else { + initMethod = "wxmodel"; + } + QString meshType = view->getUi()->meshResType->currentText().toLower(); + QString vegetation = view->getUi()->vegetationType->currentText().toLower(); + int nLayers = 20; + int diurnalFlag = view->getUi()->useDiurnalWind->isChecked() ? 1 : 0; + + double height = view->getUi()->windHeightValue->value(); + QString heightUnits; + if (view->getUi()->windHeightFeet) { + heightUnits = "ft"; + } else { + heightUnits = "m"; + } + + bool useMomentum = view->getUi()->useCOMM->isChecked() ? 1 : 0; + int numNinjas = 1; + // Count the number of ninjas, depending on the wind method being used + QVector> domainAvgTable = provider.parseDomainAvgTable(view->getUi()->windTableData); + if (view->getUi()->useDiurnalWind->isChecked()) { + if (domainAvgTable.size() > 0) { + numNinjas = domainAvgTable.size(); + } + } + + return BaseInput( + demPath.toStdString(), + outputResolution, + initMethod.toStdString(), + meshType.toStdString(), + vegetation.toStdString(), + nLayers, + diurnalFlag, + height, + heightUnits.toStdString(), + useMomentum, + numNinjas + ); +} + +DomainAverageWind Controller::setDomainAverageWind() { + BaseInput baseInput = setBaseInput(); + + // Get all wind data + QVector> windData = provider.parseDomainAvgTable(view->getUi()->windTableData); + + // Get speed and direction lists + vector speedList; + vector directionList; + for (int i = 0; i < windData.size(); i++) { + speedList.push_back(windData[i][0].toDouble()); + directionList.push_back(windData[i][1].toDouble()); + } + QString speedUnits = view->getUi()->speedUnits->currentText(); + + return DomainAverageWind ( + baseInput, + speedList, + speedUnits.toStdString(), + directionList + ); +} diff --git a/src/gui/qt6/controller.h b/src/gui/qt6/controller.h new file mode 100644 index 000000000..d4ae9cb64 --- /dev/null +++ b/src/gui/qt6/controller.h @@ -0,0 +1,27 @@ +#ifndef CONTROLLER_H +#define CONTROLLER_H + +#include +#include +#include "appstate.h" +#include "mainwindow.h" +#include "modeldata.h" +#include "provider.h" + +class Controller : public QObject { + Q_OBJECT +public: + Controller(MainWindow* view, QObject* parent = nullptr); + +private: + MainWindow* view; + Provider provider; + BaseInput setBaseInput(); + DomainAverageWind setDomainAverageWind(); + + void onSolveRequest(); + void onTimeZoneDataRequest(); + void onTimeZoneDetailsRequest(); +}; + +#endif // CONTROLLER_H diff --git a/src/gui/qt6/main.cpp b/src/gui/qt6/main.cpp index e3e76d306..05de7886b 100755 --- a/src/gui/qt6/main.cpp +++ b/src/gui/qt6/main.cpp @@ -1,16 +1,22 @@ #include "mainwindow.h" #include "../../ninja/windninja.h" #include +#include #include "modeldata.h" #include "provider.h" -#include "vector" -#include "iostream" +#include "controller.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; + + Controller controller(&w); + + // Immediately pull timezone data + QTimer::singleShot(0, &w, &MainWindow::timeZoneDataRequest); + w.show(); return a.exec(); diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index ac2817b49..6147ecc43 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -12,9 +12,11 @@ #include #include #include -#include #include #include +#include +#include +#include #include #include #include @@ -176,9 +178,11 @@ static void refreshUI(const Ui::MainWindow* ui) if (ui->elevFilePath->text() != "") { state.surfaceInputOk = true; ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, ""); } else { state.surfaceInputOk = false; ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, "No DEM file detected."); } // Update diurnal input state @@ -196,14 +200,17 @@ static void refreshUI(const Ui::MainWindow* ui) } // Update domain average wind state - if (state.domainAverageWindToggled && state.diurnalInputToggled) { + if (state.domainAverageWindToggled && state.domainAverageWindInputTableOk) { ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); state.domainAverageWindOk = true; - } else if (state.domainAverageWindToggled && !state.diurnalInputToggled) { + } else if (state.domainAverageWindToggled && !state.domainAverageWindInputTableOk){ ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "Bad wind inputs; hover over red cells for explanation."); state.domainAverageWindOk = false; } else { ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); state.domainAverageWindOk = false; } @@ -253,11 +260,17 @@ static void refreshUI(const Ui::MainWindow* ui) ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad wind input."); } - // Track solver + // Update solve state if (state.solverMethodologyOk && state.inputsOk) { ui->solveButton->setEnabled(true); + ui->solverPageSolveBtn->setEnabled(true); + ui->solveButton->setToolTip(""); + ui->solverPageSolveBtn->setToolTip(""); } else { ui->solveButton->setEnabled(false); + ui->solverPageSolveBtn->setEnabled(false); + ui->solveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); + ui->solverPageSolveBtn->setToolTip("Solver Methodology and Inputs must be passing to solve."); } } @@ -374,27 +387,57 @@ void MainWindow::on_meshResType_currentIndexChanged(int index) { switch(index) { case 0: - ui->customMeshResValue->setValue(256.34); - ui->customMeshResValue->setEnabled(false); + ui->meshResValue->setValue(256.34); + ui->meshResValue->setEnabled(false); break; case 1: - ui->customMeshResValue->setValue(162.12); - ui->customMeshResValue->setEnabled(false); + ui->meshResValue->setValue(162.12); + ui->meshResValue->setEnabled(false); break; case 2: - ui->customMeshResValue->setValue(114.64); - ui->customMeshResValue->setEnabled(false); + ui->meshResValue->setValue(114.64); + ui->meshResValue->setEnabled(false); break; case 3: - ui->customMeshResValue->setEnabled(true); + ui->meshResValue->setEnabled(true); break; } } +// User selects a new time zone +void MainWindow::on_timeZoneSelector_currentIndexChanged(int index) +{ + emit timeZoneDetailsRequest(); +} + +// User toggles show all time zones +void MainWindow::on_showAllTimeZones_clicked() +{ + AppState& state = AppState::instance(); + + // Update show all zones state + state.showAllZones = ui->showAllTimeZones->isChecked(); + + emit timeZoneDataRequest(); +} + +// User toggles show time zone details +void MainWindow::on_displayTimeZoneDetails_clicked() +{ + AppState& state = AppState::instance(); + + // Update time zone details state + state.displayTimeZoneDetails = ui->displayTimeZoneDetails->isChecked(); + + // Update visibility of details pane + ui->timeZoneDetails->setVisible(state.displayTimeZoneDetails); + +} + // User selects Diurnal Input void MainWindow::on_useDiurnalWind_clicked() { @@ -402,6 +445,23 @@ void MainWindow::on_useDiurnalWind_clicked() // Update UI state state.diurnalInputToggled = ui->useDiurnalWind->isChecked(); + + // Change the domain average input table based on diurnal wind + QTableWidget* table = ui->windTableData; + if (!ui->useDiurnalWind->isChecked()) { + table->hideColumn(2); + table->hideColumn(3); + table->hideColumn(4); + table->hideColumn(5); + ui->windTableData->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + } else { + table->showColumn(2); + table->showColumn(3); + table->showColumn(4); + table->showColumn(5); + ui->windTableData->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + } + refreshUI(ui); } @@ -473,6 +533,84 @@ void MainWindow::on_domainAvgPicklist_currentIndexChanged(int index) void MainWindow::on_clearDAWtable_clicked() { ui->windTableData->clearContents(); + invalidDAWCells.clear(); + AppState::instance().domainAverageWindInputTableOk = true; + refreshUI(ui); +} + +// User changes a value in the domain average wind input table +void MainWindow::on_windTableData_cellChanged(int row, int column) +{ + QTableWidget* table = ui->windTableData; + QTableWidgetItem* item = table->item(row, column); + if (!item) return; + + QString value = item->text().trimmed(); + bool valid = false; + QString errorMessage; + + // Allow empty input + if (value.isEmpty()) { + valid = true; + } else { + switch (column) { + case 0: { + double d = value.toDouble(&valid); + if (!valid || d <= 0) + errorMessage = "Must be a positive number"; + break; + } + case 1: { + int i = value.toDouble(&valid); + if (!valid || i < 0 || i > 359.9) { + valid = false; + errorMessage = "Must be a number between 0 and 359"; + } + break; + } + case 2: { + QTime t = QTime::fromString(value, "hh:mm"); + valid = t.isValid(); + if (!valid) errorMessage = "Must be a valid 24h time (hh:mm)"; + break; + } + case 3: { + QDate d = QDate::fromString(value, "mm/dd/yyyy"); + valid = d.isValid(); + if (!valid) errorMessage = "Must be a valid date (MM/DD/YYYY)"; + break; + } + case 4: { + int i = value.toDouble(&valid); + if (!valid || i < 0 || i > 100) { + valid = false; + errorMessage = "Must be a number between 0 and 100"; + } + break; + } + case 5: { + value.toInt(&valid); + if (!valid) errorMessage = "Must be an integer"; + break; + } + default: + valid = true; + } + } + + QPair cell(row, column); + if (!valid) { + invalidDAWCells.insert(cell); + item->setBackground(Qt::red); + item->setToolTip(errorMessage); + } else { + invalidDAWCells.remove(cell); + item->setBackground(QBrush()); // Reset to default + item->setToolTip(""); + } + + AppState::instance().domainAverageWindInputTableOk = invalidDAWCells.isEmpty(); + refreshUI(ui); } // User selects Point Initialization wind model @@ -515,6 +653,34 @@ void MainWindow::on_useWeatherModelInit_clicked() refreshUI(ui); } +// User selects a new output location +void MainWindow::on_outputSaveLocationBtn_clicked() +{ + QString currentPath = ui->outputDirectory->toPlainText(); + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + QString dirPath = QFileDialog::getExistingDirectory(this, + "Select a directory", // Window title + currentPath, // Starting location + QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); + + if (!dirPath.isEmpty()) { + ui->outputDirectory->setText(dirPath); + ui->outputDirectory->setToolTip(dirPath); + } +} + +// User selects the solve button on the solver page +void MainWindow::on_solverPageSolveBtn_clicked() +{ + ui->solveButton->click(); +} + +// User selects the primary solve button +void MainWindow::on_solveButton_clicked() +{ + emit solveRequest(); +} + // Enable double clicking on tree menu items void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column) { @@ -628,17 +794,18 @@ MainWindow::MainWindow(QWidget *parent) // Top-level items ui->stackedInputPage->setCurrentIndex(0); ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); // Solver Methodology (Page 0) - ui->treeWidget->topLevelItem(1)->setData(0, Qt::UserRole, 4); // Inputs (Page 4) + ui->treeWidget->topLevelItem(1)->setData(0, Qt::UserRole, 4); // Inputs (Page 5) + ui->treeWidget->topLevelItem(2)->setData(0, Qt::UserRole, 12); // Inputs (Page 13) // Sub-items for Solver Methodology ui->treeWidget->topLevelItem(0)->child(0)->setData(0, Qt::UserRole, 2); // Conservation of Mass (Page 1) ui->treeWidget->topLevelItem(0)->child(1)->setData(0, Qt::UserRole, 3); // Conservation of Mass and Momentum (Page 2) // Sub-items for Inputs - ui->treeWidget->topLevelItem(1)->child(0)->setData(0, Qt::UserRole, 5); // Surface Input (Page 5) - ui->treeWidget->topLevelItem(1)->child(1)->setData(0, Qt::UserRole, 6); // Dirunal Input (Page 6) - ui->treeWidget->topLevelItem(1)->child(2)->setData(0, Qt::UserRole, 7); // Stability Input (Page 7) - ui->treeWidget->topLevelItem(1)->child(3)->setData(0, Qt::UserRole, 8); // Wind Input (Page 8) + ui->treeWidget->topLevelItem(1)->child(0)->setData(0, Qt::UserRole, 5); // Surface Input (Page 6) + ui->treeWidget->topLevelItem(1)->child(1)->setData(0, Qt::UserRole, 6); // Dirunal Input (Page 7) + ui->treeWidget->topLevelItem(1)->child(2)->setData(0, Qt::UserRole, 7); // Stability Input (Page 8) + ui->treeWidget->topLevelItem(1)->child(3)->setData(0, Qt::UserRole, 8); // Wind Input (Page 9) // Sub-sub-items for Wind Input QTreeWidgetItem *windInputItem = ui->treeWidget->topLevelItem(1)->child(3); @@ -649,11 +816,43 @@ MainWindow::MainWindow(QWidget *parent) connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::onTreeItemClicked); /* - * * Downloaded Forecast explorer - * */ populateForecastDownloads(); + + /* + * Basic initial setup steps + */ + + // Surface Input window + // Set icons + ui->openFileButton->setIcon(QIcon(":/folder.png")); + ui->getFromMapButton->setIcon(QIcon(":/swoop_final.png")); + + // Solver window + // Update processor count and set user input default value & upper bound + int cpuCount = QThread::idealThreadCount(); + ui->availableProcessors->setPlainText("Available Processors: " + QString::number(cpuCount)); + ui->numProcessorsSpinbox->setMaximum(cpuCount); + ui->numProcessorsSpinbox->setValue(cpuCount); + + // Wind Input -> Point Init window + ui->downloadPointInitData->setIcon(QIcon(":/application_get")); + + // Populate default location for output location + ui->outputDirectory->setText(downloadsPath); + ui->outputSaveLocationBtn->setIcon(QIcon(":/folder.png")); + + // Set initial visibility of time zone details + ui->timeZoneDetails->setVisible(false); + + // Set initial formatting of domain average input table + ui->windTableData->hideColumn(2); + ui->windTableData->hideColumn(3); + ui->windTableData->hideColumn(4); + ui->windTableData->hideColumn(5); + ui->windTableData->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + } diff --git a/src/gui/qt6/mainwindow.h b/src/gui/qt6/mainwindow.h index 307efe7e7..7d38e4351 100644 --- a/src/gui/qt6/mainwindow.h +++ b/src/gui/qt6/mainwindow.h @@ -16,6 +16,7 @@ class MainWindow : public QMainWindow { Q_OBJECT public: + Ui::MainWindow* getUi() const { return ui; } void populateForecastDownloads(); void toggleExpandCollapse(const QModelIndex &index); MainWindow(QWidget *parent = nullptr); @@ -29,7 +30,6 @@ private slots: void on_openFileButton_clicked(); - void on_elevFilePath_textChanged(const QString &arg1); void on_meshResType_currentIndexChanged(int index); @@ -50,8 +50,28 @@ private slots: void on_clearDAWtable_clicked(); + void on_solveButton_clicked(); + + void on_outputSaveLocationBtn_clicked(); + + void on_solverPageSolveBtn_clicked(); + + void on_showAllTimeZones_clicked(); + + void on_displayTimeZoneDetails_clicked(); + + void on_timeZoneSelector_currentIndexChanged(int index); + + void on_windTableData_cellChanged(int row, int column); + +signals: + void solveRequest(); + void timeZoneDataRequest(); + void timeZoneDetailsRequest(); + private: void onTreeItemClicked(QTreeWidgetItem *item, int column); + QSet> invalidDAWCells; // DEM inputs double northLat; diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui index d3dce0a29..539ffb6cc 100644 --- a/src/gui/qt6/mainwindow.ui +++ b/src/gui/qt6/mainwindow.ui @@ -175,9 +175,6 @@ - - 0 - 0 @@ -444,6 +441,11 @@ + + + Solver + + @@ -498,7 +500,7 @@ 9 - + 0 @@ -1004,7 +1006,7 @@ li.checked::marker { content: "\2612"; } - + false @@ -1099,32 +1101,78 @@ li.checked::marker { content: "\2612"; } Time Zone - - - + + + + + + 0 + 0 + + + + + 150 + 0 + + + + + 150 + 16777215 + + PointingHandCursor - - Show All Zones + + + + + -1 + + + 10 + + + QComboBox::SizeAdjustPolicy::AdjustToContentsOnFirstShow - - + + - + 0 0 - - PointingHandCursor + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Name: Mountain Standard Time</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Name: Mountain Daylight Time</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Offset from UTC: -07:00:00</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Offset from UTC: -06:00:00</p></body></html> + + + Qt::TextInteractionFlag::NoTextInteraction + + + 0 + 0 + + PointingHandCursor @@ -1146,19 +1194,35 @@ li.checked::marker { content: "\2612"; } - - + + - + 0 0 - - Qt::TextInteractionFlag::NoTextInteraction + + PointingHandCursor + + + Show All Zones + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + @@ -1685,6 +1749,15 @@ li.checked::marker { content: "\2612"; } 0 + + true + + + QAbstractItemView::DragDropMode::DragDrop + + + Qt::DropAction::MoveAction + true @@ -2196,10 +2269,10 @@ li.checked::marker { content: "\2612"; } - + - 120 + 140 16777215 @@ -2553,6 +2626,263 @@ li.checked::marker { content: "\2612"; } + + + + QLayout::SizeConstraint::SetDefaultConstraint + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 0 + 0 + + + + + 16777215 + 25 + + + + + 0 + 0 + + + + QFrame::Shape::NoFrame + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + true + + + + + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 175 + 25 + + + + + 0 + 0 + + + + QFrame::Shape::NoFrame + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + true + + + Number of Processors: + + + + + + + PointingHandCursor + + + 1 + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 + 0 + + + + + 16777215 + 25 + + + + QFrame::Shape::NoFrame + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + true + + + Output Directory + + + + + + + 10 + + + + + + 0 + 0 + + + + + 300 + 30 + + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + true + + + + + + + PointingHandCursor + + + Output Location + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + false + + + + 0 + 0 + + + + PointingHandCursor + + + Solve + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + @@ -2723,7 +3053,7 @@ QMenu::item:selected { Instructions - + @@ -2785,7 +3115,7 @@ QMenu::item:selected { Tutorial 4: Weather Model Initialization - + DEM Download diff --git a/src/gui/qt6/modeldata.h b/src/gui/qt6/modeldata.h index 6a02b964e..a63dde9e8 100755 --- a/src/gui/qt6/modeldata.h +++ b/src/gui/qt6/modeldata.h @@ -21,7 +21,7 @@ class BaseInput { int numNinjas; public: - virtual ~BaseInput() {} + BaseInput() {} // Constructor BaseInput(string demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, @@ -51,11 +51,9 @@ class DomainAverageWind : public BaseInput { public: // Constructor - DomainAverageWind(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, - int nLayers, int diurnalFlag, double height, string heightUnits, bool momentumFlag, int numNinjas, + DomainAverageWind(const BaseInput& baseInput, vector speedList, string speedUnits, vector directionList) - : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, heightUnits, momentumFlag, numNinjas), - speedList(speedList), speedUnits(speedUnits), directionList(directionList) {} + : BaseInput(baseInput), speedList(speedList), speedUnits(speedUnits), directionList(directionList) {} // Getter methods vector getSpeedList() { return speedList; } diff --git a/src/gui/qt6/provider.cpp b/src/gui/qt6/provider.cpp index 33824b61f..8ce76dfb1 100755 --- a/src/gui/qt6/provider.cpp +++ b/src/gui/qt6/provider.cpp @@ -3,8 +3,12 @@ #include "../../ninja/windninja.h" #include -#include #include +#include +#include +#include +#include +#include using namespace std; @@ -15,13 +19,11 @@ const int nCPUs = 1; char ** papszOptions = NULL; NinjaErr err = 0; -int NinjaSim::domain_average_exec(DomainAverageWind& input) { +int Provider::domain_average_exec(DomainAverageWind& input) { std::vector speedVector = input.getSpeedList(); const double* speedList = speedVector.data(); - std::vector directionVector = input.getDirectionList(); const double* directionList = speedVector.data(); - const char * demFile = input.getDemFile().c_str(); double outputResolution = input.getOutputResolution(); const char* initializationMethod = input.getInitializationMethod().c_str(); @@ -189,7 +191,7 @@ int NinjaSim::domain_average_exec(DomainAverageWind& input) { return NINJA_SUCCESS; } -int NinjaSim::point_exec(PointInitialization& input) { +int Provider::point_exec(PointInitialization& input) { /* * Setting up the simulation */ @@ -329,7 +331,7 @@ int NinjaSim::point_exec(PointInitialization& input) { return NINJA_SUCCESS; } -int NinjaSim::wxmodel_exec(WeatherModel& input) { +int Provider::wxmodel_exec(WeatherModel& input) { /* * Setting up the simulation */ @@ -502,25 +504,182 @@ int NinjaSim::wxmodel_exec(WeatherModel& input) { return NINJA_SUCCESS; } -NinjaSim::NinjaSim(BaseInput& input) { - if (input.getInitializationMethod() == "domain_average") { - if (auto* domainWind = dynamic_cast(&input)) { - domain_average_exec(*domainWind); +Provider::Provider() { + +} + +// Time zone data provider +QVector> Provider::getTimeZoneData() { + AppState& state = AppState::instance(); + QVector> fullData; + QVector> americaData; + + QFile file(":/date_time_zonespec.csv"); + + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qDebug() << "Failed to open CSV file."; + return fullData; + } + + QTextStream in(&file); + bool firstLine = true; + + while (!in.atEnd()) { + QString line = in.readLine(); + + if (firstLine) { + firstLine = false; + continue; + } + + QStringList tokens = line.split(",", Qt::KeepEmptyParts); + QVector row; + for (const QString& token : tokens) + row.append(token.trimmed().remove('"')); + + if (!row.isEmpty()) + fullData.append(row); + + if (!row.isEmpty()) { + QStringList parts = row[0].split("/", Qt::KeepEmptyParts); + if (!parts.isEmpty() && parts[0] == "America" || row[0] == "Pacific/Honolulu") { + americaData.append(row); + } } - }else if (input.getInitializationMethod() == "point") { - if (auto* pointWind = dynamic_cast(&input)) { - point_exec(*pointWind); + } + + file.close(); + + if (state.showAllZones) { + return fullData; + } else { + return americaData; + } + +} + +// Provider for getting time zone details +QString Provider::getTimeZoneDetails(const QString& currentTimeZone) { + QVector matchedRow; + QFile file(":/date_time_zonespec.csv"); + + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qWarning() << "Failed to open date_time_zonespec.csv"; + return "No data found"; + } + + QTextStream in(&file); + bool firstLine = true; + + while (!in.atEnd()) { + QString line = in.readLine(); + + if (firstLine) { + firstLine = false; + continue; // skip header } - }else if (input.getInitializationMethod() == "wxmodel") { - if (auto* weatherWind = dynamic_cast(&input)) { - wxmodel_exec(*weatherWind); + + QStringList tokens = line.split(",", Qt::KeepEmptyParts); + QVector row; + + for (const QString& token : tokens) + row.append(token.trimmed().remove("\"")); + + QString fullZone = row.mid(0, 1).join("/"); + + if (fullZone == currentTimeZone) { + matchedRow = row; + break; } - }else{ - //error state } + + file.close(); + + if (matchedRow.isEmpty()) { + return "No matching time zone found."; + } + + QString standardName = matchedRow.value(2); + QString daylightName = matchedRow.value(4); + QString stdOffsetStr = matchedRow.value(5); // Already in HH:MM:SS + QString dstAdjustStr = matchedRow.value(6); // Already in HH:MM:SS + + // Function to convert signed HH:MM:SS to total seconds + auto timeToSeconds = [](const QString& t) -> int { + QString s = t.trimmed(); + bool negative = s.startsWith('-'); + s = s.remove(QChar('+')).remove(QChar('-')); + + QStringList parts = s.split(':'); + if (parts.size() != 3) return 0; + + int h = parts[0].toInt(); + int m = parts[1].toInt(); + int sec = parts[2].toInt(); + + int total = h * 3600 + m * 60 + sec; + return negative ? -total : total; + }; + + // Convert total seconds back to HH:MM:SS with sign + auto secondsToTime = [](int totalSec) -> QString { + QChar sign = totalSec < 0 ? '-' : '+'; + totalSec = std::abs(totalSec); + + int h = totalSec / 3600; + int m = (totalSec % 3600) / 60; + int s = totalSec % 60; + + return QString("%1%2:%3:%4") + .arg(sign) + .arg(h, 2, 10, QChar('0')) + .arg(m, 2, 10, QChar('0')) + .arg(s, 2, 10, QChar('0')); + }; + + int stdSecs = timeToSeconds(stdOffsetStr); + int dstSecs = timeToSeconds(dstAdjustStr); + QString combinedOffsetStr = secondsToTime(stdSecs + dstSecs); + + return QString("Standard Name:\t\t%1\n" + "Daylight Name:\t\t%2\n" + "Standard Offset from UTC:\t%3\n" + "Daylight Offset from UTC:\t%4") + .arg(standardName) + .arg(daylightName) + .arg(stdOffsetStr) + .arg(combinedOffsetStr); } +// Provider for parsing the domain average wind table +QVector> Provider::parseDomainAvgTable(QTableWidget* table) { + QVector> result; + + int rowCount = table->rowCount(); + int colCount = table->columnCount(); + + for (int row = 0; row < rowCount; ++row) { + bool rowComplete = true; + QVector rowData; + for (int col = 0; col < colCount; ++col) { + if (table->isColumnHidden(col)) { + continue; // skip this column entirely + } + QTableWidgetItem* item = table->item(row, col); + if (!item || item->text().trimmed().isEmpty()) { + rowComplete = false; + break; + } + rowData.append(item->text().trimmed()); + } + + if (rowComplete) { + result.append(rowData); + } + } + return result; +} diff --git a/src/gui/qt6/provider.h b/src/gui/qt6/provider.h index 0858bdd05..4e801ad44 100755 --- a/src/gui/qt6/provider.h +++ b/src/gui/qt6/provider.h @@ -1,14 +1,13 @@ -// -// Created by Codsl on 4/8/2025. -// - #ifndef PROVIDER_H #define PROVIDER_H +#include "appstate.h" #include "modeldata.h" +#include +#include #include -class NinjaSim { +class Provider { private: class NinjaArmyH* ninjaArmy = nullptr; const char* comType = "cli"; @@ -16,12 +15,15 @@ class NinjaSim { char** papszOptions = nullptr; int err = 0; - int domain_average_exec(class DomainAverageWind& input); int point_exec(class PointInitialization& input); int wxmodel_exec(class WeatherModel& input); public: - explicit NinjaSim(class BaseInput& input); + Provider(); + QVector> getTimeZoneData(); + QString getTimeZoneDetails(const QString& currentTimeZone); + QVector> parseDomainAvgTable(QTableWidget* table); + int domain_average_exec(class DomainAverageWind& input); }; #endif //PROVIDER_H diff --git a/wn-resources.qrc b/wn-resources.qrc index 41a71c2bf..18823087e 100644 --- a/wn-resources.qrc +++ b/wn-resources.qrc @@ -33,5 +33,6 @@ images/icons/weather_sun.png images/icons/wn-desktop.ico images/icons/wn-icon.png + data/date_time_zonespec.csv From 564c76b5008e4f0371c3193f0c008faeb5bfe673 Mon Sep 17 00:00:00 2001 From: Codymm03 Date: Sun, 20 Apr 2025 09:59:07 -0600 Subject: [PATCH 037/435] Commit Leaflet Adjustments --- data/leaflet/L.KML.js | 482 ++++++++++++++++++++++++++++++++++++++ data/leaflet/jszip.min.js | 13 + data/map.html | 52 ++++ src/gui/qt6/provider.cpp | 36 +++ 4 files changed, 583 insertions(+) create mode 100755 data/leaflet/L.KML.js create mode 100755 data/leaflet/jszip.min.js mode change 100644 => 100755 data/map.html diff --git a/data/leaflet/L.KML.js b/data/leaflet/L.KML.js new file mode 100755 index 000000000..2f05068d9 --- /dev/null +++ b/data/leaflet/L.KML.js @@ -0,0 +1,482 @@ +/*! + Copyright (c) 2011-2015, Pavel Shramov, Bruno Bergot - MIT licence +*/ + +L.KML = L.FeatureGroup.extend({ + + initialize: function (kml, kmlOptions) { + this._kml = kml; + this._layers = {}; + this._kmlOptions = kmlOptions; + + if (kml) { + this.addKML(kml, kmlOptions); + } + }, + + addKML: function (xml, kmlOptions) { + var layers = L.KML.parseKML(xml, kmlOptions); + if (!layers || !layers.length) return; + for (var i = 0; i < layers.length; i++) { + this.fire('addlayer', { + layer: layers[i] + }); + this.addLayer(layers[i]); + } + this.latLngs = L.KML.getLatLngs(xml); + this.fire('loaded'); + }, + + latLngs: [] +}); + +L.Util.extend(L.KML, { + + parseKML: function (xml, kmlOptions) { + var style = this.parseStyles(xml, kmlOptions); + this.parseStyleMap(xml, style); + var el = xml.getElementsByTagName('Folder'); + var layers = [], l; + for (var i = 0; i < el.length; i++) { + if (!this._check_folder(el[i])) { continue; } + l = this.parseFolder(el[i], style); + if (l) { layers.push(l); } + } + el = xml.getElementsByTagName('Placemark'); + for (var j = 0; j < el.length; j++) { + if (!this._check_folder(el[j])) { continue; } + l = this.parsePlacemark(el[j], xml, style); + if (l) { layers.push(l); } + } + el = xml.getElementsByTagName('GroundOverlay'); + for (var k = 0; k < el.length; k++) { + l = this.parseGroundOverlay(el[k]); + if (l) { layers.push(l); } + } + return layers; + }, + + // Return false if e's first parent Folder is not [folder] + // - returns true if no parent Folders + _check_folder: function (e, folder) { + e = e.parentNode; + while (e && e.tagName !== 'Folder') + { + e = e.parentNode; + } + return !e || e === folder; + }, + + parseStyles: function (xml, kmlOptions) { + var styles = {}; + var sl = xml.getElementsByTagName('Style'); + for (var i=0, len=sl.length; i 1) { + layer = new L.FeatureGroup(layers); + } + + this.addPlacePopup(place, layer); + return layer; + }, + + addPlacePopup: function(place, layer) { + var el, i, j, name, descr = ''; + el = place.getElementsByTagName('name'); + if (el.length && el[0].childNodes.length) { + name = el[0].childNodes[0].nodeValue; + } + el = place.getElementsByTagName('description'); + for (i = 0; i < el.length; i++) { + for (j = 0; j < el[i].childNodes.length; j++) { + descr = descr + el[i].childNodes[j].nodeValue; + } + } + + if (name) { + layer.bindPopup('

' + name + '

' + descr, { className: 'kml-popup'}); + } + }, + + parseCoords: function (xml) { + var el = xml.getElementsByTagName('coordinates'); + return this._read_coords(el[0]); + }, + + parseLineString: function (line, xml, options) { + var coords = this.parseCoords(line); + if (!coords.length) { return; } + return new L.Polyline(coords, options); + }, + + parseTrack: function (line, xml, options) { + var el = xml.getElementsByTagName('gx:coord'); + if (el.length === 0) { el = xml.getElementsByTagName('coord'); } + var coords = []; + for (var j = 0; j < el.length; j++) { + coords = coords.concat(this._read_gxcoords(el[j])); + } + if (!coords.length) { return; } + return new L.Polyline(coords, options); + }, + + parsePoint: function (line, xml, options) { + var el = line.getElementsByTagName('coordinates'); + if (!el.length) { + return; + } + var ll = el[0].childNodes[0].nodeValue.split(','); + return new L.KMLMarker(new L.LatLng(ll[1], ll[0]), options); + }, + + parsePolygon: function (line, xml, options) { + var el, polys = [], inner = [], i, coords; + el = line.getElementsByTagName('outerBoundaryIs'); + for (i = 0; i < el.length; i++) { + coords = this.parseCoords(el[i]); + if (coords) { + polys.push(coords); + } + } + el = line.getElementsByTagName('innerBoundaryIs'); + for (i = 0; i < el.length; i++) { + coords = this.parseCoords(el[i]); + if (coords) { + inner.push(coords); + } + } + if (!polys.length) { + return; + } + if (options.fillColor) { + options.fill = true; + } + if (polys.length === 1) { + return new L.Polygon(polys.concat(inner), options); + } + return new L.MultiPolygon(polys, options); + }, + + getLatLngs: function (xml) { + var el = xml.getElementsByTagName('coordinates'); + var coords = []; + for (var j = 0; j < el.length; j++) { + // text might span many childNodes + coords = coords.concat(this._read_coords(el[j])); + } + return coords; + }, + + _read_coords: function (el) { + var text = '', coords = [], i; + for (i = 0; i < el.childNodes.length; i++) { + text = text + el.childNodes[i].nodeValue; + } + text = text.split(/[\s\n]+/); + for (i = 0; i < text.length; i++) { + var ll = text[i].split(','); + if (ll.length < 2) { + continue; + } + coords.push(new L.LatLng(ll[1], ll[0])); + } + return coords; + }, + + _read_gxcoords: function (el) { + var text = '', coords = []; + text = el.firstChild.nodeValue.split(' '); + coords.push(new L.LatLng(text[1], text[0])); + return coords; + }, + + parseGroundOverlay: function (xml) { + var latlonbox = xml.getElementsByTagName('LatLonBox')[0]; + var bounds = new L.LatLngBounds( + [ + latlonbox.getElementsByTagName('south')[0].childNodes[0].nodeValue, + latlonbox.getElementsByTagName('west')[0].childNodes[0].nodeValue + ], + [ + latlonbox.getElementsByTagName('north')[0].childNodes[0].nodeValue, + latlonbox.getElementsByTagName('east')[0].childNodes[0].nodeValue + ] + ); + var attributes = {Icon: true, href: true, color: true}; + function _parse (xml) { + var options = {}, ioptions = {}; + for (var i = 0; i < xml.childNodes.length; i++) { + var e = xml.childNodes[i]; + var key = e.tagName; + if (!attributes[key]) { continue; } + var value = e.childNodes[0].nodeValue; + if (key === 'Icon') { + ioptions = _parse(e); + if (ioptions.href) { options.href = ioptions.href; } + } else if (key === 'href') { + options.href = value; + } else if (key === 'color') { + options.opacity = parseInt(value.substring(0, 2), 16) / 255.0; + options.color = '#' + value.substring(6, 8) + value.substring(4, 6) + value.substring(2, 4); + } + } + return options; + } + var options = {}; + options = _parse(xml); + if (latlonbox.getElementsByTagName('rotation')[0] !== undefined) { + var rotation = latlonbox.getElementsByTagName('rotation')[0].childNodes[0].nodeValue; + options.rotation = parseFloat(rotation); + } + return new L.RotatedImageOverlay(options.href, bounds, {opacity: options.opacity, angle: options.rotation}); + } + +}); + +L.KMLIcon = L.Icon.extend({ + options: { + iconSize: [32, 32], + iconAnchor: [16, 16], + }, + _setIconStyles: function (img, name) { + L.Icon.prototype._setIconStyles.apply(this, [img, name]); + }, + _createImg: function (src, el) { + el = el || document.createElement('img'); + el.onload = this.applyCustomStyles.bind(this,el) + el.src = src; + return el; + }, + applyCustomStyles: function(img) { + var options = this.options; + var width = options.iconSize[0]; + var height = options.iconSize[1]; + + this.options.popupAnchor = [0,(-0.83*height)]; + if (options.anchorType.x === 'fraction') + img.style.marginLeft = (-options.anchorRef.x * width) + 'px'; + if (options.anchorType.y === 'fraction') + img.style.marginTop = ((-(1 - options.anchorRef.y) * height) + 1) + 'px'; + if (options.anchorType.x === 'pixels') + img.style.marginLeft = (-options.anchorRef.x) + 'px'; + if (options.anchorType.y === 'pixels') + img.style.marginTop = (options.anchorRef.y - height + 1) + 'px'; + } +}); + + +L.KMLMarker = L.Marker.extend({ + options: { + icon: new L.KMLIcon.Default() + } +}); + +// Inspired by https://github.com/bbecquet/Leaflet.PolylineDecorator/tree/master/src +L.RotatedImageOverlay = L.ImageOverlay.extend({ + options: { + angle: 0 + }, + _reset: function () { + L.ImageOverlay.prototype._reset.call(this); + this._rotate(); + }, + _animateZoom: function (e) { + L.ImageOverlay.prototype._animateZoom.call(this, e); + this._rotate(); + }, + _rotate: function () { + if (L.DomUtil.TRANSFORM) { + // use the CSS transform rule if available + this._image.style[L.DomUtil.TRANSFORM] += ' rotate(' + this.options.angle + 'deg)'; + } else if (L.Browser.ie) { + // fallback for IE6, IE7, IE8 + var rad = this.options.angle * (Math.PI / 180), + costheta = Math.cos(rad), + sintheta = Math.sin(rad); + this._image.style.filter += ' progid:DXImageTransform.Microsoft.Matrix(sizingMethod=\'auto expand\', M11=' + + costheta + ', M12=' + (-sintheta) + ', M21=' + sintheta + ', M22=' + costheta + ')'; + } + }, + getBounds: function () { + return this._bounds; + } +}); diff --git a/data/leaflet/jszip.min.js b/data/leaflet/jszip.min.js new file mode 100755 index 000000000..ff4cfd5e8 --- /dev/null +++ b/data/leaflet/jszip.min.js @@ -0,0 +1,13 @@ +/*! + +JSZip v3.10.1 - A JavaScript class for generating and reading zip files + + +(c) 2009-2016 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/main/LICENSE +*/ + +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t="function"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error("Cannot find module '"+r+"'");throw n.code="MODULE_NOT_FOUND",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l="function"==typeof require&&require,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{"./support":30,"./utils":32}],2:[function(e,t,r){"use strict";var n=e("./external"),i=e("./stream/DataWorker"),s=e("./stream/Crc32Probe"),a=e("./stream/DataLengthProbe");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")),t=this;return e.on("end",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a("uncompressedSize")).pipe(t.compressWorker(r)).pipe(new a("compressedSize")).withStreamInfo("compression",t)},t.exports=o},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,r){"use strict";var n=e("./stream/GenericWorker");r.STORE={magic:"\0\0",compressWorker:function(){return new n("STORE compression")},uncompressWorker:function(){return new n("STORE decompression")}},r.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,r){"use strict";var n=e("./utils");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{"./utils":32}],5:[function(e,t,r){"use strict";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){"use strict";var n=null;n="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,i=e("pako"),s=e("./utils"),a=e("./stream/GenericWorker"),o=n?"uint8array":"array";function h(e,t){a.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic="\b\0",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h("Deflate",e)},r.uncompressWorker=function(){return new h("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,r){"use strict";function A(e,t){var r,n="";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo("string",s(h.name)),c=I.transformTo("string",O.utf8encode(h.name)),d=h.comment,p=I.transformTo("string",s(d)),m=I.transformTo("string",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b="",v="",y="",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),"UNIX"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+="up"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+="uc"+A(y.length,2)+y);var E="";return E+="\n\0",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+"\0\0\0\0"+A(z,4)+A(n,4)+f+b+p}}var I=e("../utils"),i=e("../stream/GenericWorker"),O=e("../utf8"),B=e("../crc32"),R=e("../signature");function s(e,t,r,n){i.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{"../utils":32}],19:[function(e,t,r){"use strict";var n=e("./Uint8ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,r){"use strict";var n=e("./DataReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./DataReader":18}],21:[function(e,t,r){"use strict";var n=e("./ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,r){"use strict";var n=e("../utils"),i=e("../support"),s=e("./ArrayReader"),a=e("./StringReader"),o=e("./NodeBufferReader"),h=e("./Uint8ArrayReader");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),"string"!==t||i.uint8array?"nodebuffer"===t?new o(e):i.uint8array?new h(n.transformTo("uint8array",e)):new s(n.transformTo("array",e)):new a(e)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,r){"use strict";r.LOCAL_FILE_HEADER="PK",r.CENTRAL_FILE_HEADER="PK",r.CENTRAL_DIRECTORY_END="PK",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",r.ZIP64_CENTRAL_DIRECTORY_END="PK",r.DATA_DESCRIPTOR="PK\b"},{}],24:[function(e,t,r){"use strict";var n=e("./GenericWorker"),i=e("../utils");function s(e){n.call(this,"ConvertWorker to "+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,r){"use strict";var n=e("./GenericWorker"),i=e("../crc32");function s(){n.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,r){"use strict";function n(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r "+e:e}},t.exports=n},{}],29:[function(e,t,r){"use strict";var h=e("../utils"),i=e("./ConvertWorker"),s=e("./GenericWorker"),u=e("../base64"),n=e("../support"),a=e("../external"),o=null;if(n.nodestream)try{o=e("../nodejs/NodejsStreamOutputAdapter")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on("data",function(e,t){n.push(e),o&&o(t)}).on("error",function(e){n=[],r(e)}).on("end",function(){try{var e=function(e,t,r){switch(e){case"blob":return h.newBlob(h.transformTo("arraybuffer",t),r);case"base64":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?"uint8array":"array",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,a){"use strict";var o=e("./support"),h=e("./base64"),r=e("./nodejsUtils"),u=e("./external");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{"./common":41}],43:[function(e,t,r){"use strict";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){"use strict";var h,c=e("../utils/common"),u=e("./trees"),d=e("./adler32"),p=e("./crc32"),n=e("./messages"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg="incorrect header check",r.mode=30;break}if(8!=(15&u)){e.msg="unknown compression method",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg="invalid window size",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg="invalid bit length repeat",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg="invalid literal/length code",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg="invalid distance code",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{"../utils/common":41}],53:[function(e,t,r){"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){"use strict";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i="[object process]"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage("","*"),r.onmessage=t,e}}()?(a="setImmediate$"+Math.random()+"$",r.addEventListener?r.addEventListener("message",d,!1):r.attachEvent("onmessage",d),function(e){r.postMessage(a+e,"*")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&"onreadystatechange"in l.createElement("script")?(s=l.documentElement,function(e){var t=l.createElement("script");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),r=0;r + + + + + @@ -183,6 +188,13 @@ console.log(bounds); }); + + const baseMaps = {}; + const overlayMaps = {}; + const layerControl = L.control.layers(baseMaps, overlayMaps).addTo(map); + + loadKmzFromUrl(map, "big_butte_5_5_307m.kmz", layerControl); + loadKmzFromUrl(map, "big_butte_10_10_307m.kmz", layerControl); L.control.scale().addTo(map); @@ -316,6 +328,46 @@ document.getElementById("center_lon").removeEventListener("input", update_center); document.getElementById("radius").removeEventListener("input", update_center); } + + async function loadKmzFromUrl(map, kmzUrl, layerControl) { + try { + const response = await fetch(kmzUrl); + const arrayBuffer = await response.arrayBuffer(); + + const zip = await JSZip.loadAsync(arrayBuffer); + const kmlFiles = Object.values(zip.files).filter(entry => + entry.name.toLowerCase().endsWith('.kml') + ); + + if (kmlFiles.length === 0) { + alert('No KML files found in this KMZ.'); + return; + } + + const kmlGroup = L.featureGroup().addTo(map); + + for (const entry of kmlFiles) { + const kmlText = await entry.async('string'); + const parser = new DOMParser(); + const kml = parser.parseFromString(kmlText, 'text/xml'); + const track = new L.KML(kml); + kmlGroup.addLayer(track); + + const layerName = entry.name || 'Unnamed Layer'; + layerControl.addOverlay(track, layerName); + } + + setTimeout(() => { + if (kmlGroup.getLayers().length > 0) { + map.fitBounds(kmlGroup.getBounds()); + } + }, 1000); + + } catch (err) { + console.error('Failed to load KMZ from URL:', err); + } + } +
diff --git a/src/gui/qt6/provider.cpp b/src/gui/qt6/provider.cpp index b4a0c3b30..11503cc72 100755 --- a/src/gui/qt6/provider.cpp +++ b/src/gui/qt6/provider.cpp @@ -243,6 +243,8 @@ int Provider::point_exec(PointInitialization& input) { const char* heightUnits = input.getHeightUnits().c_str(); bool momentumFlag = input.getMomentumFlag(); unsigned int numNinjas = input.getNumNinjas(); + const char * outputPath = input.getOutputPath().c_str(); + ninjaArmy = NinjaMakePointArmy(&year, &month, &day, &hour, &minute, numNinjas, osTimeZone, station_path, elevation_file, matchPointFlag, momemtumFlag, papszOptions); @@ -262,6 +264,25 @@ int Provider::point_exec(PointInitialization& input) { */ for(unsigned int i=0; i Date: Mon, 21 Apr 2025 15:28:51 -0600 Subject: [PATCH 038/435] Added QT to JS kmz Map Execution, and setup prototype functions for future implementation. Then moved functions from datafetcher into provider. --- data/map.html | 6 +- src/gui/qt6/controller.cpp | 59 ++++++++++++++++ src/gui/qt6/controller.h | 2 + src/gui/qt6/mainwindow.cpp | 14 +++- src/gui/qt6/mainwindow.h | 5 ++ src/gui/qt6/modeldata.h | 12 ++-- src/gui/qt6/provider.cpp | 139 +++++++++++++++++++++++++++++++++++++ src/gui/qt6/provider.h | 14 +++- 8 files changed, 236 insertions(+), 15 deletions(-) diff --git a/data/map.html b/data/map.html index d974885d9..aaa02e51c 100755 --- a/data/map.html +++ b/data/map.html @@ -193,8 +193,8 @@ const overlayMaps = {}; const layerControl = L.control.layers(baseMaps, overlayMaps).addTo(map); - loadKmzFromUrl(map, "big_butte_5_5_307m.kmz", layerControl); - loadKmzFromUrl(map, "big_butte_10_10_307m.kmz", layerControl); + //loadKmzFromUrl("big_butte_5_5_307m.kmz"); + //loadKmzFromUrl("big_butte_10_10_307m.kmz"); L.control.scale().addTo(map); @@ -329,7 +329,7 @@ document.getElementById("radius").removeEventListener("input", update_center); } - async function loadKmzFromUrl(map, kmzUrl, layerControl) { + async function loadKmzFromUrl(kmzUrl) { try { const response = await fetch(kmzUrl); const arrayBuffer = await response.arrayBuffer(); diff --git a/src/gui/qt6/controller.cpp b/src/gui/qt6/controller.cpp index 970a3f2e7..dfd4c2e1a 100644 --- a/src/gui/qt6/controller.cpp +++ b/src/gui/qt6/controller.cpp @@ -1,4 +1,8 @@ #include "controller.h" +#include +#include + +using namespace std; Controller::Controller(MainWindow* view, QObject* parent) : QObject(parent), view(view) @@ -17,7 +21,19 @@ void Controller::onSolveRequest() { if (state.domainAverageWindOk) { DomainAverageWind domainAvgWind = setDomainAverageWind(); provider.domain_average_exec(domainAvgWind); + }else if(state.pointInitializationOk){ + PointInitialization pointInit = setPointInitialization(); + provider.point_exec(pointInit); + }else if(state.weatherModelOk){ + WeatherModel weatherModel = setWeatherModel(); + provider.wxmodel_exec(weatherModel); } + + + //Todo Implement File Search + vector tempListOfKmz = {"/home/vboxuser/Documents/windninja/data/big_butte_10_10_307m.kmz", "/home/vboxuser/Documents/windninja/data/big_butte_5_5_307m.kmz"}; + + view->loadMapKMZ(tempListOfKmz); } // Get time zone list from provider @@ -125,3 +141,46 @@ DomainAverageWind Controller::setDomainAverageWind() { directionList ); } + +PointInitialization Controller::setPointInitialization() { + //Todo Implement Point Methods + BaseInput baseInput = setBaseInput(); + + int year = 0; + int month = 0; + int day = 0; + int hour = 0; + int minute = 0; + char* station_path = "NULL"; + char* elevation_file = "NULL"; + char* osTimeZone= "NULL"; + bool matchPointFlag = false; + + return PointInitialization ( + baseInput, + year, + month, + day, + hour, + minute, + station_path, + elevation_file, + osTimeZone, + matchPointFlag + ); +} + + +WeatherModel Controller::setWeatherModel() { + //Todo Implement WeatherModel + BaseInput baseInput = setBaseInput(); + + char* forecast = "NULL"; + char* osTimeZone= "NULL"; + + return WeatherModel ( + baseInput, + forecast, + osTimeZone + ); +} diff --git a/src/gui/qt6/controller.h b/src/gui/qt6/controller.h index d4ae9cb64..2a839110e 100644 --- a/src/gui/qt6/controller.h +++ b/src/gui/qt6/controller.h @@ -18,6 +18,8 @@ class Controller : public QObject { Provider provider; BaseInput setBaseInput(); DomainAverageWind setDomainAverageWind(); + PointInitialization setPointInitialization(); + WeatherModel setWeatherModel(); void onSolveRequest(); void onTimeZoneDataRequest(); diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index 6147ecc43..a27fa9267 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -20,7 +20,8 @@ #include #include #include - +#include +#include // Menu filtering class class DirectoryFilterModel : public QSortFilterProxyModel { @@ -701,6 +702,17 @@ void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int colu } } +void MainWindow::loadMapKMZ(const std::vector& input){ + + for (const auto& dir : input) { + QString qDir = QString::fromStdString(dir).replace("\"", "\\\""); // escape quotes + QString jsCall = QString("loadKmzFromUrl(\"%1\");").arg(qDir); + + webView->page()->runJavaScript(jsCall); + } + + +} MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), diff --git a/src/gui/qt6/mainwindow.h b/src/gui/qt6/mainwindow.h index 7d38e4351..fd29766fe 100644 --- a/src/gui/qt6/mainwindow.h +++ b/src/gui/qt6/mainwindow.h @@ -5,6 +5,8 @@ #include #include #include "ui_mainwindow.h" +#include +#include QT_BEGIN_NAMESPACE namespace Ui { @@ -19,6 +21,8 @@ class MainWindow : public QMainWindow { Ui::MainWindow* getUi() const { return ui; } void populateForecastDownloads(); void toggleExpandCollapse(const QModelIndex &index); + void loadMapKMZ(const std::vector& input); + MainWindow(QWidget *parent = nullptr); ~MainWindow(); @@ -64,6 +68,7 @@ private slots: void on_windTableData_cellChanged(int row, int column); + signals: void solveRequest(); void timeZoneDataRequest(); diff --git a/src/gui/qt6/modeldata.h b/src/gui/qt6/modeldata.h index 5603d6aa8..751437d0b 100755 --- a/src/gui/qt6/modeldata.h +++ b/src/gui/qt6/modeldata.h @@ -77,11 +77,9 @@ class PointInitialization : public BaseInput { public: // Constructor - PointInitialization(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, - int nLayers, int diurnalFlag, double height, string heightUnits, bool momentumFlag, int numNinjas, string outputPath, + PointInitialization(const BaseInput& baseInput, int year, int month, int day, int hour, int minute, char* station_path, char* elevation_file, char* osTimeZone, bool matchPointFlag) - : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, heightUnits, momentumFlag, numNinjas, outputPath), - year(year), month(month), day(day), hour(hour), minute(minute), station_path(station_path), elevation_file(elevation_file), osTimeZone(osTimeZone), matchPointFlag(matchPointFlag) {} + : BaseInput(baseInput), year(year), month(month), day(day), hour(hour), minute(minute), station_path(station_path), elevation_file(elevation_file), osTimeZone(osTimeZone), matchPointFlag(matchPointFlag) {} // Getter methods int getYear() { return year; } @@ -102,11 +100,9 @@ class WeatherModel : public BaseInput { public: // Constructor - WeatherModel(char* demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, - int nLayers, int diurnalFlag, double height, string heightUnits, bool momentumFlag, int numNinjas, string outputPath, + WeatherModel(const BaseInput& baseInput, char* forecast, char* osTimeZone) - : BaseInput(demFile, outputResolution, initializationMethod, meshChoice, vegetation, nLayers, diurnalFlag, height, heightUnits, momentumFlag, numNinjas, outputPath), - forecast(forecast), osTimeZone(osTimeZone) {} + : BaseInput(baseInput), forecast(forecast), osTimeZone(osTimeZone) {} // Getter methods char* getForecast() { return forecast; } diff --git a/src/gui/qt6/provider.cpp b/src/gui/qt6/provider.cpp index 11503cc72..33c0ab494 100755 --- a/src/gui/qt6/provider.cpp +++ b/src/gui/qt6/provider.cpp @@ -735,3 +735,142 @@ QVector> Provider::parseDomainAvgTable(QTableWidget* table) { } return result; } + +int Provider::fetchDEMBoundingBox(const string demFileOutPut, const string fetch_type, int resolution, double* boundsBox) +{ + /* + * const char * demFile = "data/output.tif"; // output file name + * char * fetch_type = "gmted"; + * double resolution = 30; // 30 m resolution + * double boundsBox [] = {40.07, -104.0, 40.0, -104.07}; + */ + + /* + * Setting up NinjaArmy + */ + NinjaArmyH* ninjaArmy = NULL; + char ** papszOptions = NULL; + NinjaErr err = 0; + err = NinjaInit(papszOptions); // must be called for fetching and simulations + if(err != NINJA_SUCCESS) + { + printf("NinjaInit: err = %d\n", err); + } + /* + * Testing fetching from a DEM bounding box + */ + // Bounding box (north, east, south, west) + err = NinjaFetchDEMBBox(ninjaArmy, boundsBox, demFileOutPut.c_str(), resolution, strdup(fetch_type.c_str()), papszOptions); + if (err != NINJA_SUCCESS){ + printf("NinjaFetchDEMBBox: err = %d\n", err); + } + + return NINJA_SUCCESS; +} + +int Provider::fetchForecast(const string wx_model_type, int numNinjas, const string demFile){ + /* + * const char*wx_model_type = "NOMADS-HRRR-CONUS-3-KM"; + * int numNinjas = 2; + */ + + /* + * Setting up NinjaArmy + */ + NinjaArmyH* ninjaArmy = NULL; + char ** papszOptions = NULL; + NinjaErr err = 0; + err = NinjaInit(papszOptions); // must be called for fetching and simulations + if(err != NINJA_SUCCESS) + { + printf("NinjaInit: err = %d\n", err); + } + /* + * Testing fetching for a Forecast file (wx_model_type are the names listed in the weather station download in WindNinja) + */ + const char* forecastFilename = NinjaFetchForecast(ninjaArmy, wx_model_type.c_str(), numNinjas, demFile.c_str(), papszOptions); + if (strcmp(forecastFilename, "exception") == 0){ + printf("NinjaFetchForecast: err = %s\n", forecastFilename); + } + else{ + printf("NinjaFetchForecast: forecastFilename = %s\n", forecastFilename); + } + + return NINJA_SUCCESS; +} + +int Provider::fetchStationData(int year, int month, int day, int hour, int minute, int numNinjas, const string output_path, int bufferZone, const string bufferUnits, const string demFile, const string osTimeZone, int fetchLatestFlag){ + /* + * int year[1] = {2023}; + * int month[1] = {10}; + * int day[1] = {10}; + * int hour[1] = {12}; + * int minute[1] = {60}; + * const char* output_path = ""; + * const char* elevation_file = "data/missoula_valley.tif"; + * const char* osTimeZone = "UTC"; + * bool fetchLatestFlag = 1; + * / + + /* + * Setting up NinjaArmy + */ + NinjaArmyH* ninjaArmy = NULL; + char ** papszOptions = NULL; + NinjaErr err = 0; + err = NinjaInit(papszOptions); // must be called for fetching and simulations + if(err != NINJA_SUCCESS) + { + printf("NinjaInit: err = %d\n", err); + } + + /* + * Testing fetching station data from a geotiff file. + */ + + err = NinjaFetchStation(&year, &month, &day, &hour, &minute, numNinjas, demFile.c_str(), bufferZone, bufferUnits.c_str(), osTimeZone.c_str(), fetchLatestFlag, output_path.c_str(), papszOptions); + if (err != NINJA_SUCCESS) { + printf("NinjaFetchStation: err = %d\n", err); + } else { + printf("NinjaFetchStation: success\n"); + } + + return NINJA_SUCCESS; +} + +int Provider::fetchFromDEMPoint (double adfPoints[2], double adfBuff[2], const string units, double dfCellSize, const string pszDstFile, const string fetchtype){ + /* + * double adfPoint[] = {104.0, 40.07}; // Point coordinates (longitude, latitude) + * double adfBuff[] = {30, 30}; // Buffer to store the elevation value + * const char* units = "mi"; + * double dfCellSize = 30.0; // Cell size in meters + * char* pszDstFile = "data/dem_point_output.tif"; + * char* fetchType = "gmted"; + */ + + /* + * Setting up NinjaArmy + */ + NinjaArmyH* ninjaArmy = NULL; + char ** papszOptions = NULL; + NinjaErr err = 0; + err = NinjaInit(papszOptions); // must be called for fetching and simulations + if(err != NINJA_SUCCESS) + { + printf("NinjaInit: err = %d\n", err); + } + + + /* + * Testing fetching from a DEM point + */ + err = NinjaFetchDEMPoint(ninjaArmy, adfPoints, adfBuff, units.c_str(), dfCellSize, strdup(pszDstFile.c_str()), strdup(fetchtype.c_str()), papszOptions); + if (err != NINJA_SUCCESS) { + printf("NinjaFetchDemPoint: err = %d\n", err); + } else { + printf("NinjaFetchDemPoint: elevation = %f\n", adfBuff[0]); + } + + return NINJA_SUCCESS; +} + diff --git a/src/gui/qt6/provider.h b/src/gui/qt6/provider.h index 4e801ad44..54b193632 100755 --- a/src/gui/qt6/provider.h +++ b/src/gui/qt6/provider.h @@ -6,6 +6,9 @@ #include #include #include +#include + +using namespace std; class Provider { private: @@ -15,15 +18,20 @@ class Provider { char** papszOptions = nullptr; int err = 0; - int point_exec(class PointInitialization& input); - int wxmodel_exec(class WeatherModel& input); - public: Provider(); QVector> getTimeZoneData(); QString getTimeZoneDetails(const QString& currentTimeZone); QVector> parseDomainAvgTable(QTableWidget* table); int domain_average_exec(class DomainAverageWind& input); + int point_exec(class PointInitialization& input); + int wxmodel_exec(class WeatherModel& input); + + int fetchDEMBoundingBox(const string demFileOutPut, const string fetch_type, int resolution, double* boundsBox); + int fetchForecast(const string wx_model_type, int numNinjas, const string demFile); + int fetchStationData(int year, int month, int day, int hour, int minute, int numNinjas, const string output_path, int bufferZone, const string bufferUnits, const string demFile, const string osTimeZone, int fetchLatestFlag); + int fetchFromDEMPoint (double adfPoints[2], double adfBuff[2], const string units, double dfCellSize, const string pszDstFile, const string fetchtype); + }; #endif //PROVIDER_H From 94cb827698a831ce78cb4157137aff02313100f1 Mon Sep 17 00:00:00 2001 From: Codymm03 Date: Mon, 21 Apr 2025 15:33:19 -0600 Subject: [PATCH 039/435] removed datafetcher file --- src/gui/qt6/CMakeLists.txt | 2 +- src/gui/qt6/datafetcher.h | 154 ------------------------------------- 2 files changed, 1 insertion(+), 155 deletions(-) delete mode 100644 src/gui/qt6/datafetcher.h diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt index 3cc00d168..26e15622b 100755 --- a/src/gui/qt6/CMakeLists.txt +++ b/src/gui/qt6/CMakeLists.txt @@ -30,7 +30,7 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) modeldata.h provider.h controller.h controller.cpp - datafetcher.h + ) # Define target properties for Android with Qt 6 as: # set_property(TARGET qt6_application APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR diff --git a/src/gui/qt6/datafetcher.h b/src/gui/qt6/datafetcher.h deleted file mode 100644 index 96fc0fe49..000000000 --- a/src/gui/qt6/datafetcher.h +++ /dev/null @@ -1,154 +0,0 @@ -#ifndef DATAFETCHER_H -#define DATAFETCHER_H - -#include "../../ninja/windninja.h" -#include - -using namespace std; - -/*TODO: - * Implement exhaustive tests for all wx_model_types for NinjaFetchForecast - * Implement tests for NinjaFetchDemPoint (example code in apiTestPoint.c) and NinjaFetchStation - */ - -int fetchDEMBoundingBox(const string demFileOutPut, const string fetch_type, int resolution, double* boundsBox) -{ - /* - * const char * demFile = "data/output.tif"; // output file name - * char * fetch_type = "gmted"; - * double resolution = 30; // 30 m resolution - * double boundsBox [] = {40.07, -104.0, 40.0, -104.07}; - */ - - /* - * Setting up NinjaArmy - */ - NinjaArmyH* ninjaArmy = NULL; - char ** papszOptions = NULL; - NinjaErr err = 0; - err = NinjaInit(papszOptions); // must be called for fetching and simulations - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - } - /* - * Testing fetching from a DEM bounding box - */ - // Bounding box (north, east, south, west) - err = NinjaFetchDEMBBox(ninjaArmy, boundsBox, demFileOutPut.c_str(), resolution, strdup(fetch_type.c_str()), papszOptions); - if (err != NINJA_SUCCESS){ - printf("NinjaFetchDEMBBox: err = %d\n", err); - } - - return NINJA_SUCCESS; -} - -int fetchForecast(const string wx_model_type, int numNinjas, const string demFile){ - /* - * const char*wx_model_type = "NOMADS-HRRR-CONUS-3-KM"; - * int numNinjas = 2; - */ - - /* - * Setting up NinjaArmy - */ - NinjaArmyH* ninjaArmy = NULL; - char ** papszOptions = NULL; - NinjaErr err = 0; - err = NinjaInit(papszOptions); // must be called for fetching and simulations - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - } - /* - * Testing fetching for a Forecast file (wx_model_type are the names listed in the weather station download in WindNinja) - */ - const char* forecastFilename = NinjaFetchForecast(ninjaArmy, wx_model_type.c_str(), numNinjas, demFile.c_str(), papszOptions); - if (strcmp(forecastFilename, "exception") == 0){ - printf("NinjaFetchForecast: err = %s\n", forecastFilename); - } - else{ - printf("NinjaFetchForecast: forecastFilename = %s\n", forecastFilename); - } - - return NINJA_SUCCESS; -} - -int fetchStationData(int year, int month, int day, int hour, int minute, int numNinjas, const string output_path, int bufferZone, const string bufferUnits, const string demFile, const string osTimeZone, int fetchLatestFlag){ - /* - * int year[1] = {2023}; - * int month[1] = {10}; - * int day[1] = {10}; - * int hour[1] = {12}; - * int minute[1] = {60}; - * const char* output_path = ""; - * const char* elevation_file = "data/missoula_valley.tif"; - * const char* osTimeZone = "UTC"; - * bool fetchLatestFlag = 1; - * / - - /* - * Setting up NinjaArmy - */ - NinjaArmyH* ninjaArmy = NULL; - char ** papszOptions = NULL; - NinjaErr err = 0; - err = NinjaInit(papszOptions); // must be called for fetching and simulations - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - } - - /* - * Testing fetching station data from a geotiff file. - */ - - err = NinjaFetchStation(&year, &month, &day, &hour, &minute, numNinjas, demFile.c_str(), bufferZone, bufferUnits.c_str(), osTimeZone.c_str(), fetchLatestFlag, output_path.c_str(), papszOptions); - if (err != NINJA_SUCCESS) { - printf("NinjaFetchStation: err = %d\n", err); - } else { - printf("NinjaFetchStation: success\n"); - } - - return NINJA_SUCCESS; -} - -int fetchFromDEMPoint (double adfPoints[2], double adfBuff[2], const string units, double dfCellSize, const string pszDstFile, const string fetchtype){ - /* - * double adfPoint[] = {104.0, 40.07}; // Point coordinates (longitude, latitude) - * double adfBuff[] = {30, 30}; // Buffer to store the elevation value - * const char* units = "mi"; - * double dfCellSize = 30.0; // Cell size in meters - * char* pszDstFile = "data/dem_point_output.tif"; - * char* fetchType = "gmted"; - */ - - /* - * Setting up NinjaArmy - */ - NinjaArmyH* ninjaArmy = NULL; - char ** papszOptions = NULL; - NinjaErr err = 0; - err = NinjaInit(papszOptions); // must be called for fetching and simulations - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - } - - - /* - * Testing fetching from a DEM point - */ - err = NinjaFetchDEMPoint(ninjaArmy, adfPoints, adfBuff, units.c_str(), dfCellSize, strdup(pszDstFile.c_str()), strdup(fetchtype.c_str()), papszOptions); - if (err != NINJA_SUCCESS) { - printf("NinjaFetchDemPoint: err = %d\n", err); - } else { - printf("NinjaFetchDemPoint: elevation = %f\n", adfBuff[0]); - } - - return NINJA_SUCCESS; -} - - - -#endif // DATAFETCHER_H From a4edc6eb3307aef637a611bc34b774bc1163ca2b Mon Sep 17 00:00:00 2001 From: Austen Harrell - VBox Date: Tue, 22 Apr 2025 10:50:48 -0600 Subject: [PATCH 040/435] GUI updates, completing functionality for domain average runs --- src/gui/qt6/controller.cpp | 9 ++- src/gui/qt6/mainwindow.cpp | 39 +++++++++-- src/gui/qt6/mainwindow.h | 4 ++ src/gui/qt6/mainwindow.ui | 130 +++++++++++++++++++++++++++---------- src/gui/qt6/provider.cpp | 18 ++--- src/gui/qt6/provider.h | 8 ++- 6 files changed, 151 insertions(+), 57 deletions(-) diff --git a/src/gui/qt6/controller.cpp b/src/gui/qt6/controller.cpp index 970a3f2e7..807b45293 100644 --- a/src/gui/qt6/controller.cpp +++ b/src/gui/qt6/controller.cpp @@ -23,7 +23,8 @@ void Controller::onSolveRequest() { // Get time zone list from provider void Controller::onTimeZoneDataRequest() { // Call provider to get 2D vector with timezone data - QVector> timeZoneData = provider.getTimeZoneData(); + bool showAllZones = view->getUi()->showAllTimeZones->isChecked(); + QVector> timeZoneData = provider.getTimeZoneData(showAllZones); // Clear timezone list view->getUi()->timeZoneSelector->clear(); @@ -80,10 +81,8 @@ BaseInput Controller::setBaseInput() { int numNinjas = 1; // Count the number of ninjas, depending on the wind method being used QVector> domainAvgTable = provider.parseDomainAvgTable(view->getUi()->windTableData); - if (view->getUi()->useDiurnalWind->isChecked()) { - if (domainAvgTable.size() > 0) { - numNinjas = domainAvgTable.size(); - } + if (domainAvgTable.size() > 0) { + numNinjas = domainAvgTable.size(); } QString outputPath = view->getUi()->outputDirectory->toPlainText(); diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index 6147ecc43..c5aa315c3 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -380,6 +380,13 @@ void MainWindow::on_getFromMapButton_clicked() if (northLat != 0 && southLat != 0 && eastLon != 0 && westLon != 0) { // AppState::instance(). } + qDebug() << northLat; + qDebug() << southLat; + qDebug() << eastLon; + qDebug() << westLon; + qDebug() << centerLat; + qDebug() << centerLon; + qDebug() << radius; } // User changes the mesh resolution spec for surface input @@ -387,17 +394,29 @@ void MainWindow::on_meshResType_currentIndexChanged(int index) { switch(index) { case 0: - ui->meshResValue->setValue(256.34); + if (ui->meshResFeet->isChecked()) { + ui->meshResValue->setValue(256.34); + } else { + ui->meshResValue->setValue(78.13); + } ui->meshResValue->setEnabled(false); break; case 1: - ui->meshResValue->setValue(162.12); + if (ui->meshResFeet->isChecked()) { + ui->meshResValue->setValue(162.12); + } else { + ui->meshResValue->setValue(49.41); + } ui->meshResValue->setEnabled(false); break; case 2: - ui->meshResValue->setValue(114.64); + if (ui->meshResFeet->isChecked()) { + ui->meshResValue->setValue(114.64); + } else { + ui->meshResValue->setValue(34.94); + } ui->meshResValue->setEnabled(false); break; @@ -408,6 +427,18 @@ void MainWindow::on_meshResType_currentIndexChanged(int index) } } +// User selects new mesh resolution unit +void MainWindow::on_meshResFeet_clicked() +{ + MainWindow::on_meshResType_currentIndexChanged(ui->meshResType->currentIndex()); +} + + +void MainWindow::on_meshResMeters_clicked() +{ + MainWindow::on_meshResType_currentIndexChanged(ui->meshResType->currentIndex()); +} + // User selects a new time zone void MainWindow::on_timeZoneSelector_currentIndexChanged(int index) { @@ -575,7 +606,7 @@ void MainWindow::on_windTableData_cellChanged(int row, int column) break; } case 3: { - QDate d = QDate::fromString(value, "mm/dd/yyyy"); + QDate d = QDate::fromString(value, "MM/dd/yyyy"); valid = d.isValid(); if (!valid) errorMessage = "Must be a valid date (MM/DD/YYYY)"; break; diff --git a/src/gui/qt6/mainwindow.h b/src/gui/qt6/mainwindow.h index 7d38e4351..9350a2a13 100644 --- a/src/gui/qt6/mainwindow.h +++ b/src/gui/qt6/mainwindow.h @@ -64,6 +64,10 @@ private slots: void on_windTableData_cellChanged(int row, int column); + void on_meshResFeet_clicked(); + + void on_meshResMeters_clicked(); + signals: void solveRequest(); void timeZoneDataRequest(); diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui index 37c6d6081..5caac7a32 100644 --- a/src/gui/qt6/mainwindow.ui +++ b/src/gui/qt6/mainwindow.ui @@ -40,6 +40,15 @@ + + + + 60 + 60 + 60 + + + @@ -52,9 +61,9 @@ - 0 - 0 - 0 + 255 + 255 + 255 @@ -87,6 +96,15 @@ + + + + 60 + 60 + 60 + + + @@ -99,9 +117,9 @@ - 0 - 0 - 0 + 255 + 255 + 255 @@ -125,6 +143,15 @@ + + + + 60 + 60 + 60 + + + @@ -497,7 +524,7 @@ QFrame::Shadow::Sunken - 12 + 5 @@ -1035,6 +1062,9 @@ li.checked::marker { content: "\2612"; } + + true + 0 @@ -1054,6 +1084,9 @@ li.checked::marker { content: "\2612"; } + + true + 0 @@ -2886,7 +2919,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -2897,40 +2930,65 @@ li.checked::marker { content: "\2612"; } 3 - - - false - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - PointingHandCursor - - - Qt::LayoutDirection::LeftToRight + + + 0 - - #solveButton { + + + + + + + + + + + false + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + PointingHandCursor + + + Qt::LayoutDirection::LeftToRight + + + #solveButton { padding: 0; width: 100px; text-align: center; padding: 5px; } - - - Solve - - + + + Solve + + + + + + + + + + + true + + + + diff --git a/src/gui/qt6/provider.cpp b/src/gui/qt6/provider.cpp index b4a0c3b30..85cf3cceb 100755 --- a/src/gui/qt6/provider.cpp +++ b/src/gui/qt6/provider.cpp @@ -19,11 +19,15 @@ const int nCPUs = 1; char ** papszOptions = NULL; NinjaErr err = 0; +Provider::Provider() { + +} + int Provider::domain_average_exec(DomainAverageWind& input) { std::vector speedVector = input.getSpeedList(); const double* speedList = speedVector.data(); std::vector directionVector = input.getDirectionList(); - const double* directionList = speedVector.data(); + const double* directionList = directionVector.data(); const char * demFile = input.getDemFile().c_str(); double outputResolution = input.getOutputResolution(); const char* initializationMethod = input.getInitializationMethod().c_str(); @@ -106,7 +110,7 @@ int Provider::domain_average_exec(DomainAverageWind& input) { } - //heighUnits set static + //heighUnits set static err = NinjaSetInputWindHeight(ninjaArmy, i, height, heightUnits, papszOptions); if(err != NINJA_SUCCESS) @@ -520,13 +524,8 @@ int Provider::wxmodel_exec(WeatherModel& input) { return NINJA_SUCCESS; } -Provider::Provider() { - -} - // Time zone data provider -QVector> Provider::getTimeZoneData() { - AppState& state = AppState::instance(); +QVector> Provider::getTimeZoneData(bool showAllZones) { QVector> fullData; QVector> americaData; @@ -566,7 +565,7 @@ QVector> Provider::getTimeZoneData() { file.close(); - if (state.showAllZones) { + if (showAllZones) { return fullData; } else { return americaData; @@ -699,3 +698,4 @@ QVector> Provider::parseDomainAvgTable(QTableWidget* table) { } return result; } + diff --git a/src/gui/qt6/provider.h b/src/gui/qt6/provider.h index 4e801ad44..20542a6d2 100755 --- a/src/gui/qt6/provider.h +++ b/src/gui/qt6/provider.h @@ -20,10 +20,12 @@ class Provider { public: Provider(); - QVector> getTimeZoneData(); - QString getTimeZoneDetails(const QString& currentTimeZone); - QVector> parseDomainAvgTable(QTableWidget* table); int domain_average_exec(class DomainAverageWind& input); + QVector> getTimeZoneData(bool showAllZones); + QVector> parseDomainAvgTable(QTableWidget* table); + QString getKmzFilePaths(); + QString getTimeZoneDetails(const QString& currentTimeZone); + void setMapLayers(); }; #endif //PROVIDER_H From a6afb8da90bd63fae8b8a3e18521cf0d828f6cc7 Mon Sep 17 00:00:00 2001 From: Codymm03 Date: Tue, 22 Apr 2025 20:11:21 -0600 Subject: [PATCH 041/435] Nightly commit, Began work on Point Init just needs to be connected to View Data. --- src/gui/qt6/controller.cpp | 52 ++++++++++++++++++++++++++++++-------- src/gui/qt6/mainwindow.ui | 2 +- src/gui/qt6/modeldata.h | 26 +++++++++---------- src/gui/qt6/provider.cpp | 27 +++++++++++--------- 4 files changed, 69 insertions(+), 38 deletions(-) diff --git a/src/gui/qt6/controller.cpp b/src/gui/qt6/controller.cpp index dfd4c2e1a..6413ed732 100644 --- a/src/gui/qt6/controller.cpp +++ b/src/gui/qt6/controller.cpp @@ -96,10 +96,15 @@ BaseInput Controller::setBaseInput() { int numNinjas = 1; // Count the number of ninjas, depending on the wind method being used QVector> domainAvgTable = provider.parseDomainAvgTable(view->getUi()->windTableData); - if (view->getUi()->useDiurnalWind->isChecked()) { + if (view->getUi()->useDomainAvgWind->isChecked()) { if (domainAvgTable.size() > 0) { numNinjas = domainAvgTable.size(); } + }else if(view->getUi()->usePointInit->isChecked()){ + //TODO + //numNinjas = view->getUi()->pointInitStepsValue->value(); + }else{ + //Todo wxmodel } QString outputPath = view->getUi()->outputDirectory->toPlainText(); @@ -143,18 +148,44 @@ DomainAverageWind Controller::setDomainAverageWind() { } PointInitialization Controller::setPointInitialization() { - //Todo Implement Point Methods BaseInput baseInput = setBaseInput(); - int year = 0; - int month = 0; - int day = 0; - int hour = 0; - int minute = 0; + vector year; + vector month; + vector day ; + vector hour ; + vector minute ; + //ToDo Understand QT setting and receivingS char* station_path = "NULL"; - char* elevation_file = "NULL"; - char* osTimeZone= "NULL"; - bool matchPointFlag = false; + char* osTimeZone= view->getUi()->timeZoneSelector->currentText().toUtf8().data();; + bool matchPointFlag = true; + int numNinjas = baseInput.getNumNinjas(); + + QDateTime startTime = QDateTime::fromString("2025-04-22 00:00", "yyyy-MM-dd HH:mm"); + QDateTime endTime = QDateTime::fromString("2025-04-22 12:00", "yyyy-MM-dd HH:mm"); + + //divides times and setsup simulations + QList ninjaTimes; + + qint64 totalSeconds = startTime.secsTo(endTime); + + qint64 step = totalSeconds / (numNinjas - 1); + + for (int i = 0; i < numNinjas; ++i) { + QDateTime timePoint = startTime.addSecs(i * step); + ninjaTimes.append(timePoint); + } + + for (const QDateTime& dt : ninjaTimes) { + QDate date = dt.date(); + QTime time = dt.time(); + + year.push_back(date.year()); + month.push_back(date.month()); + day.push_back(date.day()); + hour.push_back(time.hour()); + minute.push_back(time.minute()); + } return PointInitialization ( baseInput, @@ -164,7 +195,6 @@ PointInitialization Controller::setPointInitialization() { hour, minute, station_path, - elevation_file, osTimeZone, matchPointFlag ); diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui index 37c6d6081..dcdce3555 100644 --- a/src/gui/qt6/mainwindow.ui +++ b/src/gui/qt6/mainwindow.ui @@ -497,7 +497,7 @@ QFrame::Shadow::Sunken - 12 + 10 diff --git a/src/gui/qt6/modeldata.h b/src/gui/qt6/modeldata.h index 751437d0b..9dc27ba2e 100755 --- a/src/gui/qt6/modeldata.h +++ b/src/gui/qt6/modeldata.h @@ -65,30 +65,28 @@ class DomainAverageWind : public BaseInput { class PointInitialization : public BaseInput { private: - int year; - int month; - int day; - int hour; - int minute; + vector year; + vector month; + vector day; + vector hour; + vector minute; char* station_path; - char* elevation_file; char* osTimeZone; bool matchPointFlag; public: // Constructor PointInitialization(const BaseInput& baseInput, - int year, int month, int day, int hour, int minute, char* station_path, char* elevation_file, char* osTimeZone, bool matchPointFlag) - : BaseInput(baseInput), year(year), month(month), day(day), hour(hour), minute(minute), station_path(station_path), elevation_file(elevation_file), osTimeZone(osTimeZone), matchPointFlag(matchPointFlag) {} + vector year, vector month, vector day, vector hour, vector minute, char* station_path, char* osTimeZone, bool matchPointFlag) + : BaseInput(baseInput), year(year), month(month), day(day), hour(hour), minute(minute), station_path(station_path), osTimeZone(osTimeZone), matchPointFlag(matchPointFlag) {} // Getter methods - int getYear() { return year; } - int getMonth() { return month; } - int getDay() { return day; } - int getHour() { return hour; } - int getMinute() { return minute; } + vector getYear() { return year; } + vector getMonth() { return month; } + vector getDay() { return day; } + vector getHour() { return hour; } + vector getMinute() { return minute; } char* getStationPath() { return station_path; } - char* getElevationFile() { return elevation_file; } char* getOSTimeZone() { return osTimeZone; } bool getMatchPointFlag() {return matchPointFlag;} }; diff --git a/src/gui/qt6/provider.cpp b/src/gui/qt6/provider.cpp index 33c0ab494..d782550e6 100755 --- a/src/gui/qt6/provider.cpp +++ b/src/gui/qt6/provider.cpp @@ -23,7 +23,7 @@ int Provider::domain_average_exec(DomainAverageWind& input) { std::vector speedVector = input.getSpeedList(); const double* speedList = speedVector.data(); std::vector directionVector = input.getDirectionList(); - const double* directionList = speedVector.data(); + const double* directionList = directionVector.data(); const char * demFile = input.getDemFile().c_str(); double outputResolution = input.getOutputResolution(); const char* initializationMethod = input.getInitializationMethod().c_str(); @@ -221,18 +221,21 @@ int Provider::point_exec(PointInitialization& input) { /* * Create the army */ - int year = input.getYear(); - int month = input.getMonth(); - int day = input.getDay(); - int hour = input.getHour(); - int minute = input.getMinute(); - char* station_path = input.getStationPath(); - char* elevation_file = input.getElevationFile(); - char* osTimeZone = input.getOSTimeZone(); + vector yearVector = input.getYear(); + int* year = yearVector.data(); + vector monthVector = input.getMonth(); + int* month = monthVector.data(); + vector dayVector = input.getDay(); + int* day = dayVector.data(); + vector hourVector = input.getHour(); + int* hour = hourVector.data(); + vector minuteVector = input.getMinute(); + int* minute = minuteVector.data(); + char* station_path = input.getStationPath(); + char* osTimeZone = input.getOSTimeZone(); bool matchPointFlag = input.getMatchPointFlag(); - bool momemtumFlag = input.getMomentumFlag(); - const char * demFile = input.getDemFile().c_str(); + char * demFile = const_cast(input.getDemFile().c_str()); double outputResolution = input.getOutputResolution(); const char* initializationMethod = input.getInitializationMethod().c_str(); const char* meshChoice = input.getMeshChoice().c_str(); @@ -246,7 +249,7 @@ int Provider::point_exec(PointInitialization& input) { const char * outputPath = input.getOutputPath().c_str(); - ninjaArmy = NinjaMakePointArmy(&year, &month, &day, &hour, &minute, numNinjas, osTimeZone, station_path, elevation_file, matchPointFlag, momemtumFlag, papszOptions); + ninjaArmy = NinjaMakePointArmy(year, month, day, hour, minute, numNinjas, osTimeZone, station_path, demFile, matchPointFlag, momentumFlag, papszOptions); if( NULL == ninjaArmy ) { From 23821bfa6d4c834b7c054f3f33d41a54e639fcf4 Mon Sep 17 00:00:00 2001 From: Austen Harrell <114018359+aaharrell@users.noreply.github.com> Date: Tue, 22 Apr 2025 20:45:03 -0600 Subject: [PATCH 042/435] Revert src/gui/qt6/mainwindow.ui --- src/gui/qt6/mainwindow.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui index dcdce3555..37c6d6081 100644 --- a/src/gui/qt6/mainwindow.ui +++ b/src/gui/qt6/mainwindow.ui @@ -497,7 +497,7 @@ QFrame::Shadow::Sunken - 10 + 12 From 4ca973afa1312a790c4e2fdecec852e0c5707160 Mon Sep 17 00:00:00 2001 From: Austen Harrell - VBox Date: Tue, 22 Apr 2025 23:26:12 -0600 Subject: [PATCH 043/435] Implemented DEM fetcher --- src/gui/qt6/controller.cpp | 25 ++++++++++++++++++++++++- src/gui/qt6/controller.h | 1 + src/gui/qt6/mainwindow.cpp | 38 ++++++++++++++++++++------------------ src/gui/qt6/mainwindow.h | 1 + src/gui/qt6/mainwindow.ui | 15 +++++++++------ src/gui/qt6/provider.cpp | 19 +++---------------- src/gui/qt6/provider.h | 1 + 7 files changed, 59 insertions(+), 41 deletions(-) diff --git a/src/gui/qt6/controller.cpp b/src/gui/qt6/controller.cpp index c2e3e7c20..b166830a0 100644 --- a/src/gui/qt6/controller.cpp +++ b/src/gui/qt6/controller.cpp @@ -10,6 +10,7 @@ Controller::Controller(MainWindow* view, QObject* parent) connect(view, &MainWindow::solveRequest, this, &Controller::onSolveRequest); connect(view, &MainWindow::timeZoneDataRequest, this, &Controller::onTimeZoneDataRequest); connect(view, &MainWindow::timeZoneDetailsRequest, this, &Controller::onTimeZoneDetailsRequest); + connect(view, &MainWindow::getDEMrequest, this, &Controller::onGetDEMrequest); } // Listens for solve request; facilitates model creation and provider passing @@ -33,7 +34,7 @@ void Controller::onSolveRequest() { vector outputFileList = provider.getOutputFileNames( view->getUi()->elevFilePath->text(), view->getUi()->windTableData, - view->getUi()->meshResType->currentText(), + view->getUi()->meshResValue->text(), provider.parseDomainAvgTable(view->getUi()->windTableData).size(), view->getUi()->outputDirectory->toPlainText()); @@ -69,6 +70,28 @@ void Controller::onTimeZoneDetailsRequest() { view->getUi()->timeZoneDetails->setText(timeZoneDetails); } +void Controller::onGetDEMrequest(double boundsBox[], QString outputFile) { + string demFile = view->getUi()->elevFilePath->text().toStdString(); + + // Get correct fetch type + // TODO: set correct string for landscape files in else condition + int fetchIndex = view->getUi()->fetchType->currentIndex(); + string fetchType; + if (fetchIndex == 0) { + fetchType = "srtm"; + } else if (fetchIndex == 1) { + fetchType = "gmted"; + } else { + fetchType = "land"; + } + + double resolution = view->getUi()->meshResValue->value(); + + int result = provider.fetchDEMBoundingBox(demFile, fetchType, resolution, boundsBox); + qDebug() << result; + view->getUi()->elevFilePath->setText(outputFile); +} + /* * Helper functions that construct the API input models */ diff --git a/src/gui/qt6/controller.h b/src/gui/qt6/controller.h index 2a839110e..857729361 100644 --- a/src/gui/qt6/controller.h +++ b/src/gui/qt6/controller.h @@ -24,6 +24,7 @@ class Controller : public QObject { void onSolveRequest(); void onTimeZoneDataRequest(); void onTimeZoneDetailsRequest(); + void onGetDEMrequest(double boundBox[], QString outputFile); }; #endif // CONTROLLER_H diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index b069eeefd..62d248934 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -377,26 +377,28 @@ void MainWindow::on_getFromMapButton_clicked() run("center_lon"); run("radius"); - // Verify input validity + // Verify input validity and write file if (northLat != 0 && southLat != 0 && eastLon != 0 && westLon != 0) { - // AppState::instance(). - } - qDebug() << northLat; - qDebug() << southLat; - qDebug() << eastLon; - qDebug() << westLon; - qDebug() << centerLat; - qDebug() << centerLon; - qDebug() << radius; - - QString defaultName = "output.tif"; + QString defaultName = "demDownload.tif"; QString filter = "TIF Files (*.tif)"; + // Get downloads path and join to filename + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + QDir dir(downloadsPath); + QString fullPath = dir.filePath(defaultName); + + // Open save window QString fileName = QFileDialog::getSaveFileName(this, "Save DEM File", - QDir::homePath() + "/" + defaultName, + fullPath, filter); - qDebug() << fileName; + + if (fileName != "") { + double coords[] = { northLat, eastLon, southLat, westLon }; + getDEMrequest(coords, fileName); + } + + } } @@ -405,8 +407,8 @@ void MainWindow::on_meshResType_currentIndexChanged(int index) { switch(index) { case 0: - if (ui->meshResFeet->isChecked()) { - ui->meshResValue->setValue(256.34); + if (ui->meshResMeters->isChecked()) { + ui->meshResValue->setValue(512.00); } else { ui->meshResValue->setValue(78.13); } @@ -414,7 +416,7 @@ void MainWindow::on_meshResType_currentIndexChanged(int index) break; case 1: - if (ui->meshResFeet->isChecked()) { + if (ui->meshResMeters->isChecked()) { ui->meshResValue->setValue(162.12); } else { ui->meshResValue->setValue(49.41); @@ -423,7 +425,7 @@ void MainWindow::on_meshResType_currentIndexChanged(int index) break; case 2: - if (ui->meshResFeet->isChecked()) { + if (ui->meshResMeters->isChecked()) { ui->meshResValue->setValue(114.64); } else { ui->meshResValue->setValue(34.94); diff --git a/src/gui/qt6/mainwindow.h b/src/gui/qt6/mainwindow.h index 14aa6fc0a..5ac1bebf8 100644 --- a/src/gui/qt6/mainwindow.h +++ b/src/gui/qt6/mainwindow.h @@ -76,6 +76,7 @@ private slots: void solveRequest(); void timeZoneDataRequest(); void timeZoneDetailsRequest(); + void getDEMrequest(double boundBox[], QString outputFile); private: void onTreeItemClicked(QTreeWidgetItem *item, int column); diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui index cd4554efd..f742a2ff4 100644 --- a/src/gui/qt6/mainwindow.ui +++ b/src/gui/qt6/mainwindow.ui @@ -524,7 +524,7 @@ QFrame::Shadow::Sunken - 12 + 5 @@ -885,7 +885,7 @@ li.checked::marker { content: "\2612"; } - + WORLD SRTM (30m) @@ -1061,7 +1061,7 @@ li.checked::marker { content: "\2612"; } - + true @@ -1075,7 +1075,7 @@ li.checked::marker { content: "\2612"; } PointingHandCursor - Feet + Meters true @@ -1083,7 +1083,7 @@ li.checked::marker { content: "\2612"; } - + true @@ -1097,7 +1097,10 @@ li.checked::marker { content: "\2612"; } PointingHandCursor - Meters + Feet + + + false diff --git a/src/gui/qt6/provider.cpp b/src/gui/qt6/provider.cpp index 021699d83..02e162b44 100755 --- a/src/gui/qt6/provider.cpp +++ b/src/gui/qt6/provider.cpp @@ -737,13 +737,6 @@ QVector> Provider::parseDomainAvgTable(QTableWidget* table) { int Provider::fetchDEMBoundingBox(const string demFileOutPut, const string fetch_type, int resolution, double* boundsBox) { - /* - * const char * demFile = "data/output.tif"; // output file name - * char * fetch_type = "gmted"; - * double resolution = 30; // 30 m resolution - * double boundsBox [] = {40.07, -104.0, 40.0, -104.07}; - */ - /* * Setting up NinjaArmy */ @@ -873,18 +866,12 @@ int Provider::fetchFromDEMPoint (double adfPoints[2], double adfBuff[2], const s return NINJA_SUCCESS; } -vector Provider::getOutputFileNames(QString demFile, QTableWidget *table, QString meshType, int numFiles, QString outputPath) { +vector Provider::getOutputFileNames(QString demFile, QTableWidget *table, QString meshValue, int numFiles, QString outputPath) { vector outputFiles; QDir outDir(outputPath); QString demName = QFileInfo(demFile).completeBaseName(); - QString meshSize = ""; - if (meshType == "Coarse") { - meshSize = "307m"; - } else if (meshType == "Medium") { - meshSize = "194m"; - } else if (meshType == "Fine") { - meshSize = "137"; - } + int meshInt = static_cast(std::round(meshValue.toDouble())); + QString meshSize = QString::number(meshInt) + "m"; for (int i = 0; i < numFiles; i++) { QString direction = table->item(i, 1)->text().trimmed(); diff --git a/src/gui/qt6/provider.h b/src/gui/qt6/provider.h index 625417390..1dbfe9d25 100755 --- a/src/gui/qt6/provider.h +++ b/src/gui/qt6/provider.h @@ -3,6 +3,7 @@ #include "appstate.h" #include "modeldata.h" +#include #include #include #include From 15a8bee6b013c773610adbecca91f7e8c1786d0b Mon Sep 17 00:00:00 2001 From: Austen Harrell - VBox Date: Thu, 24 Apr 2025 00:53:59 -0600 Subject: [PATCH 044/435] Fixed mesh resolution functionality, finished multithreading for DEM download --- src/gui/qt6/controller.cpp | 6 +- src/gui/qt6/controller.h | 2 +- src/gui/qt6/mainwindow.cpp | 144 +++++++++++++++++++++++++------------ src/gui/qt6/mainwindow.h | 23 +++++- src/gui/qt6/mainwindow.ui | 4 +- src/gui/qt6/provider.cpp | 2 +- 6 files changed, 126 insertions(+), 55 deletions(-) diff --git a/src/gui/qt6/controller.cpp b/src/gui/qt6/controller.cpp index b166830a0..7c2fab3e1 100644 --- a/src/gui/qt6/controller.cpp +++ b/src/gui/qt6/controller.cpp @@ -70,8 +70,7 @@ void Controller::onTimeZoneDetailsRequest() { view->getUi()->timeZoneDetails->setText(timeZoneDetails); } -void Controller::onGetDEMrequest(double boundsBox[], QString outputFile) { - string demFile = view->getUi()->elevFilePath->text().toStdString(); +void Controller::onGetDEMrequest(std::array boundsBox, QString outputFile) { // Get correct fetch type // TODO: set correct string for landscape files in else condition @@ -87,8 +86,7 @@ void Controller::onGetDEMrequest(double boundsBox[], QString outputFile) { double resolution = view->getUi()->meshResValue->value(); - int result = provider.fetchDEMBoundingBox(demFile, fetchType, resolution, boundsBox); - qDebug() << result; + provider.fetchDEMBoundingBox(outputFile.toStdString(), fetchType, resolution, boundsBox.data()); view->getUi()->elevFilePath->setText(outputFile); } diff --git a/src/gui/qt6/controller.h b/src/gui/qt6/controller.h index 857729361..f3b38ee4d 100644 --- a/src/gui/qt6/controller.h +++ b/src/gui/qt6/controller.h @@ -24,7 +24,7 @@ class Controller : public QObject { void onSolveRequest(); void onTimeZoneDataRequest(); void onTimeZoneDetailsRequest(); - void onGetDEMrequest(double boundBox[], QString outputFile); + void onGetDEMrequest(std::array boundsBox, QString outputFile); }; #endif // CONTROLLER_H diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index 62d248934..e59380af0 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -317,6 +317,51 @@ void MainWindow::on_useCOMM_clicked() // User selects an elevation input file (by file) void MainWindow::on_elevFilePath_textChanged(const QString &arg1) { + // Get GDAL data information on DEM input + QString fileName = ui->elevFilePath->text(); + double adfGeoTransform[6]; + GDALDataset *poInputDS; + poInputDS = (GDALDataset*)GDALOpen(fileName.toStdString().c_str(), GA_ReadOnly); + + // Set driver info + GDALDriverName = poInputDS->GetDriver()->GetDescription(); + GDALDriverLongName = poInputDS->GetDriver()->GetMetadataItem(GDAL_DMD_LONGNAME); + + // get x and y dimensions + GDALXSize = poInputDS->GetRasterXSize(); + GDALYSize = poInputDS->GetRasterYSize(); + + // Calculate cell size + if (poInputDS->GetGeoTransform(adfGeoTransform) == CE_None) { + int c1, c2; + c1 = adfGeoTransform[1]; + c2 = adfGeoTransform[5]; + if (abs(c1) == abs(c2)) { + GDALCellSize = abs(c1); + } else { + GDALClose((GDALDatasetH)poInputDS); + } + } + + // Get GDAL min/max values + GDALRasterBand* band = poInputDS->GetRasterBand(1); + int gotMin = 0, gotMax = 0; + double minVal = band->GetMinimum(&gotMin); + double maxVal = band->GetMaximum(&gotMax); + + if (!gotMin || !gotMax) { + band->ComputeStatistics(false, &minVal, &maxVal, nullptr, nullptr, nullptr, nullptr); + } + + GDALMinValue = minVal; + GDALMaxValue = maxVal; + + // Close + GDALClose((GDALDatasetH)poInputDS); + + // Run mesh calculator + MainWindow::on_meshResType_currentIndexChanged(ui->meshResType->currentIndex()); + refreshUI(ui); } @@ -335,7 +380,6 @@ void MainWindow::on_openFileButton_clicked() // User selects an elevation input file (by map import) -// TODO: get DEM file on button press void MainWindow::on_getFromMapButton_clicked() { // We have to use batching since the Javascript part is async @@ -377,79 +421,89 @@ void MainWindow::on_getFromMapButton_clicked() run("center_lon"); run("radius"); - // Verify input validity and write file + // Verify input validity and write file if (northLat != 0 && southLat != 0 && eastLon != 0 && westLon != 0) { QString defaultName = "demDownload.tif"; QString filter = "TIF Files (*.tif)"; - // Get downloads path and join to filename + // Get downloads path and join to filename QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); QDir dir(downloadsPath); QString fullPath = dir.filePath(defaultName); - // Open save window + // Open save window QString fileName = QFileDialog::getSaveFileName(this, - "Save DEM File", - fullPath, - filter); + "Save DEM File", + fullPath, + filter); if (fileName != "") { - double coords[] = { northLat, eastLon, southLat, westLon }; - getDEMrequest(coords, fileName); - } + std::array coordsCopy = { northLat, eastLon, southLat, westLon }; + QString fileNameCopy = fileName; + QtConcurrent::run([coordsCopy, fileNameCopy, this]() { + emit getDEMrequest(coordsCopy, fileNameCopy); + }); + } } - } -// User changes the mesh resolution spec for surface input + // User changes the mesh resolution spec for surface input void MainWindow::on_meshResType_currentIndexChanged(int index) { - switch(index) { - case 0: - if (ui->meshResMeters->isChecked()) { - ui->meshResValue->setValue(512.00); - } else { - ui->meshResValue->setValue(78.13); - } + // Set value box enable for custom/other + if (index == 3) { + ui->meshResValue->setEnabled(true); + } else { ui->meshResValue->setEnabled(false); - break; + } + + int coarse = 4000; + int medium = 10000; + int fine = 20000; + double meshResolution = 200.0; + int targetNumHorizCells = fine; + switch (index) { + case 0: + targetNumHorizCells = coarse; + break; case 1: - if (ui->meshResMeters->isChecked()) { - ui->meshResValue->setValue(162.12); - } else { - ui->meshResValue->setValue(49.41); - } - ui->meshResValue->setEnabled(false); + targetNumHorizCells = medium; break; - case 2: - if (ui->meshResMeters->isChecked()) { - ui->meshResValue->setValue(114.64); - } else { - ui->meshResValue->setValue(34.94); - } - ui->meshResValue->setEnabled(false); + targetNumHorizCells = fine; break; - case 3: - ui->meshResValue->setEnabled(true); - break; - + targetNumHorizCells = meshResolution; } + + double XLength = GDALXSize * GDALCellSize; + double YLength = GDALYSize * GDALCellSize; + double nXcells = 2 * std::sqrt((double)targetNumHorizCells) * (XLength / (XLength + YLength)); + double nYcells = 2 * std::sqrt((double)targetNumHorizCells) * (YLength / (XLength + YLength)); + + double XCellSize = XLength / nXcells; + double YCellSize = YLength / nYcells; + + meshResolution = (XCellSize + YCellSize) / 2; + + ui->meshResValue->setValue(meshResolution); + } -// User selects new mesh resolution unit -void MainWindow::on_meshResFeet_clicked() +void MainWindow::on_meshResMeters_toggled(bool checked) { - MainWindow::on_meshResType_currentIndexChanged(ui->meshResType->currentIndex()); + if (checked) { + ui->meshResValue->setValue(ui->meshResValue->value() * 0.3048); + } } - -void MainWindow::on_meshResMeters_clicked() +void MainWindow::on_meshResFeet_toggled(bool checked) { - MainWindow::on_meshResType_currentIndexChanged(ui->meshResType->currentIndex()); + if (checked) { + ui->meshResValue->setValue(ui->meshResValue->value() * 3.28084); + } } // User selects a new time zone @@ -772,6 +826,9 @@ MainWindow::MainWindow(QWidget *parent) // Expand tree UI ui->treeWidget->expandAll(); + // Register GDAL drivers + GDALAllRegister(); + /* * Create file handler window for point init screen */ @@ -911,4 +968,3 @@ MainWindow::MainWindow(QWidget *parent) ui->windTableData->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); } - diff --git a/src/gui/qt6/mainwindow.h b/src/gui/qt6/mainwindow.h index 5ac1bebf8..9aa2c2b1d 100644 --- a/src/gui/qt6/mainwindow.h +++ b/src/gui/qt6/mainwindow.h @@ -1,10 +1,16 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H +#include +#include +#include #include +#include #include #include #include "ui_mainwindow.h" +#include "gdal/gdal_utils.h" +#include "gdal/gdal_priv.h" #include #include @@ -23,6 +29,17 @@ class MainWindow : public QMainWindow { void toggleExpandCollapse(const QModelIndex &index); void loadMapKMZ(const std::vector& input); + // GDAL Values + QString GDALDriverName, GDALDriverLongName; + std::string GDALProjRef; + bool hasGDALCenter; + double GDALCenterLat; + double GDALCenterLon; + int GDALXSize, GDALYSize; + double GDALCellSize, GDALNoData; + double GDALMaxValue, GDALMinValue; + + MainWindow(QWidget *parent = nullptr); ~MainWindow(); @@ -68,15 +85,15 @@ private slots: void on_windTableData_cellChanged(int row, int column); - void on_meshResFeet_clicked(); + void on_meshResMeters_toggled(bool checked); - void on_meshResMeters_clicked(); + void on_meshResFeet_toggled(bool checked); signals: void solveRequest(); void timeZoneDataRequest(); void timeZoneDetailsRequest(); - void getDEMrequest(double boundBox[], QString outputFile); + void getDEMrequest(std::array boundsBox, QString outputFile); private: void onTreeItemClicked(QTreeWidgetItem *item, int column); diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui index f742a2ff4..6296d9b8a 100644 --- a/src/gui/qt6/mainwindow.ui +++ b/src/gui/qt6/mainwindow.ui @@ -1053,10 +1053,10 @@ li.checked::marker { content: "\2612"; } 0.010000000000000 - 999.990000000000009 + 10000.000000000000000 - 256.339999999999975 + 200.000000000000000 diff --git a/src/gui/qt6/provider.cpp b/src/gui/qt6/provider.cpp index 02e162b44..efbd79e03 100755 --- a/src/gui/qt6/provider.cpp +++ b/src/gui/qt6/provider.cpp @@ -740,6 +740,7 @@ int Provider::fetchDEMBoundingBox(const string demFileOutPut, const string fetch /* * Setting up NinjaArmy */ + NinjaArmyH* ninjaArmy = NULL; char ** papszOptions = NULL; NinjaErr err = 0; @@ -882,7 +883,6 @@ vector Provider::getOutputFileNames(QString demFile, QTableWidget *table .arg(speed) .arg(meshSize)); outputFiles.push_back(filePath.toStdString()); - qDebug() << filePath; } return outputFiles; From 7962e2b3e852414af5de84ad1de5e373004a8d6d Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 24 Apr 2025 09:31:53 -0600 Subject: [PATCH 045/435] Changed the API so domain average runs only work with diurnal winds (for demo) --- autotest/api/test_capi_domain_average_wind.c | 22 ++++++++++++++------ src/ninja/windninja.cpp | 6 +++--- src/ninja/windninja.h | 6 +++--- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/autotest/api/test_capi_domain_average_wind.c b/autotest/api/test_capi_domain_average_wind.c index 4898cfd57..79fbea7c5 100644 --- a/autotest/api/test_capi_domain_average_wind.c +++ b/autotest/api/test_capi_domain_average_wind.c @@ -63,11 +63,6 @@ int main() bool momentumFlag = 0; //we're using the conservation of mass solver unsigned int numNinjas = 2; //two ninjas in the ninjaArmy - must be equal to array sizes - /* inputs that can vary among ninjas in an army */ - const double speedList[] = {5.5, 5.5}; // matches the size of numNinjas - const char * speedUnits = "mps"; - const double directionList[] = {220, 300}; // matches the size of numNinjas - /* inputs specific to output * Note: Outputs have default values if inputs are not specified (like resolution) */ @@ -78,10 +73,25 @@ int main() const char * outputPath = "/home/mason/Documents/Git/WindNinja/windninja/autotest/api/data/output"; const bool outputFlag = 1; + /* inputs that can vary among ninjas in an army */ + const double speedList[] = {5.5, 5.5}; // matches the size of numNinjas + const char * speedUnits = "mps"; + const double directionList[2] = {220, 300}; + const int year[2] = {2023, 2023}; + const int month[2] = {10, 11}; + const int day[2] = {10, 11}; + const int hour[2] = {12, 13}; + const int minute[2] = {30, 31}; + const char * timezone = "UTC"; + const int air[2] = {50, 50}; + const char * airUnits = "F"; + const int cloud[2] = {10, 10}; + const char * cloudUnits = "percent"; + /* * Create the army */ - ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speedList, speedUnits, directionList, papszOptions); + ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speedList, speedUnits, directionList, year, month, day, hour, minute, timezone, air, airUnits, cloud, cloudUnits, papszOptions); if( NULL == ninjaArmy ) { printf("NinjaCreateArmy: ninjaArmy = NULL\n"); diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 5ff0a7e94..d0a1847c9 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -102,9 +102,9 @@ extern "C" */ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakeDomainAverageArmy - ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options ) -// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, -// const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options ) +// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options ) + ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, + const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options ) { #ifndef NINJAFOAM diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index f63b023c2..2404bec1a 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -74,9 +74,9 @@ typedef int NinjaErr; * Contructor/Destructors *-----------------------------------------------------------------------------*/ WINDNINJADLL_EXPORT NinjaArmyH * NinjaMakeDomainAverageArmy - ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options); -// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, -// const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char* airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options); +// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options); + ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, + const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char* airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options); //TODO: add helper function to generate arrays of years, months, days, hours, and minutes from a station file WINDNINJADLL_EXPORT NinjaArmyH * NinjaMakePointArmy From 23a383dd195b3c4800ecd9811dfa41d3eb823300 Mon Sep 17 00:00:00 2001 From: Codymm03 Date: Thu, 24 Apr 2025 16:31:45 -0600 Subject: [PATCH 046/435] =?UTF-8?q?(=20=CD=A1=C2=B0=20=CD=9C=CA=96=20?= =?UTF-8?q?=CD=A1=C2=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ninja/windninja.cpp | 6 +++--- src/ninja/windninja.h | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index d0a1847c9..5ff0a7e94 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -102,9 +102,9 @@ extern "C" */ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakeDomainAverageArmy -// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options ) - ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, - const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options ) + ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options ) +// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, +// const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options ) { #ifndef NINJAFOAM diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 2404bec1a..ee58a8a9e 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -74,9 +74,9 @@ typedef int NinjaErr; * Contructor/Destructors *-----------------------------------------------------------------------------*/ WINDNINJADLL_EXPORT NinjaArmyH * NinjaMakeDomainAverageArmy -// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options); - ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, - const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char* airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options); + ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options); +// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, +// const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char* airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options); //TODO: add helper function to generate arrays of years, months, days, hours, and minutes from a station file WINDNINJADLL_EXPORT NinjaArmyH * NinjaMakePointArmy From 6f98ad46701445d93c04356114f8a50293e15be4 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 2 Jun 2025 15:11:27 -0600 Subject: [PATCH 047/435] Fixed compilation error with gdal libraries --- src/gui/qt6/CMakeLists.txt | 3 +++ src/gui/qt6/mainwindow.h | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt index 26e15622b..2e002e79b 100755 --- a/src/gui/qt6/CMakeLists.txt +++ b/src/gui/qt6/CMakeLists.txt @@ -50,10 +50,13 @@ else() endif() endif() +target_include_directories(qt6_application PRIVATE /usr/local/include) + add_dependencies(qt6_application ninja) add_definitions(-DMAP_PATH="${CMAKE_SOURCE_DIR}/data/map.html") + target_link_libraries(qt6_application PRIVATE Qt${QT_VERSION_MAJOR}::Widgets PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets PRIVATE ninja) # Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. diff --git a/src/gui/qt6/mainwindow.h b/src/gui/qt6/mainwindow.h index 9aa2c2b1d..6e3aaf28b 100644 --- a/src/gui/qt6/mainwindow.h +++ b/src/gui/qt6/mainwindow.h @@ -9,8 +9,8 @@ #include #include #include "ui_mainwindow.h" -#include "gdal/gdal_utils.h" -#include "gdal/gdal_priv.h" +#include "gdal_utils.h" +#include "gdal_priv.h" #include #include From 1a9a87f1c56f83558cdf61510272a46e0edff69a Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 4 Jun 2025 10:03:32 -0600 Subject: [PATCH 048/435] Removed unneccessary development files --- .../.cmake/api/v1/query/cache-v2 | 0 .../.cmake/api/v1/query/cmakeFiles-v1 | 0 .../.cmake/api/v1/query/codemodel-v2 | 0 .../.qtc/package-manager/LICENSE.conan | 21 - .../.qtc/package-manager/auto-setup.cmake | 272 ----- .../.qtc/package-manager/conan.cmake | 1026 ----------------- .../.qtc/package-manager/conan_provider.cmake | 655 ----------- build/Desktop_Qt_6_8_0-Debug/CMakeCache.txt | 445 ------- .../CMakeFiles/3.29.3/CMakeCCompiler.cmake | 80 -- .../CMakeFiles/3.29.3/CMakeCXXCompiler.cmake | 92 -- .../3.29.3/CMakeDetermineCompilerABI_C.bin | Bin 15968 -> 0 bytes .../3.29.3/CMakeDetermineCompilerABI_CXX.bin | Bin 15992 -> 0 bytes .../CMakeFiles/3.29.3/CMakeSystem.cmake | 15 - .../3.29.3/CompilerIdC/CMakeCCompilerId.c | 895 -------------- .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 878 -------------- .../CMakeFiles/CMakeConfigureLog.yaml | 556 --------- .../CMakeFiles/cmake.check_cache | 1 - build/Desktop_Qt_6_8_0-Debug/ninja_version.h | 39 - .../Desktop_Qt_6_8_0-Debug/qtcsettings.cmake | 10 - .../.cmake/api/v1/query/cache-v2 | 0 .../.cmake/api/v1/query/cmakeFiles-v1 | 0 .../.cmake/api/v1/query/codemodel-v2 | 0 .../.qtc/package-manager/LICENSE.conan | 21 - .../.qtc/package-manager/auto-setup.cmake | 272 ----- .../.qtc/package-manager/conan.cmake | 1026 ----------------- .../.qtc/package-manager/conan_provider.cmake | 655 ----------- build/Desktop_Qt_6_8_0-Release/CMakeCache.txt | 445 ------- .../CMakeFiles/3.29.3/CMakeCCompiler.cmake | 80 -- .../CMakeFiles/3.29.3/CMakeCXXCompiler.cmake | 92 -- .../3.29.3/CMakeDetermineCompilerABI_C.bin | Bin 15968 -> 0 bytes .../3.29.3/CMakeDetermineCompilerABI_CXX.bin | Bin 15992 -> 0 bytes .../CMakeFiles/3.29.3/CMakeSystem.cmake | 15 - .../3.29.3/CompilerIdC/CMakeCCompilerId.c | 895 -------------- .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 878 -------------- .../CMakeFiles/CMakeConfigureLog.yaml | 556 --------- .../CMakeFiles/cmake.check_cache | 1 - .../Desktop_Qt_6_8_0-Release/ninja_version.h | 39 - .../qtcsettings.cmake | 10 - test.file | 0 test.txt | 0 40 files changed, 9970 deletions(-) delete mode 100644 build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cache-v2 delete mode 100644 build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cmakeFiles-v1 delete mode 100644 build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/codemodel-v2 delete mode 100644 build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/LICENSE.conan delete mode 100644 build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake delete mode 100644 build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan.cmake delete mode 100644 build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan_provider.cmake delete mode 100644 build/Desktop_Qt_6_8_0-Debug/CMakeCache.txt delete mode 100644 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCCompiler.cmake delete mode 100644 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake delete mode 100755 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_C.bin delete mode 100755 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_CXX.bin delete mode 100644 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeSystem.cmake delete mode 100644 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdC/CMakeCCompilerId.c delete mode 100644 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp delete mode 100644 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeConfigureLog.yaml delete mode 100644 build/Desktop_Qt_6_8_0-Debug/CMakeFiles/cmake.check_cache delete mode 100644 build/Desktop_Qt_6_8_0-Debug/ninja_version.h delete mode 100644 build/Desktop_Qt_6_8_0-Debug/qtcsettings.cmake delete mode 100644 build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/cache-v2 delete mode 100644 build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/cmakeFiles-v1 delete mode 100644 build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/codemodel-v2 delete mode 100644 build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/LICENSE.conan delete mode 100644 build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/auto-setup.cmake delete mode 100644 build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/conan.cmake delete mode 100644 build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/conan_provider.cmake delete mode 100644 build/Desktop_Qt_6_8_0-Release/CMakeCache.txt delete mode 100644 build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeCCompiler.cmake delete mode 100644 build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake delete mode 100755 build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_C.bin delete mode 100755 build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_CXX.bin delete mode 100644 build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeSystem.cmake delete mode 100644 build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CompilerIdC/CMakeCCompilerId.c delete mode 100644 build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp delete mode 100644 build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeConfigureLog.yaml delete mode 100644 build/Desktop_Qt_6_8_0-Release/CMakeFiles/cmake.check_cache delete mode 100644 build/Desktop_Qt_6_8_0-Release/ninja_version.h delete mode 100644 build/Desktop_Qt_6_8_0-Release/qtcsettings.cmake delete mode 100644 test.file delete mode 100644 test.txt diff --git a/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cache-v2 b/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cache-v2 deleted file mode 100644 index e69de29bb..000000000 diff --git a/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cmakeFiles-v1 b/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/cmakeFiles-v1 deleted file mode 100644 index e69de29bb..000000000 diff --git a/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/codemodel-v2 b/build/Desktop_Qt_6_8_0-Debug/.cmake/api/v1/query/codemodel-v2 deleted file mode 100644 index e69de29bb..000000000 diff --git a/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/LICENSE.conan b/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/LICENSE.conan deleted file mode 100644 index 541f5a3a6..000000000 --- a/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/LICENSE.conan +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2019 JFrog - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake b/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake deleted file mode 100644 index c797138f6..000000000 --- a/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake +++ /dev/null @@ -1,272 +0,0 @@ -# -# Internal Qt Creator variable reference -# -foreach(qtcreator_var - QT_QMAKE_EXECUTABLE CMAKE_PREFIX_PATH CMAKE_C_COMPILER CMAKE_CXX_COMPILER - CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELWITHDEBINFO) - set(__just_reference_${qtcreator_var} ${${qtcreator_var}}) -endforeach() - -if (EXISTS "${CMAKE_SOURCE_DIR}/QtCreatorPackageManager.cmake") - include("${CMAKE_SOURCE_DIR}/QtCreatorPackageManager.cmake") -endif() - -if (QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP) - return() -endif() -option(QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP "Skip Qt Creator's package manager auto-setup" OFF) - -# Store the C/C++ object output extension -if (CMAKE_VERSION GREATER_EQUAL "3.19") - cmake_language(DEFER CALL set CMAKE_C_OUTPUT_EXTENSION "${CMAKE_C_OUTPUT_EXTENSION}" CACHE STRING "" FORCE) - cmake_language(DEFER CALL set CMAKE_CXX_OUTPUT_EXTENSION "${CMAKE_CXX_OUTPUT_EXTENSION}" CACHE STRING "" FORCE) -endif() - -macro(qtc_auto_setup_compiler_standard toolchainFile) - foreach(lang_var C CXX CUDA OBJC OBJCXX) - foreach(prop_var STANDARD STANDARD_REQUIRED EXTENSIONS) - if (CMAKE_${lang_var}_${prop_var}) - file(APPEND "${toolchainFile}" - "set(CMAKE_${lang_var}_${prop_var} ${CMAKE_${lang_var}_${prop_var}})\n") - endif() - endforeach() - endforeach() - - # Forward important CMake variables to the package manager in the toolchain file - foreach(fwd_var CMAKE_MSVC_RUNTIME_LIBRARY CMAKE_SYSROOT CMAKE_OSX_SYSROOT CMAKE_OSX_ARCHITECTURES) - if (${fwd_var}) - file(APPEND "${toolchainFile}" - "set(${fwd_var} ${${fwd_var}})\n") - endif() - endforeach() -endmacro() - -# -# conan -# -macro(qtc_auto_setup_conan) - foreach(file conanfile.txt conanfile.py) - if (EXISTS "${CMAKE_SOURCE_DIR}/${file}") - set(conanfile_txt "${CMAKE_SOURCE_DIR}/${file}") - break() - endif() - endforeach() - - if (conanfile_txt AND NOT QT_CREATOR_SKIP_CONAN_SETUP) - option(QT_CREATOR_SKIP_CONAN_SETUP "Skip Qt Creator's conan package manager auto-setup" OFF) - set(QT_CREATOR_CONAN_BUILD_POLICY "missing" CACHE STRING "Qt Creator's conan package manager auto-setup build policy. This is used for the BUILD property of cmake_conan_run") - - find_program(conan_program conan) - if (NOT conan_program) - message(WARNING "Qt Creator: conan executable not found. " - "Package manager auto-setup will be skipped. " - "To disable this warning set QT_CREATOR_SKIP_CONAN_SETUP to ON.") - return() - endif() - execute_process(COMMAND ${conan_program} --version - RESULT_VARIABLE result_code - OUTPUT_VARIABLE conan_version_output - ERROR_VARIABLE conan_version_output) - if (NOT result_code EQUAL 0) - message(FATAL_ERROR "conan --version failed='${result_code}: ${conan_version_output}") - endif() - - string(REGEX REPLACE ".*Conan version ([0-9].[0-9]).*" "\\1" conan_version "${conan_version_output}") - - set(conanfile_timestamp_file "${CMAKE_BINARY_DIR}/conan-dependencies/conanfile.timestamp") - file(TIMESTAMP "${conanfile_txt}" conanfile_timestamp) - - set(do_conan_installation ON) - if (EXISTS "${conanfile_timestamp_file}") - file(READ "${conanfile_timestamp_file}" old_conanfile_timestamp) - if ("${conanfile_timestamp}" STREQUAL "${old_conanfile_timestamp}") - set(do_conan_installation OFF) - endif() - endif() - - set(conanfile_build_policy_file "${CMAKE_BINARY_DIR}/conan-dependencies/conanfile.buildpolicy") - if (EXISTS "${conanfile_build_policy_file}") - file(READ "${conanfile_build_policy_file}" build_policy) - if (NOT "${build_policy}" STREQUAL "${QT_CREATOR_CONAN_BUILD_POLICY}") - set(do_conan_installation ON) - endif() - endif() - - if (do_conan_installation) - message(STATUS "Qt Creator: conan package manager auto-setup. " - "Skip this step by setting QT_CREATOR_SKIP_CONAN_SETUP to ON.") - - file(COPY "${conanfile_txt}" DESTINATION "${CMAKE_BINARY_DIR}/conan-dependencies/") - - file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" " - set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\") - set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\") - ") - qtc_auto_setup_compiler_standard("${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake") - - if (CMAKE_TOOLCHAIN_FILE) - file(APPEND "${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" - "include(\"${CMAKE_TOOLCHAIN_FILE}\")\n") - endif() - - file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/CMakeLists.txt" " - cmake_minimum_required(VERSION 3.15) - - unset(CMAKE_PROJECT_INCLUDE_BEFORE CACHE) - project(conan-setup) - - if (${conan_version} VERSION_GREATER_EQUAL 2.0) - set(CONAN_COMMAND \"${conan_program}\") - include(\"${CMAKE_CURRENT_LIST_DIR}/conan_provider.cmake\") - conan_profile_detect_default() - detect_host_profile(\"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\") - - set(build_types \${CMAKE_BUILD_TYPE}) - if (CMAKE_CONFIGURATION_TYPES) - set(build_types \${CMAKE_CONFIGURATION_TYPES}) - endif() - - foreach(type \${build_types}) - conan_install( - -pr \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\" - --build=${QT_CREATOR_CONAN_BUILD_POLICY} - -s build_type=\${type} - -g CMakeDeps) - endforeach() - - get_property(CONAN_INSTALL_SUCCESS GLOBAL PROPERTY CONAN_INSTALL_SUCCESS) - if (CONAN_INSTALL_SUCCESS) - get_property(CONAN_GENERATORS_FOLDER GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) - file(TO_CMAKE_PATH \"\${CONAN_GENERATORS_FOLDER}\" CONAN_GENERATORS_FOLDER) - file(WRITE \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake\" \" - list(PREPEND CMAKE_PREFIX_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") - list(PREPEND CMAKE_MODULE_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") - list(PREPEND CMAKE_FIND_ROOT_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") - list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH) - list(REMOVE_DUPLICATES CMAKE_MODULE_PATH) - list(REMOVE_DUPLICATES CMAKE_FIND_ROOT_PATH) - set(CMAKE_PREFIX_PATH \\\"\\\${CMAKE_PREFIX_PATH}\\\" CACHE STRING \\\"\\\" FORCE) - set(CMAKE_MODULE_PATH \\\"\\\${CMAKE_MODULE_PATH}\\\" CACHE STRING \\\"\\\" FORCE) - set(CMAKE_FIND_ROOT_PATH \\\"\\\${CMAKE_FIND_ROOT_PATH}\\\" CACHE STRING \\\"\\\" FORCE) - \") - endif() - else() - include(\"${CMAKE_CURRENT_LIST_DIR}/conan.cmake\") - conan_cmake_run( - CONANFILE \"${conanfile_txt}\" - INSTALL_FOLDER \"${CMAKE_BINARY_DIR}/conan-dependencies\" - GENERATORS cmake_paths cmake_find_package json - BUILD ${QT_CREATOR_CONAN_BUILD_POLICY} - ENV CONAN_CMAKE_TOOLCHAIN_FILE=\"${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake\" - ) - endif() - ") - - if (NOT DEFINED CMAKE_BUILD_TYPE AND NOT DEFINED CMAKE_CONFIGURATION_TYPES) - set(CMAKE_CONFIGURATION_TYPES "Debug;Release") - endif() - - execute_process(COMMAND ${CMAKE_COMMAND} - -S "${CMAKE_BINARY_DIR}/conan-dependencies/" - -B "${CMAKE_BINARY_DIR}/conan-dependencies/build" - -C "${CMAKE_BINARY_DIR}/qtcsettings.cmake" - -D "CMAKE_TOOLCHAIN_FILE=${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" - -G ${CMAKE_GENERATOR} - -D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -D "CMAKE_CONFIGURATION_TYPES=${CMAKE_CONFIGURATION_TYPES}" - RESULT_VARIABLE result - ) - if (result EQUAL 0) - file(WRITE "${conanfile_timestamp_file}" "${conanfile_timestamp}") - file(WRITE "${conanfile_build_policy_file}" ${QT_CREATOR_CONAN_BUILD_POLICY}) - else() - message(WARNING "Qt Creator's conan package manager auto-setup failed. Consider setting " - "QT_CREATOR_SKIP_CONAN_SETUP to ON and reconfigure to skip this step.") - return() - endif() - endif() - - include("${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake") - endif() - unset(conanfile_txt) -endmacro() -qtc_auto_setup_conan() - -# -# vcpkg -# -macro(qtc_auto_setup_vcpkg) - if (EXISTS "${CMAKE_SOURCE_DIR}/vcpkg.json" AND NOT QT_CREATOR_SKIP_VCPKG_SETUP) - option(QT_CREATOR_SKIP_VCPKG_SETUP "Skip Qt Creator's vcpkg package manager auto-setup" OFF) - - find_program(vcpkg_program vcpkg - PATHS $ENV{VCPKG_ROOT} ${CMAKE_SOURCE_DIR}/vcpkg - NO_DEFAULT_PATH - ) - if (NOT vcpkg_program) - message(WARNING "Qt Creator: vcpkg executable not found. " - "Package manager auto-setup will be skipped. " - "To disable this warning set QT_CREATOR_SKIP_VCPKG_SETUP to ON.") - return() - endif() - execute_process(COMMAND ${vcpkg_program} version - RESULT_VARIABLE result_code - OUTPUT_VARIABLE vcpkg_version_output - ERROR_VARIABLE vcpkg_version_output) - if (NOT result_code EQUAL 0) - message(FATAL_ERROR "vcpkg version failed='${result_code}: ${vcpkg_version_output}") - endif() - - # Resolve any symlinks - get_filename_component(vpkg_program_real_path ${vcpkg_program} REALPATH) - get_filename_component(vpkg_root ${vpkg_program_real_path} DIRECTORY) - - if (NOT EXISTS "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") - message(STATUS "Qt Creator: vcpkg package manager auto-setup. " - "Skip this step by setting QT_CREATOR_SKIP_VCPKG_SETUP to ON.") - - file(WRITE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" " - set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\") - set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\") - ") - qtc_auto_setup_compiler_standard("${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") - - if (CMAKE_TOOLCHAIN_FILE AND NOT - CMAKE_TOOLCHAIN_FILE STREQUAL "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") - file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" - "include(\"${CMAKE_TOOLCHAIN_FILE}\")\n") - endif() - - if (VCPKG_TARGET_TRIPLET) - set(vcpkg_triplet ${VCPKG_TARGET_TRIPLET}) - else() - if (WIN32) - set(vcpkg_triplet x64-mingw-static) - if (CMAKE_CXX_COMPILER MATCHES ".*/(.*)/cl.exe") - set(vcpkg_triplet ${CMAKE_MATCH_1}-windows) - endif() - elseif(APPLE) - set(vcpkg_triplet x64-osx) - else() - set(vcpkg_triplet x64-linux) - endif() - endif() - - file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" " - set(VCPKG_TARGET_TRIPLET ${vcpkg_triplet}) - include(\"${vpkg_root}/scripts/buildsystems/vcpkg.cmake\") - ") - endif() - - set(CMAKE_TOOLCHAIN_FILE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" CACHE PATH "" FORCE) - - # Save CMAKE_PREFIX_PATH and CMAKE_MODULE_PATH as cache variables - if (CMAKE_VERSION GREATER_EQUAL "3.19") - cmake_language(DEFER CALL list REMOVE_DUPLICATES CMAKE_PREFIX_PATH) - cmake_language(DEFER CALL list REMOVE_DUPLICATES CMAKE_MODULE_PATH) - cmake_language(DEFER CALL set CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH}" CACHE STRING "" FORCE) - cmake_language(DEFER CALL set CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" CACHE STRING "" FORCE) - endif() - endif() -endmacro() -qtc_auto_setup_vcpkg() diff --git a/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan.cmake b/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan.cmake deleted file mode 100644 index 4f5f67e74..000000000 --- a/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan.cmake +++ /dev/null @@ -1,1026 +0,0 @@ -# The MIT License (MIT) - -# Copyright (c) 2018 JFrog - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - - - -# This file comes from: https://github.com/conan-io/cmake-conan. Please refer -# to this repository for issues and documentation. - -# Its purpose is to wrap and launch Conan C/C++ Package Manager when cmake is called. -# It will take CMake current settings (os, compiler, compiler version, architecture) -# and translate them to conan settings for installing and retrieving dependencies. - -# It is intended to facilitate developers building projects that have conan dependencies, -# but it is only necessary on the end-user side. It is not necessary to create conan -# packages, in fact it shouldn't be use for that. Check the project documentation. - -# version: 0.18.1 - -include(CMakeParseArguments) - -function(_get_msvc_ide_version result) - set(${result} "" PARENT_SCOPE) - if(NOT MSVC_VERSION VERSION_LESS 1400 AND MSVC_VERSION VERSION_LESS 1500) - set(${result} 8 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1500 AND MSVC_VERSION VERSION_LESS 1600) - set(${result} 9 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1600 AND MSVC_VERSION VERSION_LESS 1700) - set(${result} 10 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1700 AND MSVC_VERSION VERSION_LESS 1800) - set(${result} 11 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1800 AND MSVC_VERSION VERSION_LESS 1900) - set(${result} 12 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1900 AND MSVC_VERSION VERSION_LESS 1910) - set(${result} 14 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1910 AND MSVC_VERSION VERSION_LESS 1920) - set(${result} 15 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1920 AND MSVC_VERSION VERSION_LESS 1930) - set(${result} 16 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1930 AND MSVC_VERSION VERSION_LESS 1940) - set(${result} 17 PARENT_SCOPE) - else() - message(FATAL_ERROR "Conan: Unknown MSVC compiler version [${MSVC_VERSION}]") - endif() -endfunction() - -macro(_conan_detect_build_type) - conan_parse_arguments(${ARGV}) - - if(ARGUMENTS_BUILD_TYPE) - set(_CONAN_SETTING_BUILD_TYPE ${ARGUMENTS_BUILD_TYPE}) - elseif(CMAKE_BUILD_TYPE) - set(_CONAN_SETTING_BUILD_TYPE ${CMAKE_BUILD_TYPE}) - else() - message(FATAL_ERROR "Please specify in command line CMAKE_BUILD_TYPE (-DCMAKE_BUILD_TYPE=Release)") - endif() - - string(TOUPPER ${_CONAN_SETTING_BUILD_TYPE} _CONAN_SETTING_BUILD_TYPE_UPPER) - if (_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "DEBUG") - set(_CONAN_SETTING_BUILD_TYPE "Debug") - elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "RELEASE") - set(_CONAN_SETTING_BUILD_TYPE "Release") - elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "RELWITHDEBINFO") - set(_CONAN_SETTING_BUILD_TYPE "RelWithDebInfo") - elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "MINSIZEREL") - set(_CONAN_SETTING_BUILD_TYPE "MinSizeRel") - endif() -endmacro() - -macro(_conan_check_system_name) - #handle -s os setting - if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") - #use default conan os setting if CMAKE_SYSTEM_NAME is not defined - set(CONAN_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}) - if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") - set(CONAN_SYSTEM_NAME Macos) - endif() - if(${CMAKE_SYSTEM_NAME} STREQUAL "QNX") - set(CONAN_SYSTEM_NAME Neutrino) - endif() - set(CONAN_SUPPORTED_PLATFORMS Windows Linux Macos Android iOS FreeBSD WindowsStore WindowsCE watchOS tvOS FreeBSD SunOS AIX Arduino Emscripten Neutrino) - list (FIND CONAN_SUPPORTED_PLATFORMS "${CONAN_SYSTEM_NAME}" _index) - if (${_index} GREATER -1) - #check if the cmake system is a conan supported one - set(_CONAN_SETTING_OS ${CONAN_SYSTEM_NAME}) - else() - message(FATAL_ERROR "cmake system ${CONAN_SYSTEM_NAME} is not supported by conan. Use one of ${CONAN_SUPPORTED_PLATFORMS}") - endif() - endif() -endmacro() - -macro(_conan_check_language) - get_property(_languages GLOBAL PROPERTY ENABLED_LANGUAGES) - if (";${_languages};" MATCHES ";CXX;") - set(LANGUAGE CXX) - set(USING_CXX 1) - elseif (";${_languages};" MATCHES ";C;") - set(LANGUAGE C) - set(USING_CXX 0) - else () - message(FATAL_ERROR "Conan: Neither C or C++ was detected as a language for the project. Unabled to detect compiler version.") - endif() -endmacro() - -macro(_conan_detect_compiler) - - conan_parse_arguments(${ARGV}) - - if(ARGUMENTS_ARCH) - set(_CONAN_SETTING_ARCH ${ARGUMENTS_ARCH}) - endif() - - if(USING_CXX) - set(_CONAN_SETTING_COMPILER_CPPSTD ${CMAKE_CXX_STANDARD}) - endif() - - if (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL GNU) - # using GCC - # TODO: Handle other params - string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) - list(GET VERSION_LIST 0 MAJOR) - list(GET VERSION_LIST 1 MINOR) - set(COMPILER_VERSION ${MAJOR}.${MINOR}) - if(${MAJOR} GREATER 4) - set(COMPILER_VERSION ${MAJOR}) - endif() - set(_CONAN_SETTING_COMPILER gcc) - set(_CONAN_SETTING_COMPILER_VERSION ${COMPILER_VERSION}) - if (USING_CXX) - conan_cmake_detect_unix_libcxx(_LIBCXX) - set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) - endif () - elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Intel) - string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) - list(GET VERSION_LIST 0 MAJOR) - list(GET VERSION_LIST 1 MINOR) - set(COMPILER_VERSION ${MAJOR}.${MINOR}) - set(_CONAN_SETTING_COMPILER intel) - set(_CONAN_SETTING_COMPILER_VERSION ${COMPILER_VERSION}) - if (USING_CXX) - conan_cmake_detect_unix_libcxx(_LIBCXX) - set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) - endif () - elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL AppleClang) - # using AppleClang - string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) - list(GET VERSION_LIST 0 MAJOR) - list(GET VERSION_LIST 1 MINOR) - set(_CONAN_SETTING_COMPILER apple-clang) - set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}.${MINOR}) - if (USING_CXX) - conan_cmake_detect_unix_libcxx(_LIBCXX) - set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) - endif () - elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Clang - AND NOT "${CMAKE_${LANGUAGE}_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC" - AND NOT "${CMAKE_${LANGUAGE}_SIMULATE_ID}" STREQUAL "MSVC") - - string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) - list(GET VERSION_LIST 0 MAJOR) - list(GET VERSION_LIST 1 MINOR) - set(_CONAN_SETTING_COMPILER clang) - set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}.${MINOR}) - if(APPLE) - cmake_policy(GET CMP0025 APPLE_CLANG_POLICY) - if(NOT APPLE_CLANG_POLICY STREQUAL NEW) - message(STATUS "Conan: APPLE and Clang detected. Assuming apple-clang compiler. Set CMP0025 to avoid it") - set(_CONAN_SETTING_COMPILER apple-clang) - endif() - endif() - if(${_CONAN_SETTING_COMPILER} STREQUAL clang AND ${MAJOR} GREATER 7) - set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}) - endif() - if (USING_CXX) - conan_cmake_detect_unix_libcxx(_LIBCXX) - set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) - endif () - elseif(${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL MSVC - OR (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Clang - AND "${CMAKE_${LANGUAGE}_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC" - AND "${CMAKE_${LANGUAGE}_SIMULATE_ID}" STREQUAL "MSVC")) - - set(_VISUAL "Visual Studio") - _get_msvc_ide_version(_VISUAL_VERSION) - if("${_VISUAL_VERSION}" STREQUAL "") - message(FATAL_ERROR "Conan: Visual Studio not recognized") - else() - set(_CONAN_SETTING_COMPILER ${_VISUAL}) - set(_CONAN_SETTING_COMPILER_VERSION ${_VISUAL_VERSION}) - endif() - - if(NOT _CONAN_SETTING_ARCH) - if (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "64") - set(_CONAN_SETTING_ARCH x86_64) - elseif (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "^ARM") - message(STATUS "Conan: Using default ARM architecture from MSVC") - set(_CONAN_SETTING_ARCH armv6) - elseif (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "86") - set(_CONAN_SETTING_ARCH x86) - else () - message(FATAL_ERROR "Conan: Unknown MSVC architecture [${MSVC_${LANGUAGE}_ARCHITECTURE_ID}]") - endif() - endif() - - conan_cmake_detect_vs_runtime(_vs_runtime ${ARGV}) - message(STATUS "Conan: Detected VS runtime: ${_vs_runtime}") - set(_CONAN_SETTING_COMPILER_RUNTIME ${_vs_runtime}) - - if (CMAKE_GENERATOR_TOOLSET) - set(_CONAN_SETTING_COMPILER_TOOLSET ${CMAKE_VS_PLATFORM_TOOLSET}) - elseif(CMAKE_VS_PLATFORM_TOOLSET AND (CMAKE_GENERATOR STREQUAL "Ninja")) - set(_CONAN_SETTING_COMPILER_TOOLSET ${CMAKE_VS_PLATFORM_TOOLSET}) - endif() - else() - message(FATAL_ERROR "Conan: compiler setup not recognized") - endif() - -endmacro() - -function(conan_cmake_settings result) - #message(STATUS "COMPILER " ${CMAKE_CXX_COMPILER}) - #message(STATUS "COMPILER " ${CMAKE_CXX_COMPILER_ID}) - #message(STATUS "VERSION " ${CMAKE_CXX_COMPILER_VERSION}) - #message(STATUS "FLAGS " ${CMAKE_LANG_FLAGS}) - #message(STATUS "LIB ARCH " ${CMAKE_CXX_LIBRARY_ARCHITECTURE}) - #message(STATUS "BUILD TYPE " ${CMAKE_BUILD_TYPE}) - #message(STATUS "GENERATOR " ${CMAKE_GENERATOR}) - #message(STATUS "GENERATOR WIN64 " ${CMAKE_CL_64}) - - message(STATUS "Conan: Automatic detection of conan settings from cmake") - - conan_parse_arguments(${ARGV}) - - _conan_detect_build_type(${ARGV}) - - _conan_check_system_name() - - _conan_check_language() - - _conan_detect_compiler(${ARGV}) - - # If profile is defined it is used - if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARGUMENTS_DEBUG_PROFILE) - set(_APPLIED_PROFILES ${ARGUMENTS_DEBUG_PROFILE}) - elseif(CMAKE_BUILD_TYPE STREQUAL "Release" AND ARGUMENTS_RELEASE_PROFILE) - set(_APPLIED_PROFILES ${ARGUMENTS_RELEASE_PROFILE}) - elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" AND ARGUMENTS_RELWITHDEBINFO_PROFILE) - set(_APPLIED_PROFILES ${ARGUMENTS_RELWITHDEBINFO_PROFILE}) - elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" AND ARGUMENTS_MINSIZEREL_PROFILE) - set(_APPLIED_PROFILES ${ARGUMENTS_MINSIZEREL_PROFILE}) - elseif(ARGUMENTS_PROFILE) - set(_APPLIED_PROFILES ${ARGUMENTS_PROFILE}) - endif() - - foreach(ARG ${_APPLIED_PROFILES}) - set(_SETTINGS ${_SETTINGS} -pr=${ARG}) - endforeach() - foreach(ARG ${ARGUMENTS_PROFILE_BUILD}) - conan_check(VERSION 1.24.0 REQUIRED DETECT_QUIET) - set(_SETTINGS ${_SETTINGS} -pr:b=${ARG}) - endforeach() - - if(NOT _SETTINGS OR ARGUMENTS_PROFILE_AUTO STREQUAL "ALL") - set(ARGUMENTS_PROFILE_AUTO arch build_type compiler compiler.version - compiler.runtime compiler.libcxx compiler.toolset) - endif() - - # remove any manually specified settings from the autodetected settings - foreach(ARG ${ARGUMENTS_SETTINGS}) - string(REGEX MATCH "[^=]*" MANUAL_SETTING "${ARG}") - message(STATUS "Conan: ${MANUAL_SETTING} was added as an argument. Not using the autodetected one.") - list(REMOVE_ITEM ARGUMENTS_PROFILE_AUTO "${MANUAL_SETTING}") - endforeach() - - # Automatic from CMake - foreach(ARG ${ARGUMENTS_PROFILE_AUTO}) - string(TOUPPER ${ARG} _arg_name) - string(REPLACE "." "_" _arg_name ${_arg_name}) - if(_CONAN_SETTING_${_arg_name}) - set(_SETTINGS ${_SETTINGS} -s ${ARG}=${_CONAN_SETTING_${_arg_name}}) - endif() - endforeach() - - foreach(ARG ${ARGUMENTS_SETTINGS}) - set(_SETTINGS ${_SETTINGS} -s ${ARG}) - endforeach() - - message(STATUS "Conan: Settings= ${_SETTINGS}") - - set(${result} ${_SETTINGS} PARENT_SCOPE) -endfunction() - - -function(conan_cmake_detect_unix_libcxx result) - # Take into account any -stdlib in compile options - get_directory_property(compile_options DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMPILE_OPTIONS) - string(GENEX_STRIP "${compile_options}" compile_options) - - # Take into account any _GLIBCXX_USE_CXX11_ABI in compile definitions - get_directory_property(defines DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMPILE_DEFINITIONS) - string(GENEX_STRIP "${defines}" defines) - - foreach(define ${defines}) - if(define MATCHES "_GLIBCXX_USE_CXX11_ABI") - if(define MATCHES "^-D") - set(compile_options ${compile_options} "${define}") - else() - set(compile_options ${compile_options} "-D${define}") - endif() - endif() - endforeach() - - # add additional compiler options ala cmRulePlaceholderExpander::ExpandRuleVariable - set(EXPAND_CXX_COMPILER ${CMAKE_CXX_COMPILER}) - if(CMAKE_CXX_COMPILER_ARG1) - # CMake splits CXX="foo bar baz" into CMAKE_CXX_COMPILER="foo", CMAKE_CXX_COMPILER_ARG1="bar baz" - # without this, ccache, winegcc, or other wrappers might lose all their arguments - separate_arguments(SPLIT_CXX_COMPILER_ARG1 NATIVE_COMMAND ${CMAKE_CXX_COMPILER_ARG1}) - list(APPEND EXPAND_CXX_COMPILER ${SPLIT_CXX_COMPILER_ARG1}) - endif() - - if(CMAKE_CXX_COMPILE_OPTIONS_TARGET AND CMAKE_CXX_COMPILER_TARGET) - # without --target= we may be calling the wrong underlying GCC - list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_TARGET}${CMAKE_CXX_COMPILER_TARGET}") - endif() - - if(CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN AND CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN) - list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN}") - endif() - - if(CMAKE_CXX_COMPILE_OPTIONS_SYSROOT) - # without --sysroot= we may find the wrong #include - if(CMAKE_SYSROOT_COMPILE) - list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT_COMPILE}") - elseif(CMAKE_SYSROOT) - list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT}") - endif() - endif() - - separate_arguments(SPLIT_CXX_FLAGS NATIVE_COMMAND ${CMAKE_CXX_FLAGS}) - - if(CMAKE_OSX_SYSROOT) - set(xcode_sysroot_option "--sysroot=${CMAKE_OSX_SYSROOT}") - endif() - - execute_process( - COMMAND ${CMAKE_COMMAND} -E echo "#include " - COMMAND ${EXPAND_CXX_COMPILER} ${SPLIT_CXX_FLAGS} -x c++ ${xcode_sysroot_option} ${compile_options} -E -dM - - OUTPUT_VARIABLE string_defines - ) - - if(string_defines MATCHES "#define __GLIBCXX__") - # Allow -D_GLIBCXX_USE_CXX11_ABI=ON/OFF as argument to cmake - if(DEFINED _GLIBCXX_USE_CXX11_ABI) - if(_GLIBCXX_USE_CXX11_ABI) - set(${result} libstdc++11 PARENT_SCOPE) - return() - else() - set(${result} libstdc++ PARENT_SCOPE) - return() - endif() - endif() - - if(string_defines MATCHES "#define _GLIBCXX_USE_CXX11_ABI 1\n") - set(${result} libstdc++11 PARENT_SCOPE) - else() - # Either the compiler is missing the define because it is old, and so - # it can't use the new abi, or the compiler was configured to use the - # old abi by the user or distro (e.g. devtoolset on RHEL/CentOS) - set(${result} libstdc++ PARENT_SCOPE) - endif() - else() - set(${result} libc++ PARENT_SCOPE) - endif() -endfunction() - -function(conan_cmake_detect_vs_runtime result) - - conan_parse_arguments(${ARGV}) - if(ARGUMENTS_BUILD_TYPE) - set(build_type "${ARGUMENTS_BUILD_TYPE}") - elseif(CMAKE_BUILD_TYPE) - set(build_type "${CMAKE_BUILD_TYPE}") - else() - message(FATAL_ERROR "Please specify in command line CMAKE_BUILD_TYPE (-DCMAKE_BUILD_TYPE=Release)") - endif() - - if(build_type) - string(TOUPPER "${build_type}" build_type) - endif() - set(variables CMAKE_CXX_FLAGS_${build_type} CMAKE_C_FLAGS_${build_type} CMAKE_CXX_FLAGS CMAKE_C_FLAGS) - foreach(variable ${variables}) - if(NOT "${${variable}}" STREQUAL "") - string(REPLACE " " ";" flags "${${variable}}") - foreach (flag ${flags}) - if("${flag}" STREQUAL "/MD" OR "${flag}" STREQUAL "/MDd" OR "${flag}" STREQUAL "/MT" OR "${flag}" STREQUAL "/MTd") - string(SUBSTRING "${flag}" 1 -1 runtime) - set(${result} "${runtime}" PARENT_SCOPE) - return() - endif() - endforeach() - endif() - endforeach() - if("${build_type}" STREQUAL "DEBUG") - set(${result} "MDd" PARENT_SCOPE) - else() - set(${result} "MD" PARENT_SCOPE) - endif() -endfunction() - -function(_collect_settings result) - set(ARGUMENTS_PROFILE_AUTO arch build_type compiler compiler.version - compiler.runtime compiler.libcxx compiler.toolset - compiler.cppstd) - foreach(ARG ${ARGUMENTS_PROFILE_AUTO}) - string(TOUPPER ${ARG} _arg_name) - string(REPLACE "." "_" _arg_name ${_arg_name}) - if(_CONAN_SETTING_${_arg_name}) - set(detected_setings ${detected_setings} ${ARG}=${_CONAN_SETTING_${_arg_name}}) - endif() - endforeach() - set(${result} ${detected_setings} PARENT_SCOPE) -endfunction() - -function(conan_cmake_autodetect detected_settings) - _conan_detect_build_type(${ARGV}) - _conan_check_system_name() - _conan_check_language() - _conan_detect_compiler(${ARGV}) - _collect_settings(collected_settings) - set(${detected_settings} ${collected_settings} PARENT_SCOPE) -endfunction() - -macro(conan_parse_arguments) - set(options BASIC_SETUP CMAKE_TARGETS UPDATE KEEP_RPATHS NO_LOAD NO_OUTPUT_DIRS OUTPUT_QUIET NO_IMPORTS SKIP_STD) - set(oneValueArgs CONANFILE ARCH BUILD_TYPE INSTALL_FOLDER OUTPUT_FOLDER CONAN_COMMAND) - set(multiValueArgs DEBUG_PROFILE RELEASE_PROFILE RELWITHDEBINFO_PROFILE MINSIZEREL_PROFILE - PROFILE REQUIRES OPTIONS IMPORTS SETTINGS BUILD ENV GENERATORS PROFILE_AUTO - INSTALL_ARGS CONFIGURATION_TYPES PROFILE_BUILD BUILD_REQUIRES) - cmake_parse_arguments(ARGUMENTS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) -endmacro() - -function(old_conan_cmake_install) - # Calls "conan install" - # Argument BUILD is equivalant to --build={missing, PkgName,...} or - # --build when argument is 'BUILD all' (which builds all packages from source) - # Argument CONAN_COMMAND, to specify the conan path, e.g. in case of running from source - # cmake does not identify conan as command, even if it is +x and it is in the path - conan_parse_arguments(${ARGV}) - - if(CONAN_CMAKE_MULTI) - set(ARGUMENTS_GENERATORS ${ARGUMENTS_GENERATORS} cmake_multi) - else() - set(ARGUMENTS_GENERATORS ${ARGUMENTS_GENERATORS} cmake) - endif() - - set(CONAN_BUILD_POLICY "") - foreach(ARG ${ARGUMENTS_BUILD}) - if(${ARG} STREQUAL "all") - set(CONAN_BUILD_POLICY ${CONAN_BUILD_POLICY} --build) - break() - else() - set(CONAN_BUILD_POLICY ${CONAN_BUILD_POLICY} --build=${ARG}) - endif() - endforeach() - if(ARGUMENTS_CONAN_COMMAND) - set(CONAN_CMD ${ARGUMENTS_CONAN_COMMAND}) - else() - conan_check(REQUIRED) - endif() - set(CONAN_OPTIONS "") - if(ARGUMENTS_CONANFILE) - if(IS_ABSOLUTE ${ARGUMENTS_CONANFILE}) - set(CONANFILE ${ARGUMENTS_CONANFILE}) - else() - set(CONANFILE ${CMAKE_CURRENT_SOURCE_DIR}/${ARGUMENTS_CONANFILE}) - endif() - else() - set(CONANFILE ".") - endif() - foreach(ARG ${ARGUMENTS_OPTIONS}) - set(CONAN_OPTIONS ${CONAN_OPTIONS} -o=${ARG}) - endforeach() - if(ARGUMENTS_UPDATE) - set(CONAN_INSTALL_UPDATE --update) - endif() - if(ARGUMENTS_NO_IMPORTS) - set(CONAN_INSTALL_NO_IMPORTS --no-imports) - endif() - set(CONAN_INSTALL_FOLDER "") - if(ARGUMENTS_INSTALL_FOLDER) - set(CONAN_INSTALL_FOLDER -if=${ARGUMENTS_INSTALL_FOLDER}) - endif() - set(CONAN_OUTPUT_FOLDER "") - if(ARGUMENTS_OUTPUT_FOLDER) - set(CONAN_OUTPUT_FOLDER -of=${ARGUMENTS_OUTPUT_FOLDER}) - endif() - foreach(ARG ${ARGUMENTS_GENERATORS}) - set(CONAN_GENERATORS ${CONAN_GENERATORS} -g=${ARG}) - endforeach() - foreach(ARG ${ARGUMENTS_ENV}) - set(CONAN_ENV_VARS ${CONAN_ENV_VARS} -e=${ARG}) - endforeach() - set(conan_args install ${CONANFILE} ${settings} ${CONAN_ENV_VARS} ${CONAN_GENERATORS} ${CONAN_BUILD_POLICY} ${CONAN_INSTALL_UPDATE} ${CONAN_INSTALL_NO_IMPORTS} ${CONAN_OPTIONS} ${CONAN_INSTALL_FOLDER} ${ARGUMENTS_INSTALL_ARGS}) - - string (REPLACE ";" " " _conan_args "${conan_args}") - message(STATUS "Conan executing: ${CONAN_CMD} ${_conan_args}") - - if(ARGUMENTS_OUTPUT_QUIET) - execute_process(COMMAND ${CONAN_CMD} ${conan_args} - RESULT_VARIABLE return_code - OUTPUT_VARIABLE conan_output - ERROR_VARIABLE conan_output - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - else() - execute_process(COMMAND ${CONAN_CMD} ${conan_args} - RESULT_VARIABLE return_code - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - endif() - - if(NOT "${return_code}" STREQUAL "0") - message(FATAL_ERROR "Conan install failed='${return_code}'") - endif() - -endfunction() - -function(conan_cmake_install) - if(DEFINED CONAN_COMMAND) - set(CONAN_CMD ${CONAN_COMMAND}) - else() - conan_check(REQUIRED) - endif() - - set(installOptions UPDATE NO_IMPORTS OUTPUT_QUIET ERROR_QUIET) - set(installOneValueArgs PATH_OR_REFERENCE REFERENCE REMOTE LOCKFILE LOCKFILE_OUT LOCKFILE_NODE_ID INSTALL_FOLDER OUTPUT_FOLDER) - set(installMultiValueArgs GENERATOR BUILD ENV ENV_HOST ENV_BUILD OPTIONS_HOST OPTIONS OPTIONS_BUILD PROFILE - PROFILE_HOST PROFILE_BUILD SETTINGS SETTINGS_HOST SETTINGS_BUILD) - cmake_parse_arguments(ARGS "${installOptions}" "${installOneValueArgs}" "${installMultiValueArgs}" ${ARGN}) - foreach(arg ${installOptions}) - if(ARGS_${arg}) - set(${arg} ${${arg}} ${ARGS_${arg}}) - endif() - endforeach() - foreach(arg ${installOneValueArgs}) - if(DEFINED ARGS_${arg}) - if("${arg}" STREQUAL "REMOTE") - set(flag "--remote") - elseif("${arg}" STREQUAL "LOCKFILE") - set(flag "--lockfile") - elseif("${arg}" STREQUAL "LOCKFILE_OUT") - set(flag "--lockfile-out") - elseif("${arg}" STREQUAL "LOCKFILE_NODE_ID") - set(flag "--lockfile-node-id") - elseif("${arg}" STREQUAL "INSTALL_FOLDER") - set(flag "--install-folder") - elseif("${arg}" STREQUAL "OUTPUT_FOLDER") - set(flag "--output-folder") - endif() - set(${arg} ${${arg}} ${flag} ${ARGS_${arg}}) - endif() - endforeach() - foreach(arg ${installMultiValueArgs}) - if(DEFINED ARGS_${arg}) - if("${arg}" STREQUAL "GENERATOR") - set(flag "--generator") - elseif("${arg}" STREQUAL "BUILD") - set(flag "--build") - elseif("${arg}" STREQUAL "ENV") - set(flag "--env") - elseif("${arg}" STREQUAL "ENV_HOST") - set(flag "--env:host") - elseif("${arg}" STREQUAL "ENV_BUILD") - set(flag "--env:build") - elseif("${arg}" STREQUAL "OPTIONS") - set(flag "--options") - elseif("${arg}" STREQUAL "OPTIONS_HOST") - set(flag "--options:host") - elseif("${arg}" STREQUAL "OPTIONS_BUILD") - set(flag "--options:build") - elseif("${arg}" STREQUAL "PROFILE") - set(flag "--profile") - elseif("${arg}" STREQUAL "PROFILE_HOST") - set(flag "--profile:host") - elseif("${arg}" STREQUAL "PROFILE_BUILD") - set(flag "--profile:build") - elseif("${arg}" STREQUAL "SETTINGS") - set(flag "--settings") - elseif("${arg}" STREQUAL "SETTINGS_HOST") - set(flag "--settings:host") - elseif("${arg}" STREQUAL "SETTINGS_BUILD") - set(flag "--settings:build") - endif() - list(LENGTH ARGS_${arg} numargs) - foreach(item ${ARGS_${arg}}) - if(${item} STREQUAL "all" AND ${arg} STREQUAL "BUILD") - set(${arg} "--build") - break() - endif() - set(${arg} ${${arg}} ${flag} ${item}) - endforeach() - endif() - endforeach() - if(DEFINED UPDATE) - set(UPDATE --update) - endif() - if(DEFINED NO_IMPORTS) - set(NO_IMPORTS --no-imports) - endif() - set(install_args install ${PATH_OR_REFERENCE} ${REFERENCE} ${UPDATE} ${NO_IMPORTS} ${REMOTE} ${LOCKFILE} ${LOCKFILE_OUT} ${LOCKFILE_NODE_ID} ${INSTALL_FOLDER} ${OUTPUT_FOLDER} - ${GENERATOR} ${BUILD} ${ENV} ${ENV_HOST} ${ENV_BUILD} ${OPTIONS} ${OPTIONS_HOST} ${OPTIONS_BUILD} - ${PROFILE} ${PROFILE_HOST} ${PROFILE_BUILD} ${SETTINGS} ${SETTINGS_HOST} ${SETTINGS_BUILD}) - - string(REPLACE ";" " " _install_args "${install_args}") - message(STATUS "Conan executing: ${CONAN_CMD} ${_install_args}") - - if(ARGS_OUTPUT_QUIET) - set(OUTPUT_OPT OUTPUT_QUIET) - endif() - if(ARGS_ERROR_QUIET) - set(ERROR_OPT ERROR_QUIET) - endif() - - execute_process(COMMAND ${CONAN_CMD} ${install_args} - RESULT_VARIABLE return_code - ${OUTPUT_OPT} - ${ERROR_OPT} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - - if(NOT "${return_code}" STREQUAL "0") - if (ARGS_ERROR_QUIET) - message(WARNING "Conan install failed='${return_code}'") - else() - message(FATAL_ERROR "Conan install failed='${return_code}'") - endif() - endif() - -endfunction() - -function(conan_cmake_lock_create) - if(DEFINED CONAN_COMMAND) - set(CONAN_CMD ${CONAN_COMMAND}) - else() - conan_check(REQUIRED) - endif() - - set(lockCreateOptions UPDATE BASE OUTPUT_QUIET ERROR_QUIET) - set(lockCreateOneValueArgs PATH REFERENCE REMOTE LOCKFILE LOCKFILE_OUT) - set(lockCreateMultiValueArgs BUILD ENV ENV_HOST ENV_BUILD OPTIONS_HOST OPTIONS OPTIONS_BUILD PROFILE - PROFILE_HOST PROFILE_BUILD SETTINGS SETTINGS_HOST SETTINGS_BUILD) - cmake_parse_arguments(ARGS "${lockCreateOptions}" "${lockCreateOneValueArgs}" "${lockCreateMultiValueArgs}" ${ARGN}) - foreach(arg ${lockCreateOptions}) - if(ARGS_${arg}) - set(${arg} ${${arg}} ${ARGS_${arg}}) - endif() - endforeach() - foreach(arg ${lockCreateOneValueArgs}) - if(DEFINED ARGS_${arg}) - if("${arg}" STREQUAL "REMOTE") - set(flag "--remote") - elseif("${arg}" STREQUAL "LOCKFILE") - set(flag "--lockfile") - elseif("${arg}" STREQUAL "LOCKFILE_OUT") - set(flag "--lockfile-out") - endif() - set(${arg} ${${arg}} ${flag} ${ARGS_${arg}}) - endif() - endforeach() - foreach(arg ${lockCreateMultiValueArgs}) - if(DEFINED ARGS_${arg}) - if("${arg}" STREQUAL "BUILD") - set(flag "--build") - elseif("${arg}" STREQUAL "ENV") - set(flag "--env") - elseif("${arg}" STREQUAL "ENV_HOST") - set(flag "--env:host") - elseif("${arg}" STREQUAL "ENV_BUILD") - set(flag "--env:build") - elseif("${arg}" STREQUAL "OPTIONS") - set(flag "--options") - elseif("${arg}" STREQUAL "OPTIONS_HOST") - set(flag "--options:host") - elseif("${arg}" STREQUAL "OPTIONS_BUILD") - set(flag "--options:build") - elseif("${arg}" STREQUAL "PROFILE") - set(flag "--profile") - elseif("${arg}" STREQUAL "PROFILE_HOST") - set(flag "--profile:host") - elseif("${arg}" STREQUAL "PROFILE_BUILD") - set(flag "--profile:build") - elseif("${arg}" STREQUAL "SETTINGS") - set(flag "--settings") - elseif("${arg}" STREQUAL "SETTINGS_HOST") - set(flag "--settings:host") - elseif("${arg}" STREQUAL "SETTINGS_BUILD") - set(flag "--settings:build") - endif() - list(LENGTH ARGS_${arg} numargs) - foreach(item ${ARGS_${arg}}) - if(${item} STREQUAL "all" AND ${arg} STREQUAL "BUILD") - set(${arg} "--build") - break() - endif() - set(${arg} ${${arg}} ${flag} ${item}) - endforeach() - endif() - endforeach() - if(DEFINED UPDATE) - set(UPDATE --update) - endif() - if(DEFINED BASE) - set(BASE --base) - endif() - set(lock_create_Args lock create ${PATH} ${REFERENCE} ${UPDATE} ${BASE} ${REMOTE} ${LOCKFILE} ${LOCKFILE_OUT} ${LOCKFILE_NODE_ID} ${INSTALL_FOLDER} - ${GENERATOR} ${BUILD} ${ENV} ${ENV_HOST} ${ENV_BUILD} ${OPTIONS} ${OPTIONS_HOST} ${OPTIONS_BUILD} - ${PROFILE} ${PROFILE_HOST} ${PROFILE_BUILD} ${SETTINGS} ${SETTINGS_HOST} ${SETTINGS_BUILD}) - - string(REPLACE ";" " " _lock_create_Args "${lock_create_Args}") - message(STATUS "Conan executing: ${CONAN_CMD} ${_lock_create_Args}") - - if(ARGS_OUTPUT_QUIET) - set(OUTPUT_OPT OUTPUT_QUIET) - endif() - if(ARGS_ERROR_QUIET) - set(ERROR_OPT ERROR_QUIET) - endif() - - execute_process(COMMAND ${CONAN_CMD} ${lock_create_Args} - RESULT_VARIABLE return_code - ${OUTPUT_OPT} - ${ERROR_OPT} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - - if(NOT "${return_code}" STREQUAL "0") - if (ARGS_ERROR_QUIET) - message(WARNING "Conan lock create failed='${return_code}'") - else() - message(FATAL_ERROR "Conan lock create failed='${return_code}'") - endif() - endif() -endfunction() - -function(conan_cmake_setup_conanfile) - conan_parse_arguments(${ARGV}) - if(ARGUMENTS_CONANFILE) - get_filename_component(_CONANFILE_NAME ${ARGUMENTS_CONANFILE} NAME) - # configure_file will make sure cmake re-runs when conanfile is updated - configure_file(${ARGUMENTS_CONANFILE} ${CMAKE_CURRENT_BINARY_DIR}/${_CONANFILE_NAME}.junk COPYONLY) - file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/${_CONANFILE_NAME}.junk) - else() - conan_cmake_generate_conanfile(ON ${ARGV}) - endif() -endfunction() - -function(conan_cmake_configure) - conan_cmake_generate_conanfile(OFF ${ARGV}) -endfunction() - -# Generate, writing in disk a conanfile.txt with the requires, options, and imports -# specified as arguments -# This will be considered as temporary file, generated in CMAKE_CURRENT_BINARY_DIR) -function(conan_cmake_generate_conanfile DEFAULT_GENERATOR) - - conan_parse_arguments(${ARGV}) - - set(_FN "${CMAKE_CURRENT_BINARY_DIR}/conanfile.txt") - file(WRITE ${_FN} "") - - if(DEFINED ARGUMENTS_REQUIRES) - file(APPEND ${_FN} "[requires]\n") - foreach(REQUIRE ${ARGUMENTS_REQUIRES}) - file(APPEND ${_FN} ${REQUIRE} "\n") - endforeach() - endif() - - if (DEFAULT_GENERATOR OR DEFINED ARGUMENTS_GENERATORS) - file(APPEND ${_FN} "[generators]\n") - if (DEFAULT_GENERATOR) - file(APPEND ${_FN} "cmake\n") - endif() - if (DEFINED ARGUMENTS_GENERATORS) - foreach(GENERATOR ${ARGUMENTS_GENERATORS}) - file(APPEND ${_FN} ${GENERATOR} "\n") - endforeach() - endif() - endif() - - if(DEFINED ARGUMENTS_BUILD_REQUIRES) - file(APPEND ${_FN} "[build_requires]\n") - foreach(BUILD_REQUIRE ${ARGUMENTS_BUILD_REQUIRES}) - file(APPEND ${_FN} ${BUILD_REQUIRE} "\n") - endforeach() - endif() - - if(DEFINED ARGUMENTS_IMPORTS) - file(APPEND ${_FN} "[imports]\n") - foreach(IMPORTS ${ARGUMENTS_IMPORTS}) - file(APPEND ${_FN} ${IMPORTS} "\n") - endforeach() - endif() - - if(DEFINED ARGUMENTS_OPTIONS) - file(APPEND ${_FN} "[options]\n") - foreach(OPTION ${ARGUMENTS_OPTIONS}) - file(APPEND ${_FN} ${OPTION} "\n") - endforeach() - endif() - -endfunction() - - -macro(conan_load_buildinfo) - if(CONAN_CMAKE_MULTI) - set(_CONANBUILDINFO conanbuildinfo_multi.cmake) - else() - set(_CONANBUILDINFO conanbuildinfo.cmake) - endif() - if(ARGUMENTS_INSTALL_FOLDER) - set(_CONANBUILDINFOFOLDER ${ARGUMENTS_INSTALL_FOLDER}) - else() - set(_CONANBUILDINFOFOLDER ${CMAKE_CURRENT_BINARY_DIR}) - endif() - # Checks for the existence of conanbuildinfo.cmake, and loads it - # important that it is macro, so variables defined at parent scope - if(EXISTS "${_CONANBUILDINFOFOLDER}/${_CONANBUILDINFO}") - message(STATUS "Conan: Loading ${_CONANBUILDINFO}") - include(${_CONANBUILDINFOFOLDER}/${_CONANBUILDINFO}) - else() - message(FATAL_ERROR "${_CONANBUILDINFO} doesn't exist in ${CMAKE_CURRENT_BINARY_DIR}") - endif() -endmacro() - - -macro(conan_cmake_run) - conan_parse_arguments(${ARGV}) - - if(ARGUMENTS_CONFIGURATION_TYPES AND NOT CMAKE_CONFIGURATION_TYPES) - message(WARNING "CONFIGURATION_TYPES should only be specified for multi-configuration generators") - elseif(ARGUMENTS_CONFIGURATION_TYPES AND ARGUMENTS_BUILD_TYPE) - message(WARNING "CONFIGURATION_TYPES and BUILD_TYPE arguments should not be defined at the same time.") - endif() - - if(CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE AND NOT CONAN_EXPORTED - AND NOT ARGUMENTS_BUILD_TYPE) - set(CONAN_CMAKE_MULTI ON) - if (NOT ARGUMENTS_CONFIGURATION_TYPES) - set(ARGUMENTS_CONFIGURATION_TYPES "Release;Debug") - endif() - message(STATUS "Conan: Using cmake-multi generator") - else() - set(CONAN_CMAKE_MULTI OFF) - endif() - - if(NOT CONAN_EXPORTED) - conan_cmake_setup_conanfile(${ARGV}) - if(CONAN_CMAKE_MULTI) - foreach(CMAKE_BUILD_TYPE ${ARGUMENTS_CONFIGURATION_TYPES}) - set(ENV{CONAN_IMPORT_PATH} ${CMAKE_BUILD_TYPE}) - conan_cmake_settings(settings ${ARGV}) - old_conan_cmake_install(SETTINGS ${settings} ${ARGV}) - endforeach() - set(CMAKE_BUILD_TYPE) - else() - conan_cmake_settings(settings ${ARGV}) - old_conan_cmake_install(SETTINGS ${settings} ${ARGV}) - endif() - endif() - - if (NOT ARGUMENTS_NO_LOAD) - conan_load_buildinfo() - endif() - - if(ARGUMENTS_BASIC_SETUP) - foreach(_option CMAKE_TARGETS KEEP_RPATHS NO_OUTPUT_DIRS SKIP_STD) - if(ARGUMENTS_${_option}) - if(${_option} STREQUAL "CMAKE_TARGETS") - list(APPEND _setup_options "TARGETS") - else() - list(APPEND _setup_options ${_option}) - endif() - endif() - endforeach() - conan_basic_setup(${_setup_options}) - endif() -endmacro() - -macro(conan_check) - # Checks conan availability in PATH - # Arguments REQUIRED, DETECT_QUIET and VERSION are optional - # Example usage: - # conan_check(VERSION 1.0.0 REQUIRED) - set(options REQUIRED DETECT_QUIET) - set(oneValueArgs VERSION) - cmake_parse_arguments(CONAN "${options}" "${oneValueArgs}" "" ${ARGN}) - if(NOT CONAN_DETECT_QUIET) - message(STATUS "Conan: checking conan executable") - endif() - - find_program(CONAN_CMD conan) - if(NOT CONAN_CMD AND CONAN_REQUIRED) - message(FATAL_ERROR "Conan executable not found! Please install conan.") - endif() - if(NOT CONAN_DETECT_QUIET) - message(STATUS "Conan: Found program ${CONAN_CMD}") - endif() - execute_process(COMMAND ${CONAN_CMD} --version - RESULT_VARIABLE return_code - OUTPUT_VARIABLE CONAN_VERSION_OUTPUT - ERROR_VARIABLE CONAN_VERSION_OUTPUT) - - if(NOT "${return_code}" STREQUAL "0") - message(FATAL_ERROR "Conan --version failed='${return_code}'") - endif() - - if(NOT CONAN_DETECT_QUIET) - string(STRIP "${CONAN_VERSION_OUTPUT}" _CONAN_VERSION_OUTPUT) - message(STATUS "Conan: Version found ${_CONAN_VERSION_OUTPUT}") - endif() - - if(DEFINED CONAN_VERSION) - string(REGEX MATCH ".*Conan version ([0-9]+\\.[0-9]+\\.[0-9]+)" FOO - "${CONAN_VERSION_OUTPUT}") - if(${CMAKE_MATCH_1} VERSION_LESS ${CONAN_VERSION}) - message(FATAL_ERROR "Conan outdated. Installed: ${CMAKE_MATCH_1}, \ - required: ${CONAN_VERSION}. Consider updating via 'pip \ - install conan==${CONAN_VERSION}'.") - endif() - endif() -endmacro() - -function(conan_add_remote) - # Adds a remote - # Arguments URL and NAME are required, INDEX, COMMAND and VERIFY_SSL are optional - # Example usage: - # conan_add_remote(NAME bincrafters INDEX 1 - # URL https://api.bintray.com/conan/bincrafters/public-conan - # VERIFY_SSL True) - set(oneValueArgs URL NAME INDEX COMMAND VERIFY_SSL) - cmake_parse_arguments(CONAN "" "${oneValueArgs}" "" ${ARGN}) - - if(DEFINED CONAN_INDEX) - set(CONAN_INDEX_ARG "-i ${CONAN_INDEX}") - endif() - if(DEFINED CONAN_COMMAND) - set(CONAN_CMD ${CONAN_COMMAND}) - else() - conan_check(REQUIRED DETECT_QUIET) - endif() - set(CONAN_VERIFY_SSL_ARG "True") - if(DEFINED CONAN_VERIFY_SSL) - set(CONAN_VERIFY_SSL_ARG ${CONAN_VERIFY_SSL}) - endif() - message(STATUS "Conan: Adding ${CONAN_NAME} remote repository (${CONAN_URL}) verify ssl (${CONAN_VERIFY_SSL_ARG})") - execute_process(COMMAND ${CONAN_CMD} remote add ${CONAN_NAME} ${CONAN_INDEX_ARG} -f ${CONAN_URL} ${CONAN_VERIFY_SSL_ARG} - RESULT_VARIABLE return_code) - if(NOT "${return_code}" STREQUAL "0") - message(FATAL_ERROR "Conan remote failed='${return_code}'") - endif() -endfunction() - -macro(conan_config_install) - # install a full configuration from a local or remote zip file - # Argument ITEM is required, arguments TYPE, SOURCE, TARGET and VERIFY_SSL are optional - # Example usage: - # conan_config_install(ITEM https://github.com/conan-io/cmake-conan.git - # TYPE git SOURCE source-folder TARGET target-folder VERIFY_SSL false) - set(oneValueArgs ITEM TYPE SOURCE TARGET VERIFY_SSL) - set(multiValueArgs ARGS) - cmake_parse_arguments(CONAN "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - if(DEFINED CONAN_COMMAND) - set(CONAN_CMD ${CONAN_COMMAND}) - else() - conan_check(REQUIRED) - endif() - - if(DEFINED CONAN_VERIFY_SSL) - set(CONAN_VERIFY_SSL_ARG "--verify-ssl=${CONAN_VERIFY_SSL}") - endif() - - if(DEFINED CONAN_TYPE) - set(CONAN_TYPE_ARG "--type=${CONAN_TYPE}") - endif() - - if(DEFINED CONAN_ARGS) - set(CONAN_ARGS_ARGS "--args=\"${CONAN_ARGS}\"") - endif() - - if(DEFINED CONAN_SOURCE) - set(CONAN_SOURCE_ARGS "--source-folder=${CONAN_SOURCE}") - endif() - - if(DEFINED CONAN_TARGET) - set(CONAN_TARGET_ARGS "--target-folder=${CONAN_TARGET}") - endif() - - set (CONAN_CONFIG_INSTALL_ARGS ${CONAN_VERIFY_SSL_ARG} - ${CONAN_TYPE_ARG} - ${CONAN_ARGS_ARGS} - ${CONAN_SOURCE_ARGS} - ${CONAN_TARGET_ARGS}) - - message(STATUS "Conan: Installing config from ${CONAN_ITEM}") - execute_process(COMMAND ${CONAN_CMD} config install ${CONAN_ITEM} ${CONAN_CONFIG_INSTALL_ARGS} - RESULT_VARIABLE return_code) - if(NOT "${return_code}" STREQUAL "0") - message(FATAL_ERROR "Conan config failed='${return_code}'") - endif() -endmacro() diff --git a/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan_provider.cmake b/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan_provider.cmake deleted file mode 100644 index e5fa9cec1..000000000 --- a/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/conan_provider.cmake +++ /dev/null @@ -1,655 +0,0 @@ -# https://github.com/conan-io/cmake-conan/blob/develop2/conan_provider.cmake -# commit: f6464d1e13ef7a47c569f5061f9607ea63339d39 -# -# The MIT License (MIT) -# -# Copyright (c) 2019 JFrog -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -set(CONAN_MINIMUM_VERSION 2.0.5) - - -function(detect_os OS OS_API_LEVEL OS_SDK OS_SUBSYSTEM OS_VERSION) - # it could be cross compilation - message(STATUS "CMake-Conan: cmake_system_name=${CMAKE_SYSTEM_NAME}") - if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") - if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(${OS} Macos PARENT_SCOPE) - elseif(CMAKE_SYSTEM_NAME STREQUAL "QNX") - set(${OS} Neutrino PARENT_SCOPE) - elseif(CMAKE_SYSTEM_NAME STREQUAL "CYGWIN") - set(${OS} Windows PARENT_SCOPE) - set(${OS_SUBSYSTEM} cygwin PARENT_SCOPE) - elseif(CMAKE_SYSTEM_NAME MATCHES "^MSYS") - set(${OS} Windows PARENT_SCOPE) - set(${OS_SUBSYSTEM} msys2 PARENT_SCOPE) - else() - set(${OS} ${CMAKE_SYSTEM_NAME} PARENT_SCOPE) - endif() - if(CMAKE_SYSTEM_NAME STREQUAL "Android") - if(DEFINED ANDROID_PLATFORM) - string(REGEX MATCH "[0-9]+" _OS_API_LEVEL ${ANDROID_PLATFORM}) - elseif(DEFINED CMAKE_SYSTEM_VERSION) - set(_OS_API_LEVEL ${CMAKE_SYSTEM_VERSION}) - endif() - message(STATUS "CMake-Conan: android api level=${_OS_API_LEVEL}") - set(${OS_API_LEVEL} ${_OS_API_LEVEL} PARENT_SCOPE) - endif() - if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS") - # CMAKE_OSX_SYSROOT contains the full path to the SDK for MakeFile/Ninja - # generators, but just has the original input string for Xcode. - if(NOT IS_DIRECTORY ${CMAKE_OSX_SYSROOT}) - set(_OS_SDK ${CMAKE_OSX_SYSROOT}) - else() - if(CMAKE_OSX_SYSROOT MATCHES Simulator) - set(apple_platform_suffix simulator) - else() - set(apple_platform_suffix os) - endif() - if(CMAKE_OSX_SYSROOT MATCHES AppleTV) - set(_OS_SDK "appletv${apple_platform_suffix}") - elseif(CMAKE_OSX_SYSROOT MATCHES iPhone) - set(_OS_SDK "iphone${apple_platform_suffix}") - elseif(CMAKE_OSX_SYSROOT MATCHES Watch) - set(_OS_SDK "watch${apple_platform_suffix}") - endif() - endif() - if(DEFINED _OS_SDK) - message(STATUS "CMake-Conan: cmake_osx_sysroot=${CMAKE_OSX_SYSROOT}") - set(${OS_SDK} ${_OS_SDK} PARENT_SCOPE) - endif() - if(DEFINED CMAKE_OSX_DEPLOYMENT_TARGET) - message(STATUS "CMake-Conan: cmake_osx_deployment_target=${CMAKE_OSX_DEPLOYMENT_TARGET}") - set(${OS_VERSION} ${CMAKE_OSX_DEPLOYMENT_TARGET} PARENT_SCOPE) - endif() - endif() - endif() -endfunction() - - -function(detect_arch ARCH) - # CMAKE_OSX_ARCHITECTURES can contain multiple architectures, but Conan only supports one. - # Therefore this code only finds one. If the recipes support multiple architectures, the - # build will work. Otherwise, there will be a linker error for the missing architecture(s). - if(DEFINED CMAKE_OSX_ARCHITECTURES) - string(REPLACE " " ";" apple_arch_list "${CMAKE_OSX_ARCHITECTURES}") - list(LENGTH apple_arch_list apple_arch_count) - if(apple_arch_count GREATER 1) - message(WARNING "CMake-Conan: Multiple architectures detected, this will only work if Conan recipe(s) produce fat binaries.") - endif() - endif() - if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS" AND NOT CMAKE_OSX_ARCHITECTURES STREQUAL "") - set(host_arch ${CMAKE_OSX_ARCHITECTURES}) - elseif(MSVC) - set(host_arch ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}) - else() - set(host_arch ${CMAKE_SYSTEM_PROCESSOR}) - endif() - if(host_arch MATCHES "aarch64|arm64|ARM64") - set(_ARCH armv8) - elseif(host_arch MATCHES "armv7|armv7-a|armv7l|ARMV7") - set(_ARCH armv7) - elseif(host_arch MATCHES armv7s) - set(_ARCH armv7s) - elseif(host_arch MATCHES "i686|i386|X86") - set(_ARCH x86) - elseif(host_arch MATCHES "AMD64|amd64|x86_64|x64") - set(_ARCH x86_64) - endif() - message(STATUS "CMake-Conan: cmake_system_processor=${_ARCH}") - set(${ARCH} ${_ARCH} PARENT_SCOPE) -endfunction() - - -function(detect_cxx_standard CXX_STANDARD) - set(${CXX_STANDARD} ${CMAKE_CXX_STANDARD} PARENT_SCOPE) - if(CMAKE_CXX_EXTENSIONS) - set(${CXX_STANDARD} "gnu${CMAKE_CXX_STANDARD}" PARENT_SCOPE) - endif() -endfunction() - - -macro(detect_gnu_libstdcxx) - # _CONAN_IS_GNU_LIBSTDCXX true if GNU libstdc++ - check_cxx_source_compiles(" - #include - #if !defined(__GLIBCXX__) && !defined(__GLIBCPP__) - static_assert(false); - #endif - int main(){}" _CONAN_IS_GNU_LIBSTDCXX) - - # _CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI true if C++11 ABI - check_cxx_source_compiles(" - #include - static_assert(sizeof(std::string) != sizeof(void*), \"using libstdc++\"); - int main () {}" _CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) - - set(_CONAN_GNU_LIBSTDCXX_SUFFIX "") - if(_CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) - set(_CONAN_GNU_LIBSTDCXX_SUFFIX "11") - endif() - unset (_CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) -endmacro() - - -macro(detect_libcxx) - # _CONAN_IS_LIBCXX true if LLVM libc++ - check_cxx_source_compiles(" - #include - #if !defined(_LIBCPP_VERSION) - static_assert(false); - #endif - int main(){}" _CONAN_IS_LIBCXX) -endmacro() - - -function(detect_lib_cxx LIB_CXX) - if(CMAKE_SYSTEM_NAME STREQUAL "Android") - message(STATUS "CMake-Conan: android_stl=${CMAKE_ANDROID_STL_TYPE}") - set(${LIB_CXX} ${CMAKE_ANDROID_STL_TYPE} PARENT_SCOPE) - return() - endif() - - include(CheckCXXSourceCompiles) - - if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") - detect_gnu_libstdcxx() - set(${LIB_CXX} "libstdc++${_CONAN_GNU_LIBSTDCXX_SUFFIX}" PARENT_SCOPE) - elseif(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") - set(${LIB_CXX} "libc++" PARENT_SCOPE) - elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT CMAKE_SYSTEM_NAME MATCHES "Windows") - # Check for libc++ - detect_libcxx() - if(_CONAN_IS_LIBCXX) - set(${LIB_CXX} "libc++" PARENT_SCOPE) - return() - endif() - - # Check for libstdc++ - detect_gnu_libstdcxx() - if(_CONAN_IS_GNU_LIBSTDCXX) - set(${LIB_CXX} "libstdc++${_CONAN_GNU_LIBSTDCXX_SUFFIX}" PARENT_SCOPE) - return() - endif() - - # TODO: it would be an error if we reach this point - elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") - # Do nothing - compiler.runtime and compiler.runtime_type - # should be handled separately: https://github.com/conan-io/cmake-conan/pull/516 - return() - else() - # TODO: unable to determine, ask user to provide a full profile file instead - endif() -endfunction() - - -function(detect_compiler COMPILER COMPILER_VERSION COMPILER_RUNTIME COMPILER_RUNTIME_TYPE) - if(DEFINED CMAKE_CXX_COMPILER_ID) - set(_COMPILER ${CMAKE_CXX_COMPILER_ID}) - set(_COMPILER_VERSION ${CMAKE_CXX_COMPILER_VERSION}) - else() - if(NOT DEFINED CMAKE_C_COMPILER_ID) - message(FATAL_ERROR "C or C++ compiler not defined") - endif() - set(_COMPILER ${CMAKE_C_COMPILER_ID}) - set(_COMPILER_VERSION ${CMAKE_C_COMPILER_VERSION}) - endif() - - message(STATUS "CMake-Conan: CMake compiler=${_COMPILER}") - message(STATUS "CMake-Conan: CMake compiler version=${_COMPILER_VERSION}") - - if(_COMPILER MATCHES MSVC) - set(_COMPILER "msvc") - string(SUBSTRING ${MSVC_VERSION} 0 3 _COMPILER_VERSION) - # Configure compiler.runtime and compiler.runtime_type settings for MSVC - if(CMAKE_MSVC_RUNTIME_LIBRARY) - set(_msvc_runtime_library ${CMAKE_MSVC_RUNTIME_LIBRARY}) - else() - set(_msvc_runtime_library MultiThreaded$<$:Debug>DLL) # default value documented by CMake - endif() - - set(_KNOWN_MSVC_RUNTIME_VALUES "") - list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded MultiThreadedDLL) - list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreadedDebug MultiThreadedDebugDLL) - list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded$<$:Debug> MultiThreaded$<$:Debug>DLL) - - # only accept the 6 possible values, otherwise we don't don't know to map this - if(NOT _msvc_runtime_library IN_LIST _KNOWN_MSVC_RUNTIME_VALUES) - message(FATAL_ERROR "CMake-Conan: unable to map MSVC runtime: ${_msvc_runtime_library} to Conan settings") - endif() - - # Runtime is "dynamic" in all cases if it ends in DLL - if(_msvc_runtime_library MATCHES ".*DLL$") - set(_COMPILER_RUNTIME "dynamic") - else() - set(_COMPILER_RUNTIME "static") - endif() - message(STATUS "CMake-Conan: CMake compiler.runtime=${_COMPILER_RUNTIME}") - - # Only define compiler.runtime_type when explicitly requested - # If a generator expression is used, let Conan handle it conditional on build_type - if(NOT _msvc_runtime_library MATCHES ":Debug>") - if(_msvc_runtime_library MATCHES "Debug") - set(_COMPILER_RUNTIME_TYPE "Debug") - else() - set(_COMPILER_RUNTIME_TYPE "Release") - endif() - message(STATUS "CMake-Conan: CMake compiler.runtime_type=${_COMPILER_RUNTIME_TYPE}") - endif() - - unset(_KNOWN_MSVC_RUNTIME_VALUES) - - elseif(_COMPILER MATCHES AppleClang) - set(_COMPILER "apple-clang") - string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) - list(GET VERSION_LIST 0 _COMPILER_VERSION) - elseif(_COMPILER MATCHES Clang) - set(_COMPILER "clang") - string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) - list(GET VERSION_LIST 0 _COMPILER_VERSION) - elseif(_COMPILER MATCHES GNU) - set(_COMPILER "gcc") - string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) - list(GET VERSION_LIST 0 _COMPILER_VERSION) - endif() - - message(STATUS "CMake-Conan: [settings] compiler=${_COMPILER}") - message(STATUS "CMake-Conan: [settings] compiler.version=${_COMPILER_VERSION}") - if (_COMPILER_RUNTIME) - message(STATUS "CMake-Conan: [settings] compiler.runtime=${_COMPILER_RUNTIME}") - endif() - if (_COMPILER_RUNTIME_TYPE) - message(STATUS "CMake-Conan: [settings] compiler.runtime_type=${_COMPILER_RUNTIME_TYPE}") - endif() - - set(${COMPILER} ${_COMPILER} PARENT_SCOPE) - set(${COMPILER_VERSION} ${_COMPILER_VERSION} PARENT_SCOPE) - set(${COMPILER_RUNTIME} ${_COMPILER_RUNTIME} PARENT_SCOPE) - set(${COMPILER_RUNTIME_TYPE} ${_COMPILER_RUNTIME_TYPE} PARENT_SCOPE) -endfunction() - - -function(detect_build_type BUILD_TYPE) - get_property(_MULTICONFIG_GENERATOR GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) - if(NOT _MULTICONFIG_GENERATOR) - # Only set when we know we are in a single-configuration generator - # Note: we may want to fail early if `CMAKE_BUILD_TYPE` is not defined - set(${BUILD_TYPE} ${CMAKE_BUILD_TYPE} PARENT_SCOPE) - endif() -endfunction() - -macro(set_conan_compiler_if_appleclang lang command output_variable) - if(CMAKE_${lang}_COMPILER_ID STREQUAL "AppleClang") - execute_process(COMMAND xcrun --find ${command} - OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE) - cmake_path(GET _xcrun_out PARENT_PATH _xcrun_toolchain_path) - cmake_path(GET CMAKE_${lang}_COMPILER PARENT_PATH _compiler_parent_path) - if ("${_xcrun_toolchain_path}" STREQUAL "${_compiler_parent_path}") - set(${output_variable} "") - endif() - unset(_xcrun_out) - unset(_xcrun_toolchain_path) - unset(_compiler_parent_path) - endif() -endmacro() - - -macro(append_compiler_executables_configuration) - set(_conan_c_compiler "") - set(_conan_cpp_compiler "") - if(CMAKE_C_COMPILER) - set(_conan_c_compiler "\"c\":\"${CMAKE_C_COMPILER}\",") - set_conan_compiler_if_appleclang(C cc _conan_c_compiler) - else() - message(WARNING "CMake-Conan: The C compiler is not defined. " - "Please define CMAKE_C_COMPILER or enable the C language.") - endif() - if(CMAKE_CXX_COMPILER) - set(_conan_cpp_compiler "\"cpp\":\"${CMAKE_CXX_COMPILER}\"") - set_conan_compiler_if_appleclang(CXX c++ _conan_cpp_compiler) - else() - message(WARNING "CMake-Conan: The C++ compiler is not defined. " - "Please define CMAKE_CXX_COMPILER or enable the C++ language.") - endif() - - if(NOT "x${_conan_c_compiler}${_conan_cpp_compiler}" STREQUAL "x") - string(APPEND PROFILE "tools.build:compiler_executables={${_conan_c_compiler}${_conan_cpp_compiler}}\n") - endif() - unset(_conan_c_compiler) - unset(_conan_cpp_compiler) -endmacro() - - -function(detect_host_profile output_file) - detect_os(MYOS MYOS_API_LEVEL MYOS_SDK MYOS_SUBSYSTEM MYOS_VERSION) - detect_arch(MYARCH) - detect_compiler(MYCOMPILER MYCOMPILER_VERSION MYCOMPILER_RUNTIME MYCOMPILER_RUNTIME_TYPE) - detect_cxx_standard(MYCXX_STANDARD) - detect_lib_cxx(MYLIB_CXX) - detect_build_type(MYBUILD_TYPE) - - set(PROFILE "") - string(APPEND PROFILE "[settings]\n") - if(MYARCH) - string(APPEND PROFILE arch=${MYARCH} "\n") - endif() - if(MYOS) - string(APPEND PROFILE os=${MYOS} "\n") - endif() - if(MYOS_API_LEVEL) - string(APPEND PROFILE os.api_level=${MYOS_API_LEVEL} "\n") - endif() - if(MYOS_VERSION) - string(APPEND PROFILE os.version=${MYOS_VERSION} "\n") - endif() - if(MYOS_SDK) - string(APPEND PROFILE os.sdk=${MYOS_SDK} "\n") - endif() - if(MYOS_SUBSYSTEM) - string(APPEND PROFILE os.subsystem=${MYOS_SUBSYSTEM} "\n") - endif() - if(MYCOMPILER) - string(APPEND PROFILE compiler=${MYCOMPILER} "\n") - endif() - if(MYCOMPILER_VERSION) - string(APPEND PROFILE compiler.version=${MYCOMPILER_VERSION} "\n") - endif() - if(MYCOMPILER_RUNTIME) - string(APPEND PROFILE compiler.runtime=${MYCOMPILER_RUNTIME} "\n") - endif() - if(MYCOMPILER_RUNTIME_TYPE) - string(APPEND PROFILE compiler.runtime_type=${MYCOMPILER_RUNTIME_TYPE} "\n") - endif() - if(MYCXX_STANDARD) - string(APPEND PROFILE compiler.cppstd=${MYCXX_STANDARD} "\n") - endif() - if(MYLIB_CXX) - string(APPEND PROFILE compiler.libcxx=${MYLIB_CXX} "\n") - endif() - if(MYBUILD_TYPE) - string(APPEND PROFILE "build_type=${MYBUILD_TYPE}\n") - endif() - - if(NOT DEFINED output_file) - set(_FN "${CMAKE_BINARY_DIR}/profile") - else() - set(_FN ${output_file}) - endif() - - string(APPEND PROFILE "[conf]\n") - string(APPEND PROFILE "tools.cmake.cmaketoolchain:generator=${CMAKE_GENERATOR}\n") - - # propagate compilers via profile - append_compiler_executables_configuration() - - if(MYOS STREQUAL "Android") - string(APPEND PROFILE "tools.android:ndk_path=${CMAKE_ANDROID_NDK}\n") - endif() - - message(STATUS "CMake-Conan: Creating profile ${_FN}") - file(WRITE ${_FN} ${PROFILE}) - message(STATUS "CMake-Conan: Profile: \n${PROFILE}") -endfunction() - - -function(conan_profile_detect_default) - message(STATUS "CMake-Conan: Checking if a default profile exists") - execute_process(COMMAND ${CONAN_COMMAND} profile path default - RESULT_VARIABLE return_code - OUTPUT_VARIABLE conan_stdout - ERROR_VARIABLE conan_stderr - ECHO_ERROR_VARIABLE # show the text output regardless - ECHO_OUTPUT_VARIABLE - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - if(NOT ${return_code} EQUAL "0") - message(STATUS "CMake-Conan: The default profile doesn't exist, detecting it.") - execute_process(COMMAND ${CONAN_COMMAND} profile detect - RESULT_VARIABLE return_code - OUTPUT_VARIABLE conan_stdout - ERROR_VARIABLE conan_stderr - ECHO_ERROR_VARIABLE # show the text output regardless - ECHO_OUTPUT_VARIABLE - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - endif() -endfunction() - - -function(conan_install) - cmake_parse_arguments(ARGS CONAN_ARGS ${ARGN}) - set(CONAN_OUTPUT_FOLDER ${CMAKE_BINARY_DIR}/conan) - # Invoke "conan install" with the provided arguments - set(CONAN_ARGS ${CONAN_ARGS} -of=${CONAN_OUTPUT_FOLDER}) - message(STATUS "CMake-Conan: conan install ${CMAKE_SOURCE_DIR} ${CONAN_ARGS} ${ARGN}") - - - # In case there was not a valid cmake executable in the PATH, we inject the - # same we used to invoke the provider to the PATH - if(DEFINED PATH_TO_CMAKE_BIN) - set(_OLD_PATH $ENV{PATH}) - set(ENV{PATH} "$ENV{PATH}:${PATH_TO_CMAKE_BIN}") - endif() - - execute_process(COMMAND ${CONAN_COMMAND} install ${CMAKE_SOURCE_DIR} ${CONAN_ARGS} ${ARGN} --format=json - RESULT_VARIABLE return_code - OUTPUT_VARIABLE conan_stdout - ERROR_VARIABLE conan_stderr - ECHO_ERROR_VARIABLE # show the text output regardless - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - - if(DEFINED PATH_TO_CMAKE_BIN) - set(ENV{PATH} "${_OLD_PATH}") - endif() - - if(NOT "${return_code}" STREQUAL "0") - message(FATAL_ERROR "Conan install failed='${return_code}'") - else() - # the files are generated in a folder that depends on the layout used, if - # one is specified, but we don't know a priori where this is. - # TODO: this can be made more robust if Conan can provide this in the json output - string(JSON CONAN_GENERATORS_FOLDER GET ${conan_stdout} graph nodes 0 generators_folder) - cmake_path(CONVERT ${CONAN_GENERATORS_FOLDER} TO_CMAKE_PATH_LIST CONAN_GENERATORS_FOLDER) - # message("conan stdout: ${conan_stdout}") - message(STATUS "CMake-Conan: CONAN_GENERATORS_FOLDER=${CONAN_GENERATORS_FOLDER}") - set_property(GLOBAL PROPERTY CONAN_GENERATORS_FOLDER "${CONAN_GENERATORS_FOLDER}") - # reconfigure on conanfile changes - string(JSON CONANFILE GET ${conan_stdout} graph nodes 0 label) - message(STATUS "CMake-Conan: CONANFILE=${CMAKE_SOURCE_DIR}/${CONANFILE}") - set_property(DIRECTORY ${CMAKE_SOURCE_DIR} APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/${CONANFILE}") - # success - set_property(GLOBAL PROPERTY CONAN_INSTALL_SUCCESS TRUE) - endif() -endfunction() - - -function(conan_get_version conan_command conan_current_version) - execute_process( - COMMAND ${conan_command} --version - OUTPUT_VARIABLE conan_output - RESULT_VARIABLE conan_result - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - if(conan_result) - message(FATAL_ERROR "CMake-Conan: Error when trying to run Conan") - endif() - - string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" conan_version ${conan_output}) - set(${conan_current_version} ${conan_version} PARENT_SCOPE) -endfunction() - - -function(conan_version_check) - set(options ) - set(oneValueArgs MINIMUM CURRENT) - set(multiValueArgs ) - cmake_parse_arguments(CONAN_VERSION_CHECK - "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - if(NOT CONAN_VERSION_CHECK_MINIMUM) - message(FATAL_ERROR "CMake-Conan: Required parameter MINIMUM not set!") - endif() - if(NOT CONAN_VERSION_CHECK_CURRENT) - message(FATAL_ERROR "CMake-Conan: Required parameter CURRENT not set!") - endif() - - if(CONAN_VERSION_CHECK_CURRENT VERSION_LESS CONAN_VERSION_CHECK_MINIMUM) - message(FATAL_ERROR "CMake-Conan: Conan version must be ${CONAN_VERSION_CHECK_MINIMUM} or later") - endif() -endfunction() - - -macro(construct_profile_argument argument_variable profile_list) - set(${argument_variable} "") - if("${profile_list}" STREQUAL "CONAN_HOST_PROFILE") - set(_arg_flag "--profile:host=") - elseif("${profile_list}" STREQUAL "CONAN_BUILD_PROFILE") - set(_arg_flag "--profile:build=") - endif() - - set(_profile_list "${${profile_list}}") - list(TRANSFORM _profile_list REPLACE "auto-cmake" "${CMAKE_BINARY_DIR}/conan_host_profile") - list(TRANSFORM _profile_list PREPEND ${_arg_flag}) - set(${argument_variable} ${_profile_list}) - - unset(_arg_flag) - unset(_profile_list) -endmacro() - - -macro(conan_provide_dependency method package_name) - set_property(GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED TRUE) - get_property(_conan_install_success GLOBAL PROPERTY CONAN_INSTALL_SUCCESS) - if(NOT _conan_install_success) - find_program(CONAN_COMMAND "conan" REQUIRED) - conan_get_version(${CONAN_COMMAND} CONAN_CURRENT_VERSION) - conan_version_check(MINIMUM ${CONAN_MINIMUM_VERSION} CURRENT ${CONAN_CURRENT_VERSION}) - message(STATUS "CMake-Conan: first find_package() found. Installing dependencies with Conan") - if("default" IN_LIST CONAN_HOST_PROFILE OR "default" IN_LIST CONAN_BUILD_PROFILE) - conan_profile_detect_default() - endif() - if("auto-cmake" IN_LIST CONAN_HOST_PROFILE) - detect_host_profile(${CMAKE_BINARY_DIR}/conan_host_profile) - endif() - construct_profile_argument(_host_profile_flags CONAN_HOST_PROFILE) - construct_profile_argument(_build_profile_flags CONAN_BUILD_PROFILE) - if(EXISTS "${CMAKE_SOURCE_DIR}/conanfile.py") - file(READ "${CMAKE_SOURCE_DIR}/conanfile.py" outfile) - if(NOT "${outfile}" MATCHES ".*CMakeDeps.*") - message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile") - endif() - set(generator "") - elseif (EXISTS "${CMAKE_SOURCE_DIR}/conanfile.txt") - file(READ "${CMAKE_SOURCE_DIR}/conanfile.txt" outfile) - if(NOT "${outfile}" MATCHES ".*CMakeDeps.*") - message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile. " - "Please define the generator as it will be mandatory in the future") - endif() - set(generator "-g;CMakeDeps") - endif() - get_property(_multiconfig_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) - if(NOT _multiconfig_generator) - message(STATUS "CMake-Conan: Installing single configuration ${CMAKE_BUILD_TYPE}") - conan_install(${_host_profile_flags} ${_build_profile_flags} ${CONAN_INSTALL_ARGS} ${generator}) - else() - message(STATUS "CMake-Conan: Installing both Debug and Release") - conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Release ${CONAN_INSTALL_ARGS} ${generator}) - conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Debug ${CONAN_INSTALL_ARGS} ${generator}) - endif() - unset(_host_profile_flags) - unset(_build_profile_flags) - unset(_multiconfig_generator) - unset(_conan_install_success) - else() - message(STATUS "CMake-Conan: find_package(${ARGV1}) found, 'conan install' already ran") - unset(_conan_install_success) - endif() - - get_property(_conan_generators_folder GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) - - # Ensure that we consider Conan-provided packages ahead of any other, - # irrespective of other settings that modify the search order or search paths - # This follows the guidelines from the find_package documentation - # (https://cmake.org/cmake/help/latest/command/find_package.html): - # find_package ( PATHS paths... NO_DEFAULT_PATH) - # find_package () - - # Filter out `REQUIRED` from the argument list, as the first call may fail - set(_find_args_${package_name} "${ARGN}") - list(REMOVE_ITEM _find_args_${package_name} "REQUIRED") - if(NOT "MODULE" IN_LIST _find_args_${package_name}) - find_package(${package_name} ${_find_args_${package_name}} BYPASS_PROVIDER PATHS "${_conan_generators_folder}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) - unset(_find_args_${package_name}) - endif() - - # Invoke find_package a second time - if the first call succeeded, - # this will simply reuse the result. If not, fall back to CMake default search - # behaviour, also allowing modules to be searched. - if(NOT ${package_name}_FOUND) - list(FIND CMAKE_MODULE_PATH "${_conan_generators_folder}" _index) - if(_index EQUAL -1) - list(PREPEND CMAKE_MODULE_PATH "${_conan_generators_folder}") - endif() - unset(_index) - find_package(${package_name} ${ARGN} BYPASS_PROVIDER) - list(REMOVE_ITEM CMAKE_MODULE_PATH "${_conan_generators_folder}") - endif() -endmacro() - -#[=[ not needed by Qt Creator, and if not commented it would break the auto-setup feature - -cmake_language( - SET_DEPENDENCY_PROVIDER conan_provide_dependency - SUPPORTED_METHODS FIND_PACKAGE -) - - -macro(conan_provide_dependency_check) - set(_CONAN_PROVIDE_DEPENDENCY_INVOKED FALSE) - get_property(_CONAN_PROVIDE_DEPENDENCY_INVOKED GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED) - if(NOT _CONAN_PROVIDE_DEPENDENCY_INVOKED) - message(WARNING "Conan is correctly configured as dependency provider, " - "but Conan has not been invoked. Please add at least one " - "call to `find_package()`.") - if(DEFINED CONAN_COMMAND) - # supress warning in case `CONAN_COMMAND` was specified but unused. - set(_CONAN_COMMAND ${CONAN_COMMAND}) - unset(_CONAN_COMMAND) - endif() - endif() - unset(_CONAN_PROVIDE_DEPENDENCY_INVOKED) -endmacro() - - -# Add a deferred call at the end of processing the top-level directory -# to check if the dependency provider was invoked at all. -cmake_language(DEFER DIRECTORY "${CMAKE_SOURCE_DIR}" CALL conan_provide_dependency_check) - -]=] - -# Configurable variables for Conan profiles -set(CONAN_HOST_PROFILE "default;auto-cmake" CACHE STRING "Conan host profile") -set(CONAN_BUILD_PROFILE "default" CACHE STRING "Conan build profile") -set(CONAN_INSTALL_ARGS "--build=missing" CACHE STRING "Command line arguments for conan install") - -find_program(_cmake_program NAMES cmake NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_CMAKE_FIND_ROOT_PATH) -if(NOT _cmake_program) - get_filename_component(PATH_TO_CMAKE_BIN "${CMAKE_COMMAND}" DIRECTORY) - set(PATH_TO_CMAKE_BIN "${PATH_TO_CMAKE_BIN}" CACHE INTERNAL "Path where the CMake executable is") -endif() - diff --git a/build/Desktop_Qt_6_8_0-Debug/CMakeCache.txt b/build/Desktop_Qt_6_8_0-Debug/CMakeCache.txt deleted file mode 100644 index 56f50b7f7..000000000 --- a/build/Desktop_Qt_6_8_0-Debug/CMakeCache.txt +++ /dev/null @@ -1,445 +0,0 @@ -# This is the CMakeCache file. -# For build in directory: /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug -# It was generated by CMake: /home/austenharrell/Qt/Tools/CMake/bin/cmake -# You can edit this file to change values found and used by cmake. -# If you do not want to change any of the values, simply exit the editor. -# If you do want to change a value, simply edit, save, and exit the editor. -# The syntax for the file is as follows: -# KEY:TYPE=VALUE -# KEY is the name of a variable in the cache. -# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. -# VALUE is the current value for the KEY. - -######################## -# EXTERNAL cache entries -######################## - -//Boost date_time library (debug) -Boost_DATE_TIME_LIBRARY_DEBUG:FILEPATH=Boost_DATE_TIME_LIBRARY_DEBUG-NOTFOUND - -//Boost date_time library (release) -Boost_DATE_TIME_LIBRARY_RELEASE:FILEPATH=Boost_DATE_TIME_LIBRARY_RELEASE-NOTFOUND - -//The directory containing a CMake configuration file for Boost. -Boost_DIR:PATH=Boost_DIR-NOTFOUND - -//Path to a file. -Boost_INCLUDE_DIR:PATH=Boost_INCLUDE_DIR-NOTFOUND - -//Boost program_options library (debug) -Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG:FILEPATH=Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG-NOTFOUND - -//Boost program_options library (release) -Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE:FILEPATH=Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE-NOTFOUND - -//Boost unit_test_framework library (debug) -Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG:FILEPATH=Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG-NOTFOUND - -//Boost unit_test_framework library (release) -Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE:FILEPATH=Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE-NOTFOUND - -//Path to a program. -CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line - -//Path to a program. -CMAKE_AR:FILEPATH=/usr/bin/ar - -//No help, variable specified on the command line. -CMAKE_BUILD_TYPE:STRING=Debug - -//Enable colored diagnostics throughout. -CMAKE_COLOR_DIAGNOSTICS:BOOL=1 - -//CXX compiler -CMAKE_CXX_COMPILER:STRING=/usr/bin/x86_64-linux-gnu-g++-11 - -//A wrapper around 'ar' adding the appropriate '--plugin' option -// for the GCC compiler -CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/x86_64-linux-gnu-gcc-ar-11 - -//A wrapper around 'ranlib' adding the appropriate '--plugin' option -// for the GCC compiler -CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/x86_64-linux-gnu-gcc-ranlib-11 - -//Flags used by the CXX compiler during all build types. -CMAKE_CXX_FLAGS:STRING=-DQT_QML_DEBUG - -//Flags used by the CXX compiler during DEBUG builds. -CMAKE_CXX_FLAGS_DEBUG:STRING=-g - -//No help, variable specified on the command line. -CMAKE_CXX_FLAGS_INIT:STRING=-DQT_QML_DEBUG - -//Flags used by the CXX compiler during MINSIZEREL builds. -CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG - -//Flags used by the CXX compiler during RELEASE builds. -CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG - -//Flags used by the CXX compiler during RELWITHDEBINFO builds. -CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG - -//C compiler -CMAKE_C_COMPILER:STRING=/usr/bin/gcc-11 - -//A wrapper around 'ar' adding the appropriate '--plugin' option -// for the GCC compiler -CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-11 - -//A wrapper around 'ranlib' adding the appropriate '--plugin' option -// for the GCC compiler -CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-11 - -//Flags used by the C compiler during all build types. -CMAKE_C_FLAGS:STRING= - -//Flags used by the C compiler during DEBUG builds. -CMAKE_C_FLAGS_DEBUG:STRING=-g - -//Flags used by the C compiler during MINSIZEREL builds. -CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG - -//Flags used by the C compiler during RELEASE builds. -CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG - -//Flags used by the C compiler during RELWITHDEBINFO builds. -CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG - -//Path to a program. -CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND - -//Flags used by the linker during all build types. -CMAKE_EXE_LINKER_FLAGS:STRING= - -//Flags used by the linker during DEBUG builds. -CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= - -//Flags used by the linker during MINSIZEREL builds. -CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= - -//Flags used by the linker during RELEASE builds. -CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= - -//Flags used by the linker during RELWITHDEBINFO builds. -CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= - -//Enable/Disable output of compile commands during generation. -CMAKE_EXPORT_COMPILE_COMMANDS:BOOL= - -//Value Computed by CMake. -CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/pkgRedirects - -//No help, variable specified on the command line. -CMAKE_GENERATOR:STRING=Ninja - -//Install path prefix, prepended onto install directories. -CMAKE_INSTALL_PREFIX:PATH=/usr/local - -//Path to a program. -CMAKE_LINKER:FILEPATH=/usr/bin/ld - -//Program used to build from build.ninja files. -CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/ninja - -//Flags used by the linker during the creation of modules during -// all build types. -CMAKE_MODULE_LINKER_FLAGS:STRING= - -//Flags used by the linker during the creation of modules during -// DEBUG builds. -CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= - -//Flags used by the linker during the creation of modules during -// MINSIZEREL builds. -CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= - -//Flags used by the linker during the creation of modules during -// RELEASE builds. -CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= - -//Flags used by the linker during the creation of modules during -// RELWITHDEBINFO builds. -CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= - -//Path to a program. -CMAKE_NM:FILEPATH=/usr/bin/nm - -//Path to a program. -CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy - -//Path to a program. -CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump - -//No help, variable specified on the command line. -CMAKE_PREFIX_PATH:PATH=/home/austenharrell/Qt/6.8.0/gcc_64 - -//Value Computed by CMake -CMAKE_PROJECT_DESCRIPTION:STATIC= - -//Value Computed by CMake -CMAKE_PROJECT_HOMEPAGE_URL:STATIC= - -//No help, variable specified on the command line. -CMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake - -//Value Computed by CMake -CMAKE_PROJECT_NAME:STATIC=WindNinja - -//Path to a program. -CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib - -//Path to a program. -CMAKE_READELF:FILEPATH=/usr/bin/readelf - -//Flags used by the linker during the creation of shared libraries -// during all build types. -CMAKE_SHARED_LINKER_FLAGS:STRING= - -//Flags used by the linker during the creation of shared libraries -// during DEBUG builds. -CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= - -//Flags used by the linker during the creation of shared libraries -// during MINSIZEREL builds. -CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= - -//Flags used by the linker during the creation of shared libraries -// during RELEASE builds. -CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= - -//Flags used by the linker during the creation of shared libraries -// during RELWITHDEBINFO builds. -CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= - -//If set, runtime paths are not added when installing shared libraries, -// but are added when building. -CMAKE_SKIP_INSTALL_RPATH:BOOL=NO - -//If set, runtime paths are not added when using shared libraries. -CMAKE_SKIP_RPATH:BOOL=NO - -//Flags used by the linker during the creation of static libraries -// during all build types. -CMAKE_STATIC_LINKER_FLAGS:STRING= - -//Flags used by the linker during the creation of static libraries -// during DEBUG builds. -CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= - -//Flags used by the linker during the creation of static libraries -// during MINSIZEREL builds. -CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= - -//Flags used by the linker during the creation of static libraries -// during RELEASE builds. -CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= - -//Flags used by the linker during the creation of static libraries -// during RELWITHDEBINFO builds. -CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= - -//Path to a program. -CMAKE_STRIP:FILEPATH=/usr/bin/strip - -//Path to a program. -CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND - -//If this value is on, makefiles will be generated without the -// .SILENT directive, and all commands will be echoed to the console -// during the make. This is useful for debugging only. With Visual -// Studio IDE projects all commands are done without /nologo. -CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE - -//Build a windows installer with dlls from the firelab machine -FIRELAB_PACKAGE:BOOL=OFF - -//Skip Qt Creator's package manager auto-setup -QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP:BOOL=OFF - -//No help, variable specified on the command line. -QT_QMAKE_EXECUTABLE:FILEPATH=/home/austenharrell/Qt/6.8.0/gcc_64/bin/qmake - -//Value Computed by CMake -WindNinja_BINARY_DIR:STATIC=/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug - -//Value Computed by CMake -WindNinja_IS_TOP_LEVEL:STATIC=ON - -//Value Computed by CMake -WindNinja_SOURCE_DIR:STATIC=/home/austenharrell/school/2025_Spring/windninja - - -######################## -# INTERNAL cache entries -######################## - -//ADVANCED property for variable: Boost_DATE_TIME_LIBRARY_DEBUG -Boost_DATE_TIME_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: Boost_DATE_TIME_LIBRARY_RELEASE -Boost_DATE_TIME_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: Boost_DIR -Boost_DIR-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: Boost_INCLUDE_DIR -Boost_INCLUDE_DIR-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG -Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE -Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG -Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE -Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_ADDR2LINE -CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_AR -CMAKE_AR-ADVANCED:INTERNAL=1 -//This is the directory where this CMakeCache.txt was created -CMAKE_CACHEFILE_DIR:INTERNAL=/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug -//Major version of cmake used to create the current loaded cache -CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 -//Minor version of cmake used to create the current loaded cache -CMAKE_CACHE_MINOR_VERSION:INTERNAL=29 -//Patch version of cmake used to create the current loaded cache -CMAKE_CACHE_PATCH_VERSION:INTERNAL=3 -//Path to CMake executable. -CMAKE_COMMAND:INTERNAL=/home/austenharrell/Qt/Tools/CMake/bin/cmake -//Path to cpack program executable. -CMAKE_CPACK_COMMAND:INTERNAL=/home/austenharrell/Qt/Tools/CMake/bin/cpack -//Path to ctest program executable. -CMAKE_CTEST_COMMAND:INTERNAL=/home/austenharrell/Qt/Tools/CMake/bin/ctest -//ADVANCED property for variable: CMAKE_CXX_COMPILER -CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR -CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB -CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_FLAGS -CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG -CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL -CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE -CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO -CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_COMPILER -CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_COMPILER_AR -CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB -CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS -CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG -CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL -CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE -CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO -CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_DLLTOOL -CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 -//Path to cache edit program executable. -CMAKE_EDIT_COMMAND:INTERNAL=/home/austenharrell/Qt/Tools/CMake/bin/ccmake -//Executable file format -CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS -CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG -CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL -CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE -CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO -CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS -CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 -//Generator instance identifier. -CMAKE_GENERATOR_INSTANCE:INTERNAL= -//Name of generator platform. -CMAKE_GENERATOR_PLATFORM:INTERNAL= -//Name of generator toolset. -CMAKE_GENERATOR_TOOLSET:INTERNAL= -//Source directory with the top level CMakeLists.txt file for this -// project -CMAKE_HOME_DIRECTORY:INTERNAL=/home/austenharrell/school/2025_Spring/windninja -//Install .so files without execute permission. -CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 -//ADVANCED property for variable: CMAKE_LINKER -CMAKE_LINKER-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MAKE_PROGRAM -CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS -CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG -CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL -CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE -CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO -CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_NM -CMAKE_NM-ADVANCED:INTERNAL=1 -//number of local generators -CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 -//ADVANCED property for variable: CMAKE_OBJCOPY -CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_OBJDUMP -CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 -//Platform information initialized -CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_RANLIB -CMAKE_RANLIB-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_READELF -CMAKE_READELF-ADVANCED:INTERNAL=1 -//Path to CMake installation. -CMAKE_ROOT:INTERNAL=/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS -CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG -CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL -CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE -CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO -CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH -CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SKIP_RPATH -CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS -CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG -CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL -CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE -CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO -CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STRIP -CMAKE_STRIP-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_TAPI -CMAKE_TAPI-ADVANCED:INTERNAL=1 -//uname command -CMAKE_UNAME:INTERNAL=/usr/bin/uname -//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE -CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: FIRELAB_PACKAGE -FIRELAB_PACKAGE-ADVANCED:INTERNAL=1 -//Components requested for this build tree. -_Boost_COMPONENTS_SEARCHED:INTERNAL= -//Last used Boost_INCLUDE_DIR value. -_Boost_INCLUDE_DIR_LAST:INTERNAL=Boost_INCLUDE_DIR-NOTFOUND -//Last used Boost_NAMESPACE value. -_Boost_NAMESPACE_LAST:INTERNAL=boost -//Last used Boost_USE_MULTITHREADED value. -_Boost_USE_MULTITHREADED_LAST:INTERNAL=TRUE -//linker supports push/pop state -_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE - diff --git a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCCompiler.cmake b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCCompiler.cmake deleted file mode 100644 index 2bbc9eb34..000000000 --- a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCCompiler.cmake +++ /dev/null @@ -1,80 +0,0 @@ -set(CMAKE_C_COMPILER "/usr/bin/gcc-11") -set(CMAKE_C_COMPILER_ARG1 "") -set(CMAKE_C_COMPILER_ID "GNU") -set(CMAKE_C_COMPILER_VERSION "11.4.0") -set(CMAKE_C_COMPILER_VERSION_INTERNAL "") -set(CMAKE_C_COMPILER_WRAPPER "") -set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "17") -set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "ON") -set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17;c_std_23") -set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") -set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") -set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") -set(CMAKE_C17_COMPILE_FEATURES "c_std_17") -set(CMAKE_C23_COMPILE_FEATURES "c_std_23") - -set(CMAKE_C_PLATFORM_ID "Linux") -set(CMAKE_C_SIMULATE_ID "") -set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU") -set(CMAKE_C_SIMULATE_VERSION "") - - - - -set(CMAKE_AR "/usr/bin/ar") -set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar-11") -set(CMAKE_RANLIB "/usr/bin/ranlib") -set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib-11") -set(CMAKE_LINKER "/usr/bin/ld") -set(CMAKE_LINKER_LINK "") -set(CMAKE_LINKER_LLD "") -set(CMAKE_C_COMPILER_LINKER "/usr/bin/ld") -set(CMAKE_C_COMPILER_LINKER_ID "GNU") -set(CMAKE_C_COMPILER_LINKER_VERSION 2.38) -set(CMAKE_C_COMPILER_LINKER_FRONTEND_VARIANT GNU) -set(CMAKE_MT "") -set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") -set(CMAKE_COMPILER_IS_GNUCC 1) -set(CMAKE_C_COMPILER_LOADED 1) -set(CMAKE_C_COMPILER_WORKS TRUE) -set(CMAKE_C_ABI_COMPILED TRUE) - -set(CMAKE_C_COMPILER_ENV_VAR "CC") - -set(CMAKE_C_COMPILER_ID_RUN 1) -set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) -set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) -set(CMAKE_C_LINKER_PREFERENCE 10) -set(CMAKE_C_LINKER_DEPFILE_SUPPORTED FALSE) - -# Save compiler ABI information. -set(CMAKE_C_SIZEOF_DATA_PTR "8") -set(CMAKE_C_COMPILER_ABI "ELF") -set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN") -set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") - -if(CMAKE_C_SIZEOF_DATA_PTR) - set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") -endif() - -if(CMAKE_C_COMPILER_ABI) - set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") -endif() - -if(CMAKE_C_LIBRARY_ARCHITECTURE) - set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") -endif() - -set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") -if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) - set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") -endif() - - - - - -set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") -set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s") -set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") -set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake deleted file mode 100644 index bfe6256d5..000000000 --- a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake +++ /dev/null @@ -1,92 +0,0 @@ -set(CMAKE_CXX_COMPILER "/usr/bin/x86_64-linux-gnu-g++-11") -set(CMAKE_CXX_COMPILER_ARG1 "") -set(CMAKE_CXX_COMPILER_ID "GNU") -set(CMAKE_CXX_COMPILER_VERSION "11.4.0") -set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") -set(CMAKE_CXX_COMPILER_WRAPPER "") -set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17") -set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON") -set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23") -set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") -set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") -set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") -set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") -set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") -set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23") - -set(CMAKE_CXX_PLATFORM_ID "Linux") -set(CMAKE_CXX_SIMULATE_ID "") -set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU") -set(CMAKE_CXX_SIMULATE_VERSION "") - - - - -set(CMAKE_AR "/usr/bin/ar") -set(CMAKE_CXX_COMPILER_AR "/usr/bin/x86_64-linux-gnu-gcc-ar-11") -set(CMAKE_RANLIB "/usr/bin/ranlib") -set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/x86_64-linux-gnu-gcc-ranlib-11") -set(CMAKE_LINKER "/usr/bin/ld") -set(CMAKE_LINKER_LINK "") -set(CMAKE_LINKER_LLD "") -set(CMAKE_CXX_COMPILER_LINKER "/usr/bin/ld") -set(CMAKE_CXX_COMPILER_LINKER_ID "GNU") -set(CMAKE_CXX_COMPILER_LINKER_VERSION 2.38) -set(CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT GNU) -set(CMAKE_MT "") -set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") -set(CMAKE_COMPILER_IS_GNUCXX 1) -set(CMAKE_CXX_COMPILER_LOADED 1) -set(CMAKE_CXX_COMPILER_WORKS TRUE) -set(CMAKE_CXX_ABI_COMPILED TRUE) - -set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") - -set(CMAKE_CXX_COMPILER_ID_RUN 1) -set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m) -set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) - -foreach (lang IN ITEMS C OBJC OBJCXX) - if (CMAKE_${lang}_COMPILER_ID_RUN) - foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) - list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) - endforeach() - endif() -endforeach() - -set(CMAKE_CXX_LINKER_PREFERENCE 30) -set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) -set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED FALSE) - -# Save compiler ABI information. -set(CMAKE_CXX_SIZEOF_DATA_PTR "8") -set(CMAKE_CXX_COMPILER_ABI "ELF") -set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN") -set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") - -if(CMAKE_CXX_SIZEOF_DATA_PTR) - set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") -endif() - -if(CMAKE_CXX_COMPILER_ABI) - set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") -endif() - -if(CMAKE_CXX_LIBRARY_ARCHITECTURE) - set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") -endif() - -set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") -if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) - set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") -endif() - - - - - -set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/11;/usr/include/x86_64-linux-gnu/c++/11;/usr/include/c++/11/backward;/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") -set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") -set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") -set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") -set(CMAKE_CXX_COMPILER_CLANG_RESOURCE_DIR "") diff --git a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_C.bin b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_C.bin deleted file mode 100755 index 59672f58544a0d3fa118329bec892cc5d8608ac8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15968 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 Z0>QaorNy;#ZU061!veG*;1CeSKLPgAN{|2m diff --git a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_CXX.bin b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_CXX.bin deleted file mode 100755 index cfa527b53452d63fe64b6a8e2d060ddc5e29a3a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15992 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 & 0x00FF) -# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) -# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) - -#elif defined(__BORLANDC__) -# define COMPILER_ID "Borland" - /* __BORLANDC__ = 0xVRR */ -# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) -# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) - -#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 -# define COMPILER_ID "Watcom" - /* __WATCOMC__ = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__WATCOMC__) -# define COMPILER_ID "OpenWatcom" - /* __WATCOMC__ = VVRP + 1100 */ -# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__SUNPRO_C) -# define COMPILER_ID "SunPro" -# if __SUNPRO_C >= 0x5100 - /* __SUNPRO_C = 0xVRRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) -# else - /* __SUNPRO_CC = 0xVRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) -# endif - -#elif defined(__HP_cc) -# define COMPILER_ID "HP" - /* __HP_cc = VVRRPP */ -# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) -# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) - -#elif defined(__DECC) -# define COMPILER_ID "Compaq" - /* __DECC_VER = VVRRTPPPP */ -# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) -# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) -# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) - -#elif defined(__IBMC__) && defined(__COMPILER_VER__) -# define COMPILER_ID "zOS" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__open_xl__) && defined(__clang__) -# define COMPILER_ID "IBMClang" -# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) -# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) -# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) - - -#elif defined(__ibmxl__) && defined(__clang__) -# define COMPILER_ID "XLClang" -# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) -# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) -# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) - - -#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 -# define COMPILER_ID "XL" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 -# define COMPILER_ID "VisualAge" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__NVCOMPILER) -# define COMPILER_ID "NVHPC" -# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) -# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) -# if defined(__NVCOMPILER_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) -# endif - -#elif defined(__PGI) -# define COMPILER_ID "PGI" -# define COMPILER_VERSION_MAJOR DEC(__PGIC__) -# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) -# if defined(__PGIC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) -# endif - -#elif defined(__clang__) && defined(__cray__) -# define COMPILER_ID "CrayClang" -# define COMPILER_VERSION_MAJOR DEC(__cray_major__) -# define COMPILER_VERSION_MINOR DEC(__cray_minor__) -# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) -# define COMPILER_VERSION_INTERNAL_STR __clang_version__ - - -#elif defined(_CRAYC) -# define COMPILER_ID "Cray" -# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) -# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) - -#elif defined(__TI_COMPILER_VERSION__) -# define COMPILER_ID "TI" - /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ -# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) -# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) -# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) - -#elif defined(__CLANG_FUJITSU) -# define COMPILER_ID "FujitsuClang" -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# define COMPILER_VERSION_INTERNAL_STR __clang_version__ - - -#elif defined(__FUJITSU) -# define COMPILER_ID "Fujitsu" -# if defined(__FCC_version__) -# define COMPILER_VERSION __FCC_version__ -# elif defined(__FCC_major__) -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# endif -# if defined(__fcc_version) -# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) -# elif defined(__FCC_VERSION) -# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) -# endif - - -#elif defined(__ghs__) -# define COMPILER_ID "GHS" -/* __GHS_VERSION_NUMBER = VVVVRP */ -# ifdef __GHS_VERSION_NUMBER -# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) -# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) -# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) -# endif - -#elif defined(__TASKING__) -# define COMPILER_ID "Tasking" - # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) - # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) -# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) - -#elif defined(__ORANGEC__) -# define COMPILER_ID "OrangeC" -# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) -# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) -# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) - -#elif defined(__TINYC__) -# define COMPILER_ID "TinyCC" - -#elif defined(__BCC__) -# define COMPILER_ID "Bruce" - -#elif defined(__SCO_VERSION__) -# define COMPILER_ID "SCO" - -#elif defined(__ARMCC_VERSION) && !defined(__clang__) -# define COMPILER_ID "ARMCC" -#if __ARMCC_VERSION >= 1000000 - /* __ARMCC_VERSION = VRRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#else - /* __ARMCC_VERSION = VRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#endif - - -#elif defined(__clang__) && defined(__apple_build_version__) -# define COMPILER_ID "AppleClang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) - -#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) -# define COMPILER_ID "ARMClang" - # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) -# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) - -#elif defined(__clang__) && defined(__ti__) -# define COMPILER_ID "TIClang" - # define COMPILER_VERSION_MAJOR DEC(__ti_major__) - # define COMPILER_VERSION_MINOR DEC(__ti_minor__) - # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) -# define COMPILER_VERSION_INTERNAL DEC(__ti_version__) - -#elif defined(__clang__) -# define COMPILER_ID "Clang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) -# define COMPILER_ID "LCC" -# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) -# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) -# if defined(__LCC_MINOR__) -# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) -# endif -# if defined(__GNUC__) && defined(__GNUC_MINOR__) -# define SIMULATE_ID "GNU" -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -# if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif -# endif - -#elif defined(__GNUC__) -# define COMPILER_ID "GNU" -# define COMPILER_VERSION_MAJOR DEC(__GNUC__) -# if defined(__GNUC_MINOR__) -# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) -# endif -# if defined(__GNUC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif defined(_MSC_VER) -# define COMPILER_ID "MSVC" - /* _MSC_VER = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) -# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) -# if defined(_MSC_FULL_VER) -# if _MSC_VER >= 1400 - /* _MSC_FULL_VER = VVRRPPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) -# else - /* _MSC_FULL_VER = VVRRPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) -# endif -# endif -# if defined(_MSC_BUILD) -# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) -# endif - -#elif defined(_ADI_COMPILER) -# define COMPILER_ID "ADSP" -#if defined(__VERSIONNUM__) - /* __VERSIONNUM__ = 0xVVRRPPTT */ -# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) -# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) -# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) -# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) -#endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# define COMPILER_ID "IAR" -# if defined(__VER__) && defined(__ICCARM__) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) -# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) -# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) -# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) -# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# endif - -#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) -# define COMPILER_ID "SDCC" -# if defined(__SDCC_VERSION_MAJOR) -# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) -# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) -# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) -# else - /* SDCC = VRP */ -# define COMPILER_VERSION_MAJOR DEC(SDCC/100) -# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) -# define COMPILER_VERSION_PATCH DEC(SDCC % 10) -# endif - - -/* These compilers are either not known or too old to define an - identification macro. Try to identify the platform and guess that - it is the native compiler. */ -#elif defined(__hpux) || defined(__hpua) -# define COMPILER_ID "HP" - -#else /* unknown compiler */ -# define COMPILER_ID "" -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; -#ifdef SIMULATE_ID -char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; -#endif - -#ifdef __QNXNTO__ -char const* qnxnto = "INFO" ":" "qnxnto[]"; -#endif - -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) -char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; -#endif - -#define STRINGIFY_HELPER(X) #X -#define STRINGIFY(X) STRINGIFY_HELPER(X) - -/* Identify known platforms by name. */ -#if defined(__linux) || defined(__linux__) || defined(linux) -# define PLATFORM_ID "Linux" - -#elif defined(__MSYS__) -# define PLATFORM_ID "MSYS" - -#elif defined(__CYGWIN__) -# define PLATFORM_ID "Cygwin" - -#elif defined(__MINGW32__) -# define PLATFORM_ID "MinGW" - -#elif defined(__APPLE__) -# define PLATFORM_ID "Darwin" - -#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) -# define PLATFORM_ID "Windows" - -#elif defined(__FreeBSD__) || defined(__FreeBSD) -# define PLATFORM_ID "FreeBSD" - -#elif defined(__NetBSD__) || defined(__NetBSD) -# define PLATFORM_ID "NetBSD" - -#elif defined(__OpenBSD__) || defined(__OPENBSD) -# define PLATFORM_ID "OpenBSD" - -#elif defined(__sun) || defined(sun) -# define PLATFORM_ID "SunOS" - -#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) -# define PLATFORM_ID "AIX" - -#elif defined(__hpux) || defined(__hpux__) -# define PLATFORM_ID "HP-UX" - -#elif defined(__HAIKU__) -# define PLATFORM_ID "Haiku" - -#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) -# define PLATFORM_ID "BeOS" - -#elif defined(__QNX__) || defined(__QNXNTO__) -# define PLATFORM_ID "QNX" - -#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) -# define PLATFORM_ID "Tru64" - -#elif defined(__riscos) || defined(__riscos__) -# define PLATFORM_ID "RISCos" - -#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) -# define PLATFORM_ID "SINIX" - -#elif defined(__UNIX_SV__) -# define PLATFORM_ID "UNIX_SV" - -#elif defined(__bsdos__) -# define PLATFORM_ID "BSDOS" - -#elif defined(_MPRAS) || defined(MPRAS) -# define PLATFORM_ID "MP-RAS" - -#elif defined(__osf) || defined(__osf__) -# define PLATFORM_ID "OSF1" - -#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) -# define PLATFORM_ID "SCO_SV" - -#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) -# define PLATFORM_ID "ULTRIX" - -#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) -# define PLATFORM_ID "Xenix" - -#elif defined(__WATCOMC__) -# if defined(__LINUX__) -# define PLATFORM_ID "Linux" - -# elif defined(__DOS__) -# define PLATFORM_ID "DOS" - -# elif defined(__OS2__) -# define PLATFORM_ID "OS2" - -# elif defined(__WINDOWS__) -# define PLATFORM_ID "Windows3x" - -# elif defined(__VXWORKS__) -# define PLATFORM_ID "VxWorks" - -# else /* unknown platform */ -# define PLATFORM_ID -# endif - -#elif defined(__INTEGRITY) -# if defined(INT_178B) -# define PLATFORM_ID "Integrity178" - -# else /* regular Integrity */ -# define PLATFORM_ID "Integrity" -# endif - -# elif defined(_ADI_COMPILER) -# define PLATFORM_ID "ADSP" - -#else /* unknown platform */ -# define PLATFORM_ID - -#endif - -/* For windows compilers MSVC and Intel we can determine - the architecture of the compiler being used. This is because - the compilers do not have flags that can change the architecture, - but rather depend on which compiler is being used -*/ -#if defined(_WIN32) && defined(_MSC_VER) -# if defined(_M_IA64) -# define ARCHITECTURE_ID "IA64" - -# elif defined(_M_ARM64EC) -# define ARCHITECTURE_ID "ARM64EC" - -# elif defined(_M_X64) || defined(_M_AMD64) -# define ARCHITECTURE_ID "x64" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# elif defined(_M_ARM64) -# define ARCHITECTURE_ID "ARM64" - -# elif defined(_M_ARM) -# if _M_ARM == 4 -# define ARCHITECTURE_ID "ARMV4I" -# elif _M_ARM == 5 -# define ARCHITECTURE_ID "ARMV5I" -# else -# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) -# endif - -# elif defined(_M_MIPS) -# define ARCHITECTURE_ID "MIPS" - -# elif defined(_M_SH) -# define ARCHITECTURE_ID "SHx" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__WATCOMC__) -# if defined(_M_I86) -# define ARCHITECTURE_ID "I86" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# if defined(__ICCARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__ICCRX__) -# define ARCHITECTURE_ID "RX" - -# elif defined(__ICCRH850__) -# define ARCHITECTURE_ID "RH850" - -# elif defined(__ICCRL78__) -# define ARCHITECTURE_ID "RL78" - -# elif defined(__ICCRISCV__) -# define ARCHITECTURE_ID "RISCV" - -# elif defined(__ICCAVR__) -# define ARCHITECTURE_ID "AVR" - -# elif defined(__ICC430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__ICCV850__) -# define ARCHITECTURE_ID "V850" - -# elif defined(__ICC8051__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__ICCSTM8__) -# define ARCHITECTURE_ID "STM8" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__ghs__) -# if defined(__PPC64__) -# define ARCHITECTURE_ID "PPC64" - -# elif defined(__ppc__) -# define ARCHITECTURE_ID "PPC" - -# elif defined(__ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__x86_64__) -# define ARCHITECTURE_ID "x64" - -# elif defined(__i386__) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__clang__) && defined(__ti__) -# if defined(__ARM_ARCH) -# define ARCHITECTURE_ID "Arm" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__TI_COMPILER_VERSION__) -# if defined(__TI_ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__MSP430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__TMS320C28XX__) -# define ARCHITECTURE_ID "TMS320C28x" - -# elif defined(__TMS320C6X__) || defined(_TMS320C6X) -# define ARCHITECTURE_ID "TMS320C6x" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -# elif defined(__ADSPSHARC__) -# define ARCHITECTURE_ID "SHARC" - -# elif defined(__ADSPBLACKFIN__) -# define ARCHITECTURE_ID "Blackfin" - -#elif defined(__TASKING__) - -# if defined(__CTC__) || defined(__CPTC__) -# define ARCHITECTURE_ID "TriCore" - -# elif defined(__CMCS__) -# define ARCHITECTURE_ID "MCS" - -# elif defined(__CARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__CARC__) -# define ARCHITECTURE_ID "ARC" - -# elif defined(__C51__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__CPCP__) -# define ARCHITECTURE_ID "PCP" - -# else -# define ARCHITECTURE_ID "" -# endif - -#else -# define ARCHITECTURE_ID -#endif - -/* Convert integer to decimal digit literals. */ -#define DEC(n) \ - ('0' + (((n) / 10000000)%10)), \ - ('0' + (((n) / 1000000)%10)), \ - ('0' + (((n) / 100000)%10)), \ - ('0' + (((n) / 10000)%10)), \ - ('0' + (((n) / 1000)%10)), \ - ('0' + (((n) / 100)%10)), \ - ('0' + (((n) / 10)%10)), \ - ('0' + ((n) % 10)) - -/* Convert integer to hex digit literals. */ -#define HEX(n) \ - ('0' + ((n)>>28 & 0xF)), \ - ('0' + ((n)>>24 & 0xF)), \ - ('0' + ((n)>>20 & 0xF)), \ - ('0' + ((n)>>16 & 0xF)), \ - ('0' + ((n)>>12 & 0xF)), \ - ('0' + ((n)>>8 & 0xF)), \ - ('0' + ((n)>>4 & 0xF)), \ - ('0' + ((n) & 0xF)) - -/* Construct a string literal encoding the version number. */ -#ifdef COMPILER_VERSION -char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; - -/* Construct a string literal encoding the version number components. */ -#elif defined(COMPILER_VERSION_MAJOR) -char const info_version[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', - COMPILER_VERSION_MAJOR, -# ifdef COMPILER_VERSION_MINOR - '.', COMPILER_VERSION_MINOR, -# ifdef COMPILER_VERSION_PATCH - '.', COMPILER_VERSION_PATCH, -# ifdef COMPILER_VERSION_TWEAK - '.', COMPILER_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct a string literal encoding the internal version number. */ -#ifdef COMPILER_VERSION_INTERNAL -char const info_version_internal[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', - 'i','n','t','e','r','n','a','l','[', - COMPILER_VERSION_INTERNAL,']','\0'}; -#elif defined(COMPILER_VERSION_INTERNAL_STR) -char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; -#endif - -/* Construct a string literal encoding the version number components. */ -#ifdef SIMULATE_VERSION_MAJOR -char const info_simulate_version[] = { - 'I', 'N', 'F', 'O', ':', - 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', - SIMULATE_VERSION_MAJOR, -# ifdef SIMULATE_VERSION_MINOR - '.', SIMULATE_VERSION_MINOR, -# ifdef SIMULATE_VERSION_PATCH - '.', SIMULATE_VERSION_PATCH, -# ifdef SIMULATE_VERSION_TWEAK - '.', SIMULATE_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; -char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; - - - -#if !defined(__STDC__) && !defined(__clang__) -# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__) -# define C_VERSION "90" -# else -# define C_VERSION -# endif -#elif __STDC_VERSION__ > 201710L -# define C_VERSION "23" -#elif __STDC_VERSION__ >= 201710L -# define C_VERSION "17" -#elif __STDC_VERSION__ >= 201000L -# define C_VERSION "11" -#elif __STDC_VERSION__ >= 199901L -# define C_VERSION "99" -#else -# define C_VERSION "90" -#endif -const char* info_language_standard_default = - "INFO" ":" "standard_default[" C_VERSION "]"; - -const char* info_language_extensions_default = "INFO" ":" "extensions_default[" -#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ - defined(__TI_COMPILER_VERSION__)) && \ - !defined(__STRICT_ANSI__) - "ON" -#else - "OFF" -#endif -"]"; - -/*--------------------------------------------------------------------------*/ - -#ifdef ID_VOID_MAIN -void main() {} -#else -# if defined(__CLASSIC_C__) -int main(argc, argv) int argc; char *argv[]; -# else -int main(int argc, char* argv[]) -# endif -{ - int require = 0; - require += info_compiler[argc]; - require += info_platform[argc]; - require += info_arch[argc]; -#ifdef COMPILER_VERSION_MAJOR - require += info_version[argc]; -#endif -#ifdef COMPILER_VERSION_INTERNAL - require += info_version_internal[argc]; -#endif -#ifdef SIMULATE_ID - require += info_simulate[argc]; -#endif -#ifdef SIMULATE_VERSION_MAJOR - require += info_simulate_version[argc]; -#endif -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) - require += info_cray[argc]; -#endif - require += info_language_standard_default[argc]; - require += info_language_extensions_default[argc]; - (void)argv; - return require; -} -#endif diff --git a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp deleted file mode 100644 index 9a5e8f8ce..000000000 --- a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp +++ /dev/null @@ -1,878 +0,0 @@ -/* This source file must have a .cpp extension so that all C++ compilers - recognize the extension without flags. Borland does not know .cxx for - example. */ -#ifndef __cplusplus -# error "A C compiler has been selected for C++." -#endif - -#if !defined(__has_include) -/* If the compiler does not have __has_include, pretend the answer is - always no. */ -# define __has_include(x) 0 -#endif - - -/* Version number components: V=Version, R=Revision, P=Patch - Version date components: YYYY=Year, MM=Month, DD=Day */ - -#if defined(__INTEL_COMPILER) || defined(__ICC) -# define COMPILER_ID "Intel" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# if defined(__GNUC__) -# define SIMULATE_ID "GNU" -# endif - /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, - except that a few beta releases use the old format with V=2021. */ -# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) -# if defined(__INTEL_COMPILER_UPDATE) -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) -# else -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) -# endif -# else -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) - /* The third version component from --version is an update index, - but no macro is provided for it. */ -# define COMPILER_VERSION_PATCH DEC(0) -# endif -# if defined(__INTEL_COMPILER_BUILD_DATE) - /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ -# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) -# endif -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# if defined(__GNUC__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -# elif defined(__GNUG__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) -# endif -# if defined(__GNUC_MINOR__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -# endif -# if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) -# define COMPILER_ID "IntelLLVM" -#if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -#endif -#if defined(__GNUC__) -# define SIMULATE_ID "GNU" -#endif -/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and - * later. Look for 6 digit vs. 8 digit version number to decide encoding. - * VVVV is no smaller than the current year when a version is released. - */ -#if __INTEL_LLVM_COMPILER < 1000000L -# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) -#else -# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) -# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) -#endif -#if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -#endif -#if defined(__GNUC__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -#elif defined(__GNUG__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) -#endif -#if defined(__GNUC_MINOR__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -#endif -#if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -#endif - -#elif defined(__PATHCC__) -# define COMPILER_ID "PathScale" -# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) -# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) -# if defined(__PATHCC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) -# endif - -#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) -# define COMPILER_ID "Embarcadero" -# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) -# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) -# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) - -#elif defined(__BORLANDC__) -# define COMPILER_ID "Borland" - /* __BORLANDC__ = 0xVRR */ -# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) -# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) - -#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 -# define COMPILER_ID "Watcom" - /* __WATCOMC__ = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__WATCOMC__) -# define COMPILER_ID "OpenWatcom" - /* __WATCOMC__ = VVRP + 1100 */ -# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__SUNPRO_CC) -# define COMPILER_ID "SunPro" -# if __SUNPRO_CC >= 0x5100 - /* __SUNPRO_CC = 0xVRRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) -# else - /* __SUNPRO_CC = 0xVRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) -# endif - -#elif defined(__HP_aCC) -# define COMPILER_ID "HP" - /* __HP_aCC = VVRRPP */ -# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) -# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) - -#elif defined(__DECCXX) -# define COMPILER_ID "Compaq" - /* __DECCXX_VER = VVRRTPPPP */ -# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) -# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) -# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) - -#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) -# define COMPILER_ID "zOS" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__open_xl__) && defined(__clang__) -# define COMPILER_ID "IBMClang" -# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) -# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) -# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) - - -#elif defined(__ibmxl__) && defined(__clang__) -# define COMPILER_ID "XLClang" -# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) -# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) -# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) - - -#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 -# define COMPILER_ID "XL" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 -# define COMPILER_ID "VisualAge" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__NVCOMPILER) -# define COMPILER_ID "NVHPC" -# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) -# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) -# if defined(__NVCOMPILER_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) -# endif - -#elif defined(__PGI) -# define COMPILER_ID "PGI" -# define COMPILER_VERSION_MAJOR DEC(__PGIC__) -# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) -# if defined(__PGIC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) -# endif - -#elif defined(__clang__) && defined(__cray__) -# define COMPILER_ID "CrayClang" -# define COMPILER_VERSION_MAJOR DEC(__cray_major__) -# define COMPILER_VERSION_MINOR DEC(__cray_minor__) -# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) -# define COMPILER_VERSION_INTERNAL_STR __clang_version__ - - -#elif defined(_CRAYC) -# define COMPILER_ID "Cray" -# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) -# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) - -#elif defined(__TI_COMPILER_VERSION__) -# define COMPILER_ID "TI" - /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ -# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) -# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) -# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) - -#elif defined(__CLANG_FUJITSU) -# define COMPILER_ID "FujitsuClang" -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# define COMPILER_VERSION_INTERNAL_STR __clang_version__ - - -#elif defined(__FUJITSU) -# define COMPILER_ID "Fujitsu" -# if defined(__FCC_version__) -# define COMPILER_VERSION __FCC_version__ -# elif defined(__FCC_major__) -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# endif -# if defined(__fcc_version) -# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) -# elif defined(__FCC_VERSION) -# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) -# endif - - -#elif defined(__ghs__) -# define COMPILER_ID "GHS" -/* __GHS_VERSION_NUMBER = VVVVRP */ -# ifdef __GHS_VERSION_NUMBER -# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) -# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) -# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) -# endif - -#elif defined(__TASKING__) -# define COMPILER_ID "Tasking" - # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) - # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) -# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) - -#elif defined(__ORANGEC__) -# define COMPILER_ID "OrangeC" -# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) -# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) -# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) - -#elif defined(__SCO_VERSION__) -# define COMPILER_ID "SCO" - -#elif defined(__ARMCC_VERSION) && !defined(__clang__) -# define COMPILER_ID "ARMCC" -#if __ARMCC_VERSION >= 1000000 - /* __ARMCC_VERSION = VRRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#else - /* __ARMCC_VERSION = VRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#endif - - -#elif defined(__clang__) && defined(__apple_build_version__) -# define COMPILER_ID "AppleClang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) - -#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) -# define COMPILER_ID "ARMClang" - # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) -# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) - -#elif defined(__clang__) && defined(__ti__) -# define COMPILER_ID "TIClang" - # define COMPILER_VERSION_MAJOR DEC(__ti_major__) - # define COMPILER_VERSION_MINOR DEC(__ti_minor__) - # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) -# define COMPILER_VERSION_INTERNAL DEC(__ti_version__) - -#elif defined(__clang__) -# define COMPILER_ID "Clang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) -# define COMPILER_ID "LCC" -# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) -# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) -# if defined(__LCC_MINOR__) -# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) -# endif -# if defined(__GNUC__) && defined(__GNUC_MINOR__) -# define SIMULATE_ID "GNU" -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -# if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif -# endif - -#elif defined(__GNUC__) || defined(__GNUG__) -# define COMPILER_ID "GNU" -# if defined(__GNUC__) -# define COMPILER_VERSION_MAJOR DEC(__GNUC__) -# else -# define COMPILER_VERSION_MAJOR DEC(__GNUG__) -# endif -# if defined(__GNUC_MINOR__) -# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) -# endif -# if defined(__GNUC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif defined(_MSC_VER) -# define COMPILER_ID "MSVC" - /* _MSC_VER = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) -# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) -# if defined(_MSC_FULL_VER) -# if _MSC_VER >= 1400 - /* _MSC_FULL_VER = VVRRPPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) -# else - /* _MSC_FULL_VER = VVRRPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) -# endif -# endif -# if defined(_MSC_BUILD) -# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) -# endif - -#elif defined(_ADI_COMPILER) -# define COMPILER_ID "ADSP" -#if defined(__VERSIONNUM__) - /* __VERSIONNUM__ = 0xVVRRPPTT */ -# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) -# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) -# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) -# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) -#endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# define COMPILER_ID "IAR" -# if defined(__VER__) && defined(__ICCARM__) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) -# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) -# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) -# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) -# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# endif - - -/* These compilers are either not known or too old to define an - identification macro. Try to identify the platform and guess that - it is the native compiler. */ -#elif defined(__hpux) || defined(__hpua) -# define COMPILER_ID "HP" - -#else /* unknown compiler */ -# define COMPILER_ID "" -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; -#ifdef SIMULATE_ID -char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; -#endif - -#ifdef __QNXNTO__ -char const* qnxnto = "INFO" ":" "qnxnto[]"; -#endif - -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) -char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; -#endif - -#define STRINGIFY_HELPER(X) #X -#define STRINGIFY(X) STRINGIFY_HELPER(X) - -/* Identify known platforms by name. */ -#if defined(__linux) || defined(__linux__) || defined(linux) -# define PLATFORM_ID "Linux" - -#elif defined(__MSYS__) -# define PLATFORM_ID "MSYS" - -#elif defined(__CYGWIN__) -# define PLATFORM_ID "Cygwin" - -#elif defined(__MINGW32__) -# define PLATFORM_ID "MinGW" - -#elif defined(__APPLE__) -# define PLATFORM_ID "Darwin" - -#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) -# define PLATFORM_ID "Windows" - -#elif defined(__FreeBSD__) || defined(__FreeBSD) -# define PLATFORM_ID "FreeBSD" - -#elif defined(__NetBSD__) || defined(__NetBSD) -# define PLATFORM_ID "NetBSD" - -#elif defined(__OpenBSD__) || defined(__OPENBSD) -# define PLATFORM_ID "OpenBSD" - -#elif defined(__sun) || defined(sun) -# define PLATFORM_ID "SunOS" - -#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) -# define PLATFORM_ID "AIX" - -#elif defined(__hpux) || defined(__hpux__) -# define PLATFORM_ID "HP-UX" - -#elif defined(__HAIKU__) -# define PLATFORM_ID "Haiku" - -#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) -# define PLATFORM_ID "BeOS" - -#elif defined(__QNX__) || defined(__QNXNTO__) -# define PLATFORM_ID "QNX" - -#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) -# define PLATFORM_ID "Tru64" - -#elif defined(__riscos) || defined(__riscos__) -# define PLATFORM_ID "RISCos" - -#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) -# define PLATFORM_ID "SINIX" - -#elif defined(__UNIX_SV__) -# define PLATFORM_ID "UNIX_SV" - -#elif defined(__bsdos__) -# define PLATFORM_ID "BSDOS" - -#elif defined(_MPRAS) || defined(MPRAS) -# define PLATFORM_ID "MP-RAS" - -#elif defined(__osf) || defined(__osf__) -# define PLATFORM_ID "OSF1" - -#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) -# define PLATFORM_ID "SCO_SV" - -#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) -# define PLATFORM_ID "ULTRIX" - -#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) -# define PLATFORM_ID "Xenix" - -#elif defined(__WATCOMC__) -# if defined(__LINUX__) -# define PLATFORM_ID "Linux" - -# elif defined(__DOS__) -# define PLATFORM_ID "DOS" - -# elif defined(__OS2__) -# define PLATFORM_ID "OS2" - -# elif defined(__WINDOWS__) -# define PLATFORM_ID "Windows3x" - -# elif defined(__VXWORKS__) -# define PLATFORM_ID "VxWorks" - -# else /* unknown platform */ -# define PLATFORM_ID -# endif - -#elif defined(__INTEGRITY) -# if defined(INT_178B) -# define PLATFORM_ID "Integrity178" - -# else /* regular Integrity */ -# define PLATFORM_ID "Integrity" -# endif - -# elif defined(_ADI_COMPILER) -# define PLATFORM_ID "ADSP" - -#else /* unknown platform */ -# define PLATFORM_ID - -#endif - -/* For windows compilers MSVC and Intel we can determine - the architecture of the compiler being used. This is because - the compilers do not have flags that can change the architecture, - but rather depend on which compiler is being used -*/ -#if defined(_WIN32) && defined(_MSC_VER) -# if defined(_M_IA64) -# define ARCHITECTURE_ID "IA64" - -# elif defined(_M_ARM64EC) -# define ARCHITECTURE_ID "ARM64EC" - -# elif defined(_M_X64) || defined(_M_AMD64) -# define ARCHITECTURE_ID "x64" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# elif defined(_M_ARM64) -# define ARCHITECTURE_ID "ARM64" - -# elif defined(_M_ARM) -# if _M_ARM == 4 -# define ARCHITECTURE_ID "ARMV4I" -# elif _M_ARM == 5 -# define ARCHITECTURE_ID "ARMV5I" -# else -# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) -# endif - -# elif defined(_M_MIPS) -# define ARCHITECTURE_ID "MIPS" - -# elif defined(_M_SH) -# define ARCHITECTURE_ID "SHx" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__WATCOMC__) -# if defined(_M_I86) -# define ARCHITECTURE_ID "I86" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# if defined(__ICCARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__ICCRX__) -# define ARCHITECTURE_ID "RX" - -# elif defined(__ICCRH850__) -# define ARCHITECTURE_ID "RH850" - -# elif defined(__ICCRL78__) -# define ARCHITECTURE_ID "RL78" - -# elif defined(__ICCRISCV__) -# define ARCHITECTURE_ID "RISCV" - -# elif defined(__ICCAVR__) -# define ARCHITECTURE_ID "AVR" - -# elif defined(__ICC430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__ICCV850__) -# define ARCHITECTURE_ID "V850" - -# elif defined(__ICC8051__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__ICCSTM8__) -# define ARCHITECTURE_ID "STM8" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__ghs__) -# if defined(__PPC64__) -# define ARCHITECTURE_ID "PPC64" - -# elif defined(__ppc__) -# define ARCHITECTURE_ID "PPC" - -# elif defined(__ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__x86_64__) -# define ARCHITECTURE_ID "x64" - -# elif defined(__i386__) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__clang__) && defined(__ti__) -# if defined(__ARM_ARCH) -# define ARCHITECTURE_ID "Arm" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__TI_COMPILER_VERSION__) -# if defined(__TI_ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__MSP430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__TMS320C28XX__) -# define ARCHITECTURE_ID "TMS320C28x" - -# elif defined(__TMS320C6X__) || defined(_TMS320C6X) -# define ARCHITECTURE_ID "TMS320C6x" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -# elif defined(__ADSPSHARC__) -# define ARCHITECTURE_ID "SHARC" - -# elif defined(__ADSPBLACKFIN__) -# define ARCHITECTURE_ID "Blackfin" - -#elif defined(__TASKING__) - -# if defined(__CTC__) || defined(__CPTC__) -# define ARCHITECTURE_ID "TriCore" - -# elif defined(__CMCS__) -# define ARCHITECTURE_ID "MCS" - -# elif defined(__CARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__CARC__) -# define ARCHITECTURE_ID "ARC" - -# elif defined(__C51__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__CPCP__) -# define ARCHITECTURE_ID "PCP" - -# else -# define ARCHITECTURE_ID "" -# endif - -#else -# define ARCHITECTURE_ID -#endif - -/* Convert integer to decimal digit literals. */ -#define DEC(n) \ - ('0' + (((n) / 10000000)%10)), \ - ('0' + (((n) / 1000000)%10)), \ - ('0' + (((n) / 100000)%10)), \ - ('0' + (((n) / 10000)%10)), \ - ('0' + (((n) / 1000)%10)), \ - ('0' + (((n) / 100)%10)), \ - ('0' + (((n) / 10)%10)), \ - ('0' + ((n) % 10)) - -/* Convert integer to hex digit literals. */ -#define HEX(n) \ - ('0' + ((n)>>28 & 0xF)), \ - ('0' + ((n)>>24 & 0xF)), \ - ('0' + ((n)>>20 & 0xF)), \ - ('0' + ((n)>>16 & 0xF)), \ - ('0' + ((n)>>12 & 0xF)), \ - ('0' + ((n)>>8 & 0xF)), \ - ('0' + ((n)>>4 & 0xF)), \ - ('0' + ((n) & 0xF)) - -/* Construct a string literal encoding the version number. */ -#ifdef COMPILER_VERSION -char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; - -/* Construct a string literal encoding the version number components. */ -#elif defined(COMPILER_VERSION_MAJOR) -char const info_version[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', - COMPILER_VERSION_MAJOR, -# ifdef COMPILER_VERSION_MINOR - '.', COMPILER_VERSION_MINOR, -# ifdef COMPILER_VERSION_PATCH - '.', COMPILER_VERSION_PATCH, -# ifdef COMPILER_VERSION_TWEAK - '.', COMPILER_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct a string literal encoding the internal version number. */ -#ifdef COMPILER_VERSION_INTERNAL -char const info_version_internal[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', - 'i','n','t','e','r','n','a','l','[', - COMPILER_VERSION_INTERNAL,']','\0'}; -#elif defined(COMPILER_VERSION_INTERNAL_STR) -char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; -#endif - -/* Construct a string literal encoding the version number components. */ -#ifdef SIMULATE_VERSION_MAJOR -char const info_simulate_version[] = { - 'I', 'N', 'F', 'O', ':', - 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', - SIMULATE_VERSION_MAJOR, -# ifdef SIMULATE_VERSION_MINOR - '.', SIMULATE_VERSION_MINOR, -# ifdef SIMULATE_VERSION_PATCH - '.', SIMULATE_VERSION_PATCH, -# ifdef SIMULATE_VERSION_TWEAK - '.', SIMULATE_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; -char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; - - - -#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L -# if defined(__INTEL_CXX11_MODE__) -# if defined(__cpp_aggregate_nsdmi) -# define CXX_STD 201402L -# else -# define CXX_STD 201103L -# endif -# else -# define CXX_STD 199711L -# endif -#elif defined(_MSC_VER) && defined(_MSVC_LANG) -# define CXX_STD _MSVC_LANG -#else -# define CXX_STD __cplusplus -#endif - -const char* info_language_standard_default = "INFO" ":" "standard_default[" -#if CXX_STD > 202002L - "23" -#elif CXX_STD > 201703L - "20" -#elif CXX_STD >= 201703L - "17" -#elif CXX_STD >= 201402L - "14" -#elif CXX_STD >= 201103L - "11" -#else - "98" -#endif -"]"; - -const char* info_language_extensions_default = "INFO" ":" "extensions_default[" -#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ - defined(__TI_COMPILER_VERSION__)) && \ - !defined(__STRICT_ANSI__) - "ON" -#else - "OFF" -#endif -"]"; - -/*--------------------------------------------------------------------------*/ - -int main(int argc, char* argv[]) -{ - int require = 0; - require += info_compiler[argc]; - require += info_platform[argc]; - require += info_arch[argc]; -#ifdef COMPILER_VERSION_MAJOR - require += info_version[argc]; -#endif -#ifdef COMPILER_VERSION_INTERNAL - require += info_version_internal[argc]; -#endif -#ifdef SIMULATE_ID - require += info_simulate[argc]; -#endif -#ifdef SIMULATE_VERSION_MAJOR - require += info_simulate_version[argc]; -#endif -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) - require += info_cray[argc]; -#endif - require += info_language_standard_default[argc]; - require += info_language_extensions_default[argc]; - (void)argv; - return require; -} diff --git a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeConfigureLog.yaml b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeConfigureLog.yaml deleted file mode 100644 index e9c74d9da..000000000 --- a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeConfigureLog.yaml +++ /dev/null @@ -1,556 +0,0 @@ - ---- -events: - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake:205 (message)" - - "CMakeLists.txt:20 (project)" - message: | - The system is: Linux - 5.15.133.1-microsoft-standard-WSL2 - x86_64 - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:17 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCCompiler.cmake:123 (CMAKE_DETERMINE_COMPILER_ID)" - - "CMakeLists.txt:20 (project)" - message: | - Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. - Compiler: /usr/bin/gcc-11 - Build flags: - Id flags: - - The output was: - 0 - - - Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" - - The C compiler identification is GNU, found in: - /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdC/a.out - - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:17 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)" - - "CMakeLists.txt:20 (project)" - message: | - Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. - Compiler: /usr/bin/x86_64-linux-gnu-g++-11 - Build flags: -DQT_QML_DEBUG - Id flags: - - The output was: - 0 - - - Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" - - The CXX compiler identification is GNU, found in: - /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/3.29.3/CompilerIdCXX/a.out - - - - kind: "try_compile-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:67 (try_compile)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:20 (project)" - checks: - - "Detecting C compiler ABI info" - directories: - source: "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-iDn76p" - binary: "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-iDn76p" - cmakeVariables: - CMAKE_C_FLAGS: "" - buildResult: - variable: "CMAKE_C_ABI_COMPILED" - cached: true - stdout: | - Change Dir: '/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-iDn76p' - - Run Build Command(s): /usr/bin/ninja -v cmTC_25987 - [1/2] /usr/bin/gcc-11 -fdiagnostics-color=always -v -o CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCCompilerABI.c - Using built-in specs. - COLLECT_GCC=/usr/bin/gcc-11 - OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-linux-gnu - Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) - COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_25987.dir/' - /usr/lib/gcc/x86_64-linux-gnu/11/cc1 -quiet -v -imultiarch x86_64-linux-gnu /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_25987.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccC1mAN8.s - GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) - compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP - - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" - ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed" - ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include" - #include "..." search starts here: - #include <...> search starts here: - /usr/lib/gcc/x86_64-linux-gnu/11/include - /usr/local/include - /usr/include/x86_64-linux-gnu - /usr/include - End of search list. - GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) - compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP - - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - Compiler executable checksum: 50eaa2331df977b8016186198deb2d18 - COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_25987.dir/' - as -v --64 -o CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o /tmp/ccC1mAN8.s - GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38 - COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.' - [2/2] : && /usr/bin/gcc-11 -v -Wl,-v -rdynamic CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o -o cmTC_25987 && : - Using built-in specs. - COLLECT_GCC=/usr/bin/gcc-11 - COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper - OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-linux-gnu - Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) - COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_25987' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_25987.' - /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccD2IQXF.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_25987 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o - collect2 version 11.4.0 - /usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccD2IQXF.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_25987 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o - GNU ld (GNU Binutils for Ubuntu) 2.38 - COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_25987' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_25987.' - - exitCode: 0 - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:137 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:20 (project)" - message: | - Parsed C implicit include dir info: rv=done - found start of include info - found start of implicit include info - add: [/usr/lib/gcc/x86_64-linux-gnu/11/include] - add: [/usr/local/include] - add: [/usr/include/x86_64-linux-gnu] - add: [/usr/include] - end of search list found - collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/11/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/11/include] - collapse include dir [/usr/local/include] ==> [/usr/local/include] - collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] - collapse include dir [/usr/include] ==> [/usr/include] - implicit include dirs: [/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] - - - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:173 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:20 (project)" - message: | - Parsed C implicit link information: - link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] - linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)] - ignore line: [Change Dir: '/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-iDn76p'] - ignore line: [] - ignore line: [Run Build Command(s): /usr/bin/ninja -v cmTC_25987] - ignore line: [[1/2] /usr/bin/gcc-11 -fdiagnostics-color=always -v -o CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCCompilerABI.c] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/gcc-11] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-linux-gnu] - ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] - ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_25987.dir/'] - ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/cc1 -quiet -v -imultiarch x86_64-linux-gnu /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_25987.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccC1mAN8.s] - ignore line: [GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] - ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] - ignore line: [] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed"] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include"] - ignore line: [#include "..." search starts here:] - ignore line: [#include <...> search starts here:] - ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/include] - ignore line: [ /usr/local/include] - ignore line: [ /usr/include/x86_64-linux-gnu] - ignore line: [ /usr/include] - ignore line: [End of search list.] - ignore line: [GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] - ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] - ignore line: [] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [Compiler executable checksum: 50eaa2331df977b8016186198deb2d18] - ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_25987.dir/'] - ignore line: [ as -v --64 -o CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o /tmp/ccC1mAN8.s] - ignore line: [GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38] - ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.'] - ignore line: [[2/2] : && /usr/bin/gcc-11 -v -Wl -v -rdynamic CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o -o cmTC_25987 && :] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/gcc-11] - ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-linux-gnu] - ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] - ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_25987' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_25987.'] - link line: [ /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccD2IQXF.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_25987 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/collect2] ==> ignore - arg [-plugin] ==> ignore - arg [/usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so] ==> ignore - arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccD2IQXF.res] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [--build-id] ==> ignore - arg [--eh-frame-hdr] ==> ignore - arg [-m] ==> ignore - arg [elf_x86_64] ==> ignore - arg [--hash-style=gnu] ==> ignore - arg [--as-needed] ==> ignore - arg [-export-dynamic] ==> ignore - arg [-dynamic-linker] ==> ignore - arg [/lib64/ld-linux-x86-64.so.2] ==> ignore - arg [-pie] ==> ignore - arg [-znow] ==> ignore - arg [-zrelro] ==> ignore - arg [-o] ==> ignore - arg [cmTC_25987] ==> ignore - arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] - arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] - arg [-L/lib/../lib] ==> dir [/lib/../lib] - arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] - arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] - arg [-v] ==> ignore - arg [CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o] ==> ignore - arg [-lgcc] ==> lib [gcc] - arg [--push-state] ==> ignore - arg [--as-needed] ==> ignore - arg [-lgcc_s] ==> lib [gcc_s] - arg [--pop-state] ==> ignore - arg [-lc] ==> lib [c] - arg [-lgcc] ==> lib [gcc] - arg [--push-state] ==> ignore - arg [--as-needed] ==> ignore - arg [-lgcc_s] ==> lib [gcc_s] - arg [--pop-state] ==> ignore - arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] - ignore line: [collect2 version 11.4.0] - ignore line: [/usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccD2IQXF.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_25987 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_25987.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] - linker tool for 'C': /usr/bin/ld - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11] ==> [/usr/lib/gcc/x86_64-linux-gnu/11] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> [/usr/lib] - collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] - collapse library dir [/lib/../lib] ==> [/lib] - collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] - collapse library dir [/usr/lib/../lib] ==> [/usr/lib] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> [/usr/lib] - implicit libs: [gcc;gcc_s;c;gcc;gcc_s] - implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] - implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] - implicit fwks: [] - - - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:210 (cmake_determine_linker_id)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:20 (project)" - message: | - Running the C compiler's linker: "/usr/bin/ld" "-v" - GNU ld (GNU Binutils for Ubuntu) 2.38 - - - kind: "try_compile-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:67 (try_compile)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:20 (project)" - checks: - - "Detecting CXX compiler ABI info" - directories: - source: "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-juwRnY" - binary: "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-juwRnY" - cmakeVariables: - CMAKE_CXX_FLAGS: "-DQT_QML_DEBUG" - CMAKE_CXX_SCAN_FOR_MODULES: "OFF" - buildResult: - variable: "CMAKE_CXX_ABI_COMPILED" - cached: true - stdout: | - Change Dir: '/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-juwRnY' - - Run Build Command(s): /usr/bin/ninja -v cmTC_b8bbd - [1/2] /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG -fdiagnostics-color=always -v -o CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp - Using built-in specs. - COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11 - OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-linux-gnu - Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) - COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b8bbd.dir/' - /usr/lib/gcc/x86_64-linux-gnu/11/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D QT_QML_DEBUG /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_b8bbd.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccP7OMR6.s - GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) - compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP - - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/11" - ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" - ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed" - ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include" - #include "..." search starts here: - #include <...> search starts here: - /usr/include/c++/11 - /usr/include/x86_64-linux-gnu/c++/11 - /usr/include/c++/11/backward - /usr/lib/gcc/x86_64-linux-gnu/11/include - /usr/local/include - /usr/include/x86_64-linux-gnu - /usr/include - End of search list. - GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) - compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP - - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - Compiler executable checksum: d591828bb4d392ae8b7b160e5bb0b95f - COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b8bbd.dir/' - as -v --64 -o CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccP7OMR6.s - GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38 - COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.' - [2/2] : && /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG -v -Wl,-v -rdynamic CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_b8bbd && : - Using built-in specs. - COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11 - COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper - OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-linux-gnu - Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) - COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-D' 'QT_QML_DEBUG' '-v' '-rdynamic' '-o' 'cmTC_b8bbd' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_b8bbd.' - /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccQOxcTP.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_b8bbd /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o - collect2 version 11.4.0 - /usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccQOxcTP.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_b8bbd /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o - GNU ld (GNU Binutils for Ubuntu) 2.38 - COLLECT_GCC_OPTIONS='-D' 'QT_QML_DEBUG' '-v' '-rdynamic' '-o' 'cmTC_b8bbd' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_b8bbd.' - - exitCode: 0 - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:137 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:20 (project)" - message: | - Parsed CXX implicit include dir info: rv=done - found start of include info - found start of implicit include info - add: [/usr/include/c++/11] - add: [/usr/include/x86_64-linux-gnu/c++/11] - add: [/usr/include/c++/11/backward] - add: [/usr/lib/gcc/x86_64-linux-gnu/11/include] - add: [/usr/local/include] - add: [/usr/include/x86_64-linux-gnu] - add: [/usr/include] - end of search list found - collapse include dir [/usr/include/c++/11] ==> [/usr/include/c++/11] - collapse include dir [/usr/include/x86_64-linux-gnu/c++/11] ==> [/usr/include/x86_64-linux-gnu/c++/11] - collapse include dir [/usr/include/c++/11/backward] ==> [/usr/include/c++/11/backward] - collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/11/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/11/include] - collapse include dir [/usr/local/include] ==> [/usr/local/include] - collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] - collapse include dir [/usr/include] ==> [/usr/include] - implicit include dirs: [/usr/include/c++/11;/usr/include/x86_64-linux-gnu/c++/11;/usr/include/c++/11/backward;/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] - - - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:173 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:20 (project)" - message: | - Parsed CXX implicit link information: - link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] - linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)] - ignore line: [Change Dir: '/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/CMakeScratch/TryCompile-juwRnY'] - ignore line: [] - ignore line: [Run Build Command(s): /usr/bin/ninja -v cmTC_b8bbd] - ignore line: [[1/2] /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG -fdiagnostics-color=always -v -o CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-linux-gnu] - ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] - ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b8bbd.dir/'] - ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D QT_QML_DEBUG /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_b8bbd.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccP7OMR6.s] - ignore line: [GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] - ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] - ignore line: [] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/11"] - ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed"] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include"] - ignore line: [#include "..." search starts here:] - ignore line: [#include <...> search starts here:] - ignore line: [ /usr/include/c++/11] - ignore line: [ /usr/include/x86_64-linux-gnu/c++/11] - ignore line: [ /usr/include/c++/11/backward] - ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/include] - ignore line: [ /usr/local/include] - ignore line: [ /usr/include/x86_64-linux-gnu] - ignore line: [ /usr/include] - ignore line: [End of search list.] - ignore line: [GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] - ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] - ignore line: [] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [Compiler executable checksum: d591828bb4d392ae8b7b160e5bb0b95f] - ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b8bbd.dir/'] - ignore line: [ as -v --64 -o CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccP7OMR6.s] - ignore line: [GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38] - ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-D' 'QT_QML_DEBUG' '-v' '-o' 'CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.'] - ignore line: [[2/2] : && /usr/bin/x86_64-linux-gnu-g++-11 -DQT_QML_DEBUG -v -Wl -v -rdynamic CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_b8bbd && :] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11] - ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-linux-gnu] - ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] - ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-D' 'QT_QML_DEBUG' '-v' '-rdynamic' '-o' 'cmTC_b8bbd' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_b8bbd.'] - link line: [ /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccQOxcTP.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_b8bbd /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/collect2] ==> ignore - arg [-plugin] ==> ignore - arg [/usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so] ==> ignore - arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccQOxcTP.res] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [--build-id] ==> ignore - arg [--eh-frame-hdr] ==> ignore - arg [-m] ==> ignore - arg [elf_x86_64] ==> ignore - arg [--hash-style=gnu] ==> ignore - arg [--as-needed] ==> ignore - arg [-export-dynamic] ==> ignore - arg [-dynamic-linker] ==> ignore - arg [/lib64/ld-linux-x86-64.so.2] ==> ignore - arg [-pie] ==> ignore - arg [-znow] ==> ignore - arg [-zrelro] ==> ignore - arg [-o] ==> ignore - arg [cmTC_b8bbd] ==> ignore - arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] - arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] - arg [-L/lib/../lib] ==> dir [/lib/../lib] - arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] - arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] - arg [-v] ==> ignore - arg [CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore - arg [-lstdc++] ==> lib [stdc++] - arg [-lm] ==> lib [m] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [-lc] ==> lib [c] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] - ignore line: [collect2 version 11.4.0] - ignore line: [/usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccQOxcTP.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_b8bbd /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_b8bbd.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] - linker tool for 'CXX': /usr/bin/ld - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11] ==> [/usr/lib/gcc/x86_64-linux-gnu/11] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> [/usr/lib] - collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] - collapse library dir [/lib/../lib] ==> [/lib] - collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] - collapse library dir [/usr/lib/../lib] ==> [/usr/lib] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> [/usr/lib] - implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] - implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] - implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] - implicit fwks: [] - - - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:210 (cmake_determine_linker_id)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:20 (project)" - message: | - Running the CXX compiler's linker: "/usr/bin/ld" "-v" - GNU ld (GNU Binutils for Ubuntu) 2.38 -... diff --git a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/cmake.check_cache b/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/cmake.check_cache deleted file mode 100644 index 3dccd7317..000000000 --- a/build/Desktop_Qt_6_8_0-Debug/CMakeFiles/cmake.check_cache +++ /dev/null @@ -1 +0,0 @@ -# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/build/Desktop_Qt_6_8_0-Debug/ninja_version.h b/build/Desktop_Qt_6_8_0-Debug/ninja_version.h deleted file mode 100644 index 367f13b7c..000000000 --- a/build/Desktop_Qt_6_8_0-Debug/ninja_version.h +++ /dev/null @@ -1,39 +0,0 @@ -/****************************************************************************** - * - * Project: WindNinja - * Purpose: general disclaimer for windninja - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef NINJA_VERSION_H_ -#define NINJA_VERSION_H_ - -#define NINJA_VERSION_MAJOR 3 -#define NINJA_VERSION_MINOR 11 -#define NINJA_VERSION_PATCH 0 -#define NINJA_VERSION_STRING "3.11.0" -#define NINJA_SCM_VERSION "6a8269d2034eabbb8a28bee5e6b77c628838dbd1" -#define NINJA_RELEASE_DATE "2025/01/28" - -#endif /* NINJA_VERSION_H_ */ - diff --git a/build/Desktop_Qt_6_8_0-Debug/qtcsettings.cmake b/build/Desktop_Qt_6_8_0-Debug/qtcsettings.cmake deleted file mode 100644 index e0cd091bf..000000000 --- a/build/Desktop_Qt_6_8_0-Debug/qtcsettings.cmake +++ /dev/null @@ -1,10 +0,0 @@ -# This file is managed by Qt Creator, do not edit! - -set("CMAKE_GENERATOR" "Ninja" CACHE "STRING" "" FORCE) -set("QT_QMAKE_EXECUTABLE" "/home/austenharrell/Qt/6.8.0/gcc_64/bin/qmake" CACHE "FILEPATH" "" FORCE) -set("CMAKE_CXX_FLAGS_INIT" "-DQT_QML_DEBUG" CACHE "STRING" "" FORCE) -set("CMAKE_PROJECT_INCLUDE_BEFORE" "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Debug/.qtc/package-manager/auto-setup.cmake" CACHE "FILEPATH" "" FORCE) -set("CMAKE_CXX_COMPILER" "/usr/bin/x86_64-linux-gnu-g++-11" CACHE "FILEPATH" "" FORCE) -set("CMAKE_C_COMPILER" "/usr/bin/gcc-11" CACHE "FILEPATH" "" FORCE) -set("CMAKE_BUILD_TYPE" "Debug" CACHE "STRING" "" FORCE) -set("CMAKE_PREFIX_PATH" "/home/austenharrell/Qt/6.8.0/gcc_64" CACHE "PATH" "" FORCE) \ No newline at end of file diff --git a/build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/cache-v2 b/build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/cache-v2 deleted file mode 100644 index e69de29bb..000000000 diff --git a/build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/cmakeFiles-v1 b/build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/cmakeFiles-v1 deleted file mode 100644 index e69de29bb..000000000 diff --git a/build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/codemodel-v2 b/build/Desktop_Qt_6_8_0-Release/.cmake/api/v1/query/codemodel-v2 deleted file mode 100644 index e69de29bb..000000000 diff --git a/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/LICENSE.conan b/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/LICENSE.conan deleted file mode 100644 index 541f5a3a6..000000000 --- a/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/LICENSE.conan +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2019 JFrog - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/auto-setup.cmake b/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/auto-setup.cmake deleted file mode 100644 index c797138f6..000000000 --- a/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/auto-setup.cmake +++ /dev/null @@ -1,272 +0,0 @@ -# -# Internal Qt Creator variable reference -# -foreach(qtcreator_var - QT_QMAKE_EXECUTABLE CMAKE_PREFIX_PATH CMAKE_C_COMPILER CMAKE_CXX_COMPILER - CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELWITHDEBINFO) - set(__just_reference_${qtcreator_var} ${${qtcreator_var}}) -endforeach() - -if (EXISTS "${CMAKE_SOURCE_DIR}/QtCreatorPackageManager.cmake") - include("${CMAKE_SOURCE_DIR}/QtCreatorPackageManager.cmake") -endif() - -if (QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP) - return() -endif() -option(QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP "Skip Qt Creator's package manager auto-setup" OFF) - -# Store the C/C++ object output extension -if (CMAKE_VERSION GREATER_EQUAL "3.19") - cmake_language(DEFER CALL set CMAKE_C_OUTPUT_EXTENSION "${CMAKE_C_OUTPUT_EXTENSION}" CACHE STRING "" FORCE) - cmake_language(DEFER CALL set CMAKE_CXX_OUTPUT_EXTENSION "${CMAKE_CXX_OUTPUT_EXTENSION}" CACHE STRING "" FORCE) -endif() - -macro(qtc_auto_setup_compiler_standard toolchainFile) - foreach(lang_var C CXX CUDA OBJC OBJCXX) - foreach(prop_var STANDARD STANDARD_REQUIRED EXTENSIONS) - if (CMAKE_${lang_var}_${prop_var}) - file(APPEND "${toolchainFile}" - "set(CMAKE_${lang_var}_${prop_var} ${CMAKE_${lang_var}_${prop_var}})\n") - endif() - endforeach() - endforeach() - - # Forward important CMake variables to the package manager in the toolchain file - foreach(fwd_var CMAKE_MSVC_RUNTIME_LIBRARY CMAKE_SYSROOT CMAKE_OSX_SYSROOT CMAKE_OSX_ARCHITECTURES) - if (${fwd_var}) - file(APPEND "${toolchainFile}" - "set(${fwd_var} ${${fwd_var}})\n") - endif() - endforeach() -endmacro() - -# -# conan -# -macro(qtc_auto_setup_conan) - foreach(file conanfile.txt conanfile.py) - if (EXISTS "${CMAKE_SOURCE_DIR}/${file}") - set(conanfile_txt "${CMAKE_SOURCE_DIR}/${file}") - break() - endif() - endforeach() - - if (conanfile_txt AND NOT QT_CREATOR_SKIP_CONAN_SETUP) - option(QT_CREATOR_SKIP_CONAN_SETUP "Skip Qt Creator's conan package manager auto-setup" OFF) - set(QT_CREATOR_CONAN_BUILD_POLICY "missing" CACHE STRING "Qt Creator's conan package manager auto-setup build policy. This is used for the BUILD property of cmake_conan_run") - - find_program(conan_program conan) - if (NOT conan_program) - message(WARNING "Qt Creator: conan executable not found. " - "Package manager auto-setup will be skipped. " - "To disable this warning set QT_CREATOR_SKIP_CONAN_SETUP to ON.") - return() - endif() - execute_process(COMMAND ${conan_program} --version - RESULT_VARIABLE result_code - OUTPUT_VARIABLE conan_version_output - ERROR_VARIABLE conan_version_output) - if (NOT result_code EQUAL 0) - message(FATAL_ERROR "conan --version failed='${result_code}: ${conan_version_output}") - endif() - - string(REGEX REPLACE ".*Conan version ([0-9].[0-9]).*" "\\1" conan_version "${conan_version_output}") - - set(conanfile_timestamp_file "${CMAKE_BINARY_DIR}/conan-dependencies/conanfile.timestamp") - file(TIMESTAMP "${conanfile_txt}" conanfile_timestamp) - - set(do_conan_installation ON) - if (EXISTS "${conanfile_timestamp_file}") - file(READ "${conanfile_timestamp_file}" old_conanfile_timestamp) - if ("${conanfile_timestamp}" STREQUAL "${old_conanfile_timestamp}") - set(do_conan_installation OFF) - endif() - endif() - - set(conanfile_build_policy_file "${CMAKE_BINARY_DIR}/conan-dependencies/conanfile.buildpolicy") - if (EXISTS "${conanfile_build_policy_file}") - file(READ "${conanfile_build_policy_file}" build_policy) - if (NOT "${build_policy}" STREQUAL "${QT_CREATOR_CONAN_BUILD_POLICY}") - set(do_conan_installation ON) - endif() - endif() - - if (do_conan_installation) - message(STATUS "Qt Creator: conan package manager auto-setup. " - "Skip this step by setting QT_CREATOR_SKIP_CONAN_SETUP to ON.") - - file(COPY "${conanfile_txt}" DESTINATION "${CMAKE_BINARY_DIR}/conan-dependencies/") - - file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" " - set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\") - set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\") - ") - qtc_auto_setup_compiler_standard("${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake") - - if (CMAKE_TOOLCHAIN_FILE) - file(APPEND "${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" - "include(\"${CMAKE_TOOLCHAIN_FILE}\")\n") - endif() - - file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/CMakeLists.txt" " - cmake_minimum_required(VERSION 3.15) - - unset(CMAKE_PROJECT_INCLUDE_BEFORE CACHE) - project(conan-setup) - - if (${conan_version} VERSION_GREATER_EQUAL 2.0) - set(CONAN_COMMAND \"${conan_program}\") - include(\"${CMAKE_CURRENT_LIST_DIR}/conan_provider.cmake\") - conan_profile_detect_default() - detect_host_profile(\"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\") - - set(build_types \${CMAKE_BUILD_TYPE}) - if (CMAKE_CONFIGURATION_TYPES) - set(build_types \${CMAKE_CONFIGURATION_TYPES}) - endif() - - foreach(type \${build_types}) - conan_install( - -pr \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\" - --build=${QT_CREATOR_CONAN_BUILD_POLICY} - -s build_type=\${type} - -g CMakeDeps) - endforeach() - - get_property(CONAN_INSTALL_SUCCESS GLOBAL PROPERTY CONAN_INSTALL_SUCCESS) - if (CONAN_INSTALL_SUCCESS) - get_property(CONAN_GENERATORS_FOLDER GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) - file(TO_CMAKE_PATH \"\${CONAN_GENERATORS_FOLDER}\" CONAN_GENERATORS_FOLDER) - file(WRITE \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake\" \" - list(PREPEND CMAKE_PREFIX_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") - list(PREPEND CMAKE_MODULE_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") - list(PREPEND CMAKE_FIND_ROOT_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") - list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH) - list(REMOVE_DUPLICATES CMAKE_MODULE_PATH) - list(REMOVE_DUPLICATES CMAKE_FIND_ROOT_PATH) - set(CMAKE_PREFIX_PATH \\\"\\\${CMAKE_PREFIX_PATH}\\\" CACHE STRING \\\"\\\" FORCE) - set(CMAKE_MODULE_PATH \\\"\\\${CMAKE_MODULE_PATH}\\\" CACHE STRING \\\"\\\" FORCE) - set(CMAKE_FIND_ROOT_PATH \\\"\\\${CMAKE_FIND_ROOT_PATH}\\\" CACHE STRING \\\"\\\" FORCE) - \") - endif() - else() - include(\"${CMAKE_CURRENT_LIST_DIR}/conan.cmake\") - conan_cmake_run( - CONANFILE \"${conanfile_txt}\" - INSTALL_FOLDER \"${CMAKE_BINARY_DIR}/conan-dependencies\" - GENERATORS cmake_paths cmake_find_package json - BUILD ${QT_CREATOR_CONAN_BUILD_POLICY} - ENV CONAN_CMAKE_TOOLCHAIN_FILE=\"${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake\" - ) - endif() - ") - - if (NOT DEFINED CMAKE_BUILD_TYPE AND NOT DEFINED CMAKE_CONFIGURATION_TYPES) - set(CMAKE_CONFIGURATION_TYPES "Debug;Release") - endif() - - execute_process(COMMAND ${CMAKE_COMMAND} - -S "${CMAKE_BINARY_DIR}/conan-dependencies/" - -B "${CMAKE_BINARY_DIR}/conan-dependencies/build" - -C "${CMAKE_BINARY_DIR}/qtcsettings.cmake" - -D "CMAKE_TOOLCHAIN_FILE=${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" - -G ${CMAKE_GENERATOR} - -D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -D "CMAKE_CONFIGURATION_TYPES=${CMAKE_CONFIGURATION_TYPES}" - RESULT_VARIABLE result - ) - if (result EQUAL 0) - file(WRITE "${conanfile_timestamp_file}" "${conanfile_timestamp}") - file(WRITE "${conanfile_build_policy_file}" ${QT_CREATOR_CONAN_BUILD_POLICY}) - else() - message(WARNING "Qt Creator's conan package manager auto-setup failed. Consider setting " - "QT_CREATOR_SKIP_CONAN_SETUP to ON and reconfigure to skip this step.") - return() - endif() - endif() - - include("${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake") - endif() - unset(conanfile_txt) -endmacro() -qtc_auto_setup_conan() - -# -# vcpkg -# -macro(qtc_auto_setup_vcpkg) - if (EXISTS "${CMAKE_SOURCE_DIR}/vcpkg.json" AND NOT QT_CREATOR_SKIP_VCPKG_SETUP) - option(QT_CREATOR_SKIP_VCPKG_SETUP "Skip Qt Creator's vcpkg package manager auto-setup" OFF) - - find_program(vcpkg_program vcpkg - PATHS $ENV{VCPKG_ROOT} ${CMAKE_SOURCE_DIR}/vcpkg - NO_DEFAULT_PATH - ) - if (NOT vcpkg_program) - message(WARNING "Qt Creator: vcpkg executable not found. " - "Package manager auto-setup will be skipped. " - "To disable this warning set QT_CREATOR_SKIP_VCPKG_SETUP to ON.") - return() - endif() - execute_process(COMMAND ${vcpkg_program} version - RESULT_VARIABLE result_code - OUTPUT_VARIABLE vcpkg_version_output - ERROR_VARIABLE vcpkg_version_output) - if (NOT result_code EQUAL 0) - message(FATAL_ERROR "vcpkg version failed='${result_code}: ${vcpkg_version_output}") - endif() - - # Resolve any symlinks - get_filename_component(vpkg_program_real_path ${vcpkg_program} REALPATH) - get_filename_component(vpkg_root ${vpkg_program_real_path} DIRECTORY) - - if (NOT EXISTS "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") - message(STATUS "Qt Creator: vcpkg package manager auto-setup. " - "Skip this step by setting QT_CREATOR_SKIP_VCPKG_SETUP to ON.") - - file(WRITE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" " - set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\") - set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\") - ") - qtc_auto_setup_compiler_standard("${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") - - if (CMAKE_TOOLCHAIN_FILE AND NOT - CMAKE_TOOLCHAIN_FILE STREQUAL "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake") - file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" - "include(\"${CMAKE_TOOLCHAIN_FILE}\")\n") - endif() - - if (VCPKG_TARGET_TRIPLET) - set(vcpkg_triplet ${VCPKG_TARGET_TRIPLET}) - else() - if (WIN32) - set(vcpkg_triplet x64-mingw-static) - if (CMAKE_CXX_COMPILER MATCHES ".*/(.*)/cl.exe") - set(vcpkg_triplet ${CMAKE_MATCH_1}-windows) - endif() - elseif(APPLE) - set(vcpkg_triplet x64-osx) - else() - set(vcpkg_triplet x64-linux) - endif() - endif() - - file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" " - set(VCPKG_TARGET_TRIPLET ${vcpkg_triplet}) - include(\"${vpkg_root}/scripts/buildsystems/vcpkg.cmake\") - ") - endif() - - set(CMAKE_TOOLCHAIN_FILE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" CACHE PATH "" FORCE) - - # Save CMAKE_PREFIX_PATH and CMAKE_MODULE_PATH as cache variables - if (CMAKE_VERSION GREATER_EQUAL "3.19") - cmake_language(DEFER CALL list REMOVE_DUPLICATES CMAKE_PREFIX_PATH) - cmake_language(DEFER CALL list REMOVE_DUPLICATES CMAKE_MODULE_PATH) - cmake_language(DEFER CALL set CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH}" CACHE STRING "" FORCE) - cmake_language(DEFER CALL set CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" CACHE STRING "" FORCE) - endif() - endif() -endmacro() -qtc_auto_setup_vcpkg() diff --git a/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/conan.cmake b/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/conan.cmake deleted file mode 100644 index 4f5f67e74..000000000 --- a/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/conan.cmake +++ /dev/null @@ -1,1026 +0,0 @@ -# The MIT License (MIT) - -# Copyright (c) 2018 JFrog - -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: - -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - - - -# This file comes from: https://github.com/conan-io/cmake-conan. Please refer -# to this repository for issues and documentation. - -# Its purpose is to wrap and launch Conan C/C++ Package Manager when cmake is called. -# It will take CMake current settings (os, compiler, compiler version, architecture) -# and translate them to conan settings for installing and retrieving dependencies. - -# It is intended to facilitate developers building projects that have conan dependencies, -# but it is only necessary on the end-user side. It is not necessary to create conan -# packages, in fact it shouldn't be use for that. Check the project documentation. - -# version: 0.18.1 - -include(CMakeParseArguments) - -function(_get_msvc_ide_version result) - set(${result} "" PARENT_SCOPE) - if(NOT MSVC_VERSION VERSION_LESS 1400 AND MSVC_VERSION VERSION_LESS 1500) - set(${result} 8 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1500 AND MSVC_VERSION VERSION_LESS 1600) - set(${result} 9 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1600 AND MSVC_VERSION VERSION_LESS 1700) - set(${result} 10 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1700 AND MSVC_VERSION VERSION_LESS 1800) - set(${result} 11 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1800 AND MSVC_VERSION VERSION_LESS 1900) - set(${result} 12 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1900 AND MSVC_VERSION VERSION_LESS 1910) - set(${result} 14 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1910 AND MSVC_VERSION VERSION_LESS 1920) - set(${result} 15 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1920 AND MSVC_VERSION VERSION_LESS 1930) - set(${result} 16 PARENT_SCOPE) - elseif(NOT MSVC_VERSION VERSION_LESS 1930 AND MSVC_VERSION VERSION_LESS 1940) - set(${result} 17 PARENT_SCOPE) - else() - message(FATAL_ERROR "Conan: Unknown MSVC compiler version [${MSVC_VERSION}]") - endif() -endfunction() - -macro(_conan_detect_build_type) - conan_parse_arguments(${ARGV}) - - if(ARGUMENTS_BUILD_TYPE) - set(_CONAN_SETTING_BUILD_TYPE ${ARGUMENTS_BUILD_TYPE}) - elseif(CMAKE_BUILD_TYPE) - set(_CONAN_SETTING_BUILD_TYPE ${CMAKE_BUILD_TYPE}) - else() - message(FATAL_ERROR "Please specify in command line CMAKE_BUILD_TYPE (-DCMAKE_BUILD_TYPE=Release)") - endif() - - string(TOUPPER ${_CONAN_SETTING_BUILD_TYPE} _CONAN_SETTING_BUILD_TYPE_UPPER) - if (_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "DEBUG") - set(_CONAN_SETTING_BUILD_TYPE "Debug") - elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "RELEASE") - set(_CONAN_SETTING_BUILD_TYPE "Release") - elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "RELWITHDEBINFO") - set(_CONAN_SETTING_BUILD_TYPE "RelWithDebInfo") - elseif(_CONAN_SETTING_BUILD_TYPE_UPPER STREQUAL "MINSIZEREL") - set(_CONAN_SETTING_BUILD_TYPE "MinSizeRel") - endif() -endmacro() - -macro(_conan_check_system_name) - #handle -s os setting - if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") - #use default conan os setting if CMAKE_SYSTEM_NAME is not defined - set(CONAN_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}) - if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") - set(CONAN_SYSTEM_NAME Macos) - endif() - if(${CMAKE_SYSTEM_NAME} STREQUAL "QNX") - set(CONAN_SYSTEM_NAME Neutrino) - endif() - set(CONAN_SUPPORTED_PLATFORMS Windows Linux Macos Android iOS FreeBSD WindowsStore WindowsCE watchOS tvOS FreeBSD SunOS AIX Arduino Emscripten Neutrino) - list (FIND CONAN_SUPPORTED_PLATFORMS "${CONAN_SYSTEM_NAME}" _index) - if (${_index} GREATER -1) - #check if the cmake system is a conan supported one - set(_CONAN_SETTING_OS ${CONAN_SYSTEM_NAME}) - else() - message(FATAL_ERROR "cmake system ${CONAN_SYSTEM_NAME} is not supported by conan. Use one of ${CONAN_SUPPORTED_PLATFORMS}") - endif() - endif() -endmacro() - -macro(_conan_check_language) - get_property(_languages GLOBAL PROPERTY ENABLED_LANGUAGES) - if (";${_languages};" MATCHES ";CXX;") - set(LANGUAGE CXX) - set(USING_CXX 1) - elseif (";${_languages};" MATCHES ";C;") - set(LANGUAGE C) - set(USING_CXX 0) - else () - message(FATAL_ERROR "Conan: Neither C or C++ was detected as a language for the project. Unabled to detect compiler version.") - endif() -endmacro() - -macro(_conan_detect_compiler) - - conan_parse_arguments(${ARGV}) - - if(ARGUMENTS_ARCH) - set(_CONAN_SETTING_ARCH ${ARGUMENTS_ARCH}) - endif() - - if(USING_CXX) - set(_CONAN_SETTING_COMPILER_CPPSTD ${CMAKE_CXX_STANDARD}) - endif() - - if (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL GNU) - # using GCC - # TODO: Handle other params - string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) - list(GET VERSION_LIST 0 MAJOR) - list(GET VERSION_LIST 1 MINOR) - set(COMPILER_VERSION ${MAJOR}.${MINOR}) - if(${MAJOR} GREATER 4) - set(COMPILER_VERSION ${MAJOR}) - endif() - set(_CONAN_SETTING_COMPILER gcc) - set(_CONAN_SETTING_COMPILER_VERSION ${COMPILER_VERSION}) - if (USING_CXX) - conan_cmake_detect_unix_libcxx(_LIBCXX) - set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) - endif () - elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Intel) - string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) - list(GET VERSION_LIST 0 MAJOR) - list(GET VERSION_LIST 1 MINOR) - set(COMPILER_VERSION ${MAJOR}.${MINOR}) - set(_CONAN_SETTING_COMPILER intel) - set(_CONAN_SETTING_COMPILER_VERSION ${COMPILER_VERSION}) - if (USING_CXX) - conan_cmake_detect_unix_libcxx(_LIBCXX) - set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) - endif () - elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL AppleClang) - # using AppleClang - string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) - list(GET VERSION_LIST 0 MAJOR) - list(GET VERSION_LIST 1 MINOR) - set(_CONAN_SETTING_COMPILER apple-clang) - set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}.${MINOR}) - if (USING_CXX) - conan_cmake_detect_unix_libcxx(_LIBCXX) - set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) - endif () - elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Clang - AND NOT "${CMAKE_${LANGUAGE}_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC" - AND NOT "${CMAKE_${LANGUAGE}_SIMULATE_ID}" STREQUAL "MSVC") - - string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION}) - list(GET VERSION_LIST 0 MAJOR) - list(GET VERSION_LIST 1 MINOR) - set(_CONAN_SETTING_COMPILER clang) - set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}.${MINOR}) - if(APPLE) - cmake_policy(GET CMP0025 APPLE_CLANG_POLICY) - if(NOT APPLE_CLANG_POLICY STREQUAL NEW) - message(STATUS "Conan: APPLE and Clang detected. Assuming apple-clang compiler. Set CMP0025 to avoid it") - set(_CONAN_SETTING_COMPILER apple-clang) - endif() - endif() - if(${_CONAN_SETTING_COMPILER} STREQUAL clang AND ${MAJOR} GREATER 7) - set(_CONAN_SETTING_COMPILER_VERSION ${MAJOR}) - endif() - if (USING_CXX) - conan_cmake_detect_unix_libcxx(_LIBCXX) - set(_CONAN_SETTING_COMPILER_LIBCXX ${_LIBCXX}) - endif () - elseif(${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL MSVC - OR (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Clang - AND "${CMAKE_${LANGUAGE}_COMPILER_FRONTEND_VARIANT}" STREQUAL "MSVC" - AND "${CMAKE_${LANGUAGE}_SIMULATE_ID}" STREQUAL "MSVC")) - - set(_VISUAL "Visual Studio") - _get_msvc_ide_version(_VISUAL_VERSION) - if("${_VISUAL_VERSION}" STREQUAL "") - message(FATAL_ERROR "Conan: Visual Studio not recognized") - else() - set(_CONAN_SETTING_COMPILER ${_VISUAL}) - set(_CONAN_SETTING_COMPILER_VERSION ${_VISUAL_VERSION}) - endif() - - if(NOT _CONAN_SETTING_ARCH) - if (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "64") - set(_CONAN_SETTING_ARCH x86_64) - elseif (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "^ARM") - message(STATUS "Conan: Using default ARM architecture from MSVC") - set(_CONAN_SETTING_ARCH armv6) - elseif (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "86") - set(_CONAN_SETTING_ARCH x86) - else () - message(FATAL_ERROR "Conan: Unknown MSVC architecture [${MSVC_${LANGUAGE}_ARCHITECTURE_ID}]") - endif() - endif() - - conan_cmake_detect_vs_runtime(_vs_runtime ${ARGV}) - message(STATUS "Conan: Detected VS runtime: ${_vs_runtime}") - set(_CONAN_SETTING_COMPILER_RUNTIME ${_vs_runtime}) - - if (CMAKE_GENERATOR_TOOLSET) - set(_CONAN_SETTING_COMPILER_TOOLSET ${CMAKE_VS_PLATFORM_TOOLSET}) - elseif(CMAKE_VS_PLATFORM_TOOLSET AND (CMAKE_GENERATOR STREQUAL "Ninja")) - set(_CONAN_SETTING_COMPILER_TOOLSET ${CMAKE_VS_PLATFORM_TOOLSET}) - endif() - else() - message(FATAL_ERROR "Conan: compiler setup not recognized") - endif() - -endmacro() - -function(conan_cmake_settings result) - #message(STATUS "COMPILER " ${CMAKE_CXX_COMPILER}) - #message(STATUS "COMPILER " ${CMAKE_CXX_COMPILER_ID}) - #message(STATUS "VERSION " ${CMAKE_CXX_COMPILER_VERSION}) - #message(STATUS "FLAGS " ${CMAKE_LANG_FLAGS}) - #message(STATUS "LIB ARCH " ${CMAKE_CXX_LIBRARY_ARCHITECTURE}) - #message(STATUS "BUILD TYPE " ${CMAKE_BUILD_TYPE}) - #message(STATUS "GENERATOR " ${CMAKE_GENERATOR}) - #message(STATUS "GENERATOR WIN64 " ${CMAKE_CL_64}) - - message(STATUS "Conan: Automatic detection of conan settings from cmake") - - conan_parse_arguments(${ARGV}) - - _conan_detect_build_type(${ARGV}) - - _conan_check_system_name() - - _conan_check_language() - - _conan_detect_compiler(${ARGV}) - - # If profile is defined it is used - if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARGUMENTS_DEBUG_PROFILE) - set(_APPLIED_PROFILES ${ARGUMENTS_DEBUG_PROFILE}) - elseif(CMAKE_BUILD_TYPE STREQUAL "Release" AND ARGUMENTS_RELEASE_PROFILE) - set(_APPLIED_PROFILES ${ARGUMENTS_RELEASE_PROFILE}) - elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" AND ARGUMENTS_RELWITHDEBINFO_PROFILE) - set(_APPLIED_PROFILES ${ARGUMENTS_RELWITHDEBINFO_PROFILE}) - elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" AND ARGUMENTS_MINSIZEREL_PROFILE) - set(_APPLIED_PROFILES ${ARGUMENTS_MINSIZEREL_PROFILE}) - elseif(ARGUMENTS_PROFILE) - set(_APPLIED_PROFILES ${ARGUMENTS_PROFILE}) - endif() - - foreach(ARG ${_APPLIED_PROFILES}) - set(_SETTINGS ${_SETTINGS} -pr=${ARG}) - endforeach() - foreach(ARG ${ARGUMENTS_PROFILE_BUILD}) - conan_check(VERSION 1.24.0 REQUIRED DETECT_QUIET) - set(_SETTINGS ${_SETTINGS} -pr:b=${ARG}) - endforeach() - - if(NOT _SETTINGS OR ARGUMENTS_PROFILE_AUTO STREQUAL "ALL") - set(ARGUMENTS_PROFILE_AUTO arch build_type compiler compiler.version - compiler.runtime compiler.libcxx compiler.toolset) - endif() - - # remove any manually specified settings from the autodetected settings - foreach(ARG ${ARGUMENTS_SETTINGS}) - string(REGEX MATCH "[^=]*" MANUAL_SETTING "${ARG}") - message(STATUS "Conan: ${MANUAL_SETTING} was added as an argument. Not using the autodetected one.") - list(REMOVE_ITEM ARGUMENTS_PROFILE_AUTO "${MANUAL_SETTING}") - endforeach() - - # Automatic from CMake - foreach(ARG ${ARGUMENTS_PROFILE_AUTO}) - string(TOUPPER ${ARG} _arg_name) - string(REPLACE "." "_" _arg_name ${_arg_name}) - if(_CONAN_SETTING_${_arg_name}) - set(_SETTINGS ${_SETTINGS} -s ${ARG}=${_CONAN_SETTING_${_arg_name}}) - endif() - endforeach() - - foreach(ARG ${ARGUMENTS_SETTINGS}) - set(_SETTINGS ${_SETTINGS} -s ${ARG}) - endforeach() - - message(STATUS "Conan: Settings= ${_SETTINGS}") - - set(${result} ${_SETTINGS} PARENT_SCOPE) -endfunction() - - -function(conan_cmake_detect_unix_libcxx result) - # Take into account any -stdlib in compile options - get_directory_property(compile_options DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMPILE_OPTIONS) - string(GENEX_STRIP "${compile_options}" compile_options) - - # Take into account any _GLIBCXX_USE_CXX11_ABI in compile definitions - get_directory_property(defines DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMPILE_DEFINITIONS) - string(GENEX_STRIP "${defines}" defines) - - foreach(define ${defines}) - if(define MATCHES "_GLIBCXX_USE_CXX11_ABI") - if(define MATCHES "^-D") - set(compile_options ${compile_options} "${define}") - else() - set(compile_options ${compile_options} "-D${define}") - endif() - endif() - endforeach() - - # add additional compiler options ala cmRulePlaceholderExpander::ExpandRuleVariable - set(EXPAND_CXX_COMPILER ${CMAKE_CXX_COMPILER}) - if(CMAKE_CXX_COMPILER_ARG1) - # CMake splits CXX="foo bar baz" into CMAKE_CXX_COMPILER="foo", CMAKE_CXX_COMPILER_ARG1="bar baz" - # without this, ccache, winegcc, or other wrappers might lose all their arguments - separate_arguments(SPLIT_CXX_COMPILER_ARG1 NATIVE_COMMAND ${CMAKE_CXX_COMPILER_ARG1}) - list(APPEND EXPAND_CXX_COMPILER ${SPLIT_CXX_COMPILER_ARG1}) - endif() - - if(CMAKE_CXX_COMPILE_OPTIONS_TARGET AND CMAKE_CXX_COMPILER_TARGET) - # without --target= we may be calling the wrong underlying GCC - list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_TARGET}${CMAKE_CXX_COMPILER_TARGET}") - endif() - - if(CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN AND CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN) - list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN}") - endif() - - if(CMAKE_CXX_COMPILE_OPTIONS_SYSROOT) - # without --sysroot= we may find the wrong #include - if(CMAKE_SYSROOT_COMPILE) - list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT_COMPILE}") - elseif(CMAKE_SYSROOT) - list(APPEND EXPAND_CXX_COMPILER "${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT}") - endif() - endif() - - separate_arguments(SPLIT_CXX_FLAGS NATIVE_COMMAND ${CMAKE_CXX_FLAGS}) - - if(CMAKE_OSX_SYSROOT) - set(xcode_sysroot_option "--sysroot=${CMAKE_OSX_SYSROOT}") - endif() - - execute_process( - COMMAND ${CMAKE_COMMAND} -E echo "#include " - COMMAND ${EXPAND_CXX_COMPILER} ${SPLIT_CXX_FLAGS} -x c++ ${xcode_sysroot_option} ${compile_options} -E -dM - - OUTPUT_VARIABLE string_defines - ) - - if(string_defines MATCHES "#define __GLIBCXX__") - # Allow -D_GLIBCXX_USE_CXX11_ABI=ON/OFF as argument to cmake - if(DEFINED _GLIBCXX_USE_CXX11_ABI) - if(_GLIBCXX_USE_CXX11_ABI) - set(${result} libstdc++11 PARENT_SCOPE) - return() - else() - set(${result} libstdc++ PARENT_SCOPE) - return() - endif() - endif() - - if(string_defines MATCHES "#define _GLIBCXX_USE_CXX11_ABI 1\n") - set(${result} libstdc++11 PARENT_SCOPE) - else() - # Either the compiler is missing the define because it is old, and so - # it can't use the new abi, or the compiler was configured to use the - # old abi by the user or distro (e.g. devtoolset on RHEL/CentOS) - set(${result} libstdc++ PARENT_SCOPE) - endif() - else() - set(${result} libc++ PARENT_SCOPE) - endif() -endfunction() - -function(conan_cmake_detect_vs_runtime result) - - conan_parse_arguments(${ARGV}) - if(ARGUMENTS_BUILD_TYPE) - set(build_type "${ARGUMENTS_BUILD_TYPE}") - elseif(CMAKE_BUILD_TYPE) - set(build_type "${CMAKE_BUILD_TYPE}") - else() - message(FATAL_ERROR "Please specify in command line CMAKE_BUILD_TYPE (-DCMAKE_BUILD_TYPE=Release)") - endif() - - if(build_type) - string(TOUPPER "${build_type}" build_type) - endif() - set(variables CMAKE_CXX_FLAGS_${build_type} CMAKE_C_FLAGS_${build_type} CMAKE_CXX_FLAGS CMAKE_C_FLAGS) - foreach(variable ${variables}) - if(NOT "${${variable}}" STREQUAL "") - string(REPLACE " " ";" flags "${${variable}}") - foreach (flag ${flags}) - if("${flag}" STREQUAL "/MD" OR "${flag}" STREQUAL "/MDd" OR "${flag}" STREQUAL "/MT" OR "${flag}" STREQUAL "/MTd") - string(SUBSTRING "${flag}" 1 -1 runtime) - set(${result} "${runtime}" PARENT_SCOPE) - return() - endif() - endforeach() - endif() - endforeach() - if("${build_type}" STREQUAL "DEBUG") - set(${result} "MDd" PARENT_SCOPE) - else() - set(${result} "MD" PARENT_SCOPE) - endif() -endfunction() - -function(_collect_settings result) - set(ARGUMENTS_PROFILE_AUTO arch build_type compiler compiler.version - compiler.runtime compiler.libcxx compiler.toolset - compiler.cppstd) - foreach(ARG ${ARGUMENTS_PROFILE_AUTO}) - string(TOUPPER ${ARG} _arg_name) - string(REPLACE "." "_" _arg_name ${_arg_name}) - if(_CONAN_SETTING_${_arg_name}) - set(detected_setings ${detected_setings} ${ARG}=${_CONAN_SETTING_${_arg_name}}) - endif() - endforeach() - set(${result} ${detected_setings} PARENT_SCOPE) -endfunction() - -function(conan_cmake_autodetect detected_settings) - _conan_detect_build_type(${ARGV}) - _conan_check_system_name() - _conan_check_language() - _conan_detect_compiler(${ARGV}) - _collect_settings(collected_settings) - set(${detected_settings} ${collected_settings} PARENT_SCOPE) -endfunction() - -macro(conan_parse_arguments) - set(options BASIC_SETUP CMAKE_TARGETS UPDATE KEEP_RPATHS NO_LOAD NO_OUTPUT_DIRS OUTPUT_QUIET NO_IMPORTS SKIP_STD) - set(oneValueArgs CONANFILE ARCH BUILD_TYPE INSTALL_FOLDER OUTPUT_FOLDER CONAN_COMMAND) - set(multiValueArgs DEBUG_PROFILE RELEASE_PROFILE RELWITHDEBINFO_PROFILE MINSIZEREL_PROFILE - PROFILE REQUIRES OPTIONS IMPORTS SETTINGS BUILD ENV GENERATORS PROFILE_AUTO - INSTALL_ARGS CONFIGURATION_TYPES PROFILE_BUILD BUILD_REQUIRES) - cmake_parse_arguments(ARGUMENTS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) -endmacro() - -function(old_conan_cmake_install) - # Calls "conan install" - # Argument BUILD is equivalant to --build={missing, PkgName,...} or - # --build when argument is 'BUILD all' (which builds all packages from source) - # Argument CONAN_COMMAND, to specify the conan path, e.g. in case of running from source - # cmake does not identify conan as command, even if it is +x and it is in the path - conan_parse_arguments(${ARGV}) - - if(CONAN_CMAKE_MULTI) - set(ARGUMENTS_GENERATORS ${ARGUMENTS_GENERATORS} cmake_multi) - else() - set(ARGUMENTS_GENERATORS ${ARGUMENTS_GENERATORS} cmake) - endif() - - set(CONAN_BUILD_POLICY "") - foreach(ARG ${ARGUMENTS_BUILD}) - if(${ARG} STREQUAL "all") - set(CONAN_BUILD_POLICY ${CONAN_BUILD_POLICY} --build) - break() - else() - set(CONAN_BUILD_POLICY ${CONAN_BUILD_POLICY} --build=${ARG}) - endif() - endforeach() - if(ARGUMENTS_CONAN_COMMAND) - set(CONAN_CMD ${ARGUMENTS_CONAN_COMMAND}) - else() - conan_check(REQUIRED) - endif() - set(CONAN_OPTIONS "") - if(ARGUMENTS_CONANFILE) - if(IS_ABSOLUTE ${ARGUMENTS_CONANFILE}) - set(CONANFILE ${ARGUMENTS_CONANFILE}) - else() - set(CONANFILE ${CMAKE_CURRENT_SOURCE_DIR}/${ARGUMENTS_CONANFILE}) - endif() - else() - set(CONANFILE ".") - endif() - foreach(ARG ${ARGUMENTS_OPTIONS}) - set(CONAN_OPTIONS ${CONAN_OPTIONS} -o=${ARG}) - endforeach() - if(ARGUMENTS_UPDATE) - set(CONAN_INSTALL_UPDATE --update) - endif() - if(ARGUMENTS_NO_IMPORTS) - set(CONAN_INSTALL_NO_IMPORTS --no-imports) - endif() - set(CONAN_INSTALL_FOLDER "") - if(ARGUMENTS_INSTALL_FOLDER) - set(CONAN_INSTALL_FOLDER -if=${ARGUMENTS_INSTALL_FOLDER}) - endif() - set(CONAN_OUTPUT_FOLDER "") - if(ARGUMENTS_OUTPUT_FOLDER) - set(CONAN_OUTPUT_FOLDER -of=${ARGUMENTS_OUTPUT_FOLDER}) - endif() - foreach(ARG ${ARGUMENTS_GENERATORS}) - set(CONAN_GENERATORS ${CONAN_GENERATORS} -g=${ARG}) - endforeach() - foreach(ARG ${ARGUMENTS_ENV}) - set(CONAN_ENV_VARS ${CONAN_ENV_VARS} -e=${ARG}) - endforeach() - set(conan_args install ${CONANFILE} ${settings} ${CONAN_ENV_VARS} ${CONAN_GENERATORS} ${CONAN_BUILD_POLICY} ${CONAN_INSTALL_UPDATE} ${CONAN_INSTALL_NO_IMPORTS} ${CONAN_OPTIONS} ${CONAN_INSTALL_FOLDER} ${ARGUMENTS_INSTALL_ARGS}) - - string (REPLACE ";" " " _conan_args "${conan_args}") - message(STATUS "Conan executing: ${CONAN_CMD} ${_conan_args}") - - if(ARGUMENTS_OUTPUT_QUIET) - execute_process(COMMAND ${CONAN_CMD} ${conan_args} - RESULT_VARIABLE return_code - OUTPUT_VARIABLE conan_output - ERROR_VARIABLE conan_output - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - else() - execute_process(COMMAND ${CONAN_CMD} ${conan_args} - RESULT_VARIABLE return_code - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - endif() - - if(NOT "${return_code}" STREQUAL "0") - message(FATAL_ERROR "Conan install failed='${return_code}'") - endif() - -endfunction() - -function(conan_cmake_install) - if(DEFINED CONAN_COMMAND) - set(CONAN_CMD ${CONAN_COMMAND}) - else() - conan_check(REQUIRED) - endif() - - set(installOptions UPDATE NO_IMPORTS OUTPUT_QUIET ERROR_QUIET) - set(installOneValueArgs PATH_OR_REFERENCE REFERENCE REMOTE LOCKFILE LOCKFILE_OUT LOCKFILE_NODE_ID INSTALL_FOLDER OUTPUT_FOLDER) - set(installMultiValueArgs GENERATOR BUILD ENV ENV_HOST ENV_BUILD OPTIONS_HOST OPTIONS OPTIONS_BUILD PROFILE - PROFILE_HOST PROFILE_BUILD SETTINGS SETTINGS_HOST SETTINGS_BUILD) - cmake_parse_arguments(ARGS "${installOptions}" "${installOneValueArgs}" "${installMultiValueArgs}" ${ARGN}) - foreach(arg ${installOptions}) - if(ARGS_${arg}) - set(${arg} ${${arg}} ${ARGS_${arg}}) - endif() - endforeach() - foreach(arg ${installOneValueArgs}) - if(DEFINED ARGS_${arg}) - if("${arg}" STREQUAL "REMOTE") - set(flag "--remote") - elseif("${arg}" STREQUAL "LOCKFILE") - set(flag "--lockfile") - elseif("${arg}" STREQUAL "LOCKFILE_OUT") - set(flag "--lockfile-out") - elseif("${arg}" STREQUAL "LOCKFILE_NODE_ID") - set(flag "--lockfile-node-id") - elseif("${arg}" STREQUAL "INSTALL_FOLDER") - set(flag "--install-folder") - elseif("${arg}" STREQUAL "OUTPUT_FOLDER") - set(flag "--output-folder") - endif() - set(${arg} ${${arg}} ${flag} ${ARGS_${arg}}) - endif() - endforeach() - foreach(arg ${installMultiValueArgs}) - if(DEFINED ARGS_${arg}) - if("${arg}" STREQUAL "GENERATOR") - set(flag "--generator") - elseif("${arg}" STREQUAL "BUILD") - set(flag "--build") - elseif("${arg}" STREQUAL "ENV") - set(flag "--env") - elseif("${arg}" STREQUAL "ENV_HOST") - set(flag "--env:host") - elseif("${arg}" STREQUAL "ENV_BUILD") - set(flag "--env:build") - elseif("${arg}" STREQUAL "OPTIONS") - set(flag "--options") - elseif("${arg}" STREQUAL "OPTIONS_HOST") - set(flag "--options:host") - elseif("${arg}" STREQUAL "OPTIONS_BUILD") - set(flag "--options:build") - elseif("${arg}" STREQUAL "PROFILE") - set(flag "--profile") - elseif("${arg}" STREQUAL "PROFILE_HOST") - set(flag "--profile:host") - elseif("${arg}" STREQUAL "PROFILE_BUILD") - set(flag "--profile:build") - elseif("${arg}" STREQUAL "SETTINGS") - set(flag "--settings") - elseif("${arg}" STREQUAL "SETTINGS_HOST") - set(flag "--settings:host") - elseif("${arg}" STREQUAL "SETTINGS_BUILD") - set(flag "--settings:build") - endif() - list(LENGTH ARGS_${arg} numargs) - foreach(item ${ARGS_${arg}}) - if(${item} STREQUAL "all" AND ${arg} STREQUAL "BUILD") - set(${arg} "--build") - break() - endif() - set(${arg} ${${arg}} ${flag} ${item}) - endforeach() - endif() - endforeach() - if(DEFINED UPDATE) - set(UPDATE --update) - endif() - if(DEFINED NO_IMPORTS) - set(NO_IMPORTS --no-imports) - endif() - set(install_args install ${PATH_OR_REFERENCE} ${REFERENCE} ${UPDATE} ${NO_IMPORTS} ${REMOTE} ${LOCKFILE} ${LOCKFILE_OUT} ${LOCKFILE_NODE_ID} ${INSTALL_FOLDER} ${OUTPUT_FOLDER} - ${GENERATOR} ${BUILD} ${ENV} ${ENV_HOST} ${ENV_BUILD} ${OPTIONS} ${OPTIONS_HOST} ${OPTIONS_BUILD} - ${PROFILE} ${PROFILE_HOST} ${PROFILE_BUILD} ${SETTINGS} ${SETTINGS_HOST} ${SETTINGS_BUILD}) - - string(REPLACE ";" " " _install_args "${install_args}") - message(STATUS "Conan executing: ${CONAN_CMD} ${_install_args}") - - if(ARGS_OUTPUT_QUIET) - set(OUTPUT_OPT OUTPUT_QUIET) - endif() - if(ARGS_ERROR_QUIET) - set(ERROR_OPT ERROR_QUIET) - endif() - - execute_process(COMMAND ${CONAN_CMD} ${install_args} - RESULT_VARIABLE return_code - ${OUTPUT_OPT} - ${ERROR_OPT} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - - if(NOT "${return_code}" STREQUAL "0") - if (ARGS_ERROR_QUIET) - message(WARNING "Conan install failed='${return_code}'") - else() - message(FATAL_ERROR "Conan install failed='${return_code}'") - endif() - endif() - -endfunction() - -function(conan_cmake_lock_create) - if(DEFINED CONAN_COMMAND) - set(CONAN_CMD ${CONAN_COMMAND}) - else() - conan_check(REQUIRED) - endif() - - set(lockCreateOptions UPDATE BASE OUTPUT_QUIET ERROR_QUIET) - set(lockCreateOneValueArgs PATH REFERENCE REMOTE LOCKFILE LOCKFILE_OUT) - set(lockCreateMultiValueArgs BUILD ENV ENV_HOST ENV_BUILD OPTIONS_HOST OPTIONS OPTIONS_BUILD PROFILE - PROFILE_HOST PROFILE_BUILD SETTINGS SETTINGS_HOST SETTINGS_BUILD) - cmake_parse_arguments(ARGS "${lockCreateOptions}" "${lockCreateOneValueArgs}" "${lockCreateMultiValueArgs}" ${ARGN}) - foreach(arg ${lockCreateOptions}) - if(ARGS_${arg}) - set(${arg} ${${arg}} ${ARGS_${arg}}) - endif() - endforeach() - foreach(arg ${lockCreateOneValueArgs}) - if(DEFINED ARGS_${arg}) - if("${arg}" STREQUAL "REMOTE") - set(flag "--remote") - elseif("${arg}" STREQUAL "LOCKFILE") - set(flag "--lockfile") - elseif("${arg}" STREQUAL "LOCKFILE_OUT") - set(flag "--lockfile-out") - endif() - set(${arg} ${${arg}} ${flag} ${ARGS_${arg}}) - endif() - endforeach() - foreach(arg ${lockCreateMultiValueArgs}) - if(DEFINED ARGS_${arg}) - if("${arg}" STREQUAL "BUILD") - set(flag "--build") - elseif("${arg}" STREQUAL "ENV") - set(flag "--env") - elseif("${arg}" STREQUAL "ENV_HOST") - set(flag "--env:host") - elseif("${arg}" STREQUAL "ENV_BUILD") - set(flag "--env:build") - elseif("${arg}" STREQUAL "OPTIONS") - set(flag "--options") - elseif("${arg}" STREQUAL "OPTIONS_HOST") - set(flag "--options:host") - elseif("${arg}" STREQUAL "OPTIONS_BUILD") - set(flag "--options:build") - elseif("${arg}" STREQUAL "PROFILE") - set(flag "--profile") - elseif("${arg}" STREQUAL "PROFILE_HOST") - set(flag "--profile:host") - elseif("${arg}" STREQUAL "PROFILE_BUILD") - set(flag "--profile:build") - elseif("${arg}" STREQUAL "SETTINGS") - set(flag "--settings") - elseif("${arg}" STREQUAL "SETTINGS_HOST") - set(flag "--settings:host") - elseif("${arg}" STREQUAL "SETTINGS_BUILD") - set(flag "--settings:build") - endif() - list(LENGTH ARGS_${arg} numargs) - foreach(item ${ARGS_${arg}}) - if(${item} STREQUAL "all" AND ${arg} STREQUAL "BUILD") - set(${arg} "--build") - break() - endif() - set(${arg} ${${arg}} ${flag} ${item}) - endforeach() - endif() - endforeach() - if(DEFINED UPDATE) - set(UPDATE --update) - endif() - if(DEFINED BASE) - set(BASE --base) - endif() - set(lock_create_Args lock create ${PATH} ${REFERENCE} ${UPDATE} ${BASE} ${REMOTE} ${LOCKFILE} ${LOCKFILE_OUT} ${LOCKFILE_NODE_ID} ${INSTALL_FOLDER} - ${GENERATOR} ${BUILD} ${ENV} ${ENV_HOST} ${ENV_BUILD} ${OPTIONS} ${OPTIONS_HOST} ${OPTIONS_BUILD} - ${PROFILE} ${PROFILE_HOST} ${PROFILE_BUILD} ${SETTINGS} ${SETTINGS_HOST} ${SETTINGS_BUILD}) - - string(REPLACE ";" " " _lock_create_Args "${lock_create_Args}") - message(STATUS "Conan executing: ${CONAN_CMD} ${_lock_create_Args}") - - if(ARGS_OUTPUT_QUIET) - set(OUTPUT_OPT OUTPUT_QUIET) - endif() - if(ARGS_ERROR_QUIET) - set(ERROR_OPT ERROR_QUIET) - endif() - - execute_process(COMMAND ${CONAN_CMD} ${lock_create_Args} - RESULT_VARIABLE return_code - ${OUTPUT_OPT} - ${ERROR_OPT} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - - if(NOT "${return_code}" STREQUAL "0") - if (ARGS_ERROR_QUIET) - message(WARNING "Conan lock create failed='${return_code}'") - else() - message(FATAL_ERROR "Conan lock create failed='${return_code}'") - endif() - endif() -endfunction() - -function(conan_cmake_setup_conanfile) - conan_parse_arguments(${ARGV}) - if(ARGUMENTS_CONANFILE) - get_filename_component(_CONANFILE_NAME ${ARGUMENTS_CONANFILE} NAME) - # configure_file will make sure cmake re-runs when conanfile is updated - configure_file(${ARGUMENTS_CONANFILE} ${CMAKE_CURRENT_BINARY_DIR}/${_CONANFILE_NAME}.junk COPYONLY) - file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/${_CONANFILE_NAME}.junk) - else() - conan_cmake_generate_conanfile(ON ${ARGV}) - endif() -endfunction() - -function(conan_cmake_configure) - conan_cmake_generate_conanfile(OFF ${ARGV}) -endfunction() - -# Generate, writing in disk a conanfile.txt with the requires, options, and imports -# specified as arguments -# This will be considered as temporary file, generated in CMAKE_CURRENT_BINARY_DIR) -function(conan_cmake_generate_conanfile DEFAULT_GENERATOR) - - conan_parse_arguments(${ARGV}) - - set(_FN "${CMAKE_CURRENT_BINARY_DIR}/conanfile.txt") - file(WRITE ${_FN} "") - - if(DEFINED ARGUMENTS_REQUIRES) - file(APPEND ${_FN} "[requires]\n") - foreach(REQUIRE ${ARGUMENTS_REQUIRES}) - file(APPEND ${_FN} ${REQUIRE} "\n") - endforeach() - endif() - - if (DEFAULT_GENERATOR OR DEFINED ARGUMENTS_GENERATORS) - file(APPEND ${_FN} "[generators]\n") - if (DEFAULT_GENERATOR) - file(APPEND ${_FN} "cmake\n") - endif() - if (DEFINED ARGUMENTS_GENERATORS) - foreach(GENERATOR ${ARGUMENTS_GENERATORS}) - file(APPEND ${_FN} ${GENERATOR} "\n") - endforeach() - endif() - endif() - - if(DEFINED ARGUMENTS_BUILD_REQUIRES) - file(APPEND ${_FN} "[build_requires]\n") - foreach(BUILD_REQUIRE ${ARGUMENTS_BUILD_REQUIRES}) - file(APPEND ${_FN} ${BUILD_REQUIRE} "\n") - endforeach() - endif() - - if(DEFINED ARGUMENTS_IMPORTS) - file(APPEND ${_FN} "[imports]\n") - foreach(IMPORTS ${ARGUMENTS_IMPORTS}) - file(APPEND ${_FN} ${IMPORTS} "\n") - endforeach() - endif() - - if(DEFINED ARGUMENTS_OPTIONS) - file(APPEND ${_FN} "[options]\n") - foreach(OPTION ${ARGUMENTS_OPTIONS}) - file(APPEND ${_FN} ${OPTION} "\n") - endforeach() - endif() - -endfunction() - - -macro(conan_load_buildinfo) - if(CONAN_CMAKE_MULTI) - set(_CONANBUILDINFO conanbuildinfo_multi.cmake) - else() - set(_CONANBUILDINFO conanbuildinfo.cmake) - endif() - if(ARGUMENTS_INSTALL_FOLDER) - set(_CONANBUILDINFOFOLDER ${ARGUMENTS_INSTALL_FOLDER}) - else() - set(_CONANBUILDINFOFOLDER ${CMAKE_CURRENT_BINARY_DIR}) - endif() - # Checks for the existence of conanbuildinfo.cmake, and loads it - # important that it is macro, so variables defined at parent scope - if(EXISTS "${_CONANBUILDINFOFOLDER}/${_CONANBUILDINFO}") - message(STATUS "Conan: Loading ${_CONANBUILDINFO}") - include(${_CONANBUILDINFOFOLDER}/${_CONANBUILDINFO}) - else() - message(FATAL_ERROR "${_CONANBUILDINFO} doesn't exist in ${CMAKE_CURRENT_BINARY_DIR}") - endif() -endmacro() - - -macro(conan_cmake_run) - conan_parse_arguments(${ARGV}) - - if(ARGUMENTS_CONFIGURATION_TYPES AND NOT CMAKE_CONFIGURATION_TYPES) - message(WARNING "CONFIGURATION_TYPES should only be specified for multi-configuration generators") - elseif(ARGUMENTS_CONFIGURATION_TYPES AND ARGUMENTS_BUILD_TYPE) - message(WARNING "CONFIGURATION_TYPES and BUILD_TYPE arguments should not be defined at the same time.") - endif() - - if(CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE AND NOT CONAN_EXPORTED - AND NOT ARGUMENTS_BUILD_TYPE) - set(CONAN_CMAKE_MULTI ON) - if (NOT ARGUMENTS_CONFIGURATION_TYPES) - set(ARGUMENTS_CONFIGURATION_TYPES "Release;Debug") - endif() - message(STATUS "Conan: Using cmake-multi generator") - else() - set(CONAN_CMAKE_MULTI OFF) - endif() - - if(NOT CONAN_EXPORTED) - conan_cmake_setup_conanfile(${ARGV}) - if(CONAN_CMAKE_MULTI) - foreach(CMAKE_BUILD_TYPE ${ARGUMENTS_CONFIGURATION_TYPES}) - set(ENV{CONAN_IMPORT_PATH} ${CMAKE_BUILD_TYPE}) - conan_cmake_settings(settings ${ARGV}) - old_conan_cmake_install(SETTINGS ${settings} ${ARGV}) - endforeach() - set(CMAKE_BUILD_TYPE) - else() - conan_cmake_settings(settings ${ARGV}) - old_conan_cmake_install(SETTINGS ${settings} ${ARGV}) - endif() - endif() - - if (NOT ARGUMENTS_NO_LOAD) - conan_load_buildinfo() - endif() - - if(ARGUMENTS_BASIC_SETUP) - foreach(_option CMAKE_TARGETS KEEP_RPATHS NO_OUTPUT_DIRS SKIP_STD) - if(ARGUMENTS_${_option}) - if(${_option} STREQUAL "CMAKE_TARGETS") - list(APPEND _setup_options "TARGETS") - else() - list(APPEND _setup_options ${_option}) - endif() - endif() - endforeach() - conan_basic_setup(${_setup_options}) - endif() -endmacro() - -macro(conan_check) - # Checks conan availability in PATH - # Arguments REQUIRED, DETECT_QUIET and VERSION are optional - # Example usage: - # conan_check(VERSION 1.0.0 REQUIRED) - set(options REQUIRED DETECT_QUIET) - set(oneValueArgs VERSION) - cmake_parse_arguments(CONAN "${options}" "${oneValueArgs}" "" ${ARGN}) - if(NOT CONAN_DETECT_QUIET) - message(STATUS "Conan: checking conan executable") - endif() - - find_program(CONAN_CMD conan) - if(NOT CONAN_CMD AND CONAN_REQUIRED) - message(FATAL_ERROR "Conan executable not found! Please install conan.") - endif() - if(NOT CONAN_DETECT_QUIET) - message(STATUS "Conan: Found program ${CONAN_CMD}") - endif() - execute_process(COMMAND ${CONAN_CMD} --version - RESULT_VARIABLE return_code - OUTPUT_VARIABLE CONAN_VERSION_OUTPUT - ERROR_VARIABLE CONAN_VERSION_OUTPUT) - - if(NOT "${return_code}" STREQUAL "0") - message(FATAL_ERROR "Conan --version failed='${return_code}'") - endif() - - if(NOT CONAN_DETECT_QUIET) - string(STRIP "${CONAN_VERSION_OUTPUT}" _CONAN_VERSION_OUTPUT) - message(STATUS "Conan: Version found ${_CONAN_VERSION_OUTPUT}") - endif() - - if(DEFINED CONAN_VERSION) - string(REGEX MATCH ".*Conan version ([0-9]+\\.[0-9]+\\.[0-9]+)" FOO - "${CONAN_VERSION_OUTPUT}") - if(${CMAKE_MATCH_1} VERSION_LESS ${CONAN_VERSION}) - message(FATAL_ERROR "Conan outdated. Installed: ${CMAKE_MATCH_1}, \ - required: ${CONAN_VERSION}. Consider updating via 'pip \ - install conan==${CONAN_VERSION}'.") - endif() - endif() -endmacro() - -function(conan_add_remote) - # Adds a remote - # Arguments URL and NAME are required, INDEX, COMMAND and VERIFY_SSL are optional - # Example usage: - # conan_add_remote(NAME bincrafters INDEX 1 - # URL https://api.bintray.com/conan/bincrafters/public-conan - # VERIFY_SSL True) - set(oneValueArgs URL NAME INDEX COMMAND VERIFY_SSL) - cmake_parse_arguments(CONAN "" "${oneValueArgs}" "" ${ARGN}) - - if(DEFINED CONAN_INDEX) - set(CONAN_INDEX_ARG "-i ${CONAN_INDEX}") - endif() - if(DEFINED CONAN_COMMAND) - set(CONAN_CMD ${CONAN_COMMAND}) - else() - conan_check(REQUIRED DETECT_QUIET) - endif() - set(CONAN_VERIFY_SSL_ARG "True") - if(DEFINED CONAN_VERIFY_SSL) - set(CONAN_VERIFY_SSL_ARG ${CONAN_VERIFY_SSL}) - endif() - message(STATUS "Conan: Adding ${CONAN_NAME} remote repository (${CONAN_URL}) verify ssl (${CONAN_VERIFY_SSL_ARG})") - execute_process(COMMAND ${CONAN_CMD} remote add ${CONAN_NAME} ${CONAN_INDEX_ARG} -f ${CONAN_URL} ${CONAN_VERIFY_SSL_ARG} - RESULT_VARIABLE return_code) - if(NOT "${return_code}" STREQUAL "0") - message(FATAL_ERROR "Conan remote failed='${return_code}'") - endif() -endfunction() - -macro(conan_config_install) - # install a full configuration from a local or remote zip file - # Argument ITEM is required, arguments TYPE, SOURCE, TARGET and VERIFY_SSL are optional - # Example usage: - # conan_config_install(ITEM https://github.com/conan-io/cmake-conan.git - # TYPE git SOURCE source-folder TARGET target-folder VERIFY_SSL false) - set(oneValueArgs ITEM TYPE SOURCE TARGET VERIFY_SSL) - set(multiValueArgs ARGS) - cmake_parse_arguments(CONAN "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - if(DEFINED CONAN_COMMAND) - set(CONAN_CMD ${CONAN_COMMAND}) - else() - conan_check(REQUIRED) - endif() - - if(DEFINED CONAN_VERIFY_SSL) - set(CONAN_VERIFY_SSL_ARG "--verify-ssl=${CONAN_VERIFY_SSL}") - endif() - - if(DEFINED CONAN_TYPE) - set(CONAN_TYPE_ARG "--type=${CONAN_TYPE}") - endif() - - if(DEFINED CONAN_ARGS) - set(CONAN_ARGS_ARGS "--args=\"${CONAN_ARGS}\"") - endif() - - if(DEFINED CONAN_SOURCE) - set(CONAN_SOURCE_ARGS "--source-folder=${CONAN_SOURCE}") - endif() - - if(DEFINED CONAN_TARGET) - set(CONAN_TARGET_ARGS "--target-folder=${CONAN_TARGET}") - endif() - - set (CONAN_CONFIG_INSTALL_ARGS ${CONAN_VERIFY_SSL_ARG} - ${CONAN_TYPE_ARG} - ${CONAN_ARGS_ARGS} - ${CONAN_SOURCE_ARGS} - ${CONAN_TARGET_ARGS}) - - message(STATUS "Conan: Installing config from ${CONAN_ITEM}") - execute_process(COMMAND ${CONAN_CMD} config install ${CONAN_ITEM} ${CONAN_CONFIG_INSTALL_ARGS} - RESULT_VARIABLE return_code) - if(NOT "${return_code}" STREQUAL "0") - message(FATAL_ERROR "Conan config failed='${return_code}'") - endif() -endmacro() diff --git a/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/conan_provider.cmake b/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/conan_provider.cmake deleted file mode 100644 index e5fa9cec1..000000000 --- a/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/conan_provider.cmake +++ /dev/null @@ -1,655 +0,0 @@ -# https://github.com/conan-io/cmake-conan/blob/develop2/conan_provider.cmake -# commit: f6464d1e13ef7a47c569f5061f9607ea63339d39 -# -# The MIT License (MIT) -# -# Copyright (c) 2019 JFrog -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -set(CONAN_MINIMUM_VERSION 2.0.5) - - -function(detect_os OS OS_API_LEVEL OS_SDK OS_SUBSYSTEM OS_VERSION) - # it could be cross compilation - message(STATUS "CMake-Conan: cmake_system_name=${CMAKE_SYSTEM_NAME}") - if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") - if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(${OS} Macos PARENT_SCOPE) - elseif(CMAKE_SYSTEM_NAME STREQUAL "QNX") - set(${OS} Neutrino PARENT_SCOPE) - elseif(CMAKE_SYSTEM_NAME STREQUAL "CYGWIN") - set(${OS} Windows PARENT_SCOPE) - set(${OS_SUBSYSTEM} cygwin PARENT_SCOPE) - elseif(CMAKE_SYSTEM_NAME MATCHES "^MSYS") - set(${OS} Windows PARENT_SCOPE) - set(${OS_SUBSYSTEM} msys2 PARENT_SCOPE) - else() - set(${OS} ${CMAKE_SYSTEM_NAME} PARENT_SCOPE) - endif() - if(CMAKE_SYSTEM_NAME STREQUAL "Android") - if(DEFINED ANDROID_PLATFORM) - string(REGEX MATCH "[0-9]+" _OS_API_LEVEL ${ANDROID_PLATFORM}) - elseif(DEFINED CMAKE_SYSTEM_VERSION) - set(_OS_API_LEVEL ${CMAKE_SYSTEM_VERSION}) - endif() - message(STATUS "CMake-Conan: android api level=${_OS_API_LEVEL}") - set(${OS_API_LEVEL} ${_OS_API_LEVEL} PARENT_SCOPE) - endif() - if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS") - # CMAKE_OSX_SYSROOT contains the full path to the SDK for MakeFile/Ninja - # generators, but just has the original input string for Xcode. - if(NOT IS_DIRECTORY ${CMAKE_OSX_SYSROOT}) - set(_OS_SDK ${CMAKE_OSX_SYSROOT}) - else() - if(CMAKE_OSX_SYSROOT MATCHES Simulator) - set(apple_platform_suffix simulator) - else() - set(apple_platform_suffix os) - endif() - if(CMAKE_OSX_SYSROOT MATCHES AppleTV) - set(_OS_SDK "appletv${apple_platform_suffix}") - elseif(CMAKE_OSX_SYSROOT MATCHES iPhone) - set(_OS_SDK "iphone${apple_platform_suffix}") - elseif(CMAKE_OSX_SYSROOT MATCHES Watch) - set(_OS_SDK "watch${apple_platform_suffix}") - endif() - endif() - if(DEFINED _OS_SDK) - message(STATUS "CMake-Conan: cmake_osx_sysroot=${CMAKE_OSX_SYSROOT}") - set(${OS_SDK} ${_OS_SDK} PARENT_SCOPE) - endif() - if(DEFINED CMAKE_OSX_DEPLOYMENT_TARGET) - message(STATUS "CMake-Conan: cmake_osx_deployment_target=${CMAKE_OSX_DEPLOYMENT_TARGET}") - set(${OS_VERSION} ${CMAKE_OSX_DEPLOYMENT_TARGET} PARENT_SCOPE) - endif() - endif() - endif() -endfunction() - - -function(detect_arch ARCH) - # CMAKE_OSX_ARCHITECTURES can contain multiple architectures, but Conan only supports one. - # Therefore this code only finds one. If the recipes support multiple architectures, the - # build will work. Otherwise, there will be a linker error for the missing architecture(s). - if(DEFINED CMAKE_OSX_ARCHITECTURES) - string(REPLACE " " ";" apple_arch_list "${CMAKE_OSX_ARCHITECTURES}") - list(LENGTH apple_arch_list apple_arch_count) - if(apple_arch_count GREATER 1) - message(WARNING "CMake-Conan: Multiple architectures detected, this will only work if Conan recipe(s) produce fat binaries.") - endif() - endif() - if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS" AND NOT CMAKE_OSX_ARCHITECTURES STREQUAL "") - set(host_arch ${CMAKE_OSX_ARCHITECTURES}) - elseif(MSVC) - set(host_arch ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}) - else() - set(host_arch ${CMAKE_SYSTEM_PROCESSOR}) - endif() - if(host_arch MATCHES "aarch64|arm64|ARM64") - set(_ARCH armv8) - elseif(host_arch MATCHES "armv7|armv7-a|armv7l|ARMV7") - set(_ARCH armv7) - elseif(host_arch MATCHES armv7s) - set(_ARCH armv7s) - elseif(host_arch MATCHES "i686|i386|X86") - set(_ARCH x86) - elseif(host_arch MATCHES "AMD64|amd64|x86_64|x64") - set(_ARCH x86_64) - endif() - message(STATUS "CMake-Conan: cmake_system_processor=${_ARCH}") - set(${ARCH} ${_ARCH} PARENT_SCOPE) -endfunction() - - -function(detect_cxx_standard CXX_STANDARD) - set(${CXX_STANDARD} ${CMAKE_CXX_STANDARD} PARENT_SCOPE) - if(CMAKE_CXX_EXTENSIONS) - set(${CXX_STANDARD} "gnu${CMAKE_CXX_STANDARD}" PARENT_SCOPE) - endif() -endfunction() - - -macro(detect_gnu_libstdcxx) - # _CONAN_IS_GNU_LIBSTDCXX true if GNU libstdc++ - check_cxx_source_compiles(" - #include - #if !defined(__GLIBCXX__) && !defined(__GLIBCPP__) - static_assert(false); - #endif - int main(){}" _CONAN_IS_GNU_LIBSTDCXX) - - # _CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI true if C++11 ABI - check_cxx_source_compiles(" - #include - static_assert(sizeof(std::string) != sizeof(void*), \"using libstdc++\"); - int main () {}" _CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) - - set(_CONAN_GNU_LIBSTDCXX_SUFFIX "") - if(_CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) - set(_CONAN_GNU_LIBSTDCXX_SUFFIX "11") - endif() - unset (_CONAN_GNU_LIBSTDCXX_IS_CXX11_ABI) -endmacro() - - -macro(detect_libcxx) - # _CONAN_IS_LIBCXX true if LLVM libc++ - check_cxx_source_compiles(" - #include - #if !defined(_LIBCPP_VERSION) - static_assert(false); - #endif - int main(){}" _CONAN_IS_LIBCXX) -endmacro() - - -function(detect_lib_cxx LIB_CXX) - if(CMAKE_SYSTEM_NAME STREQUAL "Android") - message(STATUS "CMake-Conan: android_stl=${CMAKE_ANDROID_STL_TYPE}") - set(${LIB_CXX} ${CMAKE_ANDROID_STL_TYPE} PARENT_SCOPE) - return() - endif() - - include(CheckCXXSourceCompiles) - - if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") - detect_gnu_libstdcxx() - set(${LIB_CXX} "libstdc++${_CONAN_GNU_LIBSTDCXX_SUFFIX}" PARENT_SCOPE) - elseif(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") - set(${LIB_CXX} "libc++" PARENT_SCOPE) - elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT CMAKE_SYSTEM_NAME MATCHES "Windows") - # Check for libc++ - detect_libcxx() - if(_CONAN_IS_LIBCXX) - set(${LIB_CXX} "libc++" PARENT_SCOPE) - return() - endif() - - # Check for libstdc++ - detect_gnu_libstdcxx() - if(_CONAN_IS_GNU_LIBSTDCXX) - set(${LIB_CXX} "libstdc++${_CONAN_GNU_LIBSTDCXX_SUFFIX}" PARENT_SCOPE) - return() - endif() - - # TODO: it would be an error if we reach this point - elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") - # Do nothing - compiler.runtime and compiler.runtime_type - # should be handled separately: https://github.com/conan-io/cmake-conan/pull/516 - return() - else() - # TODO: unable to determine, ask user to provide a full profile file instead - endif() -endfunction() - - -function(detect_compiler COMPILER COMPILER_VERSION COMPILER_RUNTIME COMPILER_RUNTIME_TYPE) - if(DEFINED CMAKE_CXX_COMPILER_ID) - set(_COMPILER ${CMAKE_CXX_COMPILER_ID}) - set(_COMPILER_VERSION ${CMAKE_CXX_COMPILER_VERSION}) - else() - if(NOT DEFINED CMAKE_C_COMPILER_ID) - message(FATAL_ERROR "C or C++ compiler not defined") - endif() - set(_COMPILER ${CMAKE_C_COMPILER_ID}) - set(_COMPILER_VERSION ${CMAKE_C_COMPILER_VERSION}) - endif() - - message(STATUS "CMake-Conan: CMake compiler=${_COMPILER}") - message(STATUS "CMake-Conan: CMake compiler version=${_COMPILER_VERSION}") - - if(_COMPILER MATCHES MSVC) - set(_COMPILER "msvc") - string(SUBSTRING ${MSVC_VERSION} 0 3 _COMPILER_VERSION) - # Configure compiler.runtime and compiler.runtime_type settings for MSVC - if(CMAKE_MSVC_RUNTIME_LIBRARY) - set(_msvc_runtime_library ${CMAKE_MSVC_RUNTIME_LIBRARY}) - else() - set(_msvc_runtime_library MultiThreaded$<$:Debug>DLL) # default value documented by CMake - endif() - - set(_KNOWN_MSVC_RUNTIME_VALUES "") - list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded MultiThreadedDLL) - list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreadedDebug MultiThreadedDebugDLL) - list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded$<$:Debug> MultiThreaded$<$:Debug>DLL) - - # only accept the 6 possible values, otherwise we don't don't know to map this - if(NOT _msvc_runtime_library IN_LIST _KNOWN_MSVC_RUNTIME_VALUES) - message(FATAL_ERROR "CMake-Conan: unable to map MSVC runtime: ${_msvc_runtime_library} to Conan settings") - endif() - - # Runtime is "dynamic" in all cases if it ends in DLL - if(_msvc_runtime_library MATCHES ".*DLL$") - set(_COMPILER_RUNTIME "dynamic") - else() - set(_COMPILER_RUNTIME "static") - endif() - message(STATUS "CMake-Conan: CMake compiler.runtime=${_COMPILER_RUNTIME}") - - # Only define compiler.runtime_type when explicitly requested - # If a generator expression is used, let Conan handle it conditional on build_type - if(NOT _msvc_runtime_library MATCHES ":Debug>") - if(_msvc_runtime_library MATCHES "Debug") - set(_COMPILER_RUNTIME_TYPE "Debug") - else() - set(_COMPILER_RUNTIME_TYPE "Release") - endif() - message(STATUS "CMake-Conan: CMake compiler.runtime_type=${_COMPILER_RUNTIME_TYPE}") - endif() - - unset(_KNOWN_MSVC_RUNTIME_VALUES) - - elseif(_COMPILER MATCHES AppleClang) - set(_COMPILER "apple-clang") - string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) - list(GET VERSION_LIST 0 _COMPILER_VERSION) - elseif(_COMPILER MATCHES Clang) - set(_COMPILER "clang") - string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) - list(GET VERSION_LIST 0 _COMPILER_VERSION) - elseif(_COMPILER MATCHES GNU) - set(_COMPILER "gcc") - string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION}) - list(GET VERSION_LIST 0 _COMPILER_VERSION) - endif() - - message(STATUS "CMake-Conan: [settings] compiler=${_COMPILER}") - message(STATUS "CMake-Conan: [settings] compiler.version=${_COMPILER_VERSION}") - if (_COMPILER_RUNTIME) - message(STATUS "CMake-Conan: [settings] compiler.runtime=${_COMPILER_RUNTIME}") - endif() - if (_COMPILER_RUNTIME_TYPE) - message(STATUS "CMake-Conan: [settings] compiler.runtime_type=${_COMPILER_RUNTIME_TYPE}") - endif() - - set(${COMPILER} ${_COMPILER} PARENT_SCOPE) - set(${COMPILER_VERSION} ${_COMPILER_VERSION} PARENT_SCOPE) - set(${COMPILER_RUNTIME} ${_COMPILER_RUNTIME} PARENT_SCOPE) - set(${COMPILER_RUNTIME_TYPE} ${_COMPILER_RUNTIME_TYPE} PARENT_SCOPE) -endfunction() - - -function(detect_build_type BUILD_TYPE) - get_property(_MULTICONFIG_GENERATOR GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) - if(NOT _MULTICONFIG_GENERATOR) - # Only set when we know we are in a single-configuration generator - # Note: we may want to fail early if `CMAKE_BUILD_TYPE` is not defined - set(${BUILD_TYPE} ${CMAKE_BUILD_TYPE} PARENT_SCOPE) - endif() -endfunction() - -macro(set_conan_compiler_if_appleclang lang command output_variable) - if(CMAKE_${lang}_COMPILER_ID STREQUAL "AppleClang") - execute_process(COMMAND xcrun --find ${command} - OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE) - cmake_path(GET _xcrun_out PARENT_PATH _xcrun_toolchain_path) - cmake_path(GET CMAKE_${lang}_COMPILER PARENT_PATH _compiler_parent_path) - if ("${_xcrun_toolchain_path}" STREQUAL "${_compiler_parent_path}") - set(${output_variable} "") - endif() - unset(_xcrun_out) - unset(_xcrun_toolchain_path) - unset(_compiler_parent_path) - endif() -endmacro() - - -macro(append_compiler_executables_configuration) - set(_conan_c_compiler "") - set(_conan_cpp_compiler "") - if(CMAKE_C_COMPILER) - set(_conan_c_compiler "\"c\":\"${CMAKE_C_COMPILER}\",") - set_conan_compiler_if_appleclang(C cc _conan_c_compiler) - else() - message(WARNING "CMake-Conan: The C compiler is not defined. " - "Please define CMAKE_C_COMPILER or enable the C language.") - endif() - if(CMAKE_CXX_COMPILER) - set(_conan_cpp_compiler "\"cpp\":\"${CMAKE_CXX_COMPILER}\"") - set_conan_compiler_if_appleclang(CXX c++ _conan_cpp_compiler) - else() - message(WARNING "CMake-Conan: The C++ compiler is not defined. " - "Please define CMAKE_CXX_COMPILER or enable the C++ language.") - endif() - - if(NOT "x${_conan_c_compiler}${_conan_cpp_compiler}" STREQUAL "x") - string(APPEND PROFILE "tools.build:compiler_executables={${_conan_c_compiler}${_conan_cpp_compiler}}\n") - endif() - unset(_conan_c_compiler) - unset(_conan_cpp_compiler) -endmacro() - - -function(detect_host_profile output_file) - detect_os(MYOS MYOS_API_LEVEL MYOS_SDK MYOS_SUBSYSTEM MYOS_VERSION) - detect_arch(MYARCH) - detect_compiler(MYCOMPILER MYCOMPILER_VERSION MYCOMPILER_RUNTIME MYCOMPILER_RUNTIME_TYPE) - detect_cxx_standard(MYCXX_STANDARD) - detect_lib_cxx(MYLIB_CXX) - detect_build_type(MYBUILD_TYPE) - - set(PROFILE "") - string(APPEND PROFILE "[settings]\n") - if(MYARCH) - string(APPEND PROFILE arch=${MYARCH} "\n") - endif() - if(MYOS) - string(APPEND PROFILE os=${MYOS} "\n") - endif() - if(MYOS_API_LEVEL) - string(APPEND PROFILE os.api_level=${MYOS_API_LEVEL} "\n") - endif() - if(MYOS_VERSION) - string(APPEND PROFILE os.version=${MYOS_VERSION} "\n") - endif() - if(MYOS_SDK) - string(APPEND PROFILE os.sdk=${MYOS_SDK} "\n") - endif() - if(MYOS_SUBSYSTEM) - string(APPEND PROFILE os.subsystem=${MYOS_SUBSYSTEM} "\n") - endif() - if(MYCOMPILER) - string(APPEND PROFILE compiler=${MYCOMPILER} "\n") - endif() - if(MYCOMPILER_VERSION) - string(APPEND PROFILE compiler.version=${MYCOMPILER_VERSION} "\n") - endif() - if(MYCOMPILER_RUNTIME) - string(APPEND PROFILE compiler.runtime=${MYCOMPILER_RUNTIME} "\n") - endif() - if(MYCOMPILER_RUNTIME_TYPE) - string(APPEND PROFILE compiler.runtime_type=${MYCOMPILER_RUNTIME_TYPE} "\n") - endif() - if(MYCXX_STANDARD) - string(APPEND PROFILE compiler.cppstd=${MYCXX_STANDARD} "\n") - endif() - if(MYLIB_CXX) - string(APPEND PROFILE compiler.libcxx=${MYLIB_CXX} "\n") - endif() - if(MYBUILD_TYPE) - string(APPEND PROFILE "build_type=${MYBUILD_TYPE}\n") - endif() - - if(NOT DEFINED output_file) - set(_FN "${CMAKE_BINARY_DIR}/profile") - else() - set(_FN ${output_file}) - endif() - - string(APPEND PROFILE "[conf]\n") - string(APPEND PROFILE "tools.cmake.cmaketoolchain:generator=${CMAKE_GENERATOR}\n") - - # propagate compilers via profile - append_compiler_executables_configuration() - - if(MYOS STREQUAL "Android") - string(APPEND PROFILE "tools.android:ndk_path=${CMAKE_ANDROID_NDK}\n") - endif() - - message(STATUS "CMake-Conan: Creating profile ${_FN}") - file(WRITE ${_FN} ${PROFILE}) - message(STATUS "CMake-Conan: Profile: \n${PROFILE}") -endfunction() - - -function(conan_profile_detect_default) - message(STATUS "CMake-Conan: Checking if a default profile exists") - execute_process(COMMAND ${CONAN_COMMAND} profile path default - RESULT_VARIABLE return_code - OUTPUT_VARIABLE conan_stdout - ERROR_VARIABLE conan_stderr - ECHO_ERROR_VARIABLE # show the text output regardless - ECHO_OUTPUT_VARIABLE - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - if(NOT ${return_code} EQUAL "0") - message(STATUS "CMake-Conan: The default profile doesn't exist, detecting it.") - execute_process(COMMAND ${CONAN_COMMAND} profile detect - RESULT_VARIABLE return_code - OUTPUT_VARIABLE conan_stdout - ERROR_VARIABLE conan_stderr - ECHO_ERROR_VARIABLE # show the text output regardless - ECHO_OUTPUT_VARIABLE - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - endif() -endfunction() - - -function(conan_install) - cmake_parse_arguments(ARGS CONAN_ARGS ${ARGN}) - set(CONAN_OUTPUT_FOLDER ${CMAKE_BINARY_DIR}/conan) - # Invoke "conan install" with the provided arguments - set(CONAN_ARGS ${CONAN_ARGS} -of=${CONAN_OUTPUT_FOLDER}) - message(STATUS "CMake-Conan: conan install ${CMAKE_SOURCE_DIR} ${CONAN_ARGS} ${ARGN}") - - - # In case there was not a valid cmake executable in the PATH, we inject the - # same we used to invoke the provider to the PATH - if(DEFINED PATH_TO_CMAKE_BIN) - set(_OLD_PATH $ENV{PATH}) - set(ENV{PATH} "$ENV{PATH}:${PATH_TO_CMAKE_BIN}") - endif() - - execute_process(COMMAND ${CONAN_COMMAND} install ${CMAKE_SOURCE_DIR} ${CONAN_ARGS} ${ARGN} --format=json - RESULT_VARIABLE return_code - OUTPUT_VARIABLE conan_stdout - ERROR_VARIABLE conan_stderr - ECHO_ERROR_VARIABLE # show the text output regardless - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - - if(DEFINED PATH_TO_CMAKE_BIN) - set(ENV{PATH} "${_OLD_PATH}") - endif() - - if(NOT "${return_code}" STREQUAL "0") - message(FATAL_ERROR "Conan install failed='${return_code}'") - else() - # the files are generated in a folder that depends on the layout used, if - # one is specified, but we don't know a priori where this is. - # TODO: this can be made more robust if Conan can provide this in the json output - string(JSON CONAN_GENERATORS_FOLDER GET ${conan_stdout} graph nodes 0 generators_folder) - cmake_path(CONVERT ${CONAN_GENERATORS_FOLDER} TO_CMAKE_PATH_LIST CONAN_GENERATORS_FOLDER) - # message("conan stdout: ${conan_stdout}") - message(STATUS "CMake-Conan: CONAN_GENERATORS_FOLDER=${CONAN_GENERATORS_FOLDER}") - set_property(GLOBAL PROPERTY CONAN_GENERATORS_FOLDER "${CONAN_GENERATORS_FOLDER}") - # reconfigure on conanfile changes - string(JSON CONANFILE GET ${conan_stdout} graph nodes 0 label) - message(STATUS "CMake-Conan: CONANFILE=${CMAKE_SOURCE_DIR}/${CONANFILE}") - set_property(DIRECTORY ${CMAKE_SOURCE_DIR} APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/${CONANFILE}") - # success - set_property(GLOBAL PROPERTY CONAN_INSTALL_SUCCESS TRUE) - endif() -endfunction() - - -function(conan_get_version conan_command conan_current_version) - execute_process( - COMMAND ${conan_command} --version - OUTPUT_VARIABLE conan_output - RESULT_VARIABLE conan_result - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - if(conan_result) - message(FATAL_ERROR "CMake-Conan: Error when trying to run Conan") - endif() - - string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" conan_version ${conan_output}) - set(${conan_current_version} ${conan_version} PARENT_SCOPE) -endfunction() - - -function(conan_version_check) - set(options ) - set(oneValueArgs MINIMUM CURRENT) - set(multiValueArgs ) - cmake_parse_arguments(CONAN_VERSION_CHECK - "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - if(NOT CONAN_VERSION_CHECK_MINIMUM) - message(FATAL_ERROR "CMake-Conan: Required parameter MINIMUM not set!") - endif() - if(NOT CONAN_VERSION_CHECK_CURRENT) - message(FATAL_ERROR "CMake-Conan: Required parameter CURRENT not set!") - endif() - - if(CONAN_VERSION_CHECK_CURRENT VERSION_LESS CONAN_VERSION_CHECK_MINIMUM) - message(FATAL_ERROR "CMake-Conan: Conan version must be ${CONAN_VERSION_CHECK_MINIMUM} or later") - endif() -endfunction() - - -macro(construct_profile_argument argument_variable profile_list) - set(${argument_variable} "") - if("${profile_list}" STREQUAL "CONAN_HOST_PROFILE") - set(_arg_flag "--profile:host=") - elseif("${profile_list}" STREQUAL "CONAN_BUILD_PROFILE") - set(_arg_flag "--profile:build=") - endif() - - set(_profile_list "${${profile_list}}") - list(TRANSFORM _profile_list REPLACE "auto-cmake" "${CMAKE_BINARY_DIR}/conan_host_profile") - list(TRANSFORM _profile_list PREPEND ${_arg_flag}) - set(${argument_variable} ${_profile_list}) - - unset(_arg_flag) - unset(_profile_list) -endmacro() - - -macro(conan_provide_dependency method package_name) - set_property(GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED TRUE) - get_property(_conan_install_success GLOBAL PROPERTY CONAN_INSTALL_SUCCESS) - if(NOT _conan_install_success) - find_program(CONAN_COMMAND "conan" REQUIRED) - conan_get_version(${CONAN_COMMAND} CONAN_CURRENT_VERSION) - conan_version_check(MINIMUM ${CONAN_MINIMUM_VERSION} CURRENT ${CONAN_CURRENT_VERSION}) - message(STATUS "CMake-Conan: first find_package() found. Installing dependencies with Conan") - if("default" IN_LIST CONAN_HOST_PROFILE OR "default" IN_LIST CONAN_BUILD_PROFILE) - conan_profile_detect_default() - endif() - if("auto-cmake" IN_LIST CONAN_HOST_PROFILE) - detect_host_profile(${CMAKE_BINARY_DIR}/conan_host_profile) - endif() - construct_profile_argument(_host_profile_flags CONAN_HOST_PROFILE) - construct_profile_argument(_build_profile_flags CONAN_BUILD_PROFILE) - if(EXISTS "${CMAKE_SOURCE_DIR}/conanfile.py") - file(READ "${CMAKE_SOURCE_DIR}/conanfile.py" outfile) - if(NOT "${outfile}" MATCHES ".*CMakeDeps.*") - message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile") - endif() - set(generator "") - elseif (EXISTS "${CMAKE_SOURCE_DIR}/conanfile.txt") - file(READ "${CMAKE_SOURCE_DIR}/conanfile.txt" outfile) - if(NOT "${outfile}" MATCHES ".*CMakeDeps.*") - message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile. " - "Please define the generator as it will be mandatory in the future") - endif() - set(generator "-g;CMakeDeps") - endif() - get_property(_multiconfig_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) - if(NOT _multiconfig_generator) - message(STATUS "CMake-Conan: Installing single configuration ${CMAKE_BUILD_TYPE}") - conan_install(${_host_profile_flags} ${_build_profile_flags} ${CONAN_INSTALL_ARGS} ${generator}) - else() - message(STATUS "CMake-Conan: Installing both Debug and Release") - conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Release ${CONAN_INSTALL_ARGS} ${generator}) - conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Debug ${CONAN_INSTALL_ARGS} ${generator}) - endif() - unset(_host_profile_flags) - unset(_build_profile_flags) - unset(_multiconfig_generator) - unset(_conan_install_success) - else() - message(STATUS "CMake-Conan: find_package(${ARGV1}) found, 'conan install' already ran") - unset(_conan_install_success) - endif() - - get_property(_conan_generators_folder GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) - - # Ensure that we consider Conan-provided packages ahead of any other, - # irrespective of other settings that modify the search order or search paths - # This follows the guidelines from the find_package documentation - # (https://cmake.org/cmake/help/latest/command/find_package.html): - # find_package ( PATHS paths... NO_DEFAULT_PATH) - # find_package () - - # Filter out `REQUIRED` from the argument list, as the first call may fail - set(_find_args_${package_name} "${ARGN}") - list(REMOVE_ITEM _find_args_${package_name} "REQUIRED") - if(NOT "MODULE" IN_LIST _find_args_${package_name}) - find_package(${package_name} ${_find_args_${package_name}} BYPASS_PROVIDER PATHS "${_conan_generators_folder}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) - unset(_find_args_${package_name}) - endif() - - # Invoke find_package a second time - if the first call succeeded, - # this will simply reuse the result. If not, fall back to CMake default search - # behaviour, also allowing modules to be searched. - if(NOT ${package_name}_FOUND) - list(FIND CMAKE_MODULE_PATH "${_conan_generators_folder}" _index) - if(_index EQUAL -1) - list(PREPEND CMAKE_MODULE_PATH "${_conan_generators_folder}") - endif() - unset(_index) - find_package(${package_name} ${ARGN} BYPASS_PROVIDER) - list(REMOVE_ITEM CMAKE_MODULE_PATH "${_conan_generators_folder}") - endif() -endmacro() - -#[=[ not needed by Qt Creator, and if not commented it would break the auto-setup feature - -cmake_language( - SET_DEPENDENCY_PROVIDER conan_provide_dependency - SUPPORTED_METHODS FIND_PACKAGE -) - - -macro(conan_provide_dependency_check) - set(_CONAN_PROVIDE_DEPENDENCY_INVOKED FALSE) - get_property(_CONAN_PROVIDE_DEPENDENCY_INVOKED GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED) - if(NOT _CONAN_PROVIDE_DEPENDENCY_INVOKED) - message(WARNING "Conan is correctly configured as dependency provider, " - "but Conan has not been invoked. Please add at least one " - "call to `find_package()`.") - if(DEFINED CONAN_COMMAND) - # supress warning in case `CONAN_COMMAND` was specified but unused. - set(_CONAN_COMMAND ${CONAN_COMMAND}) - unset(_CONAN_COMMAND) - endif() - endif() - unset(_CONAN_PROVIDE_DEPENDENCY_INVOKED) -endmacro() - - -# Add a deferred call at the end of processing the top-level directory -# to check if the dependency provider was invoked at all. -cmake_language(DEFER DIRECTORY "${CMAKE_SOURCE_DIR}" CALL conan_provide_dependency_check) - -]=] - -# Configurable variables for Conan profiles -set(CONAN_HOST_PROFILE "default;auto-cmake" CACHE STRING "Conan host profile") -set(CONAN_BUILD_PROFILE "default" CACHE STRING "Conan build profile") -set(CONAN_INSTALL_ARGS "--build=missing" CACHE STRING "Command line arguments for conan install") - -find_program(_cmake_program NAMES cmake NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_CMAKE_FIND_ROOT_PATH) -if(NOT _cmake_program) - get_filename_component(PATH_TO_CMAKE_BIN "${CMAKE_COMMAND}" DIRECTORY) - set(PATH_TO_CMAKE_BIN "${PATH_TO_CMAKE_BIN}" CACHE INTERNAL "Path where the CMake executable is") -endif() - diff --git a/build/Desktop_Qt_6_8_0-Release/CMakeCache.txt b/build/Desktop_Qt_6_8_0-Release/CMakeCache.txt deleted file mode 100644 index bdc8b6ff2..000000000 --- a/build/Desktop_Qt_6_8_0-Release/CMakeCache.txt +++ /dev/null @@ -1,445 +0,0 @@ -# This is the CMakeCache file. -# For build in directory: /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release -# It was generated by CMake: /home/austenharrell/Qt/Tools/CMake/bin/cmake -# You can edit this file to change values found and used by cmake. -# If you do not want to change any of the values, simply exit the editor. -# If you do want to change a value, simply edit, save, and exit the editor. -# The syntax for the file is as follows: -# KEY:TYPE=VALUE -# KEY is the name of a variable in the cache. -# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. -# VALUE is the current value for the KEY. - -######################## -# EXTERNAL cache entries -######################## - -//Boost date_time library (debug) -Boost_DATE_TIME_LIBRARY_DEBUG:FILEPATH=Boost_DATE_TIME_LIBRARY_DEBUG-NOTFOUND - -//Boost date_time library (release) -Boost_DATE_TIME_LIBRARY_RELEASE:FILEPATH=Boost_DATE_TIME_LIBRARY_RELEASE-NOTFOUND - -//The directory containing a CMake configuration file for Boost. -Boost_DIR:PATH=Boost_DIR-NOTFOUND - -//Path to a file. -Boost_INCLUDE_DIR:PATH=Boost_INCLUDE_DIR-NOTFOUND - -//Boost program_options library (debug) -Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG:FILEPATH=Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG-NOTFOUND - -//Boost program_options library (release) -Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE:FILEPATH=Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE-NOTFOUND - -//Boost unit_test_framework library (debug) -Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG:FILEPATH=Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG-NOTFOUND - -//Boost unit_test_framework library (release) -Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE:FILEPATH=Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE-NOTFOUND - -//Path to a program. -CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line - -//Path to a program. -CMAKE_AR:FILEPATH=/usr/bin/ar - -//No help, variable specified on the command line. -CMAKE_BUILD_TYPE:STRING=Release - -//Enable colored diagnostics throughout. -CMAKE_COLOR_DIAGNOSTICS:BOOL=1 - -//CXX compiler -CMAKE_CXX_COMPILER:STRING=/usr/bin/x86_64-linux-gnu-g++-11 - -//A wrapper around 'ar' adding the appropriate '--plugin' option -// for the GCC compiler -CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/x86_64-linux-gnu-gcc-ar-11 - -//A wrapper around 'ranlib' adding the appropriate '--plugin' option -// for the GCC compiler -CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/x86_64-linux-gnu-gcc-ranlib-11 - -//Flags used by the CXX compiler during all build types. -CMAKE_CXX_FLAGS:STRING= - -//Flags used by the CXX compiler during DEBUG builds. -CMAKE_CXX_FLAGS_DEBUG:STRING=-g - -//No help, variable specified on the command line. -CMAKE_CXX_FLAGS_INIT:STRING= - -//Flags used by the CXX compiler during MINSIZEREL builds. -CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG - -//Flags used by the CXX compiler during RELEASE builds. -CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG - -//Flags used by the CXX compiler during RELWITHDEBINFO builds. -CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG - -//C compiler -CMAKE_C_COMPILER:STRING=/usr/bin/gcc-11 - -//A wrapper around 'ar' adding the appropriate '--plugin' option -// for the GCC compiler -CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-11 - -//A wrapper around 'ranlib' adding the appropriate '--plugin' option -// for the GCC compiler -CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-11 - -//Flags used by the C compiler during all build types. -CMAKE_C_FLAGS:STRING= - -//Flags used by the C compiler during DEBUG builds. -CMAKE_C_FLAGS_DEBUG:STRING=-g - -//Flags used by the C compiler during MINSIZEREL builds. -CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG - -//Flags used by the C compiler during RELEASE builds. -CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG - -//Flags used by the C compiler during RELWITHDEBINFO builds. -CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG - -//Path to a program. -CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND - -//Flags used by the linker during all build types. -CMAKE_EXE_LINKER_FLAGS:STRING= - -//Flags used by the linker during DEBUG builds. -CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= - -//Flags used by the linker during MINSIZEREL builds. -CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= - -//Flags used by the linker during RELEASE builds. -CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= - -//Flags used by the linker during RELWITHDEBINFO builds. -CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= - -//Enable/Disable output of compile commands during generation. -CMAKE_EXPORT_COMPILE_COMMANDS:BOOL= - -//Value Computed by CMake. -CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/pkgRedirects - -//No help, variable specified on the command line. -CMAKE_GENERATOR:STRING=Ninja - -//Install path prefix, prepended onto install directories. -CMAKE_INSTALL_PREFIX:PATH=/usr/local - -//Path to a program. -CMAKE_LINKER:FILEPATH=/usr/bin/ld - -//Program used to build from build.ninja files. -CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/ninja - -//Flags used by the linker during the creation of modules during -// all build types. -CMAKE_MODULE_LINKER_FLAGS:STRING= - -//Flags used by the linker during the creation of modules during -// DEBUG builds. -CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= - -//Flags used by the linker during the creation of modules during -// MINSIZEREL builds. -CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= - -//Flags used by the linker during the creation of modules during -// RELEASE builds. -CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= - -//Flags used by the linker during the creation of modules during -// RELWITHDEBINFO builds. -CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= - -//Path to a program. -CMAKE_NM:FILEPATH=/usr/bin/nm - -//Path to a program. -CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy - -//Path to a program. -CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump - -//No help, variable specified on the command line. -CMAKE_PREFIX_PATH:PATH=/home/austenharrell/Qt/6.8.0/gcc_64 - -//Value Computed by CMake -CMAKE_PROJECT_DESCRIPTION:STATIC= - -//Value Computed by CMake -CMAKE_PROJECT_HOMEPAGE_URL:STATIC= - -//No help, variable specified on the command line. -CMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/auto-setup.cmake - -//Value Computed by CMake -CMAKE_PROJECT_NAME:STATIC=WindNinja - -//Path to a program. -CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib - -//Path to a program. -CMAKE_READELF:FILEPATH=/usr/bin/readelf - -//Flags used by the linker during the creation of shared libraries -// during all build types. -CMAKE_SHARED_LINKER_FLAGS:STRING= - -//Flags used by the linker during the creation of shared libraries -// during DEBUG builds. -CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= - -//Flags used by the linker during the creation of shared libraries -// during MINSIZEREL builds. -CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= - -//Flags used by the linker during the creation of shared libraries -// during RELEASE builds. -CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= - -//Flags used by the linker during the creation of shared libraries -// during RELWITHDEBINFO builds. -CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= - -//If set, runtime paths are not added when installing shared libraries, -// but are added when building. -CMAKE_SKIP_INSTALL_RPATH:BOOL=NO - -//If set, runtime paths are not added when using shared libraries. -CMAKE_SKIP_RPATH:BOOL=NO - -//Flags used by the linker during the creation of static libraries -// during all build types. -CMAKE_STATIC_LINKER_FLAGS:STRING= - -//Flags used by the linker during the creation of static libraries -// during DEBUG builds. -CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= - -//Flags used by the linker during the creation of static libraries -// during MINSIZEREL builds. -CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= - -//Flags used by the linker during the creation of static libraries -// during RELEASE builds. -CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= - -//Flags used by the linker during the creation of static libraries -// during RELWITHDEBINFO builds. -CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= - -//Path to a program. -CMAKE_STRIP:FILEPATH=/usr/bin/strip - -//Path to a program. -CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND - -//If this value is on, makefiles will be generated without the -// .SILENT directive, and all commands will be echoed to the console -// during the make. This is useful for debugging only. With Visual -// Studio IDE projects all commands are done without /nologo. -CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE - -//Build a windows installer with dlls from the firelab machine -FIRELAB_PACKAGE:BOOL=OFF - -//Skip Qt Creator's package manager auto-setup -QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP:BOOL=OFF - -//No help, variable specified on the command line. -QT_QMAKE_EXECUTABLE:FILEPATH=/home/austenharrell/Qt/6.8.0/gcc_64/bin/qmake - -//Value Computed by CMake -WindNinja_BINARY_DIR:STATIC=/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release - -//Value Computed by CMake -WindNinja_IS_TOP_LEVEL:STATIC=ON - -//Value Computed by CMake -WindNinja_SOURCE_DIR:STATIC=/home/austenharrell/school/2025_Spring/windninja - - -######################## -# INTERNAL cache entries -######################## - -//ADVANCED property for variable: Boost_DATE_TIME_LIBRARY_DEBUG -Boost_DATE_TIME_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: Boost_DATE_TIME_LIBRARY_RELEASE -Boost_DATE_TIME_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: Boost_DIR -Boost_DIR-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: Boost_INCLUDE_DIR -Boost_INCLUDE_DIR-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG -Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE -Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG -Boost_UNIT_TEST_FRAMEWORK_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE -Boost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_ADDR2LINE -CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_AR -CMAKE_AR-ADVANCED:INTERNAL=1 -//This is the directory where this CMakeCache.txt was created -CMAKE_CACHEFILE_DIR:INTERNAL=/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release -//Major version of cmake used to create the current loaded cache -CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 -//Minor version of cmake used to create the current loaded cache -CMAKE_CACHE_MINOR_VERSION:INTERNAL=29 -//Patch version of cmake used to create the current loaded cache -CMAKE_CACHE_PATCH_VERSION:INTERNAL=3 -//Path to CMake executable. -CMAKE_COMMAND:INTERNAL=/home/austenharrell/Qt/Tools/CMake/bin/cmake -//Path to cpack program executable. -CMAKE_CPACK_COMMAND:INTERNAL=/home/austenharrell/Qt/Tools/CMake/bin/cpack -//Path to ctest program executable. -CMAKE_CTEST_COMMAND:INTERNAL=/home/austenharrell/Qt/Tools/CMake/bin/ctest -//ADVANCED property for variable: CMAKE_CXX_COMPILER -CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR -CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB -CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_FLAGS -CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG -CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL -CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE -CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO -CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_COMPILER -CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_COMPILER_AR -CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB -CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS -CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG -CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL -CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE -CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO -CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_DLLTOOL -CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 -//Path to cache edit program executable. -CMAKE_EDIT_COMMAND:INTERNAL=/home/austenharrell/Qt/Tools/CMake/bin/ccmake -//Executable file format -CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS -CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG -CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL -CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE -CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO -CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS -CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 -//Generator instance identifier. -CMAKE_GENERATOR_INSTANCE:INTERNAL= -//Name of generator platform. -CMAKE_GENERATOR_PLATFORM:INTERNAL= -//Name of generator toolset. -CMAKE_GENERATOR_TOOLSET:INTERNAL= -//Source directory with the top level CMakeLists.txt file for this -// project -CMAKE_HOME_DIRECTORY:INTERNAL=/home/austenharrell/school/2025_Spring/windninja -//Install .so files without execute permission. -CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 -//ADVANCED property for variable: CMAKE_LINKER -CMAKE_LINKER-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MAKE_PROGRAM -CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS -CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG -CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL -CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE -CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO -CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_NM -CMAKE_NM-ADVANCED:INTERNAL=1 -//number of local generators -CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 -//ADVANCED property for variable: CMAKE_OBJCOPY -CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_OBJDUMP -CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 -//Platform information initialized -CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_RANLIB -CMAKE_RANLIB-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_READELF -CMAKE_READELF-ADVANCED:INTERNAL=1 -//Path to CMake installation. -CMAKE_ROOT:INTERNAL=/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS -CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG -CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL -CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE -CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO -CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH -CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SKIP_RPATH -CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS -CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG -CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL -CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE -CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO -CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STRIP -CMAKE_STRIP-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_TAPI -CMAKE_TAPI-ADVANCED:INTERNAL=1 -//uname command -CMAKE_UNAME:INTERNAL=/usr/bin/uname -//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE -CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: FIRELAB_PACKAGE -FIRELAB_PACKAGE-ADVANCED:INTERNAL=1 -//Components requested for this build tree. -_Boost_COMPONENTS_SEARCHED:INTERNAL= -//Last used Boost_INCLUDE_DIR value. -_Boost_INCLUDE_DIR_LAST:INTERNAL=Boost_INCLUDE_DIR-NOTFOUND -//Last used Boost_NAMESPACE value. -_Boost_NAMESPACE_LAST:INTERNAL=boost -//Last used Boost_USE_MULTITHREADED value. -_Boost_USE_MULTITHREADED_LAST:INTERNAL=TRUE -//linker supports push/pop state -_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE - diff --git a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeCCompiler.cmake b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeCCompiler.cmake deleted file mode 100644 index 2bbc9eb34..000000000 --- a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeCCompiler.cmake +++ /dev/null @@ -1,80 +0,0 @@ -set(CMAKE_C_COMPILER "/usr/bin/gcc-11") -set(CMAKE_C_COMPILER_ARG1 "") -set(CMAKE_C_COMPILER_ID "GNU") -set(CMAKE_C_COMPILER_VERSION "11.4.0") -set(CMAKE_C_COMPILER_VERSION_INTERNAL "") -set(CMAKE_C_COMPILER_WRAPPER "") -set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "17") -set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "ON") -set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17;c_std_23") -set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") -set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") -set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") -set(CMAKE_C17_COMPILE_FEATURES "c_std_17") -set(CMAKE_C23_COMPILE_FEATURES "c_std_23") - -set(CMAKE_C_PLATFORM_ID "Linux") -set(CMAKE_C_SIMULATE_ID "") -set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU") -set(CMAKE_C_SIMULATE_VERSION "") - - - - -set(CMAKE_AR "/usr/bin/ar") -set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar-11") -set(CMAKE_RANLIB "/usr/bin/ranlib") -set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib-11") -set(CMAKE_LINKER "/usr/bin/ld") -set(CMAKE_LINKER_LINK "") -set(CMAKE_LINKER_LLD "") -set(CMAKE_C_COMPILER_LINKER "/usr/bin/ld") -set(CMAKE_C_COMPILER_LINKER_ID "GNU") -set(CMAKE_C_COMPILER_LINKER_VERSION 2.38) -set(CMAKE_C_COMPILER_LINKER_FRONTEND_VARIANT GNU) -set(CMAKE_MT "") -set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") -set(CMAKE_COMPILER_IS_GNUCC 1) -set(CMAKE_C_COMPILER_LOADED 1) -set(CMAKE_C_COMPILER_WORKS TRUE) -set(CMAKE_C_ABI_COMPILED TRUE) - -set(CMAKE_C_COMPILER_ENV_VAR "CC") - -set(CMAKE_C_COMPILER_ID_RUN 1) -set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) -set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) -set(CMAKE_C_LINKER_PREFERENCE 10) -set(CMAKE_C_LINKER_DEPFILE_SUPPORTED FALSE) - -# Save compiler ABI information. -set(CMAKE_C_SIZEOF_DATA_PTR "8") -set(CMAKE_C_COMPILER_ABI "ELF") -set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN") -set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") - -if(CMAKE_C_SIZEOF_DATA_PTR) - set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") -endif() - -if(CMAKE_C_COMPILER_ABI) - set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") -endif() - -if(CMAKE_C_LIBRARY_ARCHITECTURE) - set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") -endif() - -set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") -if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) - set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") -endif() - - - - - -set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") -set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s") -set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") -set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake deleted file mode 100644 index bfe6256d5..000000000 --- a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeCXXCompiler.cmake +++ /dev/null @@ -1,92 +0,0 @@ -set(CMAKE_CXX_COMPILER "/usr/bin/x86_64-linux-gnu-g++-11") -set(CMAKE_CXX_COMPILER_ARG1 "") -set(CMAKE_CXX_COMPILER_ID "GNU") -set(CMAKE_CXX_COMPILER_VERSION "11.4.0") -set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") -set(CMAKE_CXX_COMPILER_WRAPPER "") -set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17") -set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON") -set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23") -set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") -set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") -set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") -set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") -set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") -set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23") - -set(CMAKE_CXX_PLATFORM_ID "Linux") -set(CMAKE_CXX_SIMULATE_ID "") -set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU") -set(CMAKE_CXX_SIMULATE_VERSION "") - - - - -set(CMAKE_AR "/usr/bin/ar") -set(CMAKE_CXX_COMPILER_AR "/usr/bin/x86_64-linux-gnu-gcc-ar-11") -set(CMAKE_RANLIB "/usr/bin/ranlib") -set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/x86_64-linux-gnu-gcc-ranlib-11") -set(CMAKE_LINKER "/usr/bin/ld") -set(CMAKE_LINKER_LINK "") -set(CMAKE_LINKER_LLD "") -set(CMAKE_CXX_COMPILER_LINKER "/usr/bin/ld") -set(CMAKE_CXX_COMPILER_LINKER_ID "GNU") -set(CMAKE_CXX_COMPILER_LINKER_VERSION 2.38) -set(CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT GNU) -set(CMAKE_MT "") -set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") -set(CMAKE_COMPILER_IS_GNUCXX 1) -set(CMAKE_CXX_COMPILER_LOADED 1) -set(CMAKE_CXX_COMPILER_WORKS TRUE) -set(CMAKE_CXX_ABI_COMPILED TRUE) - -set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") - -set(CMAKE_CXX_COMPILER_ID_RUN 1) -set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m) -set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) - -foreach (lang IN ITEMS C OBJC OBJCXX) - if (CMAKE_${lang}_COMPILER_ID_RUN) - foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) - list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) - endforeach() - endif() -endforeach() - -set(CMAKE_CXX_LINKER_PREFERENCE 30) -set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) -set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED FALSE) - -# Save compiler ABI information. -set(CMAKE_CXX_SIZEOF_DATA_PTR "8") -set(CMAKE_CXX_COMPILER_ABI "ELF") -set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN") -set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") - -if(CMAKE_CXX_SIZEOF_DATA_PTR) - set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") -endif() - -if(CMAKE_CXX_COMPILER_ABI) - set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") -endif() - -if(CMAKE_CXX_LIBRARY_ARCHITECTURE) - set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") -endif() - -set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") -if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) - set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") -endif() - - - - - -set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/11;/usr/include/x86_64-linux-gnu/c++/11;/usr/include/c++/11/backward;/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") -set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") -set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") -set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") -set(CMAKE_CXX_COMPILER_CLANG_RESOURCE_DIR "") diff --git a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_C.bin b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_C.bin deleted file mode 100755 index 59672f58544a0d3fa118329bec892cc5d8608ac8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15968 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 Z0>QaorNy;#ZU061!veG*;1CeSKLPgAN{|2m diff --git a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_CXX.bin b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CMakeDetermineCompilerABI_CXX.bin deleted file mode 100755 index cfa527b53452d63fe64b6a8e2d060ddc5e29a3a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15992 zcmeHOYit}>6~4Q666fh{noyIZ%}^TT5InIR$2dlA){nJk!LK9^1VWh1ddK#VeYmr; z#15f}lorK=pim(~k&r@p6bXJb5+VXo*ea-q@=)_5B&dG^p(u!ix;&RLJg z>z1d4&>U;`-1FV@-FxTUJL@|$XO6{syThT7V5txf3$&sU7l~3u%R8w6Dk@sUO8CBC zY!HjVu9TQtA9WSfx^guiWZUxI(%>{juhF zVodPULhY9IP5mu24-tw#YYMN}nz9njOcgFYzO9xoBL zu}}2Dc%0nz#gJlF)*`kPJ}4cr%Qru~wDafRx&Fk_OXkngD_YMk|HgZ+7a9{U-Mae7 zz72NHPgyIp2*N7S) zj>rEXeEhNt0HsVjhXB6^qpP?Kj5P{Id9_$o`n`LbM1?p8IwET3jq`r;-+Yhj_)+o~ zx;{K%=p$CfNLfcrFkt}=>p91;9X)MW8G$ygpJt)Qhx+uSX`7=~&N1zwzRpxOV-6XK z6!6TX;TS+i<fCh?dbKv=>5w&{bW3oNKp9DlZ zz32&4J7%1<(Di$<3|%iRUaQ`C933x`27gQXZ%?4wd{>*A)}H(QPVKpw3N7@!cImFO z1{&Bz4OA7cjZ|-haWNmqd%O*+MSja(?L=D`i`vx7&I;{R+hQL?DPj5P={9K?H&b z1Q7@#5Jcb~j{rX3c|D2ucMr7Y;E7gtL{E-8_Wt^o1783B_&|4})tS^yJ8LHQ+wl&) zr#}|&>Teg)Px2F!j;UvDc;vOeH$F7f8`ER`UGesQ@R0RJ!rBjc2uKL6uXqL?DPj5P={9K?MFcBEb20oPWo;b@HMI zhPZ-u=vJX3>6zlJqcd6-A>0=KG<{ zQ2jF36yGJioOBK8wWL{b?q7lO`zRe;3{t~9jsg)lXO`Q0fN=KvYtbDq#7RPT$yTU6 zcrq-HhvNvBrqZsY`oECPi4s zzS%zxg^(wom*)%fe?xG$fY&SgAB6(;%jXN@C#C+Uw;2MH%7YGA-25fR4;fGhzi3&m}d^j|Fo-$ITaRc@Tyz&|Xi1)t~azC*Ti zpWyYuc(=siXngB$0C3E-KBKUws}t0YKkqvu@iz%RUzzn7;9&u0yKjC!0eHFm^rr#$ zbt#+riNxpUm0twBTps!hgo`MT#MM`1J99C#egk;9yz<+!o%wm|F9KdJ-~2W5_s3^3 z+@3>!f4=#0z?J#K5t{&iunaEt4BJkFnuSbpxZ9>X#;5=w=j2C5)L}83jIKLreHhcx zbC`pk)kjm=gptydPS(!pMt(vJXVc>;(=n53eR&Vefwy$Swhg!`m~re$F=88OQ%~m8 z=}Dk?EFCI_2YMTtt;|SP_uPv_w9!Rp?=b2K zYZO!BEh8iAcSx3}K4m#h%JjIjNDqh#46b{3d!M{JsY9MU9ta*|E~}3jnIvZCcfG&A zy)WJgD7>Jd$21~nUAqB-M1H)niPWCnfsXcGeW1I0Pi#mZYVUx1oGRCA0L-dGa&Y`J`Q1-c9_L*qu;8iwKE>liA$T_IFh z`e|6v<<72u8pC}PobvD+=ZgP5INmo=we;mO>bJrN_cqL5=zTBrMdAI7YYEW|1ux(K z-WT2{_X^&R_X_?$_44`uIcvr13}rw6eSrNL_C`E@-Vd_Yh|l{$|M(54$Gsr)dB4bd z5Q7VXW5go!d7ozihFcKk^Zt`H?>E6k3N^>3cmztg_hUZq_gM4%@%Y(~^`pSYy(HVb zpJZK6J^9Da12_!@j4AVZf6KZ+j@-Zh_|HN;9uwD>{?F3?Ti(}GGxO%}3qHO=Jl4K{ z+y3UoQ$Bt@5m>(w|LZ<}lnAVoz6tZUcizY6eGhBC?g2L`{`GqSQ0#)^FBIt}SbvI4 zR$R@tyDyyO^L~jnzyHYo{{DXo72f^})B)?yFp)IRKf_m`fO|;3F5&$wzbEPUXPfnP z;8uJ1ynmjl0}zD$Tx-^5{1vFcwa5LJ_K~W~DB!_?;QB{l9?#=f0Yew&^Zv206}^Rs z%J11P=ChuGDlfl8sCPNs54XTPw(mj#G47xDZ4u)8{poO+E-C;(jND5&^S6``x4?X_ zF0DO}Z>24 & 0x00FF) -# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) -# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) - -#elif defined(__BORLANDC__) -# define COMPILER_ID "Borland" - /* __BORLANDC__ = 0xVRR */ -# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) -# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) - -#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 -# define COMPILER_ID "Watcom" - /* __WATCOMC__ = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__WATCOMC__) -# define COMPILER_ID "OpenWatcom" - /* __WATCOMC__ = VVRP + 1100 */ -# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__SUNPRO_C) -# define COMPILER_ID "SunPro" -# if __SUNPRO_C >= 0x5100 - /* __SUNPRO_C = 0xVRRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) -# else - /* __SUNPRO_CC = 0xVRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) -# endif - -#elif defined(__HP_cc) -# define COMPILER_ID "HP" - /* __HP_cc = VVRRPP */ -# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) -# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) - -#elif defined(__DECC) -# define COMPILER_ID "Compaq" - /* __DECC_VER = VVRRTPPPP */ -# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) -# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) -# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) - -#elif defined(__IBMC__) && defined(__COMPILER_VER__) -# define COMPILER_ID "zOS" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__open_xl__) && defined(__clang__) -# define COMPILER_ID "IBMClang" -# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) -# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) -# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) - - -#elif defined(__ibmxl__) && defined(__clang__) -# define COMPILER_ID "XLClang" -# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) -# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) -# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) - - -#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 -# define COMPILER_ID "XL" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 -# define COMPILER_ID "VisualAge" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__NVCOMPILER) -# define COMPILER_ID "NVHPC" -# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) -# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) -# if defined(__NVCOMPILER_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) -# endif - -#elif defined(__PGI) -# define COMPILER_ID "PGI" -# define COMPILER_VERSION_MAJOR DEC(__PGIC__) -# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) -# if defined(__PGIC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) -# endif - -#elif defined(__clang__) && defined(__cray__) -# define COMPILER_ID "CrayClang" -# define COMPILER_VERSION_MAJOR DEC(__cray_major__) -# define COMPILER_VERSION_MINOR DEC(__cray_minor__) -# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) -# define COMPILER_VERSION_INTERNAL_STR __clang_version__ - - -#elif defined(_CRAYC) -# define COMPILER_ID "Cray" -# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) -# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) - -#elif defined(__TI_COMPILER_VERSION__) -# define COMPILER_ID "TI" - /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ -# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) -# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) -# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) - -#elif defined(__CLANG_FUJITSU) -# define COMPILER_ID "FujitsuClang" -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# define COMPILER_VERSION_INTERNAL_STR __clang_version__ - - -#elif defined(__FUJITSU) -# define COMPILER_ID "Fujitsu" -# if defined(__FCC_version__) -# define COMPILER_VERSION __FCC_version__ -# elif defined(__FCC_major__) -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# endif -# if defined(__fcc_version) -# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) -# elif defined(__FCC_VERSION) -# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) -# endif - - -#elif defined(__ghs__) -# define COMPILER_ID "GHS" -/* __GHS_VERSION_NUMBER = VVVVRP */ -# ifdef __GHS_VERSION_NUMBER -# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) -# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) -# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) -# endif - -#elif defined(__TASKING__) -# define COMPILER_ID "Tasking" - # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) - # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) -# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) - -#elif defined(__ORANGEC__) -# define COMPILER_ID "OrangeC" -# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) -# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) -# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) - -#elif defined(__TINYC__) -# define COMPILER_ID "TinyCC" - -#elif defined(__BCC__) -# define COMPILER_ID "Bruce" - -#elif defined(__SCO_VERSION__) -# define COMPILER_ID "SCO" - -#elif defined(__ARMCC_VERSION) && !defined(__clang__) -# define COMPILER_ID "ARMCC" -#if __ARMCC_VERSION >= 1000000 - /* __ARMCC_VERSION = VRRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#else - /* __ARMCC_VERSION = VRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#endif - - -#elif defined(__clang__) && defined(__apple_build_version__) -# define COMPILER_ID "AppleClang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) - -#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) -# define COMPILER_ID "ARMClang" - # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) -# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) - -#elif defined(__clang__) && defined(__ti__) -# define COMPILER_ID "TIClang" - # define COMPILER_VERSION_MAJOR DEC(__ti_major__) - # define COMPILER_VERSION_MINOR DEC(__ti_minor__) - # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) -# define COMPILER_VERSION_INTERNAL DEC(__ti_version__) - -#elif defined(__clang__) -# define COMPILER_ID "Clang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) -# define COMPILER_ID "LCC" -# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) -# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) -# if defined(__LCC_MINOR__) -# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) -# endif -# if defined(__GNUC__) && defined(__GNUC_MINOR__) -# define SIMULATE_ID "GNU" -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -# if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif -# endif - -#elif defined(__GNUC__) -# define COMPILER_ID "GNU" -# define COMPILER_VERSION_MAJOR DEC(__GNUC__) -# if defined(__GNUC_MINOR__) -# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) -# endif -# if defined(__GNUC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif defined(_MSC_VER) -# define COMPILER_ID "MSVC" - /* _MSC_VER = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) -# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) -# if defined(_MSC_FULL_VER) -# if _MSC_VER >= 1400 - /* _MSC_FULL_VER = VVRRPPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) -# else - /* _MSC_FULL_VER = VVRRPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) -# endif -# endif -# if defined(_MSC_BUILD) -# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) -# endif - -#elif defined(_ADI_COMPILER) -# define COMPILER_ID "ADSP" -#if defined(__VERSIONNUM__) - /* __VERSIONNUM__ = 0xVVRRPPTT */ -# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) -# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) -# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) -# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) -#endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# define COMPILER_ID "IAR" -# if defined(__VER__) && defined(__ICCARM__) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) -# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) -# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) -# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) -# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# endif - -#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) -# define COMPILER_ID "SDCC" -# if defined(__SDCC_VERSION_MAJOR) -# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) -# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) -# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) -# else - /* SDCC = VRP */ -# define COMPILER_VERSION_MAJOR DEC(SDCC/100) -# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) -# define COMPILER_VERSION_PATCH DEC(SDCC % 10) -# endif - - -/* These compilers are either not known or too old to define an - identification macro. Try to identify the platform and guess that - it is the native compiler. */ -#elif defined(__hpux) || defined(__hpua) -# define COMPILER_ID "HP" - -#else /* unknown compiler */ -# define COMPILER_ID "" -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; -#ifdef SIMULATE_ID -char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; -#endif - -#ifdef __QNXNTO__ -char const* qnxnto = "INFO" ":" "qnxnto[]"; -#endif - -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) -char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; -#endif - -#define STRINGIFY_HELPER(X) #X -#define STRINGIFY(X) STRINGIFY_HELPER(X) - -/* Identify known platforms by name. */ -#if defined(__linux) || defined(__linux__) || defined(linux) -# define PLATFORM_ID "Linux" - -#elif defined(__MSYS__) -# define PLATFORM_ID "MSYS" - -#elif defined(__CYGWIN__) -# define PLATFORM_ID "Cygwin" - -#elif defined(__MINGW32__) -# define PLATFORM_ID "MinGW" - -#elif defined(__APPLE__) -# define PLATFORM_ID "Darwin" - -#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) -# define PLATFORM_ID "Windows" - -#elif defined(__FreeBSD__) || defined(__FreeBSD) -# define PLATFORM_ID "FreeBSD" - -#elif defined(__NetBSD__) || defined(__NetBSD) -# define PLATFORM_ID "NetBSD" - -#elif defined(__OpenBSD__) || defined(__OPENBSD) -# define PLATFORM_ID "OpenBSD" - -#elif defined(__sun) || defined(sun) -# define PLATFORM_ID "SunOS" - -#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) -# define PLATFORM_ID "AIX" - -#elif defined(__hpux) || defined(__hpux__) -# define PLATFORM_ID "HP-UX" - -#elif defined(__HAIKU__) -# define PLATFORM_ID "Haiku" - -#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) -# define PLATFORM_ID "BeOS" - -#elif defined(__QNX__) || defined(__QNXNTO__) -# define PLATFORM_ID "QNX" - -#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) -# define PLATFORM_ID "Tru64" - -#elif defined(__riscos) || defined(__riscos__) -# define PLATFORM_ID "RISCos" - -#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) -# define PLATFORM_ID "SINIX" - -#elif defined(__UNIX_SV__) -# define PLATFORM_ID "UNIX_SV" - -#elif defined(__bsdos__) -# define PLATFORM_ID "BSDOS" - -#elif defined(_MPRAS) || defined(MPRAS) -# define PLATFORM_ID "MP-RAS" - -#elif defined(__osf) || defined(__osf__) -# define PLATFORM_ID "OSF1" - -#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) -# define PLATFORM_ID "SCO_SV" - -#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) -# define PLATFORM_ID "ULTRIX" - -#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) -# define PLATFORM_ID "Xenix" - -#elif defined(__WATCOMC__) -# if defined(__LINUX__) -# define PLATFORM_ID "Linux" - -# elif defined(__DOS__) -# define PLATFORM_ID "DOS" - -# elif defined(__OS2__) -# define PLATFORM_ID "OS2" - -# elif defined(__WINDOWS__) -# define PLATFORM_ID "Windows3x" - -# elif defined(__VXWORKS__) -# define PLATFORM_ID "VxWorks" - -# else /* unknown platform */ -# define PLATFORM_ID -# endif - -#elif defined(__INTEGRITY) -# if defined(INT_178B) -# define PLATFORM_ID "Integrity178" - -# else /* regular Integrity */ -# define PLATFORM_ID "Integrity" -# endif - -# elif defined(_ADI_COMPILER) -# define PLATFORM_ID "ADSP" - -#else /* unknown platform */ -# define PLATFORM_ID - -#endif - -/* For windows compilers MSVC and Intel we can determine - the architecture of the compiler being used. This is because - the compilers do not have flags that can change the architecture, - but rather depend on which compiler is being used -*/ -#if defined(_WIN32) && defined(_MSC_VER) -# if defined(_M_IA64) -# define ARCHITECTURE_ID "IA64" - -# elif defined(_M_ARM64EC) -# define ARCHITECTURE_ID "ARM64EC" - -# elif defined(_M_X64) || defined(_M_AMD64) -# define ARCHITECTURE_ID "x64" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# elif defined(_M_ARM64) -# define ARCHITECTURE_ID "ARM64" - -# elif defined(_M_ARM) -# if _M_ARM == 4 -# define ARCHITECTURE_ID "ARMV4I" -# elif _M_ARM == 5 -# define ARCHITECTURE_ID "ARMV5I" -# else -# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) -# endif - -# elif defined(_M_MIPS) -# define ARCHITECTURE_ID "MIPS" - -# elif defined(_M_SH) -# define ARCHITECTURE_ID "SHx" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__WATCOMC__) -# if defined(_M_I86) -# define ARCHITECTURE_ID "I86" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# if defined(__ICCARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__ICCRX__) -# define ARCHITECTURE_ID "RX" - -# elif defined(__ICCRH850__) -# define ARCHITECTURE_ID "RH850" - -# elif defined(__ICCRL78__) -# define ARCHITECTURE_ID "RL78" - -# elif defined(__ICCRISCV__) -# define ARCHITECTURE_ID "RISCV" - -# elif defined(__ICCAVR__) -# define ARCHITECTURE_ID "AVR" - -# elif defined(__ICC430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__ICCV850__) -# define ARCHITECTURE_ID "V850" - -# elif defined(__ICC8051__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__ICCSTM8__) -# define ARCHITECTURE_ID "STM8" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__ghs__) -# if defined(__PPC64__) -# define ARCHITECTURE_ID "PPC64" - -# elif defined(__ppc__) -# define ARCHITECTURE_ID "PPC" - -# elif defined(__ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__x86_64__) -# define ARCHITECTURE_ID "x64" - -# elif defined(__i386__) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__clang__) && defined(__ti__) -# if defined(__ARM_ARCH) -# define ARCHITECTURE_ID "Arm" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__TI_COMPILER_VERSION__) -# if defined(__TI_ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__MSP430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__TMS320C28XX__) -# define ARCHITECTURE_ID "TMS320C28x" - -# elif defined(__TMS320C6X__) || defined(_TMS320C6X) -# define ARCHITECTURE_ID "TMS320C6x" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -# elif defined(__ADSPSHARC__) -# define ARCHITECTURE_ID "SHARC" - -# elif defined(__ADSPBLACKFIN__) -# define ARCHITECTURE_ID "Blackfin" - -#elif defined(__TASKING__) - -# if defined(__CTC__) || defined(__CPTC__) -# define ARCHITECTURE_ID "TriCore" - -# elif defined(__CMCS__) -# define ARCHITECTURE_ID "MCS" - -# elif defined(__CARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__CARC__) -# define ARCHITECTURE_ID "ARC" - -# elif defined(__C51__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__CPCP__) -# define ARCHITECTURE_ID "PCP" - -# else -# define ARCHITECTURE_ID "" -# endif - -#else -# define ARCHITECTURE_ID -#endif - -/* Convert integer to decimal digit literals. */ -#define DEC(n) \ - ('0' + (((n) / 10000000)%10)), \ - ('0' + (((n) / 1000000)%10)), \ - ('0' + (((n) / 100000)%10)), \ - ('0' + (((n) / 10000)%10)), \ - ('0' + (((n) / 1000)%10)), \ - ('0' + (((n) / 100)%10)), \ - ('0' + (((n) / 10)%10)), \ - ('0' + ((n) % 10)) - -/* Convert integer to hex digit literals. */ -#define HEX(n) \ - ('0' + ((n)>>28 & 0xF)), \ - ('0' + ((n)>>24 & 0xF)), \ - ('0' + ((n)>>20 & 0xF)), \ - ('0' + ((n)>>16 & 0xF)), \ - ('0' + ((n)>>12 & 0xF)), \ - ('0' + ((n)>>8 & 0xF)), \ - ('0' + ((n)>>4 & 0xF)), \ - ('0' + ((n) & 0xF)) - -/* Construct a string literal encoding the version number. */ -#ifdef COMPILER_VERSION -char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; - -/* Construct a string literal encoding the version number components. */ -#elif defined(COMPILER_VERSION_MAJOR) -char const info_version[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', - COMPILER_VERSION_MAJOR, -# ifdef COMPILER_VERSION_MINOR - '.', COMPILER_VERSION_MINOR, -# ifdef COMPILER_VERSION_PATCH - '.', COMPILER_VERSION_PATCH, -# ifdef COMPILER_VERSION_TWEAK - '.', COMPILER_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct a string literal encoding the internal version number. */ -#ifdef COMPILER_VERSION_INTERNAL -char const info_version_internal[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', - 'i','n','t','e','r','n','a','l','[', - COMPILER_VERSION_INTERNAL,']','\0'}; -#elif defined(COMPILER_VERSION_INTERNAL_STR) -char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; -#endif - -/* Construct a string literal encoding the version number components. */ -#ifdef SIMULATE_VERSION_MAJOR -char const info_simulate_version[] = { - 'I', 'N', 'F', 'O', ':', - 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', - SIMULATE_VERSION_MAJOR, -# ifdef SIMULATE_VERSION_MINOR - '.', SIMULATE_VERSION_MINOR, -# ifdef SIMULATE_VERSION_PATCH - '.', SIMULATE_VERSION_PATCH, -# ifdef SIMULATE_VERSION_TWEAK - '.', SIMULATE_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; -char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; - - - -#if !defined(__STDC__) && !defined(__clang__) -# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__) -# define C_VERSION "90" -# else -# define C_VERSION -# endif -#elif __STDC_VERSION__ > 201710L -# define C_VERSION "23" -#elif __STDC_VERSION__ >= 201710L -# define C_VERSION "17" -#elif __STDC_VERSION__ >= 201000L -# define C_VERSION "11" -#elif __STDC_VERSION__ >= 199901L -# define C_VERSION "99" -#else -# define C_VERSION "90" -#endif -const char* info_language_standard_default = - "INFO" ":" "standard_default[" C_VERSION "]"; - -const char* info_language_extensions_default = "INFO" ":" "extensions_default[" -#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ - defined(__TI_COMPILER_VERSION__)) && \ - !defined(__STRICT_ANSI__) - "ON" -#else - "OFF" -#endif -"]"; - -/*--------------------------------------------------------------------------*/ - -#ifdef ID_VOID_MAIN -void main() {} -#else -# if defined(__CLASSIC_C__) -int main(argc, argv) int argc; char *argv[]; -# else -int main(int argc, char* argv[]) -# endif -{ - int require = 0; - require += info_compiler[argc]; - require += info_platform[argc]; - require += info_arch[argc]; -#ifdef COMPILER_VERSION_MAJOR - require += info_version[argc]; -#endif -#ifdef COMPILER_VERSION_INTERNAL - require += info_version_internal[argc]; -#endif -#ifdef SIMULATE_ID - require += info_simulate[argc]; -#endif -#ifdef SIMULATE_VERSION_MAJOR - require += info_simulate_version[argc]; -#endif -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) - require += info_cray[argc]; -#endif - require += info_language_standard_default[argc]; - require += info_language_extensions_default[argc]; - (void)argv; - return require; -} -#endif diff --git a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp deleted file mode 100644 index 9a5e8f8ce..000000000 --- a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CompilerIdCXX/CMakeCXXCompilerId.cpp +++ /dev/null @@ -1,878 +0,0 @@ -/* This source file must have a .cpp extension so that all C++ compilers - recognize the extension without flags. Borland does not know .cxx for - example. */ -#ifndef __cplusplus -# error "A C compiler has been selected for C++." -#endif - -#if !defined(__has_include) -/* If the compiler does not have __has_include, pretend the answer is - always no. */ -# define __has_include(x) 0 -#endif - - -/* Version number components: V=Version, R=Revision, P=Patch - Version date components: YYYY=Year, MM=Month, DD=Day */ - -#if defined(__INTEL_COMPILER) || defined(__ICC) -# define COMPILER_ID "Intel" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# if defined(__GNUC__) -# define SIMULATE_ID "GNU" -# endif - /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, - except that a few beta releases use the old format with V=2021. */ -# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) -# if defined(__INTEL_COMPILER_UPDATE) -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) -# else -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) -# endif -# else -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) - /* The third version component from --version is an update index, - but no macro is provided for it. */ -# define COMPILER_VERSION_PATCH DEC(0) -# endif -# if defined(__INTEL_COMPILER_BUILD_DATE) - /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ -# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) -# endif -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# if defined(__GNUC__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -# elif defined(__GNUG__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) -# endif -# if defined(__GNUC_MINOR__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -# endif -# if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) -# define COMPILER_ID "IntelLLVM" -#if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -#endif -#if defined(__GNUC__) -# define SIMULATE_ID "GNU" -#endif -/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and - * later. Look for 6 digit vs. 8 digit version number to decide encoding. - * VVVV is no smaller than the current year when a version is released. - */ -#if __INTEL_LLVM_COMPILER < 1000000L -# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) -#else -# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) -# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) -#endif -#if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -#endif -#if defined(__GNUC__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -#elif defined(__GNUG__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) -#endif -#if defined(__GNUC_MINOR__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -#endif -#if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -#endif - -#elif defined(__PATHCC__) -# define COMPILER_ID "PathScale" -# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) -# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) -# if defined(__PATHCC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) -# endif - -#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) -# define COMPILER_ID "Embarcadero" -# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) -# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) -# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) - -#elif defined(__BORLANDC__) -# define COMPILER_ID "Borland" - /* __BORLANDC__ = 0xVRR */ -# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) -# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) - -#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 -# define COMPILER_ID "Watcom" - /* __WATCOMC__ = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__WATCOMC__) -# define COMPILER_ID "OpenWatcom" - /* __WATCOMC__ = VVRP + 1100 */ -# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__SUNPRO_CC) -# define COMPILER_ID "SunPro" -# if __SUNPRO_CC >= 0x5100 - /* __SUNPRO_CC = 0xVRRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) -# else - /* __SUNPRO_CC = 0xVRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) -# endif - -#elif defined(__HP_aCC) -# define COMPILER_ID "HP" - /* __HP_aCC = VVRRPP */ -# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) -# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) - -#elif defined(__DECCXX) -# define COMPILER_ID "Compaq" - /* __DECCXX_VER = VVRRTPPPP */ -# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) -# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) -# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) - -#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) -# define COMPILER_ID "zOS" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__open_xl__) && defined(__clang__) -# define COMPILER_ID "IBMClang" -# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) -# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) -# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) - - -#elif defined(__ibmxl__) && defined(__clang__) -# define COMPILER_ID "XLClang" -# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) -# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) -# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) - - -#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 -# define COMPILER_ID "XL" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 -# define COMPILER_ID "VisualAge" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__NVCOMPILER) -# define COMPILER_ID "NVHPC" -# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) -# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) -# if defined(__NVCOMPILER_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) -# endif - -#elif defined(__PGI) -# define COMPILER_ID "PGI" -# define COMPILER_VERSION_MAJOR DEC(__PGIC__) -# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) -# if defined(__PGIC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) -# endif - -#elif defined(__clang__) && defined(__cray__) -# define COMPILER_ID "CrayClang" -# define COMPILER_VERSION_MAJOR DEC(__cray_major__) -# define COMPILER_VERSION_MINOR DEC(__cray_minor__) -# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) -# define COMPILER_VERSION_INTERNAL_STR __clang_version__ - - -#elif defined(_CRAYC) -# define COMPILER_ID "Cray" -# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) -# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) - -#elif defined(__TI_COMPILER_VERSION__) -# define COMPILER_ID "TI" - /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ -# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) -# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) -# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) - -#elif defined(__CLANG_FUJITSU) -# define COMPILER_ID "FujitsuClang" -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# define COMPILER_VERSION_INTERNAL_STR __clang_version__ - - -#elif defined(__FUJITSU) -# define COMPILER_ID "Fujitsu" -# if defined(__FCC_version__) -# define COMPILER_VERSION __FCC_version__ -# elif defined(__FCC_major__) -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# endif -# if defined(__fcc_version) -# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) -# elif defined(__FCC_VERSION) -# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) -# endif - - -#elif defined(__ghs__) -# define COMPILER_ID "GHS" -/* __GHS_VERSION_NUMBER = VVVVRP */ -# ifdef __GHS_VERSION_NUMBER -# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) -# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) -# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) -# endif - -#elif defined(__TASKING__) -# define COMPILER_ID "Tasking" - # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) - # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) -# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) - -#elif defined(__ORANGEC__) -# define COMPILER_ID "OrangeC" -# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) -# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) -# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) - -#elif defined(__SCO_VERSION__) -# define COMPILER_ID "SCO" - -#elif defined(__ARMCC_VERSION) && !defined(__clang__) -# define COMPILER_ID "ARMCC" -#if __ARMCC_VERSION >= 1000000 - /* __ARMCC_VERSION = VRRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#else - /* __ARMCC_VERSION = VRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#endif - - -#elif defined(__clang__) && defined(__apple_build_version__) -# define COMPILER_ID "AppleClang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) - -#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) -# define COMPILER_ID "ARMClang" - # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) -# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) - -#elif defined(__clang__) && defined(__ti__) -# define COMPILER_ID "TIClang" - # define COMPILER_VERSION_MAJOR DEC(__ti_major__) - # define COMPILER_VERSION_MINOR DEC(__ti_minor__) - # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) -# define COMPILER_VERSION_INTERNAL DEC(__ti_version__) - -#elif defined(__clang__) -# define COMPILER_ID "Clang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) -# define COMPILER_ID "LCC" -# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) -# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) -# if defined(__LCC_MINOR__) -# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) -# endif -# if defined(__GNUC__) && defined(__GNUC_MINOR__) -# define SIMULATE_ID "GNU" -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -# if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif -# endif - -#elif defined(__GNUC__) || defined(__GNUG__) -# define COMPILER_ID "GNU" -# if defined(__GNUC__) -# define COMPILER_VERSION_MAJOR DEC(__GNUC__) -# else -# define COMPILER_VERSION_MAJOR DEC(__GNUG__) -# endif -# if defined(__GNUC_MINOR__) -# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) -# endif -# if defined(__GNUC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif defined(_MSC_VER) -# define COMPILER_ID "MSVC" - /* _MSC_VER = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) -# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) -# if defined(_MSC_FULL_VER) -# if _MSC_VER >= 1400 - /* _MSC_FULL_VER = VVRRPPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) -# else - /* _MSC_FULL_VER = VVRRPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) -# endif -# endif -# if defined(_MSC_BUILD) -# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) -# endif - -#elif defined(_ADI_COMPILER) -# define COMPILER_ID "ADSP" -#if defined(__VERSIONNUM__) - /* __VERSIONNUM__ = 0xVVRRPPTT */ -# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) -# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) -# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) -# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) -#endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# define COMPILER_ID "IAR" -# if defined(__VER__) && defined(__ICCARM__) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) -# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) -# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) -# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) -# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# endif - - -/* These compilers are either not known or too old to define an - identification macro. Try to identify the platform and guess that - it is the native compiler. */ -#elif defined(__hpux) || defined(__hpua) -# define COMPILER_ID "HP" - -#else /* unknown compiler */ -# define COMPILER_ID "" -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; -#ifdef SIMULATE_ID -char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; -#endif - -#ifdef __QNXNTO__ -char const* qnxnto = "INFO" ":" "qnxnto[]"; -#endif - -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) -char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; -#endif - -#define STRINGIFY_HELPER(X) #X -#define STRINGIFY(X) STRINGIFY_HELPER(X) - -/* Identify known platforms by name. */ -#if defined(__linux) || defined(__linux__) || defined(linux) -# define PLATFORM_ID "Linux" - -#elif defined(__MSYS__) -# define PLATFORM_ID "MSYS" - -#elif defined(__CYGWIN__) -# define PLATFORM_ID "Cygwin" - -#elif defined(__MINGW32__) -# define PLATFORM_ID "MinGW" - -#elif defined(__APPLE__) -# define PLATFORM_ID "Darwin" - -#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) -# define PLATFORM_ID "Windows" - -#elif defined(__FreeBSD__) || defined(__FreeBSD) -# define PLATFORM_ID "FreeBSD" - -#elif defined(__NetBSD__) || defined(__NetBSD) -# define PLATFORM_ID "NetBSD" - -#elif defined(__OpenBSD__) || defined(__OPENBSD) -# define PLATFORM_ID "OpenBSD" - -#elif defined(__sun) || defined(sun) -# define PLATFORM_ID "SunOS" - -#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) -# define PLATFORM_ID "AIX" - -#elif defined(__hpux) || defined(__hpux__) -# define PLATFORM_ID "HP-UX" - -#elif defined(__HAIKU__) -# define PLATFORM_ID "Haiku" - -#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) -# define PLATFORM_ID "BeOS" - -#elif defined(__QNX__) || defined(__QNXNTO__) -# define PLATFORM_ID "QNX" - -#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) -# define PLATFORM_ID "Tru64" - -#elif defined(__riscos) || defined(__riscos__) -# define PLATFORM_ID "RISCos" - -#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) -# define PLATFORM_ID "SINIX" - -#elif defined(__UNIX_SV__) -# define PLATFORM_ID "UNIX_SV" - -#elif defined(__bsdos__) -# define PLATFORM_ID "BSDOS" - -#elif defined(_MPRAS) || defined(MPRAS) -# define PLATFORM_ID "MP-RAS" - -#elif defined(__osf) || defined(__osf__) -# define PLATFORM_ID "OSF1" - -#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) -# define PLATFORM_ID "SCO_SV" - -#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) -# define PLATFORM_ID "ULTRIX" - -#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) -# define PLATFORM_ID "Xenix" - -#elif defined(__WATCOMC__) -# if defined(__LINUX__) -# define PLATFORM_ID "Linux" - -# elif defined(__DOS__) -# define PLATFORM_ID "DOS" - -# elif defined(__OS2__) -# define PLATFORM_ID "OS2" - -# elif defined(__WINDOWS__) -# define PLATFORM_ID "Windows3x" - -# elif defined(__VXWORKS__) -# define PLATFORM_ID "VxWorks" - -# else /* unknown platform */ -# define PLATFORM_ID -# endif - -#elif defined(__INTEGRITY) -# if defined(INT_178B) -# define PLATFORM_ID "Integrity178" - -# else /* regular Integrity */ -# define PLATFORM_ID "Integrity" -# endif - -# elif defined(_ADI_COMPILER) -# define PLATFORM_ID "ADSP" - -#else /* unknown platform */ -# define PLATFORM_ID - -#endif - -/* For windows compilers MSVC and Intel we can determine - the architecture of the compiler being used. This is because - the compilers do not have flags that can change the architecture, - but rather depend on which compiler is being used -*/ -#if defined(_WIN32) && defined(_MSC_VER) -# if defined(_M_IA64) -# define ARCHITECTURE_ID "IA64" - -# elif defined(_M_ARM64EC) -# define ARCHITECTURE_ID "ARM64EC" - -# elif defined(_M_X64) || defined(_M_AMD64) -# define ARCHITECTURE_ID "x64" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# elif defined(_M_ARM64) -# define ARCHITECTURE_ID "ARM64" - -# elif defined(_M_ARM) -# if _M_ARM == 4 -# define ARCHITECTURE_ID "ARMV4I" -# elif _M_ARM == 5 -# define ARCHITECTURE_ID "ARMV5I" -# else -# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) -# endif - -# elif defined(_M_MIPS) -# define ARCHITECTURE_ID "MIPS" - -# elif defined(_M_SH) -# define ARCHITECTURE_ID "SHx" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__WATCOMC__) -# if defined(_M_I86) -# define ARCHITECTURE_ID "I86" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# if defined(__ICCARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__ICCRX__) -# define ARCHITECTURE_ID "RX" - -# elif defined(__ICCRH850__) -# define ARCHITECTURE_ID "RH850" - -# elif defined(__ICCRL78__) -# define ARCHITECTURE_ID "RL78" - -# elif defined(__ICCRISCV__) -# define ARCHITECTURE_ID "RISCV" - -# elif defined(__ICCAVR__) -# define ARCHITECTURE_ID "AVR" - -# elif defined(__ICC430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__ICCV850__) -# define ARCHITECTURE_ID "V850" - -# elif defined(__ICC8051__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__ICCSTM8__) -# define ARCHITECTURE_ID "STM8" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__ghs__) -# if defined(__PPC64__) -# define ARCHITECTURE_ID "PPC64" - -# elif defined(__ppc__) -# define ARCHITECTURE_ID "PPC" - -# elif defined(__ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__x86_64__) -# define ARCHITECTURE_ID "x64" - -# elif defined(__i386__) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__clang__) && defined(__ti__) -# if defined(__ARM_ARCH) -# define ARCHITECTURE_ID "Arm" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__TI_COMPILER_VERSION__) -# if defined(__TI_ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__MSP430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__TMS320C28XX__) -# define ARCHITECTURE_ID "TMS320C28x" - -# elif defined(__TMS320C6X__) || defined(_TMS320C6X) -# define ARCHITECTURE_ID "TMS320C6x" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -# elif defined(__ADSPSHARC__) -# define ARCHITECTURE_ID "SHARC" - -# elif defined(__ADSPBLACKFIN__) -# define ARCHITECTURE_ID "Blackfin" - -#elif defined(__TASKING__) - -# if defined(__CTC__) || defined(__CPTC__) -# define ARCHITECTURE_ID "TriCore" - -# elif defined(__CMCS__) -# define ARCHITECTURE_ID "MCS" - -# elif defined(__CARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__CARC__) -# define ARCHITECTURE_ID "ARC" - -# elif defined(__C51__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__CPCP__) -# define ARCHITECTURE_ID "PCP" - -# else -# define ARCHITECTURE_ID "" -# endif - -#else -# define ARCHITECTURE_ID -#endif - -/* Convert integer to decimal digit literals. */ -#define DEC(n) \ - ('0' + (((n) / 10000000)%10)), \ - ('0' + (((n) / 1000000)%10)), \ - ('0' + (((n) / 100000)%10)), \ - ('0' + (((n) / 10000)%10)), \ - ('0' + (((n) / 1000)%10)), \ - ('0' + (((n) / 100)%10)), \ - ('0' + (((n) / 10)%10)), \ - ('0' + ((n) % 10)) - -/* Convert integer to hex digit literals. */ -#define HEX(n) \ - ('0' + ((n)>>28 & 0xF)), \ - ('0' + ((n)>>24 & 0xF)), \ - ('0' + ((n)>>20 & 0xF)), \ - ('0' + ((n)>>16 & 0xF)), \ - ('0' + ((n)>>12 & 0xF)), \ - ('0' + ((n)>>8 & 0xF)), \ - ('0' + ((n)>>4 & 0xF)), \ - ('0' + ((n) & 0xF)) - -/* Construct a string literal encoding the version number. */ -#ifdef COMPILER_VERSION -char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; - -/* Construct a string literal encoding the version number components. */ -#elif defined(COMPILER_VERSION_MAJOR) -char const info_version[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', - COMPILER_VERSION_MAJOR, -# ifdef COMPILER_VERSION_MINOR - '.', COMPILER_VERSION_MINOR, -# ifdef COMPILER_VERSION_PATCH - '.', COMPILER_VERSION_PATCH, -# ifdef COMPILER_VERSION_TWEAK - '.', COMPILER_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct a string literal encoding the internal version number. */ -#ifdef COMPILER_VERSION_INTERNAL -char const info_version_internal[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', - 'i','n','t','e','r','n','a','l','[', - COMPILER_VERSION_INTERNAL,']','\0'}; -#elif defined(COMPILER_VERSION_INTERNAL_STR) -char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; -#endif - -/* Construct a string literal encoding the version number components. */ -#ifdef SIMULATE_VERSION_MAJOR -char const info_simulate_version[] = { - 'I', 'N', 'F', 'O', ':', - 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', - SIMULATE_VERSION_MAJOR, -# ifdef SIMULATE_VERSION_MINOR - '.', SIMULATE_VERSION_MINOR, -# ifdef SIMULATE_VERSION_PATCH - '.', SIMULATE_VERSION_PATCH, -# ifdef SIMULATE_VERSION_TWEAK - '.', SIMULATE_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; -char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; - - - -#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L -# if defined(__INTEL_CXX11_MODE__) -# if defined(__cpp_aggregate_nsdmi) -# define CXX_STD 201402L -# else -# define CXX_STD 201103L -# endif -# else -# define CXX_STD 199711L -# endif -#elif defined(_MSC_VER) && defined(_MSVC_LANG) -# define CXX_STD _MSVC_LANG -#else -# define CXX_STD __cplusplus -#endif - -const char* info_language_standard_default = "INFO" ":" "standard_default[" -#if CXX_STD > 202002L - "23" -#elif CXX_STD > 201703L - "20" -#elif CXX_STD >= 201703L - "17" -#elif CXX_STD >= 201402L - "14" -#elif CXX_STD >= 201103L - "11" -#else - "98" -#endif -"]"; - -const char* info_language_extensions_default = "INFO" ":" "extensions_default[" -#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ - defined(__TI_COMPILER_VERSION__)) && \ - !defined(__STRICT_ANSI__) - "ON" -#else - "OFF" -#endif -"]"; - -/*--------------------------------------------------------------------------*/ - -int main(int argc, char* argv[]) -{ - int require = 0; - require += info_compiler[argc]; - require += info_platform[argc]; - require += info_arch[argc]; -#ifdef COMPILER_VERSION_MAJOR - require += info_version[argc]; -#endif -#ifdef COMPILER_VERSION_INTERNAL - require += info_version_internal[argc]; -#endif -#ifdef SIMULATE_ID - require += info_simulate[argc]; -#endif -#ifdef SIMULATE_VERSION_MAJOR - require += info_simulate_version[argc]; -#endif -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) - require += info_cray[argc]; -#endif - require += info_language_standard_default[argc]; - require += info_language_extensions_default[argc]; - (void)argv; - return require; -} diff --git a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeConfigureLog.yaml b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeConfigureLog.yaml deleted file mode 100644 index b2d70035b..000000000 --- a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeConfigureLog.yaml +++ /dev/null @@ -1,556 +0,0 @@ - ---- -events: - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake:205 (message)" - - "CMakeLists.txt:20 (project)" - message: | - The system is: Linux - 5.15.133.1-microsoft-standard-WSL2 - x86_64 - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:17 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCCompiler.cmake:123 (CMAKE_DETERMINE_COMPILER_ID)" - - "CMakeLists.txt:20 (project)" - message: | - Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. - Compiler: /usr/bin/gcc-11 - Build flags: - Id flags: - - The output was: - 0 - - - Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" - - The C compiler identification is GNU, found in: - /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CompilerIdC/a.out - - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:17 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)" - - "CMakeLists.txt:20 (project)" - message: | - Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. - Compiler: /usr/bin/x86_64-linux-gnu-g++-11 - Build flags: - Id flags: - - The output was: - 0 - - - Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" - - The CXX compiler identification is GNU, found in: - /home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/3.29.3/CompilerIdCXX/a.out - - - - kind: "try_compile-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:67 (try_compile)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:20 (project)" - checks: - - "Detecting C compiler ABI info" - directories: - source: "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeScratch/TryCompile-xUW7UH" - binary: "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeScratch/TryCompile-xUW7UH" - cmakeVariables: - CMAKE_C_FLAGS: "" - buildResult: - variable: "CMAKE_C_ABI_COMPILED" - cached: true - stdout: | - Change Dir: '/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeScratch/TryCompile-xUW7UH' - - Run Build Command(s): /usr/bin/ninja -v cmTC_c01e1 - [1/2] /usr/bin/gcc-11 -fdiagnostics-color=always -v -o CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCCompilerABI.c - Using built-in specs. - COLLECT_GCC=/usr/bin/gcc-11 - OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-linux-gnu - Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) - COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c01e1.dir/' - /usr/lib/gcc/x86_64-linux-gnu/11/cc1 -quiet -v -imultiarch x86_64-linux-gnu /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_c01e1.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccoEEKAv.s - GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) - compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP - - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" - ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed" - ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include" - #include "..." search starts here: - #include <...> search starts here: - /usr/lib/gcc/x86_64-linux-gnu/11/include - /usr/local/include - /usr/include/x86_64-linux-gnu - /usr/include - End of search list. - GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) - compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP - - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - Compiler executable checksum: 50eaa2331df977b8016186198deb2d18 - COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c01e1.dir/' - as -v --64 -o CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o /tmp/ccoEEKAv.s - GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38 - COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.' - [2/2] : && /usr/bin/gcc-11 -v -Wl,-v -rdynamic CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o -o cmTC_c01e1 && : - Using built-in specs. - COLLECT_GCC=/usr/bin/gcc-11 - COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper - OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-linux-gnu - Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) - COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_c01e1' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_c01e1.' - /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccntBB8o.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_c01e1 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o - collect2 version 11.4.0 - /usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccntBB8o.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_c01e1 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o - GNU ld (GNU Binutils for Ubuntu) 2.38 - COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_c01e1' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_c01e1.' - - exitCode: 0 - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:137 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:20 (project)" - message: | - Parsed C implicit include dir info: rv=done - found start of include info - found start of implicit include info - add: [/usr/lib/gcc/x86_64-linux-gnu/11/include] - add: [/usr/local/include] - add: [/usr/include/x86_64-linux-gnu] - add: [/usr/include] - end of search list found - collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/11/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/11/include] - collapse include dir [/usr/local/include] ==> [/usr/local/include] - collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] - collapse include dir [/usr/include] ==> [/usr/include] - implicit include dirs: [/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] - - - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:173 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:20 (project)" - message: | - Parsed C implicit link information: - link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] - linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)] - ignore line: [Change Dir: '/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeScratch/TryCompile-xUW7UH'] - ignore line: [] - ignore line: [Run Build Command(s): /usr/bin/ninja -v cmTC_c01e1] - ignore line: [[1/2] /usr/bin/gcc-11 -fdiagnostics-color=always -v -o CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCCompilerABI.c] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/gcc-11] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-linux-gnu] - ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] - ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c01e1.dir/'] - ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/cc1 -quiet -v -imultiarch x86_64-linux-gnu /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_c01e1.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccoEEKAv.s] - ignore line: [GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] - ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] - ignore line: [] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed"] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include"] - ignore line: [#include "..." search starts here:] - ignore line: [#include <...> search starts here:] - ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/include] - ignore line: [ /usr/local/include] - ignore line: [ /usr/include/x86_64-linux-gnu] - ignore line: [ /usr/include] - ignore line: [End of search list.] - ignore line: [GNU C17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] - ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] - ignore line: [] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [Compiler executable checksum: 50eaa2331df977b8016186198deb2d18] - ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c01e1.dir/'] - ignore line: [ as -v --64 -o CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o /tmp/ccoEEKAv.s] - ignore line: [GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38] - ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.'] - ignore line: [[2/2] : && /usr/bin/gcc-11 -v -Wl -v -rdynamic CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o -o cmTC_c01e1 && :] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/gcc-11] - ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-linux-gnu] - ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] - ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_c01e1' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_c01e1.'] - link line: [ /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccntBB8o.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_c01e1 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/collect2] ==> ignore - arg [-plugin] ==> ignore - arg [/usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so] ==> ignore - arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccntBB8o.res] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [--build-id] ==> ignore - arg [--eh-frame-hdr] ==> ignore - arg [-m] ==> ignore - arg [elf_x86_64] ==> ignore - arg [--hash-style=gnu] ==> ignore - arg [--as-needed] ==> ignore - arg [-export-dynamic] ==> ignore - arg [-dynamic-linker] ==> ignore - arg [/lib64/ld-linux-x86-64.so.2] ==> ignore - arg [-pie] ==> ignore - arg [-znow] ==> ignore - arg [-zrelro] ==> ignore - arg [-o] ==> ignore - arg [cmTC_c01e1] ==> ignore - arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] - arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] - arg [-L/lib/../lib] ==> dir [/lib/../lib] - arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] - arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] - arg [-v] ==> ignore - arg [CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o] ==> ignore - arg [-lgcc] ==> lib [gcc] - arg [--push-state] ==> ignore - arg [--as-needed] ==> ignore - arg [-lgcc_s] ==> lib [gcc_s] - arg [--pop-state] ==> ignore - arg [-lc] ==> lib [c] - arg [-lgcc] ==> lib [gcc] - arg [--push-state] ==> ignore - arg [--as-needed] ==> ignore - arg [-lgcc_s] ==> lib [gcc_s] - arg [--pop-state] ==> ignore - arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] - ignore line: [collect2 version 11.4.0] - ignore line: [/usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/ccntBB8o.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_c01e1 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_c01e1.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] - linker tool for 'C': /usr/bin/ld - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11] ==> [/usr/lib/gcc/x86_64-linux-gnu/11] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> [/usr/lib] - collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] - collapse library dir [/lib/../lib] ==> [/lib] - collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] - collapse library dir [/usr/lib/../lib] ==> [/usr/lib] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> [/usr/lib] - implicit libs: [gcc;gcc_s;c;gcc;gcc_s] - implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] - implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] - implicit fwks: [] - - - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:210 (cmake_determine_linker_id)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:20 (project)" - message: | - Running the C compiler's linker: "/usr/bin/ld" "-v" - GNU ld (GNU Binutils for Ubuntu) 2.38 - - - kind: "try_compile-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:67 (try_compile)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:20 (project)" - checks: - - "Detecting CXX compiler ABI info" - directories: - source: "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeScratch/TryCompile-wg5nzn" - binary: "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeScratch/TryCompile-wg5nzn" - cmakeVariables: - CMAKE_CXX_FLAGS: "" - CMAKE_CXX_SCAN_FOR_MODULES: "OFF" - buildResult: - variable: "CMAKE_CXX_ABI_COMPILED" - cached: true - stdout: | - Change Dir: '/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeScratch/TryCompile-wg5nzn' - - Run Build Command(s): /usr/bin/ninja -v cmTC_010b1 - [1/2] /usr/bin/x86_64-linux-gnu-g++-11 -fdiagnostics-color=always -v -o CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp - Using built-in specs. - COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11 - OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-linux-gnu - Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) - COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_010b1.dir/' - /usr/lib/gcc/x86_64-linux-gnu/11/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_010b1.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cczUv8BJ.s - GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) - compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP - - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/11" - ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" - ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed" - ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include" - #include "..." search starts here: - #include <...> search starts here: - /usr/include/c++/11 - /usr/include/x86_64-linux-gnu/c++/11 - /usr/include/c++/11/backward - /usr/lib/gcc/x86_64-linux-gnu/11/include - /usr/local/include - /usr/include/x86_64-linux-gnu - /usr/include - End of search list. - GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu) - compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP - - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - Compiler executable checksum: d591828bb4d392ae8b7b160e5bb0b95f - COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_010b1.dir/' - as -v --64 -o CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o /tmp/cczUv8BJ.s - GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38 - COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.' - [2/2] : && /usr/bin/x86_64-linux-gnu-g++-11 -v -Wl,-v -rdynamic CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_010b1 && : - Using built-in specs. - COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11 - COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper - OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-linux-gnu - Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) - COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_010b1' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_010b1.' - /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/cc4zGlQJ.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_010b1 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o - collect2 version 11.4.0 - /usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/cc4zGlQJ.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_010b1 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o - GNU ld (GNU Binutils for Ubuntu) 2.38 - COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_010b1' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_010b1.' - - exitCode: 0 - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:137 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:20 (project)" - message: | - Parsed CXX implicit include dir info: rv=done - found start of include info - found start of implicit include info - add: [/usr/include/c++/11] - add: [/usr/include/x86_64-linux-gnu/c++/11] - add: [/usr/include/c++/11/backward] - add: [/usr/lib/gcc/x86_64-linux-gnu/11/include] - add: [/usr/local/include] - add: [/usr/include/x86_64-linux-gnu] - add: [/usr/include] - end of search list found - collapse include dir [/usr/include/c++/11] ==> [/usr/include/c++/11] - collapse include dir [/usr/include/x86_64-linux-gnu/c++/11] ==> [/usr/include/x86_64-linux-gnu/c++/11] - collapse include dir [/usr/include/c++/11/backward] ==> [/usr/include/c++/11/backward] - collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/11/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/11/include] - collapse include dir [/usr/local/include] ==> [/usr/local/include] - collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] - collapse include dir [/usr/include] ==> [/usr/include] - implicit include dirs: [/usr/include/c++/11;/usr/include/x86_64-linux-gnu/c++/11;/usr/include/c++/11/backward;/usr/lib/gcc/x86_64-linux-gnu/11/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] - - - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:173 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:20 (project)" - message: | - Parsed CXX implicit link information: - link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] - linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)] - ignore line: [Change Dir: '/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/CMakeFiles/CMakeScratch/TryCompile-wg5nzn'] - ignore line: [] - ignore line: [Run Build Command(s): /usr/bin/ninja -v cmTC_010b1] - ignore line: [[1/2] /usr/bin/x86_64-linux-gnu-g++-11 -fdiagnostics-color=always -v -o CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o -c /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-linux-gnu] - ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] - ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_010b1.dir/'] - ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_010b1.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fdiagnostics-color=always -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cczUv8BJ.s] - ignore line: [GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] - ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] - ignore line: [] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/11"] - ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/include-fixed"] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include"] - ignore line: [#include "..." search starts here:] - ignore line: [#include <...> search starts here:] - ignore line: [ /usr/include/c++/11] - ignore line: [ /usr/include/x86_64-linux-gnu/c++/11] - ignore line: [ /usr/include/c++/11/backward] - ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/11/include] - ignore line: [ /usr/local/include] - ignore line: [ /usr/include/x86_64-linux-gnu] - ignore line: [ /usr/include] - ignore line: [End of search list.] - ignore line: [GNU C++17 (Ubuntu 11.4.0-1ubuntu1~22.04) version 11.4.0 (x86_64-linux-gnu)] - ignore line: [ compiled by GNU C version 11.4.0 GMP version 6.2.1 MPFR version 4.1.0 MPC version 1.2.1 isl version isl-0.24-GMP] - ignore line: [] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [Compiler executable checksum: d591828bb4d392ae8b7b160e5bb0b95f] - ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_010b1.dir/'] - ignore line: [ as -v --64 -o CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o /tmp/cczUv8BJ.s] - ignore line: [GNU assembler version 2.38 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.38] - ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.'] - ignore line: [[2/2] : && /usr/bin/x86_64-linux-gnu-g++-11 -v -Wl -v -rdynamic CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_010b1 && :] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/x86_64-linux-gnu-g++-11] - ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-linux-gnu] - ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) ] - ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_010b1' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_010b1.'] - link line: [ /usr/lib/gcc/x86_64-linux-gnu/11/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/cc4zGlQJ.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_010b1 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/collect2] ==> ignore - arg [-plugin] ==> ignore - arg [/usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so] ==> ignore - arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/cc4zGlQJ.res] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [--build-id] ==> ignore - arg [--eh-frame-hdr] ==> ignore - arg [-m] ==> ignore - arg [elf_x86_64] ==> ignore - arg [--hash-style=gnu] ==> ignore - arg [--as-needed] ==> ignore - arg [-export-dynamic] ==> ignore - arg [-dynamic-linker] ==> ignore - arg [/lib64/ld-linux-x86-64.so.2] ==> ignore - arg [-pie] ==> ignore - arg [-znow] ==> ignore - arg [-zrelro] ==> ignore - arg [-o] ==> ignore - arg [cmTC_010b1] ==> ignore - arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] - arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] - arg [-L/lib/../lib] ==> dir [/lib/../lib] - arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] - arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] - arg [-L/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] - arg [-v] ==> ignore - arg [CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore - arg [-lstdc++] ==> lib [stdc++] - arg [-lm] ==> lib [m] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [-lc] ==> lib [c] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o] - arg [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] - ignore line: [collect2 version 11.4.0] - ignore line: [/usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper -plugin-opt=-fresolution=/tmp/cc4zGlQJ.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_010b1 /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/11 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/11/../../.. -v CMakeFiles/cmTC_010b1.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] - linker tool for 'CXX': /usr/bin/ld - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o] ==> [/usr/lib/x86_64-linux-gnu/Scrt1.o] - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o] ==> [/usr/lib/x86_64-linux-gnu/crti.o] - collapse obj [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o] ==> [/usr/lib/x86_64-linux-gnu/crtn.o] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11] ==> [/usr/lib/gcc/x86_64-linux-gnu/11] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib] ==> [/usr/lib] - collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] - collapse library dir [/lib/../lib] ==> [/lib] - collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] - collapse library dir [/usr/lib/../lib] ==> [/usr/lib] - collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/11/../../..] ==> [/usr/lib] - implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] - implicit objs: [/usr/lib/x86_64-linux-gnu/Scrt1.o;/usr/lib/x86_64-linux-gnu/crti.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o;/usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o;/usr/lib/x86_64-linux-gnu/crtn.o] - implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/11;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] - implicit fwks: [] - - - - - kind: "message-v1" - backtrace: - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:210 (cmake_determine_linker_id)" - - "/home/austenharrell/Qt/Tools/CMake/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt:20 (project)" - message: | - Running the CXX compiler's linker: "/usr/bin/ld" "-v" - GNU ld (GNU Binutils for Ubuntu) 2.38 -... diff --git a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/cmake.check_cache b/build/Desktop_Qt_6_8_0-Release/CMakeFiles/cmake.check_cache deleted file mode 100644 index 3dccd7317..000000000 --- a/build/Desktop_Qt_6_8_0-Release/CMakeFiles/cmake.check_cache +++ /dev/null @@ -1 +0,0 @@ -# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/build/Desktop_Qt_6_8_0-Release/ninja_version.h b/build/Desktop_Qt_6_8_0-Release/ninja_version.h deleted file mode 100644 index 367f13b7c..000000000 --- a/build/Desktop_Qt_6_8_0-Release/ninja_version.h +++ /dev/null @@ -1,39 +0,0 @@ -/****************************************************************************** - * - * Project: WindNinja - * Purpose: general disclaimer for windninja - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef NINJA_VERSION_H_ -#define NINJA_VERSION_H_ - -#define NINJA_VERSION_MAJOR 3 -#define NINJA_VERSION_MINOR 11 -#define NINJA_VERSION_PATCH 0 -#define NINJA_VERSION_STRING "3.11.0" -#define NINJA_SCM_VERSION "6a8269d2034eabbb8a28bee5e6b77c628838dbd1" -#define NINJA_RELEASE_DATE "2025/01/28" - -#endif /* NINJA_VERSION_H_ */ - diff --git a/build/Desktop_Qt_6_8_0-Release/qtcsettings.cmake b/build/Desktop_Qt_6_8_0-Release/qtcsettings.cmake deleted file mode 100644 index 62ee7d015..000000000 --- a/build/Desktop_Qt_6_8_0-Release/qtcsettings.cmake +++ /dev/null @@ -1,10 +0,0 @@ -# This file is managed by Qt Creator, do not edit! - -set("CMAKE_GENERATOR" "Ninja" CACHE "STRING" "" FORCE) -set("QT_QMAKE_EXECUTABLE" "/home/austenharrell/Qt/6.8.0/gcc_64/bin/qmake" CACHE "FILEPATH" "" FORCE) -set("CMAKE_CXX_FLAGS_INIT" "" CACHE "STRING" "" FORCE) -set("CMAKE_PROJECT_INCLUDE_BEFORE" "/home/austenharrell/school/2025_Spring/windninja/build/Desktop_Qt_6_8_0-Release/.qtc/package-manager/auto-setup.cmake" CACHE "FILEPATH" "" FORCE) -set("CMAKE_CXX_COMPILER" "/usr/bin/x86_64-linux-gnu-g++-11" CACHE "FILEPATH" "" FORCE) -set("CMAKE_C_COMPILER" "/usr/bin/gcc-11" CACHE "FILEPATH" "" FORCE) -set("CMAKE_BUILD_TYPE" "Release" CACHE "STRING" "" FORCE) -set("CMAKE_PREFIX_PATH" "/home/austenharrell/Qt/6.8.0/gcc_64" CACHE "PATH" "" FORCE) \ No newline at end of file diff --git a/test.file b/test.file deleted file mode 100644 index e69de29bb..000000000 diff --git a/test.txt b/test.txt deleted file mode 100644 index e69de29bb..000000000 From dd5d6025058e4f24ba1ede0204078c086ae8b268 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 4 Jun 2025 11:04:44 -0600 Subject: [PATCH 049/435] found hard coded path, that caused dem fetching to fail, reverted back to standard path method "grep -r vboxuser" and "Documents" didn't reveal any other hard coded paths that could cause trouble --- src/ninja/fetch_factory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ninja/fetch_factory.cpp b/src/ninja/fetch_factory.cpp index a5b513f82..9e6fbc757 100644 --- a/src/ninja/fetch_factory.cpp +++ b/src/ninja/fetch_factory.cpp @@ -48,7 +48,7 @@ SurfaceFetch* FetchFactory::GetSurfaceFetch(FetchType type, std::string path) if( type == WORLD_GMTED ) { - p = FindDataPath("/home/vboxuser/Documents/windninja/data/surface_data.zip"); + p = FindDataPath("surface_data.zip"); pszPath = CPLFormFilename("/vsizip/", p.c_str(), NULL); #ifdef HAVE_GMTED pszPath = CPLFormFilename(pszPath, "gmted", ".vrt"); From fd06c15aece062ede932eb817814cb7771b504eb Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 4 Jun 2025 11:58:44 -0600 Subject: [PATCH 050/435] changed map.htm to map.html in all the various places --- CMakeLists.txt | 2 +- src/gui/WidgetDownloadDEM.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d0dfbc66d..afe1a97a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -465,7 +465,7 @@ set(share_files date_time_zonespec.csv config_options.csv tz_world.zip landfire.zip - map.htm + map.html qt_certs_bundle.pem thredds.csv surface_data.zip diff --git a/src/gui/WidgetDownloadDEM.cpp b/src/gui/WidgetDownloadDEM.cpp index 9130b7161..a2c1298da 100644 --- a/src/gui/WidgetDownloadDEM.cpp +++ b/src/gui/WidgetDownloadDEM.cpp @@ -186,7 +186,7 @@ void WidgetDownloadDEM::setupGM() this->wvGoogleMaps->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); this->wvGoogleMaps->setPage(new QWebPage()); wvGoogleMaps->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); - this->wvGoogleMaps->load(QUrl(QString(CPLFormFilename("file:///", (FindDataPath("map.htm").c_str()), NULL)))); + this->wvGoogleMaps->load(QUrl(QString(CPLFormFilename("file:///", (FindDataPath("map.html").c_str()), NULL)))); //enable QWebInspector for degugging google maps widget if(CSLTestBoolean(CPLGetConfigOption("ENABLE_QWEBINSPECTOR", "NO"))) From f6d0374c6371656f7c55b2889d323c6987e3db00 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 4 Jun 2025 12:00:46 -0600 Subject: [PATCH 051/435] attempting to make CMake stop finding qt4 and qt5 libs alongside qt6 libs --- src/gui/qt6/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt index 2e002e79b..c750dfafe 100755 --- a/src/gui/qt6/CMakeLists.txt +++ b/src/gui/qt6/CMakeLists.txt @@ -9,7 +9,7 @@ set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) +find_package(QT NAMES Qt6 REQUIRED COMPONENTS Widgets) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets WebEngineWidgets) From aee1521f3b2cb213d34ba718db6d904f16e1b0ba Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 4 Jun 2025 12:14:53 -0600 Subject: [PATCH 052/435] added build_deps script for ubuntu 22.04 with qt6 builds. Had to drop build* from the .gitignore to be able to go back to easily adding the file. Note that there are still some kinks to work out with the sudo apt install qt6 libs, the full list is in the script, but might be able to pair it down to fewer libs. This is also building with all the old dependencies, including boost old boost, so it needs some pairing down in that way as well --- .gitignore | 1 - scripts/build_deps_ubuntu_2204.sh | 76 +++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100755 scripts/build_deps_ubuntu_2204.sh diff --git a/.gitignore b/.gitignore index a9fc8e412..c5f080564 100644 --- a/.gitignore +++ b/.gitignore @@ -29,7 +29,6 @@ # Build folder debug* -build* # Doxygen doxy.tag diff --git a/scripts/build_deps_ubuntu_2204.sh b/scripts/build_deps_ubuntu_2204.sh new file mode 100755 index 000000000..d1d86bd0d --- /dev/null +++ b/scripts/build_deps_ubuntu_2204.sh @@ -0,0 +1,76 @@ +#!/bin/bash + +# Set installation directories and versions +PREFIX=/usr/local +POPPLER="poppler-22.02.0" +PROJ="proj-8.2.1" +GDAL="gdal-3.4.1" + +# Install necessary dependencies +sudo apt install -y libfontconfig1-dev \ + libcurl4-gnutls-dev \ + libnetcdf-dev \ + libboost-program-options-dev \ + libboost-date-time-dev \ + libgeos-dev \ + libboost-test-dev \ + libsqlite3-dev \ + sqlite3 \ + libopenjp2-7-dev \ + libtiff-dev + + +# Install Poppler for PDF support in GDAL +wget https://poppler.freedesktop.org/$POPPLER.tar.xz +tar -xvf $POPPLER.tar.xz +cd $POPPLER/ +mkdir build +cd build +cmake -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DTESTDATADIR=$PWD/testfiles \ + -DENABLE_UNSTABLE_API_ABI_HEADERS=ON \ + .. +make -j$(nproc) # Use all available cores for faster compilation +sudo make install +cd ../.. + +# Install PROJ +wget https://download.osgeo.org/proj/$PROJ.tar.gz +tar xvfz $PROJ.tar.gz +cd $PROJ +./configure --prefix=$PREFIX +make clean +make -j$(nproc) +sudo make install +cd .. + +# Install GDAL with Poppler support +wget https://download.osgeo.org/gdal/${GDAL:5}/$GDAL.tar.gz +tar -xvf $GDAL.tar.gz +cd $GDAL/ +./configure --prefix=$PREFIX --with-poppler=$PREFIX +make -j$(nproc) +sudo make install +cd .. + +# Install qt6 libs +sudo apt install qt6-base-dev + +sudo apt install qt6-webengine-dev +sudo apt install qt6-webengine-dev-tools + +sudo apt install libqt6webenginecore6-bin + +##sudo apt install qt6-tools-dev +##sudo apt install qt6-tools-dev-tools + + +# Use OpenFOAM 9; OpenFOAM 8 not available for Ubuntu 22.04 +# add the dl.openfoam.org repo and install OpenFOAM 9 +sudo sh -c "wget -O - https://dl.openfoam.org/gpg.key > /etc/apt/trusted.gpg.d/openfoam.asc" +sudo add-apt-repository http://dl.openfoam.org/ubuntu +sudo apt update +sudo apt install -y openfoam9 +echo "source /opt/openfoam9/etc/bashrc" >> ~/.bashrc + From a874af10eb46745291cc5f91d7a9850a39aff874 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 4 Jun 2025 12:16:43 -0600 Subject: [PATCH 053/435] changed map.html fetch() command to a manual open and parsing of the raw file, because fetch() on non-url file:/// is not allowed without some kind of security override, which QtCreator does behind the scenes, I couldn't figure out how to do such an override with the sudo apt install qt6 libraries. This allows the kmz output to be loaded into the gui again. --- data/map.html | 11 +++++++---- src/gui/qt6/mainwindow.cpp | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/data/map.html b/data/map.html index aaa02e51c..3ea03c357 100755 --- a/data/map.html +++ b/data/map.html @@ -329,12 +329,15 @@ document.getElementById("radius").removeEventListener("input", update_center); } - async function loadKmzFromUrl(kmzUrl) { + async function loadKmzFromBase64(base64Data) { try { - const response = await fetch(kmzUrl); - const arrayBuffer = await response.arrayBuffer(); + const binary = atob(base64Data); + const bytes = new Uint8Array(binary.length); + for (let i = 0; i < binary.length; i++) { + bytes[i] = binary.charCodeAt(i); + } - const zip = await JSZip.loadAsync(arrayBuffer); + const zip = await JSZip.loadAsync(bytes.buffer); const kmlFiles = Object.values(zip.files).filter(entry => entry.name.toLowerCase().endsWith('.kml') ); diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index e59380af0..976d9eed7 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -803,12 +803,15 @@ void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int colu void MainWindow::loadMapKMZ(const std::vector& input){ for (const auto& dir : input) { - QString qDir = QString::fromStdString(dir).replace("\"", "\\\""); // escape quotes - QString jsCall = QString("loadKmzFromUrl(\"%1\");").arg(qDir); + QString qDir = QString::fromStdString(dir); - webView->page()->runJavaScript(jsCall); - } + QFile f(qDir); + f.open(QIODevice::ReadOnly); + QByteArray data = f.readAll(); + QString base64 = data.toBase64(); + webView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + } } From 9e37120131fc63371c12ddd8cbca91c6912cbeef Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 12 Jun 2025 15:52:31 -0600 Subject: [PATCH 054/435] Added app icon --- src/gui/qt6/main.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/qt6/main.cpp b/src/gui/qt6/main.cpp index a4299a2c7..25c4c65f7 100755 --- a/src/gui/qt6/main.cpp +++ b/src/gui/qt6/main.cpp @@ -17,6 +17,10 @@ int main(int argc, char *argv[]) { // Immediately pull timezone data QTimer::singleShot(0, &w, &MainWindow::timeZoneDataRequest); + QIcon icon(":/wn-icon.png"); + a.setWindowIcon(icon); + w.setWindowIcon(icon); + w.show(); return a.exec(); } From 394ca5f2936e9cfac2c1885fc813721fc51fccac Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 13 Jun 2025 10:17:31 -0600 Subject: [PATCH 055/435] Removed old GUI files and change project name to WindNinja --- CMakeLists.txt | 7 +- src/gui/CMakeLists.txt | 218 +- src/gui/GoogleMapsInterface.cpp | 35 - src/gui/GoogleMapsInterface.h | 53 - src/gui/WidgetDownloadDEM.cpp | 585 ----- src/gui/WidgetDownloadDEM.h | 132 -- src/gui/WidgetDownloadDEM.ui | 177 -- src/gui/WindNinjaTree.cpp | 294 --- src/gui/WindNinjaTree.h | 139 -- src/gui/{qt6 => }/appstate.h | 0 src/gui/cmake_gui.cpp | 120 - src/gui/consoleDockWidget.cpp | 79 - src/gui/consoleDockWidget.h | 63 - src/gui/{qt6 => }/controller.cpp | 0 src/gui/{qt6 => }/controller.h | 0 src/gui/diurnalInput.cpp | 53 - src/gui/diurnalInput.h | 72 - src/gui/fbOutput.cpp | 91 - src/gui/fbOutput.h | 63 - src/gui/googleOutput.cpp | 174 -- src/gui/googleOutput.h | 82 - src/gui/latLonWidget.cpp | 491 ---- src/gui/latLonWidget.h | 127 - src/gui/{qt6 => }/main.cpp | 2 +- src/gui/mainWindow.cpp | 3702 ------------------------------ src/gui/mainWindow.h | 301 --- src/gui/{qt6 => }/mainwindow.cpp | 0 src/gui/{qt6 => }/mainwindow.h | 0 src/gui/mainwindow.ui | 3515 ++++++++++++++++++++++++---- src/gui/metaWindWidget.cpp | 100 - src/gui/metaWindWidget.h | 79 - src/gui/{qt6 => }/modeldata.h | 0 src/gui/nativeSolverInput.cpp | 61 - src/gui/nativeSolverInput.h | 44 - src/gui/ninjafoamInput.cpp | 66 - src/gui/ninjafoamInput.h | 43 - src/gui/outputHeightWidget.cpp | 98 - src/gui/outputHeightWidget.h | 63 - src/gui/outputMetaData.cpp | 87 - src/gui/outputMetaData.h | 64 - src/gui/pdfOutput.cpp | 133 -- src/gui/pdfOutput.h | 74 - src/gui/pointInput.cpp | 1019 -------- src/gui/pointInput.h | 187 -- src/gui/{qt6 => }/provider.cpp | 2 +- src/gui/{qt6 => }/provider.h | 0 src/gui/qt6/.gitignore | 78 - src/gui/qt6/CMakeLists.txt | 85 - src/gui/qt6/mainwindow.ui | 3242 -------------------------- src/gui/setconfigdialog.cpp | 25 - src/gui/setconfigdialog.h | 25 - src/gui/setconfigdialog.ui | 88 - src/gui/shapeOutput.cpp | 88 - src/gui/shapeOutput.h | 63 - src/gui/solvePage.cpp | 128 -- src/gui/solvePage.h | 82 - src/gui/solveThread.cpp | 133 -- src/gui/solveThread.h | 50 - src/gui/splash.cpp | 143 -- src/gui/splash.h | 83 - src/gui/stabilityInput.cpp | 56 - src/gui/stabilityInput.h | 43 - src/gui/stationFetchWidget.cpp | 528 ----- src/gui/stationFetchWidget.h | 101 - src/gui/stationFetchWidget.ui | 381 --- src/gui/surfaceInput.cpp | 159 -- src/gui/surfaceInput.h | 98 - src/gui/timeZoneWidget.cpp | 286 --- src/gui/timeZoneWidget.h | 86 - src/gui/ui/CMakeLists.txt | 40 - src/gui/ui/main.cpp | 11 - src/gui/ui/mainwindow.cpp | 140 -- src/gui/ui/mainwindow.h | 49 - src/gui/ui/mainwindow.ui | 857 ------- src/gui/ui/windninja.qrc | 9 - src/gui/vec3f.cpp | 167 -- src/gui/vec3f.h | 91 - src/gui/vtkOutput.cpp | 64 - src/gui/vtkOutput.h | 55 - src/gui/weatherModel.cpp | 769 ------- src/gui/weatherModel.h | 187 -- src/gui/windInput.cpp | 67 - src/gui/windInput.h | 61 - src/gui/windInputTable.cpp | 196 -- src/gui/windInputTable.h | 91 - src/ninja/CMakeLists.txt | 3 +- 86 files changed, 3177 insertions(+), 18426 deletions(-) mode change 100644 => 100755 src/gui/CMakeLists.txt delete mode 100644 src/gui/GoogleMapsInterface.cpp delete mode 100644 src/gui/GoogleMapsInterface.h delete mode 100644 src/gui/WidgetDownloadDEM.cpp delete mode 100644 src/gui/WidgetDownloadDEM.h delete mode 100644 src/gui/WidgetDownloadDEM.ui delete mode 100644 src/gui/WindNinjaTree.cpp delete mode 100644 src/gui/WindNinjaTree.h rename src/gui/{qt6 => }/appstate.h (100%) delete mode 100644 src/gui/cmake_gui.cpp delete mode 100644 src/gui/consoleDockWidget.cpp delete mode 100644 src/gui/consoleDockWidget.h rename src/gui/{qt6 => }/controller.cpp (100%) rename src/gui/{qt6 => }/controller.h (100%) delete mode 100644 src/gui/diurnalInput.cpp delete mode 100644 src/gui/diurnalInput.h delete mode 100644 src/gui/fbOutput.cpp delete mode 100644 src/gui/fbOutput.h delete mode 100644 src/gui/googleOutput.cpp delete mode 100644 src/gui/googleOutput.h delete mode 100644 src/gui/latLonWidget.cpp delete mode 100644 src/gui/latLonWidget.h rename src/gui/{qt6 => }/main.cpp (91%) delete mode 100644 src/gui/mainWindow.cpp delete mode 100644 src/gui/mainWindow.h rename src/gui/{qt6 => }/mainwindow.cpp (100%) rename src/gui/{qt6 => }/mainwindow.h (100%) delete mode 100644 src/gui/metaWindWidget.cpp delete mode 100644 src/gui/metaWindWidget.h rename src/gui/{qt6 => }/modeldata.h (100%) delete mode 100644 src/gui/nativeSolverInput.cpp delete mode 100644 src/gui/nativeSolverInput.h delete mode 100644 src/gui/ninjafoamInput.cpp delete mode 100644 src/gui/ninjafoamInput.h delete mode 100644 src/gui/outputHeightWidget.cpp delete mode 100644 src/gui/outputHeightWidget.h delete mode 100644 src/gui/outputMetaData.cpp delete mode 100644 src/gui/outputMetaData.h delete mode 100644 src/gui/pdfOutput.cpp delete mode 100644 src/gui/pdfOutput.h delete mode 100644 src/gui/pointInput.cpp delete mode 100644 src/gui/pointInput.h rename src/gui/{qt6 => }/provider.cpp (96%) rename src/gui/{qt6 => }/provider.h (100%) delete mode 100644 src/gui/qt6/.gitignore delete mode 100755 src/gui/qt6/CMakeLists.txt delete mode 100644 src/gui/qt6/mainwindow.ui delete mode 100644 src/gui/setconfigdialog.cpp delete mode 100644 src/gui/setconfigdialog.h delete mode 100644 src/gui/setconfigdialog.ui delete mode 100644 src/gui/shapeOutput.cpp delete mode 100644 src/gui/shapeOutput.h delete mode 100644 src/gui/solvePage.cpp delete mode 100644 src/gui/solvePage.h delete mode 100644 src/gui/solveThread.cpp delete mode 100644 src/gui/solveThread.h delete mode 100644 src/gui/splash.cpp delete mode 100644 src/gui/splash.h delete mode 100644 src/gui/stabilityInput.cpp delete mode 100644 src/gui/stabilityInput.h delete mode 100644 src/gui/stationFetchWidget.cpp delete mode 100644 src/gui/stationFetchWidget.h delete mode 100644 src/gui/stationFetchWidget.ui delete mode 100644 src/gui/surfaceInput.cpp delete mode 100644 src/gui/surfaceInput.h delete mode 100644 src/gui/timeZoneWidget.cpp delete mode 100644 src/gui/timeZoneWidget.h delete mode 100644 src/gui/ui/CMakeLists.txt delete mode 100644 src/gui/ui/main.cpp delete mode 100644 src/gui/ui/mainwindow.cpp delete mode 100644 src/gui/ui/mainwindow.h delete mode 100644 src/gui/ui/mainwindow.ui delete mode 100644 src/gui/ui/windninja.qrc delete mode 100644 src/gui/vec3f.cpp delete mode 100644 src/gui/vec3f.h delete mode 100644 src/gui/vtkOutput.cpp delete mode 100644 src/gui/vtkOutput.h delete mode 100644 src/gui/weatherModel.cpp delete mode 100644 src/gui/weatherModel.h delete mode 100644 src/gui/windInput.cpp delete mode 100644 src/gui/windInput.h delete mode 100644 src/gui/windInputTable.cpp delete mode 100644 src/gui/windInputTable.h diff --git a/CMakeLists.txt b/CMakeLists.txt index af0249e96..13e6bb58e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -126,16 +126,11 @@ ELSE(USE_VCPKG) find_package(GDAL REQUIRED) endif(WIN32) endif(USE_VCPKG) -option(NINJA_QT5GUI "build Qt5 experimental GUI" OFF) -if(NINJA_QT5GUI) - message("building qt5 gui") - add_subdirectory(src/gui/ui) -endif(NINJA_QT5GUI) option(NINJA_QT6GUI "build Qt6 experimental GUI" ON) if(NINJA_QT6GUI) message("building qt6 gui") - add_subdirectory(src/gui/qt6) + add_subdirectory(src/gui) endif(NINJA_QT6GUI) if(USE_VCPKG) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt old mode 100644 new mode 100755 index d26a0554a..4c8b50e13 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -1,133 +1,85 @@ -# THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) -# MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT -# IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 -# OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT -# PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES -# LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER -# PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, -# RELIABILITY, OR ANY OTHER CHARACTERISTIC. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -# DEALINGS IN THE SOFTWARE. - -cmake_minimum_required(VERSION 2.6) - -QT4_WRAP_UI(QTUI_H_SRCS WidgetDownloadDEM.ui - setconfigdialog.ui - stationFetchWidget.ui) - -set(NINJA_GUI_INCLUDES consoleDockWidget.h - diurnalInput.h - stabilityInput.h - fbOutput.h - googleOutput.h - latLonWidget.h - mainWindow.h - metaWindWidget.h - nativeSolverInput.h - ninjafoamInput.h - outputHeightWidget.h - outputMetaData.h - pdfOutput.h - pointInput.h - shapeOutput.h - solvePage.h - solveThread.h - splash.h - surfaceInput.h - timeZoneWidget.h - #vec3f.h - vtkOutput.h - weatherModel.h - WidgetDownloadDEM.h - stationFetchWidget.h - windInput.h - windInputTable.h - WindNinjaTree.h - GoogleMapsInterface.h - setconfigdialog.h - ${QTUI_H_SRCS}) - -include_directories(${QT_INCLUDES} - ${Boost_INCLUDE_DIRS} - ${NETCDF_INCLUDES} - ${GDAL_SYSTEM_INCLUDE} ${GDAL_INCLUDE_DIR} - ${CURL_INCLUDE_DIR} - ${PROJECT_SOURCE_DIR}/src - ${PROJECT_SOURCE_DIR}/src/ninja - ${CMAKE_CURRENT_BINARY_DIR}) - -QT4_WRAP_CPP(NINJA_GUI_INCLUDES_MOC ${NINJA_GUI_INCLUDES}) -QT4_ADD_RESOURCES(NINJA_GUI_RESOURCES ${PROJECT_SOURCE_DIR}/wn-resources.qrc) - -set(NINJA_GUI_SOURCES cmake_gui.cpp - ${PROJECT_SOURCE_DIR}/src/ninja/cli.cpp - consoleDockWidget.cpp - diurnalInput.cpp - stabilityInput.cpp - fbOutput.cpp - googleOutput.cpp - latLonWidget.cpp - mainWindow.cpp - metaWindWidget.cpp - outputHeightWidget.cpp - outputMetaData.cpp - nativeSolverInput.cpp - ninjafoamInput.cpp - pdfOutput.cpp - pointInput.cpp - shapeOutput.cpp - solvePage.cpp - solveThread.cpp - splash.cpp - surfaceInput.cpp - timeZoneWidget.cpp - vec3f.cpp - vtkOutput.cpp - weatherModel.cpp - windInput.cpp - windInputTable.cpp - WindNinjaTree.cpp - WidgetDownloadDEM.cpp - stationFetchWidget.cpp - GoogleMapsInterface.cpp - setconfigdialog.cpp - ${QTUI_H_SRCS}) -if(WIN32) - set(NINJA_GUI_SOURCES ${NINJA_GUI_SOURCES} - ${PROJECT_SOURCE_DIR}/wn-ms-resource.rc) - add_definitions(-DQT_NO_DEBUG_OUTPUT) -endif(WIN32) - -set(LINK_LIBS ${QT_LIBRARIES} - ${GDAL_LIBRARY} - ${Boost_LIBRARIES} - ${CURL_LIBRARIES} - ${NETCDF_LIBRARIES_C}) - -if(WIN32) - set(LINK_LIBS ${LINK_LIBS} ${PROJECT_BINARY_DIR}/src/ninja/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}ninja${CMAKE_STATIC_LIBRARY_SUFFIX}) - if(NOT ENABLE_CONSOLE) - set(LINK_LIBS ${LINK_LIBS} ${QT_QTMAIN_LIBRARY}) - set(GUI_TYPE WIN32) - else(NOT ENABLE_CONSOLE) - set(GUI_TYPE "") - endif(NOT ENABLE_CONSOLE) -else(WIN32) - set(LINK_LIBS ${LINK_LIBS} ${PROJECT_BINARY_DIR}/src/ninja/${CMAKE_SHARED_LIBRARY_PREFIX}ninja${CMAKE_SHARED_LIBRARY_SUFFIX}) -endif(WIN32) - -add_executable(WindNinja ${GUI_TYPE} - ${NINJA_GUI_INCLUDES_MOC} - ${NINJA_GUI_RESOURCES} - ${NINJA_GUI_SOURCES}) - -target_link_libraries(WindNinja ${LINK_LIBS}) -add_dependencies(WindNinja ninja) -install(TARGETS WindNinja DESTINATION bin COMPONENT apps) - +cmake_minimum_required(VERSION 3.16) + +project(WindNinja VERSION 0.1 LANGUAGES CXX) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(QT NAMES Qt6 REQUIRED COMPONENTS Widgets) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets WebEngineWidgets) + +set(PROJECT_SOURCES + main.cpp + mainwindow.cpp + mainwindow.h + mainwindow.ui +) + +if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) + qt_add_executable(WindNinja + MANUAL_FINALIZATION + ${PROJECT_SOURCES} + ${CMAKE_SOURCE_DIR}/wn-resources.qrc + appstate.h + provider.cpp + modeldata.h provider.h + controller.h + controller.cpp + + ) +# Define target properties for Android with Qt 6 as: +# set_property(TARGET WindNinja APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR +# ${CMAKE_CURRENT_SOURCE_DIR}/android) +# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation +else() + if(ANDROID) + add_library(WindNinja SHARED + ${PROJECT_SOURCES} + ) +# Define properties for Android with Qt 5 after find_package() calls as: +# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") + else() + add_executable(WindNinja + ${PROJECT_SOURCES} + ) + endif() +endif() + +target_include_directories(WindNinja PRIVATE /usr/local/include) + +add_dependencies(WindNinja ninja) + +add_definitions(-DMAP_PATH="${CMAKE_SOURCE_DIR}/data/map.html") + + +target_link_libraries(WindNinja PRIVATE Qt${QT_VERSION_MAJOR}::Widgets PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets PRIVATE ninja) + +# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. +# If you are developing for iOS or macOS you should consider setting an +# explicit, fixed bundle identifier manually though. +if(${QT_VERSION} VERSION_LESS 6.1.0) + set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.WindNinja) +endif() +set_target_properties(WindNinja PROPERTIES + ${BUNDLE_ID_OPTION} + MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} + MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} + MACOSX_BUNDLE TRUE + WIN32_EXECUTABLE TRUE +) + +include(GNUInstallDirs) +install(TARGETS WindNinja + BUNDLE DESTINATION . + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) + +if(QT_VERSION_MAJOR EQUAL 6) + qt_finalize_executable(WindNinja) +endif() diff --git a/src/gui/GoogleMapsInterface.cpp b/src/gui/GoogleMapsInterface.cpp deleted file mode 100644 index b7c271bc0..000000000 --- a/src/gui/GoogleMapsInterface.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/****************************************************************************** - * - * $Id: GoogleMapsInterface.cpp 1757 2012-08-07 18:40:40Z kyle.shannon $ - * - * Project: WindNinja - * Purpose: Class for creating an interface between javascript and Qt - * Author: Cody Posey - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "GoogleMapsInterface.h" - -GoogleMapsInterface::GoogleMapsInterface(QObject *parent) - : QObject(parent) -{ -} diff --git a/src/gui/GoogleMapsInterface.h b/src/gui/GoogleMapsInterface.h deleted file mode 100644 index f9fb7d08b..000000000 --- a/src/gui/GoogleMapsInterface.h +++ /dev/null @@ -1,53 +0,0 @@ -/****************************************************************************** - * - * $Id: GoogleMapsInterface.h 1757 2012-08-07 18:40:40Z kyle.shannon $ - * - * Project: WindNinja - * Purpose: Class for creating an interface between javascript and Qt - * Author: Cody Posey - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ -#ifndef GOOGLE_MAPS_INTERFACE_H_ -#define GOOGLE_MAPS_INTERFACE_H_ -#include - -class GoogleMapsInterface : public QObject -{ - Q_OBJECT - -public: - GoogleMapsInterface(QObject *parent = 0); - -signals: - void latlngChanged(double lat, double lng); - void latlngChangedGUI(double lat, double lng); - void plotUserPoint(); - void zoomExtents(); - void boundsChanged(double northBound, double southBound, double eastBound, double westBound); - void boundsChangedGUI(double northBound, double southBound, double eastBound, double westBound); - void bufferChanged(); - void areaSelected(bool selected); - void geocodeError(); -}; - -#endif /* GOOGLE_MAPS_INTERFACE_H_ */ - diff --git a/src/gui/WidgetDownloadDEM.cpp b/src/gui/WidgetDownloadDEM.cpp deleted file mode 100644 index ebc80e161..000000000 --- a/src/gui/WidgetDownloadDEM.cpp +++ /dev/null @@ -1,585 +0,0 @@ -/****************************************************************************** - * - * $Id: WidgetDownloadDEM.cpp 1757 2012-08-07 18:40:40Z kyle.shannon $ - * - * Project: WindNinja - * Purpose: DEM Downloader Window - * Author: Cody Posey - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "WidgetDownloadDEM.h" -//#include - -WidgetDownloadDEM::WidgetDownloadDEM(QWidget *parent) - : QWidget(parent) -{ - - //------------provide updated SSL certs in case system ones are outdated--------------------------------// - // qt_certs_bundle.pem generated on a windows system with the latest windows version of openssl installed - // certutil -generateSSTFromWU roots.sst - // certutil -split -f roots.sst - // type NUL > qt_certs_bundle.pem - // for %f in (*.crt) do (openssl x509 -inform der -in "%f" -out temp.pem && type temp.pem >> qt_certs_bundle.pem && del temp.pem) - // del *.crt - // for debugging on working systems, try disabling system certificates for testing, set it to an empty list of certificates - //QSslSocket::setDefaultCaCertificates(QList()); - // add the data folder SSL Ca certificates to the certificates list - std::string pathToSslCerts = FindDataPath("qt_certs_bundle.pem"); - QString pathToCerts = QString::fromStdString(pathToSslCerts); - QSslSocket::addDefaultCaCertificates( pathToCerts, QSsl::Pem, QRegExp::FixedString); - - demSelected = false; - - setupUi(this); - setupGM(); - initializeGoogleMapsInterface(); - connectInputs(); - this->readSettings(); - - progressBar = new QProgressDialog(this); - progressBar->setWindowModality(Qt::ApplicationModal); - progressBar->setAutoReset(false); - progressBar->setAutoClose(false); - - boundsError = NULL; - bufferError = NULL; - latlngError = NULL; - - //These are temporary values to store the points needed for DEM bounds - double northEast[2]; - double southEast[2]; - double southWest[2]; - double northWest[2]; - - fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::SRTM,""); - fetcher->GetCorners(northEast, southEast, southWest, northWest); - srtm_northBound = northEast[1]; - srtm_eastBound = northEast[0]; - srtm_westBound = southWest[0]; - srtm_southBound = southWest[1]; - delete fetcher; - -#ifdef HAVE_GMTED - fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::WORLD_GMTED,""); - fetcher->GetCorners(northEast, southEast, southWest, northWest); - world_gmted_northBound = northEast[1]; - world_gmted_eastBound = northEast[0]; - world_gmted_westBound = southWest[0]; - world_gmted_southBound = southWest[1]; - delete fetcher; -#endif - -#ifdef WITH_LCP_CLIENT - fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::LCP,""); - fetcher->GetCorners(northEast, southEast, southWest, northWest); - lcp_northBound = northEast[1]; - lcp_eastBound = northEast[0]; - lcp_westBound = southWest[0]; - lcp_southBound = southWest[1]; - delete fetcher; -#endif - -#ifndef HAVE_GMTED - this->cbDEMSource->removeItem(1); -#endif - -#ifndef WITH_LCP_CLIENT - this->cbDEMSource->removeItem(2); -#endif - - cbDEMSource->setItemData(0, "Partial world coverage Shuttle Radar Topography Mission data (SRTM) at 30 meter resolution. Any existing holes in the data have been filled.", Qt::ToolTipRole); -#ifdef HAVE_GMTED - cbDEMSource->setItemData(1, "World coverage Global Multi-resolution Terrain Elevation Data 2010 (GMTED2010) at 250 meter resolution.", Qt::ToolTipRole); -#endif -#ifdef WITH_LCP_CLIENT - cbDEMSource->setItemData(2, "US coverage LANDFIRE 2023 Landscape data at 30 meter resolution.", Qt::ToolTipRole); -#endif - updateDEMSource(cbDEMSource->currentIndex()); - - fileSize = 0; - -#ifdef ENABLE_FIDDLER - QNetworkProxy proxy; - proxy.setType(QNetworkProxy::HttpProxy); - proxy.setHostName("127.0.0.1"); - proxy.setPort(8888); - QNetworkProxy::setApplicationProxy(proxy); -#endif - - this->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint); - this->show(); -} - -/** - * @brief Deletes all allocated memory on destruction of class object - * - */ -WidgetDownloadDEM::~WidgetDownloadDEM() -{ - delete progressBar; - delete fetcher; - delete latlngError; - delete bufferError; - delete boundsError; - delete gmInterface; -} - -/** - * @brief Connect all SLOTS and SIGNALS in the Qt GUI - * - */ -void WidgetDownloadDEM::connectInputs() -{ - connect(btnDownloadDEM, SIGNAL(clicked()), this, SLOT(saveDEM())); - connect(cbDEMSource, SIGNAL(currentIndexChanged(int)), this, SLOT(updateDEMSource(int))); -} - -/** - * @brief Initialize the google maps interface and interface object - * - */ -void WidgetDownloadDEM::initializeGoogleMapsInterface() -{ - gmInterface = new GoogleMapsInterface(); - this->wvGoogleMaps->page()->mainFrame()->addToJavaScriptWindowObject("GMInterface", gmInterface); - connect(gmInterface, SIGNAL(zoomExtents()), this, SLOT(zoomToMidpoint())); -} - -/** - * @brief Clears listeners when changing selection method - * - */ -void WidgetDownloadDEM::clearListeners() -{ - this->wvGoogleMaps->page()->mainFrame()->evaluateJavaScript("clearListeners(); null"); -} - - -/** - * @brief Sets up the google map - * - */ -void WidgetDownloadDEM::setupGM() -{ - this->wvGoogleMaps->settings()->setAttribute(QWebSettings::JavascriptEnabled, true); - this->wvGoogleMaps->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); - this->wvGoogleMaps->setPage(new QWebPage()); - wvGoogleMaps->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); - this->wvGoogleMaps->load(QUrl(QString(CPLFormFilename("file:///", (FindDataPath("map.html").c_str()), NULL)))); - - //enable QWebInspector for degugging google maps widget - if(CSLTestBoolean(CPLGetConfigOption("ENABLE_QWEBINSPECTOR", "NO"))) - { - wvGoogleMaps->page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); - QWebInspector *i = new QWebInspector(this); - i->setPage(wvGoogleMaps->page()); - i->setVisible(true); - - dlg.setLayout(new QVBoxLayout()); - dlg.layout()->addWidget(i); - dlg.setModal(false); - dlg.show(); - dlg.raise(); - dlg.activateWindow(); - } -} - -/** - * @brief Download and save the current DEM area - * - */ -void WidgetDownloadDEM::saveDEM() -{ - QVariant mbr = wvGoogleMaps->page()->mainFrame()->evaluateJavaScript("mbr()"); - if(mbr.isNull()) { - qDebug()<<"no mbr"; - QMessageBox mbox; - mbox.setText("DEM bounding box not set. Select the DEM bounding box by using the bounding box drawing tool on the upper right corner of the map, entering a point and radius, or entering the bounding box coordinates."); - mbox.exec(); - return; - } - QVariantList mbrl = mbr.toList(); - if(mbrl.size() == 0) - { - QMessageBox mbox; - mbox.setText("DEM bounding box not set. Select the DEM bounding box by using the bounding box drawing tool on the upper right corner of the map, entering a point and radius, or entering the bounding box coordinates."); - mbox.exec(); - return; - } - for(int i=0; i < mbrl.size(); i++) { - qDebug() << mbrl[i]; - } - northBound = mbrl[3].toDouble(); - southBound = mbrl[2].toDouble(); - eastBound = mbrl[1].toDouble(); - westBound = mbrl[0].toDouble(); - demSelected = true; - - QString fileName; - double boundArray[] = {this->northBound, this->eastBound, this->southBound, this->westBound}; - double *boundBox; - boundBox = boundArray; - - if(northBound == 0.0 || southBound == 0.0 || eastBound == 0.0 || westBound == 0.0) - { - QMessageBox noBoundsError; - noBoundsError.setText("Please Select an Area on the Map"); - noBoundsError.exec(); - } - else if(!demSelected) - { - QMessageBox noBoundsError2; - noBoundsError2.setText("Please select an area on the map."); - noBoundsError2.exec(); - } - //else if(!demBoundsCheck()) - //{ - // QMessageBox demBoundsError; - // demBoundsError.setText("Area is outside data bounds. Please select new data Source or new Area."); - // demBoundsError.exec(); - //} - else if((fileSize/1024) > 50) - { - QMessageBox demBoundsError; - demBoundsError.setText("File size is limited to 50mb. Please select a smaller area."); - demBoundsError.exec(); - } - else if(cbDEMSource->currentIndex() == 0 && (CPLGetConfigOption("CUSTOM_SRTM_API_KEY", NULL) == NULL || CPLGetConfigOption("NINJA_GUI_SRTM_API_KEY", NULL) != NULL)) - { - QMessageBox apiKeyError; - apiKeyError.setText("API Key not specified. Please specify the environment variables NINJA_GUI_SRTM_API_KEY or CUSTOM_SRTM_API_KEY"); - apiKeyError.exec(); - } - else - { - QFileDialog saveDialog(this, tr("Save File"), demFileDir.absolutePath(), currentSaveAsDesc); - saveDialog.setDefaultSuffix(currentSuffix); - saveDialog.setAcceptMode(QFileDialog::AcceptSave); - if(saveDialog.exec()) - { - fileName = saveDialog.selectedFiles().at(0); - - QByteArray file = fileName.toLocal8Bit(); - demFile = file.data(); - - progressBar->setLabelText("Downloading File..."); - progressBar->setRange(0,0); - progressBar->setCancelButtonText("Cancel"); - progressBar->reset(); - bool test = progressBar->wasCanceled(); - - connect(&futureWatcher, SIGNAL(finished()), this, SLOT(updateProgress())); - connect(progressBar, SIGNAL(canceled()), this, SLOT(updateProgress())); - - futureWatcher.setFuture(QtConcurrent::run(this, &WidgetDownloadDEM::fetchBoundBox, boundBox, demFile, currentResolution)); - - progressBar->exec(); - } - } -} - -/** - * @brief Updates the progress bar and fills no data values - * - */ -void WidgetDownloadDEM::updateProgress() -{ - disconnect(progressBar, SIGNAL(canceled()), this, SLOT(updateProgress())); - disconnect(&futureWatcher, SIGNAL(finished()), this, SLOT(updateProgress())); - - if(progressBar->wasCanceled()) - { - progressBar->setLabelText("Canceling..."); - progressBar->setCancelButton(0); - futureWatcher.waitForFinished(); - VSIUnlink(demFile); - progressBar->cancel(); - } - else - { - futureWatcher.waitForFinished(); - int result = futureWatcher.result(); - - if(result < 0) - { - progressBar->setLabelText("The surface data download failed. \nThis can happen when either the data source doesn't cover your region or the server that provides the surface data is down or under high usage. \nPlease try again later or try a different data source."); - progressBar->setRange(0,1); - progressBar->setValue( 0 ); - progressBar->setCancelButtonText("Close"); - VSIUnlink(demFile); - } - else - { - if(result) - this->fillNoDataValues(demFile); - - progressBar->setValue(1); - progressBar->setRange(0,100); - progressBar->setValue(100); - progressBar->setLabelText("Download Successful"); - progressBar->setCancelButtonText("Close"); - - this->doneDownloading(demFile); - } - } -} - - -/** - * @brief Closes the DEM downloader - * - */ -void WidgetDownloadDEM::closeDEM() -{ - this->close(); -} - -/** - * @brief Fetches bounding box for DEM - * - * @param boundsBox Lat/Lon Bounds - * @param fileName Name of saved DEM file - * @param resolution Resolution for DEM - */ -int WidgetDownloadDEM::fetchBoundBox(double *boundsBox, const char *fileName, double resolution) -{ - int result = fetcher->FetchBoundingBox(boundsBox, resolution, fileName, NULL); - - return result; -} - -/** - * @brief Updates the DEM Source - * - * @param index Current index of the DEM source combo box - */ -void WidgetDownloadDEM::updateDEMSource(int index) -{ - switch(index){ - case 0: //SRTM - fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::SRTM, FindDataPath("/data")); - northDEMBound = srtm_northBound; - southDEMBound = srtm_southBound; - currentResolution = fetcher->GetXRes(); - currentSuffix = "tif"; - currentSaveAsDesc = "Elevation files (*.tif)"; - break; -#ifdef HAVE_GMTED - case 1: //GMTED - fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::WORLD_GMTED, FindDataPath("/data")); - northDEMBound = world_gmted_northBound; - southDEMBound = world_gmted_southBound; - currentResolution = (fetcher->GetXRes() * 111325); - currentSuffix = "tif"; - currentSaveAsDesc = "Elevation files (*.tif)"; - break; -#endif -#ifdef WITH_LCP_CLIENT - case 2: //LCP - fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::LCP, FindDataPath("/data")); - northDEMBound = lcp_northBound; - southDEMBound = lcp_southBound; - /* this is in meters */ - currentResolution = fetcher->GetXRes(); - currentSuffix = "tif"; - currentSaveAsDesc = "Landscape files (*.tif)"; - break; -#endif - } -} - -/** - * @brief Checks whether the current selected area is withing the current DEM bounds - * - */ -bool WidgetDownloadDEM::demBoundsCheck() -{ - QString checkBounds; - QString wktPoly; - QByteArray byteArray; - int contains; - //std::string oFile = FindDataPath( "us_srtm_region.shp" ); - std::string oFile = FindDataPath( "srtm_region.geojson" ); - const char *pszWkt; - switch(cbDEMSource->currentIndex()){ - case 0: //SRTM - wktPoly = - QString("POLYGON( (%1 %2, %3 %4, ").arg(westBound).arg(northBound).arg(eastBound).arg(northBound) + - QString("%1 %2, %3 %4, ").arg(eastBound).arg(southBound).arg(westBound).arg(southBound) + - QString("%1 %2) )").arg(westBound).arg(northBound); - byteArray = wktPoly.toUtf8(); - pszWkt = byteArray.constData(); - contains = NinjaOGRContain(pszWkt, oFile.c_str(), NULL); - if(contains) - { - return true; - } - else - return false; - case 1: //GMTED - if(northDEMBound < northBound || southDEMBound > southBound) - return false; - else - return true; - break; - case 2: //LCP - if(northDEMBound < northBound || southDEMBound > southBound) - return false; - else - return true; - break; - } -} - -/** - * @brief Pans to lat/lng point - * - */ -void WidgetDownloadDEM::zoomToMidpoint() -{ - QString midPoint = QString("zoomFitBounds(%1,%2,%3,%4);").arg(southBound).arg(westBound).arg(northBound).arg(eastBound); - wvGoogleMaps->page()->mainFrame()->evaluateJavaScript(midPoint); -} - -/** - * @brief Updates area selected for Est File Size and for downloading a DEM - * - * @param selected Whether an area has been selected - */ -void WidgetDownloadDEM::demSelectedUpdate(bool selected) -{ - demSelected = selected; -} - -/** - * @brief Uses GDAL utilities to fill any no data values in the file - * - * @param file The file containing DEM data - */ -void WidgetDownloadDEM::fillNoDataValues(const char* file) -{ - GDALDataset *poDS; - poDS = (GDALDataset*)GDALOpen(demFile, GA_Update); - int nNoDataValues; - if(GDALHasNoData(poDS, 1)) - { - nNoDataValues = GDALFillBandNoData(poDS, 1, 100); - /* Should we fill again? */ - if(nNoDataValues) - {} - } - GDALClose((GDALDatasetH)poDS); -} - -/** - * @brief Saves the current DEM settings - * - */ -void WidgetDownloadDEM::writeSettings() -{ - QSettings settings(QSettings::UserScope, "Firelab", "WindNinja"); - settings.setDefaultFormat(QSettings::IniFormat); - //Saves DEM Source to settings - settings.setValue("demSource", cbDEMSource->currentIndex()); - //Saves Current Lat/Lon Positions - settings.setValue("North", northBound); - settings.setValue("South", southBound); - settings.setValue("East", eastBound); - settings.setValue("West", westBound); - settings.setValue("Latitude", latitude); - settings.setValue("Longitude", longitude); - //Saves Download Path to settings - settings.setValue("downloadPath", settingsDir.absolutePath()); -} - -/** - * @brief Reads previous DEM settings - * - */ -void WidgetDownloadDEM::readSettings() -{ - QSettings settings(QSettings::UserScope, "Firelab", "WindNinja"); - settings.setDefaultFormat(QSettings::IniFormat); - - if(settings.contains("demSource")) - { - cbDEMSource->setCurrentIndex(settings.value("demSource").toInt()); - } - if(settings.contains("inputFileDir")) - { - demFileDir = settings.value("inputFileDir").toString(); - } - - if(settings.contains("North")) - { - northBound = settings.value("North").toDouble(); - } - - else - northBound = 44.0249023401036; - - if(settings.contains("South")) - { - southBound = settings.value("South").toDouble(); - } - else - southBound = 43.7832152227745; - - if(settings.contains("East")) - { - eastBound = settings.value("East").toDouble(); - } - else - eastBound = -113.463446144564; - if(settings.contains("West")) - { - westBound = settings.value("West").toDouble(); - } - else - westBound = -113.749693430469; - - if(settings.contains("Latitude")) - { - latitude = settings.value("Latitude").toDouble(); - } - else - latitude = -113.613611; - if(settings.contains("Longitude")) - { - longitude = settings.value("Longitude").toDouble(); - } - else - longitude = 43.911944; -} - -/** - * @brief Handles close events of GUI such as clicking X close icon - * - */ -void WidgetDownloadDEM::closeEvent(QCloseEvent *event) -{ - event->ignore(); - this->writeSettings(); - exitDEM(); - event->accept(); -} diff --git a/src/gui/WidgetDownloadDEM.h b/src/gui/WidgetDownloadDEM.h deleted file mode 100644 index c3471d0d5..000000000 --- a/src/gui/WidgetDownloadDEM.h +++ /dev/null @@ -1,132 +0,0 @@ -/****************************************************************************** - * - * $Id: WidgetDownloadDEM.h 1757 2012-08-07 18:40:40Z kyle.shannon $ - * - * Project: WindNinja - * Purpose: DEM Downloader Window - * Author: Cody Posey - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef WIGDET_DOWNLOAD_DEM_H_ -#define WIGDET_DOWNLOAD_DEM_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "fetch_factory.h" -#include "gdal_util.h" -#include "ninja_conv.h" -#include -#include -#include "ui_WidgetDownloadDEM.h" -#include "GoogleMapsInterface.h" - -#ifndef PI -#define PI 3.14159 -#endif - -class WidgetDownloadDEM : public QWidget, private Ui::WidgetDownloadDEM -{ - Q_OBJECT - -public: - WidgetDownloadDEM(QWidget *parent = 0); - ~WidgetDownloadDEM(); - QDir settingsDir; - void initializeGoogleMapsInterface(); - void setupGM(); - void connectInputs(); - void fillNoDataValues(const char* file); - void writeSettings(); - void readSettings(); - int fetchBoundBox(double *boundsBox, const char *fileName, double resolution); - -protected: - void closeEvent(QCloseEvent *event); - - private slots: - void clearListeners(); - void saveDEM(); - void updateProgress(); - void updateDEMSource(int index); - bool demBoundsCheck(); - void zoomToMidpoint(); - void demSelectedUpdate(bool selected); - void closeDEM(); - - signals: - void doneDownloading(const char* file); - void exitDEM(); - - -private: - QDialog dlg; - - double latitude; - double longitude; - double northBound; - double southBound; - double eastBound; - double westBound; - double srtm_southBound; - double srtm_westBound; - double srtm_northBound; - double srtm_eastBound; - double world_gmted_southBound; - double world_gmted_westBound; - double world_gmted_northBound; - double world_gmted_eastBound; - double lcp_southBound; - double lcp_westBound; - double lcp_northBound; - double lcp_eastBound; - double currentResolution; - - double northDEMBound; - double southDEMBound; - - double fileSize; - bool demSelected; - - const char *demFile; - QDir demFileDir; - QFutureWatcher futureWatcher; - QProgressDialog *progressBar; - QMessageBox *boundsError; - QMessageBox *bufferError; - QMessageBox *latlngError; - SurfaceFetch *fetcher; - GoogleMapsInterface* gmInterface; - QString currentSaveAsDesc; - QString currentSuffix; -}; - -#endif /* WIGDET_DOWNLOAD_DEM_H_ */ - diff --git a/src/gui/WidgetDownloadDEM.ui b/src/gui/WidgetDownloadDEM.ui deleted file mode 100644 index b8ff6a70f..000000000 --- a/src/gui/WidgetDownloadDEM.ui +++ /dev/null @@ -1,177 +0,0 @@ - - - WidgetDownloadDEM - - - - 0 - 0 - 820 - 674 - - - - Download elevation file - - - - :/wn-icon.png:/wn-icon.png - - - - - - - - - 0 - 0 - - - - OpenHandCursor - - - - about:blank - - - - QPainter::SmoothPixmapTransform|QPainter::TextAntialiasing - - - - - - - - - - - Data Source - - - - - - - - 0 - 0 - - - - - 135 - 20 - - - - - 135 - 20 - - - - - 8 - 50 - false - - - - 0 - - - 10 - - - QComboBox::AdjustToContentsOnFirstShow - - - - WORLD SRTM (30m) - - - - - WORLD GMTED (250m) - - - - - Landscape File - - - - - - - - - 10 - 50 - false - - - - Download the elevation file. - - - Qt::LeftToRight - - - Download File - - - - :/server_go.png - - - - Qt::ToolButtonTextBesideIcon - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - <html><head/><body><p>Map data © <a href="https://www.openstreetmap.org/"><span style=" text-decoration: underline; color:#0000ff;">OpenStreetMap </span></a><a href="https://creativecommons.org/licenses/by-sa/2.0/"><span style=" text-decoration: underline; color:#0000ff;">CC-BY-SA</span></a><a href="https://www.openstreetmap.org/"><span style=" text-decoration: underline; color:#0000ff;">, Imagery © </span></a><a href="https://www.mapbox.com/"><span style=" text-decoration: underline; color:#0000ff;">Mapbox</span></a><a href="https://www.openstreetmap.org/"><span style=" text-decoration: underline; color:#0000ff;"></span></a></p></body></html> - - - Qt::TextBrowserInteraction - - - - - - - - QWebView - QWidget -
QtWebKitWidgets/QWebView
-
-
- - - - - - slot1() - -
diff --git a/src/gui/WindNinjaTree.cpp b/src/gui/WindNinjaTree.cpp deleted file mode 100644 index 61597e1e0..000000000 --- a/src/gui/WindNinjaTree.cpp +++ /dev/null @@ -1,294 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Tree display for selecting input/output widgets. - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "WindNinjaTree.h" - -WindNinjaTree::WindNinjaTree(QWidget *parent) : QWidget(parent) -{ - createTree(); - createStack(); - createConnections(); - - layout = new QVBoxLayout; - layout->addWidget(tree); - layout->addWidget(stack); - setLayout(layout); - -} - -WindNinjaTree::~WindNinjaTree() -{ - -} - -void WindNinjaTree::createTree() -{ - createIcons(); - tree = new QTreeWidget; - tree->setColumnCount(1); - createInputItems(); -#ifdef NINJAFOAM - createSolverMethodItems(); -#endif - createOutputItems(); - - mainItem = new QTreeWidgetItem; - mainItem->setText(0, tr("WindNinja")); - - solveItem = new QTreeWidgetItem; - solveItem->setText(0, tr("Solve")); - solveItem->setIcon(0, blue); - - //add items in gui order - tree->setHeaderItem(mainItem); -#ifdef NINJAFOAM - tree->addTopLevelItem(solverMethodItem); - solverMethodItem->setExpanded(true); - solverMethodItem->setSelected(true); -#endif - tree->addTopLevelItem(inputItem); - inputItem->setExpanded(true); -#ifndef NINJAFOAM - surfaceItem->setSelected(true); -#endif - windItem->setExpanded(true); - tree->addTopLevelItem(diurnalItem); - tree->addTopLevelItem(stabilityItem); - tree->addTopLevelItem(outputItem); - outputItem->setExpanded(true); - tree->addTopLevelItem(solveItem); - solveItem->setExpanded(true); - - tree->setMinimumHeight(240); - //tree->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); -} - -void WindNinjaTree::createIcons() -{ - check.addFile(":tick.png"); - cross.addFile(":cross.png"); - caution.addFile(":jason_caution.png"); - blue.addFile(":bullet_blue.png"); - radio.addFile(":radio_bullet_blue.png"); - sun.addFile(":weather_sun.png"); -} - -#ifdef NINJAFOAM -void WindNinjaTree::createSolverMethodItems() -{ - solverMethodItem = new QTreeWidgetItem; - solverMethodItem->setIcon(0, blue); - solverMethodItem->setText(0, tr("Solver")); - - nativeSolverItem = new QTreeWidgetItem; - nativeSolverItem->setText(0, tr("Conservation of Mass")); - nativeSolverItem->setIcon(0, radio); - - solverMethodItem->addChild(nativeSolverItem); - - ninjafoamItem = new QTreeWidgetItem; - ninjafoamItem->setText(0, tr("Conservation of Mass and Momentum")); - ninjafoamItem->setIcon(0, radio); - - solverMethodItem->addChild(ninjafoamItem); -} -#endif //NINJAFOAM - -void WindNinjaTree::createInputItems() -{ - inputItem = new QTreeWidgetItem; - inputItem->setIcon(0, blue); - inputItem->setText(0, tr("Input")); - - //create input children, add them to input item - //surfaceItem - surfaceItem = new QTreeWidgetItem; - surfaceItem->setText(0, tr("Surface Input")); - surfaceItem->setIcon(0, blue); - - diurnalItem = new QTreeWidgetItem; - diurnalItem->setText(0, tr("Diurnal Input")); - diurnalItem->setIcon(0, blue); - - stabilityItem = new QTreeWidgetItem; - stabilityItem->setText(0, tr("Stability Input")); - stabilityItem->setIcon(0, blue); - - windItem = new QTreeWidgetItem; - windItem->setText(0, tr("Wind Input")); - windItem->setIcon(0, blue); - - spdDirItem = new QTreeWidgetItem; - spdDirItem->setText(0, tr("Domain Average Wind")); - spdDirItem->setIcon(0, radio); - - pointItem = new QTreeWidgetItem; - pointItem->setText(0, tr("Point Initialization")); - pointItem->setIcon(0, radio); - - modelItem = new QTreeWidgetItem; - modelItem->setText(0, tr("Weather Model")); - modelItem->setIcon(0, radio); - - windItem->addChild(spdDirItem); - windItem->addChild(pointItem); - windItem->addChild(modelItem); - - inputItem->addChild(surfaceItem); - inputItem->addChild(diurnalItem); - inputItem->addChild(stabilityItem); - inputItem->addChild(windItem); -} - -void WindNinjaTree::createOutputItems() -{ - outputItem = new QTreeWidgetItem; - outputItem->setText(0, tr("Output")); - outputItem->setIcon(0, blue); - - googleItem = new QTreeWidgetItem; - googleItem->setText(0, tr("Google Earth")); - googleItem->setIcon(0, blue); - fbItem = new QTreeWidgetItem; - fbItem->setText(0, tr("Fire Behavior")); - fbItem->setIcon(0, blue); - shapeItem = new QTreeWidgetItem; - shapeItem->setText(0, tr("Shape Files")); - shapeItem->setIcon(0, blue); - pdfItem = new QTreeWidgetItem; - pdfItem->setText(0, tr("Geospatial PDF Files")); - pdfItem->setIcon(0, blue); - vtkItem = new QTreeWidgetItem; - vtkItem->setText(0, tr("VTK Files")); - vtkItem->setIcon(0, blue); - - outputItem->addChild(googleItem); - outputItem->addChild(fbItem); - outputItem->addChild(shapeItem); - outputItem->addChild(pdfItem); - outputItem->addChild(vtkItem); - -} - -void WindNinjaTree::createStack() -{ -#ifdef NINJAFOAM - ninjafoam = new ninjafoamInput; - nativesolver = new nativeSolverInput; -#endif - surface = new surfaceInput; - diurnal = new diurnalInput; - stability = new stabilityInput; - - wind = new windInput; - point = new pointInput; - weather = new weatherModel; - output = new outputMetaData; - google = new googleOutput; - fb = new fbOutput; - shape = new shapeOutput; - pdf = new pdfOutput(this); - vtk = new vtkOutput; - solve = new solvePage; - - stack = new QStackedWidget; - -#ifdef NINJAFOAM - stack->addWidget(nativesolver); - stack->addWidget(ninjafoam); -#endif - stack->addWidget(surface); - stack->addWidget(diurnal); - stack->addWidget(stability); - - stack->addWidget(wind); - stack->addWidget(point); - stack->addWidget(weather); - stack->addWidget(output); - stack->addWidget(google); - stack->addWidget(fb); - stack->addWidget(shape); - stack->addWidget(pdf); - stack->addWidget(vtk); - stack->addWidget(solve); - - stack->setMinimumWidth(480); -} - -void WindNinjaTree::createConnections() -{ - connect(tree, SIGNAL(itemSelectionChanged()), this, - SLOT(updateInterface())); -} - -void WindNinjaTree::updateInterface() -{ - QTreeWidgetItem *item; - item = tree->currentItem(); - //figure out which item is selected, then change the stack widget to the proper - //input page - if(item == inputItem) - stack->setCurrentWidget(surface); - else if(item == surfaceItem) - stack->setCurrentWidget(surface); - else if(item == diurnalItem) - stack->setCurrentWidget(diurnal); - else if(item == stabilityItem) - stack->setCurrentWidget(stability); -#ifdef NINJAFOAM - else if(item == nativeSolverItem) - stack->setCurrentWidget(nativesolver); - else if(item == ninjafoamItem) - stack->setCurrentWidget(ninjafoam); - else if(item == solverMethodItem) - stack->setCurrentWidget(ninjafoam); -#endif - else if(item == windItem) - stack->setCurrentWidget(wind); - else if(item == spdDirItem) - stack->setCurrentWidget(wind); - else if(item == pointItem) - stack->setCurrentWidget(point); - else if(item == modelItem) - stack->setCurrentWidget(weather); - else if(item == outputItem) - stack->setCurrentWidget(output); - else if(item == googleItem) - stack->setCurrentWidget(google); - else if(item == fbItem) - stack->setCurrentWidget(fb); - else if(item == shapeItem) - stack->setCurrentWidget(shape); - else if(item == pdfItem) - stack->setCurrentWidget(pdf); - else if(item == vtkItem) - stack->setCurrentWidget(vtk); - else if(item == solveItem) - stack->setCurrentWidget(solve); -} diff --git a/src/gui/WindNinjaTree.h b/src/gui/WindNinjaTree.h deleted file mode 100644 index d120639e5..000000000 --- a/src/gui/WindNinjaTree.h +++ /dev/null @@ -1,139 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Tree display for selecting input/output widgets. - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef WINDNINJATREE_H -#define WINDNINJATREE_H - -#include -#include -#include -#include - -#include "surfaceInput.h" -#include "diurnalInput.h" - -#include "stabilityInput.h" - -#ifdef NINJAFOAM -#include "ninjafoamInput.h" -#include "nativeSolverInput.h" -#endif - -#include "windInput.h" -#include "pointInput.h" -#include "weatherModel.h" -#include "outputMetaData.h" -#include "googleOutput.h" -#include "fbOutput.h" -#include "shapeOutput.h" -#include "pdfOutput.h" -#include "vtkOutput.h" -#include "solvePage.h" - -class WindNinjaTree : public QWidget -{ - Q_OBJECT - - public: - - WindNinjaTree(QWidget *parent = 0); - ~WindNinjaTree(); - //icons - QIcon check, cross, caution, blue, radio, sun; - //tree for navigating - QTreeWidget *tree; - - QSplitter *splitter; - //items - QTreeWidgetItem *mainItem; - QTreeWidgetItem *solverMethodItem; - QTreeWidgetItem *inputItem; - QTreeWidgetItem *surfaceItem; - - //make widgetItem for variable stuff... - QTreeWidgetItem *windItem; - QTreeWidgetItem *spdDirItem; - QTreeWidgetItem *pointItem; - QTreeWidgetItem *modelItem; - QTreeWidgetItem *diurnalItem; - QTreeWidgetItem *stabilityItem; -#ifdef NINJAFOAM - QTreeWidgetItem *ninjafoamItem; - QTreeWidgetItem *nativeSolverItem; -#endif - - //output file items... - QTreeWidgetItem *outputItem; - QTreeWidgetItem *googleItem; - QTreeWidgetItem *fbItem; - QTreeWidgetItem *shapeItem; - QTreeWidgetItem *pdfItem; - QTreeWidgetItem *vtkItem; - - QTreeWidgetItem *solveItem; - - void createTree(); - void createIcons(); - void createInputItems(); - void createSolverMethodItems(); - void createOutputItems(); - void createStack(); - void createConnections(); - - //add stack widget to hold the ui widgets - - QStackedWidget *stack; - - surfaceInput *surface; - diurnalInput *diurnal; - stabilityInput *stability; -#ifdef NINJAFOAM - ninjafoamInput *ninjafoam; - nativeSolverInput *nativesolver; -#endif - windInput *wind; - pointInput *point; - weatherModel *weather; - outputMetaData *output; - googleOutput *google; - fbOutput *fb; - shapeOutput *shape; - pdfOutput *pdf; - vtkOutput *vtk; - solvePage *solve; - - //layout the whole thing - QVBoxLayout *layout; - - public slots: - void updateInterface(); - -}; - -#endif /* WINDNINJATREE_H */ diff --git a/src/gui/qt6/appstate.h b/src/gui/appstate.h similarity index 100% rename from src/gui/qt6/appstate.h rename to src/gui/appstate.h diff --git a/src/gui/cmake_gui.cpp b/src/gui/cmake_gui.cpp deleted file mode 100644 index f82f6d4d0..000000000 --- a/src/gui/cmake_gui.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: main() function to initiate Qt GUI - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "cli.h" - -#include -#include -#include -#include -#include -#include -#include -#include "mainWindow.h" -#include "splash.h" - -#include "ninjaArmy.h" -#include "ninjaException.h" -#include "ninja_conv.h" -#include "ninja_init.h" - -#include "gdal.h" -#include "ogr_api.h" - -#ifdef _OPENMP -omp_lock_t netCDF_lock; -#endif -int main(int argc, char *argv[]) -{ - int result; -#ifdef _OPENMP - omp_init_lock (&netCDF_lock); -#endif - - if(argc > 1) - { - CPLSetConfigOption( "NINJA_DISABLE_CALL_HOME", "ON" ); - result = windNinjaCLI(argc, argv); -#ifdef _OPENMP - omp_destroy_lock (&netCDF_lock); -#endif - return result; - } - - NinjaInitialize("gui"); - - QApplication app(argc, argv); - - //set application name/version in User-Agent header - QString ver = NINJA_VERSION_STRING; - app.setApplicationName(QString("WindNinja")); - app.setApplicationVersion(ver); - - app.setWindowIcon(QIcon(":wn-icon.png")); - - QPixmap bigSplashPixmap(":wn-splash.png"); - //resampled one - QSize splashSize(1200, 320); - QPixmap smallSplashPixmap; - smallSplashPixmap = bigSplashPixmap.scaled(splashSize, - Qt::KeepAspectRatioByExpanding); - QStringList list; - list << "Loading WindNinja " + ver + "..."; - list << "Loading mesh generator..."; - list << "Loading conjugate gradient solver..."; - list << "Loading preconditioner..."; - list << "WindNinja " + ver + " loaded."; - - mainWindow *mw; - QMessageBox mbox; - try - { - mw = new mainWindow; - } - catch(...) - { - mbox.setText("WindNinja failed to initialize. Most " - "likely cause is failure to find data " - "dependencies. Try setting the environment " - "variable WINDNINJA_DATA"); - mbox.exec(); - return 1; - } - splashScreen *splash = new splashScreen(smallSplashPixmap, list, 1000); - splash->display(); - //QObject::connect(splash, SIGNAL(done()), mw, SLOT(checkMessages())); - QObject::connect(splash, SIGNAL(done()), mw, SLOT(show())); - result = app.exec(); - -#ifdef _OPENMP - omp_destroy_lock (&netCDF_lock); -#endif - - return result; -} diff --git a/src/gui/consoleDockWidget.cpp b/src/gui/consoleDockWidget.cpp deleted file mode 100644 index 32dde1eb4..000000000 --- a/src/gui/consoleDockWidget.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Console output window - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "consoleDockWidget.h" - -/** - * \brief Construct a default console - * - * Set the docking options and default text edit options. - * - * \param parent Parent of the new widget - */ -ConsoleDockWidget::ConsoleDockWidget(QWidget *parent) : QDockWidget(parent) -{ - setWindowTitle(tr("Console Output")); - consoleTextEdit = new QTextEdit(this); - consoleTextEdit->setDocumentTitle(tr("Console Output")); - consoleTextEdit->setMaximumHeight(80); - consoleTextEdit->setMinimumWidth(480); - consoleTextEdit->setSizePolicy(QSizePolicy::Preferred, - QSizePolicy::Maximum); - setAllowedAreas(Qt::BottomDockWidgetArea | Qt::RightDockWidgetArea | - Qt::NoDockWidgetArea); - - //connect dockAreaChanged and checkSize() - connect(this, SIGNAL(topLevelChanged(bool)), this, SLOT(checkSize(bool))); - - setWidget(consoleTextEdit); -} - -/** - * \briefChange the allowable size of the widget if it is floating - * - * \param float status - */ -void ConsoleDockWidget::checkSize(bool floating) -{ - if(!floating) - { - consoleTextEdit->setMaximumHeight(80); - consoleTextEdit->setMinimumWidth(480); - consoleTextEdit->setSizePolicy(QSizePolicy::Preferred, - QSizePolicy::Maximum); - } - else - { - consoleTextEdit->setMaximumHeight(720); - consoleTextEdit->setMinimumWidth(480); - consoleTextEdit->setSizePolicy(QSizePolicy::Preferred, - QSizePolicy::Preferred); - } -} - diff --git a/src/gui/consoleDockWidget.h b/src/gui/consoleDockWidget.h deleted file mode 100644 index d71a4ffc2..000000000 --- a/src/gui/consoleDockWidget.h +++ /dev/null @@ -1,63 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Console output window - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef CONSOLEDOCKWIDGET_H_ -#define CONSOLEDOCKWIDGET_H_ - -#include -#include -#include - -/** - * \brief Console for the GUI - * - * Provides a method of transferring information to the user - * that may not be in need of alerts such as dialogs. Can - * be useful for debugging. - */ -class ConsoleDockWidget : public QDockWidget -{ - - Q_OBJECT - - public: - ConsoleDockWidget(QWidget *parent = 0); - - QString prompt; /*!< Characters that act as a prompt */ - - QTextEdit *consoleTextEdit; /*!< Holds the edit area */ - QAction *editPromptAction; /*!< Change the prompt */ - QMenu *contextMenu; /*!< Allow the user to print console */ - - public slots: - void checkSize(bool floating); -}; - -#endif /* CONSOLEDOCKWIDGET_H_ */ - diff --git a/src/gui/qt6/controller.cpp b/src/gui/controller.cpp similarity index 100% rename from src/gui/qt6/controller.cpp rename to src/gui/controller.cpp diff --git a/src/gui/qt6/controller.h b/src/gui/controller.h similarity index 100% rename from src/gui/qt6/controller.h rename to src/gui/controller.h diff --git a/src/gui/diurnalInput.cpp b/src/gui/diurnalInput.cpp deleted file mode 100644 index 5b91156b2..000000000 --- a/src/gui/diurnalInput.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: OpenGL implementation for viewing DEM inputs - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "diurnalInput.h" - -/** - * \brief Construct and layout the diurnalInput widget. - * - * This is only a checkable option now. - * - * \param parent parent widget - */ -diurnalInput::diurnalInput(QWidget *parent) : QWidget(parent) -{ - diurnalGroupBox = new QGroupBox(tr("Use Diurnal Wind")); - diurnalGroupBox->setCheckable(true); - diurnalGroupBox->setChecked(false); - diurnalLayout = new QVBoxLayout; - - diurnalGroupBox->setLayout(diurnalLayout); - - layout = new QVBoxLayout; - layout->addWidget(diurnalGroupBox); - layout->addStretch(); - setLayout(layout); -} - diff --git a/src/gui/diurnalInput.h b/src/gui/diurnalInput.h deleted file mode 100644 index d805b4386..000000000 --- a/src/gui/diurnalInput.h +++ /dev/null @@ -1,72 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: OpenGL implementation for viewing DEM inputs - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef DIURNALINPUT_H_ -#define DIURNALINPUT_H_ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "gdal_priv.h" -#include "ogr_srs_api.h" - -#ifndef Q_MOC_RUN -#include "boost/date_time/local_time/local_time.hpp" -#include "boost/date_time/posix_time/posix_time_types.hpp" -#endif - -#include "latLonWidget.h" -#include "timeZoneWidget.h" - -#include "qdebug.h" - -class diurnalInput : public QWidget -{ - Q_OBJECT - - public: - - diurnalInput(QWidget *parent = 0); - QGroupBox *diurnalGroupBox; - QVBoxLayout *diurnalLayout; - QVBoxLayout *layout; - -}; - -#endif /* DIURNALINPUT_H_ */ - diff --git a/src/gui/fbOutput.cpp b/src/gui/fbOutput.cpp deleted file mode 100644 index fab279833..000000000 --- a/src/gui/fbOutput.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Fire behavior output selection widget - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "fbOutput.h" - -/** - * \brief Create the widget for fire behavior outputs. - * - * \param parent parent widget - */ -fbOutput::fbOutput(QWidget *parent) : QWidget(parent) -{ - fbGroupBox = new QGroupBox(tr("Create Fire Behavior Files (*.asc)"), this); - fbGroupBox->setCheckable(true); - fbGroupBox->setChecked(false); - - fbResGroupBox = new QGroupBox(tr("Resolution"), this); - - fbResSpinBox = new QDoubleSpinBox(this); - fbResSpinBox->setRange(1, 5000); - fbResSpinBox->setDecimals(2); - fbResSpinBox->setAccelerated(true); - fbResSpinBox->setValue(200); - fbResSpinBox->setDisabled(true); - - fbMetersRadioButton = new QRadioButton(tr("Meters"), this); - fbMetersRadioButton->setChecked(true); - fbMetersRadioButton->setDisabled(true); - fbFeetRadioButton = new QRadioButton(tr("Feet")); - fbFeetRadioButton->setDisabled(true); - - useMeshResCheckBox = new QCheckBox(tr("Use Mesh Resolution"), this); - useMeshResCheckBox->setChecked(true); - - atmFileCheckBox = new QCheckBox(tr("Create *.atm file(s)"),this); - - //connect spinbox and checkbox - connect(useMeshResCheckBox, SIGNAL(toggled(bool)), - fbResSpinBox, SLOT(setDisabled(bool))); - connect(useMeshResCheckBox, SIGNAL(toggled(bool)), - fbMetersRadioButton, SLOT(setDisabled(bool))); - connect(useMeshResCheckBox, SIGNAL(toggled(bool)), - fbFeetRadioButton, SLOT(setDisabled(bool))); - - fbResLayout = new QGridLayout; - fbResLayout->addWidget(fbResSpinBox, 0, 0); - fbResLayout->addWidget(fbMetersRadioButton, 0, 1); - fbResLayout->addWidget(fbFeetRadioButton, 0, 2); - fbResLayout->addWidget(useMeshResCheckBox, 1, 0); - - fbResGroupBox->setLayout(fbResLayout); - - fbLayout = new QVBoxLayout; - fbLayout->addWidget(fbResGroupBox); - fbLayout->addWidget(atmFileCheckBox); - - fbGroupBox->setLayout(fbLayout); - - mainLayout = new QVBoxLayout; - mainLayout->addWidget(fbGroupBox); - mainLayout->addStretch(); - - setLayout(mainLayout); -} - diff --git a/src/gui/fbOutput.h b/src/gui/fbOutput.h deleted file mode 100644 index 516908524..000000000 --- a/src/gui/fbOutput.h +++ /dev/null @@ -1,63 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Fire behavior output selection widget - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef FBOUTPUT_H_ -#define FBOUTPUT_H_ - -#include -#include -#include -#include - -#include - -#include "WindNinjaInputs.h" - -class fbOutput : public QWidget -{ - Q_OBJECT - -public: - fbOutput(QWidget *parent = 0); - - QGroupBox *fbGroupBox; - QGroupBox *fbResGroupBox; - QDoubleSpinBox *fbResSpinBox; - QRadioButton *fbMetersRadioButton, *fbFeetRadioButton; - QCheckBox *useMeshResCheckBox; - - QCheckBox *atmFileCheckBox; - - QGridLayout *fbResLayout; - QVBoxLayout *fbLayout; - QVBoxLayout *mainLayout; -}; - -#endif /* FBOUTPUT_H_ */ - diff --git a/src/gui/googleOutput.cpp b/src/gui/googleOutput.cpp deleted file mode 100644 index 78d2b33d4..000000000 --- a/src/gui/googleOutput.cpp +++ /dev/null @@ -1,174 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Google earth output selection widgetx - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "googleOutput.h" - -googleOutput::googleOutput(QWidget *parent) : QWidget(parent) -{ - googleGroupBox = new QGroupBox(tr("Create Google Earth Files (*.kmz)")); - googleGroupBox->setCheckable(true); - googleGroupBox->setChecked(false); - - vectorGroupBox = new QGroupBox(tr("Vectors")); - //vectorGroupBox->setCheckable(true); - //vectorGroupBox->setChecked(true); - - vectorWidthLabel = new QLabel(tr("Line Width")); - - vectorWidthDoubleSpinBox = new QDoubleSpinBox; - vectorWidthDoubleSpinBox->setRange(1.0, 10.0); - vectorWidthDoubleSpinBox->setDecimals(1); - vectorWidthDoubleSpinBox->setValue(1.0); - vectorWidthDoubleSpinBox->setSingleStep(0.1); - vectorWidthDoubleSpinBox->setAccelerated(true); - - applyVectorScaling = new QCheckBox("Apply Vector Scaling"); - applyVectorScaling->setToolTip("Enable vector scaling to increase line width with wind speed."); - applyVectorScaling->setCheckable(true); - applyVectorScaling->setChecked(false); - - vectorLayout = new QHBoxLayout; - vectorLayout->addWidget(vectorWidthLabel); - vectorLayout->addWidget(vectorWidthDoubleSpinBox); - vectorLayout->addWidget(applyVectorScaling); - vectorLayout->addStretch(); - - vectorGroupBox->setLayout(vectorLayout); - - legendGroupBox = new QGroupBox(tr("Legend")); - //legendGroupBox->setCheckable(true); - //legendGroupBox->setChecked(true); - - uniformRangeRadioButton = new QRadioButton; - uniformRangeRadioButton->setText(tr("Uniform Range")); - uniformRangeRadioButton->setChecked(true); - equalCountRadioButton = new QRadioButton; - equalCountRadioButton->setText(tr("Equal Count")); - - legendOptionLayout = new QVBoxLayout; - legendOptionLayout->addWidget(uniformRangeRadioButton); - legendOptionLayout->addWidget(equalCountRadioButton); - // legendOptionLayout->addStretch(); - legendGroupBox->setLayout(legendOptionLayout); - - contourCheckBox = new QCheckBox(tr("Contours (beta)")); - - contourCheckBox->setChecked(false); - - //hide contour check box for now. - contourCheckBox->setDisabled(true); - - applyConsistentColorScale = new QCheckBox(tr("Use Consistent Color Scale")); - applyConsistentColorScale->setToolTip("Use a consistent color scale across simulations."); - applyConsistentColorScale->setCheckable(true); - applyConsistentColorScale->setChecked(false); - - optionLayout = new QVBoxLayout; - optionLayout->addWidget(vectorGroupBox); - optionLayout->addWidget(legendGroupBox); - optionLayout->addWidget(applyConsistentColorScale); - //optionLayout->addWidget(contourCheckBox); - optionLayout->addStretch(); - - googleResGroupBox = new QGroupBox(tr("Resolution")); - - googleResSpinBox = new QDoubleSpinBox(this); - googleResSpinBox->setRange(1, 5000); - googleResSpinBox->setDecimals(2); - googleResSpinBox->setAccelerated(true); - googleResSpinBox->setValue(200); - googleResSpinBox->setDisabled(true); - //googleResSpinBox->setMaximumSize(googleResSpinBox->sizeHint()); - - googleMetersRadioButton = new QRadioButton(tr("Meters")); - googleMetersRadioButton->setChecked(true); - googleMetersRadioButton->setDisabled(true); - googleFeetRadioButton = new QRadioButton(tr("Feet")); - googleFeetRadioButton->setDisabled(true); - - useMeshResCheckBox = new QCheckBox(tr("Use Mesh Resolution")); - useMeshResCheckBox->setChecked(true); - - //connect checkbox with spin box - connect(useMeshResCheckBox, SIGNAL(toggled(bool)), - googleResSpinBox, SLOT(setDisabled(bool))); - connect(useMeshResCheckBox, SIGNAL(toggled(bool)), - googleFeetRadioButton, SLOT(setDisabled(bool))); - connect(useMeshResCheckBox, SIGNAL(toggled(bool)), - googleMetersRadioButton, SLOT(setDisabled(bool))); - - //color options - colorblindBox= new QGroupBox(tr("Alternative Color Schemes")); - colorblindBox->setCheckable(true); - colorblindBox->setChecked(false); - inputColorblindComboBox = new QComboBox(); - inputColorblindComboBox->addItem(tr("Default")); - inputColorblindComboBox->addItem(tr("ROPGW (Red Orange Pink Green White)")); - inputColorblindComboBox->addItem(tr("Oranges")); - inputColorblindComboBox->addItem(tr("Blues")); - inputColorblindComboBox->addItem(tr("Pinks")); - inputColorblindComboBox->addItem(tr("Greens")); - inputColorblindComboBox->addItem(tr("Magic Beans")); - inputColorblindComboBox->addItem(tr("Pink to Green")); - - colorLayout=new QGridLayout; - colorLayout->addWidget(inputColorblindComboBox,0,0); - colorblindBox->setLayout(colorLayout); - //end color options - - resLayout = new QGridLayout; - resLayout->addWidget(googleResSpinBox, 0, 0); - resLayout->addWidget(googleMetersRadioButton, 0, 1); - resLayout->addWidget(googleFeetRadioButton, 0, 2); - resLayout->addWidget(useMeshResCheckBox, 1, 0); - - googleResGroupBox->setLayout(resLayout); - - pageLayout = new QVBoxLayout; - pageLayout->addLayout(optionLayout); - pageLayout->addWidget(googleResGroupBox); - pageLayout->addWidget(colorblindBox); - pageLayout->addStretch(); - - googleGroupBox->setLayout(pageLayout); - - mainLayout = new QVBoxLayout; - mainLayout->addWidget(googleGroupBox); - mainLayout->addStretch(); - - setLayout(mainLayout); -} - -void googleOutput::setColorScheme(int choice) -{ - if(choice==1) - { - - } -} diff --git a/src/gui/googleOutput.h b/src/gui/googleOutput.h deleted file mode 100644 index 34ba1ecda..000000000 --- a/src/gui/googleOutput.h +++ /dev/null @@ -1,82 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Google earth output selection widgetx - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef GOOGLEOUTPUT_H -#define GOOGLEOUTPUT_H - -#include -#include -#include -#include -#include -#include - -#include -#include - -class googleOutput : public QWidget -{ - Q_OBJECT - - public: - googleOutput(QWidget *parent = 0); - - QGroupBox *googleGroupBox; - QGroupBox *vectorGroupBox; - QLabel *vectorWidthLabel; - QDoubleSpinBox *vectorWidthDoubleSpinBox; - QCheckBox *applyVectorScaling; - QGroupBox *legendGroupBox; - QRadioButton *uniformRangeRadioButton,* equalCountRadioButton; - QCheckBox *applyConsistentColorScale; - QCheckBox *contourCheckBox; - QGroupBox *googleResGroupBox; - QDoubleSpinBox *googleResSpinBox; - QRadioButton *googleMetersRadioButton, *googleFeetRadioButton; - QCheckBox *useMeshResCheckBox; - - //alternative color Options - QGroupBox *colorblindBox; - QComboBox *inputColorblindComboBox; - - QGridLayout *colorLayout; - - QHBoxLayout *vectorLayout; - QVBoxLayout *legendOptionLayout; - QVBoxLayout *optionLayout; - QGridLayout *resLayout; - QVBoxLayout *pageLayout; - QVBoxLayout *mainLayout; - - public slots: - void setColorScheme(int choice); - -}; - -#endif /* GOOGLEOUTPUT_H */ diff --git a/src/gui/latLonWidget.cpp b/src/gui/latLonWidget.cpp deleted file mode 100644 index 5672790b9..000000000 --- a/src/gui/latLonWidget.cpp +++ /dev/null @@ -1,491 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Handle lat/lon dd:mm:ss/dd:mm.mm/dd.dd conversions for diurnal - * inputs - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "latLonWidget.h" -dmsWidget::dmsWidget( QWidget *parent ) : QWidget( parent ) -{ - - //latitude - latGroupBox = new QGroupBox( tr( "Latitude" ), this ); - - latDegrees = new QSpinBox; - latDegrees->setRange( -90, 90 ); - latDegrees->setValue( 0 ); - latDegrees->setSuffix( "\x00B0" ); - latDegrees->setAccelerated( true ); - - latMinutes = new QSpinBox; - latMinutes->setRange( 0, 60 ); - latMinutes->setValue( 0 ); - latMinutes->setSuffix( "'" ); - latMinutes->setAccelerated( true ); - - latSeconds = new QDoubleSpinBox; - latSeconds->setDecimals( 3 ); - latSeconds->setRange( 0, 60 ); - latSeconds->setValue( 0 ); - latSeconds->setSuffix( "\"" ); - latSeconds->setAccelerated( true ); - - latLayout = new QHBoxLayout; - latLayout->addWidget( latDegrees ); - latLayout->addWidget( latMinutes ); - latLayout->addWidget( latSeconds ); - - latGroupBox->setLayout( latLayout ); - - //longitude - lonGroupBox = new QGroupBox( tr( "Longitude" ) ); - - lonDegrees = new QSpinBox; - lonDegrees->setRange( -180, 180 ); - lonDegrees->setValue( 0 ); - lonDegrees->setSuffix( "\x00B0" ); - lonDegrees->setAccelerated( true ); - - lonMinutes = new QSpinBox; - lonMinutes->setRange( 0, 60 ); - lonMinutes->setValue( 0 ); - lonMinutes->setSuffix( "'" ); - lonMinutes->setAccelerated( true ); - - lonSeconds = new QDoubleSpinBox; - lonSeconds->setDecimals( 3 ); - lonSeconds->setRange( 0, 60 ); - lonSeconds->setValue( 0 ); - lonSeconds->setSuffix( "\"" ); - lonSeconds->setAccelerated( true ); - - lonLayout = new QHBoxLayout; - lonLayout->addWidget( lonDegrees ); - lonLayout->addWidget( lonMinutes ); - lonLayout->addWidget( lonSeconds ); - - lonGroupBox->setLayout( lonLayout ); - - layout =new QHBoxLayout; - layout->addWidget( latGroupBox ); - layout->addWidget( lonGroupBox ); - - setLayout( layout ); -} - -dmWidget::dmWidget( QWidget *parent ) : QWidget( parent ) -{ - //latitude - latGroupBox = new QGroupBox( tr( "Latitude" ) ); - - latDegrees = new QSpinBox; - latDegrees->setRange( -90, 90 ); - latDegrees->setValue( 0 ); - latDegrees->setSuffix( "\x00B0" ); - latDegrees->setAccelerated( true ); - - latMinutes = new QDoubleSpinBox; - latMinutes->setDecimals( 5 ); - latMinutes->setRange( 0, 60 ); - latMinutes->setValue( 0 ); - latMinutes->setSuffix( "'" ); - latMinutes->setAccelerated( true ); - - latLayout = new QHBoxLayout; - latLayout->addWidget( latDegrees ); - latLayout->addWidget( latMinutes ); - - latGroupBox->setLayout( latLayout ); - - //longitude - lonGroupBox = new QGroupBox( tr( "Longitude" ) ); - - lonDegrees = new QSpinBox; - lonDegrees->setRange( -180, 180 ); - lonDegrees->setValue( 0 ); - lonDegrees->setSuffix( "\x00B0" ); - lonDegrees->setAccelerated( true ); - - lonMinutes = new QDoubleSpinBox; - lonMinutes->setDecimals( 5 ); - lonMinutes->setRange( 0, 60 ); - lonMinutes->setValue( 0 ); - lonMinutes->setSuffix( "'" ); - lonMinutes->setAccelerated( true ); - - lonLayout = new QHBoxLayout; - lonLayout->addWidget( lonDegrees ); - lonLayout->addWidget( lonMinutes ); - - lonGroupBox->setLayout( lonLayout ); - - layout = new QHBoxLayout; - layout->addWidget( latGroupBox ); - layout->addWidget( lonGroupBox ); - - setLayout( layout ); -} - -ddWidget::ddWidget( QWidget *parent ) : QWidget( parent ) -{ - //latitude - latGroupBox = new QGroupBox( tr( "Latitude" ) ); - - latDegrees = new QDoubleSpinBox; - latDegrees->setDecimals( 10 ); - latDegrees->setRange( -90.0, 90.0 ); - latDegrees->setValue( 0 ); - latDegrees->setSuffix( "\x00B0" ); - latDegrees->setAccelerated( true ); - - latLayout = new QHBoxLayout; - latLayout->addWidget( latDegrees ); - - latGroupBox->setLayout( latLayout ); - - //longitude - lonGroupBox = new QGroupBox( tr( "Longitude" ) ); - - lonDegrees = new QDoubleSpinBox; - lonDegrees->setDecimals( 10 ); - lonDegrees->setRange( -180.0, 180.0 ); - lonDegrees->setValue( 0 ); - lonDegrees->setSuffix( "\x00B0" ); - lonDegrees->setAccelerated( true ); - - lonLayout = new QHBoxLayout; - lonLayout->addWidget( lonDegrees ); - - lonGroupBox->setLayout( lonLayout ); - - layout = new QHBoxLayout; - layout->addWidget( latGroupBox ); - layout->addWidget( lonGroupBox ); - - setLayout( layout ); -} - -latLonWidget::latLonWidget( QString title, QWidget *parent ) : QWidget( parent ) -{ - latitude = longitude = 0; - - latLonGroupBox = new QGroupBox( title ); - - latLonFormatGroupBox = new QGroupBox( tr( "Lat/Lon Format" ) ); - - dmsRadio = new QRadioButton( tr( "DD MM SS.SS" ) ); - dmsRadio->setChecked( true ); - dmRadio = new QRadioButton( tr( "DD MM.MM" ) ); - ddRadio = new QRadioButton( tr( "DD.DD" ) ); - - stackedWidget = new QStackedWidget( this ); - dms = new dmsWidget; - dm = new dmWidget; - dd = new ddWidget; - - stackedWidget->addWidget( dms ); - stackedWidget->addWidget( dm ); - stackedWidget->addWidget( dd ); - - connect( dmsRadio, SIGNAL( toggled( bool ) ), - this, SLOT( checkLatLonFormat( ) ) ); - connect( dmRadio, SIGNAL( toggled( bool ) ), - this, SLOT( checkLatLonFormat( ) ) ); - connect( ddRadio, SIGNAL( toggled( bool ) ), - this, SLOT( checkLatLonFormat( ) ) ); - - //connect all location spin boxes to the update( ) methods - //dms lat - connect( dms->latDegrees, SIGNAL( editingFinished( ) ), - this, SLOT( updateLatLon( ) ) ); - connect( dms->latMinutes, SIGNAL( editingFinished( ) ), - this, SLOT( updateLatLon( ) ) ); - connect( dms->latSeconds, SIGNAL( editingFinished( ) ), - this, SLOT( updateLatLon( ) ) ); - //dms lon - connect( dms->lonDegrees, SIGNAL( editingFinished( ) ), - this, SLOT( updateLatLon( ) ) ); - connect( dms->lonMinutes, SIGNAL( editingFinished( ) ), - this, SLOT( updateLatLon( ) ) ); - connect( dms->lonSeconds, SIGNAL( editingFinished( ) ), - this, SLOT( updateLatLon( ) ) ); - //dm lat - connect( dm->latDegrees, SIGNAL( editingFinished( ) ), - this, SLOT( updateLatLon( ) ) ); - connect( dm->latMinutes, SIGNAL( editingFinished( ) ), - this, SLOT( updateLatLon( ) ) ); - //dm lon - connect( dm->lonDegrees, SIGNAL( editingFinished( ) ), - this, SLOT( updateLatLon( ) ) ); - connect( dm->lonMinutes, SIGNAL( editingFinished( ) ), - this, SLOT( updateLatLon( ) ) ); - - //dd lat - connect( dd->latDegrees, SIGNAL( editingFinished( ) ), - this, SLOT( updateLatLon( ) ) ); - //dd lon - connect( dd->lonDegrees, SIGNAL( editingFinished( ) ), - this, SLOT( updateLatLon( ) ) ); - - datumComboBox = new QComboBox( this ); - datumComboBox->addItem( "Datum..." ); - datumComboBox->addItem( "WGS84" ); - datumComboBox->addItem( "NAD83" ); - datumComboBox->addItem( "NAD27" ); - - latLonFormatLayout = new QHBoxLayout; - latLonFormatLayout->addWidget( dmsRadio ); - latLonFormatLayout->addWidget( dmRadio ); - latLonFormatLayout->addWidget( ddRadio ); - - latLonFormatGroupBox->setLayout( latLonFormatLayout ); - - latLonLayout = new QVBoxLayout; - latLonLayout->addWidget( latLonFormatGroupBox ); - latLonLayout->addWidget( stackedWidget ); - latLonLayout->addWidget( datumComboBox ); - latLonGroupBox->setLayout( latLonLayout ); - - layout = new QVBoxLayout; - layout->addWidget( latLonGroupBox ); - setLayout( layout ); -} - -void latLonWidget::checkLatLonFormat() -{ - int index = -1; - if( dmsRadio->isChecked( ) ) - index = 0; - else if( dmRadio->isChecked( ) ) - index = 1; - else if( ddRadio->isChecked( ) ) - index = 2; - else - index = 0; - - stackedWidget->setCurrentIndex( index ); -} - -void latLonWidget::updateLatLon( ) -{ - //check lat/lon format - if( dmsRadio->isChecked( ) ) { - latitude = dms2ddLatitude( dms->latDegrees->value( ), - dms->latMinutes->value( ), - dms->latSeconds->value( ) ); - longitude = dms2ddLongitude( dms->lonDegrees->value( ), - dms->lonMinutes->value( ), - dms->lonSeconds->value( ) ); - updateLatLonWidget( 0 ); - } - else if( dmRadio->isChecked( ) ) { - latitude = dm2ddLatitude( dm->latDegrees->value( ), - dm->latMinutes->value( ) ); - longitude = dm2ddLongitude( dm->lonDegrees->value( ), - dm->lonMinutes->value( ) ); - updateLatLonWidget( 1 ); - } - else if( ddRadio->isChecked( ) ) { - latitude = dd->latDegrees->value( ); - longitude = dd->lonDegrees->value( ); - updateLatLonWidget( 2 ); - } - //latLonFoundLabel->setText( "" ); -} - -double latLonWidget::dms2ddLatitude( int dd, int mm, double ss ) -{ - double x, xx, lat = 0.0; - double d = dd; - double m = mm; - double s = ss; - if( d >= 0 ){ - xx = s / 60.0; - m += xx; - x = m / 60.0; - lat = d + x; - } - else { - xx = s / 60.0; - m += xx; - x = m / 60.0; - lat = d - x; - } - return lat; -} - -double latLonWidget::dms2ddLongitude( int dd, int mm, double ss ) -{ - double d = dd; - double m = mm; - double s = ss; - double x, xx, lon = 0.0; - if( d >= 0 ) { - xx = s / 60.0; - m += xx; - x = m / 60.0; - lon = d + x; - } - else { - xx = s / 60.0; - m += xx; - x = m / 60.0; - lon = d - x; - } - return lon; -} - -double latLonWidget::dm2ddLatitude( int dd, double mm ) -{ - double x, lat = 0.0; - double d = dd; - double m = mm; - - if( d >= 0.0 ) { - x = m / 60.0; - lat = d + x; - } - else { - x = m / 60.0; - lat = d - x; - } - return lat; -} - -double latLonWidget::dm2ddLongitude( int dd, double mm ) -{ - double x, lon = 0.0; - double d = dd; - double m = mm; - - if( d >= 0.0 ) { - x = m / 60.0; - lon = d + x; - } - else { - x = m / 60.0; - lon = d - x; - } - return lon; -} - -void latLonWidget::updateLatLonWidget( int notMe ) -{ - if( notMe == 0 ) { - dm->latDegrees->setValue( ( int )latitude ); - dm->latMinutes->setValue( ( fabs( latitude ) - ( int )fabs( latitude ) ) * 60 ); - - dm->lonDegrees->setValue( ( int )longitude ); - dm->lonMinutes->setValue( ( fabs( longitude ) - ( int )fabs( longitude ) ) * 60 ); - - dd->latDegrees->setValue( latitude ); - dd->lonDegrees->setValue( longitude ); - } - else if( notMe == 1 ) { - double d, m, s; - d = ( int )latitude; - m = ( fabs( latitude ) - fabs( d ) ) * 60; - s = ( m - ( int )m ) * 60; - m = ( int )m; - - dms->latDegrees->setValue( d ); - dms->latMinutes->setValue( m ); - dms->latSeconds->setValue( s ); - - d = ( int )longitude; - m = ( fabs( longitude ) - fabs( d ) ) * 60; - s = ( m - ( int )m ) * 60; - m = ( int )m; - - - dms->lonDegrees->setValue( d ); - dms->lonMinutes->setValue( m ); - dms->lonSeconds->setValue( s ); - - dd->latDegrees->setValue( latitude ); - dd->lonDegrees->setValue( longitude ); - } - else if( notMe == 2 ) { - dm->latDegrees->setValue( ( int )latitude ); - dm->latMinutes->setValue( ( fabs( latitude ) - ( int )fabs( latitude ) ) * 60 ); - - dm->lonDegrees->setValue( ( int )longitude ); - dm->lonMinutes->setValue( ( fabs( longitude ) - ( int )fabs( longitude ) ) * 60 ); - - double d, m, s; - d = ( int )latitude; - m = ( fabs( latitude ) - fabs( d ) ) * 60; - s = ( m - ( int )m ) * 60; - m = ( int )m; - - dms->latDegrees->setValue( d ); - dms->latMinutes->setValue( m ); - dms->latSeconds->setValue( s ); - - d = ( int )longitude; - m = ( fabs( longitude ) - fabs( d ) ) * 60; - s = ( m - ( int )m ) * 60; - m = ( int )m; - - dms->lonDegrees->setValue( d ); - dms->lonMinutes->setValue( m ); - dms->lonSeconds->setValue( s ); - } - else { - //update all from internal lat/lon - //degrees/minutes/seconds - double d, m, s; - d = ( int )latitude; - m = ( fabs( latitude ) - fabs( d ) ) * 60; - s = ( m - ( int )m ) * 60; - m = ( int )m; - - dms->latDegrees->setValue( d ); - dms->latMinutes->setValue( m ); - dms->latSeconds->setValue( s ); - - d = ( int )longitude; - m = ( fabs( longitude ) - fabs( d ) ) * 60; - s = ( m - ( int )m ) * 60; - m = ( int )m; - - dms->lonDegrees->setValue( d ); - dms->lonMinutes->setValue( m ); - dms->lonSeconds->setValue( s ); - - //degrees minutes - dm->latDegrees->setValue( ( int )latitude ); - dm->latMinutes->setValue( ( fabs( latitude ) - ( int )fabs( latitude ) ) * 60 ); - - dm->lonDegrees->setValue( ( int )longitude ); - dm->lonMinutes->setValue( ( fabs( longitude ) - ( int )fabs( longitude ) ) * 60 ); - - //decimal degrees - dd->latDegrees->setValue( latitude ); - dd->lonDegrees->setValue( longitude ); - } -} diff --git a/src/gui/latLonWidget.h b/src/gui/latLonWidget.h deleted file mode 100644 index 06eda7d32..000000000 --- a/src/gui/latLonWidget.h +++ /dev/null @@ -1,127 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Handle lat/lon dd:mm:ss/dd:mm.mm/dd.dd conversions for diurnal - * inputs - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef LATLONWIDGET_H -#define LATLONWIDGET_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -class dmsWidget : public QWidget -{ - Q_OBJECT - -public: - dmsWidget(QWidget *parent = 0); - QGroupBox *latGroupBox, *lonGroupBox; - QSpinBox *latDegrees, *lonDegrees; - QSpinBox *latMinutes, *lonMinutes; - - QDoubleSpinBox *latSeconds, *lonSeconds; - - QHBoxLayout *latLayout, *lonLayout, *layout; - -}; - -class dmWidget : public QWidget -{ - Q_OBJECT -public: - dmWidget(QWidget *parent = 0); - QGroupBox *latGroupBox, *lonGroupBox; - QSpinBox *latDegrees, *lonDegrees; - QDoubleSpinBox *latMinutes, *lonMinutes; - - QHBoxLayout *latLayout, *lonLayout, *layout; -}; - -class ddWidget : public QWidget -{ - Q_OBJECT - -public: - ddWidget(QWidget *parent = 0); - QGroupBox *latGroupBox, *lonGroupBox; - QDoubleSpinBox *latDegrees, *lonDegrees; - - QHBoxLayout *latLayout, *lonLayout, *layout; - -}; - -class latLonWidget : public QWidget -{ - Q_OBJECT -public: - latLonWidget(QString title, QWidget *parent = 0); - - //store lat lon in dd always - double latitude, longitude; - - QGroupBox *latLonGroupBox; - QGroupBox *latLonFormatGroupBox; - QLabel *latLonFormatLabel; - QRadioButton *dmsRadio, *dmRadio, *ddRadio; - - //conversions - double dms2ddLatitude(int, int, double); - double dms2ddLongitude(int, int, double); - double dm2ddLatitude(int, double); - double dm2ddLongitude(int, double); - - QStackedWidget *stackedWidget; - - dmsWidget *dms; - dmWidget *dm; - ddWidget *dd; - - QComboBox *datumComboBox; - - QHBoxLayout *latLonFormatLayout; - QVBoxLayout *latLonLayout; - - QVBoxLayout *layout; - -public slots: - void checkLatLonFormat(); - void updateLatLon(); - void updateLatLonWidget(int notMe); - -}; - -#endif /* LATLONWIDGET_H */ diff --git a/src/gui/qt6/main.cpp b/src/gui/main.cpp similarity index 91% rename from src/gui/qt6/main.cpp rename to src/gui/main.cpp index a4299a2c7..789ef58c5 100755 --- a/src/gui/qt6/main.cpp +++ b/src/gui/main.cpp @@ -1,5 +1,5 @@ #include "mainwindow.h" -#include "../../ninja/windninja.h" +#include "../ninja/windninja.h" #include #include // #include "modeldata.h" diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp deleted file mode 100644 index ed3bf6de3..000000000 --- a/src/gui/mainWindow.cpp +++ /dev/null @@ -1,3702 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Main window and parent to all other widgets - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "mainWindow.h" - -mainWindow::mainWindow(QWidget *parent) -: QMainWindow(parent) -{ - std::string tzfile = FindDataPath( "date_time_zonespec.csv" ); - if( tzfile == "" ) - { - throw std::runtime_error( "Could not find supporting data files, " \ - "try setting WINDNINJA_DATA." ); - } - lineNumber = 1; - GDALProjRef = ""; - - progressDialog = new QProgressDialog(this); - progressDialog->setMinimumDuration(1); - progressDialog->setAutoClose(false); - progressDialog->setAutoReset(false); - progressDialog->setWindowModality(Qt::ApplicationModal); - - runProgress = 0; - totalProgress = 0; - mainWindow::progressLog; - - noGoogleCellSize = 30.0; - - //set defaults for some variables -#ifdef NINJAFOAM - existingCaseDir = ""; -#endif - inputFileName = ""; - inputFileDir = ""; - inputFileType = -1; - shortInputFileName = ""; - prjFileName = ""; - hasPrj = false; - - GDALCenterLat = GDALCenterLon = 0; - hasGDALCenter = false; - - tree = new WindNinjaTree; - - createConsole(); - createActions(); - createMenus(); - - createTimers(); - - createConnections(); - - setCentralWidget(tree); - - //threading - sThread = new solveThread; - - meshCellSize = 200.0; - -#ifdef PHONE_HOME_QUERIES_ENABLED - checkMessages(); -#endif - - QString v(NINJA_VERSION_STRING); - v = "Welcome to WindNinja " + v; - - - writeToConsole(v, Qt::blue); - - //get and set working directory for open dialogs and tutorials. - cwd = QDir::current(); - pwd.setPath(QString::fromStdString(FindNinjaBinDir())); - //pwd = QDir::current(); - pwd.cdUp(); - - writeToConsole(cwd.currentPath()); - cwd.cd("../example-files"); - //writeToConsole(cwd.absolutePath()); - - readSettings(); - - okToContinueCheck = false; - - computeCellSize(tree->surface->meshResComboBox->currentIndex()); - - checkAllItems(); - army = NULL; -} - -/* -** Check for version updates, or messages from the server. -*/ -#ifdef PHONE_HOME_QUERIES_ENABLED -void mainWindow::checkMessages(void) { - QMessageBox mbox; - char *papszMsg = NinjaQueryServerMessages(true); - if (papszMsg != NULL) { - if (strcmp(papszMsg, "TRUE\n") == 0) { - mbox.setText("There is a fatal flaw in Windninja, it must close."); - mbox.exec(); - delete[] papszMsg; - abort(); - } - - else { - char *papszMsg = NinjaQueryServerMessages(false); - if (papszMsg != NULL) { - mbox.setText(papszMsg); - - mbox.exec(); - delete[] papszMsg; - } - } - } -} - -#endif - -bool mainWindow::okToContinue() -{ - if(okToContinueCheck) - { - int r = QMessageBox::warning(this, tr("WindNinja"), - tr("Are you sure you want to exit?"), - QMessageBox::Yes | - QMessageBox::No | - QMessageBox::Cancel); - if(r == QMessageBox::Yes) - return true; - else if(r == QMessageBox::No || r == QMessageBox::Cancel) - return false; - else - return false; - } - else - return true; -} - -void mainWindow::closeEvent(QCloseEvent *event) -{ - if(okToContinue()) - writeSettings(); - else - event->ignore(); -} - -void mainWindow::writeSettings() -{ - writeToConsole("Saving settings..."); - QSettings settings(QSettings::UserScope, "Firelab", "WindNinja"); - settings.setDefaultFormat(QSettings::IniFormat); - //input file path - writeToConsole(inputFileDir.absolutePath()); - settings.setValue("inputFileDir", inputFileDir.absolutePath()); - //veg choice - settings.setValue("vegChoice", tree->surface->roughnessComboBox-> - currentIndex()); - //mesh choice - settings.setValue("meshChoice", tree->surface->meshResComboBox-> - currentIndex()); - //mesh units - settings.setValue("meshUnits", tree->surface->meshMetersRadioButton-> - isChecked()); - //number of processors - settings.setValue("nProcessors", tree->solve->numProcSpinBox->value()); - - //time zone - settings.setValue("timeZone", - tree->surface->timeZone->tzComboBox->currentText() ); - - settings.setValue("pointFile", tree->point->stationFileName ); - - settings.setValue("customRes", tree->surface->meshResDoubleSpinBox->value()); - - writeToConsole("Settings saved."); -} - -void mainWindow::readSettings() -{ - QSettings settings(QSettings::UserScope, "Firelab", "WindNinja"); - settings.setDefaultFormat(QSettings::IniFormat); - if(settings.contains("inputFileDir")) - { - inputFileDir = settings.value("inputFileDir").toString(); - } - else - { - std::string oTmpPath = FindNinjaRootDir(); - inputFileDir = CPLFormFilename(oTmpPath.c_str(), "etc/windninja/example-files", NULL); - } - if(settings.contains("vegChoice")) - { - tree->surface->roughnessComboBox-> - setCurrentIndex(settings.value("vegChoice").toInt()); - } - if(settings.contains("meshChoice")) - { - int choice = settings.value("meshChoice").toInt(); - tree->surface->meshResComboBox->setCurrentIndex(choice); - if(choice == 4 && settings.contains("customRes")) - { - double r = settings.value("customRes").toDouble(); - tree->surface->meshResDoubleSpinBox->setValue(r); - } - } - if(settings.contains("meshUnits")) - { - if(settings.value("meshUnits").toBool()) - tree->surface->meshMetersRadioButton->setChecked(true); - else - tree->surface->meshFeetRadioButton->setChecked(true); - } - if(settings.contains("nProcessors")) - { - tree->solve->numProcSpinBox-> - setValue(settings.value("nProcessors").toInt()); - } - if(settings.contains("timeZone")) - { - QString v = settings.value("timeZone").toString(); - int index = tree->surface->timeZone->tzComboBox->findText(v); - if(index == -1) - tree->surface->timeZone->tzCheckBox->setChecked( true ); - index = tree->surface->timeZone->tzComboBox->findText(v); - if( index == 0 ) - tree->surface->timeZone->tzComboBox->setCurrentIndex(index + 1); - tree->surface->timeZone->tzComboBox->setCurrentIndex(index); - } - else - { - tree->surface->timeZone->tzComboBox->setCurrentIndex(2); - tree->surface->timeZone->tzComboBox->setCurrentIndex(1); - } - if(settings.contains("pointFile")) - { - QString f = settings.value("pointFile").toString(); - tree->point->stationFileName = f; - } -} - -void mainWindow::createActions() -{ - //open surface file action - openInputFileAction = new QAction(tr("Open &Elevation Input File"), this); - openInputFileAction->setIcon(QIcon(":folder_page.png")); - openInputFileAction->setShortcut(tr("Ctrl+D")); - openInputFileAction->setStatusTip(tr("Open Surface Input File")); - connect(openInputFileAction, SIGNAL(triggered()), - this, SLOT(openInputFile())); - - //exitAction - exitAction = new QAction(tr("E&xit"), this); - exitAction->setIcon(QIcon(":cancel.png")); - exitAction->setShortcut(tr("Alt+F4")); - exitAction->setStatusTip(tr("Exit WindNinja")); - connect(exitAction, SIGNAL(triggered()), - this, SLOT(close())); - - //write console output action - writeConsoleOutputAction = new QAction(tr("Write console output to file..."), this); - writeConsoleOutputAction->setIcon(QIcon(":disk.png")); - writeConsoleOutputAction->setShortcut(tr("Ctrl+W")); - writeConsoleOutputAction->setStatusTip(tr("Write the console text to disk")); - connect(writeConsoleOutputAction, SIGNAL(triggered()), this, - SLOT(writeConsoleOutput())); - - //resample data action - resampleAction = new QAction(tr("&Resample Data"), this); - resampleAction->setIcon(QIcon(":resample.png")); - resampleAction->setShortcut(tr("Ctrl+R")); - resampleAction->setStatusTip(tr("Resample Existing Data")); - connect(resampleAction, SIGNAL(triggered()), this, SLOT(resampleData())); - - //write a blank weather station file for point initialization - - writeBlankStationFileAction = new QAction(tr("Write a blank station file"), - this); - writeBlankStationFileAction->setIcon(QIcon(":disk.png")); - writeBlankStationFileAction->setShortcut(tr("Ctrl+Alt+W")); - writeBlankStationFileAction->setStatusTip(tr("Write a blank station file for point initialization")); - connect(writeBlankStationFileAction, SIGNAL(triggered()), this, - SLOT(writeBlankStationFile())); - - setConfigAction = new QAction(tr("Set Configuration Option"), this); - setConfigAction->setIcon(QIcon(":cog_go.png")); - setConfigAction->setStatusTip(tr("Set advanced runtime configuration options")); - connect(setConfigAction, SIGNAL(triggered()), this, SLOT(SetConfigOption())); - - //wind ninja help action - windNinjaHelpAction = new QAction(tr("WindNinja &Help"), this); - windNinjaHelpAction->setIcon(QIcon(":help.png")); - windNinjaHelpAction->setShortcut(tr("Ctrl+H")); - windNinjaHelpAction->setStatusTip(tr("Get Help with the WindNinja")); - connect(windNinjaHelpAction, SIGNAL(triggered()), this, - SLOT(windNinjaHelp())); - - //arcMap action - displayShapeFileProAction = new QAction(tr("How to Display Shapefiles in ArcGIS Pro"), this); - displayShapeFileProAction->setIcon(QIcon(":page_white_acrobat.png")); - connect(displayShapeFileProAction, SIGNAL(triggered()), this, - SLOT(displayArcGISPro())); - - //open wind ninja tutorial 1 action - tutorial1Action = new QAction(tr("Tutorial &1:The Basics"), this); - tutorial1Action->setIcon(QIcon(":page_white_acrobat.png")); - tutorial1Action->setShortcut(tr("Ctrl+1")); - tutorial1Action->setStatusTip(tr("Get started using the WindNinja")); - connect(tutorial1Action, SIGNAL(triggered()), this, SLOT(tutorial1())); - - //open wind ninja tutorial 2 action - tutorial2Action = new QAction(tr("Tutorial &2: Diurnal Winds and Non-neutral Stability"), this); - tutorial2Action->setIcon(QIcon(":page_white_acrobat.png")); - tutorial2Action->setShortcut(tr("Ctrl+2")); - tutorial2Action->setStatusTip(tr("Using Diurnal Winds in WindNinja")); - connect(tutorial2Action, SIGNAL(triggered()), this, SLOT(tutorial2())); - - //open wind ninja tutorial 3 action - tutorial3Action = new QAction(tr("Tutorial &3:Point Initialization"), this); - tutorial3Action->setIcon(QIcon(":page_white_acrobat.png")); - tutorial3Action->setShortcut(tr("Ctrl+3")); - tutorial3Action->setStatusTip(tr("Using Point Initialization in WindNinja")); - connect(tutorial3Action, SIGNAL(triggered()), this, SLOT(tutorial3())); - - //open wind ninja tutorial 4 action - tutorial4Action = new QAction(tr("Tutorial &4:Weather Model Initialization"), this); - tutorial4Action->setIcon(QIcon(":page_white_acrobat.png")); - tutorial4Action->setShortcut(tr("Ctrl+4")); - tutorial4Action->setStatusTip(tr("Using Weather Model Initialization in WindNinja")); - connect(tutorial4Action, SIGNAL(triggered()), this, SLOT(tutorial4())); - - //dem downloader - downloadDemAction = new QAction(tr("DEM Download Instructions"), this); - downloadDemAction->setIcon(QIcon(":page_white_acrobat.png")); - downloadDemAction->setStatusTip(tr("How to download DEM data with WindNinja")); - connect(downloadDemAction, SIGNAL(triggered()), this, SLOT(demDownload())); - - //dem downloader cli - fetchDemAction = new QAction(tr("fetch_dem Instructions"), this); - fetchDemAction->setIcon(QIcon(":page_white_acrobat.png")); - fetchDemAction->setStatusTip(tr("How to download DEM data with fetch_dem")); - connect(fetchDemAction, SIGNAL(triggered()), this, SLOT(fetchDem())); - - - //open wind ninja tutorial 4 action - cliInstructionsAction = new QAction(tr("Command Line Interface Instructions"), - this); - cliInstructionsAction->setIcon(QIcon(":page_white_acrobat.png")); - cliInstructionsAction->setShortcut(tr("Ctrl+l")); - cliInstructionsAction->setStatusTip(tr("Using the Command Line Interface")); - connect(cliInstructionsAction, SIGNAL(triggered()), - this, SLOT(cliInstructions())); - - //about wn action - aboutWindNinjaAction = new QAction(tr("&About WindNinja"), this); - aboutWindNinjaAction->setIcon(QIcon(":help.png")); - aboutWindNinjaAction->setShortcut(tr("Ctrl+A")); - aboutWindNinjaAction->setStatusTip(tr("About the WindNinja")); - connect(aboutWindNinjaAction, SIGNAL(triggered()), this, - SLOT(aboutWindNinja())); - - //citation wn action - citeWindNinjaAction = new QAction(tr("&Citation"), this); - citeWindNinjaAction->setIcon(QIcon(":citation.png")); - citeWindNinjaAction->setShortcut(tr("Ctrl+T")); - citeWindNinjaAction->setStatusTip(tr("How to cite WindNinja")); - connect(citeWindNinjaAction, SIGNAL(triggered()), this, - SLOT(citeWindNinja())); - - //support email action - supportEmailAction = new QAction(tr("&Email Us"), this); - supportEmailAction->setIcon(QIcon(":email.png")); - supportEmailAction->setShortcut(tr("Ctrl+E")); - supportEmailAction->setStatusTip(tr("Email bugs/comments/questions to the WindNinja team")); - connect(supportEmailAction, SIGNAL(triggered()), this, - SLOT(supportEmail())); - - submitBugReportAction = new QAction(tr("Submit Bug Report"), this); - submitBugReportAction->setIcon(QIcon(":bug_link.png")); - submitBugReportAction->setShortcut(tr("Ctrl+B")); - submitBugReportAction->setStatusTip(tr("Submit a bug report via GitHub (requires GitHub ID)")); - connect(submitBugReportAction, SIGNAL(triggered()), this, - SLOT(bugReport())); - - //about qt action - aboutQtAction = new QAction(tr("About &Qt"), this); - aboutQtAction->setStatusTip(tr("Show the Qt library's About box")); - connect(aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt())); - - //test action to test slots. - testAction = new QAction(tr("Test"), this); - connect(testAction, SIGNAL(triggered()), this, SLOT(test())); -} - -void mainWindow::createMenus() -{ - //file menu - fileMenu = menuBar()->addMenu(tr("&File")); - fileMenu->addAction(openInputFileAction); - fileMenu->addSeparator(); - fileMenu->addAction(writeConsoleOutputAction); - fileMenu->addSeparator(); - fileMenu->addAction(exitAction); - //options menu, used member in QDockWidget to return QAction to toggle. - optionsMenu = menuBar()->addMenu(tr("&Options")); - optionsMenu->addAction(console->toggleViewAction()); - - //tools menu - toolsMenu = menuBar()->addMenu(tr("&Tools")); - //toolsMenu->addAction(resampleAction); - toolsMenu->addAction(writeBlankStationFileAction); - toolsMenu->addAction(setConfigAction); - - //help/tutorial menus - helpMenu = menuBar()->addMenu(tr("&Help")); - shapeSubMenu = helpMenu->addMenu(tr("Displaying Shapefiles")); - shapeSubMenu->addAction(displayShapeFileProAction); - QMenu *shapeSubMenu; - tutorialSubMenu = helpMenu->addMenu(tr("Tutorials")); - tutorialSubMenu->addAction(tutorial1Action); - tutorialSubMenu->addAction(tutorial2Action); - tutorialSubMenu->addAction(tutorial3Action); - tutorialSubMenu->addAction(tutorial4Action); - helpMenu->addAction(downloadDemAction); - helpMenu->addAction(fetchDemAction); - helpMenu->addAction(cliInstructionsAction); - helpMenu->addAction(aboutWindNinjaAction); - helpMenu->addAction(citeWindNinjaAction); - helpMenu->addAction(supportEmailAction); - helpMenu->addAction(submitBugReportAction); - - //context menu for text edit - //console->consoleTextEdit->addAction(writeConsoleOutputAction); - //console->consoleTextEdit->setContextMenuPolicy(Qt::ActionsContextMenu); - - - //helpMenu->addAction(aboutQtAction); - //helpMenu->addAction(testAction); -} - -/** - * Create connections for mainWindow - * - */ -void mainWindow::createConnections() -{ - // Connections for DEM Downloader Button - connect(tree->surface->downloadDEMButton, SIGNAL(clicked()), - this, SLOT(openDEMDownloader())); - // - connect(&fileWatcher, SIGNAL(fileChanged(QString)), - this, SLOT(inputFileDeleted())); - -#ifdef NINJAFOAM - //Connect input file open button to dialog box - connect(tree->surface->foamCaseOpenToolButton, SIGNAL(clicked()), - this, SLOT(openExistingCase())); -#endif - //Connect input file open button to dialog box - connect(tree->surface->inputFileOpenToolButton, SIGNAL(clicked()), - this, SLOT(openInputFile())); - //connect signals/slots - //connect combo to change mesh res - connect(tree->surface->meshResComboBox, SIGNAL(currentIndexChanged(int)), - this, SLOT(checkMeshCombo())); - //also connect the radio button for feet display - connect(tree->surface->meshMetersRadioButton, SIGNAL(toggled(bool)), - this, SLOT(checkMeshUnits(bool))); - //connect the mesh resolution on the surface input page to the output - //'use mesh resolution' sections. - connect(tree->surface->meshResDoubleSpinBox, SIGNAL(valueChanged(double)), - this, SLOT(updateOutRes())); - //connect the getLatLon button to the fx - //connect(tree->location->getLatLonToolButton, SIGNAL(clicked()), - // this, SLOT(getLatLon())); - //also connect the toggle on the check box on output pages to update - - /* - ** When we update the mesh resolution, update the outputs if the output is - ** enabled. We also update the output resolutions when the various outputs - ** are enabled. Additionally when either of the radio buttons are checked. - */ - connect(tree->google->useMeshResCheckBox, SIGNAL(toggled(bool)), this, - SLOT(updateOutRes())); - connect(tree->fb->useMeshResCheckBox, SIGNAL(toggled(bool)), this, - SLOT(updateOutRes())); - connect(tree->shape->useMeshResCheckBox, SIGNAL(toggled(bool)), this, - SLOT(updateOutRes())); - connect(tree->pdf->useMeshResCheckBox, SIGNAL(toggled(bool)), this, - SLOT(updateOutRes())); - connect(tree->google->googleGroupBox, SIGNAL(toggled(bool)), this, - SLOT(updateOutRes())); - connect(tree->fb->fbGroupBox, SIGNAL(toggled(bool)), this, - SLOT(updateOutRes())); - connect(tree->shape->shapeGroupBox, SIGNAL(toggled(bool)), this, - SLOT(updateOutRes())); - connect(tree->pdf->pdfGroupBox, SIGNAL(toggled(bool)), this, - SLOT(updateOutRes())); - connect(tree->surface->meshMetersRadioButton, SIGNAL(toggled(bool)), this, - SLOT(updateOutRes())); - connect(tree->surface->meshFeetRadioButton, SIGNAL(toggled(bool)), this, - SLOT(updateOutRes())); - - connect(tree->diurnal->diurnalGroupBox, SIGNAL(toggled(bool)), - tree->wind->windTable, SLOT(enableDiurnalCells(bool))); - connect(tree->diurnal->diurnalGroupBox, SIGNAL(toggled(bool)), - this, SLOT(enablePointDate(bool))); - connect(tree->stability->stabilityGroupBox, SIGNAL(toggled(bool)), - this, SLOT(enablePointDate(bool))); - connect(tree->stability->stabilityGroupBox, SIGNAL(toggled(bool)), - tree->wind->windTable, SLOT(enableStabilityCells(bool))); -#ifdef NINJAFOAM - connect(tree->ninjafoam->ninjafoamGroupBox, SIGNAL(toggled(bool)), - this, SLOT(enableNinjafoamOptions(bool))); -#endif - //connect change in tree to the checkers - connect(tree->tree, SIGNAL(currentItemChanged(QTreeWidgetItem *, - QTreeWidgetItem *)), this, SLOT(checkAllItems())); - - //connect the diurnalGroupBox->toggled to checkers - connect(tree->diurnal->diurnalGroupBox, SIGNAL(toggled(bool)), - this, SLOT(checkAllItems())); - connect(tree->stability->stabilityGroupBox, SIGNAL(toggled(bool)), - this, SLOT(checkAllItems())); -#ifdef NINJAFOAM - //connect the solver method check boxes for mutex - connect(tree->ninjafoam->ninjafoamGroupBox, SIGNAL(toggled(bool)), - this, SLOT(checkAllItems())); - connect(tree->nativesolver->nativeSolverGroupBox, SIGNAL(toggled(bool)), - this, SLOT(checkAllItems())); - connect( tree->nativesolver->nativeSolverGroupBox, SIGNAL( toggled( bool ) ), - this, SLOT( selectNativeSolver( bool ) ) ); - connect( tree->ninjafoam->ninjafoamGroupBox, SIGNAL( toggled( bool ) ), - this, SLOT( selectNinjafoamSolver( bool ) ) ); -#endif - - //connect the speed and direction in each row to the checkers - for(int i=0;iwind->windTable->nRuns;i++) - { - connect(tree->wind->windTable->speed[i], SIGNAL(valueChanged(double)), this, - SLOT(checkAllItems())); - connect(tree->wind->windTable->dir[i], SIGNAL(valueChanged(int)), this, - SLOT(checkAllItems())); - } - - //connect the initialization check boxes to checkers - connect(tree->wind->windGroupBox, SIGNAL(toggled(bool)), - this, SLOT(checkAllItems())); - connect(tree->point->pointGroupBox, SIGNAL(toggled(bool)), - this, SLOT(checkAllItems())); - connect(tree->point->pointGroupBox, SIGNAL(toggled(bool)), - this, SLOT(enablePointDate(bool))); - connect(tree->weather->weatherGroupBox, SIGNAL(toggled(bool)), - this, SLOT(checkAllItems())); - - //Connects making changes in pointInput to checkers - //Makes the validation happen instantaneously - connect(tree->point->treeView, - SIGNAL(clicked(const QModelIndex &)), - this,SLOT(checkAllItems())); - //When the user changes the date time, check to make sure it is sane - connect(tree->point->startTime,SIGNAL(dateTimeChanged(QDateTime)),this,SLOT(checkAllItems())); - connect(tree->point->stopTime,SIGNAL(dateTimeChanged(QDateTime)),this,SLOT(checkAllItems())); - - connect(tree->point->refreshToolButton,SIGNAL(clicked(bool)),this,SLOT(checkAllItems())); - - //connect selection change in weather to checkers - connect(tree->weather->treeView->selectionModel(), - SIGNAL(currentChanged(const QModelIndex&, const QModelIndex&)), - this, SLOT(checkAllItems())); - - //connect the output check boxes with the checkers - connect(tree->google->googleGroupBox, SIGNAL(toggled(bool)), - this, SLOT(checkAllItems())); - connect(tree->fb->fbGroupBox, SIGNAL(toggled(bool)), - this, SLOT(checkAllItems())); - connect(tree->shape->shapeGroupBox, SIGNAL(toggled(bool)), - this, SLOT(checkAllItems())); - connect(tree->pdf->pdfGroupBox, SIGNAL(toggled(bool)), - this, SLOT(checkAllItems())); - connect(tree->vtk->vtkGroupBox, SIGNAL(toggled(bool)), - this, SLOT(checkAllItems())); - - //and the spinboxes - connect(tree->google->googleResSpinBox, SIGNAL(valueChanged(double)), - this, SLOT(checkAllItems())); - connect(tree->fb->fbResSpinBox, SIGNAL(valueChanged(double)), - this, SLOT(checkAllItems())); - connect(tree->shape->shapeResSpinBox, SIGNAL(valueChanged(double)), - this, SLOT(checkAllItems())); - connect(tree->pdf->pdfResSpinBox, SIGNAL(valueChanged(double)), - this, SLOT(checkAllItems())); - - //check the google res, make sure not bad - connect(tree->google->googleResSpinBox, SIGNAL(valueChanged(double)), - this, SLOT(checkKmlLimit(double))); - - //solve button and solve() - connect(tree->solve->solveToolButton, SIGNAL(clicked()), - this, SLOT(solve())); - - connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - - connect(tree->solve->solveToolButton, SIGNAL(clicked()), progressDialog, - SLOT(forceShow())); - - //connect double clicks on trees to main action for that item - connect(tree->tree, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), - this, SLOT(treeDoubleClick(QTreeWidgetItem*, int))); - - //connect inputFileChanged to anything that wants it - connect(this, SIGNAL(inputFileChanged(QString)), - tree->weather, SLOT(setInputFile(QString))); - connect(this, SIGNAL(inputFileChanged(QString)), - tree->point, SLOT(setInputFile(QString))); - connect(this,SIGNAL(inputFileChanged(QString)), - tree->point, SLOT(checkForModelData())); //Update csv list when file changes in point -//Signal To Point Input what Diurnal Input is doing - connect(this, SIGNAL(mainDiurnalChanged(bool)),tree->point,SLOT(setDiurnalParam(bool))); - - //connect other writeToConsoles to the main writeToConsole - connect( tree->point, SIGNAL( writeToConsole( QString ) ), - this, SLOT( writeToConsole( QString ) ) ); - - //connect timezone combo to weather model tz string - connect( tree->surface->timeZone, SIGNAL( tzChanged( QString ) ), - tree->weather, SLOT( updateTz( QString ) ) ); - //connect time zone for station fetch - connect( tree->surface->timeZone, SIGNAL( tzChanged( QString ) ), - tree->point, SLOT( updateTz( QString ) ) ); - - //connect the initialization check boxes to the others for mutex - connect( tree->wind->windGroupBox, SIGNAL( toggled( bool ) ), - this, SLOT( selectWindInitialization( bool ) ) ); - connect( tree->point->pointGroupBox, SIGNAL( toggled( bool ) ), - this, SLOT( selectPointInitialization( bool ) ) ); - connect( tree->weather->weatherGroupBox, SIGNAL( toggled( bool ) ), - this, SLOT( selectWeatherInitialization( bool ) ) ); - - //connect change in station file to checkAllItems - connect( tree->point, SIGNAL( stationFileChanged() ), - this, SLOT( checkAllItems() ) ); - - //connect the solve open out path button - connect( tree->solve->openOutputPathButton, SIGNAL( clicked() ), - this, SLOT( openOutputPath() ) ); - - connect( progressDialog, SIGNAL( canceled() ), - this, SLOT( updateTimer() ) ); -} -/** - * Slot to catch a change in initialization method - * - * @param pick I am picked - */ -void mainWindow::selectWindInitialization( bool pick ) -{ - if( pick ) { - tree->point->pointGroupBox->setChecked( false ); - tree->weather->weatherGroupBox->setChecked( false ); - tree->output->wxModelOutputCheckBox->setDisabled( true ); - checkAllItems(); - } -} - -void mainWindow::selectPointInitialization( bool pick ) -{ - if( pick ) { - tree->wind->windGroupBox->setChecked( false ); - tree->weather->weatherGroupBox->setChecked( false ); - tree->output->wxModelOutputCheckBox->setDisabled( true ); - checkAllItems(); - } -} - -void mainWindow::selectWeatherInitialization( bool pick ) -{ - if( pick ) { - tree->wind->windGroupBox->setChecked( false ); - tree->point->pointGroupBox->setChecked( false ); - checkAllItems(); - } - tree->output->wxModelOutputCheckBox->setEnabled( pick ); -} - -#ifdef NINJAFOAM -void mainWindow::selectNativeSolver( bool pick ) -{ - if( pick ) { - tree->ninjafoam->ninjafoamGroupBox->setChecked( false ); - checkAllItems(); - } -} - -void mainWindow::selectNinjafoamSolver( bool pick ) -{ - if( pick ) { - tree->nativesolver->nativeSolverGroupBox->setChecked( false ); - checkAllItems(); - } -} - -void mainWindow::openExistingCase() -{ - QString dir = QFileDialog::getExistingDirectory(this, - tr("Open Existing Case"), - inputFileDir.absolutePath(), - QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); - - QString shortName = QFileInfo(dir).fileName(); - tree->surface->foamCaseLineEdit->setText(shortName); - - tree->surface->downloadDEMButton->setEnabled(false); - tree->surface->meshResComboBox->setEnabled(false); - -// if(existingCaseDir != QFileInfo(dir).canonicalFilePath()) -// { -// emit(inputFileChanged(QFileInfo(dir).fileName())); -// } - - existingCaseDir = QFileInfo(dir).canonicalFilePath(); - - if(dir.isEmpty()){ - existingCaseDir = ""; - tree->surface->downloadDEMButton->setEnabled(true); - tree->surface->meshResComboBox->setEnabled(true); - } - - if(!dir.isEmpty()){ - //look for DEM that matches the STL basename in the NINJAFOAM_ paraent directory - char **papszFileList; - const char *pszFilename; - const char *pszBasename; - papszFileList = VSIReadDir( CPLSPrintf("%s/constant/triSurface", existingCaseDir.toStdString().c_str()) ); - //get the basename of the STL - for(int i=0; isurface->foamCaseLineEdit->setText(""); - tree->surface->downloadDEMButton->setEnabled(true); - tree->surface->meshResComboBox->setEnabled(true); - return; - } - else{//Else set pszName to the demfilename - pszFname = CPLStrdup(CPLFormFilename(pszDemPath, pszInputFilename, "")); - } - -//// const char* pszFname = CPLStrdup(CPLFormFilename(pszDemPath, pszInputFilename, ""));pszFname = CPLStrdup(CPLFormFilename(pszDemPath, pszInputFilename, "")); - - updateFileInputForCase(pszFname); //Update the dem file name - - CSLDestroy( papszFileList ); - CPLFree( (void*)pszBasename ); - CPLFree( (void*)pszDemPath ); - CPLFree( (void*)pszInputFilename ); - CPLFree( (void*)pszFname ); - - tree->surface->downloadDEMButton->setEnabled(false); - tree->surface->meshResComboBox->setEnabled(false); - } -} -#endif //NINJAFOAM - -//function for finding and opening an input file. -void mainWindow::openInputFile() -{ - //writeToConsole(inputFileDir.absolutePath()); - //setCursor(Qt::WaitCursor); - QString fileName = QFileDialog::getOpenFileName(this, - tr("Open Elevation Input File"), - inputFileDir.absolutePath(), - - tr("Elevation Input Files (*.asc *.lcp *.tif *.img)")); - - if(!fileName.isEmpty()) - { - cwd = QFileInfo(fileName).dir(); - //use GDAL to check the file - QString newFile = checkForNoData(fileName); - if(!newFile.isEmpty()) - { - fileName = newFile; - } - - if(checkInputFile(fileName) < 0) - { - tree->surface->inputFileLineEdit->clear(); - fileName = ""; - return; - } - - QString shortName = QFileInfo(fileName).fileName(); - if(inputFileType == LCP) - { - tree->surface->roughnessComboBox->setDisabled(true); - tree->surface->roughnessComboBox->hide(); - tree->surface->roughnessLabel->show(); - } - else - { - tree->surface->roughnessComboBox->setDisabled(false); - tree->surface->roughnessComboBox->show(); - tree->surface->roughnessLabel->hide(); - } - - tree->surface->inputFileLineEdit->setText(shortName); - - tree->surface->meshResComboBox->setEnabled(true); - - if(inputFileName != fileName) - emit(inputFileChanged(fileName)); - - inputFileName = fileName; - inputFileDir = QFileInfo(fileName).absolutePath(); - tree->solve->setOutputDir( inputFileDir.absolutePath() ); - shortInputFileName = shortName; - checkMeshCombo(); - checkInputItem(); - } - -#ifdef NINJAFOAM - if(tree->surface->foamCaseLineEdit->text() != ""){ - tree->surface->meshResComboBox->setEnabled(false); - } -#endif - -} -#ifdef NINJAFOAM -/** - * Slot to update elevation file input for existing case - * - * @param file File associated with existing case - */ -void mainWindow::updateFileInputForCase(const char* file) -{ - QString fileName(file); - fileWatcher.addPath(fileName); - - if(!fileName.isEmpty()) - { - cwd = QFileInfo(fileName).dir(); - //use GDAL to check the file - if(checkInputFile(fileName) < 0) - { - tree->surface->inputFileLineEdit->clear(); - fileName = ""; - return; - } - - QString shortName = QFileInfo(fileName).fileName(); - if(inputFileType == LCP) - { - tree->surface->roughnessComboBox->setDisabled(true); - tree->surface->roughnessComboBox->hide(); - tree->surface->roughnessLabel->show(); - } - else - { - tree->surface->roughnessComboBox->setDisabled(false); - tree->surface->roughnessComboBox->show(); - tree->surface->roughnessLabel->hide(); - } - - tree->surface->inputFileLineEdit->setText(shortName); - - tree->surface->meshResComboBox->setEnabled(true); - - if(inputFileName != fileName) - emit(inputFileChanged(fileName)); - - inputFileName = fileName; - inputFileDir = QFileInfo(fileName).absolutePath(); - tree->solve->setOutputDir( inputFileDir.absolutePath() ); - shortInputFileName = shortName; - checkMeshCombo(); - checkInputItem(); - } -} -#endif //NINJAFOAM - -/** - * Slot to update elevation file input with downloaded DEM file - * - * @param file File created from downloaded DEM - */ -void mainWindow::updateFileInput(const char* file) -{ - QString fileName(file); - - fileWatcher.addPath(fileName); - - if(!fileName.isEmpty()) - { - cwd = QFileInfo(fileName).dir(); - //use GDAL to check the file - if(checkInputFile(fileName) < 0) - { - tree->surface->inputFileLineEdit->clear(); - fileName = ""; - return; - } - - QString shortName = QFileInfo(fileName).fileName(); - if(inputFileType == LCP) - { - tree->surface->roughnessComboBox->setDisabled(true); - tree->surface->roughnessComboBox->hide(); - tree->surface->roughnessLabel->show(); - } - else - { - tree->surface->roughnessComboBox->setDisabled(false); - tree->surface->roughnessComboBox->show(); - tree->surface->roughnessLabel->hide(); - } - - tree->surface->inputFileLineEdit->setText(shortName); - - tree->surface->meshResComboBox->setEnabled(true); - - if(inputFileName != fileName) - emit(inputFileChanged(fileName)); - - inputFileName = fileName; - inputFileDir = QFileInfo(fileName).absolutePath(); - shortInputFileName = shortName; - checkMeshCombo(); - checkInputItem(); - tree->solve->setOutputDir(QFileInfo(fileName).absolutePath()); - } -} - -void mainWindow::inputFileDeleted() -{ - tree->surface->inputFileLineEdit->clear(); - //emit(inputFileChanged()); - checkMeshCombo(); - checkInputItem(); -} - -void mainWindow::openMainWindow() -{ - this->setEnabled(true); -} - -void mainWindow::createConsole() -{ - console = new ConsoleDockWidget; - addDockWidget(Qt::BottomDockWidgetArea, console); - console->consoleTextEdit->setReadOnly(true); - - //set prompt - prompt = "~>"; - //orange - orange.setRgb(255, 165, 0); - -} -void mainWindow::setPrompt(QString p) -{ - prompt = p; -} -void mainWindow::writeConsoleOutput() -{ - QDateTime date(QDateTime::currentDateTime()); - QString fileName = QFileDialog::getSaveFileName - (this, tr("Save console output as..."), "console-output.txt", - tr("Text Files (*.txt)")); - writeToConsole("WindNinja console output from:"); - writeToConsole(date.toString("MM/dd/yyyy hh:mm:ss")); - if(!fileName.isEmpty()) - { - std::ofstream fout(fileName.toStdString().c_str(), std::ios::out); - QString text = console->consoleTextEdit->toPlainText(); - fout << text.toStdString(); - writeToConsole(QString("Console data written to " + fileName + "."), Qt::darkGreen); - fout.close(); - } - else - writeToConsole(QString("Cannot open " + fileName + " for writing."), Qt::red); -} - -//create timers for status bar -void mainWindow::createTimers() -{ - runTime = new QTime(0, 0, 0, 0); - runTime->start(); -} - -void mainWindow::updateTimer() -{ - //elapsedRunTime = runTime->elapsed() / 1000.0; - writeToConsole("Total Simulation time: " + QString::number(elapsedRunTime, 'f', 2) + " seconds"); -} - -void mainWindow::openDEMDownloader() -{ - demWidget = new WidgetDownloadDEM(); - //demWidget->setAttribute(Qt::WA_DeleteOnClose, true); - demWidget->settingsDir.setPath(inputFileDir.absolutePath()); - connect(demWidget, SIGNAL(doneDownloading(const char*)), this, SLOT(updateFileInput(const char*))); - connect(demWidget, SIGNAL(exitDEM()), this, SLOT(openMainWindow())); - connect(demWidget, SIGNAL(destroyed()), this, SLOT(openMainWindow())); - this->setEnabled(false); -} - -void mainWindow::test() -{ -} - -void mainWindow::resampleData() -{} - -void mainWindow::writeBlankStationFile() -{ - QString fileName = QFileDialog::getSaveFileName - (this, tr("Save station file as..."), "stations.csv", - tr("Text Files (*.csv)")); - if(!fileName.isEmpty()) - wxStation::writeBlankStationFile( fileName.toStdString() ); - else - return; -} - -void mainWindow::windNinjaHelp() -{} - -void mainWindow::tutorial1() -{ - pwd.cd("share/windninja/doc/tutorials"); - writeToConsole("Opening " + pwd.absoluteFilePath("WindNinja_tutorial1.pdf")); - - if(!QDesktopServices::openUrl(QUrl(pwd.absoluteFilePath("WindNinja_tutorial1.pdf")))) - { - - QMessageBox::warning(this, tr("Broken Link."), - tr("The link to the tutorial is broken, you can get to it through the Start Menu."), - QMessageBox::Ok | QMessageBox::Default); - } - pwd.setPath(QString::fromStdString(FindNinjaBinDir())); - pwd.cdUp(); -} - -void mainWindow::tutorial2() -{ - pwd.cd("share/windninja/doc/tutorials"); - writeToConsole("Opening " + pwd.absoluteFilePath("WindNinja_tutorial2.pdf")); - - if(!QDesktopServices::openUrl(QUrl(pwd.absoluteFilePath("WindNinja_tutorial2.pdf")))) - { - - QMessageBox::warning(this, tr("Broken Link."), - tr("The link to the tutorial is broken, you can get to it through the Start Menu."), - QMessageBox::Ok | QMessageBox::Default); - } - pwd.setPath(QString::fromStdString(FindNinjaBinDir())); - pwd.cdUp(); -} - -void mainWindow::tutorial3() -{ - pwd.cd("share/windninja/doc/tutorials"); - writeToConsole("Opening " + pwd.absoluteFilePath("WindNinja_tutorial3.pdf")); - - if(!QDesktopServices::openUrl(QUrl(pwd.absoluteFilePath("WindNinja_tutorial3.pdf")))) - { - - QMessageBox::warning(this, tr("Broken Link."), - tr("The link to the tutorial is broken, you can get to it through the Start Menu."), - QMessageBox::Ok | QMessageBox::Default); - } - pwd.setPath(QString::fromStdString(FindNinjaBinDir())); - pwd.cdUp(); -} - -void mainWindow::tutorial4() -{ - pwd.cd("share/windninja/doc/tutorials"); - writeToConsole("Opening " + pwd.absoluteFilePath("WindNinja_tutorial4.pdf")); - - if(!QDesktopServices::openUrl(QUrl(pwd.absoluteFilePath("WindNinja_tutorial4.pdf")))) - { - - QMessageBox::warning(this, tr("Broken Link."), - tr("The link to the tutorial is broken, you can get to it through the Start Menu."), - QMessageBox::Ok | QMessageBox::Default); - } - pwd.setPath(QString::fromStdString(FindNinjaBinDir())); - pwd.cdUp(); -} - -void mainWindow::demDownload() -{ - pwd.cd("share/windninja/doc"); - writeToConsole("Opening " + pwd.absoluteFilePath("download_elevation_file.pdf")); - - if(!QDesktopServices::openUrl(QUrl(pwd.absoluteFilePath("download_elevation_file.pdf")))) - { - - QMessageBox::warning(this, tr("Broken Link."), - tr("The link to the tutorial is broken, you can get to it through the Start Menu."), - QMessageBox::Ok | QMessageBox::Default); - } - pwd.setPath(QString::fromStdString(FindNinjaBinDir())); - pwd.cdUp(); -} - -void mainWindow::fetchDem() -{ - pwd.cd("share/windninja/doc"); - writeToConsole("Opening " + pwd.absoluteFilePath("fetch_dem_instructions.pdf")); - - if(!QDesktopServices::openUrl(QUrl(pwd.absoluteFilePath("fetch_dem_instructions.pdf")))) - { - - QMessageBox::warning(this, tr("Broken Link."), - tr("The link to the tutorial is broken, you can get to it through the Start Menu."), - QMessageBox::Ok | QMessageBox::Default); - } - pwd.setPath(QString::fromStdString(FindNinjaBinDir())); - pwd.cdUp(); -} - - -void mainWindow::displayArcGISPro() -{ - pwd.cd("share/windninja/doc"); - writeToConsole("Opening " + pwd.absoluteFilePath("displaying_wind_vectors_in_ArcGIS_Pro.pdf")); - if(!QDesktopServices::openUrl(QUrl(pwd.absoluteFilePath("displaying_wind_vectors_in_ArcGIS_Pro.pdf")))) - { - - QMessageBox::warning(this, tr("Broken Link."), - tr("The link to the tutorial is broken, you can get to it through the Start Menu."), - QMessageBox::Ok | QMessageBox::Default); - } - pwd.setPath(QString::fromStdString(FindNinjaBinDir())); - pwd.cdUp(); -} - -void mainWindow::cliInstructions() -{ - pwd.cd("share/windninja/doc"); - writeToConsole("Opening " + pwd.absoluteFilePath("CLI_instructions.pdf")); - - if(!QDesktopServices::openUrl(QUrl(pwd.absoluteFilePath("CLI_instructions.pdf")))) - { - - QMessageBox::warning(this, tr("Broken Link."), - tr("The link to the tutorial is broken, you can get to it through the Start Menu."), - QMessageBox::Ok | QMessageBox::Default); - } - pwd.setPath(QString::fromStdString(FindNinjaBinDir())); - pwd.cdUp(); -} - -void mainWindow::supportEmail() -{ - QDesktopServices::openUrl(QUrl("mailto:wind.ninja.support@gmail.com?subject=[windninja-support]")); -} - -void mainWindow::bugReport() -{ - QDesktopServices::openUrl(QUrl("https://github.com/firelab/windninja/issues/new")); -} - -void mainWindow::aboutWindNinja() -{ - QString aboutText = "

WindNinja

\n"; - aboutText.append("

Version:

" + QString(NINJA_VERSION_STRING) + "

"); - - aboutText.append("

Git Commit:

" + QString(NINJA_SCM_VERSION) + "

"); - - aboutText.append("

Release Date:

" + QString(NINJA_RELEASE_DATE) + "

"); - aboutText.append("

Developed by:

Jason Forthofer
" \ - "Natalie Wagenbrenner
" \ - "Kyle Shannon
" \ - "Loren Atwood
" \ - "Mason Willman"); \ - aboutText.append("

Missoula Fire Sciences Laboratory
"); - aboutText.append("Rocky Mountain Research Station
"); - aboutText.append("USDA Forest Service
"); - aboutText.append("5775 Highway 10 W.
"); - aboutText.append("Missoula, MT 59808

"); - aboutText.append("

Contributors

"); - aboutText.append("

Sponsored By:

"); - aboutText.append("USDA Forest Service
"); - aboutText.append("Center for Environmental Management of Military Lands at Colorado State University
"); - aboutText.append("Joint Fire Sciences Program
"); - aboutText.append("Washington State University

"); - aboutText.append("

Special Thanks

"); - aboutText.append("
"); - - QMessageBox::about(this, tr("About WindNinja"), - aboutText); -} - -void mainWindow::citeWindNinja() -{ - QString citeText = "

To cite WindNinja in a publication use:

"; - - citeText.append("Forthofer, J.M., Butler, B.W., Wagenbrenner, N.S., 2014. A comparison "); - citeText.append("of three approaches for simulating fine-scale surface winds in "); - citeText.append("support of wildland fire management. Part I. Model formulation and "); - citeText.append("comparison against measurements. International Journal of Wildland "); - citeText.append("Fire, 23:969-931. doi: 10.1071/WF12089."); - - citeText.append("

For additional WindNinja publications visit:

"); - citeText.append("

https://ninjastorm.firelab.org/windninja/publications

"); - - QMessageBox::about(this, tr("Cite WindNinja"), - citeText); -} - -void mainWindow::writeToConsole(QString message, QColor color) -{ - console->consoleTextEdit->setTextColor(color); - console->consoleTextEdit->append(QString::number(lineNumber) + ": " + message); - lineNumber++; - //console->consoleTextEdit->append(prompt + message); -} - -void mainWindow::updateOutRes() -{ - //get res from surface page and store as an int - double resolution = tree->surface->meshResDoubleSpinBox->value(); - bool useMeters = tree->surface->meshMetersRadioButton->isChecked(); - if (tree->google->useMeshResCheckBox->isChecked() == true) { - tree->google->googleResSpinBox->setValue(resolution); - if (useMeters) { - tree->google->googleMetersRadioButton->setChecked(true); - } else { - tree->google->googleFeetRadioButton->setChecked(true); - } - } - if (tree->fb->useMeshResCheckBox->isChecked() == true) { - tree->fb->fbResSpinBox->setValue(resolution); - if (useMeters) { - tree->fb->fbMetersRadioButton->setChecked(true); - } else { - tree->fb->fbFeetRadioButton->setChecked(true); - } - } - if (tree->shape->useMeshResCheckBox->isChecked() == true) { - tree->shape->shapeResSpinBox->setValue(resolution); - if (useMeters) { - tree->shape->shapeMetersRadioButton->setChecked(true); - } else { - tree->shape->shapeFeetRadioButton->setChecked(true); - } - } - if (tree->pdf->useMeshResCheckBox->isChecked() == true) { - tree->pdf->pdfResSpinBox->setValue(resolution); - if (useMeters) { - tree->pdf->pdfMetersRadioButton->setChecked(true); - } else { - tree->pdf->pdfFeetRadioButton->setChecked(true); - } - } -} - -//empty fx, need to write it when help is done. -int mainWindow::openHelp(int target) -{ - return target; -} - -void mainWindow::checkMeshCombo() -{ - int choice = tree->surface->meshResComboBox->currentIndex(); - double res = 200; - //there is a splitter at 3 - if(choice == 4) - { - tree->surface->meshResDoubleSpinBox->setEnabled(true); - } - else - { - if(tree->surface->inputFileLineEdit->text() == "") - { - tree->surface->meshResDoubleSpinBox->setValue(res); - meshCellSize = res; - tree->surface->meshResDoubleSpinBox->setEnabled(false); - } - else - { - tree->surface->meshResDoubleSpinBox->setEnabled(false); - res = computeCellSize(choice); - if(tree->surface->meshFeetRadioButton->isChecked()) - res *= 3.28083989502; - tree->surface->meshResDoubleSpinBox->setValue(res); - meshCellSize = res; - writeToConsole("Mesh Resolution set to " + - QString::number(res)); //Note that this is very annoying for pointInitilaization/Station-fetch - } - } -} - -void mainWindow::checkMeshUnits(bool checked) -{ - if(checked) - checkMeshCombo(); - else - checkMeshCombo(); -} - -double mainWindow::computeCellSize(int index) -{ - int coarse, medium, fine; - double meshResolution; - - meshResolution = 200.0; - -#ifdef NINJAFOAM - if( tree->ninjafoam->ninjafoamGroupBox->isChecked() ){ - /*ninjafoam: calculate mesh resolution of lower volume in block mesh*/ - coarse = 25000; - medium = 50000; - fine = 100000; - } - else{ - /* use native mesh */ - coarse = 4000; - medium = 10000; - fine = 20000; - } -#else - coarse = 4000; - medium = 10000; - fine = 20000; -#endif //NINJAFOAM - - int targetNumHorizCells = fine; - switch(index) - { - case 0: - targetNumHorizCells = coarse; - break; - case 1: - targetNumHorizCells = medium; - break; - case 2: - targetNumHorizCells = fine; - break; - case 3: - return meshResolution; - break; - case 4: - return meshResolution; - break; - default: - return meshResolution; - } - -#ifdef NINJAFOAM - if( tree->ninjafoam->ninjafoamGroupBox->isChecked() ){ - /* ninjafoam mesh */ - - double XLength = GDALXSize * GDALCellSize; - double YLength = GDALYSize * GDALCellSize; - - double dz = GDALMaxValue - GDALMinValue; - double ZLength = max((0.1 * max(XLength, YLength)), (dz + 0.1 * dz)); - double zmin, zmax; - zmin = GDALMaxValue + 0.05 * ZLength; //zmin (above highest point in DEM for MDM) - zmax = GDALMaxValue + ZLength; //zmax - - double volume; - double cellCount; - double cellVolume; - - volume = XLength * YLength * (zmax-zmin); //volume of blockMesh - cellCount = targetNumHorizCells * 0.5; // cell count in volume 1 - cellVolume = volume/cellCount; // volume of 1 cell in blockMesh - double side = std::pow(cellVolume, (1.0/3.0)); // length of side of cell in blockMesh - - //determine number of rounds of refinement - int nCellsToAdd = 0; - int refinedCellCount = 0; - int nCellsInLowestLayer = int(XLength/side) * int(YLength/side); - int nRoundsRefinement = 0; - while(refinedCellCount < (0.5 * targetNumHorizCells)){ - nCellsToAdd = nCellsInLowestLayer * 8; //each cell is divided into 8 cells - refinedCellCount += nCellsToAdd - nCellsInLowestLayer; //subtract the parent cells - nCellsInLowestLayer = nCellsToAdd/2; //only half of the added cells are in the lowest layer - nRoundsRefinement += 1; - } - meshResolution = side/(nRoundsRefinement*2.0); - } - else{ - /* native windninja mesh */ - double XLength = GDALXSize * GDALCellSize; - double YLength = GDALYSize * GDALCellSize; - double nXCells = 2 * std::sqrt((double)targetNumHorizCells) * (XLength / (XLength + YLength)); - double nYCells = 2 * std::sqrt((double)targetNumHorizCells) * (YLength / (XLength + YLength)); - - double XCellSize = XLength / nXCells; - double YCellSize = YLength / nYCells; - - meshResolution = (XCellSize + YCellSize) / 2; - - } -#else - double XLength = GDALXSize * GDALCellSize; - double YLength = GDALYSize * GDALCellSize; - double nXCells = 2 * std::sqrt((double)targetNumHorizCells) * (XLength / (XLength + YLength)); - double nYCells = 2 * std::sqrt((double)targetNumHorizCells) * (YLength / (XLength + YLength)); - - double XCellSize = XLength / nXCells; - double YCellSize = YLength / nYCells; - - meshResolution = (XCellSize + YCellSize) / 2; - - //noGoogleCellSize = std::sqrt((XLength * YLength) / noGoogleNumCells); -#endif //NINJAFOAM - - return meshResolution; -} - -//open input file as a GDALDataset, return file type enum; -int mainWindow::checkInputFile(QString fileName) -{ - GDALProjRef = ""; - hasPrj = false; - GDALDataset *poInputDS; - double adfGeoTransform[6]; - writeToConsole("Opening dataset..."); - poInputDS = (GDALDataset*)GDALOpen(fileName.toStdString().c_str(), - GA_ReadOnly); - if(poInputDS == NULL) - { - writeToConsole("Cannot open the input file.", Qt::red); - return -1; - } - - GDALDriverName = poInputDS->GetDriver()->GetDescription(); - GDALDriverLongName = poInputDS->GetDriver()->GetMetadataItem(GDAL_DMD_LONGNAME); - writeToConsole("Reading " + GDALDriverLongName + "..."); - - //set the file type here - if(GDALDriverName == "AAIGrid") - inputFileType = ASC; - if(GDALDriverName == "LCP") - inputFileType = LCP; - if(GDALDriverName == "GTiff") - { - int nBandCount = GDALGetRasterCount( poInputDS ); - //if it's a multi-band GeoTIFF, it's an lcp - if(nBandCount > 1) - { - inputFileType = LCP; - } - else - inputFileType = GTIFF; - } - if(GDALDriverName == "IMG") - inputFileType = IMG; - - if(inputFileType == LCP) - { - tree->surface->roughnessComboBox->setEnabled(false); - tree->surface->roughnessComboBox->hide(); - tree->surface->roughnessLabel->show(); - } - else - { - tree->surface->roughnessComboBox->setEnabled(true); - tree->surface->roughnessComboBox->show(); - tree->surface->roughnessLabel->hide(); - } - - //get x and y dimension - GDALXSize = poInputDS->GetRasterXSize(); - GDALYSize = poInputDS->GetRasterYSize(); - - if(!GDALTestSRS(poInputDS)) - { - hasPrj = false; - writeToConsole("Invalid Spatial Reference (prj), " - "cannot do a simulation with the supplied DEM", red); - QMessageBox::warning(this, tr("WindNinja"), - "The DEM does not contain a proper spatial reference " - "system. WindNinja only supports DEM files " - "with projected coordinate systems (e.g., UTM)", - QMessageBox::Ok | QMessageBox::Default); - GDALClose((GDALDatasetH)poInputDS); - return -1; - } - else - { - GDALProjRef = poInputDS->GetProjectionRef(); - const char *pszProjRef; - OGRSpatialReference oSRS; - pszProjRef = GDALProjRef.c_str(); - oSRS.importFromWkt((char**)&pszProjRef); - if(GDALProjRef == "") - { - hasPrj = false; - QMessageBox::warning(this, tr("WindNinja"), - "The DEM does not contain a proper spatial reference " - "system. WindNinja only supports DEM files " - "with projected coordinate systems (e.g., UTM)", - QMessageBox::Ok | QMessageBox::Default); - GDALClose((GDALDatasetH)poInputDS); - return -1; - } - /* Check for geographic. Separate case as we may allow support later - * on. - */ - else if(oSRS.IsGeographic()) - { - hasPrj = false; - QMessageBox::warning(this, tr("WindNinja"), - "The DEM coordinated system is in a " - "geographic projection (latitude/longitude). " - "WindNinja only supports projected " - "coordinate systems (e.g., UTM)", - QMessageBox::Ok | QMessageBox::Default); - writeToConsole("Invalid Spatial Reference (prj), " - "cannot do a simulation with the supplied DEM", red); - //tree->surface->inputFileLineEdit->setText(""); - GDALClose((GDALDatasetH)poInputDS); - return -1; - } - else - { - hasPrj = true; - double longitude, latitude; - if(GDALGetCenter(poInputDS, &longitude, &latitude)) - { - //set diurnal location, also set DD.DDDDD - QString oTimeZone = FetchTimeZone(longitude, latitude, NULL).c_str(); - if(oTimeZone != "") - { - /* Show all time zones, so we can search all time zones */ - tree->surface->timeZone->tzCheckBox->setChecked(true); - int nIndex = tree->surface->timeZone->tzComboBox->findText(oTimeZone); - tree->surface->timeZone->tzComboBox->setCurrentIndex(nIndex); - } - - //emit latLonChanged( ll[0], ll[1], false ); - } - } - } - - //check for ndv - //if(!checkForNoData(poInputDS)) - if(GDALHasNoData(poInputDS, 1)) - { - writeToConsole("The input file contains no data values, cannot use", - Qt::red); - GDALClose((GDALDatasetH)poInputDS); - return -1; - } - - //get the geo-transform - if(poInputDS->GetGeoTransform(adfGeoTransform) == CE_None) - { - double c1, c2; - c1 = adfGeoTransform[1]; - c2 = adfGeoTransform[5]; - if(abs(c1) == abs(c2)) - GDALCellSize = abs(c1); - else - { - writeToConsole("Invalid cell size, invalid file"); - GDALClose((GDALDatasetH)poInputDS); - return -1; - } - } - - //get min/max values - GDALMaxValue = GDALGetMax(poInputDS); - GDALMinValue = GDALGetMin(poInputDS); - - GDALClose( (GDALDatasetH)poInputDS ); - - double XLength = GDALXSize * GDALCellSize; - double YLength = GDALYSize * GDALCellSize; - - noGoogleCellSize = std::sqrt((XLength * YLength) / noGoogleNumCells); - - writeToConsole("File Opened.", Qt::darkGreen); - return 0; -} - -bool mainWindow::getLatLon() -{ - if(hasGDALCenter) - { - writeToConsole("The center of your DEM has been found.", Qt::darkGreen); - writeToConsole("The lat/lon has been set in the diurnal inputs section", Qt::darkGreen); - checkAllItems(); - return true; - } - else - { - writeToConsole("Cannot get Lat/Lon center", Qt::red); - return false; - } -} - -void mainWindow::openOutputPath() -{ - if( outputPath.isEmpty() || outputPath == "!set" ) - { - return; - } - else - { - QDesktopServices::openUrl( QUrl ( "file:///" + outputPath, - QUrl::TolerantMode ) ); - } -} - -int mainWindow::solve() -{ -#ifdef NINJAFOAM - bool useNinjaFoam = tree->ninjafoam->ninjafoamGroupBox->isChecked(); -#endif - //disable the open output path button - tree->solve->openOutputPathButton->setDisabled( true ); - - //dem file - std::string demFile = inputFileName.toStdString(); - -#ifdef NINJAFOAM - std::string caseFile = existingCaseDir.toStdString(); -#endif - - //vegetation/roughness - int vegIndex = tree->surface->roughnessComboBox->currentIndex(); - WindNinjaInputs::eVegetation vegetation; - if( inputFileType != LCP ) { - //get choice from combo - if(vegIndex == 0) - vegetation = WindNinjaInputs::grass; - else if( vegIndex == 1 ) - vegetation = WindNinjaInputs::brush; - else if( vegIndex == 2 ) - vegetation = WindNinjaInputs::trees; - } - - //mesh - int meshIndex = tree->surface->meshResComboBox->currentIndex(); - Mesh::eMeshChoice meshChoice; - double meshRes; - lengthUnits::eLengthUnits meshUnits; - bool customMesh = false; - if( meshIndex == 0 ) - meshChoice = Mesh::coarse; - else if( meshIndex == 1 ) - meshChoice = Mesh::medium; - else if( meshIndex == 2 ) - meshChoice = Mesh::fine; - else { - meshRes = tree->surface->meshResDoubleSpinBox->value(); - customMesh = true; - if( tree->surface->meshFeetRadioButton->isChecked() ) - meshUnits = lengthUnits::feet; - else - meshUnits = lengthUnits::meters; - } -#ifdef NINJAFOAM - WindNinjaInputs::eNinjafoamMeshChoice ninjafoamMeshChoice; - if(useNinjaFoam){ - if( meshIndex == 0 ) - ninjafoamMeshChoice = WindNinjaInputs::coarse; - else if( meshIndex == 1 ) - ninjafoamMeshChoice = WindNinjaInputs::medium; - else if (meshIndex == 2) - ninjafoamMeshChoice = WindNinjaInputs::fine; - else { - meshRes = tree->surface->meshResDoubleSpinBox->value(); - customMesh = true; - if( tree->surface->meshFeetRadioButton->isChecked() ) - meshUnits = lengthUnits::feet; - else - meshUnits = lengthUnits::meters; - } - } -#endif - - //location - int tzIndex = tree->surface->timeZone->tzComboBox->currentIndex(); - if(tzIndex == -1 && (tree->diurnal->diurnalGroupBox->isChecked() || - tree->weather->weatherGroupBox->isChecked() - || tree->stability->stabilityGroupBox->isChecked() - )) - { - QMessageBox::warning(this, tr("WindNinja"), tr("Could not auto-identify " - "time zone, please " - "specify one in Surface"), - QMessageBox::Ok | QMessageBox::Default); - progressDialog->setValue( 0 ); - progressDialog->cancel(); - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - setCursor(Qt::ArrowCursor); - return false; - } - - QVariant temp = tree->surface->timeZone->tzComboBox->itemData( tzIndex ); - std::string timeZone = temp.toString().toStdString(); - - //diurnal - bool useDiurnal = tree->diurnal->diurnalGroupBox->isChecked(); - - //stability - bool useStability = tree->stability->stabilityGroupBox->isChecked(); - - //initialization method - WindNinjaInputs::eInitializationMethod initMethod; - if( tree->wind->windGroupBox->isChecked() ) - initMethod = WindNinjaInputs::domainAverageInitializationFlag; - else if( tree->point->pointGroupBox->isChecked() ) - initMethod = WindNinjaInputs::pointInitializationFlag; - else if( tree->weather->weatherGroupBox->isChecked() ) - initMethod = WindNinjaInputs::wxModelInitializationFlag; - - //input wind height - double inHeight = tree->wind->metaWind->inputHeightDoubleSpinBox->value(); - lengthUnits::eLengthUnits inHeightUnits; - if(tree->wind->metaWind->feetRadioButton->isChecked()) - inHeightUnits = lengthUnits::feet; - else - inHeightUnits = lengthUnits::meters; - - //speed units and air temp units - velocityUnits::eVelocityUnits inputSpeedUnits; - if(tree->wind->windTable->inputSpeedUnits->currentIndex() == 0) - inputSpeedUnits = velocityUnits::milesPerHour; - else if(tree->wind->windTable->inputSpeedUnits->currentIndex() == 1) - inputSpeedUnits = velocityUnits::metersPerSecond; - else if(tree->wind->windTable->inputSpeedUnits->currentIndex() == 3) - inputSpeedUnits = velocityUnits::knots; - else - inputSpeedUnits = velocityUnits::kilometersPerHour; - - temperatureUnits::eTempUnits tempUnits; - if(tree->wind->windTable->airTempUnits->currentIndex() == 0) - tempUnits = temperatureUnits::F; - else if(tree->wind->windTable->airTempUnits->currentIndex() == 1) - tempUnits = temperatureUnits::C; - - //model init - std::string weatherFile; - QModelIndex mi = tree->weather->treeView->selectionModel()->currentIndex(); - if( mi.isValid() ) { - QFileInfo fi( tree->weather->model->fileInfo( mi ) ); - weatherFile = fi.absoluteFilePath().toStdString(); - } - else - weatherFile = ""; - - //output height - double outHeight = tree->output->outputHeight->outputHeightDoubleSpinBox->value(); - lengthUnits::eLengthUnits outHeightUnits; - if(tree->output->outputHeight->feetRadioButton->isChecked()) - outHeightUnits = lengthUnits::feet; - else - outHeightUnits = lengthUnits::meters; - - velocityUnits::eVelocityUnits outputSpeedUnits; - if(tree->output->outputSpeedUnitsCombo->currentIndex() == 0) - outputSpeedUnits = velocityUnits::milesPerHour; - else if(tree->output->outputSpeedUnitsCombo->currentIndex() == 1) - outputSpeedUnits = velocityUnits::metersPerSecond; - else if(tree->output->outputSpeedUnitsCombo->currentIndex() == 2) - outputSpeedUnits = velocityUnits::kilometersPerHour; - else if(tree->output->outputSpeedUnitsCombo->currentIndex() == 3) - outputSpeedUnits = velocityUnits::knots; - - //clip buffer? - int clip = tree->output->bufferSpinBox->value(); - - bool writeWxOutput; - if( tree->output->wxModelOutputCheckBox->isEnabled() ) - writeWxOutput = tree->output->wxModelOutputCheckBox->isChecked(); - - //google - bool writeGoogle = tree->google->googleGroupBox->isChecked(); - double googleRes = tree->google->googleResSpinBox->value(); - double vectorWidth = tree->google->vectorWidthDoubleSpinBox->value(); - lengthUnits::eLengthUnits googleUnits; - KmlVector::egoogSpeedScaling googleScale; - //bool writeLegend = tree->google->legendGroupBox->isChecked(); - if(tree->google->googleMetersRadioButton->isChecked()) - googleUnits = lengthUnits::meters; - else - googleUnits = lengthUnits::feet; - - if(tree->google->uniformRangeRadioButton->isChecked()) - googleScale = KmlVector::equal_interval; - else - googleScale = KmlVector::equal_color; - - std::string googleScheme; - bool googVectorScaling = tree->google->applyVectorScaling->isChecked(); - bool googConsistentColorScale = tree->google->applyConsistentColorScale->isChecked(); - if(tree->google->colorblindBox->isChecked()) - { - std::string googCheckScheme; - QString QgoogleScheme=tree->google->inputColorblindComboBox->currentText(); - googCheckScheme=QgoogleScheme.toStdString(); - - if (googCheckScheme=="Default") - { - googleScheme="default"; - } - if (googCheckScheme=="ROPGW (Red Orange Pink Green White)") - { - googleScheme="ROPGW"; - } - if (googCheckScheme=="Oranges") - { - googleScheme="oranges"; - } - if (googCheckScheme=="Blues") - { - googleScheme="blues"; - } - if (googCheckScheme=="Pinks") - { - googleScheme="pinks"; - } - if (googCheckScheme=="Greens") - { - googleScheme="greens"; - } - if (googCheckScheme=="Magic Beans") - { - googleScheme="magic_beans"; - } - if (googCheckScheme=="Pink to Green") - { - googleScheme="pink_to_green"; - } - } - else - { - googleScheme="default"; - } - //ascii raster fb files - bool writeFb = tree->fb->fbGroupBox->isChecked(); - double fbRes = tree->fb->fbResSpinBox->value(); - lengthUnits::eLengthUnits fbUnits; - if(tree->fb->fbMetersRadioButton->isChecked()) - fbUnits = lengthUnits::meters; - else - fbUnits = lengthUnits::feet; - //write atmosphere file? - bool writeAtm = tree->fb->atmFileCheckBox->isChecked(); - if(writeAtm && writeFb) - { - if((outHeight == 20 && outHeightUnits == lengthUnits::feet && - outputSpeedUnits == velocityUnits::milesPerHour) || - (outHeight == 10 && outHeightUnits == lengthUnits::meters && - outputSpeedUnits == velocityUnits::kilometersPerHour)) - {} - else - { - QMessageBox::critical(this, tr("The solver cannot be run"), - tr("The output wind settings for atm files must " - "either be 10m for output height and " - "output speed units in kph, or " - "20ft for output height and " - "output speed units in mph."), - QMessageBox::Ok | QMessageBox::Default); - progressDialog->setValue( 0 ); - progressDialog->cancel(); - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - setCursor(Qt::ArrowCursor); - return false; - } - } - - //shape - bool writeShape = tree->shape->shapeGroupBox->isChecked(); - double shapeRes = tree->shape->shapeResSpinBox->value(); - lengthUnits::eLengthUnits shapeUnits; - if(tree->shape->shapeMetersRadioButton->isChecked()) - shapeUnits = lengthUnits::meters; - else - shapeUnits = lengthUnits::feet; - //pdf - bool writePdf = tree->pdf->pdfGroupBox->isChecked(); - double pdfRes = tree->pdf->pdfResSpinBox->value(); - double pdfLineWidth = tree->pdf->vectorWidthDoubleSpinBox->value(); - lengthUnits::eLengthUnits pdfUnits; - if(tree->pdf->pdfMetersRadioButton->isChecked()) - pdfUnits = lengthUnits::meters; - else - pdfUnits = lengthUnits::feet; - int pdfBase = tree->pdf->backgroundComboBox->currentIndex(); - - double pdfHeight, pdfWidth; - int pdfSize = tree->pdf->sizeComboBox->currentIndex(); - // Letter - if( pdfSize == 0 ) - { - pdfHeight = 11.0; - pdfWidth = 8.5; - } - // Legal - else if( pdfSize == 1 ) - { - pdfHeight = 14.0; - pdfWidth = 8.5; - } - // Tabloid - else if( pdfSize == 2 ) - { - pdfHeight = 17.0; - pdfWidth = 11.0; - } - if( tree->pdf->landscapeRadioButton->isChecked() ) - { - double tmp; - tmp = pdfWidth; - pdfWidth = pdfHeight; - pdfHeight = tmp; - } - - bool writeVTK = tree->vtk->vtkGroupBox->isChecked(); - - //number of processors - int nThreads = tree->solve->numProcSpinBox->value(); - - army = new ninjaArmy(); - - //count the runs in the wind table - if( initMethod == WindNinjaInputs::pointInitializationFlag ) - { - int pointFormat = tree->point->simType; - std::vector pointFileList = tree->point->stationFileList; //This is for the new way - std::string pointFile = tree->point->stationFileList[0]; //For Old Format, only can accept 1 file - std::vector xStartTime = tree->point->startSeries; //Get the start time from pointInput - std::vector xEndTime = tree->point->endSeries; //Get the Stop time from pointInput - int numTimeSteps = tree->point->numSteps->value(); //Get the number of steps from pointInput - bool useTimeList = tree->point->enableTimeseries; //Find out if its a timeseries run or not - bool writeStationKML = tree->point->writeStationKmlButton->isChecked(); //Write a kml file - bool writeStationCSV = tree->point->writeStationFileButton->isChecked(); //hidden for now - - /* - * Note that pointFormat is not the same as stationFormat! - * - * point Format is based on pointInput::directStationTraffic - * 0 == old format - * 1 == new format with time series - * 2 == new format no time series - * - * this is only used in the GUI - * - * stationFormat is based on wxStation::GetHeaderVersion - * 1 == old format - * 2 == new format, both timeseries and timeseries - * 3 == csv list that points to list of new format files with time series - * NOT used in GUI - * 4 == csv list that points to list of new format files with no time series - * NOT USED IN GUI - * based on header only, not actual data! - * this is used inside the actual simulation - * - * A modified version of directstationtraffic has been adapted for CLI use - * in wxStation::getFirstStationLine - * - */ - - if (pointFormat==0) - { - CPLDebug("STATION_FETCH","USING OLD FORMAT..."); - pointInitialization::SetRawStationFilename(pointFile); //Note: When testing this, - //Only the old format works, so downloaded data, with the date-time column don't yet work! - /* right now the only option is the old format */ - wxStation::SetStationFormat(wxStation::oldFormat); - std::vector timeList; - if(useDiurnal==true || useStability==true) //means that the user is specifying time - { //Get that time and assign it to the simulation - std::vector xSingleTime = tree->point->diurnalTimeVec; - boost::posix_time::ptime singleTime = pointInitialization::generateSingleTimeObject(xSingleTime[0],xSingleTime[1],xSingleTime[2],xSingleTime[3],xSingleTime[4],timeZone); - timeList.push_back(singleTime); - } - else//The user is not giving us time, do what we normally do - { - boost::posix_time::ptime noTime; - timeList.push_back(noTime); - } - try{ //Try to run windninja - army->makePointArmy(timeList,timeZone, pointFile, demFile, true,false); - }catch (exception& e) - { - QMessageBox::critical(this,tr("Failure."), - "An error occured in makePointArmy() - OldFormat! This is " - "usually due to a failure in reading a " - "weather station file. Check your files and " - "try again - Error Info: "+QString(e.what()), - QMessageBox::Ok | QMessageBox::Default); - disconnect(progressDialog, SIGNAL(canceled()), this, - SLOT(cancelSolve())); - setCursor(Qt::ArrowCursor); //Restart everything - progressDialog->cancel(); - progressDialog->hide(); - delete army; - return false; - }catch(...){ //catch all exceptions and tell the user, prevent segfaults - - QMessageBox::critical(this,tr("Failure."), - "An error occured in makePointArmy() - OldFormat! This is " - "usually due to a failure in reading a " - "weather station file. Check your files and " - "try again - Error Info: "+QString(pointInitialization::error_msg.c_str()), - QMessageBox::Ok | QMessageBox::Default); - disconnect(progressDialog, SIGNAL(canceled()), this, - SLOT(cancelSolve())); - setCursor(Qt::ArrowCursor); //Restart everything - progressDialog->cancel(); - progressDialog->hide(); - delete army; - return false; - } - nRuns = army->getSize(); - - } - if (pointFormat==1 || pointFormat==2) //New Format - { - wxStation::SetStationFormat(wxStation::newFormat); - std::vector formatVec; - std::vector timeList; - CPLDebug("STATION_FETCH","NEW FORMAT..."); - for (int i=0;imakePointArmy(timeList,timeZone,pointFileList[0],demFile,true,false); //setting pointFileList[0] is just for header checks etc - }catch (exception& e) - { - QMessageBox::critical(this,tr("Failure."), - "An error occured in makePointArmy() - timeSeries! This is " - "usually due to a failure in reading a " - "weather station file. Check your files and " - "try again - Error Info: "+QString(e.what()), - QMessageBox::Ok | QMessageBox::Default); - disconnect(progressDialog, SIGNAL(canceled()), this, - SLOT(cancelSolve())); - setCursor(Qt::ArrowCursor); - progressDialog->cancel(); - progressDialog->hide(); - delete army; - return false; - }catch(...){ //catch any and all exceptions and tell the user - - QMessageBox::critical(this,tr("Failure."), - "An error occured in makePointArmy() - timeSeries! This is " - "usually due to a failure in reading a " - "weather station file. Check your files and " - "try again - Error Info: "+QString(pointInitialization::error_msg.c_str()), - QMessageBox::Ok | QMessageBox::Default); - disconnect(progressDialog, SIGNAL(canceled()), this, - SLOT(cancelSolve())); - setCursor(Qt::ArrowCursor); - progressDialog->cancel(); - progressDialog->hide(); - delete army; - return false; - } - nRuns = army->getSize(); - } - if (useTimeList == false)//Current Data/Single Step - { - //Get time from file attributes, if its diurnal this matters - //if not, then it really doesn't matter and who cares - boost::posix_time::ptime noTime; - CPLDebug("STATION_FETCH","USING CURRENT WEATHER DATA..."); - std::vector xSingleTime = tree->point->diurnalTimeVec; - boost::posix_time::ptime singleTime = pointInitialization::generateSingleTimeObject(xSingleTime[0], - xSingleTime[1],xSingleTime[2], - xSingleTime[3],xSingleTime[4],timeZone); - timeList.push_back(singleTime); - pointInitialization::storeFileNames(pointFileList); - try{ //try making the army with current data - army->makePointArmy(timeList,timeZone,pointFileList[0],demFile,true,false); - }catch (exception& e) - { - QMessageBox::critical(this,tr("Failure."), - "An error occured in makePointArmy() - currentwxdata! This is " - "usually due to a failure in reading a " - "weather station file. Check your files and " - "try again - Error Info: "+QString(e.what()), - QMessageBox::Ok | QMessageBox::Default); - disconnect(progressDialog, SIGNAL(canceled()), this, - SLOT(cancelSolve())); - setCursor(Qt::ArrowCursor); - progressDialog->cancel(); - progressDialog->hide(); - delete army; - return false; - }catch(...){ //catch any and all exceptions and tell the user - - QMessageBox::critical(this,tr("Failure."), - "An error occured in makePointArmy() - currentwxdata! This is " - "usually due to a failure in reading a " - "weather station file. Check your files and " - "try again - Error Info: "+QString(pointInitialization::error_msg.c_str()), - QMessageBox::Ok | QMessageBox::Default); - disconnect(progressDialog, SIGNAL(canceled()), this, - SLOT(cancelSolve())); - setCursor(Qt::ArrowCursor); - progressDialog->cancel(); - progressDialog->hide(); - delete army; - return false; - } - nRuns = army->getSize(); - } - } - else - { - //Note that This error is not normally reachable if all other error - //handling works correctly - CPLDebug("STATION_FETCH","WARNING NOT ALL CSVS ARE OF THE SAME TYPE, CANNOT CONTINUE"); - QMessageBox::critical(this,tr("Failure."), - "An error occured in deteriming data types This is " - "usually due to a failure in reading a " - "weather station file. Check your files and " - "try again", - QMessageBox::Ok | QMessageBox::Default); - disconnect(progressDialog, SIGNAL(canceled()), this, - SLOT(cancelSolve())); - setCursor(Qt::ArrowCursor); - progressDialog->cancel(); - progressDialog->hide(); - delete army; - return false; - } - - - } - if (writeStationKML==true) //Write KMLS for each time step - { - std::string outputDir = tree->solve->outputDirectory().toStdString(); - writeToConsole("Writing Weather Station .kml"); - nRuns = army->getSize(); - for (int i_=0;i_getWxStations(i_), - demFile, (outputDir + "/").c_str(), outputSpeedUnits); - } - } -// if (writeStationCSV==true) - const char *csvOpt = CPLGetConfigOption("WRITE_CSV","FALSE"); - if(csvOpt!="FALSE") //The only way to write an interpolated CSV is to set a config option - { - writeToConsole("Writing Weather Station .csv"); - nRuns = army->getSize(); - QString demBase = QFileInfo(QString(demFile.c_str())).baseName(); - QString demPath = QFileInfo(demFile.c_str()).absoluteDir().absolutePath()+"/"; - std::string csvPath = demPath.toStdString()+demBase.toStdString(); - pointInitialization::writeStationOutFile(army->getWxStations(0),csvPath,"",true); - - } - const char *metaOpt = CPLGetConfigOption("FETCH_METADATA","FALSE"); - if(metaOpt!="FALSE") //set a config option to get the metadata from the DEM - { //There is also a button for this, that is hidden (see stationFetchWidget) - writeToConsole("Fetching station metadata for DEM..."); - std::string pathDem = std::string(CPLGetDirname(demFile.c_str())); - std::string baseDem = std::string(CPLGetBasename(demFile.c_str())); - std::string baseMeta = baseDem+"-metadata"; - std::string metaPath = std::string(CPLFormFilename(pathDem.c_str(),baseMeta.c_str(),".csv")); - CPLDebug("STATION_FETCH","Saving Metadata to: %s",metaPath.c_str()); - pointInitialization::fetchMetaData(metaPath,demFile,true); - } - } - else if( initMethod == WindNinjaInputs::domainAverageInitializationFlag ) - { - nRuns = countRuns(); - //do one run. - if(nRuns == 0) - { - nRuns++; - } -#ifdef NINJAFOAM - army->makeDomainAverageArmy( nRuns, useNinjaFoam); -#else - army->makeDomainAverageArmy( nRuns, false); -#endif - } - else if( initMethod == WindNinjaInputs::wxModelInitializationFlag ) - { - if( !CPLCheckForFile( (char*)weatherFile.c_str(), NULL ) ) - { - QMessageBox::critical( this, tr( "Invalid forecast file." ), - tr( "The forecast file does not exist, " \ - "or it cannot be read." ), - QMessageBox::Ok | QMessageBox::Default ); - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - setCursor(Qt::ArrowCursor); - tree->weather->checkForModelData(); - progressDialog->cancel(); - return false; - } - - std::vector times = tree->weather->timeList(); - /* This can throw a badForecastFile */ - try - { -#ifdef NINJAFOAM - army->makeWeatherModelArmy( weatherFile, timeZone, times, useNinjaFoam ); -#else - army->makeWeatherModelArmy( weatherFile, timeZone, times, false ); -#endif - } - catch( badForecastFile &e ) - { - QMessageBox::critical( this, tr( "Invalid forecast file." ), - tr( "The forecast cannot be read." ), - QMessageBox::Ok | QMessageBox::Default ); - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - setCursor(Qt::ArrowCursor); - tree->weather->checkForModelData(); - progressDialog->cancel(); - progressDialog->hide(); - delete army; - return false; - } catch (...) { - QMessageBox::critical( - this, tr("Failure."), - tr("An unknown error occurred in makeWeatherModelArmy(). This is usually " - "due to a failure in reading the weather model file"), - QMessageBox::Ok | QMessageBox::Default); - disconnect(progressDialog, SIGNAL(canceled()), this, - SLOT(cancelSolve())); - setCursor(Qt::ArrowCursor); - tree->weather->checkForModelData(); - progressDialog->cancel(); - progressDialog->hide(); - delete army; - return false; - } - nRuns = army->getSize(); - } - - progressDialog->setValue( 0 ); - //set progress dialog and initial value - progressDialog->setRange(0, nRuns * 100); //Expand the dialog to the number of runs - runProgress = new int[nRuns]; //I don't think this is needed anymore - - std::string outputDir = tree->solve->outputDirectory().toStdString(); - if( outputDir == "" ) { - // This should never happen, so if it does, fix it. - progressDialog->cancel(); - progressDialog->hide(); - QMessageBox::critical( - this, tr("Failure."), - tr("no output directory specified in solve page"), - QMessageBox::Ok | QMessageBox::Default); - disconnect(progressDialog, SIGNAL(canceled()), this, - SLOT(cancelSolve())); - setCursor(Qt::ArrowCursor); - tree->weather->checkForModelData(); - delete army; - return false; - } - - //fill in the values - for(int i = 0;i < army->getSize(); i++) - { - - army->setDEM( i, demFile ); -#ifdef NINJAFOAM - if(caseFile != ""){ - army->setExistingCaseDirectory( i, caseFile ); - } -#endif - //set initialization - if( initMethod != WindNinjaInputs::wxModelInitializationFlag ) - { - army->setInitializationMethod( i, initMethod, true ); - } - //set the ninjaCom - army->setNinjaCommunication( i, i, ninjaComClass::ninjaGUICom ); - - //set the input file - //army.readInputFile( i, demFile ); - - if( inputFileType != LCP ) - { - army->setUniVegetation( i, vegetation ); - } - if( initMethod == WindNinjaInputs::pointInitializationFlag ) //Moved to makePointArmy - { - - } - else if( initMethod == WindNinjaInputs::domainAverageInitializationFlag ) - { - //get speed - army->setInputSpeed( i, - tree->wind->windTable->speed[i]->value(), - inputSpeedUnits); - //get direction - army->setInputDirection( i, tree->wind->windTable->dir[i]->value() ); - - army->setInputWindHeight ( i, inHeight, inHeightUnits ); - } - - //set input output height - army->setOutputWindHeight( i, outHeight, outHeightUnits ); - - //set output speed units - army->setOutputSpeedUnits( i, outputSpeedUnits ); - - //set clipping - army->setOutputBufferClipping( i, (double) clip ); - - army->setOutputPath( i, outputDir.c_str() ); - - //diurnal, if needed - army->setDiurnalWinds( i, useDiurnal ); - if( useDiurnal == true ) - { - if( initMethod == WindNinjaInputs::domainAverageInitializationFlag ) - { - army->setDateTime( i, tree->wind->windTable->date[i]->date().year(), - tree->wind->windTable->date[i]->date().month(), - tree->wind->windTable->date[i]->date().day(), - tree->wind->windTable->time[i]->time().hour(), - tree->wind->windTable->time[i]->time().minute(), - 0, timeZone ); - army->setUniAirTemp( i, - tree->wind->windTable->airTemp[i]->value(), - tempUnits ); - army->setUniCloudCover( i, - tree->wind->windTable->cloudCover[i]->value(), - coverUnits::percent ); - army->setPosition( i, GDALCenterLat, GDALCenterLon ); - } - else if( initMethod == WindNinjaInputs::pointInitializationFlag ) - { - army->setPosition( i, GDALCenterLat, GDALCenterLon ); - } - else if( initMethod == WindNinjaInputs::wxModelInitializationFlag ) - { - army->setPosition( i ); - } - } - else // initMethod is wxModelInitialization or useDiurnal is false - { - army->setPosition( i ); - } - - //stability, if needed, check for diurnal also so we don't repeat setters - if( useStability == true && useDiurnal == false ) - { - if( initMethod == WindNinjaInputs::domainAverageInitializationFlag ) - { - army->setDateTime( i, tree->wind->windTable->date[i]->date().year(), - tree->wind->windTable->date[i]->date().month(), - tree->wind->windTable->date[i]->date().day(), - tree->wind->windTable->time[i]->time().hour(), - tree->wind->windTable->time[i]->time().minute(), - 0, timeZone ); - army->setUniAirTemp( i, - tree->wind->windTable->airTemp[i]->value(), - tempUnits ); - army->setUniCloudCover( i, - tree->wind->windTable->cloudCover[i]->value(), - coverUnits::percent ); - army->setPosition( i, GDALCenterLat, GDALCenterLon ); - } - else if( initMethod == WindNinjaInputs::pointInitializationFlag ) //Moved to makePointArmy - { - army->setPosition( i, GDALCenterLat, GDALCenterLon ); - } - } - army->setStabilityFlag( i, useStability ); - //set mesh stuff - if( customMesh ) - { - army->setMeshResolution( i, meshRes, meshUnits ); - } - else - { -#ifdef NINJAFOAM - if(useNinjaFoam){ - army->setMeshCount( i, ninjafoamMeshChoice ); - army->setNumberOfIterations( i, 300); - } - else - army->setMeshResolutionChoice( i, meshChoice ); -#else - army->setMeshResolutionChoice( i, meshChoice ); -#endif - } - - army->setNumVertLayers( i, 20 ); - - //set the input file - //army.ninjas[i].readInputFile( demFile ); - //army->setDEM( i, demFile ); - // this is commented out? - //army.ninjas[i].mesh.compute_domain_height(); - - //set number of cpus... - //army.setnumberCPUs(1); - - army->setGoogOutFlag (i,writeGoogle); - army->setGoogLineWidth (i,vectorWidth); - army->setGoogResolution (i,googleRes,googleUnits); - army->setGoogSpeedScaling(i,googleScale); - army->setGoogColor (i,googleScheme,googVectorScaling); //FIX ME - army->setGoogConsistentColorScale(i,googConsistentColorScale,nRuns); - army->setShpOutFlag (i,writeShape); - army->setShpResolution (i,shapeRes,shapeUnits); - army->setPDFOutFlag (i,writePdf); - army->setPDFResolution (i,pdfRes,pdfUnits); - army->setPDFLineWidth (i,pdfLineWidth); - army->setPDFBaseMap (i,pdfBase); - army->setPDFSize (i,pdfHeight,pdfWidth,150); - army->setAsciiOutFlag (i,writeFb); - army->setAsciiResolution (i,fbRes,fbUnits); - //army->setWriteAtmFile (i,writeAtm ); - army->setVtkOutFlag (i,writeVTK); - - if( initMethod == WindNinjaInputs::wxModelInitializationFlag && - writeWxOutput == true ) - { - army->setWxModelGoogOutFlag( i, writeGoogle ); - army->setWxModelShpOutFlag( i, writeShape ); - army->setWxModelAsciiOutFlag( i, writeFb ); - } - - //army.setOutputFilenames(); - army->setNinjaComNumRuns( i, nRuns ); - } - - army->set_writeFarsiteAtmFile( writeAtm && writeFb ); - - for( unsigned int i = 0; i < army->getSize(); i++ ) - { - progressLog.push_back(0); //Initialize the progressLog, which stores the progress of each ninja with a zero for each ninja in the army - } - - totalProgress = 0; - - progressDialog->setLabelText("Solving..."); - - /* - connect(army.Com, SIGNAL(sendMessage(QString, QColor)), - this, SLOT(writeToConsole(QString, QColor)), - Qt::AutoConnection); - */ - for( unsigned int i = 0; i < army->getSize(); i++ ) - { - connect( army->getNinjaCom( i ), - SIGNAL( sendMessage( QString, QColor ) ), this, - SLOT( updateProgress( QString ) ), Qt::AutoConnection ); - - connect( army->getNinjaCom( i ), - SIGNAL( sendProgress( int, int ) ), this, - SLOT( updateProgress( int, int ) ), Qt::AutoConnection ); - - connect( army->getNinjaCom( i ), - SIGNAL( sendMessage(QString, QColor)), - this, SLOT(writeToConsole(QString, QColor ) ), - Qt::AutoConnection ); - } - writeToConsole(QString::number( army->getSize() ) + " runs initialized. Starting solver..."); - //sThread->start(); - - progressDialog->setValue( 0 ); - runTime->restart(); - connect( progressDialog, SIGNAL(canceled() ), - this, SLOT( cancelSolve() ) ); - - progressDialog->setCancelButtonText( "Cancel" ); - - setCursor( Qt::WaitCursor ); - - progressDialog->setLabelText( "Running..." ); - - writeToConsole( "Initializing runs..." ); - - bool ninjaSuccess = false; - //ninjaSuccess = sThread->run( nThreads, army ); - //start the army - try { - ninjaSuccess = army->startRuns( nThreads ); - } - catch (bad_alloc& e) - { - progressDialog->cancel(); - QMessageBox::warning(this, tr("Exception Caught"), - tr("WindNinja may have run out of memory. This may be caused by too fine of a mesh resolution."), - QMessageBox::Ok | QMessageBox::Default); - - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - setCursor(Qt::ArrowCursor); - delete army; - return false; - } - catch (cancelledByUser& e) - { - progressDialog->cancel(); - QMessageBox::warning(this, tr("Exception Caught"), - tr(e.what()), - QMessageBox::Ok | QMessageBox::Default); - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - setCursor(Qt::ArrowCursor); - delete army; - return false; - } - catch (exception& e) - { - progressDialog->cancel(); - QMessageBox::warning(this, tr("Exception Caught"), - tr(e.what()), - QMessageBox::Ok | QMessageBox::Default); - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - setCursor(Qt::ArrowCursor); - delete army; - return false; - } - catch (...) - { - progressDialog->cancel(); - QMessageBox::warning(this, tr("Exception Caught"), - tr("Unknown Exception"), - QMessageBox::Ok | QMessageBox::Default); - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - setCursor(Qt::ArrowCursor); - delete army; - return false; - } - - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - - writeToConsole("Finished with simulations", Qt::darkGreen); - //updateTimer(); - - elapsedRunTime = runTime->elapsed() / 1000.0; - int maxProg = nRuns*100; - progressDialog->setValue(maxProg); - progressDialog->setLabelText("Simulations finished"); - progressDialog->setCancelButtonText("Close"); - progressLog.clear(); //Clear the progress bar so that we can do another run later without - //killing the program - - //Everything went okay? enable output path button - tree->solve->openOutputPathButton->setEnabled( true ); - outputPath = QString::fromStdString( outputDir ); - - //clear the army - army->reset(); - - setCursor(Qt::ArrowCursor); - - delete army; - return ninjaSuccess; -} - -void mainWindow::updateProgress(const QString message) -{ - progressDialog->setLabelText(message); -} - -void mainWindow::updateProgress(int run, int progress) -{ - totalProgress = 0; //Initialize the progress bar each time -// runProgress[run]=progress; - - if(progressLog[run]>progress) - { -/* - * If the stored progress is bigger than what we are seeing in the currently emitted progress - * ignore it - * this happens for pointInitialization, when the match points is iterating - * sometimes its next solution is worse and then it would make the progress bar go backwards - * by ignoring it, the progress bar just stays where it is.... - */ - progressLog[run]=progressLog[run]; - } - else //Otherwise, store the progress in the progressLog - { - progressLog[run]=progress; - } - for(int i = 0;i < nRuns;i++) //Iterate over the number of runs and sum up the progress from the Log - { - totalProgress+=progressLog[i]; - - } - progressDialog->setValue(totalProgress); //Set the progress to what we have summed -} - -int mainWindow::countRuns() -{ - int runs = 0; - - for(int i=0; i < tree->wind->windTable->nRuns; i++) - { - if(tree->wind->windTable->speed[i]->value() != 0 || tree->wind->windTable->dir[i]->value() != 0) - { - runs = i+1; // i goes from 0 to N-1, runs goes from 1 to N - } - } - - return runs; -} - -int mainWindow::checkAllItems() -{ - //check and see if the objects have been visited before changing - eInputStatus status = green; -#ifdef NINJAFOAM - checkSolverMethodItem(); - checkMeshCombo(); -#endif - checkInputItem(); - checkOutputItem(); - checkSolveItem(); - - return status; -} - -#ifdef NINJAFOAM -int mainWindow::checkSolverMethodItem() -{ - eInputStatus status = blue; - - checkNativeSolverItem(); - checkNinjafoamItem(); - - if(checkNativeSolverItem() == green) - { - tree->solverMethodItem->setIcon(0, tree->check); - tree->solverMethodItem->setToolTip(0, "Using conservation of mass solver"); - checkNinjafoamItem(); - status = green; - } - else if(checkNinjafoamItem() == green) - { - tree->solverMethodItem->setIcon(0, tree->check); - tree->solverMethodItem->setToolTip(0, "Using conservation of mass and momentum solver"); - checkNativeSolverItem(); - status = green; - } - else - { - tree->solverMethodItem->setIcon(0, tree->cross); - tree->solverMethodItem->setToolTip(0, "Select a solver"); - status = red; - } - return status; -} - -int mainWindow::checkNativeSolverItem() -{ - eInputStatus status = green; - if(!tree->nativesolver->nativeSolverGroupBox->isChecked()) - { - tree->nativeSolverItem->setIcon(0, tree->radio); - tree->nativeSolverItem->setToolTip(0, "Conservation of Mass not selected"); - status = blue; - } - else - { - tree->nativeSolverItem->setIcon(0, tree->check); - tree->nativeSolverItem->setToolTip(0, "Conservation of Mass selected"); - status = green; - } - - return status; -} -int mainWindow::checkNinjafoamItem() -{ - eInputStatus status = green; - if(!tree->ninjafoam->ninjafoamGroupBox->isChecked()) - { - tree->ninjafoamItem->setIcon(0, tree->radio); - tree->ninjafoamItem->setToolTip(0, "Conservation of Mass and Momentum not selected"); - status = blue; - } - else - { - tree->ninjafoamItem->setIcon(0, tree->check); - tree->ninjafoamItem->setToolTip(0, "Conservation of Mass and Momentum selected"); - status = green; - } - - return status; -} -#endif //NINJAFOAM - -int mainWindow::checkInputItem() -{ - eInputStatus status = red; - - checkWindItem(); - - if(checkSurfaceItem() == red && checkWindItem() == red && checkDiurnalItem() == red || checkStabilityItem() == red) - { - tree->inputItem->setIcon(0, tree->cross); - tree->inputItem->setToolTip(0, "Check surface input, wind input, stability input, and diurnal input"); - status = red; - } - if(checkSurfaceItem() == red && checkWindItem() == red && checkDiurnalItem() == red ) - { - tree->inputItem->setIcon(0, tree->cross); - tree->inputItem->setToolTip(0, "Check surface input, wind input and diurnal input"); - status = red; - } - else if(checkSurfaceItem() == red) - { - tree->inputItem->setIcon(0, tree->cross); - tree->inputItem->setToolTip(0, "Check surface input"); - status = red; - } - else if(checkDiurnalItem() == red) - { - tree->inputItem->setIcon(0, tree->caution); - tree->inputItem->setToolTip(0, "Check diurnal input"); - status = red; - } - else if(checkStabilityItem() == red) - { - tree->inputItem->setIcon(0, tree->caution); - tree->inputItem->setToolTip(0, "Check stability input"); - status = red; - } - else if(checkWindItem() == red) - { - tree->inputItem->setIcon(0, tree->cross); - tree->inputItem->setToolTip(0, "Check wind input"); - status = red; - } - else - { - tree->inputItem->setIcon(0, tree->check); - tree->inputItem->setToolTip(0, "Valid"); - status = green; - } - return status; -} - -int mainWindow::checkSurfaceItem() -{ - eInputStatus status = red; - if(inputFileName == "" || !QFile::exists(inputFileName)) - { - tree->surfaceItem->setIcon(0, tree->cross); - tree->surfaceItem->setToolTip(0, "The input file cannot be opened"); - status = red; - } - else if(!hasPrj) - { - tree->surfaceItem->setIcon(0, tree->caution); - tree->surfaceItem->setToolTip(0, "No projection information"); - status = red; - } - else - { - tree->surfaceItem->setIcon(0, tree->check); - tree->surfaceItem->setToolTip(0, "Valid"); - status = green; - } - return status; -} - -int mainWindow::checkDiurnalItem() -{ - eInputStatus status = green; - if(!tree->diurnal->diurnalGroupBox->isChecked()) { - tree->diurnalItem->setIcon(0, tree->blue); - tree->diurnalItem->setToolTip(0, "No Diurnal Input"); - status = blue; - } - else - { - tree->diurnalItem->setIcon(0, tree->check); - status = green; - } - return status; -} - -int mainWindow::checkStabilityItem() -{ - eInputStatus status = green; - if(!tree->stability->stabilityGroupBox->isChecked()) - { - tree->stabilityItem->setIcon(0, tree->blue); - tree->stabilityItem->setToolTip(0, "No Stability Input"); - status = blue; - } - else - { - tree->stabilityItem->setIcon(0, tree->check); - status = green; - } - return status; -} - -int mainWindow::checkWindItem() -{ - eInputStatus status = blue; - - //check all once, just to update icons - checkSpdDirItem(); - checkPointItem(); - checkWeatherItem(); - - if( checkSpdDirItem() == blue && checkPointItem() == blue - && checkWeatherItem() == blue ) { - tree->windItem->setIcon(0, tree->cross); - tree->windItem->setToolTip(0, "No initialization selected"); - status = red; - } - else if( checkSpdDirItem() == red ) { - tree->windItem->setIcon(0, tree->cross); - tree->windItem->setToolTip(0, "Check speed and direction"); - status = red; - } - else if( checkSpdDirItem() == amber ) { - tree->windItem->setIcon(0, tree->caution); - tree->windItem->setToolTip(0, "No runs have been added, one run will be done at speed = 0, dir = 0"); - status = amber; - } - else if( checkPointItem() == red ) { - tree->windItem->setIcon(0, tree->cross); - tree->windItem->setToolTip(0, "Check point initialization"); - status = red; - } - else if( checkWeatherItem() == red ) { - tree->windItem->setIcon(0, tree->cross); - tree->windItem->setToolTip(0, "Check weather model initialization"); - status = red; - } - else { - tree->windItem->setIcon(0, tree->check); - tree->windItem->setToolTip(0, "Valid"); - status = green; - } - return status; -} - -int mainWindow::checkSpdDirItem() -{ - int runs = countRuns(); - eInputStatus status = blue; - if( tree->wind->windGroupBox->isChecked() ) { - if(checkSurfaceItem() != red) { - if(runs == 0 && tree->diurnal->diurnalGroupBox->isChecked() == false) { - tree->spdDirItem->setIcon(0, tree->cross); - tree->spdDirItem->setToolTip(0, "No runs have been added, diurnal is not active"); - status = red; - } - else if(runs == 0 && tree->diurnal->diurnalGroupBox->isChecked() == true) { - tree->spdDirItem->setIcon(0, tree->caution); - tree->spdDirItem->setToolTip(0, "No runs have been added, one run will be done at speed = 0, dir = 0 while using diurnal"); - status = amber; - } - else { - tree->spdDirItem->setIcon(0, tree->check); - tree->spdDirItem->setToolTip(0, QString::number(runs) + " runs"); - status = green; - // override if any 0.0 wind speed runs are detected, warn and run if diurnal, stop if not diurnal - for(int i=0;iwind->windTable->speed[i]->value() == 0.0) - { - if(tree->diurnal->diurnalGroupBox->isChecked() == false) { - tree->spdDirItem->setIcon(0, tree->cross); - tree->spdDirItem->setToolTip(0, QString::number(runs) + " runs have been added, but detecting at least one 0.0 wind speed run without diurnal being active"); - status = red; - } else { - tree->spdDirItem->setIcon(0, tree->caution); - tree->spdDirItem->setToolTip(0, QString::number(runs) + " runs have been added, detecting at least one 0.0 wind speed run, diurnal is active so will continue the runs"); - status = amber; - } - break; - } - } - } - } - else { - tree->spdDirItem->setIcon(0, tree->cross); - tree->spdDirItem->setToolTip(0, "Cannot read input file"); - status = red; - } - } - else { - tree->spdDirItem->setIcon(0, tree->radio); - tree->spdDirItem->setToolTip(0, "Not used"); - status = blue; - } - return status; -} -int mainWindow::checkPointItem() -{ - eInputStatus status = blue; - if( tree->point->pointGroupBox->isChecked() ) { - bool shortGo=tree->point->pointGo; - if (shortGo==false) - { - if (tree->point->stationFileList.size()<1) - { - status = red; - tree->pointItem->setIcon(0,tree->cross); - tree->pointItem->setToolTip(0,"No Stations Selected"); - } - if (tree->point->stationFileList.size()==1) - { - status = red; - tree->pointItem->setIcon(0,tree->cross); - tree->pointItem->setToolTip(0,"No Valid Data detected..."); - } - if (tree->point->stationFileList.size()>=2) - { - status = red; - tree->pointItem->setIcon(0,tree->cross); - tree->pointItem->setToolTip(0,"Mismatched Data Type selected"); - } -// if else -// { -// status = red; -// tree->pointItem->setIcon(0,tree->cross); -// tree->pointItem->setToolTip(0,"Selected options are invald"); -// } - } - - if (shortGo==true) - { - //Check to make sure times are reasonable - QDateTime pStartTime = tree->point->startTime->dateTime(); - QDateTime pStopTime = tree->point->stopTime->dateTime(); - if(pStartTime>pStopTime) - { - status = red; - tree->pointItem->setIcon(0,tree->cross); - tree->pointItem->setToolTip(0,"Start Time is Greater than Stop Time!"); - } - else - { - status = green; - tree->pointItem->setIcon(0,tree->check); - tree->pointItem->setToolTip(0,"Good To Go!"); - } - } - std::vector pfL = tree->point->stationFileList; - for(int i=0;ipointItem->setIcon(0,tree->cross); - tree->pointItem->setToolTip(0,"File Extension Must be .csv!"); - } - } - if (tree->point->simType==0 && pfL.size()>1) - { - status = red; - tree->pointItem->setIcon(0,tree->cross); - tree->pointItem->setToolTip(0,"Too many Stations Selected for Old Format!"); - - } - -// else { -// status = green; -// tree->pointItem->setIcon( 0, tree->check ); -// tree->pointItem->setToolTip( 0, "Valid" ); -// } - } - else { - status = blue; - tree->pointItem->setIcon( 0, tree->radio ); - tree->pointItem->setToolTip( 0, "Not used" ); - } - return status; -} - -int mainWindow::checkWeatherItem() -{ - eInputStatus status = blue; - wxModelInitialization* model = NULL; - if( tree->weather->weatherGroupBox->isChecked() ) { - QFileInfo fi; - QModelIndex mi = tree->weather->treeView->selectionModel()->currentIndex(); - if( mi.isValid() ) { - fi = tree->weather->model->fileInfo( mi ); - std::string filename = fi.absoluteFilePath().toStdString(); - char *p, *q; //code gore - p = strdup( filename.c_str() ); - q = strrchr( p, '/' ); - int n = 0; - if( !q ) - q = strrchr( p, '\\' ); - if( q ) - { - if( strlen( q ) > 1 ) - q++; - if( strlen( q ) > 5 ) - *(q + 4) = '\0'; - n = atoi( q ); - } - else - n = atoi( p ); - free( p ); - if( fi.isDir() && n < 2000 ) - { - status = red; - tree->modelItem->setIcon( 0, tree->cross ); - tree->modelItem->setToolTip( 0, "Forecast is invalid" ); - return status; - } - try { - model = wxModelInitializationFactory::makeWxInitialization(filename); - } - catch( ... ) { - status = red; - tree->modelItem->setIcon( 0, tree->cross ); - tree->modelItem->setToolTip( 0, "Forecast is invalid" ); - delete model; - return status; - } - - if( !fi.exists() ) { - status = red; - tree->modelItem->setIcon( 0, tree->cross ); - tree->modelItem->setToolTip( 0, "Forecast does not exist" ); - } - else { - status = green; - tree->modelItem->setIcon( 0, tree->check ); - tree->modelItem->setToolTip( 0, "Valid" ); - } - } - else { - status = red; - tree->modelItem->setIcon( 0, tree->cross ); - tree->modelItem->setToolTip( 0, "You must select a valid forecast file or path" ); - } - } - else { - tree->modelItem->setIcon( 0, tree->radio ); - tree->modelItem->setToolTip( 0, "Not used" ); - } - delete model; - return status; -} - -int mainWindow::checkOutputItem() -{ - eInputStatus status = green; - if(checkSurfaceItem() == red) - { - tree->outputItem->setIcon(0, tree->cross); - tree->outputItem->setToolTip(0, "Cannot read input file"); - status = red; - } - if(checkGoogleItem() == blue && checkFbItem() == blue && checkShapeItem() == blue && checkVtkItem() == blue && - checkPdfItem() == blue) - { - tree->outputItem->setIcon(0, tree->cross); - tree->outputItem->setToolTip(0, "No outputs selected"); - status = red; - } - if(checkGoogleItem() == amber || checkFbItem() == amber || checkShapeItem() == amber || checkVtkItem() == amber || - checkPdfItem() == amber) - { - if(checkGoogleItem() == amber) - { - tree->outputItem->setIcon(0, tree->caution); - tree->outputItem->setToolTip(0, "Check Google ouput"); - status = amber; - } - if(checkFbItem() == amber) - { - tree->outputItem->setIcon(0, tree->check); - tree->outputItem->setToolTip(0, "Check fire behavior ouput"); - status = amber; - } - if(checkShapeItem() == amber) - { - tree->outputItem->setIcon(0, tree->check); - tree->outputItem->setToolTip(0, "Check shape file ouput"); - status = amber; - } - if(checkPdfItem() == amber) - { - tree->outputItem->setIcon(0, tree->check); - tree->outputItem->setToolTip(0, "Check pdf file ouput"); - status = amber; - } - if(checkVtkItem() == amber) - { - tree->outputItem->setIcon(0, tree->check); - tree->outputItem->setToolTip(0, "Check vtk file ouput"); - status = amber; - } - } - if(status == green) - { - tree->outputItem->setIcon(0, tree->check); - tree->outputItem->setToolTip(0, "Valid"); - status = green; - } - return status; -} - -int mainWindow::checkGoogleItem() -{ - eInputStatus status = red; - if(!tree->google->googleGroupBox->isChecked()) - { - tree->googleItem->setIcon(0, tree->blue); - tree->googleItem->setToolTip(0, "No output"); - status = blue; - } - else - { - if(checkSurfaceItem() != red) - { - if(noGoogleCellSize > tree->google->googleResSpinBox->value()) - { - tree->googleItem->setIcon(0, tree->caution); - tree->googleItem->setToolTip(0, "The resolution of the google file may be too fine."); - status = amber; - } - else if(GDALCellSize > tree->google->googleResSpinBox->value()) - { - tree->googleItem->setIcon(0, tree->caution); - tree->googleItem->setToolTip(0, "The output resolution is finer than the DEM resolution"); - status = amber; - } - /* - else if((int)meshCellSize > tree->google->googleResSpinBox->value()) - { - tree->googleItem->setIcon(0, tree->check); - tree->googleItem->setToolTip(0, "The output resolutions is finer than the computational mesh"); - status = amber; - } - */ - else - { - tree->googleItem->setIcon(0, tree->check); - tree->googleItem->setToolTip(0, "Valid"); - status = green; - } - } - else - { - tree->googleItem->setIcon(0, tree->cross); - tree->googleItem->setToolTip(0, "Cannot read input file"); - status = red; - } - } - return status; -} - -int mainWindow::checkFbItem() -{ - eInputStatus status = red; - if(!tree->fb->fbGroupBox->isChecked()) - { - tree->fbItem->setIcon(0, tree->blue); - tree->fbItem->setToolTip(0, "No output"); - status = blue; - } - else - { - if(checkSurfaceItem() == green || checkSurfaceItem() == amber) - { - if(GDALCellSize > tree->fb->fbResSpinBox->value()) - { - tree->fbItem->setIcon(0, tree->caution); - tree->fbItem->setToolTip(0, "The output resolutions is finer than the DEM resolution"); - status = amber; - } - - else - { - tree->fbItem->setIcon(0, tree->check); - tree->fbItem->setToolTip(0, "Valid"); - status = green; - } - } - else - { - tree->fbItem->setIcon(0, tree->cross); - tree->fbItem->setToolTip(0, "Cannot read input file"); - status = red; - } - } - return status; -} - -int mainWindow::checkShapeItem() -{ - eInputStatus status = red; - if(!tree->shape->shapeGroupBox->isChecked()) - { - tree->shapeItem->setIcon(0, tree->blue); - tree->shapeItem->setToolTip(0, "No output"); - status = blue; - } - else - { - if(checkSurfaceItem() == green || checkSurfaceItem() == amber) - { - /* - if((int)meshCellSize > tree->shape->shapeResSpinBox->value()) - { - tree->shapeItem->setIcon(0, tree->check); - tree->shapeItem->setToolTip(0, "The output resolutions is finer than the computational mesh"); - status = amber; - } - */ - if(GDALCellSize > tree->shape->shapeResSpinBox->value()) - { - tree->shapeItem->setIcon(0, tree->caution); - tree->shapeItem->setToolTip(0, "The output resolutions is finer than the DEM resolution"); - status = amber; - } - else - { - tree->shapeItem->setIcon(0, tree->check); - tree->shapeItem->setToolTip(0, "Valid"); - status = green; - } - } - else - { - tree->shapeItem->setIcon(0, tree->cross); - tree->shapeItem->setToolTip(0, "Cannot read input file") ; - status = red; - } - } - return status; -} - -int mainWindow::checkPdfItem() -{ - eInputStatus status = red; - if(!tree->pdf->pdfGroupBox->isChecked()) - { - tree->pdfItem->setIcon(0, tree->blue); - tree->pdfItem->setToolTip(0, "No output"); - status = blue; - } - else - { - if(checkSurfaceItem() == green || checkSurfaceItem() == amber) - { - /* - if((int)meshCellSize > tree->pdf->pdfResSpinBox->value()) - { - tree->pdfItem->setIcon(0, tree->check); - tree->pdfItem->setToolTip(0, "The output resolutions is finer than the computational mesh"); - status = amber; - } - */ - if(GDALCellSize > tree->pdf->pdfResSpinBox->value()) - { - tree->pdfItem->setIcon(0, tree->caution); - tree->pdfItem->setToolTip(0, "The output resolutions is finer than the DEM resolution"); - status = amber; - } - else - { - tree->pdfItem->setIcon(0, tree->check); - tree->pdfItem->setToolTip(0, "Valid"); - status = green; - } - } - else - { - tree->pdfItem->setIcon(0, tree->cross); - tree->pdfItem->setToolTip(0, "Cannot read input file") ; - status = red; - } - } - return status; -} - -int mainWindow::checkVtkItem() -{ - eInputStatus status = red; - if(!tree->vtk->vtkGroupBox->isChecked()) - { - tree->vtkItem->setIcon(0, tree->blue); - tree->vtkItem->setToolTip(0, "No output"); - status = blue; - } - else - { - if(checkSurfaceItem() == green || checkSurfaceItem() == amber) - { - tree->vtkItem->setIcon(0, tree->check); - tree->vtkItem->setToolTip(0, "Valid"); - status = green; - } - else - { - tree->vtkItem->setIcon(0, tree->cross); - tree->vtkItem->setToolTip(0, "Cannot read input file") ; - status = red; - } - } - return status; -} - -int mainWindow::checkSolveItem() -{ - eInputStatus status = red; - if(checkInputItem() != red && checkOutputItem() != red) - { - tree->solveItem->setIcon(0, tree->check); - tree->solveItem->setToolTip(0, "You may start the solver"); - tree->solve->solveToolButton->setEnabled(true); - status = green; - } - //handle if nothing is checked for initialization - else if( !tree->wind->windGroupBox->isChecked() && - !tree->point->pointGroupBox->isChecked() && - !tree->weather->weatherGroupBox->isChecked () ) { - tree->solveItem->setIcon(0, tree->cross); - tree->solveItem->setToolTip(0, "You must select and initialization method"); - tree->solve->solveToolButton->setEnabled(false); - status = red; - } - else - { - tree->solveItem->setIcon(0, tree->cross); - tree->solveItem->setToolTip(0, "There are errors in the inputs or outputs"); - tree->solve->solveToolButton->setEnabled(false); - status = red; - } - return status; -} - -int mainWindow::checkKmlLimit(double xx) -{ - eInputStatus status = amber; - if((int)noGoogleCellSize > tree->google->googleResSpinBox->value()) - { - writeToConsole("The resolution of the google file may be too fine.", orange); - status = amber; - } - return amber; -} - -void mainWindow::cancelSolve() -{ - progressDialog->setAutoClose(true); - progressDialog->setLabelText("Canceling..."); - army->cancel(); -} - -void mainWindow::treeDoubleClick(QTreeWidgetItem *item, int column) -{ - if(item == tree->surfaceItem) - openInputFile(); - else if(item == tree->diurnalItem) - { - if(tree->diurnal->diurnalGroupBox->isChecked()) - tree->diurnal->diurnalGroupBox->setChecked(false); - else - tree->diurnal->diurnalGroupBox->setChecked(true); - } -#ifdef NINJAFOAM - else if(item == tree->nativeSolverItem) - { - if(tree->nativesolver->nativeSolverGroupBox->isChecked()) - tree->nativesolver->nativeSolverGroupBox->setChecked(false); - else{ - tree->nativesolver->nativeSolverGroupBox->setChecked(true); - } - } - else if(item == tree->ninjafoamItem) - { - if(tree->ninjafoam->ninjafoamGroupBox->isChecked()) - tree->ninjafoam->ninjafoamGroupBox->setChecked(false); - else{ - tree->ninjafoam->ninjafoamGroupBox->setChecked(true); - } - } -#endif - else if(item == tree->stabilityItem) - { - if(tree->stability->stabilityGroupBox->isChecked()) - tree->stability->stabilityGroupBox->setChecked(false); - else - tree->stability->stabilityGroupBox->setChecked(true); - } - else if( item == tree->spdDirItem ) { - if( tree->wind->windGroupBox->isChecked() ) - tree->wind->windGroupBox->setChecked( false ); - else - tree->wind->windGroupBox->setChecked( true ); - } - else if( item == tree->pointItem ) { - if( tree->point->pointGroupBox->isChecked() ) - tree->point->pointGroupBox->setChecked( false ); - else - tree->point->pointGroupBox->setChecked( true ); - } - else if( item == tree->modelItem ) { - if( tree->weather->weatherGroupBox->isChecked() ) - tree->weather->weatherGroupBox->setChecked( false ); - else - tree->weather->weatherGroupBox->setChecked( true ); - } - else if(item == tree->googleItem) - { - if(tree->google->googleGroupBox->isChecked()) - tree->google->googleGroupBox->setChecked(false); - else - tree->google->googleGroupBox->setChecked(true); - } - else if(item == tree->fbItem) - { - if(tree->fb->fbGroupBox->isChecked()) - tree->fb->fbGroupBox->setChecked(false); - else - tree->fb->fbGroupBox->setChecked(true); - } - else if(item == tree->shapeItem) - { - if(tree->shape->shapeGroupBox->isChecked()) - tree->shape->shapeGroupBox->setChecked(false); - else - tree->shape->shapeGroupBox->setChecked(true); - } - else if(item == tree->pdfItem) - { - if(tree->pdf->pdfGroupBox->isChecked()) - tree->pdf->pdfGroupBox->setChecked(false); - else - tree->pdf->pdfGroupBox->setChecked(true); - } - else if(item == tree->vtkItem) - { - if(tree->vtk->vtkGroupBox->isChecked()) - tree->vtk->vtkGroupBox->setChecked(false); - else - tree->vtk->vtkGroupBox->setChecked(true); - } - checkAllItems(); - return; -} - -/** - * \brief Check the input dem for no data and optionally fill - * - * Note that if we fail to fix things, we have to close the ds. - * - * \return - * - */ -QString mainWindow::checkForNoData( QString inputFile ) -{ - QString fileName; - QString newFile = inputFile; - GDALDataset *poDS = (GDALDataset*)GDALOpen( inputFile.toStdString().c_str(), - GA_ReadOnly ); - if( GDALHasNoData( poDS, 1 ) ) - { - int r = QMessageBox::warning( this, tr ("WindNinja" ), - tr( "The input dataset contains pixels with no data. " - "These datasets cannot be used by WindNinja, " - "would you like to attempt to fill those pixels?" ), - QMessageBox::Yes | - QMessageBox::No | - QMessageBox::Cancel); - if( r == QMessageBox::Yes ) - { - fileName = QFileDialog::getSaveFileName( this, - tr( "Open Elevation Input File" ), - inputFileDir.absolutePath(), - tr( "GeoTiff (*.tif)" ) ); - if( fileName.isEmpty() ) - return QString(""); - - if( !fileName.endsWith( ".tif", Qt::CaseInsensitive ) ) - fileName += ".tif"; - GDALDriverH hDriver = GDALGetDriverByName( "GTiff" ); - GDALDatasetH hNewDS; - hNewDS = GDALCreateCopy( hDriver, fileName.toStdString().c_str(), - (GDALDriverH)poDS, FALSE, NULL, NULL, - NULL ); - GDALRasterBandH hSrcBand, hDstBand; - hSrcBand = GDALGetRasterBand( (GDALDatasetH)poDS, 1 ); - hDstBand = GDALGetRasterBand( hNewDS, 1 ); - int nSuccess; - GDALSetRasterNoDataValue( hDstBand, - GDALGetRasterNoDataValue( hSrcBand, &nSuccess ) ); - int nNoData = GDALFillBandNoData( (GDALDataset*)hNewDS, 1, 100 ); - if( nNoData ) - { - QMessageBox::warning( this, tr ("WindNinja" ), - tr( "Could not fill no data pixels, too many pixels " - "were invalid." ), - QMessageBox::Ok ); - GDALClose( hNewDS ); - GDALClose( (GDALDatasetH)poDS ); - VSIUnlink( fileName.toStdString().c_str() ); - newFile = ""; - } - else - { - GDALFlushCache( hNewDS ); - GDALClose( hNewDS ); - GDALClose( (GDALDatasetH)poDS ); - newFile = fileName; - } - } - } - else - GDALClose( (GDALDatasetH)poDS ); - return newFile; -} - -void mainWindow::enablePointDate(bool enable) -{ - (void)enable; - if( tree->point->pointGroupBox->isChecked() ) - { - if( tree->diurnal->diurnalGroupBox->isChecked() - || tree->stability->stabilityGroupBox->isChecked() - ) - { - //Allows for on the fly changes in diurnal parameters as users select/deselect stations of - //various types - emit mainDiurnalChanged(true); //Sets to true so that stability options are also set - if(tree->point->simType==0) //Only turn on datetimeEdit for single step runs old format - { - tree->point->dateTimeEdit->setEnabled( true ); - } - else - { - tree->point->dateTimeEdit->setEnabled(false); - } - } - else - { - emit mainDiurnalChanged(false); //Tells pointInput we don't want stability/Diurnal - tree->point->dateTimeEdit->setEnabled( false ); - } - } -} - -#ifdef NINJAFOAM -void mainWindow::enableNinjafoamOptions(bool enable) -{ - (void)enable; - if( tree->ninjafoam->ninjafoamGroupBox->isChecked() ) - { - tree->stability->stabilityGroupBox->setCheckable( false ); - tree->stability->stabilityGroupBox->setChecked( false ); - tree->stability->stabilityGroupBox->setHidden( true ); - tree->stability->ninjafoamConflictLabel->setHidden( false ); - - tree->wind->windTable->enableDiurnalCells( false ); - - tree->point->pointGroupBox->setCheckable( false ); - tree->point->pointGroupBox->setChecked( false ); - tree->point->pointGroupBox->setHidden( true ); - tree->point->ninjafoamConflictLabel->setHidden( false ); - - tree->surface->foamCaseGroupBox->setHidden( false ); - tree->surface->timeZoneGroupBox->setHidden( false ); - - tree->vtk->vtkLabel->setHidden( false ); - tree->vtk->vtkGroupBox->setHidden( false ); - tree->vtk->vtkGroupBox->setCheckable(true); - tree->vtk->vtkGroupBox->setChecked( false ); - } - else{ - tree->diurnal->diurnalGroupBox->setCheckable( true ); - tree->diurnal->diurnalGroupBox->setChecked( false ); - tree->diurnal->diurnalGroupBox->setHidden( false ); - - tree->stability->stabilityGroupBox->setCheckable( true ); - tree->stability->stabilityGroupBox->setChecked( false ); - tree->stability->stabilityGroupBox->setHidden( false ); - tree->stability->ninjafoamConflictLabel->setHidden( true ); - - tree->point->pointGroupBox->setCheckable( true ); - tree->point->pointGroupBox->setChecked( false ); - tree->point->pointGroupBox->setHidden( false ); - tree->point->ninjafoamConflictLabel->setHidden( true ); - - tree->surface->foamCaseGroupBox->setHidden( true ); - tree->surface->timeZoneGroupBox->setHidden( false ); - tree->surface->meshResComboBox->addItem("Custom", 4); - - tree->vtk->vtkLabel->setHidden( false ); - tree->vtk->vtkGroupBox->setHidden( false ); - tree->vtk->vtkGroupBox->setCheckable( true ); - tree->vtk->vtkGroupBox->setChecked( false ); - } -} -#endif - -void mainWindow::SetConfigOption() -{ - QString key, val; - int rc; - SetConfigDialog dialog; - rc = dialog.exec(); - if( rc == QDialog::Rejected ) - return; - const char *pszKey, *pszVal; - key = dialog.GetKey(); - val = dialog.GetVal(); - if( key == "" ) - return; - if( val == "" ) - pszVal = NULL; - else - pszVal = CPLSPrintf( "%s", (char*)val.toLocal8Bit().data() ); - qDebug() << "Setting config option " << key << "to" << val; - pszKey = CPLSPrintf( "%s", (char*)key.toLocal8Bit().data() ); - CPLSetConfigOption( pszKey, pszVal ); -} diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h deleted file mode 100644 index c59230f69..000000000 --- a/src/gui/mainWindow.h +++ /dev/null @@ -1,301 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Main window and parent to all other widgets - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef MAINWINDOW_H -#define MAINWINDOW_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "gdal_priv.h" -#include "ogr_srs_api.h" -#include "cpl_string.h" -#include "gdal_util.h" -#include "startRuns.h" -#include "ninja.h" -#include "ninja_version.h" -#include "WindNinjaTree.h" -#include "consoleDockWidget.h" -#include "solveThread.h" -#include "ninjaException.h" -#include "ninjaUnits.h" -#include "wxStation.h" -#include "ninjaUnits.h" -#include "ninjaArmy.h" -#include "ninja_conv.h" - -#include "setconfigdialog.h" - -class mainWindow : public QMainWindow -{ - Q_OBJECT - - public: - mainWindow(QWidget *parent = 0); - - //ninja *inputNinja; - - ninjaArmy *army; - - QProgressDialog *progressDialog; - int nRuns; - - QDir cwd; - QDir pwd; - - QTimer *timer; - - int *runProgress; - int totalProgress; - std::vector progressLog; - - bool okToContinueCheck; - - public slots: - void updateProgress(int run, int progress); - void updateProgress(const QString message); - void updateTimer(); - void openDEMDownloader(); - - public: - WindNinjaTree *tree; - ConsoleDockWidget *console; - QString prompt; - QColor orange; - - enum eInputFileType{ - ASC, LCP, GTIFF, IMG}; -#ifdef NINJAFOAM - QString existingCaseDir; -#endif - QString inputFileName; - QDir inputFileDir; - QString shortInputFileName; - QString outputPath; - int inputFileType; - bool hasPrj; - QString prjFileName; - double meshCellSize; - - enum eInputStatus{ - blue, green, amber, red}; - - int lineNumber; - - //GDAL values - QString GDALDriverName, GDALDriverLongName; - std::string GDALProjRef; - bool hasGDALCenter; - double GDALCenterLat; - double GDALCenterLon; - int GDALXSize, GDALYSize; - double GDALCellSize, GDALNoData; - double GDALMaxValue, GDALMinValue; - - //threshold for no-googling = 400000 - - static const int noGoogleNumCells = 400000; - double noGoogleCellSize; - //threads - solveThread *sThread; - - signals: - void inputFileChanged(QString newFile); - void mainDiurnalChanged(bool dC); - - public slots: - -#ifdef PHONE_HOME_QUERIES_ENABLED - void checkMessages(); -#endif -#ifdef NINJAFOAM - void openExistingCase(); - void updateFileInputForCase(const char* file); -#endif - void openInputFile(); - void updateFileInput(const char* file); - void inputFileDeleted(); - void openMainWindow(); - double computeCellSize(int index); - int checkInputFile(QString fileName); - void checkMeshCombo(); - void checkMeshUnits(bool checked); - void updateOutRes(); - void setPrompt(QString p); - void writeToConsole(QString message, QColor color = Qt::black); - - void writeConsoleOutput(); - void resampleData(); - void writeBlankStationFile(); - void windNinjaHelp(); - void displayArcGISPro(); - void tutorial1(); - void tutorial2(); - void tutorial3(); - void tutorial4(); - void demDownload(); - void fetchDem(); - void cliInstructions(); - void aboutWindNinja(); - void citeWindNinja(); - void supportEmail(); - void bugReport(); - int openHelp(int target = 0); - - void treeDoubleClick(QTreeWidgetItem *item, int column); - - bool getLatLon(); - - void test(); - - int solve(); - void cancelSolve(); - int countRuns(); - - void openOutputPath(); - - //functions for checking inputItems - int checkInputItem(); - int checkSurfaceItem(); - int checkDiurnalItem(); - int checkStabilityItem(); -#ifdef NINJAFOAM - int checkNativeSolverItem(); - int checkNinjafoamItem(); - int checkSolverMethodItem(); - void selectNativeSolver( bool pick ); - void selectNinjafoamSolver( bool pick ); -#endif - int checkWindItem(); - int checkSpdDirItem(); - int checkPointItem(); - int checkWeatherItem(); - int checkOutputItem(); - int checkGoogleItem(); - int checkFbItem(); - int checkShapeItem(); - int checkPdfItem(); - int checkVtkItem(); - int checkSolveItem(); - int checkAllItems(); - - int checkKmlLimit(double); - - bool okToContinue(); - - //initialization mutual exclusion - void selectWindInitialization( bool pick ); - void selectPointInitialization( bool pick ); - void selectWeatherInitialization( bool pick ); - void enablePointDate(bool enable); -#ifdef NINJAFOAM - void enableNinjafoamOptions(bool enable); -#endif - - void SetConfigOption(); - - protected: - void closeEvent(QCloseEvent *event); - - private: - QAction *openInputFileAction; - QAction *exitAction; - QAction *editPromptAction; - QAction *writeConsoleOutputAction; - QAction *rddsAction; - QAction *writeBlankStationFileAction; - QAction *setConfigAction; - QAction *rddsInstructAction; - QAction *resampleAction; - QAction *windNinjaHelpAction; - QAction *tutorial1Action, *tutorial2Action; - QAction *tutorial3Action, *tutorial4Action; - QAction *downloadDemAction; - QAction *fetchDemAction; - QAction *displayShapeFileViewAction; - QAction *displayShapeFileProAction; - QAction *cliInstructionsAction; - QAction *aboutWindNinjaAction; - QAction *aboutQtAction; - QAction *citeWindNinjaAction; - QAction *supportEmailAction; - QAction *submitBugReportAction; - - //test action connected to test slot - QAction *testAction; - - //Menus for the interface main window - QMenu *fileMenu; - QMenu *optionsMenu; - QMenu *toolsMenu; - QMenu *helpMenu; - QMenu *tutorialSubMenu; - QMenu *shapeSubMenu; - - QLabel *statusLabel; - - QTime *runTime; - - double elapsedRunTime; - - //create various entities in there own functions. - - void createMenus(); - void createActions(); - void createTimers(); - void createConnections(); - void createConsole(); - void createTreeView(); - void readSettings(); - void writeSettings(); - QString checkForNoData( QString fileName ); - - QVBoxLayout *mainLayout; - - QFileSystemWatcher fileWatcher; - WidgetDownloadDEM *demWidget; -}; - -#endif /* MAINWINDOW_H */ - diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/mainwindow.cpp similarity index 100% rename from src/gui/qt6/mainwindow.cpp rename to src/gui/mainwindow.cpp diff --git a/src/gui/qt6/mainwindow.h b/src/gui/mainwindow.h similarity index 100% rename from src/gui/qt6/mainwindow.h rename to src/gui/mainwindow.h diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index e623b385a..6296d9b8a 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -6,485 +6,3077 @@ 0 0 - 530 - 846 + 1081 + 638 + + + 0 + 0 + + + + + 490 + 500 + + + + + 1000 + 1000 + + + + + + + + + 255 + 255 + 255 + + + + + + + 60 + 60 + 60 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 60 + 60 + 60 + + + + + + + 60 + 60 + 60 + + + + + + + + + 255 + 255 + 255 + + + + + + + 60 + 60 + 60 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 60 + 60 + 60 + + + + + + + 60 + 60 + 60 + + + + + + + + + 60 + 60 + 60 + + + + + + + 60 + 60 + 60 + + + + + + + 60 + 60 + 60 + + + + + + - MainWindow + WindNinja + + + - + + true + + + + 0 + 0 + + + + + 0 + 0 + + + + false + + + + + + + 0 + + + 0 + + + 0 + + + 0 + - + - + 0 0 - - - WindNinja - - - - - Input - - - - Surface - - - - - Location - - - - - Diurnal + + + 200 + 0 + + + + + 225 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + QFrame::Shape::NoFrame + + + Qt::Orientation::Horizontal + + + 15 + + + false + + + + + 0 - - - - Wind Input + + QLayout::SizeConstraint::SetMinimumSize - - - Domain Average Initialization - - - - - Point Initialization - - - - - Weather Model Initialization - - - - - - - Output - - - - Google Earth + + 5 - - - - Fire Behavior + + 10 - - - - Shape Files + + 5 - - - - VTK + + 0 - - - - - Solve - - - - - - - - Input - - - - - - - - 0 - 0 - - - - 5 - - - - + + + + 0 + 0 + + + + + 0 + 250 + + + + + 600 + 250 + + + + + + + + + 60 + 60 + 60 + + + + + + + + + 60 + 60 + 60 + + + + + + + + + + 12 + + + + PointingHandCursor + + + + + + QFrame::Shape::StyledPanel + + + 0 + + + false + + + true + + + false + + + true + + + true + + + false + + + + Configuration + + - - - - 0 - 0 - + + Solver Methodology + + + ItemIsSelectable|ItemIsEnabled + + + + Conservation of Mass + + + ItemIsSelectable|ItemIsEnabled + + - Longitude + Conservation of Mass and Momentum - - - - - - - 0 - 0 - - - + + ItemIsSelectable|ItemIsEnabled + + - - - Qt::Horizontal + + Inputs + + + ItemIsSelectable|ItemIsEnabled + + + + Surface Input - - - 40 - 20 - + + ItemIsSelectable|ItemIsEnabled - - - - - - - - - - - 0 - 0 - + + + + Diurnal Input + + + ItemIsSelectable|ItemIsEnabled + + - Latitude + Stability Input - - - - - - - 0 - 0 - - - - - - - - Qt::Horizontal + + ItemIsSelectable|ItemIsEnabled - - - 40 - 20 - + + + + Wind Input + + + ItemIsSelectable|ItemIsEnabled - + + + Domain Average Wind + + + ItemIsSelectable|ItemIsEnabled + + + + + Point Initialization + + + ItemIsSelectable|ItemIsEnabled + + + + + Weather Model + + + ItemIsSelectable|ItemIsEnabled + + + - + + + Solver + + + - + - Qt::Vertical + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed 20 - 40 + 10 - - - - - - - - Use Diurnal Model - - - - - - Qt::Vertical + + + + 0 + 0 + - + - 20 - 40 + 0 + 250 - - - - - - - - - - - - - - - - - - - - - - Read Station File - - - - - - - - - - - - - Qt::Vertical + + + 600 + 16777215 + - + - 20 - 40 + 300 + 0 - - - - - - - - - - - - - - Download Forecast + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Sunken + + + 5 + + + + + + 0 - - - - - - - - - 1 + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 10 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';">A solution requires the selection of one (1) Solver Methodology:</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';"> 1. Conservation of Mass (faster, less accurate)</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';"> 2. Conservation of Mass and Momentum (slower, more accurate)</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';">Select either option for more detail.</span></p></body></html> + + + Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse + + + + + + + + + 0 + 0 + - - - - - - - - - - - - - - Elevation File + + + 5 - - - - - - - 0 - 0 - - - - - - - - Open Elevation File + + 5 - - Qt::ToolButtonTextBesideIcon + + 5 - - - - - - - - - - Vegetation + + 5 - - - - - - Grass - + + + + + + + 0 + + + 5 + + + 5 + + + 5 + + + 5 + + + + + PointingHandCursor + + + Use Conservation of Mass + + + false + + + + + - - Brush - + + + + 8 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">This is the native WindNinja solver. It solves a conservation of mass equation, but not a conservation of momentum equation. This solver is fast-running, but may give less accurate wind predictions in regions where momentum effects are important, for example on the lee side of terrain obstacles.</span></p></body></html> + + + Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse + + - - Trees - + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + - - - - - - Qt::Horizontal + + + + + + 5 - - - 40 - 20 - + + 5 - - - - - - - - - - Mesh Resolution + + 5 + + + 5 - - - - - - Coarse - + + + + + + + 0 + + + 5 + + + 5 + + + 5 + + + 5 + + + + + PointingHandCursor + + + Use Conservation of Mass and Momentum + + + + + - - Medium - + + + + 8 + + + + QFrame::Shape::NoFrame + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">This solver conserves both mass and momentum. It is based on the OpenFOAM CFD toolbox. This solver should give more accurate wind predictions in regions where momentum effects are important, such as on the lee side of terrain obstacles. Because this solver is more computationally intensive than the conservation of mass solver, simulation times will be longer. Typical simulation times for this solver range from 10-30 minutes, but will depend on your domain, resolution, and computational resources. Note that some options (e.g., point initialization and non-neutral stability) are not available for this solver at this time. We plan to make these options available in future releases.</span></p></body></html> + + + Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse + + + + + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 8 + + + + QFrame::Shape::NoFrame + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">This is where input parameters are defined. Analysis requires:</span> </p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> </p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> <span style=" font-family:'Sans Serif'; font-size:10pt;">1. Surface Input (.tif) file:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:30px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:10pt;">- Can be uploaded from a computer or downloaded using the map on the right</span> </p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:30px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:10pt;">- Optional diurnal and stability analysis</span> </p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> <span style=" font-family:'Sans Serif'; font-size:10pt;">2. Wind Input:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:30px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:10pt;">- Requires one (1) of the three (3) options available: Domain Average Wind, Point Initialization, or Weather Model</span></p></body></html> + + + Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + QLayout::SizeConstraint::SetMinAndMaxSize + + + 5 + + + 5 + + + 5 + + + 5 + - - Fine - + + + + 0 + 0 + + + + + 0 + 70 + + + + Elevation Input File + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 0 + 0 + + + + true + + + *.tif + + + + + + + PointingHandCursor + + + Open File + + + + + + + PointingHandCursor + + + Import From Map + + + + + + + + WORLD SRTM (30m) + + + + + WORLD GMTED (250m) + + + + + Landscape File + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + - - Custom - + + + + 0 + 0 + + + + + 0 + 70 + + + + Vegetation + + + + + + + 0 + 0 + + + + PointingHandCursor + + + + Grass + + + + + Brush + + + + + Trees + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + - - - - - - true + + + + + 0 + 0 + + + + + 0 + 70 + + + + Mesh Resolution + + + + + + + 0 + 0 + + + + PointingHandCursor + + + + Coarse + + + + + Medium + + + + + Fine + + + + + Custom + + + + + + + + false + + + + 0 + 0 + + + + PointingHandCursor + + + false + + + 0.010000000000000 + + + 10000.000000000000000 + + + 200.000000000000000 + + + + + + + true + + + + 0 + 0 + + + + PointingHandCursor + + + Meters + + + true + + + + + + + true + + + + 0 + 0 + + + + PointingHandCursor + + + Feet + + + false + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + Time Zone + + + + + + + 0 + 0 + + + + + 150 + 0 + + + + + 150 + 16777215 + + + + PointingHandCursor + + + + + + -1 + + + 10 + + + QComboBox::SizeAdjustPolicy::AdjustToContentsOnFirstShow + + + + + + + + 0 + 0 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Name: Mountain Standard Time</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Name: Mountain Daylight Time</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Offset from UTC: -07:00:00</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Offset from UTC: -06:00:00</p></body></html> + + + Qt::TextInteractionFlag::NoTextInteraction + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Display Time Zone Details + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Show All Zones + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + + 0 - - 5000.000000000000000 + + 5 - - 100.000000000000000 + + 5 - - - - - - Meters + + 5 - - true + + 5 - - - - - - Feet + + + + + 0 + 0 + + + + + + + + 0 + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 0 + 0 + + + + PointingHandCursor + + + Use Diurnal Wind + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + 0 - - - + + 5 + + + 5 + + + 5 + + + 5 + + + + + + + + + 0 + + + 5 + + + 5 + + + 5 + + + 5 + + + + + PointingHandCursor + + + Use Stability + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + 6 + + + 5 + + + 5 + + + 5 + + + 5 + + + + + 6 + + + QLayout::SizeConstraint::SetMinAndMaxSize + + + 0 + + + + + QLayout::SizeConstraint::SetDefaultConstraint + + + 0 + + + + + + 0 + 0 + + + + + 0 + 5 + + + + PointingHandCursor + + + Domain Average Wind + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + 10 + + + + + + + + 0 + 100 + + + + Input Wind Height + + + + + + PointingHandCursor + + + + 20ft-US + + + + + 10m-SI + + + + + Custom + + + + + + + + false + + + PointingHandCursor + + + 0.010000000000000 + + + 20.000000000000000 + + + + + + + false + + + PointingHandCursor + + + Feet + + + true + + + + + + + false + + + PointingHandCursor + + + Meters + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 90 + 0 + + + + + 90 + 16777215 + + + + Table Units: + + + false + + + true + + + + + + + + 0 + 0 + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + PointingHandCursor + + + + mph + + + + + m/s + + + + + kph + + + + + kts + + + + + + + + + 0 + 0 + + + + + 40 + 0 + + + + + 40 + 16777215 + + + + PointingHandCursor + + + Qt::LayoutDirection::LeftToRight + + + + °F + + + + + °C + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Clear Table + + + + + + + + + QLayout::SizeConstraint::SetMaximumSize + + + 0 + + + + + + 1 + 0 + + + + + 100 + 0 + + + + true + + + QAbstractItemView::DragDropMode::DragDrop + + + Qt::DropAction::MoveAction + + + true + + + 50 + + + false + + + 20 + + + 80 + + + true + + + false + + + 20 + + + 20 + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Speed +(Select) + + + + 10 + + + + + + Direction +(degrees) + + + + + + + 10 + + + + + + Time +(hh:mm) + + + + 10 + + + + + + Date +(mm/dd/yyyy) + + + + 10 + + + + + + Cloud Cover +(%) + + + + 10 + + + + + + Air Temp +(Select) + + + + 10 + + + + + + + + + + + + + + + 0 + 0 + + + + + 1000 + 16777215 + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 0 + 0 + + + + + 0 + 20 + + + + + 16777215 + 20 + + + + PointingHandCursor + + + Point Initialization + + + + + + + + 1 + 0 + + + + Select Weather Stations + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + + + 0 + 0 + + + + + 200 + 16777215 + + + + PointingHandCursor + + + + Download from DEM + + + + + Download by Station ID + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + 250 + 16777215 + + + + PointingHandCursor + + + + Download Most Recent Data + + + + + Download Between Two Dates + + + + + + + + + + + + + 225 + 0 + + + + + 225 + 16777215 + + + + 0 + + + 1 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + Buffer Around DEM + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + PointingHandCursor + + + + + + + PointingHandCursor + + + + mi + + + + + km + + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + 120 + 16777215 + + + + Download Data + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + + + 0 + 0 + + + + + 0 + 50 + + + + + 16777215 + 50 + + + + Input Station IDs + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + KMSO, PNTM8 + + + false + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + 140 + 16777215 + + + + PointingHandCursor + + + Download Data + + + + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + 225 + 0 + + + + + 225 + 16777215 + + + + 1 + + + + + + 0 + 0 + + + + + 0 + 150 + + + + + 10 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Start Time + + + + + + PointingHandCursor + + + true + + + + + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + + 16777215 + 70 + + + + PointingHandCursor + + + End Time + + + + + + true + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + PointingHandCursor + + + Write Station KML + + + + + + + true + + + 10 + + + 300 + + + true + + + false + + + + + + + + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 0 + 0 + + + + + 0 + 20 + + + + + 16777215 + 20 + + + + PointingHandCursor + + + Weather Model Initialization + + + + + + + Download Weather Data + + + false + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + PointingHandCursor + + + + + + + PointingHandCursor + + + QAbstractSpinBox::ButtonSymbols::UpDownArrows + + + + + + hour(s) + + + 1 + + + + + + + PointingHandCursor + + + Download Data + + + + + + + + + Downloaded Forecasts + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + true + + + + + + + PointingHandCursor + + + Select Specific Time Steps + + + true + + + false + + + + + + + + + + + + + + + QLayout::SizeConstraint::SetDefaultConstraint + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 0 + 0 + + + + + 16777215 + 25 + + + + + 0 + 0 + + + + QFrame::Shape::NoFrame + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + true + + + + + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 175 + 25 + + + + + 0 + 0 + + + + QFrame::Shape::NoFrame + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + true + + + Number of Processors: + + + + + + + PointingHandCursor + + + 1 + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 + 0 + + + + + 16777215 + 25 + + + + QFrame::Shape::NoFrame + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + true + + + Output Directory + + + + + + + 10 + + + + + + 0 + 0 + + + + + 300 + 30 + + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + true + + + + + + + PointingHandCursor + + + Output Location + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + + + + + false + + + + 0 + 0 + + + + PointingHandCursor + + + Solve + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + - - - Qt::Vertical + + + 0 - - - 20 - 40 - + + 3 - + + 3 + + + + + 0 + + + + + + + + + + + + false + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + PointingHandCursor + + + Qt::LayoutDirection::LeftToRight + + + #solveButton { + padding: 0; + width: 100px; + text-align: center; + padding: 5px; +} + + + Solve + + + + + + + + + + + true + + + + + + + + + + 1 + 0 + + + + + 100 + 0 + + + + + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + + + - + 0 0 - 530 - 25 + 1081 + 22 + + QMenuBar { + background-color: #818181 +} +QMenu::item:selected { + background: #3c3c3c; +} + File - - - - + + + + + @@ -496,88 +3088,155 @@ Tools - - + + Help + + + Displaying Shapefiles + + + + + + Tutorials + + + + + + + + + Instructions + + + + + + + + + + + + - - - 8 - - - - - - - - 0 - 0 - - - - - - - - - - toolBar + + + Console Output - - TopToolBarArea - - - false - - - - + + - Open &Elevation File + Write blank station file - + - Write &Console Output to File + Set configuration option - + - Exit + Displaying Shapefiles - + - Console Output + How to Display Shapefiles in ArcMap + + + + + Tutorial 1: The Basics + + + + + Tutorial 2: Diurnal Winds and Non-Neutral Stability + + + + + Tutorial 3: Point Initialization + + + + + Tutorial 4: Weather Model Initialization + + + + + DEM Download + + + + + fetch_dem Instructions + + + + + Command Line Interface + + + + + About WindNinja + + + + + Citation + + + + + Email Us + + + + + Submit Bug Report + + + + + New Project + + + + + Open Project + + + + + Export Solution - + - Open RDDS Website + Close Project - + - Write Blank Station File + Exit WindNinja - - - Marble::LatLonEdit - QWidget -
LatLonEdit.h
-
-
diff --git a/src/gui/metaWindWidget.cpp b/src/gui/metaWindWidget.cpp deleted file mode 100644 index 015bbf8f5..000000000 --- a/src/gui/metaWindWidget.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Input for global wind input variables - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "metaWindWidget.h" - -metaWindWidget::metaWindWidget(QWidget *parent) : QWidget(parent) -{ - metaWindGroupBox = new QGroupBox(tr("Options")); - - //input Height widgets - inputHeightGroupBox = new QGroupBox(tr("Input Wind Height")); - - inputHeightComboBox = new QComboBox; - inputHeightComboBox->addItem(tr("20ft-US")); - inputHeightComboBox->addItem(tr("10m-SI")); - inputHeightComboBox->addItem(tr("Custom")); - - inputHeightDoubleSpinBox = new QDoubleSpinBox; - inputHeightDoubleSpinBox->setRange(0, 100000); //Increased from 100 - inputHeightDoubleSpinBox->setValue(20.00); - inputHeightDoubleSpinBox->setAccelerated(true); - inputHeightDoubleSpinBox->setDisabled(true); - - feetRadioButton = new QRadioButton(tr("Feet")); - feetRadioButton->setChecked(true); - feetRadioButton->setDisabled(true); - meterRadioButton = new QRadioButton(tr("Meters")); - meterRadioButton->setDisabled(true); - - inputHeightLayout = new QHBoxLayout; - inputHeightLayout->addWidget(inputHeightComboBox); - inputHeightLayout->addWidget(inputHeightDoubleSpinBox); - inputHeightLayout->addWidget(feetRadioButton); - inputHeightLayout->addWidget(meterRadioButton); - inputHeightLayout->addStretch(); - - inputHeightGroupBox->setLayout(inputHeightLayout); - - connect(inputHeightComboBox, SIGNAL(currentIndexChanged(int)), - this, SLOT(checkInputHeight(int))); - - layout = new QVBoxLayout; - layout->addWidget(inputHeightGroupBox); - - setLayout(layout); -} - -void metaWindWidget::checkInputHeight(int choice) -{ - if(choice == 0) - { - inputHeightDoubleSpinBox->setValue(20.00); - inputHeightDoubleSpinBox->setDisabled(true); - feetRadioButton->setChecked(true); - feetRadioButton->setDisabled(true); - meterRadioButton->setDisabled(true); - } - else if(choice == 1) - { - inputHeightDoubleSpinBox->setValue(10.00); - inputHeightDoubleSpinBox->setDisabled(true); - meterRadioButton->setChecked(true); - feetRadioButton->setDisabled(true); - meterRadioButton->setDisabled(true); - } - else if(choice == 2) - { - inputHeightDoubleSpinBox->setEnabled(true); - feetRadioButton->setEnabled(true); - feetRadioButton->setChecked(true); - inputHeightDoubleSpinBox->setValue(0.00); - meterRadioButton->setEnabled(true); - } -} diff --git a/src/gui/metaWindWidget.h b/src/gui/metaWindWidget.h deleted file mode 100644 index 755546190..000000000 --- a/src/gui/metaWindWidget.h +++ /dev/null @@ -1,79 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Input for global wind input variables - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef METAWINDWIDGET_H -#define METAWINDWIDGET_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "gdal_priv.h" -#include "ogr_srs_api.h" - -#include "latLonWidget.h" - -#ifndef Q_MOC_RUN -#include "ninja.h" -#endif - -class metaWindWidget : public QWidget -{ - Q_OBJECT - - public: - - metaWindWidget(QWidget *parent = 0); - - QGroupBox *metaWindGroupBox; - //input height - QGroupBox *inputHeightGroupBox; - QComboBox *inputHeightComboBox; - QDoubleSpinBox *inputHeightDoubleSpinBox; - QRadioButton *feetRadioButton, *meterRadioButton; - - //layouts - QHBoxLayout *inputHeightLayout; - - QVBoxLayout *layout; - - public slots: - void checkInputHeight(int choice); - -}; - -#endif /* METAWINDWIDGET_H */ diff --git a/src/gui/qt6/modeldata.h b/src/gui/modeldata.h similarity index 100% rename from src/gui/qt6/modeldata.h rename to src/gui/modeldata.h diff --git a/src/gui/nativeSolverInput.cpp b/src/gui/nativeSolverInput.cpp deleted file mode 100644 index 3a415b0d6..000000000 --- a/src/gui/nativeSolverInput.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/****************************************************************************** - * - * $Id: stabilityInput.cpp 1304 2012-01-20 21:07:12Z kyle.shannon $ - * - * Project: WindNinja Qt GUI - * Purpose: native solver interface - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "nativeSolverInput.h" - -/** - * Construct and layout the nativeSolverInput widget. This is only a checkable - * option now. - * - * @param parent parent widget - */ -nativeSolverInput::nativeSolverInput(QWidget *parent) : QWidget(parent) -{ - nativeSolverGroupBox = new QGroupBox(tr("Conservation of Mass")); - nativeSolverGroupBox->setCheckable(true); - nativeSolverGroupBox->setChecked(true); - - nativeSolverLabel = new QLabel(tr("This is the native WindNinja solver. It solves a conservation of mass equation,\n" - "but not a conservation of momentum equation. This solver is fast-running, \n" - "but may give less accurate wind predictions in regions where momentum effects are\n" - "important, for example on the lee side of terrain obstacles.\n" - ), this); - - nativeSolverLayout = new QVBoxLayout; - - nativeSolverGroupBox->setLayout(nativeSolverLayout); - - layout = new QVBoxLayout; - layout->addWidget(nativeSolverGroupBox); - layout->addWidget(nativeSolverLabel); - layout->addStretch(); - setLayout(layout); - - -} diff --git a/src/gui/nativeSolverInput.h b/src/gui/nativeSolverInput.h deleted file mode 100644 index 2b117443c..000000000 --- a/src/gui/nativeSolverInput.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef NATIVESOLVERINPUT_H -#define NATIVESOLVERINPUT_H - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "gdal_priv.h" -#include "ogr_srs_api.h" - -#ifndef Q_MOC_RUN -#include "boost/date_time/local_time/local_time.hpp" -#include "boost/date_time/posix_time/posix_time_types.hpp" -#endif - -#include "latLonWidget.h" -#include "timeZoneWidget.h" - -#include "qdebug.h" - -class nativeSolverInput : public QWidget -{ - Q_OBJECT - - public: - - nativeSolverInput(QWidget *parent = 0); - QGroupBox *nativeSolverGroupBox; - QVBoxLayout *nativeSolverLayout; - QVBoxLayout *layout; - QLabel *nativeSolverLabel; - - -}; - -#endif /* NATIVESOLVERINPUT_H */ diff --git a/src/gui/ninjafoamInput.cpp b/src/gui/ninjafoamInput.cpp deleted file mode 100644 index beae42503..000000000 --- a/src/gui/ninjafoamInput.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/****************************************************************************** - * - * $Id: stabilityInput.cpp 1304 2012-01-20 21:07:12Z kyle.shannon $ - * - * Project: WindNinja Qt GUI - * Purpose: NinjaFOAM interface - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "ninjafoamInput.h" - -/** - * Construct and layout the ninjafoamInput widget. This is only a checkable - * option now. - * - * @param parent parent widget - */ -ninjafoamInput::ninjafoamInput(QWidget *parent) : QWidget(parent) -{ - ninjafoamGroupBox = new QGroupBox(tr("Conservation of Mass and Momentum")); - ninjafoamGroupBox->setCheckable(true); - ninjafoamGroupBox->setChecked(false); - - ninjafoamLabel = new QLabel(tr("This solver conserves both mass and momentum. It is based on the OpenFOAM\n" - "CFD toolbox. This solver should give more accurate wind predictions in regions where\n" - "momentum effects are important, such as on the lee side of terrain obstacles. Because\n" - "this solver is more computationally intensive than the conservation of mass solver,\n" - "simulation times will be longer. Typical simulation times for this solver range from\n" - "10-30 min, but will depend on your domain, resolution, and computational\n" - "resources. Note that some options (e.g., point initialization and non-neutral\n" - "stability) are not available for this solver at this time. We plan to make these options\n" - "available in future releases." - ), this); - - ninjafoamLayout = new QVBoxLayout; - - ninjafoamGroupBox->setLayout(ninjafoamLayout); - - layout = new QVBoxLayout; - layout->addWidget(ninjafoamGroupBox); - layout->addWidget(ninjafoamLabel); - layout->addStretch(); - setLayout(layout); - - -} diff --git a/src/gui/ninjafoamInput.h b/src/gui/ninjafoamInput.h deleted file mode 100644 index 2beee89a9..000000000 --- a/src/gui/ninjafoamInput.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef NINJAFOAMINPUT_H -#define NINJAFOAMINPUT_H - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "gdal_priv.h" -#include "ogr_srs_api.h" - -#ifndef Q_MOC_RUN -#include "boost/date_time/local_time/local_time.hpp" -#include "boost/date_time/posix_time/posix_time_types.hpp" -#endif - -#include "latLonWidget.h" -#include "timeZoneWidget.h" - -#include "qdebug.h" - -class ninjafoamInput : public QWidget -{ - Q_OBJECT - - public: - - ninjafoamInput(QWidget *parent = 0); - QGroupBox *ninjafoamGroupBox; - QVBoxLayout *ninjafoamLayout; - QVBoxLayout *layout; - QLabel *ninjafoamLabel; - -}; - -#endif /* NINJAFOAMINPUT_H */ diff --git a/src/gui/outputHeightWidget.cpp b/src/gui/outputHeightWidget.cpp deleted file mode 100644 index b8bc9350c..000000000 --- a/src/gui/outputHeightWidget.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Output wind option widget - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "outputHeightWidget.h" - -outputHeightWidget::outputHeightWidget(QWidget *parent) : QWidget(parent) -{ - //create output height sections for tree/gui - outputHeightGroupBox = new QGroupBox(tr("Output Height")); - - outputHeightComboBox = new QComboBox; - outputHeightComboBox->addItem(tr("20ft-US")); - outputHeightComboBox->addItem(tr("10m-SI")); - outputHeightComboBox->addItem(tr("Custom")); - - outputHeightDoubleSpinBox = new QDoubleSpinBox; - outputHeightDoubleSpinBox->setRange(0, 10000); //Increased from 100 - outputHeightDoubleSpinBox->setValue(20.00); - outputHeightDoubleSpinBox->setAccelerated(true); - outputHeightDoubleSpinBox->setDisabled(true); - - feetRadioButton = new QRadioButton(tr("Feet")); - feetRadioButton->setChecked(true); - - meterRadioButton = new QRadioButton(tr("Meters")); - - layout = new QHBoxLayout; - layout->addWidget(outputHeightComboBox); - layout->addWidget(outputHeightDoubleSpinBox); - layout->addWidget(feetRadioButton); - layout->addWidget(meterRadioButton); - layout->addStretch(); - - outputHeightGroupBox->setLayout(layout); - - mainLayout = new QVBoxLayout; - mainLayout->addWidget(outputHeightGroupBox); - - setLayout(mainLayout); - - //signal/slot connection - connect(outputHeightComboBox, SIGNAL(currentIndexChanged(int)), - this, SLOT(checkOutputHeight(int))); -} - -void outputHeightWidget::checkOutputHeight(int choice) -{ - if(choice == 0) - { - outputHeightDoubleSpinBox->setValue(20.00); - outputHeightDoubleSpinBox->setDisabled(true); - feetRadioButton->setChecked(true); - feetRadioButton->setDisabled(true); - meterRadioButton->setDisabled(true); - } - else if(choice == 1) - { - outputHeightDoubleSpinBox->setValue(10.00); - outputHeightDoubleSpinBox->setDisabled(true); - meterRadioButton->setChecked(true); - feetRadioButton->setDisabled(true); - meterRadioButton->setDisabled(true); - } - else if(choice == 2) - { - outputHeightDoubleSpinBox->setEnabled(true); - feetRadioButton->setEnabled(true); - feetRadioButton->setChecked(true); - outputHeightDoubleSpinBox->setValue(0.00); - meterRadioButton->setEnabled(true); - } -} diff --git a/src/gui/outputHeightWidget.h b/src/gui/outputHeightWidget.h deleted file mode 100644 index 1c8c30d63..000000000 --- a/src/gui/outputHeightWidget.h +++ /dev/null @@ -1,63 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Output wind option widget - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef OUTPUTHEIGHTWIDGET_H -#define OUTPUTHEIGHTWIDGET_H - -#include -#include -#include -#include -#include -#include - -class outputHeightWidget : public QWidget -{ - Q_OBJECT - - public: - outputHeightWidget(QWidget *parent = 0); - - //one lonsome widget needs to be places for "output" part in tree - //widget for output wind height - - QGroupBox *outputHeightGroupBox; - - QComboBox *outputHeightComboBox; - QDoubleSpinBox *outputHeightDoubleSpinBox; - QRadioButton *feetRadioButton; - QRadioButton *meterRadioButton; - - QHBoxLayout *layout; - QVBoxLayout *mainLayout; - public slots: - void checkOutputHeight(int choice); -}; - -#endif /* OUTPUTHEIGHTWIDGET_H */ diff --git a/src/gui/outputMetaData.cpp b/src/gui/outputMetaData.cpp deleted file mode 100644 index b506ddb53..000000000 --- a/src/gui/outputMetaData.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja - * Purpose: Meta output information - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "outputMetaData.h" - -/** - * Constructor for outputMetaData, sets layouts and attributes - * - * @param parent parent widget - */ -outputMetaData::outputMetaData( QWidget *parent ) : QWidget( parent ) -{ - - outputHeight = new outputHeightWidget( this ); - - bufferLabel = new QLabel( tr( "Clip output by: " ), this ); - bufferSpinBox = new QSpinBox( this ); - bufferSpinBox->setRange( 0, 49 ); - bufferSpinBox->setSingleStep( 5 ); - bufferSpinBox->setSuffix( "%" ); - - bufferLayout = new QHBoxLayout(); - bufferLayout->addWidget( bufferLabel ); - bufferLayout->addWidget( bufferSpinBox ); - bufferLayout->addStretch(); - - outputSpeedUnitsLabel = new QLabel( "Output Speed Units:", this ); - - outputSpeedUnitsCombo = new QComboBox( this ); - outputSpeedUnitsCombo->addItem( "mph" ); - outputSpeedUnitsCombo->addItem( "m/s" ); - outputSpeedUnitsCombo->addItem( "kph" ); - outputSpeedUnitsCombo->addItem( "kts" ); - - outputSpeedUnitsLayout = new QHBoxLayout(); - outputSpeedUnitsLayout->addWidget( outputSpeedUnitsLabel ); - outputSpeedUnitsLayout->addWidget( outputSpeedUnitsCombo ); - outputSpeedUnitsLayout->addStretch(); - - wxModelOutputCheckBox = new QCheckBox( tr( "Write Raw Weather Model Output" ), - this ); - wxModelOutputCheckBox->setDisabled( true ); - wxModelOutputCheckBox->setChecked( true ); - - layout = new QVBoxLayout(); - layout->addWidget( outputHeight ); - layout->addLayout( outputSpeedUnitsLayout ); - layout->addLayout( bufferLayout ); - layout->addWidget( wxModelOutputCheckBox ); - layout->addStretch(); - setLayout( layout ); -} - -outputMetaData::~outputMetaData() -{ - -} - - - - diff --git a/src/gui/outputMetaData.h b/src/gui/outputMetaData.h deleted file mode 100644 index a31a260e0..000000000 --- a/src/gui/outputMetaData.h +++ /dev/null @@ -1,64 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja - * Purpose: Meta output information - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef OUTPUT_META_DATA_H -#define OUTPUT_META_DATA_H - -#include -#include -#include -#include -#include - -#include "outputHeightWidget.h" - -class outputMetaData : public QWidget -{ - Q_OBJECT - - public: - outputMetaData( QWidget *parent = 0 ); - ~outputMetaData(); - - outputHeightWidget *outputHeight; /**< Output wind Heigth Widget */ - - QLabel *bufferLabel; /**< Describe the buffer */ - QSpinBox *bufferSpinBox; /**< Set buffer size in % */ - - QLabel *outputSpeedUnitsLabel; - QComboBox *outputSpeedUnitsCombo; - - QCheckBox *wxModelOutputCheckBox; /**< Write out the raw wx model data */ - - QHBoxLayout *outputSpeedUnitsLayout; - QHBoxLayout *bufferLayout; /**< layout for buffer info */ - QVBoxLayout *layout; /**< main layout */ -}; - -#endif /* OUTPUT_META_DATA_H */ diff --git a/src/gui/pdfOutput.cpp b/src/gui/pdfOutput.cpp deleted file mode 100644 index fcbe21140..000000000 --- a/src/gui/pdfOutput.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/****************************************************************************** - * - * Project: WindNinja Qt GUI - * Purpose: PDF output selection widgetx - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "pdfOutput.h" - -pdfOutput::pdfOutput(QWidget *parent) : QWidget(parent) -{ - pdfGroupBox = new QGroupBox(tr("Create Geospatial PDF Files (*.pdf)")); - pdfGroupBox->setCheckable(true); - pdfGroupBox->setChecked(false); - - vectorGroupBox = new QGroupBox(tr("Vectors")); - - vectorWidthLabel = new QLabel(tr("Line Width")); - - vectorWidthDoubleSpinBox = new QDoubleSpinBox; - vectorWidthDoubleSpinBox->setRange(1.0, 10.0); - vectorWidthDoubleSpinBox->setDecimals(1); - vectorWidthDoubleSpinBox->setValue(1.0); - vectorWidthDoubleSpinBox->setSingleStep(0.1); - vectorWidthDoubleSpinBox->setAccelerated(true); - - vectorLayout = new QHBoxLayout; - vectorLayout->addWidget(vectorWidthLabel); - vectorLayout->addWidget(vectorWidthDoubleSpinBox); - vectorLayout->addStretch(); - - vectorGroupBox->setLayout(vectorLayout); - - pdfResGroupBox = new QGroupBox(tr("Resolution")); - - pdfResSpinBox = new QDoubleSpinBox(this); - pdfResSpinBox->setRange(1, 5000); - pdfResSpinBox->setDecimals(2); - pdfResSpinBox->setAccelerated(true); - pdfResSpinBox->setValue(200); - pdfResSpinBox->setDisabled(true); - - pdfMetersRadioButton = new QRadioButton(tr("Meters")); - pdfMetersRadioButton->setChecked(true); - pdfMetersRadioButton->setDisabled(true); - pdfFeetRadioButton = new QRadioButton(tr("Feet")); - pdfFeetRadioButton->setDisabled(true); - - useMeshResCheckBox = new QCheckBox(tr("Use Mesh Resolution")); - useMeshResCheckBox->setChecked(true); - - backgroundLabel = new QLabel(tr("Basemap"), this); - - backgroundComboBox = new QComboBox(this); - backgroundComboBox->addItem(tr("TopoFire topo maps")); - backgroundComboBox->addItem(tr("Hillshade")); - - // Size names dictated by https://en.wikipedia.org/wiki/Paper_size - sizeLabel = new QLabel(tr("Size"), this); - sizeComboBox = new QComboBox(this); - sizeComboBox->addItem(tr("Letter-8 1/2 x 11")); - sizeComboBox->addItem(tr("Legal - 8 1/2 x 14")); - sizeComboBox->addItem(tr("Tabloid - 11 x 17")); - - portraitRadioButton = new QRadioButton(tr("Portrait"), this); - landscapeRadioButton = new QRadioButton(tr("Landscape"), this); - portraitRadioButton->setChecked(true); - - orientLayout = new QVBoxLayout; - orientLayout->addWidget(portraitRadioButton); - orientLayout->addWidget(landscapeRadioButton); - - sizeLayout = new QHBoxLayout; - sizeLayout->addWidget(sizeLabel); - sizeLayout->addWidget(sizeComboBox); - sizeLayout->addLayout(orientLayout); - - //connect checkbox with spin box - connect(useMeshResCheckBox, SIGNAL(toggled(bool)), - pdfResSpinBox, SLOT(setDisabled(bool))); - connect(useMeshResCheckBox, SIGNAL(toggled(bool)), - pdfFeetRadioButton, SLOT(setDisabled(bool))); - connect(useMeshResCheckBox, SIGNAL(toggled(bool)), - pdfMetersRadioButton, SLOT(setDisabled(bool))); - - backgroundLayout = new QHBoxLayout; - backgroundLayout->addWidget(backgroundLabel); - backgroundLayout->addWidget(backgroundComboBox); - backgroundLayout->addStretch(); - - resLayout = new QGridLayout; - resLayout->addWidget(pdfResSpinBox, 0, 0); - resLayout->addWidget(pdfMetersRadioButton, 0, 1); - resLayout->addWidget(pdfFeetRadioButton, 0, 2); - resLayout->addWidget(useMeshResCheckBox, 1, 0); - - pdfResGroupBox->setLayout(resLayout); - - pageLayout = new QVBoxLayout; - pageLayout->addWidget(vectorGroupBox); - pageLayout->addLayout(backgroundLayout); - pageLayout->addLayout(sizeLayout); - pageLayout->addWidget(pdfResGroupBox); - pageLayout->addStretch(); - - pdfGroupBox->setLayout(pageLayout); - - mainLayout = new QVBoxLayout; - mainLayout->addWidget(pdfGroupBox); - mainLayout->addStretch(); - - setLayout(mainLayout); -} diff --git a/src/gui/pdfOutput.h b/src/gui/pdfOutput.h deleted file mode 100644 index 1b72ad4a5..000000000 --- a/src/gui/pdfOutput.h +++ /dev/null @@ -1,74 +0,0 @@ -/****************************************************************************** - * - * Project: WindNinja Qt GUI - * Purpose: PDF output selection widgetx - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef PDFOUTPUT_H -#define PDFOUTPUT_H - -#include -#include -#include -#include -#include -#include - -#include -#include - -class pdfOutput : public QWidget -{ -Q_OBJECT - -public: - pdfOutput(QWidget *parent = 0); - - QGroupBox *pdfGroupBox; - QGroupBox *vectorGroupBox; - QLabel *vectorWidthLabel; - QDoubleSpinBox *vectorWidthDoubleSpinBox; - QGroupBox *pdfResGroupBox; - QDoubleSpinBox *pdfResSpinBox; - QRadioButton *pdfMetersRadioButton, *pdfFeetRadioButton; - QCheckBox *useMeshResCheckBox; - QLabel *backgroundLabel; - QComboBox *backgroundComboBox; - - QLabel *sizeLabel; - QComboBox *sizeComboBox; - QRadioButton *portraitRadioButton; - QRadioButton *landscapeRadioButton; - - QHBoxLayout *vectorLayout; - QVBoxLayout *optionLayout; - QGridLayout *resLayout; - QHBoxLayout *backgroundLayout; - QVBoxLayout *orientLayout; - QHBoxLayout *sizeLayout; - QVBoxLayout *pageLayout; - QVBoxLayout *mainLayout; -}; - -#endif /* PDFOUTPUT_H */ diff --git a/src/gui/pointInput.cpp b/src/gui/pointInput.cpp deleted file mode 100644 index 4e744ea9b..000000000 --- a/src/gui/pointInput.cpp +++ /dev/null @@ -1,1019 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Point initialization input. - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -/** - * @file pointInput.cpp - * @author Kyle Shannon - */ - -#include "pointInput.h" -static int wxStationFormat; - -pointInput::pointInput( QWidget *parent ) : QWidget( parent ) -{ - pointGroupBox = new QGroupBox( "Point Initialization", this ); - pointGroupBox->setCheckable( true ); - pointGroupBox->setChecked(false); - - pointGo=false; //Very Imptortant! - enableTimeseries=false; //bool for mainwindow - - newForm = new QWidget(); - -//#################################################### -// Some General Buttons # -//#################################################### - - //dateTimeEdit is the way of setting the simulation time for old format runs - dateTimeEdit = new QDateTimeEdit( newForm ); - dateTimeEdit->setDateTime( QDateTime::currentDateTime() ); - dateTimeEdit->setCalendarPopup( true ); - dateTimeEdit->setDisplayFormat( "MM/dd/yyyy HH:mm" ); - dateTimeEdit->setEnabled( false ); //This is for Old Format Diurnal Simulations - dateTimeEdit->setVisible(false); - dateTimeEdit->setToolTip("Set date and time for single time step diurnal/stability simulations"); - - diurnalLabel = new QLabel(this); //A Label for dateTimeEdit - diurnalLabel->setText("Set Simulation Time: "); - diurnalLabel->setVisible(false); - - oneStepTimeLabel = new QLabel(this); //Label for 1 step datetime runs - oneStepTimeLabel->setText("Simulation time set to:"); - oneStepTimeLabel->setVisible(false); - - writeStationFileButton = new QCheckBox( this ); //This writes an interpolated csv of the weather data (we might not want this) - writeStationFileButton->setText( tr( "Write Station File" ) ); - writeStationFileButton->setIcon( QIcon( ":weather_clouds.png" ) ); - writeStationFileButton->setToolTip("Time Series: Writes an Interpolated CSV for each time step\nSingle Step: Writes a CSV of inputted weather data."); - - writeStationKmlButton = new QCheckBox( this ); //This writes a KML of the weather stations (1 per run) - writeStationKmlButton->setText( tr( "Write Station Kml" ) ); - writeStationKmlButton->setIcon( QIcon( ":weather_cloudy.png" ) ); - writeStationKmlButton->setToolTip("Time Series: Writes a KML for each time step with time interpolated station data.\nSingle Step: Writes a KML of weather station data."); - - widgetButton = new QToolButton( this ); //This opens the station fetch downloader Widget (formerly doTest) - widgetButton->setText( tr( "Download data" )); - widgetButton->setIcon(QIcon(":server_go.png")); - widgetButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - widgetButton->setToolTip("Download weather station data from the Mesonet API."); - -//#################################################### -// The Main Box and directory stuff # -//#################################################### - - sfModel = new QDirModel(this); //Creates the directory model - sfModel->setReadOnly(true); //probably can be true, but i don't know - sfModel->setSorting(QDir::Time); //Sort by time created - - treeView = new QTreeView(this); //Creates the box where the sfModel goes - treeView->setVisible(true); - treeView->setModel(sfModel); //Sets the model to the thing above - treeView->header()->setStretchLastSection(true); //Makes it look nice - treeView->setAnimated(true); //Fancy stuff - treeView->setColumnHidden(1, true); - treeView->setColumnHidden(2, true); - treeView->setAlternatingRowColors( false ); - treeView->setSelectionMode(QAbstractItemView::MultiSelection); //Allows multiple files to be selected - treeView->setSelectionBehavior(QAbstractItemView::SelectRows); //Select entire row when we do select something - - treeLabel = new QLabel(tr("Select Weather Stations")); //Label for Tree and sfModel - treeLabel->setToolTip("Select Weather Stations from available files.\n" - "Click a file to add it to the list of included stations\n" - "Click it again to remove it from the included stations.\n" - "Available formats are time series, one step runs with time data,\n" - "and one step runs without time data (old format)"); - -//#################################################### -// Tool buttons and other things # -//#################################################### - ClippyToolLayout = new QHBoxLayout; //Layout for info and toolbox - - refreshToolButton = new QToolButton(this); //This refreshes the tree so that new files will populate - refreshToolButton->setText(tr("Refresh Weather Stations")); - refreshToolButton->setIcon(QIcon(":arrow_rotate_clockwise.png")); - refreshToolButton->setToolTip(tr("Refresh Stations stored on disk in the DEM directory.")); - refreshToolButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - refreshToolButton->setVisible(true); - - clippit = new QLabel(tr("")); //This gets updated with important information about the simulation as station files are chosen - clippit->setVisible(false); - - timeLine = new QFrame(this); //Adds a horizontal line - timeLine->setFrameShape(QFrame::HLine); - timeLine->setFrameShadow(QFrame::Sunken); - - timeLine2 = new QFrame(this); //Adds a horizontal line - timeLine2->setFrameShape(QFrame::HLine); - timeLine2->setFrameShadow(QFrame::Sunken); - - ClippyToolLayout->addStretch(); //Moves it over to the other side - ClippyToolLayout->addWidget(refreshToolButton); -// ClippyToolLayout->addWidget(clippit); - -//#################################################### -//Stuff for timeseries runs... # -//#################################################### - startTime = new QDateTimeEdit(QDateTime::currentDateTime()); //Initializes the start and stop time boxes for timeseries - stopTime = new QDateTimeEdit(QDateTime::currentDateTime()); - - startTime->setDateTime(QDateTime::currentDateTime().addDays(-1)); //Set default to be yesterday - startTime->setMaximumDateTime(QDateTime::currentDateTime().addSecs(-3600)); //Prevent time from overlapping with right now - stopTime->setMaximumDateTime(QDateTime::currentDateTime()); //No Future simulations - - startTime->setDisplayFormat( "MM/dd/yyyy HH:mm" ); - stopTime->setDisplayFormat( "MM/dd/yyyy HH:mm" ); - - startTime->setToolTip("Enter the simulation start time"); - stopTime->setToolTip("Enter the simulation stop time"); - - startTime->setCalendarPopup(true); - stopTime->setCalendarPopup(true); - - numSteps = new QSpinBox; //Number of timesteps box - numSteps->setValue(24); - numSteps->setMinimum(1); - numSteps->setMaximum(99999);//Hopefully big enough - numSteps->setToolTip("Enter the number of time steps"); - - startTime->setVisible(true); //Some visibility settings so that the default thing the user sees is a timeseries - stopTime->setVisible(true); - - startTime->setEnabled(false); //Disables timeseries options until the user does something - stopTime->setEnabled(false); - - numSteps->setVisible(true); //Same as above for time step options - numSteps->setEnabled(false); - - timeBoxLayout = new QHBoxLayout; //Layout setup - startLayout = new QVBoxLayout; - stopLayout = new QVBoxLayout; - stepLayout = new QVBoxLayout; - - startLabel = new QLabel(tr("Start Time")); //Labels for timeseries - stopLabel = new QLabel(tr("Stop Time")); - stepLabel = new QLabel(tr("Number of Time Steps")); - startLabel->setVisible(true); - stopLabel->setVisible(true); - stepLabel->setVisible(true); - - startLayout->addWidget(startLabel); //Labels are vertically stacked onto timeboxes and then horizontally set up - startLayout->addWidget(startTime); - - stopLayout->addWidget(stopLabel); - stopLayout->addWidget(stopTime); - - stepLayout->addWidget(stepLabel); - stepLayout->addWidget(numSteps); - - timeBoxLayout->addLayout(startLayout); //Add all the vertial labels to a horizontal grouping - timeBoxLayout->addLayout(stopLayout); - timeBoxLayout->addLayout(stepLayout); - -//------------------------------------------------- -// Add some new layouts -//------------------------------------------------- - vTreeLayout = new QVBoxLayout; //Adds everything to a vertical layout - - hDownloaderLayout = new QHBoxLayout; //Holds the label for the tree & download button - hDownloaderLayout->addWidget(treeLabel); //Adds label - hDownloaderLayout->addWidget(widgetButton); //adds Download Button to top of page - - vTreeLayout->addLayout(hDownloaderLayout); //adds hDownloaderLayout sublayout to the overal system - vTreeLayout->addWidget(treeView); //Add the big box - vTreeLayout->addLayout(ClippyToolLayout); //Add the refresh tool button - vTreeLayout->addWidget(timeLine); //Add a line to space it out - vTreeLayout->addLayout(timeBoxLayout); //Add the timeseries stuff -//#################################################### -//add in old format and other layout options # -//#################################################### - - buttonLayout = new QHBoxLayout; - buttonLayout->addWidget( writeStationFileButton ); - writeStationFileButton->setVisible( false ); //This was disabled in the original PI, leave it in for now, but the is now controlled by a config_option - buttonLayout->addWidget( writeStationKmlButton ); - buttonLayout->addStretch(); - - diurnalTimeLayout = new QHBoxLayout; //Create a layout for the old format diurnal options - diurnalTimeLayout->addWidget(diurnalLabel); //Add all the parts - diurnalTimeLayout->addWidget(dateTimeEdit,1); - diurnalTimeLayout->addWidget(oneStepTimeLabel); -// diurnalTimeLayout->addStretch(-1); - - pointLayout = new QVBoxLayout; - - pointLayout->addLayout(vTreeLayout); //add the above layout to the main window layouyt - - pointLayout->addLayout(diurnalTimeLayout); - - pointLayout->addStretch(); - pointLayout->addWidget(timeLine2); //Add another line - pointLayout->addLayout( buttonLayout ); //Add the kml button at the bottom - - pointGroupBox->setLayout( pointLayout ); //Set the layout to all of this - - ninjafoamConflictLabel = new QLabel(tr("The point initialization option is not currently available for the momentum solver.\n"), - this); - ninjafoamConflictLabel->setHidden(true); - - layout = new QVBoxLayout; - layout->addWidget( pointGroupBox ); - layout->addWidget(ninjafoamConflictLabel); - setLayout( layout ); //done - - checkForModelData();//On load check for model data to filter out directories and stuff we don't want - -//#################################################### -// Connect Signls to Slots # -//#################################################### - connect( widgetButton ,SIGNAL( clicked () ), this, - SLOT(openStationFetchWidget())); //Opens the Downloader Connector - connect(refreshToolButton, SIGNAL(clicked()), //Refreshes new Format, deselects files - this, SLOT(checkForModelData())); - connect(startTime,SIGNAL(dateTimeChanged(QDateTime)),this,SLOT(updateStartTime(QDateTime))); //update time into a vector from the timeboxes - connect(stopTime,SIGNAL(dateTimeChanged(QDateTime)),this,SLOT(updateStopTime(QDateTime))); - connect(stopTime,SIGNAL(dateTimeChanged(QDateTime)),this,SLOT(watchStopTime()));//Watch the times to make sure the user can't do crazy things - connect(startTime,SIGNAL(dateTimeChanged(QDateTime)),this,SLOT(watchStartTime())); - connect(treeView->selectionModel(), - SIGNAL(selectionChanged(const QItemSelection &,const QItemSelection &)), - this, SLOT(readStationFiles(const QItemSelection &,const QItemSelection &))); //Update the selected stations when a user clicks something - connect(numSteps,SIGNAL(valueChanged(int)),this,SLOT(setOneStepTimeseries())); //watch the number of steps incase it goes to 1 - stationFileName = ""; //Sets a default -} - -pointInput::~pointInput() -{ - -} - -/** - * @brief pointInput::readStationFiles - * Reads the files on disk that the user selects - * - * x is the previously selected data - * y is the new selected data - * - * These two are not used explicitly but are necessary to link up the - * model with this function, as they trigger the checking to occur - * - * How this function works: - * 1. get a list of the stations the user selects from the UI - * 2. get what file type it is from directStationTraffic - * a. this will also update the user on what the station type is - * 3. if all selected files are the same type, set the simulation type and tell mainwindow that they are good - * if they are not all the same type, warn the user and mainwindow and wait for the user to change something - * - * @param x - * @param y - */ -void pointInput::readStationFiles(const QItemSelection &x ,const QItemSelection &y) -{ - QModelIndexList idx = x.indexes(); //Don't need these, probably delete later - QModelIndexList idy = y.indexes(); - QModelIndexList idx0 = treeView->selectionModel()->selectedRows(); //Get the number of files selected - - std::vector selectedStations; //The good stations - std::vector finalTypes; //What type they are - CPLDebug("STATION_FETCH","========================================"); - CPLDebug("STATION_FETCH","NUMBER OF SELECTED STATIONS: %i",idx0.count()); - - for(int i=0;ifileInfo(idx0[i]).isDir()==true) //If its a directory, make it so that it can't be selected - { - CPLDebug("STATION_FETCH","IGNORING SELECTED DIRECTORY!"); - treeView->selectionModel()->select(idx0[i],QItemSelectionModel::Deselect | QItemSelectionModel::Rows);//Deselct entire row by calling ::Rows otherwise it looks messy - } - else //if its not a directory, add it to the list of available files - { - selectedStations.push_back(sfModel->fileInfo(idx0[i]).absoluteFilePath().toStdString()); - } - } - - for (int i=0;i setInt(finalTypes.begin(),finalTypes.end()); //This is a sanity check to see if the stations that we are reading are all the same type - std::vector vecInt(setInt.begin(),setInt.end()); - - CPLDebug("STATION_FETCH","Unique Data Types (bad if >1) %lu",vecInt.size()); - for(int j=0;j1) //Set the simulation type to -1 -> user selects different file types - { - simType = -1; - displayInformation(-1); //Display some information to the console - } - if (vecInt.size()==1) //Set the sim type to whatever it is - { - simType = vecInt[0]; - displayInformation(vecInt[0]); - } - else //we probably failed to open it because its a bad file - { - simType = -1; - displayInformation(-1); - } -} - -/** - * @brief Figures out what format belongs to what file based on the presence of date time - * data and header information - * Turns options on and off for the gui based on what the file formats are, such as - * enables timeseries when there is a timeseries. Suggests time series data ranges. - * prevents timeseries when there is no way it is a timeseries - * * * - * Possible options to be returned from directStationTraffic: - * a. 0 : OLD FORMAT <-1 Step - * b. 1 : NEW FORMAT, Time Series <- Multiple Steps - * c. 2 : NEW FORMAT, NO Time Series <- 1 Step - * d. -1 : Something bad happened, not sure what at this point - * @param xFileName <- the file name of the wxStation to be read from disk. - * @return see above - */ -int pointInput::directStationTraffic(const char* xFileName) -{ - //Get the header version from a wxStation function that does this for us - int stationHeader = wxStation::GetHeaderVersion(xFileName); - CPLDebug("STATION_FETCH","HEADER TYPE: %i",stationHeader); - int instant = 0; - std::string idx3; - stringstream ssidx; - - if(stationHeader!=1) //Station header is different than what we return - { - //Determine whether it is a timeseries or not... - OGRDataSourceH hDS; - OGRLayer *poLayer; - OGRFeature *poFeature; - OGRFeatureDefn *poFeatureDefn; - OGRFieldDefn *poFieldDefn; - OGRLayerH hLayer; - - hDS = OGROpen( xFileName, FALSE, NULL ); - - if(hDS == NULL) - { - writeToConsole("Cannot open station file!"); - return -1; //very bad! - } - - poLayer = (OGRLayer*)OGR_DS_GetLayer( hDS, 0 ); - hLayer=OGR_DS_GetLayer(hDS,0); - OGR_L_ResetReading(hLayer); - poLayer->ResetReading(); - - GIntBig iBig = 1; - GIntBig idx0 = poLayer->GetFeatureCount(); - GIntBig idx1 = idx0-iBig; - GIntBig idx2; - - idx2 = poLayer->GetFeatureCount(); - - CPLDebug("STATION_FETCH","Number of Time Entries: %llu",idx2); //How many lines are on disk - QString qFileName = QFileInfo(xFileName).fileName(); - writeToConsole(QString(qFileName+" has: "+QString::number(idx2)+" time entries")); //tell the user in the console - const char* emptyChair; //Muy Importante! - - poFeature = poLayer->GetFeature(iBig); - if (poFeature==NULL) - { - writeToConsole("No Stations Found in file!"); - return -1; //If there are no stations in the csv! - } - // startTime = poFeature->GetFieldAsString(15); - std::string start_datetime(poFeature->GetFieldAsString(15)); - poFeature = poLayer->GetFeature(idx2); - std::string stop_datetime(poFeature->GetFieldAsString(15)); - - CPLDebug("STATION_FETCH","STATION START TIME: %s",start_datetime.c_str()); - CPLDebug("STATION_FETCH","STATION END TIME: %s",stop_datetime.c_str()); - - if (start_datetime.empty()==true && stop_datetime.empty()==true) - { - //Means that there is not a time series - CPLDebug("STATION_FETCH", "File cannot be used for Time Series"); - instant = 1; - } - if (start_datetime.empty()==false && stop_datetime.empty()==false) //Definately some sort of time series - { - CPLDebug("STATION_FETCH","File can be used for Times Series"); - CPLDebug("STATION_FETCH","Suggesting Potentially Reasonable Time Series Parameters..."); - - readStationTime(start_datetime,stop_datetime,idx2); //Turns the Start and Stop times into local timess...... - ssidx<setEnabled(false); //Hide these things because its an old format run - stopTime->setEnabled(false); - numSteps->setEnabled(false); - - //Try flipping the UI - startLabel->setVisible(false); //Hide all the timesries stuff - stopLabel->setVisible(false); - stepLabel->setVisible(false); - - startTime->setVisible(false); - stopTime->setVisible(false); - numSteps->setVisible(false); - - dateTimeEdit->setVisible(true); //show the date time box to set the sim time - diurnalLabel->setVisible(true); - oneStepTimeLabel->setVisible(false); // hide the 1 step time box thing for instant==1 - - //Update Diurnal Time - if (isDiurnalChecked==true) - { - dateTimeEdit->setEnabled(true); //enable the diurnal Box - updateSingleTime(dateTimeEdit->dateTime()); //set the time from the diurnal box - } - - - return 0; - } - if (stationHeader == 2 && instant == 0) - { - //new Foramt w/ Time Series - //Turn on Several options for controlling time series in the GUI - enableTimeseries=true; - startTime->setEnabled(true); - stopTime->setEnabled(true); - numSteps->setEnabled(true); - updateStartTime(startTime->dateTime()); - updateStopTime(stopTime->dateTime()); - - //try flipping the UI - startLabel->setVisible(true); - stopLabel->setVisible(true); - stepLabel->setVisible(true); - - startTime->setVisible(true); - stopTime->setVisible(true); - numSteps->setVisible(true); - - dateTimeEdit->setVisible(false); //hide the single step stuff - diurnalLabel->setVisible(false); - oneStepTimeLabel->setVisible(false); - return 1; - } - if (stationHeader == 2 && instant == 1) - { - //new Format no Time Series - //Prevent users from using time series with 1 step - enableTimeseries=false; - startTime->setEnabled(false); - stopTime->setEnabled(false); - numSteps->setEnabled(false); - - //Try flipping the UI - startLabel->setVisible(false); - stopLabel->setVisible(false); - stepLabel->setVisible(false); - - startTime->setVisible(false); - stopTime->setVisible(false); - numSteps->setVisible(false); - - dateTimeEdit->setVisible(false); - diurnalLabel->setVisible(false); - dateTimeEdit->setEnabled(false); - - const char *optChangeTime = CPLGetConfigOption("CHANGE_DATE_TIME","FALSE"); //Allow the user the change the datetime via config option - if(optChangeTime!="FALSE") - { - QString time_format = "yyyy-MM-ddTHH:mm:ss"; - QString optXTime = QString::fromAscii(optChangeTime); - QDateTime opt_time_obj = QDateTime::fromString(optXTime,time_format); - updateSingleTime(opt_time_obj); - QString oneStepText = "Simulation time set to: "+optXTime; - oneStepTimeLabel->setText(oneStepText); - oneStepTimeLabel->setVisible(true); // to this label in the GUI - } - else - { - //Reads the sim time from the file the user provides; - QDateTime singleRunTime = readNinjaNowName(xFileName); //Read in the date time - updateSingleTime(singleRunTime); //update it globally - QString runTimeText = singleRunTime.toString(); //Print it out for the user - QString oneStepText = "Simulation time set to: "+runTimeText; - oneStepTimeLabel->setText(oneStepText); - oneStepTimeLabel->setVisible(true); // to this label in the GUI - } - return 2; - - } - if (stationHeader == 3) - { - //Invalid header type for GUI run... - return -1; - } - if (stationHeader == 4) - { - //Invalid header type for GUI run... - return -1; - } - else - { - //Something wrong with the station... - return -1; - } -} -/** - * @brief pointInput::readStationTime: Takes in times read from disk, turns them into - * Qt datetime objects, then updates the gui with suggested ranges of times based on available disk data - * tries to stop users from picking frivolous time ranges (maybe). Also suggests a number of timesteps based on - * available data. - * @param start_time - * @param stop_time - * @param xSteps - */ -void pointInput::readStationTime(string start_time, string stop_time, int xSteps) -{ - QString q_time_format = "yyyy-MM-ddTHH:mm:ssZ"; - QString start_utcX = QString::fromStdString(start_time); - QString end_utcX = QString::fromStdString(stop_time); - - QDateTime start_qat = QDateTime::fromString(start_utcX,q_time_format); - QDateTime end_qat = QDateTime::fromString(end_utcX,q_time_format); - - start_qat.setTimeSpec(Qt::UTC); - end_qat.setTimeSpec(Qt::UTC); //Set the Time to UTC - - - //// convert the input start and stop times into boost local date time objects, so convert from UTC time to local time - - blt::time_zone_ptr tz; // Initialize time zone - tz = globalTimeZoneDB.time_zone_from_region(tzString.toStdString()); // Get time zone from database - - // parse the start time into date and time parts - int start_year = start_qat.date().year(); - int start_month = start_qat.date().month(); - int start_day = start_qat.date().day(); - int start_hour = start_qat.time().hour(); - int start_minute = start_qat.time().minute(); - int start_sec = start_qat.time().second(); - - // parse the start time into date and time parts - int stop_year = end_qat.date().year(); - int stop_month = end_qat.date().month(); - int stop_day = end_qat.date().day(); - int stop_hour = end_qat.time().hour(); - int stop_minute = end_qat.time().minute(); - int stop_sec = end_qat.time().second(); - - // make intermediate start and stop dates for generating ptime objects - bg::date startTime_date(start_year,start_month,start_day); - bg::date stopTime_date(stop_year,stop_month,stop_day); - bpt::time_duration startTime_duration(start_hour,start_minute,start_sec,0); - bpt::time_duration stopTime_duration(stop_hour,stop_minute,stop_sec,0); - - // these are UTC times - bpt::ptime startTime_ptime(startTime_date,startTime_duration); - bpt::ptime stopTime_ptime(stopTime_date,stopTime_duration); - - // this constructor generates local times from UTC times - blt::local_date_time boost_local_startTime( startTime_ptime, tz ); - blt::local_date_time boost_local_stopTime( stopTime_ptime, tz ); - - - //// convert the boost local date time objects into QDateTime objects - - std::string os_time_format = "%Y-%m-%dT%H:%M:%SZ"; // this is the ostringstream format string that replicates the above QDateTime format string - - blt::local_time_facet* facet; - facet = new blt::local_time_facet(); - - facet->format(os_time_format.c_str()); - - - // calculate the start_time QDate - std::ostringstream os; - os.imbue(std::locale(std::locale::classic(), facet)); - os << boost_local_startTime; - QString loc_start_time_qStr = QString::fromStdString( os.str() ); - os.str(""); // reset for parsing the next time - os.clear(); - QDateTime loc_start_time = QDateTime::fromString(loc_start_time_qStr,q_time_format); - - // calculate the end_time QDate - os.imbue(std::locale(std::locale::classic(), facet)); - os << boost_local_stopTime; - QString loc_end_time_qStr = QString::fromStdString( os.str() ); - os.str(""); // reset for parsing the next time - os.clear(); - QDateTime loc_end_time = QDateTime::fromString(loc_end_time_qStr,q_time_format); - - CPLDebug("STATION_FETCH","qdate start_local = %s",loc_start_time.toString(q_time_format).toStdString().c_str()); - CPLDebug("STATION_FETCH","qdate end_local = %s",loc_end_time.toString(q_time_format).toStdString().c_str()); - - - //// now use the final local time QDate start and stop times - writeToConsole("Start Time (local): "+loc_start_time.toString()); //Tell console what the - writeToConsole("Stop Time (local): "+loc_end_time.toString()); //Local time is - - startTime->setDateTime(loc_start_time); - stopTime->setDateTime(loc_end_time); //Updates date time based on disk information - - updateTimeSteps(); //Calculate how many steps we can do between the start and stop time -} -/** - * @brief pointInput::displayInformation - * Displays important stuff to the user based on what they select - * Warns them if they select 2 types of files that are incompatible. - * @param dataType - */ -void pointInput::displayInformation(int dataType) -{ - CPLDebug("STATION_FETCH","Data Format: %i",dataType); - if(dataType == 0) - { - clippit->setText("Run Type: Old Format"); - pointGo=true; - if (isDiurnalChecked==true) - { - dateTimeEdit->setEnabled(true); - } - if (stationFileList.size()>1) - { - clippit->setText("Too many stations selected for data type"); - } - } - if(dataType == 1) - { - clippit->setText("Run Type: Time Series"); - pointGo=true; - if (dateTimeEdit->isEnabled()) - { - dateTimeEdit->setEnabled(false); - } - } - if(dataType == 2) - { - clippit->setText("Run Type: Single Step"); - pointGo=true; - } - if (dataType == -1 && stationFileList.size()==0) //Special Case - { - clippit->setText("No Stations Selected..."); - pointGo=false; - } - if (dataType == -1 && stationFileList.size()==1) //Case of 1 file that is crap - { - clippit->setText("No Valid Data detected in file..."); - - pointGo=false; - } - if (dataType==-1 && stationFileList.size()>=2) - { - clippit->setText("MULTIPLE TYPES SELECTED, CANNOT PROCEED!"); - - pointGo=false; - } -// else if(dataType == -1) -// { -// clippit->setText("MULTIPLE TYPES SELECTED, CANNOT PROCEED!"); -// pointGo=false; -// } -} -/** - * @brief pointInput::readNinjaNowName - * @param fileName - * This is for current step new format runs - * we need time if the user turnsl on diurnal/stability input - * Read the Time from the date created attribute attached to the file - * - * @return - */ -QDateTime pointInput::readNinjaNowName(const char *fileName) -{ - CPLDebug("STATION_FETCH","Reading 1 step Station start Time"); - QDateTime qxDate = QFileInfo(fileName).created(); //Get when the file was created because that is when the simulation time is - return qxDate; -} -/** - * @brief pointInput::setOneStepTimeseries - * If one step is set, diable stop time - * and only use start time - */ -void pointInput::setOneStepTimeseries() -{ - if(numSteps->value()==1) - { - CPLDebug("STATION_FETCH","One Step Set for Timeseries, greying out stop time!"); - stopTime->setEnabled(false); - stopTime->setToolTip("Stop time is disabled for 1 time step simulations"); - } - else - { - stopTime->setEnabled(true); - stopTime->setToolTip("Enter the simulation stop time"); - } -} - - -/** - * @brief pointInput::setWxStationFormat - * sets the format of the wxStation - * not used right now - * @param format - */ -void pointInput::setWxStationFormat(int format) -{ - wxStationFormat = format; -} - -void pointInput::selChanged(const QItemSelection &x, const QItemSelection &y) //Generic test function, delete once everything is good -{ - CPLDebug("STATION_FETCH","TEST"); -} - -void pointInput::openMainWindow() //This is for opening and closing the station-fetch widget -{ - this->setEnabled(true); -} - -/** Allows mainwindow to update the timezone from the DEM or as provided by the user - * @brief pointInput::updateTz - * @param tz - */ - -void pointInput::updateTz(QString tz) -{ - tzString = tz; -} - -/** Pairs start and stop times to what the stationFetchWidget does. - * @brief pointInput::pairStartTime - * @param xDate - */ -void pointInput::pairStartTime(QDateTime xDate) //These functions take the start and stop time from the widget -//and populate the timeseries objects in the gUI -{ - startTime->setDateTime(xDate); -} -void pointInput::pairStopTime(QDateTime xDate) -{ - stopTime->setDateTime(xDate); -} -/** Groups all the different timseries parts to be enabled/disabled at the same time based on - * user options - * @brief pointInput::pairTimeSeries - * @param curIndex - */ -void pointInput::pairTimeSeries(int curIndex) -{ - if(curIndex==0) - { - enableTimeseries=true; - startTime->setEnabled(false); - stopTime->setEnabled(false); - numSteps->setEnabled(false); - } - if(curIndex==1) - { - enableTimeseries=true; - startTime->setEnabled(true); - stopTime->setEnabled(true); - numSteps->setEnabled(true); - } -} -/** - * @brief pointInput::watchStopTime - * corrects user selecting stop time behind start time! - */ -void pointInput::watchStopTime() //Stop time cannot be farther in the future than the stop time -{ - if(stopTime->dateTime()dateTime()) - { - writeToConsole("Start Time is greater than Stop Time!"); - CPLDebug("STATION_FETCH","START TIME > END TIME, FIXING START TIME!"); - startTime->setDateTime(stopTime->dateTime().addSecs(-3600)); - } -} -/** - * @brief pointInput::watchStartTime - * corrects the stop time if the user picks a start time farther in the future than the stop - * time - */ -void pointInput::watchStartTime() //Stop time cannot be farther in the future than the stop time -{ - if(stopTime->dateTime()dateTime()) - { - writeToConsole("Start Time is greater than Stop Time!"); - CPLDebug("STATION_FETCH","START TIME > END TIME, FIXING STOP TIME!"); - stopTime->setDateTime(startTime->dateTime().addSecs(3600)); - } -} -/** Updates the timeseries start time based on user requests - * @brief pointInput::updateStartTime - * @param xDate - */ -void pointInput::updateStartTime(QDateTime xDate) -{ - startSeries.clear(); //delete whatever is stored in the vector - int year,month,day,hour,minute; - year = xDate.date().year(); - month = xDate.date().month(); - day = xDate.date().day(); - hour = xDate.time().hour(); - minute = xDate.time().minute(); - - updateTimeSteps(); //when we change the time, update the math on the time steps - CPLDebug("STATION_FETCH","UPDATED START TIME: %i %i %i %i %i",year,month,day,hour,minute); - - startSeries.push_back(year); - startSeries.push_back(month); - startSeries.push_back(day); - startSeries.push_back(hour); - startSeries.push_back(minute); -} -/** Updates the time for stopping the simulation based on user requests - * @brief pointInput::updateStopTime - * @param xDate - */ -void pointInput::updateStopTime(QDateTime xDate) -{ - endSeries.clear(); //delete whatever is stored in the vector - int year,month,day,hour,minute; - year = xDate.date().year(); - month = xDate.date().month(); - day = xDate.date().day(); - hour = xDate.time().hour(); - minute = xDate.time().minute(); - - updateTimeSteps(); //when we change the time, update the math on the time steps - - CPLDebug("STATION_FETCH","UPDATED STOP TIME: %i %i %i %i %i",year,month,day,hour,minute); - - endSeries.push_back(year); - endSeries.push_back(month); - endSeries.push_back(day); - endSeries.push_back(hour); - endSeries.push_back(minute); -} -/** - * @brief pointInput::updateSingleTime - * @param xDate - * - * For single step runs, set the simulation time based on the read station file time, - * see also: - * readNinjaNowName() - * - */ -void pointInput::updateSingleTime(QDateTime xDate) -{ - int year,month,day,hour,minute; - year = xDate.date().year(); - month = xDate.date().month(); - day = xDate.date().day(); - hour = xDate.time().hour(); - minute = xDate.time().minute(); - - CPLDebug("STATION_FETCH","UPDATED SINGLE STEP TIME: %i %i %i %i %i",year,month,day,hour,minute); - - diurnalTimeVec.push_back(year); - diurnalTimeVec.push_back(month); - diurnalTimeVec.push_back(day); - diurnalTimeVec.push_back(hour); - diurnalTimeVec.push_back(minute); - -} -/** - * @brief pointInput::updateTimeSteps - * Suggest a number of time steps based on the - * start and stop time - * - * this function sets the number of time steps to the number of - * hours between the start and stop time - * - * if its less than 2 hours, - * suggest two steps - * - * the user can then change this if they really want - * - */ -void pointInput::updateTimeSteps() -{ - CPLDebug("STATION_FETCH","Updating Suggested Time steps...."); - int u_start = startTime->dateTime().toTime_t(); - int u_stop = stopTime->dateTime().toTime_t(); - - if ( u_start == u_stop ) { - - numSteps->setValue(1); - - } else { - - int u_diff = (u_stop - u_start)/(3600); //calculate the number of hours between the start and stop times - - if(u_diff<=2) //if its less than 2 hours, make it 2 - { - u_diff = 2; - } - - numSteps->setValue(u_diff); - - } -} -/** - * @brief pointInput::openStationFetchWidget - * Opens the downloader widget to download station files - */ -void pointInput::openStationFetchWidget() -{ - xWidget = new stationFetchWidget(); - QSignalMapper *signalMapper; - connect(xWidget, SIGNAL(exitWidget()),this, SLOT(openMainWindow())); //Launches Widget Connector - connect(xWidget, SIGNAL(destroyed()),this,SLOT(openMainWindow())); //Some sort of deconstructor thing - this->setEnabled(false); //disable the main window - xWidget->setInputFile(demFileName); //give the widget the dem file - xWidget->updatetz(tzString); //give the widget the time zone as a string - connect(xWidget, SIGNAL(exitWidget()),this, SLOT(checkForModelData())); //Launches Widget Connector - connect(xWidget->startEdit,SIGNAL(dateTimeChanged(const QDateTime)),this,SLOT(pairStartTime(const QDateTime))); //connect the various time boxes to eachother - connect(xWidget->endEdit,SIGNAL(dateTimeChanged(const QDateTime)),this,SLOT(pairStopTime(const QDateTime))); - connect(xWidget->timeLoc,SIGNAL(currentIndexChanged(int)),this,SLOT(pairTimeSeries(int))); //Connects What the user does in the widget - //to what the timeseries checkbox does -} -/** Allows mainwindow to update pointInput with changes to the DEM - * @brief pointInput::setInputFile - * @param file - */ -void pointInput::setInputFile( QString file ) -{ - demFileName = file; - cwd = QFileInfo(file).absolutePath(); -} -/** Allows mainWindow to update pointInput with changes in diurnal/stability options - * @brief pointInput::setDiurnalParam - * @param diurnalCheck - */ -void pointInput::setDiurnalParam(bool diurnalCheck) -{ - isDiurnalChecked = diurnalCheck;//Note that this works for stability too - CPLDebug("STATION_FETCH","DIURNAL/STABILITY STATUS: %i",isDiurnalChecked); -} - - -/** - * *@brief pointInput::checkForModelData - * Applies filters to the tree - * Also clears selection when the user clicks it - */ -void pointInput::checkForModelData() -{ - stationFileList.clear(); //Clear the list - treeView->selectionModel()->clear(); //Clear the models selections - pointGo = false; //Set the pointInput bool to false just to be extra explicit - QDir wd(cwd); - QStringList filters; - filters<<"*.csv"; //Only show CSV - filters<<"WXSTATIONS-*"; //Add downloadable directories to filters - sfModel->setNameFilters(filters); - sfModel->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); //QDir::Dir specifies to add filters to directories - treeView->setRootIndex(sfModel->index(wd.absolutePath())); - treeView->resizeColumnToContents(0); -} diff --git a/src/gui/pointInput.h b/src/gui/pointInput.h deleted file mode 100644 index b920809ee..000000000 --- a/src/gui/pointInput.h +++ /dev/null @@ -1,187 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Point initialization input. - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef POINT_INPUT_H -#define POINT_INPUT_H - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "latLonWidget.h" -#include "wxStation.h" -#include "ninjaUnits.h" -#include "stationFetchWidget.h" -#include - -#include -#include - -#include - -#include - -class pointInput : public QWidget -{ - Q_OBJECT - - public: - - pointInput( QWidget *parent = 0 ); - ~pointInput(); - - QString demFileName; - QString stationFileName; - std::vector stationFileList; - std::vector stationFileTypes; - int simType; - bool pointGo; - int isDiurnalChecked; - bool enableTimeseries; - - QHBoxLayout *diurnalTimeLayout; - QDateTimeEdit *dateTimeEdit; - QLabel *diurnalLabel; - QLabel *oneStepTimeLabel; - - QCheckBox *writeStationFileButton; - QCheckBox *writeStationKmlButton; - QToolButton *widgetButton; - - QGroupBox *pointGroupBox; - - QHBoxLayout *buttonLayout; - QVBoxLayout *pointLayout; - QVBoxLayout *layout; - QLabel *ninjafoamConflictLabel; - - //TreeBox Stuff - - QLabel *treeLabel; - - QTreeView *treeView; - QVBoxLayout *vTreeLayout; - QHBoxLayout *hDownloaderLayout; //Put the downloader up near the top of the page - QWidget *newForm; - - //Station Fetch Directory Stuff - - QDir cwd; - QDirModel *sfModel; - //Handlers - QHBoxLayout *ClippyToolLayout; - QToolButton *refreshToolButton; - QLabel *clippit; //displays vital information - - QFrame *timeLine; //Creates a fancy line to seprate things out - QFrame *timeLine2; //Creates another fancy line... - - std::vector vx; //For file names - - //endDirectoryChecking - //Time series stuff - QDateTimeEdit *startTime; - QDateTimeEdit *stopTime; - QHBoxLayout *timeBoxLayout; - QSpinBox *numSteps; - - QVBoxLayout *startLayout; - QVBoxLayout *stopLayout; - QVBoxLayout *stepLayout; - - QLabel *startLabel; - QLabel *stopLabel; - QLabel *stepLabel; - - std::vector startSeries; - std::vector endSeries; //Global Storage for start and stop times - - std::vector diurnalTimeVec; - - //End Timeseries stuff - - stationFetchWidget *xWidget; - QString tzString; - - public slots: - void updateTz(QString tz); - void checkForModelData(); - int directStationTraffic(const char* xFileName); - void readStationTime(std::string start_time, std::string stop_time, int xSteps); - static void setWxStationFormat(int format); //I don't Think I need this anymore (delete later) - void displayInformation(int dataType); - QDateTime readNinjaNowName(const char* fileName); - void setOneStepTimeseries(); - - private slots: - void readStationFiles(const QItemSelection &x ,const QItemSelection &y); - void selChanged(const QItemSelection &x ,const QItemSelection &y); //Test Function - void setInputFile( QString file ); - void setDiurnalParam(bool diurnalCheck); - void openMainWindow(); - void openStationFetchWidget(); - - void pairStartTime(QDateTime xDate); - void pairStopTime(QDateTime xDate); - void pairTimeSeries(int curIndex); - void updateTimeSteps(); - - void updateSingleTime(QDateTime xDate); - void updateStartTime(QDateTime xDate); - void updateStopTime(QDateTime xDate); - void watchStopTime(); - void watchStartTime(); - - signals: - void writeToConsole( QString message ); - void stationFileChanged(); - -friend class stationFetchWidget; -}; - -#endif /* POINT_INPUT_H */ diff --git a/src/gui/qt6/provider.cpp b/src/gui/provider.cpp similarity index 96% rename from src/gui/qt6/provider.cpp rename to src/gui/provider.cpp index 8e2ab48ac..846201a20 100755 --- a/src/gui/qt6/provider.cpp +++ b/src/gui/provider.cpp @@ -1,6 +1,6 @@ #include "provider.h" #include "modeldata.h" -#include "../../ninja/windninja.h" +#include "../ninja/windninja.h" #include #include diff --git a/src/gui/qt6/provider.h b/src/gui/provider.h similarity index 100% rename from src/gui/qt6/provider.h rename to src/gui/provider.h diff --git a/src/gui/qt6/.gitignore b/src/gui/qt6/.gitignore deleted file mode 100644 index 4f4423358..000000000 --- a/src/gui/qt6/.gitignore +++ /dev/null @@ -1,78 +0,0 @@ -# This file is used to ignore files which are generated -# ---------------------------------------------------------------------------- - -*~ -*.autosave -*.a -*.core -*.moc -*.o -*.obj -*.orig -*.rej -*.so -*.so.* -*_pch.h.cpp -*_resource.rc -*.qm -.#* -*.*# -core -!core/ -tags -.DS_Store -.directory -*.debug -Makefile* -*.prl -*.app -moc_*.cpp -ui_*.h -qrc_*.cpp -Thumbs.db -*.res -*.rc -/.qmake.cache -/.qmake.stash - -# qtcreator generated files -*.pro.user* -*.txt.user* -*:Zone* - -# xemacs temporary files -*.flc - -# Vim temporary files -.*.swp - -# Build -/build/ - -# Visual Studio generated files -*.ib_pdb_index -*.idb -*.ilk -*.pdb -*.sln -*.suo -*.vcproj -*vcproj.*.*.user -*.ncb -*.sdf -*.opensdf -*.vcxproj -*vcxproj.* - -# MinGW generated files -*.Debug -*.Release - -# Python byte code -*.pyc - -# Binaries -# -------- -*.dll -*.exe - diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt deleted file mode 100755 index c750dfafe..000000000 --- a/src/gui/qt6/CMakeLists.txt +++ /dev/null @@ -1,85 +0,0 @@ -cmake_minimum_required(VERSION 3.16) - -project(qt6_application VERSION 0.1 LANGUAGES CXX) - -set(CMAKE_AUTOUIC ON) -set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -find_package(QT NAMES Qt6 REQUIRED COMPONENTS Widgets) -find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) -find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets WebEngineWidgets) - -set(PROJECT_SOURCES - main.cpp - mainwindow.cpp - mainwindow.h - mainwindow.ui -) - -if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) - qt_add_executable(qt6_application - MANUAL_FINALIZATION - ${PROJECT_SOURCES} - ${CMAKE_SOURCE_DIR}/wn-resources.qrc - appstate.h - provider.cpp - modeldata.h provider.h - controller.h - controller.cpp - - ) -# Define target properties for Android with Qt 6 as: -# set_property(TARGET qt6_application APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR -# ${CMAKE_CURRENT_SOURCE_DIR}/android) -# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation -else() - if(ANDROID) - add_library(qt6_application SHARED - ${PROJECT_SOURCES} - ) -# Define properties for Android with Qt 5 after find_package() calls as: -# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") - else() - add_executable(qt6_application - ${PROJECT_SOURCES} - ) - endif() -endif() - -target_include_directories(qt6_application PRIVATE /usr/local/include) - -add_dependencies(qt6_application ninja) - -add_definitions(-DMAP_PATH="${CMAKE_SOURCE_DIR}/data/map.html") - - -target_link_libraries(qt6_application PRIVATE Qt${QT_VERSION_MAJOR}::Widgets PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets PRIVATE ninja) - -# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. -# If you are developing for iOS or macOS you should consider setting an -# explicit, fixed bundle identifier manually though. -if(${QT_VERSION} VERSION_LESS 6.1.0) - set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.qt6_application) -endif() -set_target_properties(qt6_application PROPERTIES - ${BUNDLE_ID_OPTION} - MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} - MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} - MACOSX_BUNDLE TRUE - WIN32_EXECUTABLE TRUE -) - -include(GNUInstallDirs) -install(TARGETS qt6_application - BUNDLE DESTINATION . - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} -) - -if(QT_VERSION_MAJOR EQUAL 6) - qt_finalize_executable(qt6_application) -endif() diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui deleted file mode 100644 index 6296d9b8a..000000000 --- a/src/gui/qt6/mainwindow.ui +++ /dev/null @@ -1,3242 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 1081 - 638 - - - - - 0 - 0 - - - - - 490 - 500 - - - - - 1000 - 1000 - - - - - - - - - 255 - 255 - 255 - - - - - - - 60 - 60 - 60 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 60 - 60 - 60 - - - - - - - 60 - 60 - 60 - - - - - - - - - 255 - 255 - 255 - - - - - - - 60 - 60 - 60 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 60 - 60 - 60 - - - - - - - 60 - 60 - 60 - - - - - - - - - 60 - 60 - 60 - - - - - - - 60 - 60 - 60 - - - - - - - 60 - 60 - 60 - - - - - - - - WindNinja - - - - - - - true - - - - 0 - 0 - - - - - 0 - 0 - - - - false - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 200 - 0 - - - - - 225 - 0 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - QFrame::Shape::NoFrame - - - Qt::Orientation::Horizontal - - - 15 - - - false - - - - - 0 - - - QLayout::SizeConstraint::SetMinimumSize - - - 5 - - - 10 - - - 5 - - - 0 - - - - - - 0 - 0 - - - - - 0 - 250 - - - - - 600 - 250 - - - - - - - - - 60 - 60 - 60 - - - - - - - - - 60 - 60 - 60 - - - - - - - - - - 12 - - - - PointingHandCursor - - - - - - QFrame::Shape::StyledPanel - - - 0 - - - false - - - true - - - false - - - true - - - true - - - false - - - - Configuration - - - - - Solver Methodology - - - ItemIsSelectable|ItemIsEnabled - - - - Conservation of Mass - - - ItemIsSelectable|ItemIsEnabled - - - - - Conservation of Mass and Momentum - - - ItemIsSelectable|ItemIsEnabled - - - - - - Inputs - - - ItemIsSelectable|ItemIsEnabled - - - - Surface Input - - - ItemIsSelectable|ItemIsEnabled - - - - - Diurnal Input - - - ItemIsSelectable|ItemIsEnabled - - - - - Stability Input - - - ItemIsSelectable|ItemIsEnabled - - - - - Wind Input - - - ItemIsSelectable|ItemIsEnabled - - - - Domain Average Wind - - - ItemIsSelectable|ItemIsEnabled - - - - - Point Initialization - - - ItemIsSelectable|ItemIsEnabled - - - - - Weather Model - - - ItemIsSelectable|ItemIsEnabled - - - - - - - Solver - - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - - 0 - 0 - - - - - 0 - 250 - - - - - 600 - 16777215 - - - - - 300 - 0 - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Sunken - - - 5 - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 10 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';">A solution requires the selection of one (1) Solver Methodology:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';"> 1. Conservation of Mass (faster, less accurate)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';"> 2. Conservation of Mass and Momentum (slower, more accurate)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';">Select either option for more detail.</span></p></body></html> - - - Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse - - - - - - - - - 0 - 0 - - - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - - - - 0 - - - 5 - - - 5 - - - 5 - - - 5 - - - - - PointingHandCursor - - - Use Conservation of Mass - - - false - - - - - - - - - - - 8 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">This is the native WindNinja solver. It solves a conservation of mass equation, but not a conservation of momentum equation. This solver is fast-running, but may give less accurate wind predictions in regions where momentum effects are important, for example on the lee side of terrain obstacles.</span></p></body></html> - - - Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - - - - 0 - - - 5 - - - 5 - - - 5 - - - 5 - - - - - PointingHandCursor - - - Use Conservation of Mass and Momentum - - - - - - - - - - - 8 - - - - QFrame::Shape::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">This solver conserves both mass and momentum. It is based on the OpenFOAM CFD toolbox. This solver should give more accurate wind predictions in regions where momentum effects are important, such as on the lee side of terrain obstacles. Because this solver is more computationally intensive than the conservation of mass solver, simulation times will be longer. Typical simulation times for this solver range from 10-30 minutes, but will depend on your domain, resolution, and computational resources. Note that some options (e.g., point initialization and non-neutral stability) are not available for this solver at this time. We plan to make these options available in future releases.</span></p></body></html> - - - Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse - - - - - - - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 8 - - - - QFrame::Shape::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">This is where input parameters are defined. Analysis requires:</span> </p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> </p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> <span style=" font-family:'Sans Serif'; font-size:10pt;">1. Surface Input (.tif) file:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:30px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:10pt;">- Can be uploaded from a computer or downloaded using the map on the right</span> </p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:30px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:10pt;">- Optional diurnal and stability analysis</span> </p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> <span style=" font-family:'Sans Serif'; font-size:10pt;">2. Wind Input:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:30px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:10pt;">- Requires one (1) of the three (3) options available: Domain Average Wind, Point Initialization, or Weather Model</span></p></body></html> - - - Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - QLayout::SizeConstraint::SetMinAndMaxSize - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Elevation Input File - - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 0 - 0 - - - - true - - - *.tif - - - - - - - PointingHandCursor - - - Open File - - - - - - - PointingHandCursor - - - Import From Map - - - - - - - - WORLD SRTM (30m) - - - - - WORLD GMTED (250m) - - - - - Landscape File - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Vegetation - - - - - - - 0 - 0 - - - - PointingHandCursor - - - - Grass - - - - - Brush - - - - - Trees - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Mesh Resolution - - - - - - - 0 - 0 - - - - PointingHandCursor - - - - Coarse - - - - - Medium - - - - - Fine - - - - - Custom - - - - - - - - false - - - - 0 - 0 - - - - PointingHandCursor - - - false - - - 0.010000000000000 - - - 10000.000000000000000 - - - 200.000000000000000 - - - - - - - true - - - - 0 - 0 - - - - PointingHandCursor - - - Meters - - - true - - - - - - - true - - - - 0 - 0 - - - - PointingHandCursor - - - Feet - - - false - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - Time Zone - - - - - - - 0 - 0 - - - - - 150 - 0 - - - - - 150 - 16777215 - - - - PointingHandCursor - - - - - - -1 - - - 10 - - - QComboBox::SizeAdjustPolicy::AdjustToContentsOnFirstShow - - - - - - - - 0 - 0 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Name: Mountain Standard Time</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Name: Mountain Daylight Time</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Offset from UTC: -07:00:00</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Offset from UTC: -06:00:00</p></body></html> - - - Qt::TextInteractionFlag::NoTextInteraction - - - - - - - - 0 - 0 - - - - PointingHandCursor - - - Display Time Zone Details - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - PointingHandCursor - - - Show All Zones - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - - - - 0 - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 0 - 0 - - - - - - - - 0 - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 0 - 0 - - - - PointingHandCursor - - - Use Diurnal Wind - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - 0 - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - - - - 0 - - - 5 - - - 5 - - - 5 - - - 5 - - - - - PointingHandCursor - - - Use Stability - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - - 6 - - - 5 - - - 5 - - - 5 - - - 5 - - - - - 6 - - - QLayout::SizeConstraint::SetMinAndMaxSize - - - 0 - - - - - QLayout::SizeConstraint::SetDefaultConstraint - - - 0 - - - - - - 0 - 0 - - - - - 0 - 5 - - - - PointingHandCursor - - - Domain Average Wind - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - 10 - - - - - - - - 0 - 100 - - - - Input Wind Height - - - - - - PointingHandCursor - - - - 20ft-US - - - - - 10m-SI - - - - - Custom - - - - - - - - false - - - PointingHandCursor - - - 0.010000000000000 - - - 20.000000000000000 - - - - - - - false - - - PointingHandCursor - - - Feet - - - true - - - - - - - false - - - PointingHandCursor - - - Meters - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 90 - 0 - - - - - 90 - 16777215 - - - - Table Units: - - - false - - - true - - - - - - - - 0 - 0 - - - - - 60 - 0 - - - - - 60 - 16777215 - - - - PointingHandCursor - - - - mph - - - - - m/s - - - - - kph - - - - - kts - - - - - - - - - 0 - 0 - - - - - 40 - 0 - - - - - 40 - 16777215 - - - - PointingHandCursor - - - Qt::LayoutDirection::LeftToRight - - - - °F - - - - - °C - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - PointingHandCursor - - - Clear Table - - - - - - - - - QLayout::SizeConstraint::SetMaximumSize - - - 0 - - - - - - 1 - 0 - - - - - 100 - 0 - - - - true - - - QAbstractItemView::DragDropMode::DragDrop - - - Qt::DropAction::MoveAction - - - true - - - 50 - - - false - - - 20 - - - 80 - - - true - - - false - - - 20 - - - 20 - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Speed -(Select) - - - - 10 - - - - - - Direction -(degrees) - - - - - - - 10 - - - - - - Time -(hh:mm) - - - - 10 - - - - - - Date -(mm/dd/yyyy) - - - - 10 - - - - - - Cloud Cover -(%) - - - - 10 - - - - - - Air Temp -(Select) - - - - 10 - - - - - - - - - - - - - - - 0 - 0 - - - - - 1000 - 16777215 - - - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 0 - 0 - - - - - 0 - 20 - - - - - 16777215 - 20 - - - - PointingHandCursor - - - Point Initialization - - - - - - - - 1 - 0 - - - - Select Weather Stations - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 0 - - - - - - 0 - 0 - - - - - 200 - 16777215 - - - - PointingHandCursor - - - - Download from DEM - - - - - Download by Station ID - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - 250 - 16777215 - - - - PointingHandCursor - - - - Download Most Recent Data - - - - - Download Between Two Dates - - - - - - - - - - - - - 225 - 0 - - - - - 225 - 16777215 - - - - 0 - - - 1 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - Buffer Around DEM - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - PointingHandCursor - - - - - - - PointingHandCursor - - - - mi - - - - - km - - - - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - 120 - 16777215 - - - - Download Data - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 0 - - - - - - 0 - 0 - - - - - 0 - 50 - - - - - 16777215 - 50 - - - - Input Station IDs - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - KMSO, PNTM8 - - - false - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - 140 - 16777215 - - - - PointingHandCursor - - - Download Data - - - - - - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - 225 - 0 - - - - - 225 - 16777215 - - - - 1 - - - - - - 0 - 0 - - - - - 0 - 150 - - - - - 10 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Start Time - - - - - - PointingHandCursor - - - true - - - - - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - - 16777215 - 70 - - - - PointingHandCursor - - - End Time - - - - - - true - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - - - - - PointingHandCursor - - - Write Station KML - - - - - - - true - - - 10 - - - 300 - - - true - - - false - - - - - - - - - - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 0 - 0 - - - - - 0 - 20 - - - - - 16777215 - 20 - - - - PointingHandCursor - - - Weather Model Initialization - - - - - - - Download Weather Data - - - false - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - PointingHandCursor - - - - - - - PointingHandCursor - - - QAbstractSpinBox::ButtonSymbols::UpDownArrows - - - - - - hour(s) - - - 1 - - - - - - - PointingHandCursor - - - Download Data - - - - - - - - - Downloaded Forecasts - - - - 5 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - true - - - - - - - PointingHandCursor - - - Select Specific Time Steps - - - true - - - false - - - - - - - - - - - - - - - QLayout::SizeConstraint::SetDefaultConstraint - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 0 - 0 - - - - - 16777215 - 25 - - - - - 0 - 0 - - - - QFrame::Shape::NoFrame - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - true - - - - - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 175 - 25 - - - - - 0 - 0 - - - - QFrame::Shape::NoFrame - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - true - - - Number of Processors: - - - - - - - PointingHandCursor - - - 1 - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - 0 - 0 - - - - - 16777215 - 25 - - - - QFrame::Shape::NoFrame - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - true - - - Output Directory - - - - - - - 10 - - - - - - 0 - 0 - - - - - 300 - 30 - - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - true - - - - - - - PointingHandCursor - - - Output Location - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - false - - - - 0 - 0 - - - - PointingHandCursor - - - Solve - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - - - 0 - - - 3 - - - 3 - - - - - 0 - - - - - - - - - - - - false - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - PointingHandCursor - - - Qt::LayoutDirection::LeftToRight - - - #solveButton { - padding: 0; - width: 100px; - text-align: center; - padding: 5px; -} - - - Solve - - - - - - - - - - - true - - - - - - - - - - - - - 1 - 0 - - - - - 100 - 0 - - - - - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - - - - - - - - - - - 0 - 0 - 1081 - 22 - - - - QMenuBar { - background-color: #818181 -} -QMenu::item:selected { - background: #3c3c3c; -} - - - - File - - - - - - - - - - Options - - - - - - Tools - - - - - - - Help - - - - Displaying Shapefiles - - - - - - Tutorials - - - - - - - - - Instructions - - - - - - - - - - - - - - - - - - - - - Console Output - - - - - Write blank station file - - - - - Set configuration option - - - - - Displaying Shapefiles - - - - - How to Display Shapefiles in ArcMap - - - - - Tutorial 1: The Basics - - - - - Tutorial 2: Diurnal Winds and Non-Neutral Stability - - - - - Tutorial 3: Point Initialization - - - - - Tutorial 4: Weather Model Initialization - - - - - DEM Download - - - - - fetch_dem Instructions - - - - - Command Line Interface - - - - - About WindNinja - - - - - Citation - - - - - Email Us - - - - - Submit Bug Report - - - - - New Project - - - - - Open Project - - - - - Export Solution - - - - - Close Project - - - - - Exit WindNinja - - - - - - diff --git a/src/gui/setconfigdialog.cpp b/src/gui/setconfigdialog.cpp deleted file mode 100644 index 67da15b08..000000000 --- a/src/gui/setconfigdialog.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#include "setconfigdialog.h" -#include "ui_setconfigdialog.h" - -SetConfigDialog::SetConfigDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::SetConfigDialog) -{ - ui->setupUi(this); -} - -SetConfigDialog::~SetConfigDialog() -{ - delete ui; -} - -QString SetConfigDialog::GetKey() -{ - return ui->keyEdit->text(); -} -QString SetConfigDialog::GetVal() -{ - return ui->valEdit->text(); -} - - diff --git a/src/gui/setconfigdialog.h b/src/gui/setconfigdialog.h deleted file mode 100644 index 0e12f2fc3..000000000 --- a/src/gui/setconfigdialog.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef SETCONFIGDIALOG_H -#define SETCONFIGDIALOG_H - -#include - -namespace Ui { -class SetConfigDialog; -} - -class SetConfigDialog : public QDialog -{ - Q_OBJECT - -public: - explicit SetConfigDialog(QWidget *parent = 0); - ~SetConfigDialog(); - - QString GetKey(); - QString GetVal(); - -private: - Ui::SetConfigDialog *ui; -}; - -#endif // SETCONFIGDIALOG_H diff --git a/src/gui/setconfigdialog.ui b/src/gui/setconfigdialog.ui deleted file mode 100644 index ede4c3f61..000000000 --- a/src/gui/setconfigdialog.ui +++ /dev/null @@ -1,88 +0,0 @@ - - - SetConfigDialog - - - - 0 - 0 - 400 - 143 - - - - Set Configuration Option - - - - - - - - Option - - - - - - - - - - Value - - - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - buttonBox - accepted() - SetConfigDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - SetConfigDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - - diff --git a/src/gui/shapeOutput.cpp b/src/gui/shapeOutput.cpp deleted file mode 100644 index 62b346981..000000000 --- a/src/gui/shapeOutput.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Shape output option selection widget - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "shapeOutput.h" - -/** - * \brief Widget for shape output. - * - * \param parent parent widget - */ -shapeOutput::shapeOutput(QWidget *parent) : QWidget(parent) -{ - shapeGroupBox = new QGroupBox(tr("Create Shape Files (*.shp)")); - shapeGroupBox->setCheckable(true); - shapeGroupBox->setChecked(false); - - shapeResGroupBox = new QGroupBox(tr("Resolution")); - - shapeResSpinBox = new QDoubleSpinBox(this); - shapeResSpinBox->setRange(1, 5000); - shapeResSpinBox->setDecimals(2); - shapeResSpinBox->setAccelerated(true); - shapeResSpinBox->setValue(200); - shapeResSpinBox->setDisabled(true); - - shapeMetersRadioButton = new QRadioButton(tr("Meters")); - shapeMetersRadioButton->setChecked(true); - shapeMetersRadioButton->setDisabled(true); - shapeFeetRadioButton = new QRadioButton(tr("Feet")); - shapeFeetRadioButton->setDisabled(true); - - useMeshResCheckBox = new QCheckBox(tr("Use Mesh Resolution")); - useMeshResCheckBox->setChecked(true); - - //connect spinbox and checkbox - connect(useMeshResCheckBox, SIGNAL(toggled(bool)), - shapeResSpinBox, SLOT(setDisabled(bool))); - connect(useMeshResCheckBox, SIGNAL(toggled(bool)), - shapeMetersRadioButton, SLOT(setDisabled(bool))); - connect(useMeshResCheckBox, SIGNAL(toggled(bool)), - shapeFeetRadioButton, SLOT(setDisabled(bool))); - - shapeResLayout = new QGridLayout; - shapeResLayout->addWidget(shapeResSpinBox, 0, 0); - shapeResLayout->addWidget(shapeMetersRadioButton, 0, 1); - shapeResLayout->addWidget(shapeFeetRadioButton, 0, 2); - shapeResLayout->addWidget(useMeshResCheckBox, 1, 0); - - shapeResGroupBox->setLayout(shapeResLayout); - - shapeLayout = new QVBoxLayout; - shapeLayout->addWidget(shapeResGroupBox); - shapeGroupBox->setLayout(shapeLayout); - - mainLayout = new QVBoxLayout; - mainLayout->addWidget(shapeGroupBox); - mainLayout->addStretch(); - - setLayout(mainLayout); -} - - diff --git a/src/gui/shapeOutput.h b/src/gui/shapeOutput.h deleted file mode 100644 index c8614cf6e..000000000 --- a/src/gui/shapeOutput.h +++ /dev/null @@ -1,63 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Shape output option selection widget - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef SHAPEOUTPUT_H_ -#define SHAPEOUTPUT_H_ - -#include -#include -#include -#include -#include - -#include "WindNinjaInputs.h" - -class shapeOutput : public QWidget -{ - Q_OBJECT - -public: - shapeOutput(QWidget *parent = 0); - - WindNinjaInputs *localInputs; - - QGroupBox *shapeGroupBox; - QGroupBox *shapeResGroupBox; - QDoubleSpinBox *shapeResSpinBox; - QRadioButton *shapeMetersRadioButton, *shapeFeetRadioButton; - QCheckBox *useMeshResCheckBox; - - QGridLayout *shapeResLayout; - QVBoxLayout *shapeLayout; - QVBoxLayout *mainLayout; - -}; - -#endif /* SHAPEOUTPUT_H_ */ - diff --git a/src/gui/solvePage.cpp b/src/gui/solvePage.cpp deleted file mode 100644 index 2c30adf02..000000000 --- a/src/gui/solvePage.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Handles solve parameters and fires the solver - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "solvePage.h" - -solvePage::solvePage(QWidget *parent) : QWidget(parent) -{ - numProcLabel = new QLabel(tr("Number of Processors")); - - numProcSpinBox = new QSpinBox; - numProcSpinBox->setRange(1, 16); - numProcSpinBox->setValue(1); - numProcSpinBox->setAccelerated(true); - - numProcLabel->setBuddy(numProcSpinBox); - - solveToolButton = new QToolButton; - solveToolButton->setText("Solve"); - solveToolButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - solveToolButton->setIcon(QIcon(":cog_go.png")); - solveToolButton->setDisabled(true); - - numProcessors = getNumProcessors(); - if(numProcessors < 0) - { - availProcString = "Running Serial"; - numProcessors = 1; - } - else - availProcString = "Available Processors: " + QString::number(numProcessors); - - availProcLabel = new QLabel(availProcString); - - numProcSpinBox->setMaximum(numProcessors); - numProcSpinBox->setValue(numProcessors); - - outputDirLabel = new QLabel( this ); - outputDirLabel->setText( "Output Directory" ); - outputDirLineEdit = new QLineEdit( this ); - outputDirLineEdit->setReadOnly( true ); - - outputDirToolButton = new QToolButton( this ); - outputDirToolButton->setText( "Save output in..." ); - outputDirToolButton->setToolButtonStyle( Qt::ToolButtonTextBesideIcon ); - outputDirToolButton->setIcon( QIcon( ":folder.png" ) ); - - openOutputPathButton = new QToolButton( this ); - openOutputPathButton->setText( "Open Output Files Path" ); - openOutputPathButton->setToolButtonStyle( Qt::ToolButtonTextBesideIcon ); - openOutputPathButton->setIcon( QIcon( ":folder.png" ) ); - openOutputPathButton->setDisabled( true ); - - layout = new QVBoxLayout; - layout->addWidget(availProcLabel); - - pageLayout = new QHBoxLayout; - pageLayout->addWidget(numProcLabel); - pageLayout->addWidget(numProcSpinBox); - pageLayout->addWidget(solveToolButton); - pageLayout->addStretch(); - - outputPathLayout = new QHBoxLayout; - outputPathLayout->addWidget( outputDirLineEdit ); - outputPathLayout->addWidget( outputDirToolButton ); - outputPathLayout->addWidget( openOutputPathButton ); - - connect(outputDirToolButton, SIGNAL( clicked() ), - this, SLOT( chooseOutputDir() ) ); - - layout->addLayout(pageLayout); - layout->addWidget(outputDirLabel); - layout->addLayout( outputPathLayout ); - layout->addStretch(); - setLayout(layout); -} - -void solvePage::setOutputDir(QString dir) { - outputDirLineEdit->setText( dir ); -} - -void solvePage::chooseOutputDir() { - QString dir = QFileDialog::getExistingDirectory( this, - tr("Open Output Directory"), outputDirLineEdit->text(), QFileDialog::ShowDirsOnly ); - if( dir == "" ) - { - dir = outputDirLineEdit->text(); - } - outputDirLineEdit->setText( dir ); -} - -QString solvePage::outputDirectory() { - return outputDirLineEdit->text(); -} - -int solvePage::getNumProcessors() -{ - int procs = -1; -#ifdef _OPENMP - procs = omp_get_num_procs(); -#endif - return procs; -} diff --git a/src/gui/solvePage.h b/src/gui/solvePage.h deleted file mode 100644 index 1f8d61b97..000000000 --- a/src/gui/solvePage.h +++ /dev/null @@ -1,82 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Handles solve parameters and fires the solver - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef SOLVEPAGE_H -#define SOLVEPAGE_H - -#include -#include -#include -#include -#include -#include - -#include - -#ifdef _OPENMP -#include -#endif - - -class solvePage : public QWidget -{ - Q_OBJECT - - public: - solvePage(QWidget *parent = 0); - - int numProcessors; - int getNumProcessors(); - - QLabel *numProcLabel; - QString availProcString; - QLabel *availProcLabel; - QSpinBox *numProcSpinBox; - - QLabel *outputDirLabel; - QLineEdit *outputDirLineEdit; - QToolButton *outputDirToolButton; - QToolButton *openOutputPathButton; - - QToolButton *solveToolButton; - - QHBoxLayout *pageLayout; - QHBoxLayout *outputPathLayout; - QVBoxLayout *layout; - - QString outputDirectory(); - -public slots: - void setOutputDir(QString path); - -private slots: - void chooseOutputDir(); -}; - -#endif /* SOLVEPAGE_H */ diff --git a/src/gui/solveThread.cpp b/src/gui/solveThread.cpp deleted file mode 100644 index a4df00880..000000000 --- a/src/gui/solveThread.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: QThread that fires n threads for the solver - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "solveThread.h" - -/** - * QThread for running all of the simulations - * - * @param nProcs number of threads - * @param a army to run on - * - * @return true on success - */ -bool solveThread::run(int nProcs, ninjaArmy a) -{ - return a.startRuns(nProcs); -} - -/** - * Distribute ninja runs over the allotted number of threads - * - * @param numRuns number of ninja runs - * @param numProcessors number of processors to use - * @param windsim pointer to an array of ninjas - * - * @return false on failure, true otherwise - */ -bool solveThread::startRunsQt(int numRuns, int numProcessors, ninja *windsim) -{ - bool ninjaSuccess = true; - QString exceptString; - - bool *retval = new bool[numRuns]; - for(int i = 0;i < numRuns;i++) - retval[i] = true; - - if(numRuns < 1 || numProcessors < 1) - return false; - -#ifdef _OPENMP - omp_set_nested(false); - //omp_set_dynamic(true); -#endif - - if(numRuns == 1) { - //set number of threads for the run - windsim[0].set_numberCPUs( numProcessors ); - //start the run - try { - retval[0] = windsim[0].simulate_wind(); - } - catch (std::bad_alloc& e) { - exceptString = "Exception bad_alloc caught: " + QString( e.what() ); - exceptString += ". WindNinja appears to have run out of memory."; - ninjaSuccess = false; - } - catch (cancelledByUser& e) { - exceptString = "Exception caught: " + QString( e.what() ); - ninjaSuccess = false; - } - catch (std::exception& e) { - exceptString = "Exception caught: " + QString( e.what() ); - ninjaSuccess = false; - } - catch (...) { - exceptString = "Exception caught: Cannot determine exception type."; - ninjaSuccess = false; - } - //writeToConsole( exceptString, Qt::red ); - } - else { -#ifdef _OPENMP - omp_set_num_threads(numProcessors); -#endif - -#pragma omp parallel for schedule(static, 1) //spread runs on single threads - for(int j = 0; j < numRuns; j++) { - //start the run - try { - retval[j] = windsim[j].simulate_wind(); //runs are done on 1 thread each since omp_set_nested(false) - } - catch (std::bad_alloc& e) { - exceptString = "Exception bad_alloc caught: " + QString( e.what() ); - exceptString += ". WindNinja appears to have run out of memory."; - ninjaSuccess = false; - } - catch (cancelledByUser& e) { - exceptString = "Exception caught: " + QString( e.what() ); - ninjaSuccess = false; - } - catch (std::exception& e) { - exceptString = "Exception caught: " + QString( e.what() ); - ninjaSuccess = false; - } - catch (...) { - exceptString = "Exception caught: Cannot determine exception type."; - ninjaSuccess = false; - } - //writeToConsole( exceptString, Qt::red ); - } - } - for(int i = 0;i < numRuns;i++) { - if (retval[i] == false) - ninjaSuccess = false; - } - return ninjaSuccess; -} diff --git a/src/gui/solveThread.h b/src/gui/solveThread.h deleted file mode 100644 index 1c3e862d7..000000000 --- a/src/gui/solveThread.h +++ /dev/null @@ -1,50 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: QThread that fires n threads for the solver - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef SOLVETHREAD_H -#define SOLVETHREAD_H -#include - -#ifndef Q_MOC_RUN -#include "ninja.h" -#endif - -#include "ninjaArmy.h" -//make thread classes - -class solveThread : public QThread -{ - Q_OBJECT - public: - bool startRunsQt(int numRuns, int numProcessors, ninja *windsim); - bool run(int nProcs, ninjaArmy a); -}; - -#endif /* SOLVETHREAD_H */ - diff --git a/src/gui/splash.cpp b/src/gui/splash.cpp deleted file mode 100644 index 1cae2e421..000000000 --- a/src/gui/splash.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Splash screen that shows a pixmap and n messages for m seconds - * each. - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "splash.h" - -/** - * \brief Create the splash screen - * - * Display an image with text in the upper left corner. The time is the total - * each message is displayed. Total time is time * list.size() - * - * \param pixmap Image to display - * \param list of strings to display - * \param time to display each message in milliseconds - */ -splashScreen::splashScreen(const QPixmap &pixmap, QStringList list, int time) -{ - stringList = list; - messageTime = time; - fade_interval = (float)time / FRAMES_PER_MESSAGE; - nMessages = stringList.size(); - nFrames = time * FRAMES_PER_MESSAGE; - i = 0; - j = 0; - messageTimer = new QTimer; - alignment = Qt::AlignLeft | Qt::AlignBottom; - setFocus(Qt::OtherFocusReason); - orig_map = pixmap; - bDone = 0; - - int padding = 21; - for(int p = 0; p < padding; p++) - pad += " "; -} - -/** - * \brief Show the splash screen - * - * Show the image and start the timer, increment through the messages - */ -void splashScreen::display() -{ - show(); - messageTimer->start(fade_interval); - connect(messageTimer, SIGNAL(timeout()), this, SLOT(update())); -} - -static QPixmap &setAlpha( QPixmap &px, int val ) -{ - QPixmap alpha = px; - QPainter p(&alpha); - p.fillRect(alpha.rect(), QColor(val, val, val)); - p.end(); - px.setAlphaChannel(alpha); - return px; -} - -/** - * \brief Change the label until there are no more labels. - * - * Close the splash after the last label - */ -void splashScreen::update() -{ - if(bDone) - return; - map = orig_map; - /* temp vars */ - float f; - int k; - int alpha = 255; - if(i <= 1) - { - alpha = (float)255 / FRAMES_PER_MESSAGE * j; - } - if(i > nMessages - 1) - { - k = nMessages * FRAMES_PER_MESSAGE; - alpha = 255 - (int)((1 - ((float)k - j) / FRAMES_PER_MESSAGE) * 255); - } - if(j % FRAMES_PER_MESSAGE == 0) - { - if(i < nMessages) - { - showMessage(pad + stringList[i], alignment, Qt::gray); - i++; - } - else - { - messageTimer->stop(); - emit done(); - finish(this); - } - } - map = setAlpha(map, alpha); - setPixmap(map); - j++; -} - -/** - * \brief Close the image on left button mouse event - * - * \param event mouse event to process - */ -void splashScreen::mousePressEvent(QMouseEvent *event) -{ - if(event->buttons() & Qt::LeftButton) - { - bDone = 1; - emit done(); - finish(this); - } - else - return; -} - diff --git a/src/gui/splash.h b/src/gui/splash.h deleted file mode 100644 index 460268a49..000000000 --- a/src/gui/splash.h +++ /dev/null @@ -1,83 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Splash screen that shows a pixmap and n messages for m seconds - * each. - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef SPLASH_H_ -#define SPLASH_H_ - -#include -#include -#include -#include -#include -#include - -#define FRAMES_PER_MESSAGE 20 - -/** - * \brief Class to display an image and an array of string messages - * - * It 'fakes' loading to display images forcefully. Users can click on the - * image to bypass - */ -class splashScreen : public QSplashScreen -{ -Q_OBJECT - -public: - splashScreen(const QPixmap &pixmap, QStringList list, int time); - QStringList stringList; - void display(); - QTimer *messageTimer; - int messageTime; - int nMessages; - int nFrames; - int i, j; - float fade_interval; - int bDone; - - QPixmap map; - QPixmap orig_map; - - Qt::Alignment alignment; - - QString pad; - -signals: - void done(); - -protected: - void mousePressEvent(QMouseEvent *event); - -public slots: - void update(); -}; - -#endif /* SPLASH_H_ */ - diff --git a/src/gui/stabilityInput.cpp b/src/gui/stabilityInput.cpp deleted file mode 100644 index 61d4ff5c8..000000000 --- a/src/gui/stabilityInput.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/****************************************************************************** - * - * $Id: stabilityInput.cpp 1304 2012-01-20 21:07:12Z kyle.shannon $ - * - * Project: WindNinja Qt GUI - * Purpose: OpenGL implementation for viewing DEM inputs - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "stabilityInput.h" - -/** - * Construct and layout the stabilityInput widget. This is only a checkable - * option now. - * - * @param parent parent widget - */ -stabilityInput::stabilityInput(QWidget *parent) : QWidget(parent) -{ - stabilityGroupBox = new QGroupBox(tr("Use Stability")); - stabilityGroupBox->setCheckable(true); - stabilityGroupBox->setChecked(false); - stabilityLayout = new QVBoxLayout; - - ninjafoamConflictLabel = new QLabel(tr("The non-neutral stability option is not currently available for the momentum solver.\n" - ), this); - ninjafoamConflictLabel->setHidden(true); - - stabilityGroupBox->setLayout(stabilityLayout); - - layout = new QVBoxLayout; - layout->addWidget(stabilityGroupBox); - layout->addWidget(ninjafoamConflictLabel); - layout->addStretch(); - setLayout(layout); -} diff --git a/src/gui/stabilityInput.h b/src/gui/stabilityInput.h deleted file mode 100644 index 0375cc6d8..000000000 --- a/src/gui/stabilityInput.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef STABILITYINPUT_H -#define STABILITYINPUT_H - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "gdal_priv.h" -#include "ogr_srs_api.h" - -#ifndef Q_MOC_RUN -#include "boost/date_time/local_time/local_time.hpp" -#include "boost/date_time/posix_time/posix_time_types.hpp" -#endif - -#include "latLonWidget.h" -#include "timeZoneWidget.h" - -#include "qdebug.h" - -class stabilityInput : public QWidget -{ - Q_OBJECT - - public: - - stabilityInput(QWidget *parent = 0); - QGroupBox *stabilityGroupBox; - QVBoxLayout *stabilityLayout; - QVBoxLayout *layout; - QLabel *ninjafoamConflictLabel; - -}; - -#endif /* STABILITYINPUT_H */ diff --git a/src/gui/stationFetchWidget.cpp b/src/gui/stationFetchWidget.cpp deleted file mode 100644 index d7933312c..000000000 --- a/src/gui/stationFetchWidget.cpp +++ /dev/null @@ -1,528 +0,0 @@ -/****************************************************************************** - * - * $Id: stationFetchWidget.cpp 1757 2012-08-07 18:40:40Z kyle.shannon $ - * - * Project: WindNinja - * Purpose: stationFetchWidget - * Author: tfinney@fs.fed.us - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -/** @file stationFetchWidget.cpp - * - * Fetch stations from the Mesonet API - * - */ - -#include "stationFetchWidget.h" -//#include - -stationFetchWidget::stationFetchWidget(QWidget *parent) - : QWidget(parent) -{ - setupUi(this); - connectInputs(); - fixTime(); - this->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint); - this->show(); - - currentBox->setVisible(false); - fetchMetaButton->setVisible(false); //Hide the metadata button from the gui - - stationFetchProgress = new QProgressDialog(this); //Sets up a mediocre progress bar that kind of works - stationFetchProgress->setWindowModality(Qt::ApplicationModal); - stationFetchProgress->setAutoReset(false); //Displays how far along the download process is - stationFetchProgress->setAutoClose(false); -} - -/** - * @brief Deletes all allocated memory on destruction of class object - * - */ -stationFetchWidget::~stationFetchWidget() -{ - delete stationFetchProgress; -} -/** - * @brief stationFetchWidget::fixTime - * Sets the time correctly in the downloader widget - * Default is start time to be yesterday and - * end time to be now - */ -void stationFetchWidget::fixTime() -{ - startEdit->setDateTime( QDateTime::currentDateTime().addDays(-1) ); - endEdit->setDateTime(QDateTime::currentDateTime()); - - startEdit->setMaximumDateTime(QDateTime::currentDateTime().addSecs(-3600)); - endEdit->setMaximumDateTime(QDateTime::currentDateTime()); - - startEdit->setDisplayFormat( "MM/dd/yyyy HH:mm" ); - endEdit->setDisplayFormat( "MM/dd/yyyy HH:mm" ); -} - -/** - * @brief Connect all SLOTS and SIGNALS in the Qt GUI - * - */ -void stationFetchWidget::connectInputs() -{ - connect(fetchMetaButton, SIGNAL(clicked()),this, SLOT(getMetadata())); //Gets the metadata, indirectly used in mainwindow via config option - connect(fetchDataButton,SIGNAL(clicked()),this,SLOT(executeFetchStation())); //Fetches the data and - connect(endEdit,SIGNAL(dateTimeChanged(QDateTime)),this,SLOT(watchStopTime())); //Watches the time to make sure we don't go over - connect(startEdit,SIGNAL(dateTimeChanged(QDateTime)),this,SLOT(watchStartTime())); //Watches the time to make sure we don't go under - connect(closeButton,SIGNAL(clicked()),this,SLOT(close())); //closes stationFetchWidget -} - -void stationFetchWidget::updatetz(QString tz) //Updates the Time Zone -{ - tzString = tz; -} -void stationFetchWidget::setInputFile(QString file) //Gets the DEM -{ - demFileName = file; -} - -/** - * @brief stationFetchWidget::watchStartTime - * Watches the start time that the user puts in, if - * its bigger than the end time, correct the end time by adding 1 hour - * to the start time - */ -void stationFetchWidget::watchStartTime() -{ - if (endEdit->dateTime()dateTime()) - { - writeToConsole("Start Time is greater than End Time!, reverting..."); - CPLDebug("STATION_FETCH","START TIME > END TIME, FIXING END TIME"); - endEdit->setDateTime(startEdit->dateTime().addSecs(3600)); - } -} -/** - * @brief stationFetchWidget::watchStopTime - * watch the end time the user puts in, if it is smaller - * than the start time - * correct the start time by subtracting 1 hour from the end time - */ -void stationFetchWidget::watchStopTime() -{ - if (endEdit->dateTime()dateTime()) - { - writeToConsole("Start Time is greater than End Time!, reverting..."); - CPLDebug("STATION_FETCH","START TIME > END TIME, FIXING START TIME"); - startEdit->setDateTime(endEdit->dateTime().addSecs(-3600)); - } -} - -/** - * @brief stationFetchWidget::updateFetchProgress - * Updates the Progress Bar and tells the GUI - * when station fetch is done downloading, or if the user - * cancels the request - * - * Kills the request once it is downloaded - * - */ -void stationFetchWidget::updateFetchProgress() -{ - if (stationFetchProgress->wasCanceled()) //If the user hits the cancel button - { - stationFetchProgress->setLabelText("Canceling!"); - stationFetchProgress->setCancelButton(0); - stationFutureWatcher.waitForFinished(); - stationFetchProgress->cancel(); - setCursor(Qt::ArrowCursor); - } - else - { - stationFutureWatcher.waitForFinished(); - int result = stationFutureWatcher.result(); //Get the result, 1 good, -1 bad - - if (result==-1) //Means that we failed to get data, the error_msg should tell the user - { //What happened - stationFetchProgress->setLabelText(QString(pointInitialization::error_msg.c_str())); - stationFetchProgress->setRange(0,1); - stationFetchProgress->setValue(0); - stationFetchProgress->setCancelButtonText("Close"); - setCursor(Qt::ArrowCursor); - } - else if (result==-2) //Special type of error that we catch in the GUI - { - stationFetchProgress->setLabelText("ERROR: Selected Time Range is greater than 1 year! Input custom API KEY to remove limits"); - stationFetchProgress->setRange(0,1); - stationFetchProgress->setValue(0); - stationFetchProgress->setCancelButtonText("Close"); - setCursor(Qt::ArrowCursor); - } - else //IT WORKED! - { - stationFetchProgress->setRange(0,100); - stationFetchProgress->setValue(1); - stationFetchProgress->setValue(100); - stationFetchProgress->setLabelText("Data Downloaded Sucessfully!"); - stationFetchProgress->setCancelButtonText("Close"); - setCursor(Qt::ArrowCursor); //set the cursor back to normal - } - } -} - -/** - * @brief stationFetchWidget::executeFetchStation - * Executes fetchStation using Qt stuff - * based on widgetDownloadDEM - * - * so that we can see a progress bar - * and prevent program hanging - * - */ -void stationFetchWidget::executeFetchStation() -{ - stationFetchProgress->setLabelText("Downloading Station Data!"); - stationFetchProgress->setRange(0,0); //make it bounce back and forth - stationFetchProgress->setCancelButtonText("Cancel"); - stationFetchProgress->reset(); //Set the progress bar back to its basic state - - connect(&stationFutureWatcher,SIGNAL(finished()),this,SLOT(updateFetchProgress())); - connect(stationFetchProgress,SIGNAL(canceled()),this,SLOT(updateFetchProgress())); - - /* Note on Concurrent Processing: - * You can't update the GUI from a spawned process on another thread - * If you do: - * It will segfault or throw X11 errors at you and freeze - * This was encountered when updating the cursor was set inside fetchStation. - * Always update the UI from outside the spawned thread... - */ - - stationFutureWatcher.setFuture(QtConcurrent::run(this,&stationFetchWidget::fetchStation)); //Run the - //actual fetching - setCursor(Qt::WaitCursor);//Make the cursor spinny - stationFetchProgress->exec(); //Execute the progress bar to do its thing -// stationFutureWatcher.cancel(); //commented for now, probably can be deleted... - -} -/** - * @brief stationFetchWidget::removeWhiteSpace - * //Cleans up spaces in text - * if the user types in a station name and then puts a space - * strip it out - * @param str - * @return - */ -std::string stationFetchWidget::removeWhiteSpace(std::string str) -{ - std::string tofind=" "; - std::string toreplace=""; - size_t position = 0; - for ( position = str.find(tofind); position != std::string::npos; position = str.find(tofind,position) ) - { - str.replace(position ,1, toreplace); - } - return(str); -} -/** - * @brief stationFetchWidget::demButcher - * get rid of some crap in the dem so that the file name looks nice - * - * @return - */ -std::string stationFetchWidget::demButcher()//Cleans up the DEM for use in the downloader -{ - std::string demPath = std::string(CPLGetDirname(demFileName.toStdString().c_str())); -// std::string demRaw = demFileName.toStdString(); -// size_t lastDot=demRaw.find_last_of("/"); -// if (lastDot==std::string::npos) -// { -// return demRaw; -// } -// std::string demBetter=demRaw.substr(0,lastDot)+"/"; - return demPath; -} -/** - * @brief stationFetchWidget::fetchStation - * Fetches data from the Mesowest API based on GUI request - */ -int stationFetchWidget::fetchStation() -{ - writeToConsole("Downloading Station Data..."); - CPLDebug("STATION_FETCH","Fetch Station GUI Function"); - CPLDebug("STATION_FETCH","---------------------------------------"); - CPLDebug("STATION_FETCH","DEM FILE NAME: %s",demFileName.toStdString().c_str()); - CPLDebug("STATION_FETCH","TIME ZONE: %s",tzString.toStdString().c_str()); - CPLDebug("STATION_FETCH","geoLoc: %i",geoLoc->currentIndex()); - CPLDebug("STATION_FETCH","timeLoc: %i",timeLoc->currentIndex()); - CPLDebug("STATION_FETCH","---------------------------------------"); - std::string stid; - double buffer; - std::string bufferUnits; - bool fetchNow; - std::string blank="blank"; - std::string demUse=demButcher(); - std::string stationPathName; - CPLDebug("STATION_FETCH","USING DEM: %s",demUse.c_str()); - - int terrainPart=geoLoc->currentIndex(); - int timePart=timeLoc->currentIndex(); - - //Custom API_KEY STUFF - const char *api_key_conf_opt = CPLGetConfigOption("CUSTOM_API_KEY","FALSE"); - if(api_key_conf_opt!="FALSE") - { - std::ostringstream api_stream; - api_stream<currentIndex()==0) -// { -// cout<<"DEM VALUES"<text().toDouble()<currentText().toStdString()<currentIndex()==1) -// { -// cout<<"STID VALUES"<text().toStdString()<currentIndex()==0) -// { -// cout<<"Current Values"<isChecked()<currentIndex()==1) -// { -// cout<<"Time Series Values"<text().toStdString()<text().toStdString()< eTimeList; - boost::posix_time::ptime noTime; - eTimeList.push_back(noTime); // Create an Empty Time list for options that don't need it. - bool result; - - - //pointInitialization::SetRawStationFilename(demUse); - //This is a little different than in the CLI, because there is on option for a custom output path - //Instead, the "raw File", demFileName is the dem file, like it would be in the LCI - //and then demUse, which the is just the path to the dem acts as the output path - //So the directory storing the weather csvs is always the same level as the DEM - //The Path name has a time zone in it - // This is because the station file names have time in them and to specify to the user - // where they downloaded the times at - // This is only necessary for timeseries however, because the other options, such as 1 step/current data - //are time naive and require the user to specify a time for what is current. - - // This means DEM and Current Data 1 step - if (terrainPart==0 && timePart==0) - { - CPLDebug("STATION_FETCH","Fetch Params: DEM and Current Data"); - buffer=bufferSpin->text().toDouble(); - bufferUnits=buffUnits->currentText().toStdString(); - fetchNow=true; - - //Set the Station Buffer - pointInitialization::setStationBuffer(buffer,bufferUnits); - //Generates the directory to store the file names, because current data is on, don't specify time zone - stationPathName=pointInitialization::generatePointDirectory(demFileName.toStdString(),demUse,true); - pointInitialization::SetRawStationFilename(stationPathName); - result = pointInitialization::fetchStationFromBbox(demFileName.toStdString(),eTimeList,tzString.toStdString(),fetchNow); - - CPLDebug("STATION_FETCH","Return: %i",result); - } - //DEM and Time series - if (terrainPart==0 && timePart==1) - { - CPLDebug("STATION_FETCH","Fetch Params: DEM and Time series"); - buffer=bufferSpin->text().toDouble(); - bufferUnits=buffUnits->currentText().toStdString(); - fetchNow=false; - - int sY,sMo,sD,sH,sMi; - int eY,eMo,eD,eH,eMi; - int numSteps=10; //make up a number for now.... It really doesn't matter at this point - //Just need to generate a timelist for fetching purposes - - std::string StartTime=startEdit->text().toStdString(); - std::string EndTime=endEdit->text().toStdString(); - - istringstream(StartTime.substr(0,2))>>sMo; - istringstream(StartTime.substr(3,2))>>sD; - istringstream(StartTime.substr(6,4))>>sY; - istringstream(StartTime.substr(11,2))>>sH; - istringstream(StartTime.substr(14,2))>>sMi; - - istringstream(EndTime.substr(0,2))>>eMo; - istringstream(EndTime.substr(3,2))>>eD; - istringstream(EndTime.substr(6,4))>>eY; - istringstream(EndTime.substr(11,2))>>eH; - istringstream(EndTime.substr(14,2))>>eMi; - - std::vector timeList; - timeList=pointInitialization::getTimeList(sY,sMo,sD,sH,sMi,eY,eMo,eD,eH,eMi, - numSteps,tzString.toStdString()); - int duration_check = pointInitialization::checkFetchTimeDuration(timeList); //Check the timelist duration - if(duration_check==-2) //Means that they select too much and we have to quit - { - return duration_check; - } - - //Set station Buffer - pointInitialization::setStationBuffer(buffer,bufferUnits); - - //Generate Station directory, because timeseries is on, specify what time zone the stations will be - //downloaded in, based on DEM time zone settings, or user specified. - stationPathName=pointInitialization::generatePointDirectory(demFileName.toStdString(),demUse,false); - pointInitialization::SetRawStationFilename(stationPathName); - result = pointInitialization::fetchStationFromBbox(demFileName.toStdString(),timeList, - tzString.toStdString(),false); - CPLDebug("STATION_FETCH","Return: %i",result); - } - if (terrainPart==1 && timePart==0) //STation ID and 1 step - { - CPLDebug("STATION_FETCH","STID and Current Data"); - stid=removeWhiteSpace(idLine->text().toStdString()); - fetchNow=true; - //Fetch now is on, don't specify time zone in station path - stationPathName=pointInitialization::generatePointDirectory(demFileName.toStdString(),demUse,true); - pointInitialization::SetRawStationFilename(stationPathName); - - result = pointInitialization::fetchStationByName(stid,eTimeList,tzString.toStdString(),fetchNow); - - CPLDebug("STATION_FETCH","Return: %i",result); - - } - if (terrainPart==1 && timePart==1) //STATION ID and timeseries - { - CPLDebug("STATION_FETCH","STID and Timeseries"); - stid=removeWhiteSpace(idLine->text().toStdString()); - fetchNow=false; - int sY,sMo,sD,sH,sMi; - int eY,eMo,eD,eH,eMi; - int numSteps=10; //make up a number for now.... It really doesn't matter at this point - - std::string StartTime=startEdit->text().toStdString(); - std::string EndTime=endEdit->text().toStdString(); - - istringstream(StartTime.substr(0,2))>>sMo; - istringstream(StartTime.substr(3,2))>>sD; - istringstream(StartTime.substr(6,4))>>sY; - istringstream(StartTime.substr(11,2))>>sH; - istringstream(StartTime.substr(14,2))>>sMi; - - istringstream(EndTime.substr(0,2))>>eMo; - istringstream(EndTime.substr(3,2))>>eD; - istringstream(EndTime.substr(6,4))>>eY; - istringstream(EndTime.substr(11,2))>>eH; - istringstream(EndTime.substr(14,2))>>eMi; - - std::vector timeList; - timeList=pointInitialization::getTimeList(sY,sMo,sD,sH,sMi,eY,eMo,eD,eH,eMi, - numSteps,tzString.toStdString()); - int duration_check = pointInitialization::checkFetchTimeDuration(timeList); //Check the timelist duration - if(duration_check==-2) //Means that they select too much and we have to quit - { - return duration_check; - } - - stationPathName=pointInitialization::generatePointDirectory(demFileName.toStdString(),demUse,false); - pointInitialization::SetRawStationFilename(stationPathName); - result = pointInitialization::fetchStationByName(stid,timeList,tzString.toStdString(),fetchNow); - - //timeseries, so specify time zone in path name. - - CPLDebug("STATION_FETCH","Return: %i",result); - } - if(result==false) //If there are no stations, tell the user - { - pointInitialization::removeBadDirectory(stationPathName); - writeToConsole("Could not read station File: Possibly no stations exist for request"); - return -1; - } - else - { - if(fetchNow==false) - { - pointInitialization::start_and_stop_times.clear(); //Need to clear these times to allow multiple downloads - } - return 1; - } -} - -/** - * @brief stationFetchWidget::getMetadata - * - * GUI wrapper for metadata fetcher, - * we don't currently use this - * and instead have a config option - * that fetches metadata at runtime - * - * leave this in incase we decide to add in a - * metadata button later - */ -void stationFetchWidget::getMetadata() -{ - QString fileName; - CPLDebug("STATION_FETCH","METADATA DOWNLOADER FOR STATIONS IN DEM: %s",demFileName.toStdString().c_str()); - - //the third param: QFileInfo sets the metadata - //save widget to the current directory and then - //appends .csv to the name to tell the user to save the metadata with - //that extension. This may have some bugs, needs testing 5/24/2018 - fileName = QFileDialog::getSaveFileName(this, - tr("Save Domain Metadata File"), - QFileInfo(demFileName).absoluteDir().absolutePath()+"/.csv", - tr("Comma Separated files (*.csv")); - - if (QFileInfo(fileName).suffix().compare("csv", Qt::CaseInsensitive)) - { - fileName += ".csv"; - if (QFileInfo(fileName).exists()) - { - int r = QMessageBox::warning(this, "WindNinja", - "The file " + fileName + - " exists, do you wish to" \ - " overwrite it?", - QMessageBox::Yes | - QMessageBox::No | - QMessageBox::Cancel); - if (r == QMessageBox::No || r == QMessageBox::Cancel) - return; - } - } - else - pointInitialization::fetchMetaData(fileName.toStdString(), demFileName.toStdString(), true); -} - -void stationFetchWidget::closeDEM() -{ - this->close(); -} - -void stationFetchWidget::closeEvent(QCloseEvent *event) -{ - event->ignore(); - exitWidget(); - event->accept(); -} - diff --git a/src/gui/stationFetchWidget.h b/src/gui/stationFetchWidget.h deleted file mode 100644 index b8dbb815b..000000000 --- a/src/gui/stationFetchWidget.h +++ /dev/null @@ -1,101 +0,0 @@ -/****************************************************************************** - * - * $Id: stationFetchWdiget.h 1757 2012-08-07 18:40:40Z kyle.shannon $ - * - * Project: WindNinja - * Purpose: stationFetchWidget - * Author: tfinney@fs.fed.us - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef STATIONFETCHWIDGET_H_ -#define STATIONFETCHWIDGET_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "fetch_factory.h" -#include "gdal_util.h" -#include "ninja_conv.h" -#include -#include -#include "ui_stationFetchWidget.h" -#include "GoogleMapsInterface.h" - -#include "pointInitialization.h" - -#ifndef PI -#define PI 3.14159 -#endif - -class stationFetchWidget : public QWidget, private Ui::stationFetchWidget -{ - Q_OBJECT - -public: - QString demFileName; - QDir demFileDir; - stationFetchWidget(QWidget *parent = 0); - ~stationFetchWidget(); - QDir settingsDir; - void connectInputs(); - QString tzString; - void updatetz(QString tz); - void fixTime(); - std::string removeWhiteSpace(std::string str); - -protected: - void closeEvent(QCloseEvent *event); - - private slots: - void closeDEM(); - void getMetadata(); - void setInputFile( QString file ); - int fetchStation(); - std::string demButcher(); - void watchStartTime(); - void watchStopTime(); - - //Progress Bar Slots - void updateFetchProgress(); - void executeFetchStation(); //Wrapper for fetch station, necessary for progress bar - - signals: - void writeToConsole(QString message); - void exitWidget(); - -private: - //Progress Bar Stuff - QProgressDialog *stationFetchProgress; - QFutureWatcher stationFutureWatcher; - -friend class pointInput; -}; - -#endif /* STATIONFETCHWIDGET_H_ */ - diff --git a/src/gui/stationFetchWidget.ui b/src/gui/stationFetchWidget.ui deleted file mode 100644 index 9b00eddfe..000000000 --- a/src/gui/stationFetchWidget.ui +++ /dev/null @@ -1,381 +0,0 @@ - - - stationFetchWidget - - - - 0 - 0 - 500 - 215 - - - - - 0 - 0 - - - - - 500 - 215 - - - - - 1500 - 2504 - - - - Station Downloader - - - - :/wn-icon.png:/wn-icon.png - - - - - - - - - - - - <html><head/><body><p>Download From DEM: Download all active weather stations with the bounds of the selected surface input.</p><p>Download By Station ID: Manually enter weather station IDs separated by commas. e.g. KMSO,PNTM8</p></body></html> - - - - Download From DEM - - - - - Download By Station ID - - - - - - - - - - - 10 - 0 - 141 - 20 - - - - Buffer Around DEM - - - - - - 10 - 20 - 151 - 26 - - - - <html><head/><body><p>Add a buffer to download stations outside the DEM.</p></body></html> - - - 100 - - - - - - 170 - 20 - 51 - 25 - - - - - mi - - - - - km - - - - - - - - - 0 - 30 - 221 - 25 - - - - - - - KMSO,PNTM8 - - - - - - 0 - 10 - 161 - 17 - - - - Input Station IDs - - - idLabel - idLine - - - - - - - - - - - - - - - <html><head/><body><p>Download Most Recent Data: Download one time step of the latest data available in the mesowest API.</p><p>Download Between Two Dates: Download all weather station data within a specified start and stop time.</p></body></html> - - - - Download Most Recent Data - - - - - Download Between Two Dates - - - - - - - - - - true - - - - 10 - 30 - 221 - 23 - - - - false - - - Fetch Current Weather Data - - - false - - - false - - - - - - 15 - 30 - 211 - 61 - - - - <html><head/><body><p>Download the most recent weather data for a single time step simulation.</p></body></html> - - - true - - - - - - - - 30 - 30 - 194 - 26 - - - - - - - true - - - - - - 30 - 90 - 194 - 26 - - - - true - - - - - - 30 - 10 - 101 - 17 - - - - Start Time - - - - - - 30 - 70 - 67 - 17 - - - - End Time - - - - - - - - - - - - - - - - - <html><head/><body><p>Fetches weather data based on above specified parameters.</p></body></html> - - - Download Data - - - - :/server_go.png:/server_go.png - - - Qt::ToolButtonTextBesideIcon - - - - - - - <html><head/><body><p>Fetches general information about nearby weather stations.</p><p>Such as: Latitude, Longitude, Elevation and Status,</p></body></html> - - - Download Metadata - - - false - - - Qt::ToolButtonTextOnly - - - - - - - <html><head/><body><p>Close Station Downloader</p></body></html> - - - Close - - - - :/cross.png:/cross.png - - - Qt::ToolButtonTextBesideIcon - - - - - - - - - - - - - geoLoc - currentIndexChanged(int) - geoPage - setCurrentIndex(int) - - - 128 - 24 - - - 128 - 252 - - - - - timeLoc - currentIndexChanged(int) - timePage - setCurrentIndex(int) - - - 371 - 24 - - - 371 - 252 - - - - - - slot1() - - diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp deleted file mode 100644 index 0101107e2..000000000 --- a/src/gui/surfaceInput.cpp +++ /dev/null @@ -1,159 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Handles surface inputs for the domain - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "surfaceInput.h" - -/** - * \brief Construct a widget for suface input data - * - * \param parent parent widget - */ -surfaceInput::surfaceInput(QWidget *parent) : QWidget(parent) -{ -#ifdef NINJAFOAM - //make ninjafoam case input controls - foamCaseGroupBox = new QGroupBox(tr("Use Existing Case")); - - foamCaseLineEdit = new QLineEdit; - foamCaseLineEdit->setReadOnly(true); - - foamCaseOpenToolButton = new QToolButton; - foamCaseOpenToolButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - foamCaseOpenToolButton->setText(tr("Open Case")); - foamCaseOpenToolButton->setIcon(QIcon(":folder_page.png")); -#endif //NINJAFOAM - - //make INPUT input controls - inputFileGroupBox = new QGroupBox(tr("Elevation Input File")); - - inputFileLineEdit = new QLineEdit; - inputFileLineEdit->setReadOnly(true); - - inputFileOpenToolButton = new QToolButton; - inputFileOpenToolButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - inputFileOpenToolButton->setText(tr("Open File")); - inputFileOpenToolButton->setIcon(QIcon(":folder_page.png")); - - downloadDEMButton = new QToolButton; - downloadDEMButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - downloadDEMButton->setText(tr("Download File")); - downloadDEMButton->setIcon(QIcon(":server_go.png")); - -#ifdef NINJAFOAM - foamCaseLayout = new QHBoxLayout; - foamCaseLayout->addWidget(foamCaseLineEdit); - foamCaseLayout->addWidget(foamCaseOpenToolButton); -#endif - - inputLayout = new QHBoxLayout; - inputLayout->addWidget(inputFileLineEdit); - inputLayout->addWidget(inputFileOpenToolButton); - inputLayout->addWidget(downloadDEMButton); - - //roughness combo box in a group - roughnessGroupBox = new QGroupBox(tr("Vegetation")); - - roughnessComboBox = new QComboBox; - roughnessComboBox->addItem("Grass"); - roughnessComboBox->addItem("Brush"); - roughnessComboBox->addItem("Trees"); - roughnessComboBox->setDisabled(true); - - roughnessLabel = new QLabel; - roughnessLabel->setText("Vegetation Data Set Using LCP File"); - roughnessLabel->setEnabled(true); - roughnessLabel->setVisible(false); - - roughnessLayout = new QHBoxLayout; - roughnessLayout->addWidget(roughnessComboBox); - roughnessLayout->addWidget(roughnessLabel); - roughnessLayout->addStretch(); - - //mesh resolution controls - meshResGroupBox = new QGroupBox(tr("Mesh Resolution")); - - meshResComboBox = new QComboBox; - meshResComboBox->addItem(tr("Coarse")); - meshResComboBox->addItem(tr("Medium")); - meshResComboBox->addItem(tr("Fine")); - meshResComboBox->addItem(tr("Custom")); - meshResComboBox->insertSeparator(3); - meshResComboBox->setCurrentIndex(2); - meshResComboBox->setEnabled(false); - - meshResDoubleSpinBox = new QDoubleSpinBox; - meshResDoubleSpinBox->setRange(1, 50000); - meshResDoubleSpinBox->setSingleStep(100.0); - meshResDoubleSpinBox->setDecimals(2); - meshResDoubleSpinBox->setAccelerated(true); - meshResDoubleSpinBox->setValue(200); - meshResDoubleSpinBox->setEnabled(false); - - meshMetersRadioButton = new QRadioButton(tr("Meters")); - meshMetersRadioButton->setChecked(true); - - meshFeetRadioButton = new QRadioButton(tr("Feet")); - - meshResLayout = new QHBoxLayout; - meshResLayout->addWidget(meshResComboBox); - meshResLayout->addWidget(meshResDoubleSpinBox); - meshResLayout->addWidget(meshMetersRadioButton); - meshResLayout->addWidget(meshFeetRadioButton); - meshResLayout->addStretch(); - - timeZoneGroupBox = new QGroupBox("Time Zone", this); - timeZone = new timeZoneWidget(this); - timeZoneLayout = new QHBoxLayout; - timeZoneLayout->addWidget(timeZone); - timeZoneLayout->addStretch(); - - //set layouts to boxes -#ifdef NINJAFOAM - foamCaseGroupBox->setLayout(foamCaseLayout); -#endif - inputFileGroupBox->setLayout(inputLayout); - roughnessGroupBox->setLayout(roughnessLayout); - meshResGroupBox->setLayout(meshResLayout); - timeZoneGroupBox->setLayout(timeZoneLayout); - - //main layout - mainLayout = new QVBoxLayout; -#ifdef NINJAFOAM - mainLayout->addWidget(foamCaseGroupBox); - foamCaseGroupBox->setHidden( true ); -#endif - mainLayout->addWidget(inputFileGroupBox); - mainLayout->addWidget(roughnessGroupBox); - mainLayout->addWidget(meshResGroupBox); - mainLayout->addWidget(timeZoneGroupBox); - mainLayout->addStretch(); - - setLayout(mainLayout); -} - diff --git a/src/gui/surfaceInput.h b/src/gui/surfaceInput.h deleted file mode 100644 index 9df5e737c..000000000 --- a/src/gui/surfaceInput.h +++ /dev/null @@ -1,98 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Handles surface inputs for the domain - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef SURFACEINPUT_H_ -#define SURFACEINPUT_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "WindNinjaInputs.h" -#include "timeZoneWidget.h" -#include "WidgetDownloadDEM.h" - -class surfaceInput : public QWidget -{ - Q_OBJECT - -public: - surfaceInput(QWidget *parent = 0); - -#ifdef NINJAFOAM - QGroupBox *foamCaseGroupBox; - QLineEdit *foamCaseLineEdit; - QToolButton *foamCaseOpenToolButton; -#endif - - QGroupBox *inputFileGroupBox; - - QLineEdit *inputFileLineEdit; - QToolButton *inputFileOpenToolButton; - QToolButton *downloadDEMButton; - - QGroupBox *roughnessGroupBox; - QComboBox *roughnessComboBox; - QLabel *roughnessLabel; - - QGroupBox *meshResGroupBox; - QComboBox *meshResComboBox; - QDoubleSpinBox *meshResDoubleSpinBox; - QRadioButton *meshMetersRadioButton, *meshFeetRadioButton; - - QGroupBox *timeZoneGroupBox; - timeZoneWidget *timeZone; - -#ifdef NINJAFOAM - QHBoxLayout *foamCaseLayout; -#endif - QHBoxLayout *inputLayout; - QHBoxLayout *roughnessLayout; - QHBoxLayout *roughnessLabelLayout; - QHBoxLayout *meshResLayout; - QHBoxLayout *timeZoneLayout; - QVBoxLayout *mainLayout; - -signals: - void writeToMainConsole(QString message); - -}; - -#endif /* SURFACEINPUT_H_ */ - diff --git a/src/gui/timeZoneWidget.cpp b/src/gui/timeZoneWidget.cpp deleted file mode 100644 index 2c8f57e78..000000000 --- a/src/gui/timeZoneWidget.cpp +++ /dev/null @@ -1,286 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja - * Purpose: Widget for time zone access using boost local_time. - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "timeZoneWidget.h" - -extern boost::local_time::tz_database globalTimeZoneDB; - -/** - * Construct a timeZoneWidget that relies on boost for time zone - * operations - * - * @param parent parent widget - */ -timeZoneWidget::timeZoneWidget( QWidget *parent ) : QWidget( parent ) -{ - tzComboBox = new QComboBox( this ); - tzCheckBox = new QCheckBox( tr( "Show All Zones" ), this ); - - tzDetailLabel = new QLabel( tr( "\n\n\n\n" ), this ); - tzDetailCheckBox = new QCheckBox( tr( "Display time zone details" ), this ); - - tzLayout = new QHBoxLayout(); - tzLayout->addWidget( tzComboBox ); - tzLayout->addWidget( tzCheckBox ); - tzLayout->addStretch(); - - layout = new QVBoxLayout(); - layout->addLayout( tzLayout ); - layout->addWidget( tzDetailCheckBox ); - layout->addWidget( tzDetailLabel ); - - setLayout( layout ); - - loadTimeZones(); - - createConnections(); - - tzCheckBox->setChecked( true ); - tzCheckBox->setChecked( false ); -} - -/** - * Destructor - * - */ -timeZoneWidget::~timeZoneWidget() -{ - -} - -/** - * Create connections to update the widgets - * - */ -void timeZoneWidget::createConnections() -{ - //connect the check box to toggle all time zones - connect( tzCheckBox, SIGNAL( toggled( bool ) ), - this, SLOT( toggleAllTimeZones( bool ) ) ); - - //connect the detail label visibility to the checkbox - connect( tzDetailCheckBox, SIGNAL( toggled( bool ) ), - this, SLOT( showDetails( bool ) ) ); - - //connect the combo box to the label text - connect( tzComboBox, SIGNAL( currentIndexChanged( int ) ), - this, SLOT( updateDetailString( int ) ) ); -} - -/** - * Load time zone information into the QStringList. - * From Boost Docs: - * @verbatim - Parameter is path to a time zone spec csv file (see Data File Details for - details on the contents of this file). This function populates the database - with time zone records found in the zone spec file. A - local_time::data_not_accessible exception will be thrown if - given zonespec file cannot be found. - local_time::bad_field_count exception will be thrown if the - number of fields in given zonespec file is incorrect. - @endverbatim - * - * - */ -void timeZoneWidget::loadTimeZones() -{ - std::vector tz_list = globalTimeZoneDB.region_list(); - for (unsigned int i = 0; i < tz_list.size(); i++) { - tzStringList << QString::fromStdString(tz_list[i]); - } -} -/** - * Load the default time zones for US. '~' represents standard zones. - * - * - ~America/Anchorage - * - America/Boise - * - ~America/Chicago - * - ~America/Denver - * - America/Detroit - * - America/Indiana/Indianapolis - * - America/Indiana/Knox - * - America/Indiana/Marengo - * - America/Indiana/Vevay - * - America/Indianapolis - * - America/Juneau - * - America/Kentucky/Louisville - * - America/Kentucky/Monticello - * - ~America/Los_Angeles - * - America/Louisville - * - ~America/New_York - * - America/Nome - * - America/North_Dakota/Center - * - ~America/Phoenix - * - ~Pacific/Honolulu - * - */ -void timeZoneWidget::loadDefaultTimeZones() -{ - QStringList tz_list, display_list; - tz_list << "America/Anchorage" - << "America/Boise" - << "America/Chicago" - << "America/Denver" - << "America/Detroit" - << "America/Indiana/Indianapolis" - << "America/Indiana/Knox" - << "America/Indiana/Marengo" - << "America/Indiana/Vevay" - << "America/Indianapolis" - << "America/Juneau" - << "America/Kentucky/Louisville" - << "America/Kentucky/Monticello" - << "America/Los_Angeles" - << "America/Louisville" - << "America/New_York" - << "America/Nome" - << "America/North_Dakota/Center" - << "America/Phoenix" - << "Pacific/Honolulu"; - display_list << "America/Anchorage(Alaska Time)" - << "America/Boise" - << "America/Chicago(Central Time)" - << "America/Denver(Mountain Time)" - << "America/Detroit" - << "America/Indiana/Indianapolis" - << "America/Indiana/Knox" - << "America/Indiana/Marengo" - << "America/Indiana/Vevay" - << "America/Indianapolis" - << "America/Juneau" - << "America/Kentucky/Louisville" - << "America/Kentucky/Monticello" - << "America/Los_Angeles(Pacific Time)" - << "America/Louisville" - << "America/New_York(Eastern Time)" - << "America/Nome" - << "America/North_Dakota/Center" - << "America/Phoenix" - << "Pacific/Honolulu(Hawaii Time)"; - - if( tz_list.size() != display_list.size() ) - qDebug() << "diurnalInput::loadDefaultTimeZones(): Wrong list size."; - - for( int i = 0;i < tz_list.size();i++ ) { - /* - * Check and make sure it's valid and on the boost list - */ - if( !tzStringList.contains( tz_list[i] ) ) - qDebug() << "Time Zone does not exist!" << tz_list[i]; - else - tzComboBox->addItem( display_list[i], - QVariant( tz_list[i] ) ); - } -} - -/** - * Slot to show all time zones or just US time zones - * - * @param showAll show all the timezones - */ -void timeZoneWidget::toggleAllTimeZones( bool showAll ) -{ - QString currentTimeZone = tzComboBox->currentText().split("(")[0]; - - if( showAll ) { - tzComboBox->clear(); - for( int i = 0;i < tzStringList.size();i++ ) { - tzComboBox->addItem( tzStringList[i], - QVariant( tzStringList[i] ) ); - } - } - else if( !showAll ) { - tzComboBox->clear(); - loadDefaultTimeZones(); - } - int index = 0; - if( !currentTimeZone.isEmpty() ) - { - index = tzComboBox->findText( currentTimeZone, Qt::MatchStartsWith ); - if( index < 0 ) - { - index = 0; - } - } - tzComboBox->setCurrentIndex( index ); -} - -/** - * Slot to update the description string for the time zone - * - * @param index combobox index after change - */ -void timeZoneWidget::updateDetailString( int index ) -{ - QString tzText = tzComboBox->itemData( index ).toString(); - emit tzChanged( tzText ); - if( tzDetailCheckBox->isChecked() == false ) - return; - else if( tzComboBox->count() == 0 ) - return; - else if( tzText.isEmpty() ) - return; - else { - blt::time_zone_ptr tz; - tz = globalTimeZoneDB.time_zone_from_region( tzText.toStdString() ); - bool has_dst = tz->has_dst(); - QString text = "Standard Name:\t\t"; - text += QString::fromStdString( tz->std_zone_name() ); - text += "\nDaylight Name:\t\t"; - if( has_dst ) - text += QString::fromStdString( tz->dst_zone_name() ) + "\n"; - else - text += "N/A\n"; - text += "Standard Offset from UTC:\t"; - text += QString::fromStdString( bpt::to_simple_string(tz->base_utc_offset() ) ); - text += "\nDaylight Offset from UTC:\t"; - if( has_dst ) { - bpt::time_duration d; - d = tz->base_utc_offset() + tz->dst_offset(); - text += QString::fromStdString( bpt::to_simple_string( d ) ); - } - else - text += "N/A"; - - tzDetailLabel->setText( text ); - } -} - -/** - * Slot to show or hide the detailed description of the time zone - * - * @param show show the label - */ -void timeZoneWidget::showDetails( bool show ) -{ - if( show ) - return updateDetailString( tzComboBox->currentIndex() ); - else - tzDetailLabel->setText( "\n" ); -} diff --git a/src/gui/timeZoneWidget.h b/src/gui/timeZoneWidget.h deleted file mode 100644 index c89683f3d..000000000 --- a/src/gui/timeZoneWidget.h +++ /dev/null @@ -1,86 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja - * Purpose: Widget for time zone access using boost local_time. - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef TIME_ZONE_WIDGET_H -#define TIME_ZONE_WIDGET_H - -#include -#include -#include -#include -#include - -#include -#include - -#include - -#ifndef Q_MOC_RUN -#include "boost/date_time/local_time/local_time.hpp" -#include "boost/date_time/posix_time/posix_time_types.hpp" -#endif - -namespace blt = boost::local_time; -namespace bpt = boost::posix_time; - -#include "ninjaException.h" -#include "ninja_conv.h" - -class timeZoneWidget : public QWidget -{ - Q_OBJECT - - public: - timeZoneWidget( QWidget *parent = 0 ); - ~timeZoneWidget(); - QComboBox *tzComboBox; /**< Select time zone */ - QCheckBox *tzCheckBox; /**< Display all zones, or US zones */ - QLabel *tzDetailLabel; /**< Show timezone details */ - QCheckBox *tzDetailCheckBox; /**< Toggle details */ - QStringList tzStringList; /**< List of zones read from boost */ - - void loadTimeZones(); - void loadDefaultTimeZones(); - - QHBoxLayout *tzLayout; - QVBoxLayout *layout; - - public slots: - void toggleAllTimeZones( bool showAll ); - private slots: - void updateDetailString( int index ); - void showDetails( bool show ); - private: - void createConnections(); - - signals: - void tzChanged( QString tz ); -}; - -#endif /* TIME_ZONE_WIDGET_H */ diff --git a/src/gui/ui/CMakeLists.txt b/src/gui/ui/CMakeLists.txt deleted file mode 100644 index 66c1a3fea..000000000 --- a/src/gui/ui/CMakeLists.txt +++ /dev/null @@ -1,40 +0,0 @@ -cmake_minimum_required(VERSION 3.1.0) - -# Find includes in corresponding build directories -set(CMAKE_INCLUDE_CURRENT_DIR ON) -# Instruct CMake to run moc automatically when needed -set(CMAKE_AUTOMOC ON) -# Create code from a list of Qt designer ui files -set(CMAKE_AUTOUIC ON) - -# Find the QtWidgets library -find_package(Qt5Core CONFIG REQUIRED) -find_package(Qt5Widgets CONFIG REQUIRED) -find_package(Qt5Gui CONFIG REQUIRED) - -include_directories( - ${Qt5Core_INCLUDE_DIRS} - ${Qt5Widgets_INCLUDE_DIRS} - ${Qt5Gui_INCLUDE_DIRS} - ${GDAL_INCLUDE_DIR} - ) - -add_definitions(${Qt5Widgets_DEFINITIONS}) - -qt5_add_resources(NINJA_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/windninja.qrc) - -# Populate a CMake variable with the sources -set(NINJA_GUI_SRCSXXX - mainwindow.ui - mainwindow.cpp - main.cpp -) -# Tell CMake to create the helloworld executable -add_executable(windninja5 ${NINJA_GUI_SRCSXXX} ${NINJA_RESOURCES}) -# Use the Widgets module from Qt 5 -target_link_libraries(windninja5 - ${Qt5Core_LIBRARIES} - ${Qt5Widgets_LIBRARIES} - ${Qt5Gui_LIBRARIES} - ${GDAL_LIBRARIES} - ) diff --git a/src/gui/ui/main.cpp b/src/gui/ui/main.cpp deleted file mode 100644 index 0a1275f6a..000000000 --- a/src/gui/ui/main.cpp +++ /dev/null @@ -1,11 +0,0 @@ - -#include -#include "mainwindow.h" - -int main(int argc, char **argv) { - QApplication app(argc, argv); - - MainWindow w; - w.show(); - return app.exec(); -} diff --git a/src/gui/ui/mainwindow.cpp b/src/gui/ui/mainwindow.cpp deleted file mode 100644 index aa5fd8f4a..000000000 --- a/src/gui/ui/mainwindow.cpp +++ /dev/null @@ -1,140 +0,0 @@ -#include "mainwindow.h" -#include "ui_mainwindow.h" - -MainWindow::MainWindow(QWidget *parent) : - QMainWindow(parent), - ui(new Ui::MainWindow) { - ui->setupUi(this); - - init(); -} - -MainWindow::~MainWindow() { - delete ui; -} - -void MainWindow::init() { - GDALAllRegister(); - setIcons(); - setConnections(); - OGRFormats(); - - // Set the number of cores available. We only have to do this once - int cores = QThread::idealThreadCount(); - ui->availCoreLabel->setText("Available Processors: " + QString::number(cores)); - ui->availCoreSpinBox->setMaximum(cores); -} - -void MainWindow::setIcons() { - ui->openElevButton->setIcon(QIcon(":icons/open.svg")); - ui->downloadElevButton->setIcon(QIcon(":icons/save-as.svg")); - - ui->addDomainRunButton->setIcon(QIcon(":icons/add.svg")); - - ui->downloadForecastButton->setIcon(QIcon(":icons/save-as.svg")); - ui->openForecastButton->setIcon(QIcon(":icons/open.svg")); -} - -void MainWindow::setConnections() { - connect(ui->openElevButton, SIGNAL(clicked()), this, SLOT(openElevation())); - connect(ui->meshChoiceCombo, SIGNAL(currentIndexChanged(int)), - this, SLOT(updateMesh(int))); - connect(ui->treeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), - this, SLOT(updateStack(QTreeWidgetItem*, QTreeWidgetItem*))); -} - -void MainWindow::OGRFormats() { - GDALDriverH hDrv = 0; - const char *pszV = 0; - const char *pszC = 0; - QString longname, shortname, ext; - // Requires GDAL 2.0+ - for(int i = 0; i < GDALGetDriverCount(); i++) { - hDrv = GDALGetDriver(i); - assert(hDrv); - /* - ** TODO(kyle): We need to define a short list of 'normal' vector - ** drivers, with an option to show all writable vector formats. This - ** might be handled by newer versions of GDALOutput() stuff. There may - ** be more restrictions that need to be in place here as well (field - ** types, etc. - */ - pszV = GDALGetMetadataItem(hDrv, GDAL_DCAP_VECTOR, NULL); - pszC = GDALGetMetadataItem(hDrv, GDAL_DCAP_CREATE, NULL); - if(pszV && CPLTestBoolean(pszV) && pszC && CPLTestBoolean(pszC)) { - longname = QString(GDALGetDriverLongName(hDrv)); - shortname = QString(GDALGetDriverShortName(hDrv)); - ext = QString(GDALGetMetadataItem(hDrv, "", GDAL_DMD_EXTENSION)); - //qDebug() << longname << "," << shortname << "," << ext; - ui->ogrFormatCombo->addItem(longname, shortname); - } - } -} - -void MainWindow::openElevation() { - //ui->elevEdit->clear(); - //ui->vegCombo->setEnabled(true); - QString file = QFileDialog::getOpenFileName(this, - tr("Open Elevation Input File"), - "./", - tr("Elevation Input Files (*.asc *.lcp *.tif *.img)")); - if(file == "") { - return; - } - // Check file via API - QFileInfo info = QFileInfo(file); - GDALDatasetH hDS = GDALOpen(file.toLocal8Bit().data(), GA_ReadOnly); - if(hDS == NULL) { - return; - } - GDALDriverH hDrv = GDALGetDatasetDriver(hDS); - if(hDrv == NULL) { - GDALClose(hDS); - return; - } - if(EQUAL(GDALGetDriverShortName(hDrv), "LCP")) { - ui->vegCombo->setDisabled(true); - } - ui->elevEdit->setText(info.fileName()); - GDALClose(hDS); -} - -void MainWindow::updateMesh(int index) { - ui->meshSpinBox->setEnabled(index == 3); - ui->meshUnitCombo->setEnabled(index == 3); -} - -void MainWindow::updateStack(QTreeWidgetItem *current, QTreeWidgetItem *previous) { - QString name = current->text(0); - if(name == "Solver") { - ui->stackedWidget->setCurrentIndex(0); - } else if(name == "Site Information") { - ui->stackedWidget->setCurrentIndex(1); - } else if(name == "Initialization") { - ui->stackedWidget->setCurrentIndex(2); - } else if(name == "Output") { - ui->stackedWidget->setCurrentIndex(3); - } else if(name == "Run") { - ui->stackedWidget->setCurrentIndex(4); - } else { - assert(0); - } -} - - - - - - - - - - - - - - - - - - diff --git a/src/gui/ui/mainwindow.h b/src/gui/ui/mainwindow.h deleted file mode 100644 index 375a0c029..000000000 --- a/src/gui/ui/mainwindow.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef MAINWINDOW_H -#define MAINWINDOW_H - -#include - -#include - -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace Ui { -class MainWindow; -} - -const int defaultMsgLength = 2500; - -class MainWindow : public QMainWindow -{ - Q_OBJECT - -public: - explicit MainWindow(QWidget *parent = 0); - ~MainWindow(); - -private: - Ui::MainWindow *ui; - - QStringList ogrFormats; - - void init(); - - void setIcons(); - void setConnections(); - void OGRFormats(); - -public slots: - void updateStack(QTreeWidgetItem *, QTreeWidgetItem *); - void openElevation(); - void updateMesh(int index); -}; - -#endif // MAINWINDOW_H diff --git a/src/gui/ui/mainwindow.ui b/src/gui/ui/mainwindow.ui deleted file mode 100644 index 8becf6b95..000000000 --- a/src/gui/ui/mainwindow.ui +++ /dev/null @@ -1,857 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 563 - 641 - - - - WindNinja - - - - - - - 1 - - - - WindNinja - - - - - Solver - - - - - Site Information - - - - - Initialization - - - - - Output - - - - - Run - - - - - - - - 4 - - - - - - - Conservation of Mass - - - true - - - - - - - Conservation of Mass && Momentum - - - - - - - Diurnal - - - - - - - Stability - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - - - Elevation Data - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - true - - - - - - - Open... - - - Qt::ToolButtonTextBesideIcon - - - - - - - Download... - - - Qt::ToolButtonTextBesideIcon - - - - - - - - - - - Time Zone - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - Show all zones - - - - - - - - - - - Vegetation - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - Grass - - - - - Brush - - - - - Trees - - - - - - - - - - - - Mesh Resolution - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - Coarse - - - - - Medium - - - - - Fine - - - - - Custom... - - - - - - - - false - - - - - - - false - - - - meters - - - - - feet - - - - - - - - - - Qt::Vertical - - - - 20 - 257 - - - - - - - - - - - - - - Initialization Method - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - Domain Averaged - - - - - Point - - - - - Weather Model - - - - - - - - - - 0 - - - - - - - - - Wind Height - - - - - - - 500.000000000000000 - - - 20.000000000000000 - - - - - - - - Feet - - - - - Meters - - - - - - - - - - - - Wind Speed Units - - - - - - - - Miles/Hour - - - - - Kilometers/Hour - - - - - Meters/Second - - - - - - - - - - - - Temperature Units - - - - - - - - Fahrenheit - - - - - Celsius - - - - - - - - - - - - Speed - - - - - - - + - - - - - - - - - - - - - - - - - - - Cloud Cover - - - - - - - Air Temp. - - - - - - - Time - - - - - - - - - - Direction - - - - - - - - - - - - - - - - - - - Start Time - - - - - - - - - - End Time - - - - - - - - - - - - - - Source - - - - - - - - - - Download - - - Qt::ToolButtonTextBesideIcon - - - - - - - - - - - Forecast File - - - - - - - - - - Open... - - - Qt::ToolButtonTextBesideIcon - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - - - - - - - Output Format - - - - - - - - - - - - Resolution - - - - - - Use Mesh Resolution - - - true - - - - - - - - - false - - - - - - - false - - - - meters - - - - - feet - - - - - - - - - - - - - Specify creation options - - - - - - - false - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Add Output - - - Qt::ToolButtonTextBesideIcon - - - - - - - - - - - - - Available Processors: 1 - - - - - - - - - Number of Processors - - - - - - - 1 - - - - - - - - - false - - - Open Output Directory - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - - - 0 - 0 - 563 - 24 - - - - - &File - - - - - &Tools - - - - - &Help - - - - - - - - - - - - initCombo - currentIndexChanged(int) - initStack - setCurrentIndex(int) - - - 468 - 184 - - - 281 - 350 - - - - - createOptCheck - clicked(bool) - createOptList - setEnabled(bool) - - - 281 - 322 - - - 281 - 402 - - - - - diff --git a/src/gui/ui/windninja.qrc b/src/gui/ui/windninja.qrc deleted file mode 100644 index 6ba28ce69..000000000 --- a/src/gui/ui/windninja.qrc +++ /dev/null @@ -1,9 +0,0 @@ - - - icons/scalable/actions/document-new.svg - icons/scalable/actions/document-open.svg - icons/scalable/actions/document-save.svg - icons/scalable/actions/document-save-as.svg - icons/scalable/actions/list-add.svg - - diff --git a/src/gui/vec3f.cpp b/src/gui/vec3f.cpp deleted file mode 100644 index 02869fe39..000000000 --- a/src/gui/vec3f.cpp +++ /dev/null @@ -1,167 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: OpenGL 3d vector class - * Author: See below - * - ****************************************************************************** - * - * SEE COPYRIGHT BELOW - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -/* Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above notice and this permission notice shall be included in all copies - * or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/* File for "Terrain" lesson of the OpenGL tutorial on - * www.videotutorialsrock.com - */ - - - -#include - -#include "vec3f.h" - - - -Vec3f::Vec3f() { - -} - -Vec3f::Vec3f(float x, float y, float z) { - v[0] = x; - v[1] = y; - v[2] = z; -} - -float &Vec3f::operator[](int index) { - return v[index]; -} - -float Vec3f::operator[](int index) const { - return v[index]; -} - -Vec3f Vec3f::operator*(float scale) const { - return Vec3f(v[0] * scale, v[1] * scale, v[2] * scale); -} - -Vec3f Vec3f::operator/(float scale) const { - return Vec3f(v[0] / scale, v[1] / scale, v[2] / scale); -} - -Vec3f Vec3f::operator+(const Vec3f &other) const { - return Vec3f(v[0] + other.v[0], v[1] + other.v[1], v[2] + other.v[2]); -} - -Vec3f Vec3f::operator-(const Vec3f &other) const { - return Vec3f(v[0] - other.v[0], v[1] - other.v[1], v[2] - other.v[2]); -} - -Vec3f Vec3f::operator-() const { - return Vec3f(-v[0], -v[1], -v[2]); -} - -const Vec3f &Vec3f::operator*=(float scale) { - v[0] *= scale; - v[1] *= scale; - v[2] *= scale; - return *this; -} - -const Vec3f &Vec3f::operator/=(float scale) { - v[0] /= scale; - v[1] /= scale; - v[2] /= scale; - return *this; -} - -const Vec3f &Vec3f::operator+=(const Vec3f &other) { - v[0] += other.v[0]; - v[1] += other.v[1]; - v[2] += other.v[2]; - return *this; -} - -const Vec3f &Vec3f::operator-=(const Vec3f &other) { - v[0] -= other.v[0]; - v[1] -= other.v[1]; - v[2] -= other.v[2]; - return *this; -} - -float Vec3f::magnitude() const { - return std::sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); -} - -float Vec3f::magnitudeSquared() const { - return v[0] * v[0] + v[1] * v[1] + v[2] * v[2]; -} - -Vec3f Vec3f::normalize() const { - float m = std::sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); - return Vec3f(v[0] / m, v[1] / m, v[2] / m); -} - -float Vec3f::dot(const Vec3f &other) const { - return v[0] * other.v[0] + v[1] * other.v[1] + v[2] * other.v[2]; -} - -Vec3f Vec3f::cross(const Vec3f &other) const { - return Vec3f(v[1] * other.v[2] - v[2] * other.v[1], - v[2] * other.v[0] - v[0] * other.v[2], - v[0] * other.v[1] - v[1] * other.v[0]); -} - -Vec3f operator*(float scale, const Vec3f &v) { - return v * scale; -} - -std::ostream &operator<<(std::ostream &output, const Vec3f &v) { - std::cout << '(' << v[0] << ", " << v[1] << ", " << v[2] << ')'; - return output; -} - - - - - - - - - diff --git a/src/gui/vec3f.h b/src/gui/vec3f.h deleted file mode 100644 index 1beb1838a..000000000 --- a/src/gui/vec3f.h +++ /dev/null @@ -1,91 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: OpenGL 3d vector class - * Author: See below - * - ****************************************************************************** - * - * SEE COPYRIGHT BELOW - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -/* Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above notice and this permission notice shall be included in all copies - * or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -/* File for "Terrain" lesson of the OpenGL tutorial on - * www.videotutorialsrock.com - */ - -#ifndef VEC3F_H_INCLUDED -#define VEC3F_H_INCLUDED - -#include -#include - -class Vec3f { - private: - float v[3]; - public: - Vec3f(); - Vec3f(float x, float y, float z); - - float &operator[](int index); - float operator[](int index) const; - - Vec3f operator*(float scale) const; - Vec3f operator/(float scale) const; - Vec3f operator+(const Vec3f &other) const; - Vec3f operator-(const Vec3f &other) const; - Vec3f operator-() const; - - const Vec3f &operator*=(float scale); - const Vec3f &operator/=(float scale); - const Vec3f &operator+=(const Vec3f &other); - const Vec3f &operator-=(const Vec3f &other); - - float magnitude() const; - float magnitudeSquared() const; - Vec3f normalize() const; - float dot(const Vec3f &other) const; - Vec3f cross(const Vec3f &other) const; -}; - -Vec3f operator*(float scale, const Vec3f &v); -std::ostream &operator<<(std::ostream &output, const Vec3f &v); - -#endif diff --git a/src/gui/vtkOutput.cpp b/src/gui/vtkOutput.cpp deleted file mode 100644 index 18c551a9d..000000000 --- a/src/gui/vtkOutput.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/****************************************************************************** - * toggle nerdtree on/off - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: vtk output selection widget - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "vtkOutput.h" - -vtkOutput::vtkOutput(QWidget *parent) : QWidget(parent) -{ - vtkGroupBox = new QGroupBox(tr("Create VTK Files (*.vtk)"), this); - vtkGroupBox->setCheckable(true); - vtkGroupBox->setChecked(false); - - vtkLabel = new QLabel(tr(" Write VTK surface and volume files\n" - " \n" - " Note that *vtk files are for advanced users and \n" - " are rarely used by fire managers/modelers.\n" - ), this); - - //writeVolumeCheckBox = new QCheckBox(tr("Volume File"), this); - //writeSurfaceCheckBox = new QCheckBox(tr("Surface File"), this); - - //vtkLayout = new QVBoxLayout; - //vtkLayout->addWidget(vtkLabel); - //vtkLayout->addWidget(writeVolumeCheckBox); - //vtkLayout->addWidget(writeSurfaceCheckBox); - //vtkLayout->addStretch(); - //vtkLayout->addWidget(vtkWarningLabel); - //vtkGroupBox->setLayout(vtkLayout); - - layout = new QVBoxLayout; - - layout->addWidget(vtkGroupBox); - layout->addWidget(vtkLabel); - layout->addStretch(); - setLayout(layout); - //layout->addStretch(); -} - diff --git a/src/gui/vtkOutput.h b/src/gui/vtkOutput.h deleted file mode 100644 index 417fe1559..000000000 --- a/src/gui/vtkOutput.h +++ /dev/null @@ -1,55 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: vtk output selection widget - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef VTKOUTPUT_H -#define VTKOUTPUT_H - -#include -#include -#include -#include -#include - -class vtkOutput : public QWidget -{ - Q_OBJECT - - public: - vtkOutput(QWidget *parent = 0); - - QGroupBox *vtkGroupBox; - QLabel *vtkLabel; - QCheckBox *writeVolumeCheckBox; - QCheckBox *writeSurfaceCheckBox; - - QVBoxLayout *vtkLayout; - QVBoxLayout *layout; -}; - -#endif /* VTKOUTPUT_H */ diff --git a/src/gui/weatherModel.cpp b/src/gui/weatherModel.cpp deleted file mode 100644 index 15506559a..000000000 --- a/src/gui/weatherModel.cpp +++ /dev/null @@ -1,769 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Client to download and access weather data - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "weatherModel.h" - -/** - * Constructor - * - * @param parent parent widget for the widget - */ -weatherModel::weatherModel(QWidget *parent) : QWidget(parent) -{ - weatherGroupBox = new QGroupBox( tr( "Weather Model Initialization" ), - this ); - weatherGroupBox->setCheckable( true ); - weatherGroupBox->setChecked(false); - - downloadGroupBox = new QGroupBox(tr("Download Weather Data")); - - modelComboBox = new QComboBox(this); - modelComboBox->setDuplicatesEnabled(false); - - hourSpinBox = new QSpinBox(this); - hourSpinBox->setRange(3, 84); - hourSpinBox->setSingleStep(1); - hourSpinBox->setSuffix(" hours"); - hourSpinBox->setValue(3); - hourSpinBox->setAccelerated( true ); - //hourSpinBox->setVisible( false ); - - downloadToolButton = new QToolButton(this); - downloadToolButton->setText(tr("Download data")); - downloadToolButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - downloadToolButton->setIcon(QIcon(":server_go.png")); - - //QDirModel will be deprecated in 4.7, use QFileSystemModel if upgrading - model = new QDirModel(this); - model->setReadOnly(true); - model->setSorting( QDir::Time ); - - forecastListLabel = new QLabel( this ); - forecastListLabel->setText( "Downloaded forecasts" ); - - treeView = new QTreeView(this); - treeView->setModel(model); - treeView->header()->setStretchLastSection(true); - treeView->setAnimated(true); - treeView->setColumnHidden(1, true); - treeView->setColumnHidden(2, true); - //treeView->setColumnHidden(3, true); - //treeView->setDragDropMode( QAbstractItemView::DragOnly ); - treeView->setAlternatingRowColors( false ); - treeView->setSelectionBehavior(QAbstractItemView::SelectRows); - - timeGroupBox = new QGroupBox(tr("Select specific time steps"), this); - timeGroupBox->setCheckable(true); - timeGroupBox->setChecked(false); - - listView = new QListView(this); - timeModel = new QStringListModel(this); - listView->setModel(timeModel); - // Extended selection is clear on click, unless ctrl or shift is held. - // listView->setSelectionMode(QAbstractItemView::ExtendedSelection); - // Multi selection is click everything on off, no modifiers - listView->setSelectionMode(QAbstractItemView::MultiSelection); - listView->setEditTriggers(QAbstractItemView::NoEditTriggers); - - selectAllTimesButton = new QToolButton(this); - selectAllTimesButton->setText(tr("Select All")); - selectAllTimesButton->setToolTip(tr("Select all forecast times")); - selectAllTimesButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - - selectNoTimesButton = new QToolButton(this); - selectNoTimesButton->setText(tr("Select None")); - selectNoTimesButton->setToolTip(tr("Select no forecast times")); - selectNoTimesButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - - statusLabel = new QLabel(this); - statusLabel->setText(tr("Ready.")); - - refreshToolButton = new QToolButton(this); - refreshToolButton->setText(tr("Refresh Forecast List")); - refreshToolButton->setIcon(QIcon(":arrow_rotate_clockwise.png")); - refreshToolButton->setToolTip(tr("Refresh the forecast listing.")); - refreshToolButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - - startDateLabel = new QLabel(this); - endDateLabel = new QLabel(this); - - startTime = new QDateTimeEdit(this); - startTime->setDisplayFormat("MM/dd/yyyy HH:00"); - startTime->setCalendarPopup(true); - - stopTime = new QDateTimeEdit(this); - stopTime->setDisplayFormat("MM/dd/yyyy HH:00"); - stopTime->setCalendarPopup(true); - - updatePastcastTimesAndLabels(); - - startDateLabel->setVisible(false); - endDateLabel->setVisible(false); - startTime->setVisible(false); - stopTime->setVisible(false); - - QVBoxLayout *startTimeLayout = new QVBoxLayout; - startTimeLayout->addWidget(startDateLabel); - startTimeLayout->addWidget(startTime); - - QVBoxLayout *stopTimeLayout = new QVBoxLayout; - stopTimeLayout->addWidget(endDateLabel); - stopTimeLayout->addWidget(stopTime); - - QHBoxLayout *dateTimeLayout = new QHBoxLayout; - dateTimeLayout->addLayout(startTimeLayout); - dateTimeLayout->addLayout(stopTimeLayout); - - - connect(downloadToolButton, SIGNAL(clicked()), - this, SLOT(getData())); - connect(refreshToolButton, SIGNAL(clicked()), - this, SLOT(checkForModelData())); - connect(treeView, SIGNAL(pressed(const QModelIndex &)), - this, SLOT(displayForecastTime(const QModelIndex &))); - - //clear the selection on uncheck of group box - connect(weatherGroupBox, SIGNAL(toggled(bool)), - this, SLOT(unselectForecast(bool))); - - //change time for given model - connect(modelComboBox, SIGNAL(currentIndexChanged(int)), - this, SLOT(setTimeLimits(int))); - connect(modelComboBox, SIGNAL(currentIndexChanged(int)), - this, SLOT(setComboToolTip(int))); - connect(modelComboBox, SIGNAL(currentIndexChanged(int)), - this, SLOT(displayArchiveDates(int))); - - connect(selectAllTimesButton, SIGNAL(clicked(bool)), - listView, SLOT(selectAll(void))); - - connect(selectNoTimesButton, SIGNAL(clicked(bool)), - listView, SLOT(clearSelection(void))); - - //layout - downloadLayout = new QHBoxLayout; - downloadLayout->addWidget(modelComboBox); - downloadLayout->addWidget(hourSpinBox); - downloadLayout->addWidget(downloadToolButton); - - downloadGroupBox->setLayout(downloadLayout); - - treeLayout = new QHBoxLayout; - treeLayout->addWidget(treeView); - - timeLayout = new QVBoxLayout; - timeLayout->addWidget(listView); - - selectLayout = new QHBoxLayout; - selectLayout->addStretch(); - selectLayout->addWidget(selectAllTimesButton); - selectLayout->addWidget(selectNoTimesButton); - - timeLayout->addLayout(selectLayout); - - timeGroupBox->setLayout(timeLayout); - - loadLayout = new QHBoxLayout; - loadLayout->addWidget(statusLabel); - loadLayout->addWidget(refreshToolButton); - - weatherLayout = new QVBoxLayout; - weatherLayout->addWidget(downloadGroupBox); - weatherLayout->addLayout(dateTimeLayout); - weatherLayout->addWidget(forecastListLabel); - weatherLayout->addLayout(treeLayout); - weatherLayout->addWidget(timeGroupBox); - weatherLayout->addLayout(loadLayout); - - ninjafoamConflictLabel = new QLabel(tr("The weather model initialization option is not currently available for the\n" - "momentum solver."), this); - ninjafoamConflictLabel->setHidden(true); - - weatherGroupBox->setLayout( weatherLayout ); - - layout = new QVBoxLayout; - layout->addWidget(ninjafoamConflictLabel); - layout->addWidget( weatherGroupBox ); - setLayout(layout); - -#ifdef WITH_NOMADS_SUPPORT - nNomadsCount = 0; - while( apszNomadsKeys[nNomadsCount][0] != NULL ) - nNomadsCount++; - papoNomads = new NomadsWxModel*[nNomadsCount]; - int i = 0; - while( apszNomadsKeys[i][0] != NULL ) - { - papoNomads[i] = new NomadsWxModel( apszNomadsKeys[i][0] ); - i++; - } - CPLDebug( "WINDNINJA", "Loaded %d NOMADS models", nNomadsCount ); -#endif - progressDialog = new QProgressDialog( this ); - progressDialog->setAutoClose( false ); - progressDialog->setAutoReset( false ); - progressDialog->setModal( true ); - - pGlobProg = progressDialog; - - loadModelComboBox(); - - checkForModelData(); -} - -/** - * Destructor. Closes files.` - */ -weatherModel::~weatherModel() -{ -#ifdef WITH_NOMADS_SUPPORT - for( int i = 0; i < nNomadsCount; i++ ) - delete papoNomads[i]; - delete [] papoNomads; -#endif -} - -/** - * Populate the combobox with available models from the host_list.xml - * - * @return false if population fails - */ -void weatherModel::loadModelComboBox() -{ - modelComboBox->addItem("=== Forecasts ==="); - QModelIndex index = modelComboBox->model()->index(modelComboBox->count() - 1, 0); - modelComboBox->model()->setData(index, 0, Qt::UserRole - 1); - - modelComboBox->addItem(QString::fromStdString(ndfd.getForecastIdentifier())); - modelComboBox->addItem(QString::fromStdString(nam.getForecastIdentifier())); - modelComboBox->addItem(QString::fromStdString(rap.getForecastIdentifier())); - modelComboBox->addItem(QString::fromStdString(namAk.getForecastIdentifier())); - modelComboBox->addItem(QString::fromStdString(gfs.getForecastIdentifier())); - -#ifdef WITH_NOMADS_SUPPORT - - for (int i = 0; i < nNomadsCount; i++) - { - QString s = QString::fromStdString(papoNomads[i]->getForecastReadable('-')).toUpper(); - modelComboBox->addItem(s); - } -#endif - - modelComboBox->addItem("=== Pastcasts ==="); - index = modelComboBox->model()->index(modelComboBox->count() - 1, 0); - modelComboBox->model()->setData(index, 0, Qt::UserRole - 1); - modelComboBox->addItem(QString::fromStdString(archhrr.getForecastIdentifier())); - - modelComboBox->setCurrentIndex(1); - -} - -void weatherModel::setTimeLimits( int index ) -{ - if( index == 1 ) - hourSpinBox->setRange( ndfd.getStartHour(), ndfd.getEndHour() ); - else if( index == 2 ) - hourSpinBox->setRange( nam.getStartHour(), nam.getEndHour() ); - else if( index == 3 ) - hourSpinBox->setRange( rap.getStartHour(), rap.getEndHour() ); - else if( index == 4 ) - hourSpinBox->setRange( namAk.getStartHour(), namAk.getEndHour() ); - else if( index == 5 ) - hourSpinBox->setRange( gfs.getStartHour(), gfs.getEndHour() ); - else if (index == modelComboBox->count() - 1) { - return; - } - else - { -#ifdef WITH_NOMADS_SUPPORT - int n = index - 6; - hourSpinBox->setRange( papoNomads[n]->getStartHour(), - papoNomads[n]->getEndHour() ); -#endif - return; - } -} - -static int UpdateProgress( double dfProgress, const char *pszMessage, - void *pProgressArg ) -{ - (void*)pProgressArg; - if( pszMessage ) - pGlobProg->setLabelText( pszMessage ); - pGlobProg->setValue( dfProgress * 100 ); - QCoreApplication::processEvents(); - if( pGlobProg->wasCanceled() ) - return 1; - return 0; -} - -/** - * Retrieve the forecast from the UCAR thredds server based on user input - * - */ -void weatherModel::getData() -{ - statusLabel->setText( "Downloading data..."); - setCursor(Qt::WaitCursor); - int modelChoice = modelComboBox->currentIndex(); - int hours = hourSpinBox->value(); - - //change length to 4 days; - //days = 20; - - wxModelInitialization *model; - - if( inputFile.isEmpty() ) { - statusLabel->setText( "No input dem file specified" ); - setCursor(Qt::ArrowCursor); - return; - } - if( modelChoice == 1 ) - model = new ncepNdfdInitialization( ndfd ); - else if( modelChoice == 2 ) - model = new ncepNamSurfInitialization( nam ); - else if( modelChoice == 3 ) - model = new ncepRapSurfInitialization( rap ); - else if( modelChoice == 4 ) - model = new ncepNamAlaskaSurfInitialization( namAk ); - else if( modelChoice == 5 ) - model = new ncepGfsSurfInitialization( gfs ); - else if ( modelChoice == modelComboBox->count() - 1) { - model = new GCPWxModel(archhrr); - progressDialog->reset(); - progressDialog->setRange( 0, 100 ); - model->SetProgressFunc( (GDALProgressFunc)&UpdateProgress ); - progressDialog->show(); - progressDialog->setCancelButtonText( "Cancel" ); - } - else - { -#ifdef WITH_NOMADS_SUPPORT - model = papoNomads[modelChoice - 6]; - /* - ** Disable progress on 32-bit windows as we segfault. - */ -#if defined(WIN32) && defined(NINJA_32BIT) - model->SetProgressFunc( NULL ); - QCoreApplication::processEvents(); -#else /* defined(WIN32) && defined(NINJA_32BIT) */ - progressDialog->reset(); - progressDialog->setRange( 0, 100 ); - model->SetProgressFunc( (GDALProgressFunc)&UpdateProgress ); - progressDialog->show(); - progressDialog->setCancelButtonText( "Cancel" ); -#endif /* defined(WIN32) && defined(NINJA_32BIT) */ -#endif /* WITH_NOMADS_SUPPORT */ - } - - try { - if(modelChoice != modelComboBox->count() - 1) { - model->fetchForecast( inputFile.toStdString(), hours ); - } - else { - - QDateTime startDT = LocalToUtc(startTime->dateTime()); - QDateTime endDT = LocalToUtc(stopTime->dateTime()); - - if (startDT < minDateTime || endDT > maxDateTime) { - progressDialog->close(); - QMessageBox::warning(this, "Out of Bounds", - QString("Time range must be between %1 and %2.") - .arg(UtcToLocal(minDateTime).toString("yyyy/MM/dd HH:00")) - .arg(UtcToLocal(maxDateTime).toString("yyyy/MM/dd HH:00"))); - setCursor(Qt::ArrowCursor); - return; - } - if (startDT > endDT) { - progressDialog->close(); - QMessageBox::warning(this, "Invalid Range", "The start time must be before the stop time."); - setCursor(Qt::ArrowCursor); - return; - } - if (startDT.daysTo(endDT) > 14) { - progressDialog->close(); - QMessageBox::warning(this, "Invalid Range", "The time range cannot exceed 14 days."); - setCursor(Qt::ArrowCursor); - return; - } - - // Extract start date and time - QDate startQDate = startDT.date(); - QTime startQTime = startDT.time(); - int startYear = startQDate.year(); - int startMonth = startQDate.month(); - int startDay = startQDate.day(); - int startHour = startQTime.hour(); - - // Extract end date and time - QDate endQDate = endDT.date(); - QTime endQTime = endDT.time(); - int endYear = endQDate.year(); - int endMonth = endQDate.month(); - int endDay = endQDate.day(); - int endHour = endQTime.hour(); - - // Convert to boost dates - boost::gregorian::date startDate(startYear, startMonth, startDay); - boost::gregorian::date endDate(endYear, endMonth, endDay); - - auto* forecastModel = dynamic_cast(model); - forecastModel->setDateTime(startDate, endDate, boost::lexical_cast(startHour), boost::lexical_cast(endHour)); - - model->fetchForecast(inputFile.toStdString(), hours); - } - } - catch( badForecastFile &e ) { - progressDialog->close(); - QMessageBox::warning( this, "WindNinja", - QString::fromStdString( e.what() ), - QMessageBox::Ok ); - setCursor(Qt::ArrowCursor); - return; - } - catch( std::runtime_error &e ) { - progressDialog->close(); - QMessageBox::warning( this, "WindNinja", - QString::fromStdString( e.what() ), - QMessageBox::Ok ); - setCursor(Qt::ArrowCursor); - checkForModelData(); - return; - } - -#if !defined(NINJA_32BIT) - if( modelChoice > 5 ) - { - progressDialog->setRange( 0, 100 ); - progressDialog->setValue( 100 ); - progressDialog->setLabelText( "Done" ); - progressDialog->setCancelButtonText( "Close" ); - /* Should we autoclose, or ask user to close */ - progressDialog->close(); - } -#endif /* defined(NINJA_64BIT) */ - - checkForModelData(); - setCursor(Qt::ArrowCursor); - - //connect with thread::finished()? - if( modelChoice < 6 ) - delete model; -} - -/** - * Check the working directory for a weather model data directory - * - */ -void weatherModel::checkForModelData() -{ - QDir wd(cwd); - - QStringList filters; - /* ndfd */ - filters << QString::fromStdString( ndfd.getForecastIdentifier() ) - + "-" + QFileInfo( inputFile ).fileName(); - /* nam suface */ - filters << QString::fromStdString( nam.getForecastIdentifier() ) - + "-" + QFileInfo( inputFile ).fileName(); - /* rap surface */ - filters << QString::fromStdString( rap.getForecastIdentifier() ) - + "-" + QFileInfo( inputFile ).fileName(); - /* nam alaska surface */ - filters << QString::fromStdString( namAk.getForecastIdentifier() ) - + "-" + QFileInfo( inputFile ).fileName(); - /* gfs */ - filters << QString::fromStdString( gfs.getForecastIdentifier() ) - + "-" + QFileInfo( inputFile ).fileName(); - filters << QString::fromStdString( archhrr.getForecastIdentifier() ) - + "-" + QFileInfo( inputFile ).fileName(); - -#ifdef WITH_NOMADS_SUPPORT - int i; - for( i = 0; i < nNomadsCount; i++ ) - { - filters << - (QString::fromStdString(papoNomads[i]->getForecastReadable('-') ) - + "-" + QFileInfo( inputFile ).fileName()).toUpper(); - } - filters << "20*.zip"; -#endif - //filter to see the folder in utc time - filters << "20*T*"; - filters << "*.nc"; - model->setNameFilters(filters); - model->setFilter(QDir::Files | QDir::Dirs); - treeView->setRootIndex(model->index(wd.absolutePath())); - treeView->resizeColumnToContents(0); - statusLabel->setText( "" ); - timeModel->setStringList(QStringList()); - - unselectForecast(false); - // QModelIndex index = treeView->indexBelow( treeView->rootIndex() ); - // treeView->setExpanded( index, true ); - // index = treeView->indexBelow( index ); - // treeView->setExpanded( index, true ); -} - -/** - * Slot to catch any time the dem file changes - * - * @param newFile new dem file name - */ -void weatherModel::setInputFile(QString newFile) -{ - inputFile = newFile; - cwd = QFileInfo(newFile).absolutePath(); - checkForModelData(); -} - -/** - * Display the first forecast time for a given file - * - * @param index index in the tree view. - */ -void weatherModel::displayForecastTime( const QModelIndex &index ) -{ - clearTimes(); - - if(model->fileInfo(index).isDir()==true) - { - treeView->selectionModel()->select(index,QItemSelectionModel::Deselect|QItemSelectionModel::Rows); - } - - QFileInfo fi( model->fileInfo( index ) ); - - if( !fi.exists() ) { - statusLabel->setText( "" ); - return; - } - std::string filename = fi.absoluteFilePath().toStdString(); - wxModelInitialization* model = NULL; - try { - model = wxModelInitializationFactory::makeWxInitialization(filename); - timelist = model->getTimeList(tzString.toStdString()); - } - catch( ... ) { - statusLabel->setText( "" ); - delete model; - return; - } - - delete model; - - blt::local_time_facet* facet; - facet = new blt::local_time_facet(); - std::ostringstream os; - os.imbue(std::locale(std::locale::classic(), facet)); - facet->format("%a %b %d %H:%M %z"); - os << timelist[0]; - QString dateTime = QString::fromStdString( os.str() ); - dateTime.prepend( "First forecast time: " ); - - statusLabel->setText( dateTime ); - - //blt::time_zone_ptr utc = globalTimeZoneDB.time_zone_from_region("UTC"); - QStringList times; - for(int i = 0; i < timelist.size(); i++) { - std::ostringstream os; - os.imbue(std::locale(std::locale::classic(), facet)); - facet->format("%a %b %d %H:%M %z"); - //os << timelist[i].local_time_in(utc); - os << timelist[i]; - times.append(QString::fromStdString(os.str())); - os.clear(); - } - timeModel->setStringList(times); - listView->selectAll(); - listView->setFocus(Qt::OtherFocusReason); -} - -/** - * Slot to recieve a change in timezone from location - * - * @param tz timezone string - */ -void weatherModel::updateTz( QString tz ) -{ - tzString = tz; - checkForModelData(); - updatePastcastTimesAndLabels(); -} - -/** - * Unselect the forecast if the group box is disabled. This is for - * mainWindow check...() fx(s) - * - * @param checked - */ -void weatherModel::unselectForecast( bool checked ) -{ - if( checked ) return; - treeView->selectionModel()->clear(); - clearTimes(); -} -const char * weatherModel::ExpandDescription( const char *pszReadable ) -{ - if( pszReadable == NULL ) - return NULL; - const char *pszDesc = NULL; - const char *pszTmp = NULL; - int i; - char **papszKeys = NULL; - papszKeys = CSLTokenizeString2( pszReadable, "- ", 0 ); - i = 0; - while( papszKeys[i] != NULL ) - { - { - pszTmp = CSLFetchNameValue( (char**)apszWxModelGlossary, papszKeys[i] ); - if( pszTmp != NULL ) - { - if( pszDesc == NULL ) - pszDesc = CPLSPrintf( "%s", pszTmp ); - else - pszDesc = CPLSPrintf( "%s, %s", pszDesc, pszTmp ); - } - } - i++; - } - return pszDesc; -} - -void weatherModel::updatePastcastTimesAndLabels() -{ - minDateTime = QDateTime( QDate(2014, 7, 30), QTime(18, 0), Qt::UTC ); - maxDateTime = QDateTime::currentDateTimeUtc(); - // the max time should actually be 1 minus the hour of the current time, and 59 minutes, not the current time - maxDateTime = maxDateTime.addSecs(-3600); - maxDateTime.setTime( QTime(maxDateTime.time().hour(), 59, 0) ); - - startDateLabel->setText( tr("Earliest PASTCAST Date: %1").arg(UtcToLocal(minDateTime).toString("MM/dd/yyyy")) ); -// endDateLabel->setText( tr("Latest PASTCAST Date: %1").arg(UtcToLocal(maxDateTime).toString("MM/dd/yyyy")) ); - endDateLabel->setText( tr("") ); - - startTime->setDateTime( QDateTime::currentDateTimeUtc() ); - startTime->setTime( QTime(startTime->time().hour(), 0, 0) ); // clean up the time a bit, drop all the min and seconds - startTime->setDateTime( startTime->dateTime().addSecs(-3600) ); // start at the max time, which is 1 minus the hours of the current time, not the current time - startTime->setDateTime( UtcToLocal(startTime->dateTime()) ); // displayed times need to be local times, NOT utc times, so this is stored as a local time, not a UTC time - startTime->setToolTip(tr("Minimum allowed time: %1").arg(UtcToLocal(minDateTime).toString("MM/dd/yyyy HH:00"))); - - stopTime->setDateTime( QDateTime::currentDateTimeUtc() ); - stopTime->setTime( QTime(stopTime->time().hour(), 0, 0) ); // clean up the time a bit, drop all the min and seconds - stopTime->setDateTime( stopTime->dateTime().addSecs(-3600) ); // start at the max time, which is 1 minus the hours of the current time, not the current time - stopTime->setDateTime( UtcToLocal(stopTime->dateTime()) ); // displayed times need to be local times, NOT utc times, so this is stored as a local time, not a UTC time -} - -QDateTime weatherModel::LocalToUtc(QDateTime qat) -{ - boost::local_time::time_zone_ptr timeZone; - timeZone = globalTimeZoneDB.time_zone_from_region(tzString.toStdString()); - - // use the local time constructor, from a date and duration instead of from a ptime (which is a UTC time constructor) - blt::local_date_time new_blt(boost::local_time::not_a_date_time); - new_blt = boost::local_time::local_date_time( - boost::gregorian::date(qat.date().year(), qat.date().month(), qat.date().day()), - boost::posix_time::time_duration(qat.time().hour(),qat.time().minute(),qat.time().second(),qat.time().msec()), - timeZone, - boost::local_time::local_date_time::NOT_DATE_TIME_ON_ERROR - ); - - QDateTime new_qat = QDateTime( - QDate(new_blt.utc_time().date().year(), new_blt.utc_time().date().month(), new_blt.utc_time().date().day()), - QTime(new_blt.utc_time().time_of_day().hours(), new_blt.utc_time().time_of_day().minutes()), - Qt::UTC - ); - - return new_qat; -} - -QDateTime weatherModel::UtcToLocal(QDateTime qat) -{ - boost::local_time::time_zone_ptr timeZone; - timeZone = globalTimeZoneDB.time_zone_from_region(tzString.toStdString()); - - // use the UTC constructor, from a ptime instead of from a date and duration (which is a local time constructor) - blt::local_date_time new_blt(boost::local_time::not_a_date_time); - new_blt = boost::local_time::local_date_time( - boost::posix_time::ptime( - boost::gregorian::date(qat.date().year(), qat.date().month(), qat.date().day()), - boost::posix_time::time_duration(qat.time().hour(),qat.time().minute(),qat.time().second(),qat.time().msec()) - ), - timeZone - ); - - QDateTime new_qat = QDateTime( - QDate(new_blt.local_time().date().year(), new_blt.local_time().date().month(), new_blt.local_time().date().day()), - QTime(new_blt.local_time().time_of_day().hours(), new_blt.local_time().time_of_day().minutes()), - Qt::UTC - ); - - return new_qat; -} - -void weatherModel::setComboToolTip(int) -{ - QString s = modelComboBox->currentText(); - s = ExpandDescription( s.toLocal8Bit().data() ); - modelComboBox->setToolTip( s ); -} - -void weatherModel::displayArchiveDates(int index) -{ - if (index == modelComboBox->count() - 1) { - startDateLabel->setVisible(true); - endDateLabel->setVisible(true); - startTime->setVisible(true); - stopTime->setVisible(true); - hourSpinBox->setVisible(false); - } - else { - startDateLabel->setVisible(false); - endDateLabel->setVisible(false); - startTime->setVisible(false); - stopTime->setVisible(false); - hourSpinBox->setVisible(true); - } -} - -std::vector weatherModel::timeList() { - std::vector tl; - if(!timeGroupBox->isChecked()) { - return tl; - } - QModelIndexList mi = listView->selectionModel()->selectedIndexes(); - for(int i = 0; i < mi.size(); i++) { - tl.push_back(timelist[mi[i].row()]); - } - return tl; -} - -void weatherModel::clearTimes() { - timelist.clear(); - timeModel->setStringList(QStringList()); -} diff --git a/src/gui/weatherModel.h b/src/gui/weatherModel.h deleted file mode 100644 index 78c25be34..000000000 --- a/src/gui/weatherModel.h +++ /dev/null @@ -1,187 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Client to download weather data - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef WEATHER_MODEL_H -#define WEATHER_MODEL_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#ifndef Q_MOC_RUN -#include "boost/date_time/local_time/local_time.hpp" -#include "boost/date_time/posix_time/posix_time.hpp" -#endif - -#include "ninjaException.h" -#include "wxModelInitializationFactory.h" -#include "nomads_wx_init.h" -#include "gcp_wx_init.h" - -#include "gdal_util.h" -#include "netcdf.h" -#include "ninja_conv.h" - -static QProgressDialog *pGlobProg; -static void *pCancel; - -static const char *apszWxModelGlossary[] = -{ - "UCAR=University Corporation for Atomosperhic Research", - "NOMADS=NOAA Operational Model Archive and Distribution System", - "NDFD=National Digital Forecast Database", - "NAM=North American Mesoscale", - "RAP=Rapid Refresh", - "GFS=Global Forecast System", - "HIRES=High Resolution", - "NEST=Nested", - "ARW=Advanced Research WRF", - "NMM=Non-hydrostatic Mesoscale model", - NULL -}; - -class weatherModel : public QWidget -{ - Q_OBJECT - - public: - weatherModel(QWidget *parent = 0); - ~weatherModel(); - - QString wxModelFileName; - - QGroupBox *weatherGroupBox; - QGroupBox *downloadGroupBox; - QComboBox *modelComboBox; - QSpinBox *daySpinBox; - QSpinBox *hourSpinBox; - QToolButton *downloadToolButton; - - QLabel *ninjafoamConflictLabel; - QLabel *statusLabel; - QToolButton *refreshToolButton; - - QLabel *forecastListLabel; - - QTreeView *treeView; - QDirModel *model; - - QGroupBox *timeGroupBox; - QStringListModel *timeModel; - QListView *listView; - QToolButton *selectAllTimesButton; - QToolButton *selectNoTimesButton; - QDateTimeEdit *startTime; - QDateTimeEdit *stopTime; - QLabel *startDateLabel; - QLabel *endDateLabel; - - QDir cwd; - QString inputFile; - - QProgressDialog *progressDialog; - QLabel *progressLabel; - - QHBoxLayout *downloadLayout; - QHBoxLayout *treeLayout; - QHBoxLayout *listLayout; - QHBoxLayout *loadLayout; - QVBoxLayout *timeLayout; - QHBoxLayout *selectLayout; - QVBoxLayout *weatherLayout; - QVBoxLayout *layout; - - QString tzString; - - std::vector timeList(); - - QDateTime minDateTime; - QDateTime maxDateTime; - - private: - void loadModelComboBox(); - - const char * ExpandDescription( const char *pszReadable ); - - void updatePastcastTimesAndLabels(); - - QDateTime LocalToUtc(QDateTime qat); - QDateTime UtcToLocal(QDateTime qat); - - ncepNamSurfInitialization nam; - ncepNdfdInitialization ndfd; - ncepRapSurfInitialization rap; - ncepNamAlaskaSurfInitialization namAk; - ncepGfsSurfInitialization gfs; - GCPWxModel archhrr; - -#ifdef WITH_NOMADS_SUPPORT - int nNomadsCount; - NomadsWxModel **papoNomads; -#endif - - std::vector timelist; - - private slots: - void getData(); - void displayForecastTime(const QModelIndex &index); - void setInputFile(QString newFile); - void unselectForecast( bool checked ); - void setTimeLimits( int index ); - void setComboToolTip( int index ); - void displayArchiveDates( int index ); - void clearTimes(); - public slots: - void checkForModelData(); - void updateTz( QString tz ); -}; - -#endif /* WEATHER_MODEL_H */ diff --git a/src/gui/windInput.cpp b/src/gui/windInput.cpp deleted file mode 100644 index ee0395377..000000000 --- a/src/gui/windInput.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Handles options for wind inputs - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "windInput.h" - -windInput::windInput(QWidget *parent) : QWidget(parent) -{ - windGroupBox = new QGroupBox( "Domain Average Wind" ); - windGroupBox->setCheckable( true ); - windGroupBox->setChecked(true); - metaWind = new metaWindWidget; - - windTable = new windInputTable; - - scrollArea = new QScrollArea; - scrollArea->setWidget(windTable); - - clearButton = new QToolButton(this); - clearButton->setIcon(QIcon(":cancel.png")); - clearButton->setToolButtonStyle( Qt::ToolButtonTextBesideIcon ); - clearButton->setText("Clear"); - clearButton->setToolTip("Clear all entries"); - - windLayout = new QVBoxLayout; - clearLayout = new QHBoxLayout; - mainLayout = new QVBoxLayout; - - clearLayout->addStretch(); - clearLayout->addWidget(clearButton); - - windLayout->addWidget(metaWind); - windLayout->addLayout(clearLayout); - windLayout->addWidget(scrollArea); - - windGroupBox->setLayout( windLayout ); - - mainLayout->addWidget( windGroupBox ); - setLayout(mainLayout); - - connect(clearButton, SIGNAL(clicked()), windTable, SLOT(clear())); -} diff --git a/src/gui/windInput.h b/src/gui/windInput.h deleted file mode 100644 index 8c3243b01..000000000 --- a/src/gui/windInput.h +++ /dev/null @@ -1,61 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Handles options for wind inputs - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef WINDINPUT_H -#define WINDINPUT_H - -#include -#include - -#include "metaWindWidget.h" -#include "windInputTable.h" - -class windInput : public QWidget -{ - Q_OBJECT - - public: - windInput(QWidget *parent = 0); - - QGroupBox *windGroupBox; - - metaWindWidget *metaWind; - windInputTable *windTable; - - QToolButton *clearButton; - - QScrollArea *scrollArea; - - QHBoxLayout *clearLayout; - QVBoxLayout *windLayout; - QVBoxLayout *mainLayout; - -}; - -#endif /* WINDINPUT_H */ diff --git a/src/gui/windInputTable.cpp b/src/gui/windInputTable.cpp deleted file mode 100644 index 74ffde5bb..000000000 --- a/src/gui/windInputTable.cpp +++ /dev/null @@ -1,196 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Wind input table for specifying wind speed and direction, as well - * as the diurnal specifics. - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "windInputTable.h" - -windInputTable::windInputTable(QWidget *parent) : QWidget(parent) -{ - nRuns = 64; - diurnalChecked = false; - stabilityChecked = false; - speedLabel = new QLabel(tr("Speed")); - dirLabel = new QLabel(tr("Direction")); - - inputSpeedUnits = new QComboBox; - inputSpeedUnits->addItem(tr("mph"), 0); - inputSpeedUnits->addItem(tr("m/s"), 1); - inputSpeedUnits->addItem(tr("kph"), 2); - inputSpeedUnits->addItem(tr("kts"), 3); - inputSpeedUnits->setEditable(false); - inputSpeedUnits->setCurrentIndex(0); - - speed = new QDoubleSpinBox*[nRuns]; - dir = new QSpinBox*[nRuns]; - - baseLayout = new QGridLayout; - baseLayout->addWidget(speedLabel, 0, 0); - baseLayout->addWidget(dirLabel, 0, 1); - baseLayout->addWidget(inputSpeedUnits, 1, 0); - - setMinimumHeight(480); - - //set up speed and direction input - - for(int i = 0;i < nRuns;i++) - { - speed[i] = new QDoubleSpinBox; - speed[i]->setRange(0.0, 500.0); - speed[i]->setValue(0); - - dir[i] = new QSpinBox; - dir[i]->setRange(0, 360); - speed[i]->setValue(0); - - baseLayout->addWidget(speed[i], i + 2, 0); - baseLayout->addWidget(dir[i], i + 2, 1); - } - - //set up diurnal - timeLabel = new QLabel(tr("Time")); - dateLabel = new QLabel(tr("Date")); - cloudLabel = new QLabel(tr("Cloud Cover(%)")); - airTempLabel = new QLabel(tr("Air Temp."));; - - airTempUnits = new QComboBox; - airTempUnits->addItem(tr("F")); - airTempUnits->addItem(tr("C")); - airTempUnits->setEditable(false); - airTempUnits->setCurrentIndex(0); - - diurnalLayout = new QGridLayout; - diurnalLayout->addWidget(timeLabel, 0, 0); - diurnalLayout->addWidget(dateLabel, 0, 1); - diurnalLayout->addWidget(cloudLabel, 0, 2); - diurnalLayout->addWidget(airTempLabel, 0, 3); - - diurnalLayout->addWidget(airTempUnits, 1, 3); - - time = new QTimeEdit* [nRuns]; - date = new QDateEdit* [nRuns]; - cloudCover = new QSpinBox *[nRuns]; - airTemp = new QSpinBox *[nRuns]; - - for(int i = 0;i < nRuns;i++) - { - time[i] = new QTimeEdit(QTime::currentTime()); - time[i]->setDisplayFormat("HH:mm"); - date[i] = new QDateEdit(QDate::currentDate()); - date[i]->setCalendarPopup(true); - cloudCover[i] = new QSpinBox; - cloudCover[i]->setRange(0, 100); - airTemp[i] = new QSpinBox; - airTemp[i]->setRange(-40, 200); - airTemp[i]->setValue(72); - - diurnalLayout->addWidget(time[i], i + 4, 0); - diurnalLayout->addWidget(date[i], i + 4, 1); - diurnalLayout->addWidget(cloudCover[i], i + 4, 2); - diurnalLayout->addWidget(airTemp[i], i + 4, 3); - } - - enableDiurnalCells(false); - enableStabilityCells(false); - - mainLayout = new QHBoxLayout; - mainLayout->addLayout(baseLayout); - mainLayout->addLayout(diurnalLayout); - - setLayout(mainLayout); -} - -void windInputTable::enableStabilityCells(bool checked) -{ - stabilityChecked = checked; - this->windInputUpdate(); -} - - -void windInputTable::enableDiurnalCells(bool checked) -{ - diurnalChecked = checked; - this->windInputUpdate(); -} - -void windInputTable::windInputUpdate() -{ - if(this->stabilityChecked == true && this->diurnalChecked == false) - { - airTempUnits->setEnabled(false); - for(int i = 0;i < nRuns;i++) - { - time[i]->setEnabled(true); - date[i]->setEnabled(true); - cloudCover[i]->setEnabled(true); - airTemp[i]->setEnabled(false); - } - } - else if(this->stabilityChecked == false && this->diurnalChecked == true) - { - airTempUnits->setEnabled(true); - for(int i = 0;i < nRuns;i++) - { - time[i]->setEnabled(true); - date[i]->setEnabled(true); - cloudCover[i]->setEnabled(true); - airTemp[i]->setEnabled(true); - } - } - else if(this->stabilityChecked == true && this->diurnalChecked == true) - { - airTempUnits->setEnabled(true); - for(int i = 0;i < nRuns;i++) - { - time[i]->setEnabled(true); - date[i]->setEnabled(true); - cloudCover[i]->setEnabled(true); - airTemp[i]->setEnabled(true); - } - } - else if(this->stabilityChecked == false && this->diurnalChecked == false) - { - airTempUnits->setEnabled(false); - for(int i = 0;i < nRuns;i++) - { - time[i]->setEnabled(false); - date[i]->setEnabled(false); - cloudCover[i]->setEnabled(false); - airTemp[i]->setEnabled(false); - } - } -} - -void windInputTable::clear() { - for (int i = 0; i < nRuns; i++) { - speed[i]->setValue(0.0); - dir[i]->setValue(0.0); - cloudCover[i]->setValue(0); - airTemp[i]->setValue(72); - } -} diff --git a/src/gui/windInputTable.h b/src/gui/windInputTable.h deleted file mode 100644 index 9bf68295a..000000000 --- a/src/gui/windInputTable.h +++ /dev/null @@ -1,91 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Wind input table for specifying wind speed and direction, as well - * as the diurnal specifics. - * Author: Kyle Shannon - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef WINDINPUTTABLE_H -#define WINDINPUTTABLE_H - -#include - - -#include -#include -#include -#include - -#include -#include - -#include -#include - -class windInputTable : public QWidget -{ - Q_OBJECT - public: - windInputTable(QWidget *parent = 0); - - int nRuns; - - //base inputs - QLabel *speedLabel, *dirLabel; - - QComboBox *inputSpeedUnits; - - QDoubleSpinBox **speed; - QSpinBox **dir; - - QGridLayout *baseLayout; - - //diurnal input - QLabel *timeLabel, *dateLabel, *cloudLabel, *airTempLabel; - - QComboBox *airTempUnits; - - QTimeEdit **time; - QDateEdit **date; - QSpinBox **cloudCover, **airTemp; - - public slots: - void enableDiurnalCells(bool checked); - void enableStabilityCells(bool checked); - void clear(); - - public: - QGridLayout *diurnalLayout; - - QHBoxLayout *mainLayout; - -private: - bool diurnalChecked; - bool stabilityChecked; - void windInputUpdate(); -}; - -#endif /* WINDINPUTTABLE_H */ diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt index 5e169db9a..88630b129 100644 --- a/src/ninja/CMakeLists.txt +++ b/src/ninja/CMakeLists.txt @@ -106,7 +106,8 @@ set(NINJA_SOURCES air.cpp wxModelInitializationFactory.cpp wxStation.cpp windninja.cpp - gcp_wx_init.cpp) + gcp_wx_init.cpp + ninjaArmy.h) if(NINJAFOAM) set(NINJA_SOURCES ${NINJA_SOURCES} ninjafoam.cpp From c2868af1fbcef3eb0165c8322ad894924e74a0c3 Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 13 Jun 2025 12:39:06 -0600 Subject: [PATCH 056/435] moved qt6 NinjaInitialize() methods from each individual provider call, to the initial gui main.cpp, as is done in the qt4 gui --- src/gui/qt6/main.cpp | 8 ++++ src/gui/qt6/mainwindow.cpp | 3 -- src/gui/qt6/provider.cpp | 86 +++++--------------------------------- 3 files changed, 18 insertions(+), 79 deletions(-) diff --git a/src/gui/qt6/main.cpp b/src/gui/qt6/main.cpp index a4299a2c7..12961e390 100755 --- a/src/gui/qt6/main.cpp +++ b/src/gui/qt6/main.cpp @@ -9,6 +9,14 @@ int main(int argc, char *argv[]) { + char ** papszOptions = NULL; + NinjaErr err = 0; + err = NinjaInit(papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaInit: err = %d\n", err); + } + QApplication a(argc, argv); MainWindow w; diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index 976d9eed7..7e3a6eb52 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -829,9 +829,6 @@ MainWindow::MainWindow(QWidget *parent) // Expand tree UI ui->treeWidget->expandAll(); - // Register GDAL drivers - GDALAllRegister(); - /* * Create file handler window for point init screen */ diff --git a/src/gui/qt6/provider.cpp b/src/gui/qt6/provider.cpp index 8e2ab48ac..d92dde327 100755 --- a/src/gui/qt6/provider.cpp +++ b/src/gui/qt6/provider.cpp @@ -24,6 +24,7 @@ Provider::Provider() { } int Provider::domain_average_exec(DomainAverageWind& input) { + std::vector speedVector = input.getSpeedList(); const double* speedList = speedVector.data(); std::vector directionVector = input.getDirectionList(); @@ -42,32 +43,15 @@ int Provider::domain_average_exec(DomainAverageWind& input) { unsigned int numNinjas = input.getNumNinjas(); const char* outputPath = input.getOutputPath().c_str(); - - /* - * Setting up the simulation - */ - err = NinjaInit(papszOptions); //initialize global singletons and environments (GDAL_DATA, etc.) - ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speedList, speedUnits, directionList, papszOptions); - - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - } - /* * Create the army */ + ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speedList, speedUnits, directionList, papszOptions); if( NULL == ninjaArmy ) { printf("NinjaCreateArmy: ninjaArmy = NULL\n"); } - err = NinjaInit(papszOptions); //must be called for any simulation - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - } - /* * Prepare the army */ @@ -212,19 +196,7 @@ int Provider::domain_average_exec(DomainAverageWind& input) { } int Provider::point_exec(PointInitialization& input) { - /* - * Setting up the simulation - */ - - //initialize global singletons and environments (GDAL_DATA, etc.) - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - } - /* - * Create the army - */ vector yearVector = input.getYear(); int* year = yearVector.data(); vector monthVector = input.getMonth(); @@ -252,7 +224,9 @@ int Provider::point_exec(PointInitialization& input) { unsigned int numNinjas = input.getNumNinjas(); const char * outputPath = input.getOutputPath().c_str(); - + /* + * Create the army + */ ninjaArmy = NinjaMakePointArmy(year, month, day, hour, minute, numNinjas, osTimeZone, station_path, demFile, matchPointFlag, momentumFlag, papszOptions); if( NULL == ninjaArmy ) @@ -260,12 +234,6 @@ int Provider::point_exec(PointInitialization& input) { printf("NinjaCreateArmy: ninjaArmy = NULL\n"); } - err = NinjaInit(papszOptions); //must be called for any simulation - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - } - /* * Prepare the army */ @@ -376,15 +344,6 @@ int Provider::point_exec(PointInitialization& input) { } int Provider::wxmodel_exec(WeatherModel& input) { - /* - * Setting up the simulation - */ - - err = NinjaInit(papszOptions); //initialize global singletons and environments (GDAL_DATA, etc.) - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - } /* * Set up Weather Model Initialization run @@ -407,24 +366,18 @@ int Provider::wxmodel_exec(WeatherModel& input) { /* inputs that can vary among ninjas in an army */ //const char * speedUnits = input.get; - /* - * Create the army - */ const char * forecast = input.getForecast(); const char * osTimeZone = input.getOSTimeZone(); + /* + * Create the army + */ ninjaArmy = NinjaMakeWeatherModelArmy(forecast, osTimeZone, momentumFlag, papszOptions); if( NULL == ninjaArmy ) { printf("NinjaCreateArmy: ninjaArmy = NULL\n"); } - err = NinjaInit(papszOptions); //must be called for any simulation - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - } - /* * Prepare the army */ @@ -747,11 +700,7 @@ int Provider::fetchDEMBoundingBox(const string demFileOutPut, const string fetch NinjaArmyH* ninjaArmy = NULL; char ** papszOptions = NULL; NinjaErr err = 0; - err = NinjaInit(papszOptions); // must be called for fetching and simulations - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - } + /* * Testing fetching from a DEM bounding box */ @@ -776,11 +725,7 @@ int Provider::fetchForecast(const string wx_model_type, int numNinjas, const str NinjaArmyH* ninjaArmy = NULL; char ** papszOptions = NULL; NinjaErr err = 0; - err = NinjaInit(papszOptions); // must be called for fetching and simulations - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - } + /* * Testing fetching for a Forecast file (wx_model_type are the names listed in the weather station download in WindNinja) */ @@ -814,11 +759,6 @@ int Provider::fetchStationData(int year, int month, int day, int hour, int minut NinjaArmyH* ninjaArmy = NULL; char ** papszOptions = NULL; NinjaErr err = 0; - err = NinjaInit(papszOptions); // must be called for fetching and simulations - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - } /* * Testing fetching station data from a geotiff file. @@ -850,12 +790,6 @@ int Provider::fetchFromDEMPoint (double adfPoints[2], double adfBuff[2], const s NinjaArmyH* ninjaArmy = NULL; char ** papszOptions = NULL; NinjaErr err = 0; - err = NinjaInit(papszOptions); // must be called for fetching and simulations - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - } - /* * Testing fetching from a DEM point From 8bfe351a33b7b69b4542092a92bc7350a568848d Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 16 Jun 2025 11:50:31 -0600 Subject: [PATCH 057/435] Added version pop-up when WindNinja boots --- src/gui/qt6/mainwindow.cpp | 122 +++++++++++++++++++++++++++++++++++++ src/gui/qt6/mainwindow.h | 8 +++ 2 files changed, 130 insertions(+) diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index 976d9eed7..b4b30cf12 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -821,6 +821,8 @@ MainWindow::MainWindow(QWidget *parent) { ui->setupUi(this); + checkMessages(); + // Set default window size resize(1200, 700); @@ -971,3 +973,123 @@ MainWindow::MainWindow(QWidget *parent) ui->windTableData->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); } + + +/* +** Check for version updates, or messages from the server. +*/ +void MainWindow::checkMessages(void) { + QMessageBox mbox; + char *papszMsg = NinjaQueryServerMessages(true); + if (papszMsg != NULL) { + if (strcmp(papszMsg, "TRUE\n") == 0) { + mbox.setText("There is a fatal flaw in Windninja, it must close."); + mbox.exec(); + delete[] papszMsg; + abort(); + } + + else { + char *papszMsg = NinjaQueryServerMessages(false); + if (papszMsg != NULL) { + mbox.setText(papszMsg); + + mbox.exec(); + delete[] papszMsg; + } + } + } +} + +/* +** Query the ninjastorm.firelab.org/sqlitetest/messages.txt and ask for the most up to date version. +** There are three current values: +** +** VERSION -> a semantic version string, comparable with strcmp() +** MESSAGE -> One or more messages to display to the user +** ABORT -> There is a fundamental problem with windninja, and it should call +** abort() after displaying a message. +*/ + +bool MainWindow::NinjaCheckVersions(char * mostrecentversion, char * localversion) { + char comparemostrecentversion[256]; + char comparelocalversion[256]; + int mostrecentversionIndex = 0; + int localversionIndex = 0; + while (*mostrecentversion) { + if (*mostrecentversion != '.') { + comparemostrecentversion[mostrecentversionIndex++] = *mostrecentversion; + } + mostrecentversion++; + } + comparemostrecentversion[mostrecentversionIndex] = '\0'; + + while (*localversion) { + if (*localversion != '.') { + comparelocalversion[localversionIndex++] = *localversion; + } + localversion++; + } + + comparelocalversion[localversionIndex] = '\0'; + return strcmp(comparemostrecentversion, comparelocalversion) == 0; + +} + +char * MainWindow::NinjaQueryServerMessages(bool checkAbort) +{ + CPLSetConfigOption("GDAL_HTTP_UNSAFESSL", "YES"); + const char* url = "https://ninjastorm.firelab.org/sqlitetest/messages.txt"; + CPLHTTPResult *poResult = CPLHTTPFetch(url, NULL); + CPLSetConfigOption( "GDAL_HTTP_TIMEOUT", NULL ); + if( !poResult || poResult->nStatus != 0 || poResult->nDataLen == 0 ) + { + CPLDebug( "NINJA", "Failed to reach the ninjastorm server." ); + return NULL; + } + + const char* pszTextContent = reinterpret_cast(poResult->pabyData); + std::vector messages; + std::istringstream iss(pszTextContent); + std::string message; + + // Read all lines into the vector + while (std::getline(iss, message)) { + messages.push_back(message); + } + + // Process all lines except the last two + std::ostringstream oss; + if (checkAbort) { + for (size_t i = 0; i < messages.size(); ++i) { + if (i == messages.size()-1) { // check final line + oss << messages[i] << "\n"; + } + } + } + else { + bool versionisuptodate = NinjaCheckVersions(const_cast(messages[1].c_str()), const_cast(NINJA_VERSION_STRING)); + if (!versionisuptodate) { + oss << messages[0] << "\n"; + oss << "You are using an outdated WindNinja version, please update to version: " << messages[1] << "\n" << "\n"; + } + if (messages[4].empty() == false) { + for (size_t i = 3; i < messages.size() - 2; ++i) { + if (!messages[i].empty()) { + oss << messages[i] << "\n"; + } + } + } + if (messages[4].empty() && versionisuptodate) { + return NULL; + } + } + + std::string resultingmessage = oss.str(); + char* returnString = new char[resultingmessage.length() + 1]; + std::strcpy(returnString, resultingmessage.c_str()); + CPLHTTPDestroyResult(poResult); + return returnString; + + return NULL; +} diff --git a/src/gui/qt6/mainwindow.h b/src/gui/qt6/mainwindow.h index 6e3aaf28b..3f3b0d04b 100644 --- a/src/gui/qt6/mainwindow.h +++ b/src/gui/qt6/mainwindow.h @@ -13,6 +13,10 @@ #include "gdal_priv.h" #include #include +#include "ninja_version.h" +#include "cpl_http.h" + + QT_BEGIN_NAMESPACE namespace Ui { @@ -110,5 +114,9 @@ private slots: Ui::MainWindow *ui; QWebEngineView *webView; + + bool NinjaCheckVersions(char * mostrecentversion, char * localversion); + char * NinjaQueryServerMessages(bool checkAbort); + void checkMessages(void); }; #endif // MAINWINDOW_H From c6418fb242fca835ae2af99f628796859b906d8b Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 16 Jun 2025 14:10:08 -0600 Subject: [PATCH 058/435] Added code for splash screen affect after version pop up --- src/gui/qt6/main.cpp | 78 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 71 insertions(+), 7 deletions(-) diff --git a/src/gui/qt6/main.cpp b/src/gui/qt6/main.cpp index 25c4c65f7..2f197a635 100755 --- a/src/gui/qt6/main.cpp +++ b/src/gui/qt6/main.cpp @@ -2,6 +2,10 @@ #include "../../ninja/windninja.h" #include #include +#include +#include +#include +#include // #include "modeldata.h" // #include "provider.h" #include "controller.h" @@ -10,17 +14,77 @@ int main(int argc, char *argv[]) { QApplication a(argc, argv); - MainWindow w; + QIcon icon(":/wn-icon.png"); + QString ver = NINJA_VERSION_STRING; + a.setWindowIcon(icon); + a.setApplicationName(QString("WindNinja")); + a.setApplicationVersion(ver); - Controller controller(&w); + MainWindow* w = nullptr; + try { + w = new MainWindow; + } catch (...) { + QMessageBox::critical(nullptr, "Initialization Error", + "WindNinja failed to initialize. Most likely cause is failure to find data " + "dependencies. Try setting the environment variable WINDNINJA_DATA"); + return 1; + } + + Controller controller(w); // Immediately pull timezone data - QTimer::singleShot(0, &w, &MainWindow::timeZoneDataRequest); + QTimer::singleShot(0, w, &MainWindow::timeZoneDataRequest); - QIcon icon(":/wn-icon.png"); - a.setWindowIcon(icon); - w.setWindowIcon(icon); + // Load and scale splash image + QPixmap bigPixmap(":/wn-splash.png"); + QSize splashSize(1200, 320); + QPixmap splashPixmap = bigPixmap.scaled(splashSize, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation); + + // Create splash screen + QSplashScreen* splash = new QSplashScreen(splashPixmap); + splash->setFont(QFont("Sans Serif", 10)); + QRect screenGeometry = QGuiApplication::primaryScreen()->geometry(); + QPoint center = screenGeometry.center() - splash->rect().center(); + splash->move(center); + + // Apply opacity effect + QGraphicsOpacityEffect* effect = new QGraphicsOpacityEffect(splash); + splash->setGraphicsEffect(effect); + effect->setOpacity(0.0); // Initial opacity 0 + + // Show splash screen + splash->show(); + a.processEvents(); // Ensure splash is shown before animating + + // Fade-in animation + QPropertyAnimation* fadeIn = new QPropertyAnimation(effect, "opacity"); + fadeIn->setDuration(1500); + fadeIn->setStartValue(0.0); + fadeIn->setEndValue(1.0); + + // Fade-out animation + QPropertyAnimation* fadeOut = new QPropertyAnimation(effect, "opacity"); + fadeOut->setDuration(1500); + fadeOut->setStartValue(1.0); + fadeOut->setEndValue(0.0); + + // Sequence: After fade-in completes, wait a bit, then start fade-out + QObject::connect(fadeIn, &QPropertyAnimation::finished, [=]() { + QTimer::singleShot(1500, [=]() { + fadeOut->start(QAbstractAnimation::DeleteWhenStopped); + }); + }); + + // After fade-out completes, show main window and clean up + QObject::connect(fadeOut, &QPropertyAnimation::finished, [=]() { + splash->finish(w); + w->show(); + splash->deleteLater(); + }); + + // Start fade-in + fadeIn->start(QAbstractAnimation::DeleteWhenStopped); - w.show(); return a.exec(); + } From d58ade11281b8ee161ad4c5bcdb911edcd17a585 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 16 Jun 2025 14:27:07 -0600 Subject: [PATCH 059/435] Finished cleanup and fixed CMakeLists.txt to only showcase 1 GUI option --- CMakeLists.txt | 20 - src/gui/move_icon.png | Bin 309 -> 0 bytes src/gui/ui/icons/README | 8 - .../icons/scalable/actions/document-new.svg | 448 ------------ .../icons/scalable/actions/document-open.svg | 535 -------------- .../scalable/actions/document-save-as.svg | 663 ------------------ .../icons/scalable/actions/document-save.svg | 619 ---------------- .../ui/icons/scalable/actions/list-add.svg | 436 ------------ src/ninja/CMakeLists.txt | 1 - 9 files changed, 2730 deletions(-) delete mode 100644 src/gui/move_icon.png delete mode 100644 src/gui/ui/icons/README delete mode 100644 src/gui/ui/icons/scalable/actions/document-new.svg delete mode 100644 src/gui/ui/icons/scalable/actions/document-open.svg delete mode 100644 src/gui/ui/icons/scalable/actions/document-save-as.svg delete mode 100644 src/gui/ui/icons/scalable/actions/document-save.svg delete mode 100644 src/gui/ui/icons/scalable/actions/list-add.svg diff --git a/CMakeLists.txt b/CMakeLists.txt index 13e6bb58e..682c67c35 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -127,12 +127,6 @@ ELSE(USE_VCPKG) endif(WIN32) endif(USE_VCPKG) -option(NINJA_QT6GUI "build Qt6 experimental GUI" ON) -if(NINJA_QT6GUI) - message("building qt6 gui") - add_subdirectory(src/gui) -endif(NINJA_QT6GUI) - if(USE_VCPKG) set(GDAL_LIBRARY GDAL::GDAL) set(NETCDF_LIBRARIES_C netCDF::netcdf) @@ -158,20 +152,6 @@ ENDIF(USE_VCPKG) # Ninja executables option(NINJA_QTGUI "Build Qt GUI" OFF) -if(NINJA_QTGUI) - set(QT_USE_QTMAIN_LIBRARY 1) - include(FindQt4) - find_package(Qt4 COMPONENTS QtCore QtGui QtWebKit QtNetwork REQUIRED) - include(${QT_USE_FILE}) - add_definitions(-DNINJA_GUI) - if(WIN32) - option(ENABLE_CONSOLE "Show the console for CLI/GUI runs" OFF) - option(ENABLE_FIDDLER "Use Fiddler2 proxy to monitor web traffic" OFF) - endif(WIN32) - if(ENABLE_FIDDLER) - add_definitions(-DENABLE_FIDDLER) - endif(ENABLE_FIDDLER) -endif(NINJA_QTGUI) option(NINJA_CLI "Build Command Line Interface" ON) diff --git a/src/gui/move_icon.png b/src/gui/move_icon.png deleted file mode 100644 index bcb510f07ac17e1cc35769e5dc8af0f43fe3ce71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwIgIP#Ss5(zE3Mh2Q)5S3);_%z)cli!0aJ070`uy*F zw$lw!^X}WH{F}T_g-Wlvzfpm!cLC>uZ#8ROFIH-BpYK}0RpG`GdT_DQ3L!Z`$EzQ@ zj?}EV5>mRNu1_I7N$-Gwg6Qj)t?&OZ{qeD5EP4J|=Zio!spmv2XU#c>%T3zuzVEKk4J( z|I=~#!^X1g{ZsxO-}OV diff --git a/src/gui/ui/icons/README b/src/gui/ui/icons/README deleted file mode 100644 index 07edb8f23..000000000 --- a/src/gui/ui/icons/README +++ /dev/null @@ -1,8 +0,0 @@ -# Icons - -Icons should be added from the tango project: - -tango-project.org - -Extract the tar archive and leave the base directory structure as organized in -the archive in the repository. diff --git a/src/gui/ui/icons/scalable/actions/document-new.svg b/src/gui/ui/icons/scalable/actions/document-new.svg deleted file mode 100644 index 1bfdb1640..000000000 --- a/src/gui/ui/icons/scalable/actions/document-new.svg +++ /dev/null @@ -1,448 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - New Document - - - Jakub Steiner - - - http://jimmac.musichall.cz - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/ui/icons/scalable/actions/document-open.svg b/src/gui/ui/icons/scalable/actions/document-open.svg deleted file mode 100644 index 55e6177d2..000000000 --- a/src/gui/ui/icons/scalable/actions/document-open.svg +++ /dev/null @@ -1,535 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - Folder Icon Accept - 2005-01-31 - - - Jakub Steiner - - - - http://jimmac.musichall.cz - Active state - when files are being dragged to. - - - Novell, Inc. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/ui/icons/scalable/actions/document-save-as.svg b/src/gui/ui/icons/scalable/actions/document-save-as.svg deleted file mode 100644 index 01e2fb7a5..000000000 --- a/src/gui/ui/icons/scalable/actions/document-save-as.svg +++ /dev/null @@ -1,663 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - Save As - - - Jakub Steiner - - - - - hdd - hard drive - save as - io - store - - - - - http://jimmac.musichall.cz - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/ui/icons/scalable/actions/document-save.svg b/src/gui/ui/icons/scalable/actions/document-save.svg deleted file mode 100644 index 2922c4331..000000000 --- a/src/gui/ui/icons/scalable/actions/document-save.svg +++ /dev/null @@ -1,619 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - Save - - - Jakub Steiner - - - - - hdd - hard drive - save - io - store - - - - - http://jimmac.musichall.cz - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/ui/icons/scalable/actions/list-add.svg b/src/gui/ui/icons/scalable/actions/list-add.svg deleted file mode 100644 index 6eaed4481..000000000 --- a/src/gui/ui/icons/scalable/actions/list-add.svg +++ /dev/null @@ -1,436 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - Add - 2006-01-04 - - - Andreas Nilsson - - - http://tango-project.org - - - add - plus - - - - - - - - - - - - - - - - - - diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt index 88630b129..6d30e3777 100644 --- a/src/ninja/CMakeLists.txt +++ b/src/ninja/CMakeLists.txt @@ -135,7 +135,6 @@ set(LINK_LIBS ${NETCDF_LIBRARIES_C} if(NINJA_QTGUI) include_directories(${NINJA_INCLUDES} ${QT_INCLUDES}) - QT4_WRAP_CPP(NINJA_LIB_INCLUDES_MOC ninjaCom.h) set(NINJA_SOURCES ${NINJA_SOURCES} ${NINJA_LIB_INCLUDES_MOC}) set(LINK_LIBS ${LINK_LIBS} ${QT_LIBRARIES}) else(NINJA_QTGUI) From 25d2d925fc614a8f10217432f257c1ec347f996d Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 16 Jun 2025 17:13:30 -0600 Subject: [PATCH 060/435] added download .lcp file methods, that SHOULD have worked, to the qt6 gui. Interestingly, the cli runs fine for lcp fetching with pdf output, but both the qt6 gui and the test_capi_fetching.c c-api autotest are having the same problem, seg fault upon reading hLayer of /data/landfire.zip/conus.shp --- src/gui/qt6/controller.cpp | 11 +++++++---- src/ninja/ninjaArmy.cpp | 15 +++++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/gui/qt6/controller.cpp b/src/gui/qt6/controller.cpp index a49b8527a..7ba751b57 100644 --- a/src/gui/qt6/controller.cpp +++ b/src/gui/qt6/controller.cpp @@ -73,18 +73,21 @@ void Controller::onTimeZoneDetailsRequest() { void Controller::onGetDEMrequest(std::array boundsBox, QString outputFile) { // Get correct fetch type - // TODO: set correct string for landscape files in else condition int fetchIndex = view->getUi()->fetchType->currentIndex(); string fetchType; if (fetchIndex == 0) { fetchType = "srtm"; - } else if (fetchIndex == 1) { + } else if (fetchIndex == 1) { fetchType = "gmted"; + } else if (fetchIndex == 2) { + printf("downloading lcp file\n"); + fetchType = "lcp"; } else { - fetchType = "land"; + printf("Controller::onGetDEMrequest(), fetchIndex %d is outside of range, using fetchType \"lcp\"\n", fetchIndex); + fetchType = "lcp"; } - double resolution = view->getUi()->meshResValue->value(); + double resolution = 30.0; provider.fetchDEMBoundingBox(outputFile.toStdString(), fetchType, resolution, boundsBox.data()); view->getUi()->elevFilePath->setText(outputFile); diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index d6f77f22f..405ee0edc 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -252,7 +252,10 @@ int ninjaArmy::fetchDEMPoint(double * adfPoint,double *adfBuff, const char* unit else if (strcmp(fetchType, "relief") == 0){ fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::RELIEF_STR,""); } - else{ + else if (strcmp(fetchType, "lcp") == 0){ + fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::LCP_STR,""); + } + if (fetcher == NULL) { delete fetcher; return NINJA_E_INVALID; } @@ -290,8 +293,12 @@ int ninjaArmy::fetchDEMBBox(double *boundsBox, const char *fileName, double reso else if (strcmp(fetchType, "relief") == 0){ fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::RELIEF_STR,""); } + else if (strcmp(fetchType, "lcp") == 0){ + fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::LCP_STR,""); + } if (fetcher == NULL) { - return NINJA_E_INVALID; + delete fetcher; + return NINJA_E_INVALID; } double northBound = boundsBox[0]; @@ -299,13 +306,13 @@ int ninjaArmy::fetchDEMBBox(double *boundsBox, const char *fileName, double reso double southBound = boundsBox[2]; double westBound = boundsBox[3]; int result = fetcher->FetchBoundingBox(boundsBox, resolution, fileName, NULL); - delete fetcher; if (result != 0) { + delete fetcher; return NINJA_E_INVALID; } + delete fetcher; return NINJA_SUCCESS; - } /** From 668776aa5cf55908eb07e6fe3bdad6786dbd1aea Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 16 Jun 2025 17:15:03 -0600 Subject: [PATCH 061/435] added multithreading openmp omp_lock to qt6 gui main.cpp, as is done in both the cli and the qt4 gui. No luck on this helping the .lcp downloading problem --- src/gui/qt6/main.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/gui/qt6/main.cpp b/src/gui/qt6/main.cpp index 12961e390..13270bc1f 100755 --- a/src/gui/qt6/main.cpp +++ b/src/gui/qt6/main.cpp @@ -7,14 +7,26 @@ #include "controller.h" +#ifdef _OPENMP +omp_lock_t netCDF_lock; +#endif + int main(int argc, char *argv[]) { + int result; + #ifdef _OPENMP + omp_init_lock (&netCDF_lock); + #endif + char ** papszOptions = NULL; NinjaErr err = 0; err = NinjaInit(papszOptions); if(err != NINJA_SUCCESS) { printf("NinjaInit: err = %d\n", err); + #ifdef _OPENMP + omp_destroy_lock (&netCDF_lock); + #endif } QApplication a(argc, argv); @@ -26,5 +38,11 @@ int main(int argc, char *argv[]) { QTimer::singleShot(0, &w, &MainWindow::timeZoneDataRequest); w.show(); - return a.exec(); + result = a.exec(); + + #ifdef _OPENMP + omp_destroy_lock (&netCDF_lock); + #endif + + return result; } From 4d9c3b5b4b692ae0cf8dd805463760b7259f3f82 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 17 Jun 2025 11:02:46 -0600 Subject: [PATCH 062/435] fixed qt6 gui mesh resolution, as was done in past commit 6df7ddbd1319bb3649dc6f147aad166a5bdec9ac --- src/gui/qt6/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index 7e3a6eb52..0cfa13d25 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -333,7 +333,7 @@ void MainWindow::on_elevFilePath_textChanged(const QString &arg1) // Calculate cell size if (poInputDS->GetGeoTransform(adfGeoTransform) == CE_None) { - int c1, c2; + double c1, c2; c1 = adfGeoTransform[1]; c2 = adfGeoTransform[5]; if (abs(c1) == abs(c2)) { From 377675102b9a82fa1958a7bd08536aee9f7e3df1 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 17 Jun 2025 11:37:18 -0600 Subject: [PATCH 063/435] Adjusted layout on surface input page and started adjusting naming scheme of ui elements --- src/gui/qt6/mainwindow.cpp | 10 +- src/gui/qt6/mainwindow.ui | 969 ++++++++++++++++++------------------- 2 files changed, 476 insertions(+), 503 deletions(-) diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index 976d9eed7..05bc70233 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -263,14 +263,14 @@ static void refreshUI(const Ui::MainWindow* ui) // Update solve state if (state.solverMethodologyOk && state.inputsOk) { - ui->solveButton->setEnabled(true); + ui->solveBtn->setEnabled(true); ui->solverPageSolveBtn->setEnabled(true); - ui->solveButton->setToolTip(""); + ui->solveBtn->setToolTip(""); ui->solverPageSolveBtn->setToolTip(""); } else { - ui->solveButton->setEnabled(false); + ui->solveBtn->setEnabled(false); ui->solverPageSolveBtn->setEnabled(false); - ui->solveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); + ui->solveBtn->setToolTip("Solver Methodology and Inputs must be passing to solve."); ui->solverPageSolveBtn->setToolTip("Solver Methodology and Inputs must be passing to solve."); } } @@ -771,7 +771,7 @@ void MainWindow::on_outputSaveLocationBtn_clicked() // User selects the solve button on the solver page void MainWindow::on_solverPageSolveBtn_clicked() { - ui->solveButton->click(); + ui->solveBtn->click(); } // User selects the primary solve button diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui index 6296d9b8a..73af381b2 100644 --- a/src/gui/qt6/mainwindow.ui +++ b/src/gui/qt6/mainwindow.ui @@ -6,8 +6,8 @@ 0 0 - 1081 - 638 + 1969 + 1000 @@ -274,7 +274,7 @@ false - + 0 @@ -524,7 +524,7 @@ QFrame::Shadow::Sunken - 5 + 7 @@ -573,7 +573,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -802,7 +802,7 @@ li.checked::marker { content: "\2612"; } 0 - + QLayout::SizeConstraint::SetMinAndMaxSize @@ -819,372 +819,424 @@ li.checked::marker { content: "\2612"; } 5 - - - - 0 - 0 - - - - - 0 - 70 - - - - Elevation Input File - - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 0 - 0 - - - - true - - - *.tif - - - - - - - PointingHandCursor - - - Open File - - - - - - - PointingHandCursor - - - Import From Map - - - - - - - - WORLD SRTM (30m) - - - - - WORLD GMTED (250m) - - - - - Landscape File - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Vegetation - - - - - - - 0 - 0 - - - - PointingHandCursor - - - - Grass - - - - - Brush - - - - - Trees - - - - - - - - Qt::Orientation::Horizontal + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Elevation Input File + + + + 5 - - - 40 - 20 - + + 5 - - - - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Mesh Resolution - - - - - - - 0 - 0 - + + 5 - - PointingHandCursor + + 5 - - Coarse - - - - - Medium - - - - - Fine - + + + + + + 0 + 0 + + + + true + + + *.tif + + + + + + + PointingHandCursor + + + Open File + + + + + + + PointingHandCursor + + + Download File + + + + + + + + WORLD SRTM (30m) + + + + + WORLD GMTED (250m) + + + + + Landscape File + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Vegetation + + - - Custom - + + + + + + 0 + 0 + + + + PointingHandCursor + + + + Grass + + + + + Brush + + + + + Trees + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + - - - - - - false - - - - 0 - 0 - - - - PointingHandCursor - - - false - - - 0.010000000000000 - - - 10000.000000000000000 - - - 200.000000000000000 - - - - - - - true - - - - 0 - 0 - - - - PointingHandCursor - - - Meters - - - true - - - - - - - true - - - - 0 - 0 - - - - PointingHandCursor - - - Feet - - - false - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - Time Zone - - - - - - - 0 - 0 - - - - - 150 - 0 - - - - - 150 - 16777215 - - - - PointingHandCursor - - - - - - -1 - - - 10 - - - QComboBox::SizeAdjustPolicy::AdjustToContentsOnFirstShow - - - - - - - - 0 - 0 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Mesh Resolution + + + + + + + + false + + + + 0 + 0 + + + + PointingHandCursor + + + false + + + 0.010000000000000 + + + 10000.000000000000000 + + + 200.000000000000000 + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + + Coarse + + + + + Medium + + + + + Fine + + + + + Custom + + + + + + + + true + + + + 0 + 0 + + + + PointingHandCursor + + + Feet + + + false + + + + + + + true + + + + 0 + 0 + + + + PointingHandCursor + + + Meters + + + true + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + Time Zone + + + + + + + + + + + 0 + 0 + + + + + 150 + 0 + + + + + 150 + 16777215 + + + + PointingHandCursor + + + + + + -1 + + + 10 + + + QComboBox::SizeAdjustPolicy::AdjustToContentsOnFirstShow + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Show All Zones + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Display Time Zone Details + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 + 0 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> p, li { white-space: pre-wrap; } hr { height: 1px; border-width: 0; } @@ -1195,72 +1247,31 @@ li.checked::marker { content: "\2612"; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Name: Mountain Daylight Time</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Offset from UTC: -07:00:00</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Offset from UTC: -06:00:00</p></body></html> - - - Qt::TextInteractionFlag::NoTextInteraction - - - - - - - - 0 - 0 - - - - PointingHandCursor - - - Display Time Zone Details - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - PointingHandCursor - - - Show All Zones - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - + + + Qt::TextInteractionFlag::NoTextInteraction + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + +
+ + @@ -1435,7 +1446,7 @@ li.checked::marker { content: "\2612"; } - + 6 @@ -1951,7 +1962,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -2921,79 +2932,41 @@ li.checked::marker { content: "\2612"; } - - - - 0 + + + + false - - 3 + + + 0 + 0 + - - 3 + + + 16777215 + 16777215 + - - - - 0 - - - - - - - - - - - - false - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - PointingHandCursor - - - Qt::LayoutDirection::LeftToRight - - - #solveButton { + + PointingHandCursor + + + Qt::LayoutDirection::LeftToRight + + + #solveButton { padding: 0; width: 100px; text-align: center; padding: 5px; } - - - Solve - - - - - - - - - - - true - - - - - - + + + Solve + + @@ -3056,7 +3029,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 1081 + 1969 22 From 6b50ce831fa12737009c6e53c0fb01a8614d15fc Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 17 Jun 2025 11:44:05 -0600 Subject: [PATCH 064/435] removed annoying BOM "^M" characters, could see them at the end of every line when using the command "cat -A | head -n10", noticed them when I edited the files with a standard linux text editor. Replaced them by copying the contents to a new blank file, and saving over the old file. --- src/gui/qt6/provider.cpp | 1652 +++++++++++++++++++------------------- src/gui/qt6/provider.h | 86 +- 2 files changed, 869 insertions(+), 869 deletions(-) diff --git a/src/gui/qt6/provider.cpp b/src/gui/qt6/provider.cpp index d92dde327..a9f8a215d 100755 --- a/src/gui/qt6/provider.cpp +++ b/src/gui/qt6/provider.cpp @@ -1,826 +1,826 @@ -#include "provider.h" -#include "modeldata.h" -#include "../../ninja/windninja.h" - -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - - -NinjaArmyH* ninjaArmy = NULL; -const char * comType = "cli"; -const int nCPUs = 1; -char ** papszOptions = NULL; -NinjaErr err = 0; - -Provider::Provider() { - -} - -int Provider::domain_average_exec(DomainAverageWind& input) { - - std::vector speedVector = input.getSpeedList(); - const double* speedList = speedVector.data(); - std::vector directionVector = input.getDirectionList(); - const double* directionList = directionVector.data(); - const char * demFile = input.getDemFile().c_str(); - double outputResolution = input.getOutputResolution(); - const char* initializationMethod = input.getInitializationMethod().c_str(); - const char* meshChoice = input.getMeshChoice().c_str(); - const char* vegetation = input.getVegetation().c_str(); - const int nLayers = input.getNLayers(); - const int diurnalFlag = input.getDiurnalFlag(); - const double height = input.getHeight(); - const char* heightUnits = input.getHeightUnits().c_str(); - const char* speedUnits = input.getSpeedUnits().c_str(); - bool momentumFlag = input.getMomentumFlag(); - unsigned int numNinjas = input.getNumNinjas(); - const char* outputPath = input.getOutputPath().c_str(); - - /* - * Create the army - */ - ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speedList, speedUnits, directionList, papszOptions); - if( NULL == ninjaArmy ) - { - printf("NinjaCreateArmy: ninjaArmy = NULL\n"); - } - - /* - * Prepare the army - */ - for(unsigned int i=0; i yearVector = input.getYear(); - int* year = yearVector.data(); - vector monthVector = input.getMonth(); - int* month = monthVector.data(); - vector dayVector = input.getDay(); - int* day = dayVector.data(); - vector hourVector = input.getHour(); - int* hour = hourVector.data(); - vector minuteVector = input.getMinute(); - int* minute = minuteVector.data(); - char* station_path = input.getStationPath(); - char* osTimeZone = input.getOSTimeZone(); - bool matchPointFlag = input.getMatchPointFlag(); - - char * demFile = const_cast(input.getDemFile().c_str()); - double outputResolution = input.getOutputResolution(); - const char* initializationMethod = input.getInitializationMethod().c_str(); - const char* meshChoice = input.getMeshChoice().c_str(); - const char* vegetation = input.getVegetation().c_str(); - const int nLayers = input.getNLayers(); - const int diurnalFlag = input.getDiurnalFlag(); - const double height = input.getHeight(); - const char* heightUnits = input.getHeightUnits().c_str(); - bool momentumFlag = input.getMomentumFlag(); - unsigned int numNinjas = input.getNumNinjas(); - const char * outputPath = input.getOutputPath().c_str(); - - /* - * Create the army - */ - ninjaArmy = NinjaMakePointArmy(year, month, day, hour, minute, numNinjas, osTimeZone, station_path, demFile, matchPointFlag, momentumFlag, papszOptions); - - if( NULL == ninjaArmy ) - { - printf("NinjaCreateArmy: ninjaArmy = NULL\n"); - } - - /* - * Prepare the army - */ - for(unsigned int i=0; i> Provider::getTimeZoneData(bool showAllZones) { - QVector> fullData; - QVector> americaData; - - QFile file(":/date_time_zonespec.csv"); - - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - qDebug() << "Failed to open CSV file."; - return fullData; - } - - QTextStream in(&file); - bool firstLine = true; - - while (!in.atEnd()) { - QString line = in.readLine(); - - if (firstLine) { - firstLine = false; - continue; - } - - QStringList tokens = line.split(",", Qt::KeepEmptyParts); - QVector row; - for (const QString& token : tokens) - row.append(token.trimmed().remove('"')); - - if (!row.isEmpty()) - fullData.append(row); - - if (!row.isEmpty()) { - QStringList parts = row[0].split("/", Qt::KeepEmptyParts); - if (!parts.isEmpty() && parts[0] == "America" || row[0] == "Pacific/Honolulu") { - americaData.append(row); - } - } - } - - file.close(); - - if (showAllZones) { - return fullData; - } else { - return americaData; - } - -} - -// Provider for getting time zone details -QString Provider::getTimeZoneDetails(const QString& currentTimeZone) { - QVector matchedRow; - QFile file(":/date_time_zonespec.csv"); - - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - qWarning() << "Failed to open date_time_zonespec.csv"; - return "No data found"; - } - - QTextStream in(&file); - bool firstLine = true; - - while (!in.atEnd()) { - QString line = in.readLine(); - - if (firstLine) { - firstLine = false; - continue; // skip header - } - - QStringList tokens = line.split(",", Qt::KeepEmptyParts); - QVector row; - - for (const QString& token : tokens) - row.append(token.trimmed().remove("\"")); - - QString fullZone = row.mid(0, 1).join("/"); - - if (fullZone == currentTimeZone) { - matchedRow = row; - break; - } - } - - file.close(); - - if (matchedRow.isEmpty()) { - return "No matching time zone found."; - } - - QString standardName = matchedRow.value(2); - QString daylightName = matchedRow.value(4); - QString stdOffsetStr = matchedRow.value(5); // Already in HH:MM:SS - QString dstAdjustStr = matchedRow.value(6); // Already in HH:MM:SS - - // Function to convert signed HH:MM:SS to total seconds - auto timeToSeconds = [](const QString& t) -> int { - QString s = t.trimmed(); - bool negative = s.startsWith('-'); - s = s.remove(QChar('+')).remove(QChar('-')); - - QStringList parts = s.split(':'); - if (parts.size() != 3) return 0; - - int h = parts[0].toInt(); - int m = parts[1].toInt(); - int sec = parts[2].toInt(); - - int total = h * 3600 + m * 60 + sec; - return negative ? -total : total; - }; - - // Convert total seconds back to HH:MM:SS with sign - auto secondsToTime = [](int totalSec) -> QString { - QChar sign = totalSec < 0 ? '-' : '+'; - totalSec = std::abs(totalSec); - - int h = totalSec / 3600; - int m = (totalSec % 3600) / 60; - int s = totalSec % 60; - - return QString("%1%2:%3:%4") - .arg(sign) - .arg(h, 2, 10, QChar('0')) - .arg(m, 2, 10, QChar('0')) - .arg(s, 2, 10, QChar('0')); - }; - - int stdSecs = timeToSeconds(stdOffsetStr); - int dstSecs = timeToSeconds(dstAdjustStr); - QString combinedOffsetStr = secondsToTime(stdSecs + dstSecs); - - return QString("Standard Name:\t\t%1\n" - "Daylight Name:\t\t%2\n" - "Standard Offset from UTC:\t%3\n" - "Daylight Offset from UTC:\t%4") - .arg(standardName) - .arg(daylightName) - .arg(stdOffsetStr) - .arg(combinedOffsetStr); -} - -// Provider for parsing the domain average wind table -QVector> Provider::parseDomainAvgTable(QTableWidget* table) { - QVector> result; - - int rowCount = table->rowCount(); - int colCount = table->columnCount(); - - for (int row = 0; row < rowCount; ++row) { - bool rowComplete = true; - QVector rowData; - - for (int col = 0; col < colCount; ++col) { - if (table->isColumnHidden(col)) { - continue; // skip this column entirely - } - - QTableWidgetItem* item = table->item(row, col); - - if (!item || item->text().trimmed().isEmpty()) { - rowComplete = false; - break; - } - - rowData.append(item->text().trimmed()); - } - - if (rowComplete) { - result.append(rowData); - } - } - return result; -} - -int Provider::fetchDEMBoundingBox(const string demFileOutPut, const string fetch_type, int resolution, double* boundsBox) -{ - /* - * Setting up NinjaArmy - */ - - NinjaArmyH* ninjaArmy = NULL; - char ** papszOptions = NULL; - NinjaErr err = 0; - - /* - * Testing fetching from a DEM bounding box - */ - // Bounding box (north, east, south, west) - err = NinjaFetchDEMBBox(ninjaArmy, boundsBox, demFileOutPut.c_str(), resolution, strdup(fetch_type.c_str()), papszOptions); - if (err != NINJA_SUCCESS){ - printf("NinjaFetchDEMBBox: err = %d\n", err); - } - - return NINJA_SUCCESS; -} - -int Provider::fetchForecast(const string wx_model_type, int numNinjas, const string demFile){ - /* - * const char*wx_model_type = "NOMADS-HRRR-CONUS-3-KM"; - * int numNinjas = 2; - */ - - /* - * Setting up NinjaArmy - */ - NinjaArmyH* ninjaArmy = NULL; - char ** papszOptions = NULL; - NinjaErr err = 0; - - /* - * Testing fetching for a Forecast file (wx_model_type are the names listed in the weather station download in WindNinja) - */ - const char* forecastFilename = NinjaFetchForecast(ninjaArmy, wx_model_type.c_str(), numNinjas, demFile.c_str(), papszOptions); - if (strcmp(forecastFilename, "exception") == 0){ - printf("NinjaFetchForecast: err = %s\n", forecastFilename); - } - else{ - printf("NinjaFetchForecast: forecastFilename = %s\n", forecastFilename); - } - - return NINJA_SUCCESS; -} - -int Provider::fetchStationData(int year, int month, int day, int hour, int minute, int numNinjas, const string output_path, int bufferZone, const string bufferUnits, const string demFile, const string osTimeZone, int fetchLatestFlag){ - /* - * int year[1] = {2023}; - * int month[1] = {10}; - * int day[1] = {10}; - * int hour[1] = {12}; - * int minute[1] = {60}; - * const char* output_path = ""; - * const char* elevation_file = "data/missoula_valley.tif"; - * const char* osTimeZone = "UTC"; - * bool fetchLatestFlag = 1; - * / - - /* - * Setting up NinjaArmy - */ - NinjaArmyH* ninjaArmy = NULL; - char ** papszOptions = NULL; - NinjaErr err = 0; - - /* - * Testing fetching station data from a geotiff file. - */ - - err = NinjaFetchStation(&year, &month, &day, &hour, &minute, numNinjas, demFile.c_str(), bufferZone, bufferUnits.c_str(), osTimeZone.c_str(), fetchLatestFlag, output_path.c_str(), papszOptions); - if (err != NINJA_SUCCESS) { - printf("NinjaFetchStation: err = %d\n", err); - } else { - printf("NinjaFetchStation: success\n"); - } - - return NINJA_SUCCESS; -} - -int Provider::fetchFromDEMPoint (double adfPoints[2], double adfBuff[2], const string units, double dfCellSize, const string pszDstFile, const string fetchtype){ - /* - * double adfPoint[] = {104.0, 40.07}; // Point coordinates (longitude, latitude) - * double adfBuff[] = {30, 30}; // Buffer to store the elevation value - * const char* units = "mi"; - * double dfCellSize = 30.0; // Cell size in meters - * char* pszDstFile = "data/dem_point_output.tif"; - * char* fetchType = "gmted"; - */ - - /* - * Setting up NinjaArmy - */ - NinjaArmyH* ninjaArmy = NULL; - char ** papszOptions = NULL; - NinjaErr err = 0; - - /* - * Testing fetching from a DEM point - */ - err = NinjaFetchDEMPoint(ninjaArmy, adfPoints, adfBuff, units.c_str(), dfCellSize, strdup(pszDstFile.c_str()), strdup(fetchtype.c_str()), papszOptions); - if (err != NINJA_SUCCESS) { - printf("NinjaFetchDemPoint: err = %d\n", err); - } else { - printf("NinjaFetchDemPoint: elevation = %f\n", adfBuff[0]); - } - - return NINJA_SUCCESS; -} - -vector Provider::getOutputFileNames(QString demFile, QTableWidget *table, QString meshValue, int numFiles, QString outputPath) { - vector outputFiles; - QDir outDir(outputPath); - QString demName = QFileInfo(demFile).completeBaseName(); - int meshInt = static_cast(std::round(meshValue.toDouble())); - QString meshSize = QString::number(meshInt) + "m"; - - for (int i = 0; i < numFiles; i++) { - QString direction = table->item(i, 1)->text().trimmed(); - QString speed = table->item(i, 0)->text().trimmed(); - QString filePath = outDir.filePath(QString("%1_%2_%3_%4.kmz") - .arg(demName) - .arg(direction) - .arg(speed) - .arg(meshSize)); - outputFiles.push_back(filePath.toStdString()); - } - - return outputFiles; -} +#include "provider.h" +#include "modeldata.h" +#include "../../ninja/windninja.h" + +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + + +NinjaArmyH* ninjaArmy = NULL; +const char * comType = "cli"; +const int nCPUs = 1; +char ** papszOptions = NULL; +NinjaErr err = 0; + +Provider::Provider() { + +} + +int Provider::domain_average_exec(DomainAverageWind& input) { + + std::vector speedVector = input.getSpeedList(); + const double* speedList = speedVector.data(); + std::vector directionVector = input.getDirectionList(); + const double* directionList = directionVector.data(); + const char * demFile = input.getDemFile().c_str(); + double outputResolution = input.getOutputResolution(); + const char* initializationMethod = input.getInitializationMethod().c_str(); + const char* meshChoice = input.getMeshChoice().c_str(); + const char* vegetation = input.getVegetation().c_str(); + const int nLayers = input.getNLayers(); + const int diurnalFlag = input.getDiurnalFlag(); + const double height = input.getHeight(); + const char* heightUnits = input.getHeightUnits().c_str(); + const char* speedUnits = input.getSpeedUnits().c_str(); + bool momentumFlag = input.getMomentumFlag(); + unsigned int numNinjas = input.getNumNinjas(); + const char* outputPath = input.getOutputPath().c_str(); + + /* + * Create the army + */ + ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speedList, speedUnits, directionList, papszOptions); + if( NULL == ninjaArmy ) + { + printf("NinjaCreateArmy: ninjaArmy = NULL\n"); + } + + /* + * Prepare the army + */ + for(unsigned int i=0; i yearVector = input.getYear(); + int* year = yearVector.data(); + vector monthVector = input.getMonth(); + int* month = monthVector.data(); + vector dayVector = input.getDay(); + int* day = dayVector.data(); + vector hourVector = input.getHour(); + int* hour = hourVector.data(); + vector minuteVector = input.getMinute(); + int* minute = minuteVector.data(); + char* station_path = input.getStationPath(); + char* osTimeZone = input.getOSTimeZone(); + bool matchPointFlag = input.getMatchPointFlag(); + + char * demFile = const_cast(input.getDemFile().c_str()); + double outputResolution = input.getOutputResolution(); + const char* initializationMethod = input.getInitializationMethod().c_str(); + const char* meshChoice = input.getMeshChoice().c_str(); + const char* vegetation = input.getVegetation().c_str(); + const int nLayers = input.getNLayers(); + const int diurnalFlag = input.getDiurnalFlag(); + const double height = input.getHeight(); + const char* heightUnits = input.getHeightUnits().c_str(); + bool momentumFlag = input.getMomentumFlag(); + unsigned int numNinjas = input.getNumNinjas(); + const char * outputPath = input.getOutputPath().c_str(); + + /* + * Create the army + */ + ninjaArmy = NinjaMakePointArmy(year, month, day, hour, minute, numNinjas, osTimeZone, station_path, demFile, matchPointFlag, momentumFlag, papszOptions); + + if( NULL == ninjaArmy ) + { + printf("NinjaCreateArmy: ninjaArmy = NULL\n"); + } + + /* + * Prepare the army + */ + for(unsigned int i=0; i> Provider::getTimeZoneData(bool showAllZones) { + QVector> fullData; + QVector> americaData; + + QFile file(":/date_time_zonespec.csv"); + + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qDebug() << "Failed to open CSV file."; + return fullData; + } + + QTextStream in(&file); + bool firstLine = true; + + while (!in.atEnd()) { + QString line = in.readLine(); + + if (firstLine) { + firstLine = false; + continue; + } + + QStringList tokens = line.split(",", Qt::KeepEmptyParts); + QVector row; + for (const QString& token : tokens) + row.append(token.trimmed().remove('"')); + + if (!row.isEmpty()) + fullData.append(row); + + if (!row.isEmpty()) { + QStringList parts = row[0].split("/", Qt::KeepEmptyParts); + if (!parts.isEmpty() && parts[0] == "America" || row[0] == "Pacific/Honolulu") { + americaData.append(row); + } + } + } + + file.close(); + + if (showAllZones) { + return fullData; + } else { + return americaData; + } + +} + +// Provider for getting time zone details +QString Provider::getTimeZoneDetails(const QString& currentTimeZone) { + QVector matchedRow; + QFile file(":/date_time_zonespec.csv"); + + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qWarning() << "Failed to open date_time_zonespec.csv"; + return "No data found"; + } + + QTextStream in(&file); + bool firstLine = true; + + while (!in.atEnd()) { + QString line = in.readLine(); + + if (firstLine) { + firstLine = false; + continue; // skip header + } + + QStringList tokens = line.split(",", Qt::KeepEmptyParts); + QVector row; + + for (const QString& token : tokens) + row.append(token.trimmed().remove("\"")); + + QString fullZone = row.mid(0, 1).join("/"); + + if (fullZone == currentTimeZone) { + matchedRow = row; + break; + } + } + + file.close(); + + if (matchedRow.isEmpty()) { + return "No matching time zone found."; + } + + QString standardName = matchedRow.value(2); + QString daylightName = matchedRow.value(4); + QString stdOffsetStr = matchedRow.value(5); // Already in HH:MM:SS + QString dstAdjustStr = matchedRow.value(6); // Already in HH:MM:SS + + // Function to convert signed HH:MM:SS to total seconds + auto timeToSeconds = [](const QString& t) -> int { + QString s = t.trimmed(); + bool negative = s.startsWith('-'); + s = s.remove(QChar('+')).remove(QChar('-')); + + QStringList parts = s.split(':'); + if (parts.size() != 3) return 0; + + int h = parts[0].toInt(); + int m = parts[1].toInt(); + int sec = parts[2].toInt(); + + int total = h * 3600 + m * 60 + sec; + return negative ? -total : total; + }; + + // Convert total seconds back to HH:MM:SS with sign + auto secondsToTime = [](int totalSec) -> QString { + QChar sign = totalSec < 0 ? '-' : '+'; + totalSec = std::abs(totalSec); + + int h = totalSec / 3600; + int m = (totalSec % 3600) / 60; + int s = totalSec % 60; + + return QString("%1%2:%3:%4") + .arg(sign) + .arg(h, 2, 10, QChar('0')) + .arg(m, 2, 10, QChar('0')) + .arg(s, 2, 10, QChar('0')); + }; + + int stdSecs = timeToSeconds(stdOffsetStr); + int dstSecs = timeToSeconds(dstAdjustStr); + QString combinedOffsetStr = secondsToTime(stdSecs + dstSecs); + + return QString("Standard Name:\t\t%1\n" + "Daylight Name:\t\t%2\n" + "Standard Offset from UTC:\t%3\n" + "Daylight Offset from UTC:\t%4") + .arg(standardName) + .arg(daylightName) + .arg(stdOffsetStr) + .arg(combinedOffsetStr); +} + +// Provider for parsing the domain average wind table +QVector> Provider::parseDomainAvgTable(QTableWidget* table) { + QVector> result; + + int rowCount = table->rowCount(); + int colCount = table->columnCount(); + + for (int row = 0; row < rowCount; ++row) { + bool rowComplete = true; + QVector rowData; + + for (int col = 0; col < colCount; ++col) { + if (table->isColumnHidden(col)) { + continue; // skip this column entirely + } + + QTableWidgetItem* item = table->item(row, col); + + if (!item || item->text().trimmed().isEmpty()) { + rowComplete = false; + break; + } + + rowData.append(item->text().trimmed()); + } + + if (rowComplete) { + result.append(rowData); + } + } + return result; +} + +int Provider::fetchDEMBoundingBox(const string demFileOutPut, const string fetch_type, int resolution, double* boundsBox) +{ + /* + * Setting up NinjaArmy + */ + + NinjaArmyH* ninjaArmy = NULL; + char ** papszOptions = NULL; + NinjaErr err = 0; + + /* + * Testing fetching from a DEM bounding box + */ + // Bounding box (north, east, south, west) + err = NinjaFetchDEMBBox(ninjaArmy, boundsBox, demFileOutPut.c_str(), resolution, strdup(fetch_type.c_str()), papszOptions); + if (err != NINJA_SUCCESS){ + printf("NinjaFetchDEMBBox: err = %d\n", err); + } + + return NINJA_SUCCESS; +} + +int Provider::fetchForecast(const string wx_model_type, int numNinjas, const string demFile){ + /* + * const char*wx_model_type = "NOMADS-HRRR-CONUS-3-KM"; + * int numNinjas = 2; + */ + + /* + * Setting up NinjaArmy + */ + NinjaArmyH* ninjaArmy = NULL; + char ** papszOptions = NULL; + NinjaErr err = 0; + + /* + * Testing fetching for a Forecast file (wx_model_type are the names listed in the weather station download in WindNinja) + */ + const char* forecastFilename = NinjaFetchForecast(ninjaArmy, wx_model_type.c_str(), numNinjas, demFile.c_str(), papszOptions); + if (strcmp(forecastFilename, "exception") == 0){ + printf("NinjaFetchForecast: err = %s\n", forecastFilename); + } + else{ + printf("NinjaFetchForecast: forecastFilename = %s\n", forecastFilename); + } + + return NINJA_SUCCESS; +} + +int Provider::fetchStationData(int year, int month, int day, int hour, int minute, int numNinjas, const string output_path, int bufferZone, const string bufferUnits, const string demFile, const string osTimeZone, int fetchLatestFlag){ + /* + * int year[1] = {2023}; + * int month[1] = {10}; + * int day[1] = {10}; + * int hour[1] = {12}; + * int minute[1] = {60}; + * const char* output_path = ""; + * const char* elevation_file = "data/missoula_valley.tif"; + * const char* osTimeZone = "UTC"; + * bool fetchLatestFlag = 1; + * / + + /* + * Setting up NinjaArmy + */ + NinjaArmyH* ninjaArmy = NULL; + char ** papszOptions = NULL; + NinjaErr err = 0; + + /* + * Testing fetching station data from a geotiff file. + */ + + err = NinjaFetchStation(&year, &month, &day, &hour, &minute, numNinjas, demFile.c_str(), bufferZone, bufferUnits.c_str(), osTimeZone.c_str(), fetchLatestFlag, output_path.c_str(), papszOptions); + if (err != NINJA_SUCCESS) { + printf("NinjaFetchStation: err = %d\n", err); + } else { + printf("NinjaFetchStation: success\n"); + } + + return NINJA_SUCCESS; +} + +int Provider::fetchFromDEMPoint (double adfPoints[2], double adfBuff[2], const string units, double dfCellSize, const string pszDstFile, const string fetchtype){ + /* + * double adfPoint[] = {104.0, 40.07}; // Point coordinates (longitude, latitude) + * double adfBuff[] = {30, 30}; // Buffer to store the elevation value + * const char* units = "mi"; + * double dfCellSize = 30.0; // Cell size in meters + * char* pszDstFile = "data/dem_point_output.tif"; + * char* fetchType = "gmted"; + */ + + /* + * Setting up NinjaArmy + */ + NinjaArmyH* ninjaArmy = NULL; + char ** papszOptions = NULL; + NinjaErr err = 0; + + /* + * Testing fetching from a DEM point + */ + err = NinjaFetchDEMPoint(ninjaArmy, adfPoints, adfBuff, units.c_str(), dfCellSize, strdup(pszDstFile.c_str()), strdup(fetchtype.c_str()), papszOptions); + if (err != NINJA_SUCCESS) { + printf("NinjaFetchDemPoint: err = %d\n", err); + } else { + printf("NinjaFetchDemPoint: elevation = %f\n", adfBuff[0]); + } + + return NINJA_SUCCESS; +} + +vector Provider::getOutputFileNames(QString demFile, QTableWidget *table, QString meshValue, int numFiles, QString outputPath) { + vector outputFiles; + QDir outDir(outputPath); + QString demName = QFileInfo(demFile).completeBaseName(); + int meshInt = static_cast(std::round(meshValue.toDouble())); + QString meshSize = QString::number(meshInt) + "m"; + + for (int i = 0; i < numFiles; i++) { + QString direction = table->item(i, 1)->text().trimmed(); + QString speed = table->item(i, 0)->text().trimmed(); + QString filePath = outDir.filePath(QString("%1_%2_%3_%4.kmz") + .arg(demName) + .arg(direction) + .arg(speed) + .arg(meshSize)); + outputFiles.push_back(filePath.toStdString()); + } + + return outputFiles; +} diff --git a/src/gui/qt6/provider.h b/src/gui/qt6/provider.h index 1dbfe9d25..2006ff9ff 100755 --- a/src/gui/qt6/provider.h +++ b/src/gui/qt6/provider.h @@ -1,43 +1,43 @@ -#ifndef PROVIDER_H -#define PROVIDER_H - -#include "appstate.h" -#include "modeldata.h" -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -class Provider { - private: - class NinjaArmyH* ninjaArmy = nullptr; - const char* comType = "cli"; - const int nCPUs = 1; - char** papszOptions = nullptr; - int err = 0; - - public: - Provider(); - int domain_average_exec(class DomainAverageWind& input); - QVector> getTimeZoneData(bool showAllZones); - QVector> parseDomainAvgTable(QTableWidget* table); - vector getOutputFileNames(QString demFile, QTableWidget* table, QString meshType, int numFiles, QString outputPath); - QString getKmzFilePaths(); - QString getTimeZoneDetails(const QString& currentTimeZone); - void setMapLayers(); - int point_exec(class PointInitialization& input); - int wxmodel_exec(class WeatherModel& input); - - int fetchDEMBoundingBox(const string demFileOutPut, const string fetch_type, int resolution, double* boundsBox); - int fetchForecast(const string wx_model_type, int numNinjas, const string demFile); - int fetchStationData(int year, int month, int day, int hour, int minute, int numNinjas, const string output_path, int bufferZone, const string bufferUnits, const string demFile, const string osTimeZone, int fetchLatestFlag); - int fetchFromDEMPoint (double adfPoints[2], double adfBuff[2], const string units, double dfCellSize, const string pszDstFile, const string fetchtype); - -}; - -#endif //PROVIDER_H +#ifndef PROVIDER_H +#define PROVIDER_H + +#include "appstate.h" +#include "modeldata.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +class Provider { + private: + class NinjaArmyH* ninjaArmy = nullptr; + const char* comType = "cli"; + const int nCPUs = 1; + char** papszOptions = nullptr; + int err = 0; + + public: + Provider(); + int domain_average_exec(class DomainAverageWind& input); + QVector> getTimeZoneData(bool showAllZones); + QVector> parseDomainAvgTable(QTableWidget* table); + vector getOutputFileNames(QString demFile, QTableWidget* table, QString meshType, int numFiles, QString outputPath); + QString getKmzFilePaths(); + QString getTimeZoneDetails(const QString& currentTimeZone); + void setMapLayers(); + int point_exec(class PointInitialization& input); + int wxmodel_exec(class WeatherModel& input); + + int fetchDEMBoundingBox(const string demFileOutPut, const string fetch_type, int resolution, double* boundsBox); + int fetchForecast(const string wx_model_type, int numNinjas, const string demFile); + int fetchStationData(int year, int month, int day, int hour, int minute, int numNinjas, const string output_path, int bufferZone, const string bufferUnits, const string demFile, const string osTimeZone, int fetchLatestFlag); + int fetchFromDEMPoint (double adfPoints[2], double adfBuff[2], const string units, double dfCellSize, const string pszDstFile, const string fetchtype); + +}; + +#endif //PROVIDER_H From 8a3fbe3b6a8b2583a3ce9ad368c0401ee5482b13 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 17 Jun 2025 12:15:47 -0600 Subject: [PATCH 065/435] got the momentum solver to run, with the C-API as well as the qt6 gui. For issue #582 --- autotest/api/test_capi_domain_average_wind.c | 35 +++++++++---- src/gui/qt6/provider.cpp | 55 +++++++++++++++++--- src/ninja/windninja.cpp | 6 +-- src/ninja/windninja.h | 6 +-- 4 files changed, 79 insertions(+), 23 deletions(-) diff --git a/autotest/api/test_capi_domain_average_wind.c b/autotest/api/test_capi_domain_average_wind.c index 79fbea7c5..e1cf7665d 100644 --- a/autotest/api/test_capi_domain_average_wind.c +++ b/autotest/api/test_capi_domain_average_wind.c @@ -52,7 +52,7 @@ int main() * Set up domain average run */ /* inputs that do not vary among ninjas in an army */ - const char * demFile = "/home/mason/Documents/Git/WindNinja/windninja/autotest/api/data/missoula_valley.tif"; + const char * demFile = "/home/atw09001/src/wind/windninja/autotest/api/data/missoula_valley.tif"; const char * initializationMethod = "domain_average"; const char * meshChoice = "coarse"; const char * vegetation = "grass"; @@ -60,7 +60,8 @@ int main() const int diurnalFlag = 0; //diurnal slope wind parameterization not used const double height = 10.0; const char * heightUnits = "m"; - bool momentumFlag = 0; //we're using the conservation of mass solver + //bool momentumFlag = 0; //we're using the conservation of mass solver + bool momentumFlag = 1; //we're using the conservation of momentum solver unsigned int numNinjas = 2; //two ninjas in the ninjaArmy - must be equal to array sizes /* inputs specific to output @@ -70,24 +71,27 @@ int main() const char * units = "m"; const double width = 1.0; const char * scaling = "equal_color"; - const char * outputPath = "/home/mason/Documents/Git/WindNinja/windninja/autotest/api/data/output"; + const char * outputPath = "/home/atw09001/src/wind/windninja/autotest/api/data/output"; const bool outputFlag = 1; /* inputs that can vary among ninjas in an army */ const double speedList[] = {5.5, 5.5}; // matches the size of numNinjas const char * speedUnits = "mps"; - const double directionList[2] = {220, 300}; + const double directionList[2] = {220.0, 300.0}; const int year[2] = {2023, 2023}; const int month[2] = {10, 11}; const int day[2] = {10, 11}; const int hour[2] = {12, 13}; const int minute[2] = {30, 31}; const char * timezone = "UTC"; - const int air[2] = {50, 50}; + const double air[2] = {50.0, 50.0}; const char * airUnits = "F"; - const int cloud[2] = {10, 10}; + const double cloud[2] = {10.0, 10.0}; const char * cloudUnits = "percent"; + const double meshResolution = 300; + const char * meshResolutionUnits = "m"; + /* * Create the army */ @@ -164,13 +168,24 @@ int main() { printf("NinjaSetUniVegetation: err = %d\n", err); } - - err = NinjaSetMeshResolutionChoice(ninjaArmy, i, meshChoice, papszOptions); - if(err != NINJA_SUCCESS) + + if( momentumFlag == true ) { + err = NinjaSetMeshResolution(ninjaArmy, i, meshResolution, meshResolutionUnits, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetMeshResolution: err = %d\n", err); + } + } + else + { + err = NinjaSetMeshResolutionChoice(ninjaArmy, i, meshChoice, papszOptions); + if(err != NINJA_SUCCESS) + { printf("NinjaSetMeshResolutionChoice: err = %d\n", err); + } } - + err = NinjaSetNumVertLayers(ninjaArmy, i, nLayers, papszOptions); if(err != NINJA_SUCCESS) { diff --git a/src/gui/qt6/provider.cpp b/src/gui/qt6/provider.cpp index a9f8a215d..5c78eec38 100755 --- a/src/gui/qt6/provider.cpp +++ b/src/gui/qt6/provider.cpp @@ -43,10 +43,26 @@ int Provider::domain_average_exec(DomainAverageWind& input) { unsigned int numNinjas = input.getNumNinjas(); const char* outputPath = input.getOutputPath().c_str(); + //double meshResolution = view->getUi()->meshResValue->value(); // need to get this another way ..., currently outputResolution is set with this same command so will use that for now + double meshResolution = outputResolution; + const char * meshResolutionUnits = "m"; + + const int year[2] = {2023, 2023}; + const int month[2] = {10, 11}; + const int day[2] = {10, 11}; + const int hour[2] = {12, 13}; + const int minute[2] = {30, 31}; + const char * timezone = "UTC"; + const double air[2] = {50.0, 50.0}; + const char * airUnits = "F"; + const double cloud[2] = {10.0, 10.0}; + const char * cloudUnits = "percent"; + /* * Create the army */ - ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speedList, speedUnits, directionList, papszOptions); + //ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speedList, speedUnits, directionList, papszOptions); + ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speedList, speedUnits, directionList, year, month, day, hour, minute, timezone, air, airUnits, cloud, cloudUnits, papszOptions); if( NULL == ninjaArmy ) { printf("NinjaCreateArmy: ninjaArmy = NULL\n"); @@ -126,10 +142,21 @@ int Provider::domain_average_exec(DomainAverageWind& input) { printf("NinjaSetUniVegetation: err = %d\n", err); } - err = NinjaSetMeshResolutionChoice(ninjaArmy, i, meshChoice, papszOptions); - if(err != NINJA_SUCCESS) + if( momentumFlag == true ) { - printf("NinjaSetMeshResolutionChoice: err = %d\n", err); + err = NinjaSetMeshResolution(ninjaArmy, i, meshResolution, meshResolutionUnits, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetMeshResolution: err = %d\n", err); + } + } + else + { + err = NinjaSetMeshResolutionChoice(ninjaArmy, i, meshChoice, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetMeshResolutionChoice: err = %d\n", err); + } } err = NinjaSetNumVertLayers(ninjaArmy, i, nLayers, papszOptions); @@ -362,6 +389,9 @@ int Provider::wxmodel_exec(WeatherModel& input) { unsigned int numNinjas = input.getNumNinjas(); const char* outputPath = input.getOutputPath().c_str(); + //double meshResolution = view->getUi()->meshResValue->value(); // need to get this another way ..., currently outputResolution is set with this same command so will use that for now + double meshResolution = outputResolution; + const char * meshResolutionUnits = "m"; /* inputs that can vary among ninjas in an army */ //const char * speedUnits = input.get; @@ -456,10 +486,21 @@ int Provider::wxmodel_exec(WeatherModel& input) { printf("NinjaSetUniVegetation: err = %d\n", err); } - err = NinjaSetMeshResolutionChoice(ninjaArmy, i, meshChoice, papszOptions); - if(err != NINJA_SUCCESS) + if( momentumFlag == true ) { - printf("NinjaSetMeshResolutionChoice: err = %d\n", err); + err = NinjaSetMeshResolution(ninjaArmy, i, meshResolution, meshResolutionUnits, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetMeshResolution: err = %d\n", err); + } + } + else + { + err = NinjaSetMeshResolutionChoice(ninjaArmy, i, meshChoice, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetMeshResolutionChoice: err = %d\n", err); + } } err = NinjaSetNumVertLayers(ninjaArmy, i, nLayers, papszOptions); diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 5db6e4c9b..9fb2660fe 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -102,9 +102,9 @@ extern "C" */ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakeDomainAverageArmy - ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options ) -// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, -// const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options ) +// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options ) + ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, + const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options ) { #ifndef NINJAFOAM diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index fdf90184e..12d0a5365 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -79,9 +79,9 @@ typedef int NinjaErr; * Contructor/Destructors *-----------------------------------------------------------------------------*/ WINDNINJADLL_EXPORT NinjaArmyH * NinjaMakeDomainAverageArmy - ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options); -// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, -// const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char* airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options); +// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options); + ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, + const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char* airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options); //TODO: add helper function to generate arrays of years, months, days, hours, and minutes from a station file WINDNINJADLL_EXPORT NinjaArmyH * NinjaMakePointArmy From 2413dd2177ec2c125895ec7c99a74ab6ff447a34 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 17 Jun 2025 13:12:45 -0600 Subject: [PATCH 066/435] Changed the naming and started to refactor code to match, need to adjust signals/slots --- src/gui/qt6/controller.cpp | 58 +- src/gui/qt6/mainwindow.cpp | 126 +-- src/gui/qt6/mainwindow.ui | 2148 ++++++++++++++++-------------------- 3 files changed, 1056 insertions(+), 1276 deletions(-) diff --git a/src/gui/qt6/controller.cpp b/src/gui/qt6/controller.cpp index a49b8527a..80460c688 100644 --- a/src/gui/qt6/controller.cpp +++ b/src/gui/qt6/controller.cpp @@ -32,11 +32,11 @@ void Controller::onSolveRequest() { vector outputFileList = provider.getOutputFileNames( - view->getUi()->elevFilePath->text(), - view->getUi()->windTableData, - view->getUi()->meshResValue->text(), - provider.parseDomainAvgTable(view->getUi()->windTableData).size(), - view->getUi()->outputDirectory->toPlainText()); + view->getUi()->elevationInputFileLineEdit->text(), + view->getUi()->domainAverageTable, + view->getUi()->meshResolutionSpinBox->text(), + provider.parseDomainAvgTable(view->getUi()->domainAverageTable).size(), + view->getUi()->outputDirectoryTextEdit->toPlainText()); view->loadMapKMZ(outputFileList); } @@ -44,37 +44,37 @@ void Controller::onSolveRequest() { // Get time zone list from provider void Controller::onTimeZoneDataRequest() { // Call provider to get 2D vector with timezone data - bool showAllZones = view->getUi()->showAllTimeZones->isChecked(); + bool showAllZones = view->getUi()->timeZoneAllZonesCheckBox->isChecked(); QVector> timeZoneData = provider.getTimeZoneData(showAllZones); // Clear timezone list - view->getUi()->timeZoneSelector->clear(); + view->getUi()->timeZoneComboBox->clear(); // Populate timezone list for (const QVector& zone : timeZoneData) { if (!zone.isEmpty()) { - view->getUi()->timeZoneSelector->addItem(zone[0]); + view->getUi()->timeZoneComboBox->addItem(zone[0]); } } // Default to America/Denver - view->getUi()->timeZoneSelector->setCurrentText("America/Denver"); + view->getUi()->timeZoneComboBox->setCurrentText("America/Denver"); } // Get time zone details from provider void Controller::onTimeZoneDetailsRequest() { - QString currentTimeZone = view->getUi()->timeZoneSelector->currentText(); + QString currentTimeZone = view->getUi()->timeZoneComboBox->currentText(); QString timeZoneDetails = provider.getTimeZoneDetails(currentTimeZone); // Set value in ui - view->getUi()->timeZoneDetails->setText(timeZoneDetails); + view->getUi()->timeZoneDetailsTextEdit->setText(timeZoneDetails); } void Controller::onGetDEMrequest(std::array boundsBox, QString outputFile) { // Get correct fetch type // TODO: set correct string for landscape files in else condition - int fetchIndex = view->getUi()->fetchType->currentIndex(); + int fetchIndex = view->getUi()->elevationInputFileComboBox->currentIndex(); string fetchType; if (fetchIndex == 0) { fetchType = "srtm"; @@ -84,10 +84,10 @@ void Controller::onGetDEMrequest(std::array boundsBox, QString output fetchType = "land"; } - double resolution = view->getUi()->meshResValue->value(); + double resolution = view->getUi()->meshResolutionSpinBox->value(); provider.fetchDEMBoundingBox(outputFile.toStdString(), fetchType, resolution, boundsBox.data()); - view->getUi()->elevFilePath->setText(outputFile); + view->getUi()->elevationInputFileLineEdit->setText(outputFile); } /* @@ -95,20 +95,20 @@ void Controller::onGetDEMrequest(std::array boundsBox, QString output */ BaseInput Controller::setBaseInput() { - QString demPath = view->getUi()->elevFilePath->text(); - double outputResolution = view->getUi()->meshResValue->value(); + QString demPath = view->getUi()->elevationInputFileLineEdit->text(); + double outputResolution = view->getUi()->meshResolutionSpinBox->value(); QString initMethod; - if (view->getUi()->useDomainAvgWind->isChecked()) { + if (view->getUi()->domainAverageCheckBox->isChecked()) { initMethod = "domain_average"; - } else if (view->getUi()->usePointInit->isChecked()) { + } else if (view->getUi()->pointInitializationCheckBox->isChecked()) { initMethod = "point"; } else { initMethod = "wxmodel"; } - QString meshType = view->getUi()->meshResType->currentText().toLower(); - QString vegetation = view->getUi()->vegetationType->currentText().toLower(); + QString meshType = view->getUi()->meshResolutionComboBox->currentText().toLower(); + QString vegetation = view->getUi()->vegetationComboBox->currentText().toLower(); int nLayers = 20; - int diurnalFlag = view->getUi()->useDiurnalWind->isChecked() ? 1 : 0; + int diurnalFlag = view->getUi()->diurnalWindCheckBox->isChecked() ? 1 : 0; double height = view->getUi()->windHeightValue->value(); QString heightUnits; @@ -118,23 +118,23 @@ BaseInput Controller::setBaseInput() { heightUnits = "m"; } - bool useMomentum = view->getUi()->useCOMM->isChecked() ? 1 : 0; + bool useMomentum = view->getUi()->massAndMomentumSolverCheckBox->isChecked() ? 1 : 0; int numNinjas = 1; // Count the number of ninjas, depending on the wind method being used - QVector> domainAvgTable = provider.parseDomainAvgTable(view->getUi()->windTableData); + QVector> domainAvgTable = provider.parseDomainAvgTable(view->getUi()->domainAverageTable); - if (view->getUi()->useDomainAvgWind->isChecked()) { + if (view->getUi()->domainAverageCheckBox->isChecked()) { if (domainAvgTable.size() > 0) { numNinjas = domainAvgTable.size(); } - } else if (view->getUi()->usePointInit->isChecked()) { + } else if (view->getUi()->pointInitializationCheckBox->isChecked()) { //TODO //numNinjas = view->getUi()->pointInitStepsValue->value(); } else { //Todo wxmodel } - QString outputPath = view->getUi()->outputDirectory->toPlainText(); + QString outputPath = view->getUi()->outputDirectoryTextEdit->toPlainText(); return BaseInput ( demPath.toStdString(), @@ -156,7 +156,7 @@ DomainAverageWind Controller::setDomainAverageWind() { BaseInput baseInput = setBaseInput(); // Get all wind data - QVector> windData = provider.parseDomainAvgTable(view->getUi()->windTableData); + QVector> windData = provider.parseDomainAvgTable(view->getUi()->domainAverageTable); // Get speed and direction lists vector speedList; @@ -165,7 +165,7 @@ DomainAverageWind Controller::setDomainAverageWind() { speedList.push_back(windData[i][0].toDouble()); directionList.push_back(windData[i][1].toDouble()); } - QString speedUnits = view->getUi()->speedUnits->currentText(); + QString speedUnits = view->getUi()->tableSpeedUnits->currentText(); return DomainAverageWind ( baseInput, @@ -185,7 +185,7 @@ PointInitialization Controller::setPointInitialization() { vector minute ; //ToDo Understand QT setting and receivingS char* station_path = "NULL"; - char* osTimeZone= view->getUi()->timeZoneSelector->currentText().toUtf8().data();; + char* osTimeZone= view->getUi()->timeZoneComboBox->currentText().toUtf8().data();; bool matchPointFlag = true; int numNinjas = baseInput.getNumNinjas(); diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index 05bc70233..8eed6c92f 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -176,7 +176,7 @@ static void refreshUI(const Ui::MainWindow* ui) */ // Update surface input state - if (ui->elevFilePath->text() != "") { + if (ui->elevationInputFileLineEdit->text() != "") { state.surfaceInputOk = true; ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, tickIcon); ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, ""); @@ -264,14 +264,14 @@ static void refreshUI(const Ui::MainWindow* ui) // Update solve state if (state.solverMethodologyOk && state.inputsOk) { ui->solveBtn->setEnabled(true); - ui->solverPageSolveBtn->setEnabled(true); + ui->numberOfProcessorsSolveBtn->setEnabled(true); ui->solveBtn->setToolTip(""); - ui->solverPageSolveBtn->setToolTip(""); + ui->numberOfProcessorsSolveBtn->setToolTip(""); } else { ui->solveBtn->setEnabled(false); - ui->solverPageSolveBtn->setEnabled(false); + ui->numberOfProcessorsSolveBtn->setEnabled(false); ui->solveBtn->setToolTip("Solver Methodology and Inputs must be passing to solve."); - ui->solverPageSolveBtn->setToolTip("Solver Methodology and Inputs must be passing to solve."); + ui->numberOfProcessorsSolveBtn->setToolTip("Solver Methodology and Inputs must be passing to solve."); } } @@ -287,12 +287,12 @@ void MainWindow::on_useCOM_clicked() // Only allow CoM or CoMM to be toggled if (state.useCOMMtoggled) { - ui->useCOMM->setChecked(false); - state.useCOMMtoggled = ui->useCOMM->isChecked(); + ui->massAndMomentumSolverCheckBox->setChecked(false); + state.useCOMMtoggled = ui->massAndMomentumSolverCheckBox->isChecked(); } // Update app states - state.useCOMtoggled = ui->useCOM->isChecked(); + state.useCOMtoggled = ui->massSolverCheckBox->isChecked(); refreshUI(ui); } @@ -304,12 +304,12 @@ void MainWindow::on_useCOMM_clicked() // Only allow CoM or CoMM to be toggled if (state.useCOMtoggled) { - ui->useCOM->setChecked(false); - state.useCOMtoggled = ui->useCOM->isChecked(); + ui->massSolverCheckBox->setChecked(false); + state.useCOMtoggled = ui->massSolverCheckBox->isChecked(); } // Update app states - state.useCOMMtoggled = ui->useCOMM->isChecked(); + state.useCOMMtoggled = ui->massAndMomentumSolverCheckBox->isChecked(); refreshUI(ui); } @@ -318,7 +318,7 @@ void MainWindow::on_useCOMM_clicked() void MainWindow::on_elevFilePath_textChanged(const QString &arg1) { // Get GDAL data information on DEM input - QString fileName = ui->elevFilePath->text(); + QString fileName = ui->elevationInputFileLineEdit->text(); double adfGeoTransform[6]; GDALDataset *poInputDS; poInputDS = (GDALDataset*)GDALOpen(fileName.toStdString().c_str(), GA_ReadOnly); @@ -360,7 +360,7 @@ void MainWindow::on_elevFilePath_textChanged(const QString &arg1) GDALClose((GDALDatasetH)poInputDS); // Run mesh calculator - MainWindow::on_meshResType_currentIndexChanged(ui->meshResType->currentIndex()); + MainWindow::on_meshResType_currentIndexChanged(ui->meshResolutionComboBox->currentIndex()); refreshUI(ui); } @@ -374,8 +374,8 @@ void MainWindow::on_openFileButton_clicked() downloadsPath, // Starting directory "(*.tif);;All Files (*)" // Filter ); - ui->elevFilePath->setText(filePath); - ui->elevFilePath->setToolTip(filePath); + ui->elevationInputFileLineEdit->setText(filePath); + ui->elevationInputFileLineEdit->setToolTip(filePath); } @@ -453,9 +453,9 @@ void MainWindow::on_meshResType_currentIndexChanged(int index) { // Set value box enable for custom/other if (index == 3) { - ui->meshResValue->setEnabled(true); + ui->meshResolutionSpinBox->setEnabled(true); } else { - ui->meshResValue->setEnabled(false); + ui->meshResolutionSpinBox->setEnabled(false); } int coarse = 4000; @@ -488,21 +488,21 @@ void MainWindow::on_meshResType_currentIndexChanged(int index) meshResolution = (XCellSize + YCellSize) / 2; - ui->meshResValue->setValue(meshResolution); + ui->meshResolutionSpinBox->setValue(meshResolution); } void MainWindow::on_meshResMeters_toggled(bool checked) { if (checked) { - ui->meshResValue->setValue(ui->meshResValue->value() * 0.3048); + ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 0.3048); } } void MainWindow::on_meshResFeet_toggled(bool checked) { if (checked) { - ui->meshResValue->setValue(ui->meshResValue->value() * 3.28084); + ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 3.28084); } } @@ -518,7 +518,7 @@ void MainWindow::on_showAllTimeZones_clicked() AppState& state = AppState::instance(); // Update show all zones state - state.showAllZones = ui->showAllTimeZones->isChecked(); + state.showAllZones = ui->timeZoneAllZonesCheckBox->isChecked(); emit timeZoneDataRequest(); } @@ -529,10 +529,10 @@ void MainWindow::on_displayTimeZoneDetails_clicked() AppState& state = AppState::instance(); // Update time zone details state - state.displayTimeZoneDetails = ui->displayTimeZoneDetails->isChecked(); + state.displayTimeZoneDetails = ui->timeZoneZoneDetailsCheckBox->isChecked(); // Update visibility of details pane - ui->timeZoneDetails->setVisible(state.displayTimeZoneDetails); + ui->timeZoneDetailsTextEdit->setVisible(state.displayTimeZoneDetails); } @@ -542,22 +542,22 @@ void MainWindow::on_useDiurnalWind_clicked() AppState& state = AppState::instance(); // Update UI state - state.diurnalInputToggled = ui->useDiurnalWind->isChecked(); + state.diurnalInputToggled = ui->diurnalWindCheckBox->isChecked(); // Change the domain average input table based on diurnal wind - QTableWidget* table = ui->windTableData; - if (!ui->useDiurnalWind->isChecked()) { + QTableWidget* table = ui->domainAverageTable; + if (!ui->diurnalWindCheckBox->isChecked()) { table->hideColumn(2); table->hideColumn(3); table->hideColumn(4); table->hideColumn(5); - ui->windTableData->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); } else { table->showColumn(2); table->showColumn(3); table->showColumn(4); table->showColumn(5); - ui->windTableData->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); } refreshUI(ui); @@ -569,7 +569,7 @@ void MainWindow::on_useStability_clicked() AppState& state = AppState::instance(); // Update UI state - state.stabilityInputToggled = ui->useStability->isChecked(); + state.stabilityInputToggled = ui->stabilityCheckBox->isChecked(); refreshUI(ui); } @@ -585,13 +585,13 @@ void MainWindow::on_useDomainAvgWind_clicked() AppState& state = AppState::instance(); // Update the domain average wind state - state.domainAverageWindToggled = ui->useDomainAvgWind->isChecked(); + state.domainAverageWindToggled = ui->domainAverageCheckBox->isChecked(); // Only allow one wind methodology to be used if (state.domainAverageWindToggled) { - ui->usePointInit->setChecked(false); + ui->pointInitializationCheckBox->setChecked(false); ui->useWeatherModelInit->setChecked(false); - state.pointInitializationToggled = ui->usePointInit->isChecked(); + state.pointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); state.weatherModelToggled = ui->useWeatherModelInit->isChecked(); } @@ -630,7 +630,7 @@ void MainWindow::on_domainAvgPicklist_currentIndexChanged(int index) // User clears the domain average wind input table void MainWindow::on_clearDAWtable_clicked() { - ui->windTableData->clearContents(); + ui->domainAverageTable->clearContents(); invalidDAWCells.clear(); AppState::instance().domainAverageWindInputTableOk = true; refreshUI(ui); @@ -639,7 +639,7 @@ void MainWindow::on_clearDAWtable_clicked() // User changes a value in the domain average wind input table void MainWindow::on_windTableData_cellChanged(int row, int column) { - QTableWidget* table = ui->windTableData; + QTableWidget* table = ui->domainAverageTable; QTableWidgetItem* item = table->item(row, column); if (!item) return; @@ -718,13 +718,13 @@ void MainWindow::on_usePointInit_clicked() AppState& state = AppState::instance(); // Update the domain average wind state - state.pointInitializationToggled = ui->usePointInit->isChecked(); + state.pointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); // Only allow one wind methodology to be used if (state.pointInitializationToggled) { - ui->useDomainAvgWind->setChecked(false); + ui->domainAverageCheckBox->setChecked(false); ui->useWeatherModelInit->setChecked(false); - state.domainAverageWindToggled = ui->useDomainAvgWind->isChecked(); + state.domainAverageWindToggled = ui->domainAverageCheckBox->isChecked(); state.weatherModelToggled = ui->useWeatherModelInit->isChecked(); } @@ -742,10 +742,10 @@ void MainWindow::on_useWeatherModelInit_clicked() // Only allow one wind methodology to be used if (state.weatherModelToggled) { - ui->useDomainAvgWind->setChecked(false); - ui->usePointInit->setChecked(false); - state.domainAverageWindToggled = ui->useDomainAvgWind->isChecked(); - state.pointInitializationToggled = ui->usePointInit->isChecked(); + ui->domainAverageCheckBox->setChecked(false); + ui->pointInitializationCheckBox->setChecked(false); + state.domainAverageWindToggled = ui->domainAverageCheckBox->isChecked(); + state.pointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); } // Update app state @@ -755,7 +755,7 @@ void MainWindow::on_useWeatherModelInit_clicked() // User selects a new output location void MainWindow::on_outputSaveLocationBtn_clicked() { - QString currentPath = ui->outputDirectory->toPlainText(); + QString currentPath = ui->outputDirectoryTextEdit->toPlainText(); QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); QString dirPath = QFileDialog::getExistingDirectory(this, "Select a directory", // Window title @@ -763,8 +763,8 @@ void MainWindow::on_outputSaveLocationBtn_clicked() QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); if (!dirPath.isEmpty()) { - ui->outputDirectory->setText(dirPath); - ui->outputDirectory->setToolTip(dirPath); + ui->outputDirectoryTextEdit->setText(dirPath); + ui->outputDirectoryTextEdit->setToolTip(dirPath); } } @@ -784,17 +784,17 @@ void MainWindow::on_solveButton_clicked() void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column) { if (item->text(0) == "Conservation of Mass") { - ui->useCOM->click(); + ui->massSolverCheckBox->click(); } else if (item->text(0) == "Conservation of Mass and Momentum") { - ui->useCOMM->click(); + ui->massAndMomentumSolverCheckBox->click(); } else if (item->text(0) == "Diurnal Input") { - ui->useDiurnalWind->click(); + ui->diurnalWindCheckBox->click(); } else if (item->text(0) == "Stability Input") { - ui->useStability->click(); + ui->stabilityCheckBox->click(); } else if (item->text(0) == "Domain Average Wind") { - ui->useDomainAvgWind->click(); + ui->domainAverageCheckBox->click(); } else if (item->text(0) == "Point Initialization") { - ui->usePointInit->click(); + ui->pointInitializationCheckBox->click(); } else if (item->text(0) == "Weather Model") { ui->useWeatherModelInit->click(); } @@ -943,31 +943,31 @@ MainWindow::MainWindow(QWidget *parent) // Surface Input window // Set icons - ui->openFileButton->setIcon(QIcon(":/folder.png")); - ui->getFromMapButton->setIcon(QIcon(":/swoop_final.png")); + ui->elevationInputFileOpenBtn->setIcon(QIcon(":/folder.png")); + ui->elevationInputFileDownloadBtn->setIcon(QIcon(":/swoop_final.png")); // Solver window // Update processor count and set user input default value & upper bound int cpuCount = QThread::idealThreadCount(); - ui->availableProcessors->setPlainText("Available Processors: " + QString::number(cpuCount)); - ui->numProcessorsSpinbox->setMaximum(cpuCount); - ui->numProcessorsSpinbox->setValue(cpuCount); + ui->availableProcessorsTextEdit->setPlainText("Available Processors: " + QString::number(cpuCount)); + ui->numberOfProcessorsSpinBox->setMaximum(cpuCount); + ui->numberOfProcessorsSpinBox->setValue(cpuCount); // Wind Input -> Point Init window ui->downloadPointInitData->setIcon(QIcon(":/application_get")); // Populate default location for output location - ui->outputDirectory->setText(downloadsPath); - ui->outputSaveLocationBtn->setIcon(QIcon(":/folder.png")); + ui->outputDirectoryTextEdit->setText(downloadsPath); + ui->outputDirectoryBtn->setIcon(QIcon(":/folder.png")); // Set initial visibility of time zone details - ui->timeZoneDetails->setVisible(false); + ui->timeZoneDetailsTextEdit->setVisible(false); // Set initial formatting of domain average input table - ui->windTableData->hideColumn(2); - ui->windTableData->hideColumn(3); - ui->windTableData->hideColumn(4); - ui->windTableData->hideColumn(5); - ui->windTableData->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + ui->domainAverageTable->hideColumn(2); + ui->domainAverageTable->hideColumn(3); + ui->domainAverageTable->hideColumn(4); + ui->domainAverageTable->hideColumn(5); + ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); } diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui index 73af381b2..b10a0b37f 100644 --- a/src/gui/qt6/mainwindow.ui +++ b/src/gui/qt6/mainwindow.ui @@ -274,7 +274,7 @@ false - + 0 @@ -476,7 +476,7 @@ - + Qt::Orientation::Vertical @@ -524,11 +524,11 @@ QFrame::Shadow::Sunken - 7 + 12 - + 0 @@ -545,7 +545,7 @@ 0 - + 10 @@ -571,9 +571,22 @@ li.checked::marker { content: "\2612"; } + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + - + 0 @@ -594,44 +607,20 @@ li.checked::marker { content: "\2612"; } 5 - - - + + + PointingHandCursor + + + Use Conservation of Mass + + + false - - - 0 - - - 5 - - - 5 - - - 5 - - - 5 - - - - - PointingHandCursor - - - Use Conservation of Mass - - - false - - - - - + 8 @@ -653,7 +642,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical @@ -667,7 +656,7 @@ li.checked::marker { content: "\2612"; } - + 5 @@ -682,41 +671,17 @@ li.checked::marker { content: "\2612"; } 5 - - - + + + PointingHandCursor + + + Use Conservation of Mass and Momentum - - - 0 - - - 5 - - - 5 - - - 5 - - - 5 - - - - - PointingHandCursor - - - Use Conservation of Mass and Momentum - - - - - + 8 @@ -740,6 +705,19 @@ li.checked::marker { content: "\2612"; } + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + @@ -757,7 +735,7 @@ li.checked::marker { content: "\2612"; } 5 - + 8 @@ -787,6 +765,19 @@ li.checked::marker { content: "\2612"; } + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + @@ -802,7 +793,7 @@ li.checked::marker { content: "\2612"; } 0 - + QLayout::SizeConstraint::SetMinAndMaxSize @@ -819,510 +810,192 @@ li.checked::marker { content: "\2612"; } 5 - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Elevation Input File - - - - 5 + + + + 0 + 0 + + + + + 0 + 70 + + + + Elevation Input File + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 0 + 0 + + + + true + + + *.tif + + + + + + + PointingHandCursor - - 5 + + Open File - - 5 + + + + + + PointingHandCursor - - 5 + + Download File + + + + - - - - - - 0 - 0 - - - - true - - - *.tif - - - - - - - PointingHandCursor - - - Open File - - - - - - - PointingHandCursor - - - Download File - - - - - - - - WORLD SRTM (30m) - - - - - WORLD GMTED (250m) - - - - - Landscape File - - - - - + + WORLD SRTM (30m) + - - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Vegetation - - - - - - - - 0 - 0 - - - - PointingHandCursor - - - - Grass - - - - - Brush - - - - - Trees - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - + + WORLD GMTED (250m) + - - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Mesh Resolution - - - - - - - false - - - - 0 - 0 - - - - PointingHandCursor - - - false - - - 0.010000000000000 - - - 10000.000000000000000 - - - 200.000000000000000 - - - - - - - - 0 - 0 - - - - PointingHandCursor - - - - Coarse - - - - - Medium - - - - - Fine - - - - - Custom - - - - - - - - true - - - - 0 - 0 - - - - PointingHandCursor - - - Feet - - - false - - - - - - - true - - - - 0 - 0 - - - - PointingHandCursor - - - Meters - - - true - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - Time Zone - - - - - - - - - - - 0 - 0 - - - - - 150 - 0 - - - - - 150 - 16777215 - - - - PointingHandCursor - - - - - - -1 - - - 10 - - - QComboBox::SizeAdjustPolicy::AdjustToContentsOnFirstShow - - - - - - - - 0 - 0 - - - - PointingHandCursor - - - Show All Zones - - - - - - - - 0 - 0 - - - - PointingHandCursor - - - Display Time Zone Details - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - 0 - 0 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Name: Mountain Standard Time</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Name: Mountain Daylight Time</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Offset from UTC: -07:00:00</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Offset from UTC: -06:00:00</p></body></html> - - - Qt::TextInteractionFlag::NoTextInteraction - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - + + Landscape File + - - - - + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + - - - - - - 0 - - - 5 - - - 5 - - - 5 - - - 5 - - + 0 0 + + + 0 + 70 + + - + Mesh Resolution - - - 0 - - - 5 - - - 5 - - - 5 - - - 5 - + + + + + false + + + + 0 + 0 + + + + PointingHandCursor + + + false + + + 0.010000000000000 + + + 10000.000000000000000 + + + 200.000000000000000 + + + - + - + + 0 + 0 + + + + PointingHandCursor + + + + Coarse + + + + + Medium + + + + + Fine + + + + + Custom + + + + + + + + true + + + 0 0 @@ -1331,12 +1004,37 @@ li.checked::marker { content: "\2612"; } PointingHandCursor - Use Diurnal Wind + Feet + + + false - + + + true + + + + 0 + 0 + + + + PointingHandCursor + + + Meters + + + true + + + + + Qt::Orientation::Horizontal @@ -1352,70 +1050,53 @@ li.checked::marker { content: "\2612"; } - - - Qt::Orientation::Vertical + + + + 0 + 0 + - + - 20 - 40 + 0 + 70 - - - - - - - - 0 - - - 5 - - - 5 - - - 5 - - - 5 - - - - + Vegetation - - - 0 - - - 5 - - - 5 - - - 5 - - - 5 - + - + + + + 0 + 0 + + PointingHandCursor - - Use Stability - + + + Grass + + + + + Brush + + + + + Trees + + - + Qt::Orientation::Horizontal @@ -1431,7 +1112,224 @@ li.checked::marker { content: "\2612"; } - + + + + 0 + 0 + + + + + 0 + 0 + + + + Time Zone + + + + + + + 0 + 0 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Name: Mountain Standard Time</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Name: Mountain Daylight Time</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Offset from UTC: -07:00:00</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Offset from UTC: -06:00:00</p></body></html> + + + Qt::TextInteractionFlag::NoTextInteraction + + + + + + + + + + 0 + 0 + + + + + 150 + 0 + + + + + 150 + 16777215 + + + + PointingHandCursor + + + + + + -1 + + + 10 + + + QComboBox::SizeAdjustPolicy::AdjustToContentsOnFirstShow + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Show All Zones + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Display Time Zone Details + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + + 0 + + + 5 + + + 5 + + + 5 + + + 5 + + + + + PointingHandCursor + + + Use Diurnal Wind + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + 0 + + + 5 + + + 5 + + + 5 + + + 5 + + + + + PointingHandCursor + + + Use Stability + + + + + Qt::Orientation::Vertical @@ -1447,7 +1345,7 @@ li.checked::marker { content: "\2612"; } - + 6 @@ -1464,501 +1362,418 @@ li.checked::marker { content: "\2612"; } 5 - - - 6 + + + + 0 + 0 + + + + + 0 + 5 + - - QLayout::SizeConstraint::SetMinAndMaxSize + + PointingHandCursor - - 0 + + Domain Average Wind - - - - QLayout::SizeConstraint::SetDefaultConstraint - - - 0 - - - - - - 0 - 0 - - - - - 0 - 5 - - - - PointingHandCursor - + + + + + + + 0 + 100 + + + + Input Wind Height + + + + + + false + + + PointingHandCursor + + + 0.010000000000000 + + + 20.000000000000000 + + + + + + + PointingHandCursor + + - Domain Average Wind + 20ft-US - - - - - - Qt::Orientation::Horizontal + + + + 10m-SI - - - 40 - 20 - + + + + Custom - - - - + + + + + + + false + + + PointingHandCursor + + + Feet + + + true + + + + + + + false + + + PointingHandCursor + + + Meters + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + - - - 10 + + + Table Unites: - + - + - + 0 - 100 + 0 - - Input Wind Height + + + 60 + 0 + - - - - - PointingHandCursor - - - - 20ft-US - - - - - 10m-SI - - - - - Custom - - - - - - - - false - - - PointingHandCursor - - - 0.010000000000000 - - - 20.000000000000000 - - - - - - - false - - - PointingHandCursor - - - Feet - - - true - - - - - - - false - - - PointingHandCursor - - - Meters - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - 0 + + + 60 + 16777215 + - - 0 + + PointingHandCursor - - - - 0 - 0 - - - - - 90 - 0 - - - - - 90 - 16777215 - - - - Table Units: - - - false - - - true - - + + mph + - - - - 0 - 0 - - - - - 60 - 0 - - - - - 60 - 16777215 - - - - PointingHandCursor - - - - mph - - - - - m/s - - - - - kph - - - - - kts - - - + + m/s + - - - - 0 - 0 - - - - - 40 - 0 - - - - - 40 - 16777215 - - - - PointingHandCursor - - - Qt::LayoutDirection::LeftToRight - - - - °F - - - - - °C - - - + + kph + + + + + kts + + + + + + + + 0 + 0 + + + + + 40 + 0 + + + + + 40 + 16777215 + + + + PointingHandCursor + + + Qt::LayoutDirection::LeftToRight + - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - + + °F + - - - - 0 - 0 - - - - PointingHandCursor - - - Clear Table - - + + °C + - + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Clear Table + + - - - QLayout::SizeConstraint::SetMaximumSize + + + Qt::Orientation::Horizontal - - 0 + + + 40 + 20 + - - - - - 1 - 0 - - - - - 100 - 0 - - - - true - - - QAbstractItemView::DragDropMode::DragDrop - - - Qt::DropAction::MoveAction - - - true - - - 50 - - - false - - - 20 - - - 80 - - - true - - - false - - - 20 - - - 20 - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Speed + + + + + + + + + 1 + 0 + + + + + 100 + 0 + + + + true + + + QAbstractItemView::DragDropMode::DragDrop + + + Qt::DropAction::MoveAction + + + true + + + 50 + + + false + + + 20 + + + 80 + + + true + + + false + + + 20 + + + 20 + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Speed (Select) - - - - 10 - - - - - - Direction + + + + 10 + + + + + + Direction (degrees) - - - - - - - 10 - - - - - - Time + + + + + + + 10 + + + + + + Time (hh:mm) - - - - 10 - - - - - - Date + + + + 10 + + + + + + Date (mm/dd/yyyy) - - - - 10 - - - - - - Cloud Cover + + + + 10 + + + + + + Cloud Cover (%) - - - - 10 - - - - - - Air Temp + + + + 10 + + + + + + Air Temp (Select) - - - - 10 - - - - - - - - + + + + 10 + + + + @@ -1989,7 +1804,7 @@ li.checked::marker { content: "\2612"; } 5 - + 0 @@ -2691,7 +2506,7 @@ li.checked::marker { content: "\2612"; } 5 - + 0 @@ -2725,15 +2540,9 @@ li.checked::marker { content: "\2612"; } - - - 0 - - - 0 - + - + 0 @@ -2770,7 +2579,7 @@ li.checked::marker { content: "\2612"; } - + PointingHandCursor @@ -2780,93 +2589,26 @@ li.checked::marker { content: "\2612"; } - - - Qt::Orientation::Horizontal - - - - 40 - 20 - + + + false - - - - - - - - - 0 - 0 - - - - - 16777215 - 25 - - - - QFrame::Shape::NoFrame - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - true - - - Output Directory - - - - - - - 10 - - - 0 0 - - - 300 - 30 - - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - true - - - - - PointingHandCursor - Output Location + Solve - + Qt::Orientation::Horizontal @@ -2881,42 +2623,64 @@ li.checked::marker { content: "\2612"; } - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - false - - - - 0 - 0 - - - - PointingHandCursor - - - Solve + + + Output Directory + + + + + + 0 + 0 + + + + + 300 + 30 + + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + true + + + + + + + PointingHandCursor + + + Output Location + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + - + Qt::Orientation::Vertical @@ -2932,6 +2696,22 @@ li.checked::marker { content: "\2612"; } + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Fixed + + + + 20 + 10 + + + + From c826023e04b2802535bac4728094fb38cd73d8ab Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 17 Jun 2025 18:01:41 -0600 Subject: [PATCH 067/435] finally fixed lcp downloading problem, for both the C-API and the qt6 gui the standard GDAL "OGRFeatureH hFeature = GetNextFeature(hLayer);" function, the for "/data/landfire.zip/conus.shp" "conus" hLayer, was somehow being partially overridden by old windninja GDAL code, in "dbfopen.cpp" and "shpopen.cpp". Removing those two files from the code base made GDAL go back to using standard internal GDAL functions for the .shp file read related to issue #582 --- autotest/api/test_capi_fetching.c | 18 +- src/ninja/CMakeLists.txt | 2 - src/ninja/dbfopen.cpp | 1495 ----------------------- src/ninja/shpopen.cpp | 1867 ----------------------------- 4 files changed, 9 insertions(+), 3373 deletions(-) delete mode 100644 src/ninja/dbfopen.cpp delete mode 100644 src/ninja/shpopen.cpp diff --git a/autotest/api/test_capi_fetching.c b/autotest/api/test_capi_fetching.c index 989a8a35c..68c37311f 100644 --- a/autotest/api/test_capi_fetching.c +++ b/autotest/api/test_capi_fetching.c @@ -53,9 +53,9 @@ int main() /* * Testing fetching from a DEM bounding box */ - const char * demFileBBox = "data/fetch/DEMBBox.tif"; // output file name - char * fetch_type = "gmted"; // can be srtm, gmted, relief - double resolution = 30; // 30 m resolution + const char * demFileBBox = "/home/atw09001/src/wind/windninja/autotest/api/data/fetch/DEMBBox.tif"; // output file name + char * fetch_type = "lcp"; // can be srtm, gmted, relief + double resolution = 30.0; // 30 m resolution double boundsBox [] = {40.07, -104.0, 40.0, -104.07}; // Bounding box (north, east, south, west) err = NinjaFetchDEMBBox(ninjaArmy, boundsBox, demFileBBox, resolution, fetch_type, papszOptions); if (err != NINJA_SUCCESS){ @@ -112,8 +112,8 @@ int main() int hour[2] = {2, 2}; int minute[2] = {2, 2}; int size = 2; - const char* output_path = "data/fetch/"; - const char* elevation_file = "data/missoula_valley.tif"; + const char* output_path = "/home/atw09001/src/wind/windninja/autotest/api/data/fetch/"; + const char* elevation_file = "/home/atw09001/src/wind/windninja/autotest/api/data/missoula_valley.tif"; const char* osTimeZone = "UTC"; bool fetchLatestFlag = 1; double buffer = 10; @@ -129,11 +129,11 @@ int main() /* * Testing fetching from a DEM point */ - double adfPoint[] = {104.0, 40.07}; // Point coordinates (longitude, latitude) - double adfBuff[] = {30, 30}; // Buffer to store the elevation value + double adfPoint[] = {-104.0, 40.07}; // Point coordinates (longitude, latitude) + double adfBuff[] = {1.5, 1.5}; // Buffer to store the elevation value double dfCellSize = 30.0; // Cell size in meters - char* pszDstFile = "data/fetch/DEMpoint.tif"; - char* fetchType = "gmted"; + char* pszDstFile = "/home/atw09001/src/wind/windninja/autotest/api/data/fetch/DEMpoint.tif"; + char* fetchType = "lcp"; err = NinjaFetchDEMPoint(ninjaArmy, adfPoint, adfBuff, units, dfCellSize, pszDstFile, fetchType, papszOptions); if (err != NINJA_SUCCESS) { printf("NinjaFetchDemPoint: err = %d\n", err); diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt index 5e169db9a..dae9ae514 100644 --- a/src/ninja/CMakeLists.txt +++ b/src/ninja/CMakeLists.txt @@ -33,7 +33,6 @@ set(NINJA_SOURCES air.cpp Aspect.cpp cellDiurnal.cpp cli.cpp - dbfopen.cpp domainAverageInitialization.cpp dust.cpp EasyBMP.cpp @@ -83,7 +82,6 @@ set(NINJA_SOURCES air.cpp relief_fetch.cpp Shade.cpp ShapeVector.cpp - shpopen.cpp Slope.cpp solar.cpp solpos.cpp diff --git a/src/ninja/dbfopen.cpp b/src/ninja/dbfopen.cpp deleted file mode 100644 index 453f2bb19..000000000 --- a/src/ninja/dbfopen.cpp +++ /dev/null @@ -1,1495 +0,0 @@ -/****************************************************************************** - * $Id$ - * - * Project: Shapelib - * Purpose: Implementation of .dbf access API documented in dbf_api.html. - * Author: Frank Warmerdam, warmerdam@pobox.com - * - ****************************************************************************** - * Copyright (c) 1999, Frank Warmerdam - * - * This software is available under the following "MIT Style" license, - * or at the option of the licensee under the LGPL (see LICENSE.LGPL). This - * option is discussed in more detail in shapelib.html. - * - * -- - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - ****************************************************************************** - * - * $Log: dbfopen.c,v $ - * Revision 1.48 2003/03/10 14:51:27 warmerda - * DBFWrite* calls now return FALSE if they have to truncate - * - * Revision 1.47 2002/11/20 03:32:22 warmerda - * Ensure field name in DBFGetFieldIndex() is properly terminated. - * - * Revision 1.46 2002/10/09 13:10:21 warmerda - * Added check that width is positive. - * - * Revision 1.45 2002/09/29 00:00:08 warmerda - * added FTLogical and logical attribute read/write calls - * - * Revision 1.44 2002/05/07 13:46:11 warmerda - * Added DBFWriteAttributeDirectly(). - * - * Revision 1.43 2002/02/13 19:39:21 warmerda - * Fix casting issues in DBFCloneEmpty(). - * - * Revision 1.42 2002/01/15 14:36:07 warmerda - * updated email address - * - * Revision 1.41 2002/01/15 14:31:49 warmerda - * compute rather than copying nHeaderLength in DBFCloneEmpty() - * - * Revision 1.40 2002/01/09 04:32:35 warmerda - * fixed to read correct amount of header - * - * Revision 1.39 2001/12/11 22:41:03 warmerda - * improve io related error checking when reading header - * - * Revision 1.38 2001/11/28 16:07:31 warmerda - * Cleanup to avoid compiler warnings as suggested by Richard Hash. - * - * Revision 1.37 2001/07/04 05:18:09 warmerda - * do last fix properly - * - * Revision 1.36 2001/07/04 05:16:09 warmerda - * fixed fieldname comparison in DBFGetFieldIndex - * - * Revision 1.35 2001/06/22 02:10:06 warmerda - * fixed NULL shape support with help from Jim Matthews - * - * Revision 1.33 2001/05/31 19:20:13 warmerda - * added DBFGetFieldIndex() - * - * Revision 1.32 2001/05/31 18:15:40 warmerda - * Added support for NULL fields in DBF files - * - * Revision 1.31 2001/05/23 13:36:52 warmerda - * added use of SHPAPI_CALL - * - * Revision 1.30 2000/12/05 14:43:38 warmerda - * DBReadAttribute() white space trimming bug fix - * - * Revision 1.29 2000/10/05 14:36:44 warmerda - * fix bug with writing very wide numeric fields - * - * Revision 1.28 2000/09/25 14:18:07 warmerda - * Added some casts of strlen() return result to fix warnings on some - * systems, as submitted by Daniel. - * - * Revision 1.27 2000/09/25 14:15:51 warmerda - * added DBFGetNativeFieldType() - * - * Revision 1.26 2000/07/07 13:39:45 warmerda - * removed unused variables, and added system include files - * - * Revision 1.25 2000/05/29 18:19:13 warmerda - * avoid use of uchar, and adding casting fix - * - * Revision 1.24 2000/05/23 13:38:27 warmerda - * Added error checks on return results of fread() and fseek(). - * - * Revision 1.23 2000/05/23 13:25:49 warmerda - * Avoid crashing if field or record are out of range in dbfread*attribute(). - * - * Revision 1.22 1999/12/15 13:47:24 warmerda - * Added stdlib.h to ensure that atof() is prototyped. - * - * Revision 1.21 1999/12/13 17:25:46 warmerda - * Added support for upper case .DBF extention. - * - * Revision 1.20 1999/11/30 16:32:11 warmerda - * Use atof() instead of sscanf(). - * - * Revision 1.19 1999/11/05 14:12:04 warmerda - * updated license terms - * - * Revision 1.18 1999/07/27 00:53:28 warmerda - * ensure that whole old field value clear on write of string - * - * Revision 1.1 1999/07/05 18:58:07 warmerda - * New - * - * Revision 1.17 1999/06/11 19:14:12 warmerda - * Fixed some memory leaks. - * - * Revision 1.16 1999/06/11 19:04:11 warmerda - * Remoted some unused variables. - * - * Revision 1.15 1999/05/11 03:19:28 warmerda - * added new Tuple api, and improved extension handling - add from candrsn - * - * Revision 1.14 1999/05/04 15:01:48 warmerda - * Added 'F' support. - * - * Revision 1.13 1999/03/23 17:38:59 warmerda - * DBFAddField() now actually does return the new field number, or -1 if - * it fails. - * - * Revision 1.12 1999/03/06 02:54:46 warmerda - * Added logic to convert shapefile name to dbf filename in DBFOpen() - * for convenience. - * - * Revision 1.11 1998/12/31 15:30:34 warmerda - * Improved the interchangability of numeric and string attributes. Add - * white space trimming option for attributes. - * - * Revision 1.10 1998/12/03 16:36:44 warmerda - * Use r+b instead of rb+ for binary access. - * - * Revision 1.9 1998/12/03 15:34:23 warmerda - * Updated copyright message. - * - * Revision 1.8 1997/12/04 15:40:15 warmerda - * Added newline character after field definitions. - * - * Revision 1.7 1997/03/06 14:02:10 warmerda - * Ensure bUpdated is initialized. - * - * Revision 1.6 1996/02/12 04:54:41 warmerda - * Ensure that DBFWriteAttribute() returns TRUE if it succeeds. - * - * Revision 1.5 1995/10/21 03:15:12 warmerda - * Changed to use binary file access, and ensure that the - * field name field is zero filled, and limited to 10 chars. - * - * Revision 1.4 1995/08/24 18:10:42 warmerda - * Added use of SfRealloc() to avoid pre-ANSI realloc() functions such - * as on the Sun. - * - * Revision 1.3 1995/08/04 03:15:16 warmerda - * Fixed up header. - * - * Revision 1.2 1995/08/04 03:14:43 warmerda - * Added header. - */ - -static char rcsid[] = - "$Id$"; - -#include "shapefil.h" - -#include -#include -#include -#include - -#ifndef FALSE -# define FALSE 0 -# define TRUE 1 -#endif - -static int nStringFieldLen = 0; -static char * pszStringField = NULL; - -/************************************************************************/ -/* SfRealloc() */ -/* */ -/* A realloc cover function that will access a NULL pointer as */ -/* a valid input. */ -/************************************************************************/ - -static void * SfRealloc( void * pMem, int nNewSize ) - -{ - if( pMem == NULL ) - return( (void *) malloc(nNewSize) ); - else - return( (void *) realloc(pMem,nNewSize) ); -} - -/************************************************************************/ -/* DBFWriteHeader() */ -/* */ -/* This is called to write out the file header, and field */ -/* descriptions before writing any actual data records. This */ -/* also computes all the DBFDataSet field offset/size/decimals */ -/* and so forth values. */ -/************************************************************************/ - -static void DBFWriteHeader(DBFHandle psDBF) - -{ - unsigned char abyHeader[XBASE_FLDHDR_SZ]; - int i; - - if( !psDBF->bNoHeader ) - return; - - psDBF->bNoHeader = FALSE; - -/* -------------------------------------------------------------------- */ -/* Initialize the file header information. */ -/* -------------------------------------------------------------------- */ - for( i = 0; i < XBASE_FLDHDR_SZ; i++ ) - abyHeader[i] = 0; - - abyHeader[0] = 0x03; /* memo field? - just copying */ - - /* date updated on close, record count preset at zero */ - - abyHeader[8] = psDBF->nHeaderLength % 256; - abyHeader[9] = psDBF->nHeaderLength / 256; - - abyHeader[10] = psDBF->nRecordLength % 256; - abyHeader[11] = psDBF->nRecordLength / 256; - -/* -------------------------------------------------------------------- */ -/* Write the initial 32 byte file header, and all the field */ -/* descriptions. */ -/* -------------------------------------------------------------------- */ - fseek( psDBF->fp, 0, 0 ); - fwrite( abyHeader, XBASE_FLDHDR_SZ, 1, psDBF->fp ); - fwrite( psDBF->pszHeader, XBASE_FLDHDR_SZ, psDBF->nFields, psDBF->fp ); - -/* -------------------------------------------------------------------- */ -/* Write out the newline character if there is room for it. */ -/* -------------------------------------------------------------------- */ - if( psDBF->nHeaderLength > 32*psDBF->nFields + 32 ) - { - char cNewline; - - cNewline = 0x0d; - fwrite( &cNewline, 1, 1, psDBF->fp ); - } -} - -/************************************************************************/ -/* DBFFlushRecord() */ -/* */ -/* Write out the current record if there is one. */ -/************************************************************************/ - -static void DBFFlushRecord( DBFHandle psDBF ) - -{ - int nRecordOffset; - - if( psDBF->bCurrentRecordModified && psDBF->nCurrentRecord > -1 ) - { - psDBF->bCurrentRecordModified = FALSE; - - nRecordOffset = psDBF->nRecordLength * psDBF->nCurrentRecord - + psDBF->nHeaderLength; - - fseek( psDBF->fp, nRecordOffset, 0 ); - fwrite( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); - } -} - -/************************************************************************/ -/* DBFOpen() */ -/* */ -/* Open a .dbf file. */ -/************************************************************************/ - -DBFHandle SHPAPI_CALL -DBFOpen( const char * pszFilename, const char * pszAccess ) - -{ - DBFHandle psDBF; - unsigned char *pabyBuf; - int nFields, nHeadLen, nRecLen, iField, i; - char *pszBasename, *pszFullname; - -/* -------------------------------------------------------------------- */ -/* We only allow the access strings "rb" and "r+". */ -/* -------------------------------------------------------------------- */ - if( strcmp(pszAccess,"r") != 0 && strcmp(pszAccess,"r+") != 0 - && strcmp(pszAccess,"rb") != 0 && strcmp(pszAccess,"rb+") != 0 - && strcmp(pszAccess,"r+b") != 0 ) - return( NULL ); - - if( strcmp(pszAccess,"r") == 0 ) - pszAccess = "rb"; - - if( strcmp(pszAccess,"r+") == 0 ) - pszAccess = "rb+"; - -/* -------------------------------------------------------------------- */ -/* Compute the base (layer) name. If there is any extension */ -/* on the passed in filename we will strip it off. */ -/* -------------------------------------------------------------------- */ - pszBasename = (char *) malloc(strlen(pszFilename)+5); - strcpy( pszBasename, pszFilename ); - for( i = strlen(pszBasename)-1; - i > 0 && pszBasename[i] != '.' && pszBasename[i] != '/' - && pszBasename[i] != '\\'; - i-- ) {} - - if( pszBasename[i] == '.' ) - pszBasename[i] = '\0'; - - pszFullname = (char *) malloc(strlen(pszBasename) + 5); - sprintf( pszFullname, "%s.dbf", pszBasename ); - - psDBF = (DBFHandle) calloc( 1, sizeof(DBFInfo) ); - psDBF->fp = fopen( pszFullname, pszAccess ); - - if( psDBF->fp == NULL ) - { - sprintf( pszFullname, "%s.DBF", pszBasename ); - psDBF->fp = fopen(pszFullname, pszAccess ); - } - - free( pszBasename ); - free( pszFullname ); - - if( psDBF->fp == NULL ) - { - free( psDBF ); - return( NULL ); - } - - psDBF->bNoHeader = FALSE; - psDBF->nCurrentRecord = -1; - psDBF->bCurrentRecordModified = FALSE; - -/* -------------------------------------------------------------------- */ -/* Read Table Header info */ -/* -------------------------------------------------------------------- */ - pabyBuf = (unsigned char *) malloc(500); - if( fread( pabyBuf, 32, 1, psDBF->fp ) != 1 ) - { - fclose( psDBF->fp ); - free( pabyBuf ); - free( psDBF ); - return NULL; - } - - psDBF->nRecords = - pabyBuf[4] + pabyBuf[5]*256 + pabyBuf[6]*256*256 + pabyBuf[7]*256*256*256; - - psDBF->nHeaderLength = nHeadLen = pabyBuf[8] + pabyBuf[9]*256; - psDBF->nRecordLength = nRecLen = pabyBuf[10] + pabyBuf[11]*256; - - psDBF->nFields = nFields = (nHeadLen - 32) / 32; - - psDBF->pszCurrentRecord = (char *) malloc(nRecLen); - -/* -------------------------------------------------------------------- */ -/* Read in Field Definitions */ -/* -------------------------------------------------------------------- */ - - pabyBuf = (unsigned char *) SfRealloc(pabyBuf,nHeadLen); - psDBF->pszHeader = (char *) pabyBuf; - - fseek( psDBF->fp, 32, 0 ); - if( fread( pabyBuf, nHeadLen-32, 1, psDBF->fp ) != 1 ) - { - fclose( psDBF->fp ); - free( pabyBuf ); - free( psDBF ); - return NULL; - } - - psDBF->panFieldOffset = (int *) malloc(sizeof(int) * nFields); - psDBF->panFieldSize = (int *) malloc(sizeof(int) * nFields); - psDBF->panFieldDecimals = (int *) malloc(sizeof(int) * nFields); - psDBF->pachFieldType = (char *) malloc(sizeof(char) * nFields); - - for( iField = 0; iField < nFields; iField++ ) - { - unsigned char *pabyFInfo; - - pabyFInfo = pabyBuf+iField*32; - - if( pabyFInfo[11] == 'N' || pabyFInfo[11] == 'F' ) - { - psDBF->panFieldSize[iField] = pabyFInfo[16]; - psDBF->panFieldDecimals[iField] = pabyFInfo[17]; - } - else - { - psDBF->panFieldSize[iField] = pabyFInfo[16] + pabyFInfo[17]*256; - psDBF->panFieldDecimals[iField] = 0; - } - - psDBF->pachFieldType[iField] = (char) pabyFInfo[11]; - if( iField == 0 ) - psDBF->panFieldOffset[iField] = 1; - else - psDBF->panFieldOffset[iField] = - psDBF->panFieldOffset[iField-1] + psDBF->panFieldSize[iField-1]; - } - - return( psDBF ); -} - -/************************************************************************/ -/* DBFClose() */ -/************************************************************************/ - -void SHPAPI_CALL -DBFClose(DBFHandle psDBF) -{ -/* -------------------------------------------------------------------- */ -/* Write out header if not already written. */ -/* -------------------------------------------------------------------- */ - if( psDBF->bNoHeader ) - DBFWriteHeader( psDBF ); - - DBFFlushRecord( psDBF ); - -/* -------------------------------------------------------------------- */ -/* Update last access date, and number of records if we have */ -/* write access. */ -/* -------------------------------------------------------------------- */ - if( psDBF->bUpdated ) - { - unsigned char abyFileHeader[32]; - - fseek( psDBF->fp, 0, 0 ); - fread( abyFileHeader, 32, 1, psDBF->fp ); - - abyFileHeader[1] = 95; /* YY */ - abyFileHeader[2] = 7; /* MM */ - abyFileHeader[3] = 26; /* DD */ - - abyFileHeader[4] = psDBF->nRecords % 256; - abyFileHeader[5] = (psDBF->nRecords/256) % 256; - abyFileHeader[6] = (psDBF->nRecords/(256*256)) % 256; - abyFileHeader[7] = (psDBF->nRecords/(256*256*256)) % 256; - - fseek( psDBF->fp, 0, 0 ); - fwrite( abyFileHeader, 32, 1, psDBF->fp ); - } - -/* -------------------------------------------------------------------- */ -/* Close, and free resources. */ -/* -------------------------------------------------------------------- */ - fclose( psDBF->fp ); - - if( psDBF->panFieldOffset != NULL ) - { - free( psDBF->panFieldOffset ); - free( psDBF->panFieldSize ); - free( psDBF->panFieldDecimals ); - free( psDBF->pachFieldType ); - } - - free( psDBF->pszHeader ); - free( psDBF->pszCurrentRecord ); - - free( psDBF ); - - if( pszStringField != NULL ) - { - free( pszStringField ); - pszStringField = NULL; - nStringFieldLen = 0; - } -} - -/************************************************************************/ -/* DBFCreate() */ -/* */ -/* Create a new .dbf file. */ -/************************************************************************/ - -DBFHandle SHPAPI_CALL -DBFCreate( const char * pszFilename ) - -{ - DBFHandle psDBF; - FILE *fp; - char *pszFullname, *pszBasename; - int i; - -/* -------------------------------------------------------------------- */ -/* Compute the base (layer) name. If there is any extension */ -/* on the passed in filename we will strip it off. */ -/* -------------------------------------------------------------------- */ - pszBasename = (char *) malloc(strlen(pszFilename)+5); - strcpy( pszBasename, pszFilename ); - for( i = strlen(pszBasename)-1; - i > 0 && pszBasename[i] != '.' && pszBasename[i] != '/' - && pszBasename[i] != '\\'; - i-- ) {} - - if( pszBasename[i] == '.' ) - pszBasename[i] = '\0'; - - pszFullname = (char *) malloc(strlen(pszBasename) + 5); - sprintf( pszFullname, "%s.dbf", pszBasename ); - free( pszBasename ); - -/* -------------------------------------------------------------------- */ -/* Create the file. */ -/* -------------------------------------------------------------------- */ - fp = fopen( pszFullname, "wb" ); - if( fp == NULL ) - return( NULL ); - - fputc( 0, fp ); - fclose( fp ); - - fp = fopen( pszFullname, "rb+" ); - if( fp == NULL ) - return( NULL ); - - free( pszFullname ); - -/* -------------------------------------------------------------------- */ -/* Create the info structure. */ -/* -------------------------------------------------------------------- */ - psDBF = (DBFHandle) malloc(sizeof(DBFInfo)); - - psDBF->fp = fp; - psDBF->nRecords = 0; - psDBF->nFields = 0; - psDBF->nRecordLength = 1; - psDBF->nHeaderLength = 33; - - psDBF->panFieldOffset = NULL; - psDBF->panFieldSize = NULL; - psDBF->panFieldDecimals = NULL; - psDBF->pachFieldType = NULL; - psDBF->pszHeader = NULL; - - psDBF->nCurrentRecord = -1; - psDBF->bCurrentRecordModified = FALSE; - psDBF->pszCurrentRecord = NULL; - - psDBF->bNoHeader = TRUE; - - return( psDBF ); -} - -/************************************************************************/ -/* DBFAddField() */ -/* */ -/* Add a field to a newly created .dbf file before any records */ -/* are written. */ -/************************************************************************/ - -int SHPAPI_CALL -DBFAddField(DBFHandle psDBF, const char * pszFieldName, - DBFFieldType eType, int nWidth, int nDecimals ) - -{ - char *pszFInfo; - int i; - -/* -------------------------------------------------------------------- */ -/* Do some checking to ensure we can add records to this file. */ -/* -------------------------------------------------------------------- */ - if( psDBF->nRecords > 0 ) - return( -1 ); - - if( !psDBF->bNoHeader ) - return( -1 ); - - if( eType != FTDouble && nDecimals != 0 ) - return( -1 ); - - if( nWidth < 1 ) - return -1; - -/* -------------------------------------------------------------------- */ -/* SfRealloc all the arrays larger to hold the additional field */ -/* information. */ -/* -------------------------------------------------------------------- */ - psDBF->nFields++; - - psDBF->panFieldOffset = (int *) - SfRealloc( psDBF->panFieldOffset, sizeof(int) * psDBF->nFields ); - - psDBF->panFieldSize = (int *) - SfRealloc( psDBF->panFieldSize, sizeof(int) * psDBF->nFields ); - - psDBF->panFieldDecimals = (int *) - SfRealloc( psDBF->panFieldDecimals, sizeof(int) * psDBF->nFields ); - - psDBF->pachFieldType = (char *) - SfRealloc( psDBF->pachFieldType, sizeof(char) * psDBF->nFields ); - -/* -------------------------------------------------------------------- */ -/* Assign the new field information fields. */ -/* -------------------------------------------------------------------- */ - psDBF->panFieldOffset[psDBF->nFields-1] = psDBF->nRecordLength; - psDBF->nRecordLength += nWidth; - psDBF->panFieldSize[psDBF->nFields-1] = nWidth; - psDBF->panFieldDecimals[psDBF->nFields-1] = nDecimals; - - if( eType == FTLogical ) - psDBF->pachFieldType[psDBF->nFields-1] = 'L'; - else if( eType == FTString ) - psDBF->pachFieldType[psDBF->nFields-1] = 'C'; - else - psDBF->pachFieldType[psDBF->nFields-1] = 'N'; - -/* -------------------------------------------------------------------- */ -/* Extend the required header information. */ -/* -------------------------------------------------------------------- */ - psDBF->nHeaderLength += 32; - psDBF->bUpdated = FALSE; - - psDBF->pszHeader = (char *) SfRealloc(psDBF->pszHeader,psDBF->nFields*32); - - pszFInfo = psDBF->pszHeader + 32 * (psDBF->nFields-1); - - for( i = 0; i < 32; i++ ) - pszFInfo[i] = '\0'; - - if( (int) strlen(pszFieldName) < 10 ) - strncpy( pszFInfo, pszFieldName, strlen(pszFieldName)); - else - strncpy( pszFInfo, pszFieldName, 10); - - pszFInfo[11] = psDBF->pachFieldType[psDBF->nFields-1]; - - if( eType == FTString ) - { - pszFInfo[16] = nWidth % 256; - pszFInfo[17] = nWidth / 256; - } - else - { - pszFInfo[16] = nWidth; - pszFInfo[17] = nDecimals; - } - -/* -------------------------------------------------------------------- */ -/* Make the current record buffer appropriately larger. */ -/* -------------------------------------------------------------------- */ - psDBF->pszCurrentRecord = (char *) SfRealloc(psDBF->pszCurrentRecord, - psDBF->nRecordLength); - - return( psDBF->nFields-1 ); -} - -/************************************************************************/ -/* DBFReadAttribute() */ -/* */ -/* Read one of the attribute fields of a record. */ -/************************************************************************/ - -static void *DBFReadAttribute(DBFHandle psDBF, int hEntity, int iField, - char chReqType ) - -{ - int nRecordOffset; - unsigned char *pabyRec; - void *pReturnField = NULL; - - static double dDoubleField; - -/* -------------------------------------------------------------------- */ -/* Verify selection. */ -/* -------------------------------------------------------------------- */ - if( hEntity < 0 || hEntity >= psDBF->nRecords ) - return( NULL ); - - if( iField < 0 || iField >= psDBF->nFields ) - return( NULL ); - -/* -------------------------------------------------------------------- */ -/* Have we read the record? */ -/* -------------------------------------------------------------------- */ - if( psDBF->nCurrentRecord != hEntity ) - { - DBFFlushRecord( psDBF ); - - nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; - - if( fseek( psDBF->fp, nRecordOffset, 0 ) != 0 ) - { - fprintf( stderr, "fseek(%d) failed on DBF file.\n", - nRecordOffset ); - return NULL; - } - - if( fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, - 1, psDBF->fp ) != 1 ) - { - fprintf( stderr, "fread(%d) failed on DBF file.\n", - psDBF->nRecordLength ); - return NULL; - } - - psDBF->nCurrentRecord = hEntity; - } - - pabyRec = (unsigned char *) psDBF->pszCurrentRecord; - -/* -------------------------------------------------------------------- */ -/* Ensure our field buffer is large enough to hold this buffer. */ -/* -------------------------------------------------------------------- */ - if( psDBF->panFieldSize[iField]+1 > nStringFieldLen ) - { - nStringFieldLen = psDBF->panFieldSize[iField]*2 + 10; - pszStringField = (char *) SfRealloc(pszStringField,nStringFieldLen); - } - -/* -------------------------------------------------------------------- */ -/* Extract the requested field. */ -/* -------------------------------------------------------------------- */ - strncpy( pszStringField, - ((const char *) pabyRec) + psDBF->panFieldOffset[iField], - psDBF->panFieldSize[iField] ); - pszStringField[psDBF->panFieldSize[iField]] = '\0'; - - pReturnField = pszStringField; - -/* -------------------------------------------------------------------- */ -/* Decode the field. */ -/* -------------------------------------------------------------------- */ - if( chReqType == 'N' ) - { - dDoubleField = atof(pszStringField); - - pReturnField = &dDoubleField; - } - -/* -------------------------------------------------------------------- */ -/* Should we trim white space off the string attribute value? */ -/* -------------------------------------------------------------------- */ -#ifdef TRIM_DBF_WHITESPACE - else - { - char *pchSrc, *pchDst; - - pchDst = pchSrc = pszStringField; - while( *pchSrc == ' ' ) - pchSrc++; - - while( *pchSrc != '\0' ) - *(pchDst++) = *(pchSrc++); - *pchDst = '\0'; - - while( pchDst != pszStringField && *(--pchDst) == ' ' ) - *pchDst = '\0'; - } -#endif - - return( pReturnField ); -} - -/************************************************************************/ -/* DBFReadIntAttribute() */ -/* */ -/* Read an integer attribute. */ -/************************************************************************/ - -int SHPAPI_CALL -DBFReadIntegerAttribute( DBFHandle psDBF, int iRecord, int iField ) - -{ - double *pdValue; - - pdValue = (double *) DBFReadAttribute( psDBF, iRecord, iField, 'N' ); - - if( pdValue == NULL ) - return 0; - else - return( (int) *pdValue ); -} - -/************************************************************************/ -/* DBFReadDoubleAttribute() */ -/* */ -/* Read a double attribute. */ -/************************************************************************/ - -double SHPAPI_CALL -DBFReadDoubleAttribute( DBFHandle psDBF, int iRecord, int iField ) - -{ - double *pdValue; - - pdValue = (double *) DBFReadAttribute( psDBF, iRecord, iField, 'N' ); - - if( pdValue == NULL ) - return 0.0; - else - return( *pdValue ); -} - -/************************************************************************/ -/* DBFReadStringAttribute() */ -/* */ -/* Read a string attribute. */ -/************************************************************************/ - -const char SHPAPI_CALL1(*) -DBFReadStringAttribute( DBFHandle psDBF, int iRecord, int iField ) - -{ - return( (const char *) DBFReadAttribute( psDBF, iRecord, iField, 'C' ) ); -} - -/************************************************************************/ -/* DBFReadLogicalAttribute() */ -/* */ -/* Read a logical attribute. */ -/************************************************************************/ - -const char SHPAPI_CALL1(*) -DBFReadLogicalAttribute( DBFHandle psDBF, int iRecord, int iField ) - -{ - return( (const char *) DBFReadAttribute( psDBF, iRecord, iField, 'L' ) ); -} - -/************************************************************************/ -/* DBFIsAttributeNULL() */ -/* */ -/* Return TRUE if value for field is NULL. */ -/* */ -/* Contributed by Jim Matthews. */ -/************************************************************************/ - -int SHPAPI_CALL -DBFIsAttributeNULL( DBFHandle psDBF, int iRecord, int iField ) - -{ - const char *pszValue; - - pszValue = DBFReadStringAttribute( psDBF, iRecord, iField ); - - switch(psDBF->pachFieldType[iField]) - { - case 'N': - case 'F': - /* NULL numeric fields have value "****************" */ - return pszValue[0] == '*'; - - case 'D': - /* NULL date fields have value "00000000" */ - return strncmp(pszValue,"00000000",8) == 0; - - case 'L': - /* NULL boolean fields have value "?" */ - return pszValue[0] == '?'; - - default: - /* empty string fields are considered NULL */ - return strlen(pszValue) == 0; - } -} - -/************************************************************************/ -/* DBFGetFieldCount() */ -/* */ -/* Return the number of fields in this table. */ -/************************************************************************/ - -int SHPAPI_CALL -DBFGetFieldCount( DBFHandle psDBF ) - -{ - return( psDBF->nFields ); -} - -/************************************************************************/ -/* DBFGetRecordCount() */ -/* */ -/* Return the number of records in this table. */ -/************************************************************************/ - -int SHPAPI_CALL -DBFGetRecordCount( DBFHandle psDBF ) - -{ - return( psDBF->nRecords ); -} - -/************************************************************************/ -/* DBFGetFieldInfo() */ -/* */ -/* Return any requested information about the field. */ -/************************************************************************/ - -DBFFieldType SHPAPI_CALL -DBFGetFieldInfo( DBFHandle psDBF, int iField, char * pszFieldName, - int * pnWidth, int * pnDecimals ) - -{ - if( iField < 0 || iField >= psDBF->nFields ) - return( FTInvalid ); - - if( pnWidth != NULL ) - *pnWidth = psDBF->panFieldSize[iField]; - - if( pnDecimals != NULL ) - *pnDecimals = psDBF->panFieldDecimals[iField]; - - if( pszFieldName != NULL ) - { - int i; - - strncpy( pszFieldName, (char *) psDBF->pszHeader+iField*32, 11 ); - pszFieldName[11] = '\0'; - for( i = 10; i > 0 && pszFieldName[i] == ' '; i-- ) - pszFieldName[i] = '\0'; - } - - if ( psDBF->pachFieldType[iField] == 'L' ) - return( FTLogical); - - else if( psDBF->pachFieldType[iField] == 'N' - || psDBF->pachFieldType[iField] == 'F' - || psDBF->pachFieldType[iField] == 'D' ) - { - if( psDBF->panFieldDecimals[iField] > 0 ) - return( FTDouble ); - else - return( FTInteger ); - } - else - { - return( FTString ); - } -} - -/************************************************************************/ -/* DBFWriteAttribute() */ -/* */ -/* Write an attribute record to the file. */ -/************************************************************************/ - -static int DBFWriteAttribute(DBFHandle psDBF, int hEntity, int iField, - void * pValue ) - -{ - int nRecordOffset, i, j, nRetResult = TRUE; - unsigned char *pabyRec; - char szSField[400], szFormat[20]; - -/* -------------------------------------------------------------------- */ -/* Is this a valid record? */ -/* -------------------------------------------------------------------- */ - if( hEntity < 0 || hEntity > psDBF->nRecords ) - return( FALSE ); - - if( psDBF->bNoHeader ) - DBFWriteHeader(psDBF); - -/* -------------------------------------------------------------------- */ -/* Is this a brand new record? */ -/* -------------------------------------------------------------------- */ - if( hEntity == psDBF->nRecords ) - { - DBFFlushRecord( psDBF ); - - psDBF->nRecords++; - for( i = 0; i < psDBF->nRecordLength; i++ ) - psDBF->pszCurrentRecord[i] = ' '; - - psDBF->nCurrentRecord = hEntity; - } - -/* -------------------------------------------------------------------- */ -/* Is this an existing record, but different than the last one */ -/* we accessed? */ -/* -------------------------------------------------------------------- */ - if( psDBF->nCurrentRecord != hEntity ) - { - DBFFlushRecord( psDBF ); - - nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; - - fseek( psDBF->fp, nRecordOffset, 0 ); - fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); - - psDBF->nCurrentRecord = hEntity; - } - - pabyRec = (unsigned char *) psDBF->pszCurrentRecord; - - psDBF->bCurrentRecordModified = TRUE; - psDBF->bUpdated = TRUE; - -/* -------------------------------------------------------------------- */ -/* Translate NULL value to valid DBF file representation. */ -/* */ -/* Contributed by Jim Matthews. */ -/* -------------------------------------------------------------------- */ - if( pValue == NULL ) - { - switch(psDBF->pachFieldType[iField]) - { - case 'N': - case 'F': - /* NULL numeric fields have value "****************" */ - memset( (char *) (pabyRec+psDBF->panFieldOffset[iField]), '*', - psDBF->panFieldSize[iField] ); - break; - - case 'D': - /* NULL date fields have value "00000000" */ - memset( (char *) (pabyRec+psDBF->panFieldOffset[iField]), '0', - psDBF->panFieldSize[iField] ); - break; - - case 'L': - /* NULL boolean fields have value "?" */ - memset( (char *) (pabyRec+psDBF->panFieldOffset[iField]), '?', - psDBF->panFieldSize[iField] ); - break; - - default: - /* empty string fields are considered NULL */ - memset( (char *) (pabyRec+psDBF->panFieldOffset[iField]), '\0', - psDBF->panFieldSize[iField] ); - break; - } - return TRUE; - } - -/* -------------------------------------------------------------------- */ -/* Assign all the record fields. */ -/* -------------------------------------------------------------------- */ - switch( psDBF->pachFieldType[iField] ) - { - case 'D': - case 'N': - case 'F': - if( psDBF->panFieldDecimals[iField] == 0 ) - { - int nWidth = psDBF->panFieldSize[iField]; - - if( sizeof(szSField)-2 < nWidth ) - nWidth = sizeof(szSField)-2; - - sprintf( szFormat, "%%%dd", nWidth ); - sprintf(szSField, szFormat, (int) *((double *) pValue) ); - if( (int)strlen(szSField) > psDBF->panFieldSize[iField] ) - { - szSField[psDBF->panFieldSize[iField]] = '\0'; - nRetResult = FALSE; - } - - strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]), - szSField, strlen(szSField) ); - } - else - { - int nWidth = psDBF->panFieldSize[iField]; - - if( sizeof(szSField)-2 < nWidth ) - nWidth = sizeof(szSField)-2; - - sprintf( szFormat, "%%%d.%df", - nWidth, psDBF->panFieldDecimals[iField] ); - sprintf(szSField, szFormat, *((double *) pValue) ); - if( (int) strlen(szSField) > psDBF->panFieldSize[iField] ) - { - szSField[psDBF->panFieldSize[iField]] = '\0'; - nRetResult = FALSE; - } - strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]), - szSField, strlen(szSField) ); - } - break; - - case 'L': - if (psDBF->panFieldSize[iField] >= 1 && - (*(char*)pValue == 'F' || *(char*)pValue == 'T')) - *(pabyRec+psDBF->panFieldOffset[iField]) = *(char*)pValue; - break; - - default: - if( (int) strlen((char *) pValue) > psDBF->panFieldSize[iField] ) - { - j = psDBF->panFieldSize[iField]; - nRetResult = FALSE; - } - else - { - memset( pabyRec+psDBF->panFieldOffset[iField], ' ', - psDBF->panFieldSize[iField] ); - j = strlen((char *) pValue); - } - - strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]), - (char *) pValue, j ); - break; - } - - return( nRetResult ); -} - -/************************************************************************/ -/* DBFWriteAttributeDirectly() */ -/* */ -/* Write an attribute record to the file, but without any */ -/* reformatting based on type. The provided buffer is written */ -/* as is to the field position in the record. */ -/************************************************************************/ - -int DBFWriteAttributeDirectly(DBFHandle psDBF, int hEntity, int iField, - void * pValue ) - -{ - int nRecordOffset, i, j; - unsigned char *pabyRec; - -/* -------------------------------------------------------------------- */ -/* Is this a valid record? */ -/* -------------------------------------------------------------------- */ - if( hEntity < 0 || hEntity > psDBF->nRecords ) - return( FALSE ); - - if( psDBF->bNoHeader ) - DBFWriteHeader(psDBF); - -/* -------------------------------------------------------------------- */ -/* Is this a brand new record? */ -/* -------------------------------------------------------------------- */ - if( hEntity == psDBF->nRecords ) - { - DBFFlushRecord( psDBF ); - - psDBF->nRecords++; - for( i = 0; i < psDBF->nRecordLength; i++ ) - psDBF->pszCurrentRecord[i] = ' '; - - psDBF->nCurrentRecord = hEntity; - } - -/* -------------------------------------------------------------------- */ -/* Is this an existing record, but different than the last one */ -/* we accessed? */ -/* -------------------------------------------------------------------- */ - if( psDBF->nCurrentRecord != hEntity ) - { - DBFFlushRecord( psDBF ); - - nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; - - fseek( psDBF->fp, nRecordOffset, 0 ); - fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); - - psDBF->nCurrentRecord = hEntity; - } - - pabyRec = (unsigned char *) psDBF->pszCurrentRecord; - -/* -------------------------------------------------------------------- */ -/* Assign all the record fields. */ -/* -------------------------------------------------------------------- */ - if( (int)strlen((char *) pValue) > psDBF->panFieldSize[iField] ) - j = psDBF->panFieldSize[iField]; - else - { - memset( pabyRec+psDBF->panFieldOffset[iField], ' ', - psDBF->panFieldSize[iField] ); - j = strlen((char *) pValue); - } - - strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]), - (char *) pValue, j ); - - psDBF->bCurrentRecordModified = TRUE; - psDBF->bUpdated = TRUE; - - return( TRUE ); -} - -/************************************************************************/ -/* DBFWriteDoubleAttribute() */ -/* */ -/* Write a double attribute. */ -/************************************************************************/ - -int SHPAPI_CALL -DBFWriteDoubleAttribute( DBFHandle psDBF, int iRecord, int iField, - double dValue ) - -{ - return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) &dValue ) ); -} - -/************************************************************************/ -/* DBFWriteIntegerAttribute() */ -/* */ -/* Write a integer attribute. */ -/************************************************************************/ - -int SHPAPI_CALL -DBFWriteIntegerAttribute( DBFHandle psDBF, int iRecord, int iField, - int nValue ) - -{ - double dValue = nValue; - - return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) &dValue ) ); -} - -/************************************************************************/ -/* DBFWriteStringAttribute() */ -/* */ -/* Write a string attribute. */ -/************************************************************************/ - -int SHPAPI_CALL -DBFWriteStringAttribute( DBFHandle psDBF, int iRecord, int iField, - const char * pszValue ) - -{ - return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) pszValue ) ); -} - -/************************************************************************/ -/* DBFWriteNULLAttribute() */ -/* */ -/* Write a string attribute. */ -/************************************************************************/ - -int SHPAPI_CALL -DBFWriteNULLAttribute( DBFHandle psDBF, int iRecord, int iField ) - -{ - return( DBFWriteAttribute( psDBF, iRecord, iField, NULL ) ); -} - -/************************************************************************/ -/* DBFWriteLogicalAttribute() */ -/* */ -/* Write a logical attribute. */ -/************************************************************************/ - -int SHPAPI_CALL -DBFWriteLogicalAttribute( DBFHandle psDBF, int iRecord, int iField, - const char lValue) - -{ - return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) (&lValue) ) ); -} - -/************************************************************************/ -/* DBFWriteTuple() */ -/* */ -/* Write an attribute record to the file. */ -/************************************************************************/ - -int SHPAPI_CALL -DBFWriteTuple(DBFHandle psDBF, int hEntity, void * pRawTuple ) - -{ - int nRecordOffset, i; - unsigned char *pabyRec; - -/* -------------------------------------------------------------------- */ -/* Is this a valid record? */ -/* -------------------------------------------------------------------- */ - if( hEntity < 0 || hEntity > psDBF->nRecords ) - return( FALSE ); - - if( psDBF->bNoHeader ) - DBFWriteHeader(psDBF); - -/* -------------------------------------------------------------------- */ -/* Is this a brand new record? */ -/* -------------------------------------------------------------------- */ - if( hEntity == psDBF->nRecords ) - { - DBFFlushRecord( psDBF ); - - psDBF->nRecords++; - for( i = 0; i < psDBF->nRecordLength; i++ ) - psDBF->pszCurrentRecord[i] = ' '; - - psDBF->nCurrentRecord = hEntity; - } - -/* -------------------------------------------------------------------- */ -/* Is this an existing record, but different than the last one */ -/* we accessed? */ -/* -------------------------------------------------------------------- */ - if( psDBF->nCurrentRecord != hEntity ) - { - DBFFlushRecord( psDBF ); - - nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; - - fseek( psDBF->fp, nRecordOffset, 0 ); - fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); - - psDBF->nCurrentRecord = hEntity; - } - - pabyRec = (unsigned char *) psDBF->pszCurrentRecord; - - memcpy ( pabyRec, pRawTuple, psDBF->nRecordLength ); - - psDBF->bCurrentRecordModified = TRUE; - psDBF->bUpdated = TRUE; - - return( TRUE ); -} - -/************************************************************************/ -/* DBFReadTuple() */ -/* */ -/* Read one of the attribute fields of a record. */ -/************************************************************************/ - -const char SHPAPI_CALL1(*) -DBFReadTuple(DBFHandle psDBF, int hEntity ) - -{ - int nRecordOffset; - unsigned char *pabyRec; - static char *pReturnTuple = NULL; - - static int nTupleLen = 0; - -/* -------------------------------------------------------------------- */ -/* Have we read the record? */ -/* -------------------------------------------------------------------- */ - if( hEntity < 0 || hEntity >= psDBF->nRecords ) - return( NULL ); - - if( psDBF->nCurrentRecord != hEntity ) - { - DBFFlushRecord( psDBF ); - - nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; - - fseek( psDBF->fp, nRecordOffset, 0 ); - fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); - - psDBF->nCurrentRecord = hEntity; - } - - pabyRec = (unsigned char *) psDBF->pszCurrentRecord; - - if ( nTupleLen < psDBF->nRecordLength) { - nTupleLen = psDBF->nRecordLength; - pReturnTuple = (char *) SfRealloc(pReturnTuple, psDBF->nRecordLength); - } - - memcpy ( pReturnTuple, pabyRec, psDBF->nRecordLength ); - - return( pReturnTuple ); -} - -/************************************************************************/ -/* DBFCloneEmpty() */ -/* */ -/* Read one of the attribute fields of a record. */ -/************************************************************************/ - -DBFHandle SHPAPI_CALL -DBFCloneEmpty(DBFHandle psDBF, const char * pszFilename ) -{ - DBFHandle newDBF; - - newDBF = DBFCreate ( pszFilename ); - if ( newDBF == NULL ) return ( NULL ); - - newDBF->pszHeader = (char *) malloc ( 32 * psDBF->nFields ); - memcpy ( newDBF->pszHeader, psDBF->pszHeader, 32 * psDBF->nFields ); - - newDBF->nFields = psDBF->nFields; - newDBF->nRecordLength = psDBF->nRecordLength; - newDBF->nHeaderLength = 32 * (psDBF->nFields+1); - - newDBF->panFieldOffset = (int *) malloc ( sizeof(int) * psDBF->nFields ); - memcpy ( newDBF->panFieldOffset, psDBF->panFieldOffset, sizeof(int) * psDBF->nFields ); - newDBF->panFieldSize = (int *) malloc ( sizeof(int) * psDBF->nFields ); - memcpy ( newDBF->panFieldSize, psDBF->panFieldSize, sizeof(int) * psDBF->nFields ); - newDBF->panFieldDecimals = (int *) malloc ( sizeof(int) * psDBF->nFields ); - memcpy ( newDBF->panFieldDecimals, psDBF->panFieldDecimals, sizeof(int) * psDBF->nFields ); - newDBF->pachFieldType = (char *) malloc ( sizeof(int) * psDBF->nFields ); - memcpy ( newDBF->pachFieldType, psDBF->pachFieldType, sizeof(int) * psDBF->nFields ); - - newDBF->bNoHeader = TRUE; - newDBF->bUpdated = TRUE; - - DBFWriteHeader ( newDBF ); - DBFClose ( newDBF ); - - newDBF = DBFOpen ( pszFilename, "rb+" ); - - return ( newDBF ); -} - -/************************************************************************/ -/* DBFGetNativeFieldType() */ -/* */ -/* Return the DBase field type for the specified field. */ -/* */ -/* Value can be one of: 'C' (String), 'D' (Date), 'F' (Float), */ -/* 'N' (Numeric, with or without decimal), */ -/* 'L' (Logical), */ -/* 'M' (Memo: 10 digits .DBT block ptr) */ -/************************************************************************/ - -char SHPAPI_CALL -DBFGetNativeFieldType( DBFHandle psDBF, int iField ) - -{ - if( iField >=0 && iField < psDBF->nFields ) - return psDBF->pachFieldType[iField]; - - return ' '; -} - -/************************************************************************/ -/* str_to_upper() */ -/************************************************************************/ - -static void str_to_upper (char *string) -{ - int len; - short i = -1; - - len = strlen (string); - - while (++i < len) - if (isalpha(string[i]) && islower(string[i])) - string[i] = toupper ((int)string[i]); -} - -/************************************************************************/ -/* DBFGetFieldIndex() */ -/* */ -/* Get the index number for a field in a .dbf file. */ -/* */ -/* Contributed by Jim Matthews. */ -/************************************************************************/ - -int SHPAPI_CALL -DBFGetFieldIndex(DBFHandle psDBF, const char *pszFieldName) - -{ - char name[12], name1[12], name2[12]; - int i; - - strncpy(name1, pszFieldName,11); - name1[11] = '\0'; - str_to_upper(name1); - - for( i = 0; i < DBFGetFieldCount(psDBF); i++ ) - { - DBFGetFieldInfo( psDBF, i, name, NULL, NULL ); - strncpy(name2,name,11); - str_to_upper(name2); - - if(!strncmp(name1,name2,10)) - return(i); - } - return(-1); -} diff --git a/src/ninja/shpopen.cpp b/src/ninja/shpopen.cpp deleted file mode 100644 index 54a9687aa..000000000 --- a/src/ninja/shpopen.cpp +++ /dev/null @@ -1,1867 +0,0 @@ -/****************************************************************************** - * $Id$ - * - * Project: Shapelib - * Purpose: Implementation of core Shapefile read/write functions. - * Author: Frank Warmerdam, warmerdam@pobox.com - * - ****************************************************************************** - * Copyright (c) 1999, 2001, Frank Warmerdam - * - * This software is available under the following "MIT Style" license, - * or at the option of the licensee under the LGPL (see LICENSE.LGPL). This - * option is discussed in more detail in shapelib.html. - * - * -- - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - ****************************************************************************** - * - * $Log: shpopen.c,v $ - * Revision 1.39 2002/08/26 06:46:56 warmerda - * avoid c++ comments - * - * Revision 1.38 2002/05/07 16:43:39 warmerda - * Removed debugging printf. - * - * Revision 1.37 2002/04/10 17:35:22 warmerda - * fixed bug in ring reversal code - * - * Revision 1.36 2002/04/10 16:59:54 warmerda - * added SHPRewindObject - * - * Revision 1.35 2001/12/07 15:10:44 warmerda - * fix if .shx fails to open - * - * Revision 1.34 2001/11/01 16:29:55 warmerda - * move pabyRec into SHPInfo for thread safety - * - * Revision 1.33 2001/07/03 12:18:15 warmerda - * Improved cleanup if SHX not found, provied by Riccardo Cohen. - * - * Revision 1.32 2001/06/22 01:58:07 warmerda - * be more careful about establishing initial bounds in face of NULL shapes - * - * Revision 1.31 2001/05/31 19:35:29 warmerda - * added support for writing null shapes - * - * Revision 1.30 2001/05/28 12:46:29 warmerda - * Add some checking on reasonableness of record count when opening. - * - * Revision 1.29 2001/05/23 13:36:52 warmerda - * added use of SHPAPI_CALL - * - * Revision 1.28 2001/02/06 22:25:06 warmerda - * fixed memory leaks when SHPOpen() fails - * - * Revision 1.27 2000/07/18 15:21:33 warmerda - * added better enforcement of -1 for append in SHPWriteObject - * - * Revision 1.26 2000/02/16 16:03:51 warmerda - * added null shape support - * - * Revision 1.25 1999/12/15 13:47:07 warmerda - * Fixed record size settings in .shp file (was 4 words too long) - * Added stdlib.h. - * - * Revision 1.24 1999/11/05 14:12:04 warmerda - * updated license terms - * - * Revision 1.23 1999/07/27 00:53:46 warmerda - * added support for rewriting shapes - * - * Revision 1.22 1999/06/11 19:19:11 warmerda - * Cleanup pabyRec static buffer on SHPClose(). - * - * Revision 1.21 1999/06/02 14:57:56 kshih - * Remove unused variables - * - * Revision 1.20 1999/04/19 21:04:17 warmerda - * Fixed syntax error. - * - * Revision 1.19 1999/04/19 21:01:57 warmerda - * Force access string to binary in SHPOpen(). - * - * Revision 1.18 1999/04/01 18:48:07 warmerda - * Try upper case extensions if lower case doesn't work. - * - * Revision 1.17 1998/12/31 15:29:39 warmerda - * Disable writing measure values to multipatch objects if - * DISABLE_MULTIPATCH_MEASURE is defined. - * - * Revision 1.16 1998/12/16 05:14:33 warmerda - * Added support to write MULTIPATCH. Fixed reading Z coordinate of - * MULTIPATCH. Fixed record size written for all feature types. - * - * Revision 1.15 1998/12/03 16:35:29 warmerda - * r+b is proper binary access string, not rb+. - * - * Revision 1.14 1998/12/03 15:47:56 warmerda - * Fixed setting of nVertices in SHPCreateObject(). - * - * Revision 1.13 1998/12/03 15:33:54 warmerda - * Made SHPCalculateExtents() separately callable. - * - * Revision 1.12 1998/11/11 20:01:50 warmerda - * Fixed bug writing ArcM/Z, and PolygonM/Z for big endian machines. - * - * Revision 1.11 1998/11/09 20:56:44 warmerda - * Fixed up handling of file wide bounds. - * - * Revision 1.10 1998/11/09 20:18:51 warmerda - * Converted to support 3D shapefiles, and use of SHPObject. - * - * Revision 1.9 1998/02/24 15:09:05 warmerda - * Fixed memory leak. - * - * Revision 1.8 1997/12/04 15:40:29 warmerda - * Fixed byte swapping of record number, and record length fields in the - * .shp file. - * - * Revision 1.7 1995/10/21 03:15:58 warmerda - * Added support for binary file access, the magic cookie 9997 - * and tried to improve the int32 selection logic for 16bit systems. - * - * Revision 1.6 1995/09/04 04:19:41 warmerda - * Added fix for file bounds. - * - * Revision 1.5 1995/08/25 15:16:44 warmerda - * Fixed a couple of problems with big endian systems ... one with bounds - * and the other with multipart polygons. - * - * Revision 1.4 1995/08/24 18:10:17 warmerda - * Switch to use SfRealloc() to avoid problems with pre-ANSI realloc() - * functions (such as on the Sun). - * - * Revision 1.3 1995/08/23 02:23:15 warmerda - * Added support for reading bounds, and fixed up problems in setting the - * file wide bounds. - * - * Revision 1.2 1995/08/04 03:16:57 warmerda - * Added header. - * - */ - -static char rcsid[] = - "$Id$"; - -#include "shapefil.h" - -#include -#include -#include -#include -#include - -typedef unsigned char uchar; - -#if UINT_MAX == 65535 -typedef long int32; -#else -typedef int int32; -#endif - -#ifndef FALSE -# define FALSE 0 -# define TRUE 1 -#endif - -#define ByteCopy( a, b, c ) memcpy( b, a, c ) -#ifndef MAX -# define MIN(a,b) ((ab) ? a : b) -#endif - -static int bBigEndian; - - -/************************************************************************/ -/* SwapWord() */ -/* */ -/* Swap a 2, 4 or 8 byte word. */ -/************************************************************************/ - -static void SwapWord( int length, void * wordP ) - -{ - int i; - uchar temp; - - for( i=0; i < length/2; i++ ) - { - temp = ((uchar *) wordP)[i]; - ((uchar *)wordP)[i] = ((uchar *) wordP)[length-i-1]; - ((uchar *) wordP)[length-i-1] = temp; - } -} - -/************************************************************************/ -/* SfRealloc() */ -/* */ -/* A realloc cover function that will access a NULL pointer as */ -/* a valid input. */ -/************************************************************************/ - -static void * SfRealloc( void * pMem, int nNewSize ) - -{ - if( pMem == NULL ) - return( (void *) malloc(nNewSize) ); - else - return( (void *) realloc(pMem,nNewSize) ); -} - -/************************************************************************/ -/* SHPWriteHeader() */ -/* */ -/* Write out a header for the .shp and .shx files as well as the */ -/* contents of the index (.shx) file. */ -/************************************************************************/ - -static void SHPWriteHeader( SHPHandle psSHP ) - -{ - uchar abyHeader[100]; - int i; - int32 i32; - double dValue; - int32 *panSHX; - -/* -------------------------------------------------------------------- */ -/* Prepare header block for .shp file. */ -/* -------------------------------------------------------------------- */ - for( i = 0; i < 100; i++ ) - abyHeader[i] = 0; - - abyHeader[2] = 0x27; /* magic cookie */ - abyHeader[3] = 0x0a; - - i32 = psSHP->nFileSize/2; /* file size */ - ByteCopy( &i32, abyHeader+24, 4 ); - if( !bBigEndian ) SwapWord( 4, abyHeader+24 ); - - i32 = 1000; /* version */ - ByteCopy( &i32, abyHeader+28, 4 ); - if( bBigEndian ) SwapWord( 4, abyHeader+28 ); - - i32 = psSHP->nShapeType; /* shape type */ - ByteCopy( &i32, abyHeader+32, 4 ); - if( bBigEndian ) SwapWord( 4, abyHeader+32 ); - - dValue = psSHP->adBoundsMin[0]; /* set bounds */ - ByteCopy( &dValue, abyHeader+36, 8 ); - if( bBigEndian ) SwapWord( 8, abyHeader+36 ); - - dValue = psSHP->adBoundsMin[1]; - ByteCopy( &dValue, abyHeader+44, 8 ); - if( bBigEndian ) SwapWord( 8, abyHeader+44 ); - - dValue = psSHP->adBoundsMax[0]; - ByteCopy( &dValue, abyHeader+52, 8 ); - if( bBigEndian ) SwapWord( 8, abyHeader+52 ); - - dValue = psSHP->adBoundsMax[1]; - ByteCopy( &dValue, abyHeader+60, 8 ); - if( bBigEndian ) SwapWord( 8, abyHeader+60 ); - - dValue = psSHP->adBoundsMin[2]; /* z */ - ByteCopy( &dValue, abyHeader+68, 8 ); - if( bBigEndian ) SwapWord( 8, abyHeader+68 ); - - dValue = psSHP->adBoundsMax[2]; - ByteCopy( &dValue, abyHeader+76, 8 ); - if( bBigEndian ) SwapWord( 8, abyHeader+76 ); - - dValue = psSHP->adBoundsMin[3]; /* m */ - ByteCopy( &dValue, abyHeader+84, 8 ); - if( bBigEndian ) SwapWord( 8, abyHeader+84 ); - - dValue = psSHP->adBoundsMax[3]; - ByteCopy( &dValue, abyHeader+92, 8 ); - if( bBigEndian ) SwapWord( 8, abyHeader+92 ); - -/* -------------------------------------------------------------------- */ -/* Write .shp file header. */ -/* -------------------------------------------------------------------- */ - fseek( psSHP->fpSHP, 0, 0 ); - fwrite( abyHeader, 100, 1, psSHP->fpSHP ); - -/* -------------------------------------------------------------------- */ -/* Prepare, and write .shx file header. */ -/* -------------------------------------------------------------------- */ - i32 = (psSHP->nRecords * 2 * sizeof(int32) + 100)/2; /* file size */ - ByteCopy( &i32, abyHeader+24, 4 ); - if( !bBigEndian ) SwapWord( 4, abyHeader+24 ); - - fseek( psSHP->fpSHX, 0, 0 ); - fwrite( abyHeader, 100, 1, psSHP->fpSHX ); - -/* -------------------------------------------------------------------- */ -/* Write out the .shx contents. */ -/* -------------------------------------------------------------------- */ - panSHX = (int32 *) malloc(sizeof(int32) * 2 * psSHP->nRecords); - - for( i = 0; i < psSHP->nRecords; i++ ) - { - panSHX[i*2 ] = psSHP->panRecOffset[i]/2; - panSHX[i*2+1] = psSHP->panRecSize[i]/2; - if( !bBigEndian ) SwapWord( 4, panSHX+i*2 ); - if( !bBigEndian ) SwapWord( 4, panSHX+i*2+1 ); - } - - fwrite( panSHX, sizeof(int32) * 2, psSHP->nRecords, psSHP->fpSHX ); - - free( panSHX ); -} - -/************************************************************************/ -/* SHPOpen() */ -/* */ -/* Open the .shp and .shx files based on the basename of the */ -/* files or either file name. */ -/************************************************************************/ - -SHPHandle SHPAPI_CALL -SHPOpen( const char * pszLayer, const char * pszAccess ) - -{ - char *pszFullname, *pszBasename; - SHPHandle psSHP; - - uchar *pabyBuf; - int i; - double dValue; - -/* -------------------------------------------------------------------- */ -/* Ensure the access string is one of the legal ones. We */ -/* ensure the result string indicates binary to avoid common */ -/* problems on Windows. */ -/* -------------------------------------------------------------------- */ - if( strcmp(pszAccess,"rb+") == 0 || strcmp(pszAccess,"r+b") == 0 - || strcmp(pszAccess,"r+") == 0 ) - pszAccess = "r+b"; - else - pszAccess = "rb"; - -/* -------------------------------------------------------------------- */ -/* Establish the byte order on this machine. */ -/* -------------------------------------------------------------------- */ - i = 1; - if( *((uchar *) &i) == 1 ) - bBigEndian = FALSE; - else - bBigEndian = TRUE; - -/* -------------------------------------------------------------------- */ -/* Initialize the info structure. */ -/* -------------------------------------------------------------------- */ - psSHP = (SHPHandle) calloc(sizeof(SHPInfo),1); - - psSHP->bUpdated = FALSE; - -/* -------------------------------------------------------------------- */ -/* Compute the base (layer) name. If there is any extension */ -/* on the passed in filename we will strip it off. */ -/* -------------------------------------------------------------------- */ - pszBasename = (char *) malloc(strlen(pszLayer)+5); - strcpy( pszBasename, pszLayer ); - for( i = strlen(pszBasename)-1; - i > 0 && pszBasename[i] != '.' && pszBasename[i] != '/' - && pszBasename[i] != '\\'; - i-- ) {} - - if( pszBasename[i] == '.' ) - pszBasename[i] = '\0'; - -/* -------------------------------------------------------------------- */ -/* Open the .shp and .shx files. Note that files pulled from */ -/* a PC to Unix with upper case filenames won't work! */ -/* -------------------------------------------------------------------- */ - pszFullname = (char *) malloc(strlen(pszBasename) + 5); - sprintf( pszFullname, "%s.shp", pszBasename ); - psSHP->fpSHP = fopen(pszFullname, pszAccess ); - if( psSHP->fpSHP == NULL ) - { - sprintf( pszFullname, "%s.SHP", pszBasename ); - psSHP->fpSHP = fopen(pszFullname, pszAccess ); - } - - if( psSHP->fpSHP == NULL ) - { - free( psSHP ); - free( pszBasename ); - free( pszFullname ); - return( NULL ); - } - - sprintf( pszFullname, "%s.shx", pszBasename ); - psSHP->fpSHX = fopen(pszFullname, pszAccess ); - if( psSHP->fpSHX == NULL ) - { - sprintf( pszFullname, "%s.SHX", pszBasename ); - psSHP->fpSHX = fopen(pszFullname, pszAccess ); - } - - if( psSHP->fpSHX == NULL ) - { - fclose( psSHP->fpSHP ); - free( psSHP ); - free( pszBasename ); - free( pszFullname ); - return( NULL ); - } - - free( pszFullname ); - free( pszBasename ); - -/* -------------------------------------------------------------------- */ -/* Read the file size from the SHP file. */ -/* -------------------------------------------------------------------- */ - pabyBuf = (uchar *) malloc(100); - fread( pabyBuf, 100, 1, psSHP->fpSHP ); - - psSHP->nFileSize = (pabyBuf[24] * 256 * 256 * 256 - + pabyBuf[25] * 256 * 256 - + pabyBuf[26] * 256 - + pabyBuf[27]) * 2; - -/* -------------------------------------------------------------------- */ -/* Read SHX file Header info */ -/* -------------------------------------------------------------------- */ - fread( pabyBuf, 100, 1, psSHP->fpSHX ); - - if( pabyBuf[0] != 0 - || pabyBuf[1] != 0 - || pabyBuf[2] != 0x27 - || (pabyBuf[3] != 0x0a && pabyBuf[3] != 0x0d) ) - { - fclose( psSHP->fpSHP ); - fclose( psSHP->fpSHX ); - free( psSHP ); - - return( NULL ); - } - - psSHP->nRecords = pabyBuf[27] + pabyBuf[26] * 256 - + pabyBuf[25] * 256 * 256 + pabyBuf[24] * 256 * 256 * 256; - psSHP->nRecords = (psSHP->nRecords*2 - 100) / 8; - - psSHP->nShapeType = pabyBuf[32]; - - if( psSHP->nRecords < 0 || psSHP->nRecords > 256000000 ) - { - /* this header appears to be corrupt. Give up. */ - fclose( psSHP->fpSHP ); - fclose( psSHP->fpSHX ); - free( psSHP ); - - return( NULL ); - } - -/* -------------------------------------------------------------------- */ -/* Read the bounds. */ -/* -------------------------------------------------------------------- */ - if( bBigEndian ) SwapWord( 8, pabyBuf+36 ); - memcpy( &dValue, pabyBuf+36, 8 ); - psSHP->adBoundsMin[0] = dValue; - - if( bBigEndian ) SwapWord( 8, pabyBuf+44 ); - memcpy( &dValue, pabyBuf+44, 8 ); - psSHP->adBoundsMin[1] = dValue; - - if( bBigEndian ) SwapWord( 8, pabyBuf+52 ); - memcpy( &dValue, pabyBuf+52, 8 ); - psSHP->adBoundsMax[0] = dValue; - - if( bBigEndian ) SwapWord( 8, pabyBuf+60 ); - memcpy( &dValue, pabyBuf+60, 8 ); - psSHP->adBoundsMax[1] = dValue; - - if( bBigEndian ) SwapWord( 8, pabyBuf+68 ); /* z */ - memcpy( &dValue, pabyBuf+68, 8 ); - psSHP->adBoundsMin[2] = dValue; - - if( bBigEndian ) SwapWord( 8, pabyBuf+76 ); - memcpy( &dValue, pabyBuf+76, 8 ); - psSHP->adBoundsMax[2] = dValue; - - if( bBigEndian ) SwapWord( 8, pabyBuf+84 ); /* z */ - memcpy( &dValue, pabyBuf+84, 8 ); - psSHP->adBoundsMin[3] = dValue; - - if( bBigEndian ) SwapWord( 8, pabyBuf+92 ); - memcpy( &dValue, pabyBuf+92, 8 ); - psSHP->adBoundsMax[3] = dValue; - - free( pabyBuf ); - -/* -------------------------------------------------------------------- */ -/* Read the .shx file to get the offsets to each record in */ -/* the .shp file. */ -/* -------------------------------------------------------------------- */ - psSHP->nMaxRecords = psSHP->nRecords; - - psSHP->panRecOffset = - (int *) malloc(sizeof(int) * MAX(1,psSHP->nMaxRecords) ); - psSHP->panRecSize = - (int *) malloc(sizeof(int) * MAX(1,psSHP->nMaxRecords) ); - - pabyBuf = (uchar *) malloc(8 * MAX(1,psSHP->nRecords) ); - fread( pabyBuf, 8, psSHP->nRecords, psSHP->fpSHX ); - - for( i = 0; i < psSHP->nRecords; i++ ) - { - int32 nOffset, nLength; - - memcpy( &nOffset, pabyBuf + i * 8, 4 ); - if( !bBigEndian ) SwapWord( 4, &nOffset ); - - memcpy( &nLength, pabyBuf + i * 8 + 4, 4 ); - if( !bBigEndian ) SwapWord( 4, &nLength ); - - psSHP->panRecOffset[i] = nOffset*2; - psSHP->panRecSize[i] = nLength*2; - } - free( pabyBuf ); - - return( psSHP ); -} - -/************************************************************************/ -/* SHPClose() */ -/* */ -/* Close the .shp and .shx files. */ -/************************************************************************/ - -void SHPAPI_CALL -SHPClose(SHPHandle psSHP ) - -{ -/* -------------------------------------------------------------------- */ -/* Update the header if we have modified anything. */ -/* -------------------------------------------------------------------- */ - if( psSHP->bUpdated ) - { - SHPWriteHeader( psSHP ); - } - -/* -------------------------------------------------------------------- */ -/* Free all resources, and close files. */ -/* -------------------------------------------------------------------- */ - free( psSHP->panRecOffset ); - free( psSHP->panRecSize ); - - fclose( psSHP->fpSHX ); - fclose( psSHP->fpSHP ); - - if( psSHP->pabyRec != NULL ) - { - free( psSHP->pabyRec ); - } - - free( psSHP ); -} - -/************************************************************************/ -/* SHPGetInfo() */ -/* */ -/* Fetch general information about the shape file. */ -/************************************************************************/ - -void SHPAPI_CALL -SHPGetInfo(SHPHandle psSHP, int * pnEntities, int * pnShapeType, - double * padfMinBound, double * padfMaxBound ) - -{ - int i; - - if( pnEntities != NULL ) - *pnEntities = psSHP->nRecords; - - if( pnShapeType != NULL ) - *pnShapeType = psSHP->nShapeType; - - for( i = 0; i < 4; i++ ) - { - if( padfMinBound != NULL ) - padfMinBound[i] = psSHP->adBoundsMin[i]; - if( padfMaxBound != NULL ) - padfMaxBound[i] = psSHP->adBoundsMax[i]; - } -} - -/************************************************************************/ -/* SHPCreate() */ -/* */ -/* Create a new shape file and return a handle to the open */ -/* shape file with read/write access. */ -/************************************************************************/ - -SHPHandle SHPAPI_CALL -SHPCreate( const char * pszLayer, int nShapeType ) - -{ - char *pszBasename, *pszFullname; - int i; - FILE *fpSHP, *fpSHX; - uchar abyHeader[100]; - int32 i32; - double dValue; - -/* -------------------------------------------------------------------- */ -/* Establish the byte order on this system. */ -/* -------------------------------------------------------------------- */ - i = 1; - if( *((uchar *) &i) == 1 ) - bBigEndian = FALSE; - else - bBigEndian = TRUE; - -/* -------------------------------------------------------------------- */ -/* Compute the base (layer) name. If there is any extension */ -/* on the passed in filename we will strip it off. */ -/* -------------------------------------------------------------------- */ - pszBasename = (char *) malloc(strlen(pszLayer)+5); - strcpy( pszBasename, pszLayer ); - for( i = strlen(pszBasename)-1; - i > 0 && pszBasename[i] != '.' && pszBasename[i] != '/' - && pszBasename[i] != '\\'; - i-- ) {} - - if( pszBasename[i] == '.' ) - pszBasename[i] = '\0'; - -/* -------------------------------------------------------------------- */ -/* Open the two files so we can write their headers. */ -/* -------------------------------------------------------------------- */ - pszFullname = (char *) malloc(strlen(pszBasename) + 5); - sprintf( pszFullname, "%s.shp", pszBasename ); - fpSHP = fopen(pszFullname, "wb" ); - if( fpSHP == NULL ) - return( NULL ); - - sprintf( pszFullname, "%s.shx", pszBasename ); - fpSHX = fopen(pszFullname, "wb" ); - if( fpSHX == NULL ) - return( NULL ); - - free( pszFullname ); - free( pszBasename ); - -/* -------------------------------------------------------------------- */ -/* Prepare header block for .shp file. */ -/* -------------------------------------------------------------------- */ - for( i = 0; i < 100; i++ ) - abyHeader[i] = 0; - - abyHeader[2] = 0x27; /* magic cookie */ - abyHeader[3] = 0x0a; - - i32 = 50; /* file size */ - ByteCopy( &i32, abyHeader+24, 4 ); - if( !bBigEndian ) SwapWord( 4, abyHeader+24 ); - - i32 = 1000; /* version */ - ByteCopy( &i32, abyHeader+28, 4 ); - if( bBigEndian ) SwapWord( 4, abyHeader+28 ); - - i32 = nShapeType; /* shape type */ - ByteCopy( &i32, abyHeader+32, 4 ); - if( bBigEndian ) SwapWord( 4, abyHeader+32 ); - - dValue = 0.0; /* set bounds */ - ByteCopy( &dValue, abyHeader+36, 8 ); - ByteCopy( &dValue, abyHeader+44, 8 ); - ByteCopy( &dValue, abyHeader+52, 8 ); - ByteCopy( &dValue, abyHeader+60, 8 ); - -/* -------------------------------------------------------------------- */ -/* Write .shp file header. */ -/* -------------------------------------------------------------------- */ - fwrite( abyHeader, 100, 1, fpSHP ); - -/* -------------------------------------------------------------------- */ -/* Prepare, and write .shx file header. */ -/* -------------------------------------------------------------------- */ - i32 = 50; /* file size */ - ByteCopy( &i32, abyHeader+24, 4 ); - if( !bBigEndian ) SwapWord( 4, abyHeader+24 ); - - fwrite( abyHeader, 100, 1, fpSHX ); - -/* -------------------------------------------------------------------- */ -/* Close the files, and then open them as regular existing files. */ -/* -------------------------------------------------------------------- */ - fclose( fpSHP ); - fclose( fpSHX ); - - return( SHPOpen( pszLayer, "r+b" ) ); -} - -/************************************************************************/ -/* _SHPSetBounds() */ -/* */ -/* Compute a bounds rectangle for a shape, and set it into the */ -/* indicated location in the record. */ -/************************************************************************/ - -static void _SHPSetBounds( uchar * pabyRec, SHPObject * psShape ) - -{ - ByteCopy( &(psShape->dfXMin), pabyRec + 0, 8 ); - ByteCopy( &(psShape->dfYMin), pabyRec + 8, 8 ); - ByteCopy( &(psShape->dfXMax), pabyRec + 16, 8 ); - ByteCopy( &(psShape->dfYMax), pabyRec + 24, 8 ); - - if( bBigEndian ) - { - SwapWord( 8, pabyRec + 0 ); - SwapWord( 8, pabyRec + 8 ); - SwapWord( 8, pabyRec + 16 ); - SwapWord( 8, pabyRec + 24 ); - } -} - -/************************************************************************/ -/* SHPComputeExtents() */ -/* */ -/* Recompute the extents of a shape. Automatically done by */ -/* SHPCreateObject(). */ -/************************************************************************/ - -void SHPAPI_CALL -SHPComputeExtents( SHPObject * psObject ) - -{ - int i; - -/* -------------------------------------------------------------------- */ -/* Build extents for this object. */ -/* -------------------------------------------------------------------- */ - if( psObject->nVertices > 0 ) - { - psObject->dfXMin = psObject->dfXMax = psObject->padfX[0]; - psObject->dfYMin = psObject->dfYMax = psObject->padfY[0]; - psObject->dfZMin = psObject->dfZMax = psObject->padfZ[0]; - psObject->dfMMin = psObject->dfMMax = psObject->padfM[0]; - } - - for( i = 0; i < psObject->nVertices; i++ ) - { - psObject->dfXMin = MIN(psObject->dfXMin, psObject->padfX[i]); - psObject->dfYMin = MIN(psObject->dfYMin, psObject->padfY[i]); - psObject->dfZMin = MIN(psObject->dfZMin, psObject->padfZ[i]); - psObject->dfMMin = MIN(psObject->dfMMin, psObject->padfM[i]); - - psObject->dfXMax = MAX(psObject->dfXMax, psObject->padfX[i]); - psObject->dfYMax = MAX(psObject->dfYMax, psObject->padfY[i]); - psObject->dfZMax = MAX(psObject->dfZMax, psObject->padfZ[i]); - psObject->dfMMax = MAX(psObject->dfMMax, psObject->padfM[i]); - } -} - -/************************************************************************/ -/* SHPCreateObject() */ -/* */ -/* Create a shape object. It should be freed with */ -/* SHPDestroyObject(). */ -/************************************************************************/ - -SHPObject SHPAPI_CALL1(*) -SHPCreateObject( int nSHPType, int nShapeId, int nParts, - int * panPartStart, int * panPartType, - int nVertices, double * padfX, double * padfY, - double * padfZ, double * padfM ) - -{ - SHPObject *psObject; - int i, bHasM, bHasZ; - - psObject = (SHPObject *) calloc(1,sizeof(SHPObject)); - psObject->nSHPType = nSHPType; - psObject->nShapeId = nShapeId; - -/* -------------------------------------------------------------------- */ -/* Establish whether this shape type has M, and Z values. */ -/* -------------------------------------------------------------------- */ - if( nSHPType == SHPT_ARCM - || nSHPType == SHPT_POINTM - || nSHPType == SHPT_POLYGONM - || nSHPType == SHPT_MULTIPOINTM ) - { - bHasM = TRUE; - bHasZ = FALSE; - } - else if( nSHPType == SHPT_ARCZ - || nSHPType == SHPT_POINTZ - || nSHPType == SHPT_POLYGONZ - || nSHPType == SHPT_MULTIPOINTZ - || nSHPType == SHPT_MULTIPATCH ) - { - bHasM = TRUE; - bHasZ = TRUE; - } - else - { - bHasM = FALSE; - bHasZ = FALSE; - } - -/* -------------------------------------------------------------------- */ -/* Capture parts. Note that part type is optional, and */ -/* defaults to ring. */ -/* -------------------------------------------------------------------- */ - if( nSHPType == SHPT_ARC || nSHPType == SHPT_POLYGON - || nSHPType == SHPT_ARCM || nSHPType == SHPT_POLYGONM - || nSHPType == SHPT_ARCZ || nSHPType == SHPT_POLYGONZ - || nSHPType == SHPT_MULTIPATCH ) - { - psObject->nParts = MAX(1,nParts); - - psObject->panPartStart = (int *) - malloc(sizeof(int) * psObject->nParts); - psObject->panPartType = (int *) - malloc(sizeof(int) * psObject->nParts); - - psObject->panPartStart[0] = 0; - psObject->panPartType[0] = SHPP_RING; - - for( i = 0; i < nParts; i++ ) - { - psObject->panPartStart[i] = panPartStart[i]; - if( panPartType != NULL ) - psObject->panPartType[i] = panPartType[i]; - else - psObject->panPartType[i] = SHPP_RING; - } - } - -/* -------------------------------------------------------------------- */ -/* Capture vertices. Note that Z and M are optional, but X and */ -/* Y are not. */ -/* -------------------------------------------------------------------- */ - if( nVertices > 0 ) - { - psObject->padfX = (double *) calloc(sizeof(double),nVertices); - psObject->padfY = (double *) calloc(sizeof(double),nVertices); - psObject->padfZ = (double *) calloc(sizeof(double),nVertices); - psObject->padfM = (double *) calloc(sizeof(double),nVertices); - - assert( padfX != NULL ); - assert( padfY != NULL ); - - for( i = 0; i < nVertices; i++ ) - { - psObject->padfX[i] = padfX[i]; - psObject->padfY[i] = padfY[i]; - if( padfZ != NULL && bHasZ ) - psObject->padfZ[i] = padfZ[i]; - if( padfM != NULL && bHasM ) - psObject->padfM[i] = padfM[i]; - } - } - -/* -------------------------------------------------------------------- */ -/* Compute the extents. */ -/* -------------------------------------------------------------------- */ - psObject->nVertices = nVertices; - SHPComputeExtents( psObject ); - - return( psObject ); -} - -/************************************************************************/ -/* SHPCreateSimpleObject() */ -/* */ -/* Create a simple (common) shape object. Destroy with */ -/* SHPDestroyObject(). */ -/************************************************************************/ - -SHPObject SHPAPI_CALL1(*) -SHPCreateSimpleObject( int nSHPType, int nVertices, - double * padfX, double * padfY, - double * padfZ ) - -{ - return( SHPCreateObject( nSHPType, -1, 0, NULL, NULL, - nVertices, padfX, padfY, padfZ, NULL ) ); -} - -/************************************************************************/ -/* SHPWriteObject() */ -/* */ -/* Write out the vertices of a new structure. Note that it is */ -/* only possible to write vertices at the end of the file. */ -/************************************************************************/ - -int SHPAPI_CALL -SHPWriteObject(SHPHandle psSHP, int nShapeId, SHPObject * psObject ) - -{ - int nRecordOffset, i, nRecordSize; - uchar *pabyRec; - int32 i32; - - psSHP->bUpdated = TRUE; - -/* -------------------------------------------------------------------- */ -/* Ensure that shape object matches the type of the file it is */ -/* being written to. */ -/* -------------------------------------------------------------------- */ - assert( psObject->nSHPType == psSHP->nShapeType - || psObject->nSHPType == SHPT_NULL ); - -/* -------------------------------------------------------------------- */ -/* Ensure that -1 is used for appends. Either blow an */ -/* assertion, or if they are disabled, set the shapeid to -1 */ -/* for appends. */ -/* -------------------------------------------------------------------- */ - assert( nShapeId == -1 - || (nShapeId >= 0 && nShapeId < psSHP->nRecords) ); - - if( nShapeId != -1 && nShapeId >= psSHP->nRecords ) - nShapeId = -1; - -/* -------------------------------------------------------------------- */ -/* Add the new entity to the in memory index. */ -/* -------------------------------------------------------------------- */ - if( nShapeId == -1 && psSHP->nRecords+1 > psSHP->nMaxRecords ) - { - psSHP->nMaxRecords =(int) ( psSHP->nMaxRecords * 1.3 + 100); - - psSHP->panRecOffset = (int *) - SfRealloc(psSHP->panRecOffset,sizeof(int) * psSHP->nMaxRecords ); - psSHP->panRecSize = (int *) - SfRealloc(psSHP->panRecSize,sizeof(int) * psSHP->nMaxRecords ); - } - -/* -------------------------------------------------------------------- */ -/* Initialize record. */ -/* -------------------------------------------------------------------- */ - pabyRec = (uchar *) malloc(psObject->nVertices * 4 * sizeof(double) - + psObject->nParts * 8 + 128); - -/* -------------------------------------------------------------------- */ -/* Extract vertices for a Polygon or Arc. */ -/* -------------------------------------------------------------------- */ - if( psObject->nSHPType == SHPT_POLYGON - || psObject->nSHPType == SHPT_POLYGONZ - || psObject->nSHPType == SHPT_POLYGONM - || psObject->nSHPType == SHPT_ARC - || psObject->nSHPType == SHPT_ARCZ - || psObject->nSHPType == SHPT_ARCM - || psObject->nSHPType == SHPT_MULTIPATCH ) - { - int32 nPoints, nParts; - int i; - - nPoints = psObject->nVertices; - nParts = psObject->nParts; - - _SHPSetBounds( pabyRec + 12, psObject ); - - if( bBigEndian ) SwapWord( 4, &nPoints ); - if( bBigEndian ) SwapWord( 4, &nParts ); - - ByteCopy( &nPoints, pabyRec + 40 + 8, 4 ); - ByteCopy( &nParts, pabyRec + 36 + 8, 4 ); - - nRecordSize = 52; - - /* - * Write part start positions. - */ - ByteCopy( psObject->panPartStart, pabyRec + 44 + 8, - 4 * psObject->nParts ); - for( i = 0; i < psObject->nParts; i++ ) - { - if( bBigEndian ) SwapWord( 4, pabyRec + 44 + 8 + 4*i ); - nRecordSize += 4; - } - - /* - * Write multipatch part types if needed. - */ - if( psObject->nSHPType == SHPT_MULTIPATCH ) - { - memcpy( pabyRec + nRecordSize, psObject->panPartType, - 4*psObject->nParts ); - for( i = 0; i < psObject->nParts; i++ ) - { - if( bBigEndian ) SwapWord( 4, pabyRec + nRecordSize ); - nRecordSize += 4; - } - } - - /* - * Write the (x,y) vertex values. - */ - for( i = 0; i < psObject->nVertices; i++ ) - { - ByteCopy( psObject->padfX + i, pabyRec + nRecordSize, 8 ); - ByteCopy( psObject->padfY + i, pabyRec + nRecordSize + 8, 8 ); - - if( bBigEndian ) - SwapWord( 8, pabyRec + nRecordSize ); - - if( bBigEndian ) - SwapWord( 8, pabyRec + nRecordSize + 8 ); - - nRecordSize += 2 * 8; - } - - /* - * Write the Z coordinates (if any). - */ - if( psObject->nSHPType == SHPT_POLYGONZ - || psObject->nSHPType == SHPT_ARCZ - || psObject->nSHPType == SHPT_MULTIPATCH ) - { - ByteCopy( &(psObject->dfZMin), pabyRec + nRecordSize, 8 ); - if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); - nRecordSize += 8; - - ByteCopy( &(psObject->dfZMax), pabyRec + nRecordSize, 8 ); - if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); - nRecordSize += 8; - - for( i = 0; i < psObject->nVertices; i++ ) - { - ByteCopy( psObject->padfZ + i, pabyRec + nRecordSize, 8 ); - if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); - nRecordSize += 8; - } - } - - /* - * Write the M values, if any. - */ - if( psObject->nSHPType == SHPT_POLYGONM - || psObject->nSHPType == SHPT_ARCM -#ifndef DISABLE_MULTIPATCH_MEASURE - || psObject->nSHPType == SHPT_MULTIPATCH -#endif - || psObject->nSHPType == SHPT_POLYGONZ - || psObject->nSHPType == SHPT_ARCZ ) - { - ByteCopy( &(psObject->dfMMin), pabyRec + nRecordSize, 8 ); - if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); - nRecordSize += 8; - - ByteCopy( &(psObject->dfMMax), pabyRec + nRecordSize, 8 ); - if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); - nRecordSize += 8; - - for( i = 0; i < psObject->nVertices; i++ ) - { - ByteCopy( psObject->padfM + i, pabyRec + nRecordSize, 8 ); - if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); - nRecordSize += 8; - } - } - } - -/* -------------------------------------------------------------------- */ -/* Extract vertices for a MultiPoint. */ -/* -------------------------------------------------------------------- */ - else if( psObject->nSHPType == SHPT_MULTIPOINT - || psObject->nSHPType == SHPT_MULTIPOINTZ - || psObject->nSHPType == SHPT_MULTIPOINTM ) - { - int32 nPoints; - int i; - - nPoints = psObject->nVertices; - - _SHPSetBounds( pabyRec + 12, psObject ); - - if( bBigEndian ) SwapWord( 4, &nPoints ); - ByteCopy( &nPoints, pabyRec + 44, 4 ); - - for( i = 0; i < psObject->nVertices; i++ ) - { - ByteCopy( psObject->padfX + i, pabyRec + 48 + i*16, 8 ); - ByteCopy( psObject->padfY + i, pabyRec + 48 + i*16 + 8, 8 ); - - if( bBigEndian ) SwapWord( 8, pabyRec + 48 + i*16 ); - if( bBigEndian ) SwapWord( 8, pabyRec + 48 + i*16 + 8 ); - } - - nRecordSize = 48 + 16 * psObject->nVertices; - - if( psObject->nSHPType == SHPT_MULTIPOINTZ ) - { - ByteCopy( &(psObject->dfZMin), pabyRec + nRecordSize, 8 ); - if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); - nRecordSize += 8; - - ByteCopy( &(psObject->dfZMax), pabyRec + nRecordSize, 8 ); - if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); - nRecordSize += 8; - - for( i = 0; i < psObject->nVertices; i++ ) - { - ByteCopy( psObject->padfZ + i, pabyRec + nRecordSize, 8 ); - if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); - nRecordSize += 8; - } - } - - if( psObject->nSHPType == SHPT_MULTIPOINTZ - || psObject->nSHPType == SHPT_MULTIPOINTM ) - { - ByteCopy( &(psObject->dfMMin), pabyRec + nRecordSize, 8 ); - if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); - nRecordSize += 8; - - ByteCopy( &(psObject->dfMMax), pabyRec + nRecordSize, 8 ); - if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); - nRecordSize += 8; - - for( i = 0; i < psObject->nVertices; i++ ) - { - ByteCopy( psObject->padfM + i, pabyRec + nRecordSize, 8 ); - if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); - nRecordSize += 8; - } - } - } - -/* -------------------------------------------------------------------- */ -/* Write point. */ -/* -------------------------------------------------------------------- */ - else if( psObject->nSHPType == SHPT_POINT - || psObject->nSHPType == SHPT_POINTZ - || psObject->nSHPType == SHPT_POINTM ) - { - ByteCopy( psObject->padfX, pabyRec + 12, 8 ); - ByteCopy( psObject->padfY, pabyRec + 20, 8 ); - - if( bBigEndian ) SwapWord( 8, pabyRec + 12 ); - if( bBigEndian ) SwapWord( 8, pabyRec + 20 ); - - nRecordSize = 28; - - if( psObject->nSHPType == SHPT_POINTZ ) - { - ByteCopy( psObject->padfZ, pabyRec + nRecordSize, 8 ); - if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); - nRecordSize += 8; - } - - if( psObject->nSHPType == SHPT_POINTZ - || psObject->nSHPType == SHPT_POINTM ) - { - ByteCopy( psObject->padfM, pabyRec + nRecordSize, 8 ); - if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); - nRecordSize += 8; - } - } - -/* -------------------------------------------------------------------- */ -/* Not much to do for null geometries. */ -/* -------------------------------------------------------------------- */ - else if( psObject->nSHPType == SHPT_NULL ) - { - nRecordSize = 12; - } - - else - { - /* unknown type */ - assert( FALSE ); - } - -/* -------------------------------------------------------------------- */ -/* Establish where we are going to put this record. If we are */ -/* rewriting and existing record, and it will fit, then put it */ -/* back where the original came from. Otherwise write at the end. */ -/* -------------------------------------------------------------------- */ - if( nShapeId == -1 || psSHP->panRecSize[nShapeId] < nRecordSize-8 ) - { - if( nShapeId == -1 ) - nShapeId = psSHP->nRecords++; - - psSHP->panRecOffset[nShapeId] = nRecordOffset = psSHP->nFileSize; - psSHP->panRecSize[nShapeId] = nRecordSize-8; - psSHP->nFileSize += nRecordSize; - } - else - { - nRecordOffset = psSHP->panRecOffset[nShapeId]; - } - -/* -------------------------------------------------------------------- */ -/* Set the shape type, record number, and record size. */ -/* -------------------------------------------------------------------- */ - i32 = nShapeId+1; /* record # */ - if( !bBigEndian ) SwapWord( 4, &i32 ); - ByteCopy( &i32, pabyRec, 4 ); - - i32 = (nRecordSize-8)/2; /* record size */ - if( !bBigEndian ) SwapWord( 4, &i32 ); - ByteCopy( &i32, pabyRec + 4, 4 ); - - i32 = psObject->nSHPType; /* shape type */ - if( bBigEndian ) SwapWord( 4, &i32 ); - ByteCopy( &i32, pabyRec + 8, 4 ); - -/* -------------------------------------------------------------------- */ -/* Write out record. */ -/* -------------------------------------------------------------------- */ - if( fseek( psSHP->fpSHP, nRecordOffset, 0 ) != 0 - || fwrite( pabyRec, nRecordSize, 1, psSHP->fpSHP ) < 1 ) - { - //printf( "Error in fseek() or fwrite().\n" ); - //ninjaCom(ninjaComClass::ninjaFailure, "Error in fseek() or fwrite()." ); - free( pabyRec ); - return -1; - } - - free( pabyRec ); - -/* -------------------------------------------------------------------- */ -/* Expand file wide bounds based on this shape. */ -/* -------------------------------------------------------------------- */ - if( psSHP->adBoundsMin[0] == 0.0 - && psSHP->adBoundsMax[0] == 0.0 - && psSHP->adBoundsMin[1] == 0.0 - && psSHP->adBoundsMax[1] == 0.0 - && psObject->nSHPType != SHPT_NULL ) - { - psSHP->adBoundsMin[0] = psSHP->adBoundsMax[0] = psObject->padfX[0]; - psSHP->adBoundsMin[1] = psSHP->adBoundsMax[1] = psObject->padfY[0]; - psSHP->adBoundsMin[2] = psSHP->adBoundsMax[2] = psObject->padfZ[0]; - psSHP->adBoundsMin[3] = psSHP->adBoundsMax[3] = psObject->padfM[0]; - } - - for( i = 0; i < psObject->nVertices; i++ ) - { - psSHP->adBoundsMin[0] = MIN(psSHP->adBoundsMin[0],psObject->padfX[i]); - psSHP->adBoundsMin[1] = MIN(psSHP->adBoundsMin[1],psObject->padfY[i]); - psSHP->adBoundsMin[2] = MIN(psSHP->adBoundsMin[2],psObject->padfZ[i]); - psSHP->adBoundsMin[3] = MIN(psSHP->adBoundsMin[3],psObject->padfM[i]); - psSHP->adBoundsMax[0] = MAX(psSHP->adBoundsMax[0],psObject->padfX[i]); - psSHP->adBoundsMax[1] = MAX(psSHP->adBoundsMax[1],psObject->padfY[i]); - psSHP->adBoundsMax[2] = MAX(psSHP->adBoundsMax[2],psObject->padfZ[i]); - psSHP->adBoundsMax[3] = MAX(psSHP->adBoundsMax[3],psObject->padfM[i]); - } - - return( nShapeId ); -} - -/************************************************************************/ -/* SHPReadObject() */ -/* */ -/* Read the vertices, parts, and other non-attribute information */ -/* for one shape. */ -/************************************************************************/ - -SHPObject SHPAPI_CALL1(*) -SHPReadObject( SHPHandle psSHP, int hEntity ) - -{ - SHPObject *psShape; - -/* -------------------------------------------------------------------- */ -/* Validate the record/entity number. */ -/* -------------------------------------------------------------------- */ - if( hEntity < 0 || hEntity >= psSHP->nRecords ) - return( NULL ); - -/* -------------------------------------------------------------------- */ -/* Ensure our record buffer is large enough. */ -/* -------------------------------------------------------------------- */ - if( psSHP->panRecSize[hEntity]+8 > psSHP->nBufSize ) - { - psSHP->nBufSize = psSHP->panRecSize[hEntity]+8; - psSHP->pabyRec = (uchar *) SfRealloc(psSHP->pabyRec,psSHP->nBufSize); - } - -/* -------------------------------------------------------------------- */ -/* Read the record. */ -/* -------------------------------------------------------------------- */ - fseek( psSHP->fpSHP, psSHP->panRecOffset[hEntity], 0 ); - fread( psSHP->pabyRec, psSHP->panRecSize[hEntity]+8, 1, psSHP->fpSHP ); - -/* -------------------------------------------------------------------- */ -/* Allocate and minimally initialize the object. */ -/* -------------------------------------------------------------------- */ - psShape = (SHPObject *) calloc(1,sizeof(SHPObject)); - psShape->nShapeId = hEntity; - - memcpy( &psShape->nSHPType, psSHP->pabyRec + 8, 4 ); - if( bBigEndian ) SwapWord( 4, &(psShape->nSHPType) ); - -/* ==================================================================== */ -/* Extract vertices for a Polygon or Arc. */ -/* ==================================================================== */ - if( psShape->nSHPType == SHPT_POLYGON || psShape->nSHPType == SHPT_ARC - || psShape->nSHPType == SHPT_POLYGONZ - || psShape->nSHPType == SHPT_POLYGONM - || psShape->nSHPType == SHPT_ARCZ - || psShape->nSHPType == SHPT_ARCM - || psShape->nSHPType == SHPT_MULTIPATCH ) - { - int32 nPoints, nParts; - int i, nOffset; - -/* -------------------------------------------------------------------- */ -/* Get the X/Y bounds. */ -/* -------------------------------------------------------------------- */ - memcpy( &(psShape->dfXMin), psSHP->pabyRec + 8 + 4, 8 ); - memcpy( &(psShape->dfYMin), psSHP->pabyRec + 8 + 12, 8 ); - memcpy( &(psShape->dfXMax), psSHP->pabyRec + 8 + 20, 8 ); - memcpy( &(psShape->dfYMax), psSHP->pabyRec + 8 + 28, 8 ); - - if( bBigEndian ) SwapWord( 8, &(psShape->dfXMin) ); - if( bBigEndian ) SwapWord( 8, &(psShape->dfYMin) ); - if( bBigEndian ) SwapWord( 8, &(psShape->dfXMax) ); - if( bBigEndian ) SwapWord( 8, &(psShape->dfYMax) ); - -/* -------------------------------------------------------------------- */ -/* Extract part/point count, and build vertex and part arrays */ -/* to proper size. */ -/* -------------------------------------------------------------------- */ - memcpy( &nPoints, psSHP->pabyRec + 40 + 8, 4 ); - memcpy( &nParts, psSHP->pabyRec + 36 + 8, 4 ); - - if( bBigEndian ) SwapWord( 4, &nPoints ); - if( bBigEndian ) SwapWord( 4, &nParts ); - - psShape->nVertices = nPoints; - psShape->padfX = (double *) calloc(nPoints,sizeof(double)); - psShape->padfY = (double *) calloc(nPoints,sizeof(double)); - psShape->padfZ = (double *) calloc(nPoints,sizeof(double)); - psShape->padfM = (double *) calloc(nPoints,sizeof(double)); - - psShape->nParts = nParts; - psShape->panPartStart = (int *) calloc(nParts,sizeof(int)); - psShape->panPartType = (int *) calloc(nParts,sizeof(int)); - - for( i = 0; i < nParts; i++ ) - psShape->panPartType[i] = SHPP_RING; - -/* -------------------------------------------------------------------- */ -/* Copy out the part array from the record. */ -/* -------------------------------------------------------------------- */ - memcpy( psShape->panPartStart, psSHP->pabyRec + 44 + 8, 4 * nParts ); - for( i = 0; i < nParts; i++ ) - { - if( bBigEndian ) SwapWord( 4, psShape->panPartStart+i ); - } - - nOffset = 44 + 8 + 4*nParts; - -/* -------------------------------------------------------------------- */ -/* If this is a multipatch, we will also have parts types. */ -/* -------------------------------------------------------------------- */ - if( psShape->nSHPType == SHPT_MULTIPATCH ) - { - memcpy( psShape->panPartType, psSHP->pabyRec + nOffset, 4*nParts ); - for( i = 0; i < nParts; i++ ) - { - if( bBigEndian ) SwapWord( 4, psShape->panPartType+i ); - } - - nOffset += 4*nParts; - } - -/* -------------------------------------------------------------------- */ -/* Copy out the vertices from the record. */ -/* -------------------------------------------------------------------- */ - for( i = 0; i < nPoints; i++ ) - { - memcpy(psShape->padfX + i, - psSHP->pabyRec + nOffset + i * 16, - 8 ); - - memcpy(psShape->padfY + i, - psSHP->pabyRec + nOffset + i * 16 + 8, - 8 ); - - if( bBigEndian ) SwapWord( 8, psShape->padfX + i ); - if( bBigEndian ) SwapWord( 8, psShape->padfY + i ); - } - - nOffset += 16*nPoints; - -/* -------------------------------------------------------------------- */ -/* If we have a Z coordinate, collect that now. */ -/* -------------------------------------------------------------------- */ - if( psShape->nSHPType == SHPT_POLYGONZ - || psShape->nSHPType == SHPT_ARCZ - || psShape->nSHPType == SHPT_MULTIPATCH ) - { - memcpy( &(psShape->dfZMin), psSHP->pabyRec + nOffset, 8 ); - memcpy( &(psShape->dfZMax), psSHP->pabyRec + nOffset + 8, 8 ); - - if( bBigEndian ) SwapWord( 8, &(psShape->dfZMin) ); - if( bBigEndian ) SwapWord( 8, &(psShape->dfZMax) ); - - for( i = 0; i < nPoints; i++ ) - { - memcpy( psShape->padfZ + i, - psSHP->pabyRec + nOffset + 16 + i*8, 8 ); - if( bBigEndian ) SwapWord( 8, psShape->padfZ + i ); - } - - nOffset += 16 + 8*nPoints; - } - -/* -------------------------------------------------------------------- */ -/* If we have a M measure value, then read it now. We assume */ -/* that the measure can be present for any shape if the size is */ -/* big enough, but really it will only occur for the Z shapes */ -/* (options), and the M shapes. */ -/* -------------------------------------------------------------------- */ - if( psSHP->panRecSize[hEntity]+8 >= nOffset + 16 + 8*nPoints ) - { - memcpy( &(psShape->dfMMin), psSHP->pabyRec + nOffset, 8 ); - memcpy( &(psShape->dfMMax), psSHP->pabyRec + nOffset + 8, 8 ); - - if( bBigEndian ) SwapWord( 8, &(psShape->dfMMin) ); - if( bBigEndian ) SwapWord( 8, &(psShape->dfMMax) ); - - for( i = 0; i < nPoints; i++ ) - { - memcpy( psShape->padfM + i, - psSHP->pabyRec + nOffset + 16 + i*8, 8 ); - if( bBigEndian ) SwapWord( 8, psShape->padfM + i ); - } - } - - } - -/* ==================================================================== */ -/* Extract vertices for a MultiPoint. */ -/* ==================================================================== */ - else if( psShape->nSHPType == SHPT_MULTIPOINT - || psShape->nSHPType == SHPT_MULTIPOINTM - || psShape->nSHPType == SHPT_MULTIPOINTZ ) - { - int32 nPoints; - int i, nOffset; - - memcpy( &nPoints, psSHP->pabyRec + 44, 4 ); - if( bBigEndian ) SwapWord( 4, &nPoints ); - - psShape->nVertices = nPoints; - psShape->padfX = (double *) calloc(nPoints,sizeof(double)); - psShape->padfY = (double *) calloc(nPoints,sizeof(double)); - psShape->padfZ = (double *) calloc(nPoints,sizeof(double)); - psShape->padfM = (double *) calloc(nPoints,sizeof(double)); - - for( i = 0; i < nPoints; i++ ) - { - memcpy(psShape->padfX+i, psSHP->pabyRec + 48 + 16 * i, 8 ); - memcpy(psShape->padfY+i, psSHP->pabyRec + 48 + 16 * i + 8, 8 ); - - if( bBigEndian ) SwapWord( 8, psShape->padfX + i ); - if( bBigEndian ) SwapWord( 8, psShape->padfY + i ); - } - - nOffset = 48 + 16*nPoints; - -/* -------------------------------------------------------------------- */ -/* Get the X/Y bounds. */ -/* -------------------------------------------------------------------- */ - memcpy( &(psShape->dfXMin), psSHP->pabyRec + 8 + 4, 8 ); - memcpy( &(psShape->dfYMin), psSHP->pabyRec + 8 + 12, 8 ); - memcpy( &(psShape->dfXMax), psSHP->pabyRec + 8 + 20, 8 ); - memcpy( &(psShape->dfYMax), psSHP->pabyRec + 8 + 28, 8 ); - - if( bBigEndian ) SwapWord( 8, &(psShape->dfXMin) ); - if( bBigEndian ) SwapWord( 8, &(psShape->dfYMin) ); - if( bBigEndian ) SwapWord( 8, &(psShape->dfXMax) ); - if( bBigEndian ) SwapWord( 8, &(psShape->dfYMax) ); - -/* -------------------------------------------------------------------- */ -/* If we have a Z coordinate, collect that now. */ -/* -------------------------------------------------------------------- */ - if( psShape->nSHPType == SHPT_MULTIPOINTZ ) - { - memcpy( &(psShape->dfZMin), psSHP->pabyRec + nOffset, 8 ); - memcpy( &(psShape->dfZMax), psSHP->pabyRec + nOffset + 8, 8 ); - - if( bBigEndian ) SwapWord( 8, &(psShape->dfZMin) ); - if( bBigEndian ) SwapWord( 8, &(psShape->dfZMax) ); - - for( i = 0; i < nPoints; i++ ) - { - memcpy( psShape->padfZ + i, - psSHP->pabyRec + nOffset + 16 + i*8, 8 ); - if( bBigEndian ) SwapWord( 8, psShape->padfZ + i ); - } - - nOffset += 16 + 8*nPoints; - } - -/* -------------------------------------------------------------------- */ -/* If we have a M measure value, then read it now. We assume */ -/* that the measure can be present for any shape if the size is */ -/* big enough, but really it will only occur for the Z shapes */ -/* (options), and the M shapes. */ -/* -------------------------------------------------------------------- */ - if( psSHP->panRecSize[hEntity]+8 >= nOffset + 16 + 8*nPoints ) - { - memcpy( &(psShape->dfMMin), psSHP->pabyRec + nOffset, 8 ); - memcpy( &(psShape->dfMMax), psSHP->pabyRec + nOffset + 8, 8 ); - - if( bBigEndian ) SwapWord( 8, &(psShape->dfMMin) ); - if( bBigEndian ) SwapWord( 8, &(psShape->dfMMax) ); - - for( i = 0; i < nPoints; i++ ) - { - memcpy( psShape->padfM + i, - psSHP->pabyRec + nOffset + 16 + i*8, 8 ); - if( bBigEndian ) SwapWord( 8, psShape->padfM + i ); - } - } - } - -/* ==================================================================== */ -/* Extract vertices for a point. */ -/* ==================================================================== */ - else if( psShape->nSHPType == SHPT_POINT - || psShape->nSHPType == SHPT_POINTM - || psShape->nSHPType == SHPT_POINTZ ) - { - int nOffset; - - psShape->nVertices = 1; - psShape->padfX = (double *) calloc(1,sizeof(double)); - psShape->padfY = (double *) calloc(1,sizeof(double)); - psShape->padfZ = (double *) calloc(1,sizeof(double)); - psShape->padfM = (double *) calloc(1,sizeof(double)); - - memcpy( psShape->padfX, psSHP->pabyRec + 12, 8 ); - memcpy( psShape->padfY, psSHP->pabyRec + 20, 8 ); - - if( bBigEndian ) SwapWord( 8, psShape->padfX ); - if( bBigEndian ) SwapWord( 8, psShape->padfY ); - - nOffset = 20 + 8; - -/* -------------------------------------------------------------------- */ -/* If we have a Z coordinate, collect that now. */ -/* -------------------------------------------------------------------- */ - if( psShape->nSHPType == SHPT_POINTZ ) - { - memcpy( psShape->padfZ, psSHP->pabyRec + nOffset, 8 ); - - if( bBigEndian ) SwapWord( 8, psShape->padfZ ); - - nOffset += 8; - } - -/* -------------------------------------------------------------------- */ -/* If we have a M measure value, then read it now. We assume */ -/* that the measure can be present for any shape if the size is */ -/* big enough, but really it will only occur for the Z shapes */ -/* (options), and the M shapes. */ -/* -------------------------------------------------------------------- */ - if( psSHP->panRecSize[hEntity]+8 >= nOffset + 8 ) - { - memcpy( psShape->padfM, psSHP->pabyRec + nOffset, 8 ); - - if( bBigEndian ) SwapWord( 8, psShape->padfM ); - } - -/* -------------------------------------------------------------------- */ -/* Since no extents are supplied in the record, we will apply */ -/* them from the single vertex. */ -/* -------------------------------------------------------------------- */ - psShape->dfXMin = psShape->dfXMax = psShape->padfX[0]; - psShape->dfYMin = psShape->dfYMax = psShape->padfY[0]; - psShape->dfZMin = psShape->dfZMax = psShape->padfZ[0]; - psShape->dfMMin = psShape->dfMMax = psShape->padfM[0]; - } - - return( psShape ); -} - -/************************************************************************/ -/* SHPTypeName() */ -/************************************************************************/ - -const char SHPAPI_CALL1(*) -SHPTypeName( int nSHPType ) - -{ - switch( nSHPType ) - { - case SHPT_NULL: - return "NullShape"; - - case SHPT_POINT: - return "Point"; - - case SHPT_ARC: - return "Arc"; - - case SHPT_POLYGON: - return "Polygon"; - - case SHPT_MULTIPOINT: - return "MultiPoint"; - - case SHPT_POINTZ: - return "PointZ"; - - case SHPT_ARCZ: - return "ArcZ"; - - case SHPT_POLYGONZ: - return "PolygonZ"; - - case SHPT_MULTIPOINTZ: - return "MultiPointZ"; - - case SHPT_POINTM: - return "PointM"; - - case SHPT_ARCM: - return "ArcM"; - - case SHPT_POLYGONM: - return "PolygonM"; - - case SHPT_MULTIPOINTM: - return "MultiPointM"; - - case SHPT_MULTIPATCH: - return "MultiPatch"; - - default: - return "UnknownShapeType"; - } -} - -/************************************************************************/ -/* SHPPartTypeName() */ -/************************************************************************/ - -const char SHPAPI_CALL1(*) -SHPPartTypeName( int nPartType ) - -{ - switch( nPartType ) - { - case SHPP_TRISTRIP: - return "TriangleStrip"; - - case SHPP_TRIFAN: - return "TriangleFan"; - - case SHPP_OUTERRING: - return "OuterRing"; - - case SHPP_INNERRING: - return "InnerRing"; - - case SHPP_FIRSTRING: - return "FirstRing"; - - case SHPP_RING: - return "Ring"; - - default: - return "UnknownPartType"; - } -} - -/************************************************************************/ -/* SHPDestroyObject() */ -/************************************************************************/ - -void SHPAPI_CALL -SHPDestroyObject( SHPObject * psShape ) - -{ - if( psShape == NULL ) - return; - - if( psShape->padfX != NULL ) - free( psShape->padfX ); - if( psShape->padfY != NULL ) - free( psShape->padfY ); - if( psShape->padfZ != NULL ) - free( psShape->padfZ ); - if( psShape->padfM != NULL ) - free( psShape->padfM ); - - if( psShape->panPartStart != NULL ) - free( psShape->panPartStart ); - if( psShape->panPartType != NULL ) - free( psShape->panPartType ); - - free( psShape ); -} - -/************************************************************************/ -/* SHPRewindObject() */ -/* */ -/* Reset the winding of polygon objects to adhere to the */ -/* specification. */ -/************************************************************************/ - -int SHPAPI_CALL -SHPRewindObject( SHPHandle hSHP, SHPObject * psObject ) - -{ - int iOpRing, bAltered = 0; - -/* -------------------------------------------------------------------- */ -/* Do nothing if this is not a polygon object. */ -/* -------------------------------------------------------------------- */ - if( psObject->nSHPType != SHPT_POLYGON - && psObject->nSHPType != SHPT_POLYGONZ - && psObject->nSHPType != SHPT_POLYGONM ) - return 0; - -/* -------------------------------------------------------------------- */ -/* Process each of the rings. */ -/* -------------------------------------------------------------------- */ - for( iOpRing = 0; iOpRing < psObject->nParts; iOpRing++ ) - { - int bInner, iVert, nVertCount, nVertStart, iCheckRing; - double dfSum, dfTestX, dfTestY; - -/* -------------------------------------------------------------------- */ -/* Determine if this ring is an inner ring or an outer ring */ -/* relative to all the other rings. For now we assume the */ -/* first ring is outer and all others are inner, but eventually */ -/* we need to fix this to handle multiple island polygons and */ -/* unordered sets of rings. */ -/* -------------------------------------------------------------------- */ - dfTestX = psObject->padfX[psObject->panPartStart[iOpRing]]; - dfTestY = psObject->padfY[psObject->panPartStart[iOpRing]]; - - bInner = FALSE; - for( iCheckRing = 0; iCheckRing < psObject->nParts; iCheckRing++ ) - { - int iEdge; - - if( iCheckRing == iOpRing ) - continue; - - nVertStart = psObject->panPartStart[iCheckRing]; - - if( iCheckRing == psObject->nParts-1 ) - nVertCount = psObject->nVertices - - psObject->panPartStart[iCheckRing]; - else - nVertCount = psObject->panPartStart[iCheckRing+1] - - psObject->panPartStart[iCheckRing]; - - for( iEdge = 0; iEdge < nVertCount; iEdge++ ) - { - int iNext; - - if( iEdge < nVertCount-1 ) - iNext = iEdge+1; - else - iNext = 0; - - if( (psObject->padfY[iEdge+nVertStart] < dfTestY - && psObject->padfY[iNext+nVertStart] >= dfTestY) - || (psObject->padfY[iNext+nVertStart] < dfTestY - && psObject->padfY[iEdge+nVertStart] >= dfTestY) ) - { - if( psObject->padfX[iEdge+nVertStart] - + (dfTestY - psObject->padfY[iEdge+nVertStart]) - / (psObject->padfY[iNext+nVertStart] - - psObject->padfY[iEdge+nVertStart]) - * (psObject->padfX[iNext+nVertStart] - - psObject->padfX[iEdge+nVertStart]) < dfTestX ) - bInner = !bInner; - } - } - } - -/* -------------------------------------------------------------------- */ -/* Determine the current order of this ring so we will know if */ -/* it has to be reversed. */ -/* -------------------------------------------------------------------- */ - nVertStart = psObject->panPartStart[iOpRing]; - - if( iOpRing == psObject->nParts-1 ) - nVertCount = psObject->nVertices - psObject->panPartStart[iOpRing]; - else - nVertCount = psObject->panPartStart[iOpRing+1] - - psObject->panPartStart[iOpRing]; - - dfSum = 0.0; - for( iVert = nVertStart; iVert < nVertStart+nVertCount-1; iVert++ ) - { - dfSum += psObject->padfX[iVert] * psObject->padfY[iVert+1] - - psObject->padfY[iVert] * psObject->padfX[iVert+1]; - } - - dfSum += psObject->padfX[iVert] * psObject->padfY[nVertStart] - - psObject->padfY[iVert] * psObject->padfX[nVertStart]; - -/* -------------------------------------------------------------------- */ -/* Reverse if necessary. */ -/* -------------------------------------------------------------------- */ - if( (dfSum < 0.0 && bInner) || (dfSum > 0.0 && !bInner) ) - { - int i; - - bAltered++; - for( i = 0; i < nVertCount/2; i++ ) - { - double dfSaved; - - /* Swap X */ - dfSaved = psObject->padfX[nVertStart+i]; - psObject->padfX[nVertStart+i] = - psObject->padfX[nVertStart+nVertCount-i-1]; - psObject->padfX[nVertStart+nVertCount-i-1] = dfSaved; - - /* Swap Y */ - dfSaved = psObject->padfY[nVertStart+i]; - psObject->padfY[nVertStart+i] = - psObject->padfY[nVertStart+nVertCount-i-1]; - psObject->padfY[nVertStart+nVertCount-i-1] = dfSaved; - - /* Swap Z */ - if( psObject->padfZ ) - { - dfSaved = psObject->padfZ[nVertStart+i]; - psObject->padfZ[nVertStart+i] = - psObject->padfZ[nVertStart+nVertCount-i-1]; - psObject->padfZ[nVertStart+nVertCount-i-1] = dfSaved; - } - - /* Swap M */ - if( psObject->padfM ) - { - dfSaved = psObject->padfM[nVertStart+i]; - psObject->padfM[nVertStart+i] = - psObject->padfM[nVertStart+nVertCount-i-1]; - psObject->padfM[nVertStart+nVertCount-i-1] = dfSaved; - } - } - } - } - - return bAltered; -} From 794f2acf0ac5b8bcb9180077406ddcad2df07b89 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 18 Jun 2025 13:13:24 -0600 Subject: [PATCH 068/435] Made more adjustments to UI element naming and updated function headings accordingly --- src/gui/qt6/controller.cpp | 2 +- src/gui/qt6/mainwindow.cpp | 82 +++++++++--------- src/gui/qt6/mainwindow.h | 40 ++++----- src/gui/qt6/mainwindow.ui | 169 ++++++++++++++++++------------------- 4 files changed, 145 insertions(+), 148 deletions(-) diff --git a/src/gui/qt6/controller.cpp b/src/gui/qt6/controller.cpp index 80460c688..781d1ede6 100644 --- a/src/gui/qt6/controller.cpp +++ b/src/gui/qt6/controller.cpp @@ -108,7 +108,7 @@ BaseInput Controller::setBaseInput() { QString meshType = view->getUi()->meshResolutionComboBox->currentText().toLower(); QString vegetation = view->getUi()->vegetationComboBox->currentText().toLower(); int nLayers = 20; - int diurnalFlag = view->getUi()->diurnalWindCheckBox->isChecked() ? 1 : 0; + int diurnalFlag = view->getUi()->diurnalCheckBox->isChecked() ? 1 : 0; double height = view->getUi()->windHeightValue->value(); QString heightUnits; diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index 8eed6c92f..30b47a494 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -74,7 +74,7 @@ MainWindow::~MainWindow() { delete ui; } void MainWindow::onTreeItemClicked(QTreeWidgetItem *item, int column) { int pageIndex = item->data(column, Qt::UserRole).toInt(); if (pageIndex >= 0) { - ui->stackedInputPage->setCurrentIndex(pageIndex); + ui->stackedInputsPage->setCurrentIndex(pageIndex); } } @@ -263,15 +263,15 @@ static void refreshUI(const Ui::MainWindow* ui) // Update solve state if (state.solverMethodologyOk && state.inputsOk) { - ui->solveBtn->setEnabled(true); - ui->numberOfProcessorsSolveBtn->setEnabled(true); - ui->solveBtn->setToolTip(""); - ui->numberOfProcessorsSolveBtn->setToolTip(""); + ui->solveButton->setEnabled(true); + ui->numberOfProcessorsSolveButton->setEnabled(true); + ui->solveButton->setToolTip(""); + ui->numberOfProcessorsSolveButton->setToolTip(""); } else { - ui->solveBtn->setEnabled(false); - ui->numberOfProcessorsSolveBtn->setEnabled(false); - ui->solveBtn->setToolTip("Solver Methodology and Inputs must be passing to solve."); - ui->numberOfProcessorsSolveBtn->setToolTip("Solver Methodology and Inputs must be passing to solve."); + ui->solveButton->setEnabled(false); + ui->numberOfProcessorsSolveButton->setEnabled(false); + ui->solveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); + ui->numberOfProcessorsSolveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); } } @@ -281,7 +281,7 @@ static void refreshUI(const Ui::MainWindow* ui) */ // Use selects Conservation of Mass -void MainWindow::on_useCOM_clicked() +void MainWindow::on_massSolverCheckBox_clicked() { AppState& state = AppState::instance(); @@ -298,7 +298,7 @@ void MainWindow::on_useCOM_clicked() // User selects Conservation of Mass and Momentum -void MainWindow::on_useCOMM_clicked() +void MainWindow::on_massAndMomentumSolverCheckBox_clicked() { AppState& state = AppState::instance(); @@ -315,7 +315,7 @@ void MainWindow::on_useCOMM_clicked() // User selects an elevation input file (by file) -void MainWindow::on_elevFilePath_textChanged(const QString &arg1) +void MainWindow::on_elevationInputFileLineEdit_textChanged(const QString &arg1) { // Get GDAL data information on DEM input QString fileName = ui->elevationInputFileLineEdit->text(); @@ -360,13 +360,13 @@ void MainWindow::on_elevFilePath_textChanged(const QString &arg1) GDALClose((GDALDatasetH)poInputDS); // Run mesh calculator - MainWindow::on_meshResType_currentIndexChanged(ui->meshResolutionComboBox->currentIndex()); + MainWindow::on_meshResolutionComboBox_currentIndexChanged(ui->meshResolutionComboBox->currentIndex()); refreshUI(ui); } -void MainWindow::on_openFileButton_clicked() +void MainWindow::on_elevationInputFileOpenButton_clicked() { QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); QString filePath = QFileDialog::getOpenFileName(this, @@ -380,7 +380,7 @@ void MainWindow::on_openFileButton_clicked() // User selects an elevation input file (by map import) -void MainWindow::on_getFromMapButton_clicked() +void MainWindow::on_elevationInputFileDownloadButton_clicked() { // We have to use batching since the Javascript part is async struct JSFieldBatch { @@ -449,7 +449,7 @@ void MainWindow::on_getFromMapButton_clicked() } // User changes the mesh resolution spec for surface input -void MainWindow::on_meshResType_currentIndexChanged(int index) +void MainWindow::on_meshResolutionComboBox_currentIndexChanged(int index) { // Set value box enable for custom/other if (index == 3) { @@ -492,14 +492,14 @@ void MainWindow::on_meshResType_currentIndexChanged(int index) } -void MainWindow::on_meshResMeters_toggled(bool checked) +void MainWindow::on_meshResolutionMetersRadioButton_toggled(bool checked) { if (checked) { ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 0.3048); } } -void MainWindow::on_meshResFeet_toggled(bool checked) +void MainWindow::on_meshResolutionFeetRadioButton_toggled(bool checked) { if (checked) { ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 3.28084); @@ -507,13 +507,13 @@ void MainWindow::on_meshResFeet_toggled(bool checked) } // User selects a new time zone -void MainWindow::on_timeZoneSelector_currentIndexChanged(int index) +void MainWindow::on_timeZoneComboBox_currentIndexChanged(int index) { emit timeZoneDetailsRequest(); } // User toggles show all time zones -void MainWindow::on_showAllTimeZones_clicked() +void MainWindow::on_timeZoneAllZonesCheckBox_clicked() { AppState& state = AppState::instance(); @@ -524,12 +524,12 @@ void MainWindow::on_showAllTimeZones_clicked() } // User toggles show time zone details -void MainWindow::on_displayTimeZoneDetails_clicked() +void MainWindow::on_timeZoneDetailsCheckBox_clicked() { AppState& state = AppState::instance(); // Update time zone details state - state.displayTimeZoneDetails = ui->timeZoneZoneDetailsCheckBox->isChecked(); + state.displayTimeZoneDetails = ui->timeZoneDetailsCheckBox->isChecked(); // Update visibility of details pane ui->timeZoneDetailsTextEdit->setVisible(state.displayTimeZoneDetails); @@ -537,16 +537,16 @@ void MainWindow::on_displayTimeZoneDetails_clicked() } // User selects Diurnal Input -void MainWindow::on_useDiurnalWind_clicked() +void MainWindow::on_diurnalCheckBox_clicked() { AppState& state = AppState::instance(); // Update UI state - state.diurnalInputToggled = ui->diurnalWindCheckBox->isChecked(); + state.diurnalInputToggled = ui->diurnalCheckBox->isChecked(); // Change the domain average input table based on diurnal wind QTableWidget* table = ui->domainAverageTable; - if (!ui->diurnalWindCheckBox->isChecked()) { + if (!ui->diurnalCheckBox->isChecked()) { table->hideColumn(2); table->hideColumn(3); table->hideColumn(4); @@ -564,7 +564,7 @@ void MainWindow::on_useDiurnalWind_clicked() } // User selects Stability Input -void MainWindow::on_useStability_clicked() +void MainWindow::on_stabilityCheckBox_clicked() { AppState& state = AppState::instance(); @@ -580,7 +580,7 @@ void MainWindow::on_useStability_clicked() // Domain Average Wind // User selects Domain Average Wind -void MainWindow::on_useDomainAvgWind_clicked() +void MainWindow::on_domainAverageCheckBox_clicked() { AppState& state = AppState::instance(); @@ -600,7 +600,7 @@ void MainWindow::on_useDomainAvgWind_clicked() } // User changes Domain Average Wind -> Input Wind Height -void MainWindow::on_domainAvgPicklist_currentIndexChanged(int index) +void MainWindow::on_windHeightComboBox_currentIndexChanged(int index) { switch(index) { case 0: @@ -628,7 +628,7 @@ void MainWindow::on_domainAvgPicklist_currentIndexChanged(int index) } // User clears the domain average wind input table -void MainWindow::on_clearDAWtable_clicked() +void MainWindow::on_clearTableButton_clicked() { ui->domainAverageTable->clearContents(); invalidDAWCells.clear(); @@ -637,7 +637,7 @@ void MainWindow::on_clearDAWtable_clicked() } // User changes a value in the domain average wind input table -void MainWindow::on_windTableData_cellChanged(int row, int column) +void MainWindow::on_domainAverageTable_cellChanged(int row, int column) { QTableWidget* table = ui->domainAverageTable; QTableWidgetItem* item = table->item(row, column); @@ -713,7 +713,7 @@ void MainWindow::on_windTableData_cellChanged(int row, int column) } // User selects Point Initialization wind model -void MainWindow::on_usePointInit_clicked() +void MainWindow::on_pointInitializationCheckBox_clicked() { AppState& state = AppState::instance(); @@ -753,7 +753,7 @@ void MainWindow::on_useWeatherModelInit_clicked() } // User selects a new output location -void MainWindow::on_outputSaveLocationBtn_clicked() +void MainWindow::on_outputDirectoryButton_clicked() { QString currentPath = ui->outputDirectoryTextEdit->toPlainText(); QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); @@ -768,13 +768,13 @@ void MainWindow::on_outputSaveLocationBtn_clicked() } } -// User selects the solve button on the solver page -void MainWindow::on_solverPageSolveBtn_clicked() +// User selects the solve Button on the solver page +void MainWindow::on_numberOfProcessorsSolveButton_clicked() { - ui->solveBtn->click(); + ui->solveButton->click(); } -// User selects the primary solve button +// User selects the primary solve Button void MainWindow::on_solveButton_clicked() { emit solveRequest(); @@ -788,7 +788,7 @@ void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int colu } else if (item->text(0) == "Conservation of Mass and Momentum") { ui->massAndMomentumSolverCheckBox->click(); } else if (item->text(0) == "Diurnal Input") { - ui->diurnalWindCheckBox->click(); + ui->diurnalCheckBox->click(); } else if (item->text(0) == "Stability Input") { ui->stabilityCheckBox->click(); } else if (item->text(0) == "Domain Average Wind") { @@ -908,7 +908,7 @@ MainWindow::MainWindow(QWidget *parent) */ // Top-level items - ui->stackedInputPage->setCurrentIndex(0); + ui->stackedInputsPage->setCurrentIndex(0); ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); // Solver Methodology (Page 0) ui->treeWidget->topLevelItem(1)->setData(0, Qt::UserRole, 4); // Inputs (Page 5) ui->treeWidget->topLevelItem(2)->setData(0, Qt::UserRole, 12); // Inputs (Page 13) @@ -943,8 +943,8 @@ MainWindow::MainWindow(QWidget *parent) // Surface Input window // Set icons - ui->elevationInputFileOpenBtn->setIcon(QIcon(":/folder.png")); - ui->elevationInputFileDownloadBtn->setIcon(QIcon(":/swoop_final.png")); + ui->elevationInputFileOpenButton->setIcon(QIcon(":/folder.png")); + ui->elevationInputFileDownloadButton->setIcon(QIcon(":/swoop_final.png")); // Solver window // Update processor count and set user input default value & upper bound @@ -958,7 +958,7 @@ MainWindow::MainWindow(QWidget *parent) // Populate default location for output location ui->outputDirectoryTextEdit->setText(downloadsPath); - ui->outputDirectoryBtn->setIcon(QIcon(":/folder.png")); + ui->outputDirectoryButton->setIcon(QIcon(":/folder.png")); // Set initial visibility of time zone details ui->timeZoneDetailsTextEdit->setVisible(false); diff --git a/src/gui/qt6/mainwindow.h b/src/gui/qt6/mainwindow.h index 6e3aaf28b..a7b828c1c 100644 --- a/src/gui/qt6/mainwindow.h +++ b/src/gui/qt6/mainwindow.h @@ -44,50 +44,50 @@ class MainWindow : public QMainWindow { ~MainWindow(); private slots: - void on_useCOM_clicked(); - void on_useCOMM_clicked(); + void on_massSolverCheckBox_clicked(); + void on_massAndMomentumSolverCheckBox_clicked(); - void on_getFromMapButton_clicked(); + void on_elevationInputFileDownloadButton_clicked(); - void on_openFileButton_clicked(); + void on_elevationInputFileOpenButton_clicked(); - void on_elevFilePath_textChanged(const QString &arg1); + void on_elevationInputFileLineEdit_textChanged(const QString &arg1); - void on_meshResType_currentIndexChanged(int index); + void on_meshResolutionComboBox_currentIndexChanged(int index); - void on_useDiurnalWind_clicked(); + void on_diurnalCheckBox_clicked(); - void on_useStability_clicked(); + void on_stabilityCheckBox_clicked(); - void on_domainAvgPicklist_currentIndexChanged(int index); + void on_windHeightComboBox_currentIndexChanged(int index); - void on_useDomainAvgWind_clicked(); + void on_domainAverageCheckBox_clicked(); void on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column); - void on_usePointInit_clicked(); + void on_pointInitializationCheckBox_clicked(); void on_useWeatherModelInit_clicked(); - void on_clearDAWtable_clicked(); + void on_clearTableButton_clicked(); void on_solveButton_clicked(); - void on_outputSaveLocationBtn_clicked(); + void on_outputDirectoryButton_clicked(); - void on_solverPageSolveBtn_clicked(); + void on_numberOfProcessorsSolveButton_clicked(); - void on_showAllTimeZones_clicked(); + void on_timeZoneAllZonesCheckBox_clicked(); - void on_displayTimeZoneDetails_clicked(); + void on_timeZoneDetailsCheckBox_clicked(); - void on_timeZoneSelector_currentIndexChanged(int index); + void on_timeZoneComboBox_currentIndexChanged(int index); - void on_windTableData_cellChanged(int row, int column); + void on_domainAverageTable_cellChanged(int row, int column); - void on_meshResMeters_toggled(bool checked); + void on_meshResolutionMetersRadioButton_toggled(bool checked); - void on_meshResFeet_toggled(bool checked); + void on_meshResolutionFeetRadioButton_toggled(bool checked); signals: void solveRequest(); diff --git a/src/gui/qt6/mainwindow.ui b/src/gui/qt6/mainwindow.ui index b10a0b37f..01c9e7bd5 100644 --- a/src/gui/qt6/mainwindow.ui +++ b/src/gui/qt6/mainwindow.ui @@ -274,7 +274,7 @@ false - + 0 @@ -476,7 +476,7 @@ - + Qt::Orientation::Vertical @@ -492,7 +492,7 @@ - + 0 @@ -524,10 +524,10 @@ QFrame::Shadow::Sunken - 12 + 5 - + 0 @@ -545,7 +545,7 @@ 0 - + 10 @@ -572,7 +572,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical @@ -642,7 +642,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical @@ -720,7 +720,7 @@ li.checked::marker { content: "\2612"; } - + 5 @@ -735,7 +735,7 @@ li.checked::marker { content: "\2612"; } 5 - + 8 @@ -766,7 +766,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical @@ -856,7 +856,7 @@ li.checked::marker { content: "\2612"; } - + PointingHandCursor @@ -866,7 +866,7 @@ li.checked::marker { content: "\2612"; } - + PointingHandCursor @@ -990,7 +990,7 @@ li.checked::marker { content: "\2612"; } - + true @@ -1012,7 +1012,7 @@ li.checked::marker { content: "\2612"; } - + true @@ -1096,7 +1096,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Horizontal @@ -1211,7 +1211,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -1227,7 +1227,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Horizontal @@ -1242,7 +1242,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical @@ -1277,7 +1277,7 @@ li.checked::marker { content: "\2612"; } 5 - + PointingHandCursor @@ -1287,7 +1287,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical @@ -1479,7 +1479,7 @@ li.checked::marker { content: "\2612"; } - + @@ -1571,7 +1571,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -1587,7 +1587,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Horizontal @@ -2410,9 +2410,6 @@ li.checked::marker { content: "\2612"; } PointingHandCursor - - QAbstractSpinBox::ButtonSymbols::UpDownArrows - @@ -2589,7 +2586,7 @@ li.checked::marker { content: "\2612"; } - + false @@ -2654,7 +2651,7 @@ li.checked::marker { content: "\2612"; } - + PointingHandCursor @@ -2680,7 +2677,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical @@ -2697,7 +2694,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical @@ -2713,7 +2710,7 @@ li.checked::marker { content: "\2612"; } - + false @@ -2821,80 +2818,80 @@ QMenu::item:selected { background: #3c3c3c; } - + File - - - - - + + + + + - + Options - + - + Tools - - + + - + Help - + Displaying Shapefiles - + - + Tutorials - - - - + + + + - + Instructions - - - + + + - - - - - - - + + + + + + + - - - - + + + + - + Console Output - + Write blank station file - + Set configuration option @@ -2904,87 +2901,87 @@ QMenu::item:selected { Displaying Shapefiles - + How to Display Shapefiles in ArcMap - + Tutorial 1: The Basics - + Tutorial 2: Diurnal Winds and Non-Neutral Stability - + Tutorial 3: Point Initialization - + Tutorial 4: Weather Model Initialization - + DEM Download - + fetch_dem Instructions - + Command Line Interface - + About WindNinja - + Citation - + Email Us - + Submit Bug Report - + New Project - + Open Project - + Export Solution - + Close Project - + Exit WindNinja From 1aa69c97a0ae64348e6afaf275fb6f2b8868bb0d Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 18 Jun 2025 14:21:39 -0600 Subject: [PATCH 069/435] Removed netcdf locking from GUI --- src/gui/main.cpp | 26 ++------------------------ 1 file changed, 2 insertions(+), 24 deletions(-) diff --git a/src/gui/main.cpp b/src/gui/main.cpp index bbf747a36..59735ea87 100755 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -7,27 +7,10 @@ #include "controller.h" -#ifdef _OPENMP -omp_lock_t netCDF_lock; -#endif int main(int argc, char *argv[]) { - int result; - #ifdef _OPENMP - omp_init_lock (&netCDF_lock); - #endif - - char ** papszOptions = NULL; - NinjaErr err = 0; - err = NinjaInit(papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaInit: err = %d\n", err); - #ifdef _OPENMP - omp_destroy_lock (&netCDF_lock); - #endif - } + QApplication a(argc, argv); MainWindow w; @@ -38,11 +21,6 @@ int main(int argc, char *argv[]) { QTimer::singleShot(0, &w, &MainWindow::timeZoneDataRequest); w.show(); - result = a.exec(); - - #ifdef _OPENMP - omp_destroy_lock (&netCDF_lock); - #endif - return result; + return a.exec(); } From 572bb603f418a93ec145267cd87403f8b45708e7 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 18 Jun 2025 15:12:09 -0600 Subject: [PATCH 070/435] connected numThreads option in qt6 gui --- autotest/api/test_capi_domain_average_wind.c | 2 +- src/gui/qt6/controller.cpp | 2 ++ src/gui/qt6/mainwindow.cpp | 8 ++++---- src/gui/qt6/modeldata.h | 6 ++++-- src/gui/qt6/provider.cpp | 4 +++- src/gui/qt6/provider.h | 1 - 6 files changed, 14 insertions(+), 9 deletions(-) diff --git a/autotest/api/test_capi_domain_average_wind.c b/autotest/api/test_capi_domain_average_wind.c index e1cf7665d..1cdd47d15 100644 --- a/autotest/api/test_capi_domain_average_wind.c +++ b/autotest/api/test_capi_domain_average_wind.c @@ -39,7 +39,7 @@ int main() */ NinjaArmyH* ninjaArmy = NULL; const char * comType = "cli"; //communication type is always set to "cli" - const int nCPUs = 1; + const int nCPUs = 4; char ** papszOptions = NULL; NinjaErr err = 0; err = NinjaInit(papszOptions); //initialize global singletons and environments (GDAL_DATA, etc.) diff --git a/src/gui/qt6/controller.cpp b/src/gui/qt6/controller.cpp index 7ba751b57..18dcebd08 100644 --- a/src/gui/qt6/controller.cpp +++ b/src/gui/qt6/controller.cpp @@ -99,6 +99,7 @@ void Controller::onGetDEMrequest(std::array boundsBox, QString output BaseInput Controller::setBaseInput() { QString demPath = view->getUi()->elevFilePath->text(); + int nCPUs = view->getUi()->numProcessorsSpinbox->value(); double outputResolution = view->getUi()->meshResValue->value(); QString initMethod; if (view->getUi()->useDomainAvgWind->isChecked()) { @@ -141,6 +142,7 @@ BaseInput Controller::setBaseInput() { return BaseInput ( demPath.toStdString(), + nCPUs, outputResolution, initMethod.toStdString(), meshType.toStdString(), diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index 0cfa13d25..0d57914f2 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -945,10 +945,10 @@ MainWindow::MainWindow(QWidget *parent) // Solver window // Update processor count and set user input default value & upper bound - int cpuCount = QThread::idealThreadCount(); - ui->availableProcessors->setPlainText("Available Processors: " + QString::number(cpuCount)); - ui->numProcessorsSpinbox->setMaximum(cpuCount); - ui->numProcessorsSpinbox->setValue(cpuCount); + int nCPUs = QThread::idealThreadCount(); + ui->availableProcessors->setPlainText("Available Processors: " + QString::number(nCPUs)); + ui->numProcessorsSpinbox->setMaximum(nCPUs); + ui->numProcessorsSpinbox->setValue(nCPUs); // Wind Input -> Point Init window ui->downloadPointInitData->setIcon(QIcon(":/application_get")); diff --git a/src/gui/qt6/modeldata.h b/src/gui/qt6/modeldata.h index 9dc27ba2e..07e8e2a7c 100755 --- a/src/gui/qt6/modeldata.h +++ b/src/gui/qt6/modeldata.h @@ -9,6 +9,7 @@ using namespace std; class BaseInput { private: string demFile; + int nCPUs; double outputResolution; string initializationMethod; string meshChoice; @@ -25,13 +26,14 @@ class BaseInput { BaseInput() {} // Constructor - BaseInput(string demFile, double outputResolution, string initializationMethod, string meshChoice, string vegetation, + BaseInput(string demFile, int nCPUs, double outputResolution, string initializationMethod, string meshChoice, string vegetation, int nLayers, int diurnalFlag, double height, string heightUnits, bool momentumFlag, int numNinjas, string outputPath) - : demFile(demFile), outputResolution(outputResolution), initializationMethod(initializationMethod), meshChoice(meshChoice), + : demFile(demFile), nCPUs(nCPUs), outputResolution(outputResolution), initializationMethod(initializationMethod), meshChoice(meshChoice), vegetation(vegetation), nLayers(nLayers), diurnalFlag(diurnalFlag), height(height), heightUnits(heightUnits), momentumFlag(momentumFlag), numNinjas(numNinjas), outputPath(outputPath) {} // Getter methods const string& getDemFile() const { return demFile; } + int getNumCPUs() { return nCPUs; } double getOutputResolution() { return outputResolution; } const string& getInitializationMethod() const { return initializationMethod; } const string& getMeshChoice() const { return meshChoice; } diff --git a/src/gui/qt6/provider.cpp b/src/gui/qt6/provider.cpp index 5c78eec38..a1f73eda8 100755 --- a/src/gui/qt6/provider.cpp +++ b/src/gui/qt6/provider.cpp @@ -15,7 +15,6 @@ using namespace std; NinjaArmyH* ninjaArmy = NULL; const char * comType = "cli"; -const int nCPUs = 1; char ** papszOptions = NULL; NinjaErr err = 0; @@ -30,6 +29,7 @@ int Provider::domain_average_exec(DomainAverageWind& input) { std::vector directionVector = input.getDirectionList(); const double* directionList = directionVector.data(); const char * demFile = input.getDemFile().c_str(); + int nCPUs = input.getNumCPUs(); double outputResolution = input.getOutputResolution(); const char* initializationMethod = input.getInitializationMethod().c_str(); const char* meshChoice = input.getMeshChoice().c_str(); @@ -239,6 +239,7 @@ int Provider::point_exec(PointInitialization& input) { bool matchPointFlag = input.getMatchPointFlag(); char * demFile = const_cast(input.getDemFile().c_str()); + int nCPUs = input.getNumCPUs(); double outputResolution = input.getOutputResolution(); const char* initializationMethod = input.getInitializationMethod().c_str(); const char* meshChoice = input.getMeshChoice().c_str(); @@ -377,6 +378,7 @@ int Provider::wxmodel_exec(WeatherModel& input) { */ const char * demFile = input.getDemFile().c_str(); + int nCPUs = input.getNumCPUs(); double outputResolution = input.getOutputResolution(); const char* initializationMethod = input.getInitializationMethod().c_str(); const char* meshChoice = input.getMeshChoice().c_str(); diff --git a/src/gui/qt6/provider.h b/src/gui/qt6/provider.h index 2006ff9ff..6e3cf9ff7 100755 --- a/src/gui/qt6/provider.h +++ b/src/gui/qt6/provider.h @@ -17,7 +17,6 @@ class Provider { private: class NinjaArmyH* ninjaArmy = nullptr; const char* comType = "cli"; - const int nCPUs = 1; char** papszOptions = nullptr; int err = 0; From 376efbf34a4189f407b66ebfdfd15b6e50781a61 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 18 Jun 2025 17:33:49 -0600 Subject: [PATCH 071/435] updated the qt6 gui mesh resolution calculation, for momentum solver runs note that I had problems testing it, #ifdefine NINJAFOAM wrapped statements were getting ignored in this branch, though I checked and they are getting triggered properly in the main GUI-Redesign branch, so this will need checked again after the merge --- src/gui/qt6/mainwindow.cpp | 47 +++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index 0d57914f2..4ec62f68a 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -458,11 +458,19 @@ void MainWindow::on_meshResType_currentIndexChanged(int index) ui->meshResValue->setEnabled(false); } + // default values are native mesh values + int coarse = 4000; int medium = 10000; int fine = 20000; double meshResolution = 200.0; +#ifdef NINJAFOAM + coarse = 25000; + medium = 50000; + fine = 100000; +#endif //NINJAFOAM + int targetNumHorizCells = fine; switch (index) { case 0: @@ -478,6 +486,8 @@ void MainWindow::on_meshResType_currentIndexChanged(int index) targetNumHorizCells = meshResolution; } + // default values are native mesh values + double XLength = GDALXSize * GDALCellSize; double YLength = GDALYSize * GDALCellSize; double nXcells = 2 * std::sqrt((double)targetNumHorizCells) * (XLength / (XLength + YLength)); @@ -488,6 +498,40 @@ void MainWindow::on_meshResType_currentIndexChanged(int index) meshResolution = (XCellSize + YCellSize) / 2; +#ifdef NINJAFOAM + XLength = GDALXSize * GDALCellSize; + YLength = GDALYSize * GDALCellSize; + + double dz = GDALMaxValue - GDALMinValue; + double ZLength = max((0.1 * max(XLength, YLength)), (dz + 0.1 * dz)); + double zmin, zmax; + zmin = GDALMaxValue + 0.05 * ZLength; //zmin (above highest point in DEM for MDM) + zmax = GDALMaxValue + ZLength; //zmax + + double volume; + double cellCount; + double cellVolume; + + volume = XLength * YLength * (zmax-zmin); //volume of blockMesh + cellCount = targetNumHorizCells * 0.5; // cell count in volume 1 + cellVolume = volume/cellCount; // volume of 1 cell in blockMesh + double side = std::pow(cellVolume, (1.0/3.0)); // length of side of cell in blockMesh + + //determine number of rounds of refinement + int nCellsToAdd = 0; + int refinedCellCount = 0; + int nCellsInLowestLayer = int(XLength/side) * int(YLength/side); + int nRoundsRefinement = 0; + while(refinedCellCount < (0.5 * targetNumHorizCells)){ + nCellsToAdd = nCellsInLowestLayer * 8; //each cell is divided into 8 cells + refinedCellCount += nCellsToAdd - nCellsInLowestLayer; //subtract the parent cells + nCellsInLowestLayer = nCellsToAdd/2; //only half of the added cells are in the lowest layer + nRoundsRefinement += 1; + } + + meshResolution = side/(nRoundsRefinement*2.0); +#endif //NINJAFOAM + ui->meshResValue->setValue(meshResolution); } @@ -495,7 +539,8 @@ void MainWindow::on_meshResType_currentIndexChanged(int index) void MainWindow::on_meshResMeters_toggled(bool checked) { if (checked) { - ui->meshResValue->setValue(ui->meshResValue->value() * 0.3048); +// ui->meshResValue->setValue(ui->meshResValue->value() * 0.3048); + ui->meshResValue->setValue(ui->meshResValue->value()); } } From c984f343ada64e5e8eb34ea3580a01d6fa6703df Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 23 Jun 2025 11:04:42 -0600 Subject: [PATCH 072/435] Added bounding box and point radius ui elements in QT --- src/gui/mainwindow.cpp | 19 +++- src/gui/mainwindow.ui | 212 +++++++++++++++++++++++++++++++++-------- 2 files changed, 188 insertions(+), 43 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 5a18dd0e4..7be3504c4 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -961,10 +961,19 @@ MainWindow::MainWindow(QWidget *parent) ui->timeZoneDetailsTextEdit->setVisible(false); // Set initial formatting of domain average input table - ui->domainAverageTable->hideColumn(2); - ui->domainAverageTable->hideColumn(3); - ui->domainAverageTable->hideColumn(4); - ui->domainAverageTable->hideColumn(5); - ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + ui->domainAverageTable->hideColumn(2); + ui->domainAverageTable->hideColumn(3); + ui->domainAverageTable->hideColumn(4); + ui->domainAverageTable->hideColumn(5); + ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + + connect(ui->comboBox, QOverload::of(&QComboBox::currentIndexChanged), + this, [=](int index) { + if (index == 2) + ui->stackedWidget->setCurrentIndex(1); + else + ui->stackedWidget->setCurrentIndex(0); + }); } + diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 01c9e7bd5..642a20f6c 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -793,7 +793,7 @@ li.checked::marker { content: "\2612"; } 0 - + QLayout::SizeConstraint::SetMinAndMaxSize @@ -809,6 +809,155 @@ li.checked::marker { content: "\2612"; } 5 + + + + + 0 + 0 + + + + Elevation Input Type + + + + + + + Draw Bounding Box + + + + + Enter Bounding Box + + + + + Enter Point Radius + + + + + + + + + 0 + 0 + + + + 0 + + + + + + + Bounding Box + + + + + + North + + + + + + + + + + South + + + + + + + + + + East + + + + + + + + + + West + + + + + + + + + + + + + + + + + + 0 + 0 + + + + Point and Radius + + + + + + Center Lat + + + + + + + + + + Center Lon + + + + + + + + + + Radius (miles) + + + + + + + + + + + + + + + + @@ -1128,33 +1277,7 @@ li.checked::marker { content: "\2612"; } Time Zone - - - - - - 0 - 0 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Name: Mountain Standard Time</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Name: Mountain Daylight Time</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Offset from UTC: -07:00:00</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Offset from UTC: -06:00:00</p></body></html> - - - Qt::TextInteractionFlag::NoTextInteraction - - - + @@ -1241,18 +1364,31 @@ li.checked::marker { content: "\2612"; } - - - - Qt::Orientation::Vertical + + + + + 0 + 0 + - - - 20 - 40 - + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Name: Mountain Standard Time</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Name: Mountain Daylight Time</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Offset from UTC: -07:00:00</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Offset from UTC: -06:00:00</p></body></html> - + + Qt::TextInteractionFlag::NoTextInteraction + + From 56785ff2a47d08db26677f5c151d181fffeb0fa2 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 23 Jun 2025 11:07:45 -0600 Subject: [PATCH 073/435] Removed bounding box elements from map --- data/map.html | 37 +------------------------------------ 1 file changed, 1 insertion(+), 36 deletions(-) diff --git a/data/map.html b/data/map.html index 3ea03c357..f59612ff4 100755 --- a/data/map.html +++ b/data/map.html @@ -16,7 +16,7 @@ box-sizing: border-box; } #map { - height: 70% ; + height: 100% ; width: 100% ; max-width: 100%; box-sizing: border-box; @@ -373,41 +373,6 @@ -
-
-
-

Point and Radius:

-

Enter lat, lon, and radius, then choose Data Source and click Download File

-
- - - - e.g., 44.334 - - - - - e.g., -112.555 - - - - - e.g., 10 - -
-
-

Bounding Box Coordinates:

- - - - - - - - -
-
- From 9fdce67f3b45efccda91a310f8c035a4897109d0 Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 23 Jun 2025 12:03:37 -0600 Subject: [PATCH 074/435] correction to 376efbf34a4189f407b66ebfdfd15b6e50781a61, I forgot to add the "if(momentumFlag == true)" wrapper to the mesh res calc code, still needs tested once it is merged --- src/gui/qt6/mainwindow.cpp | 72 ++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/src/gui/qt6/mainwindow.cpp b/src/gui/qt6/mainwindow.cpp index 4ec62f68a..dae359c45 100644 --- a/src/gui/qt6/mainwindow.cpp +++ b/src/gui/qt6/mainwindow.cpp @@ -466,9 +466,11 @@ void MainWindow::on_meshResType_currentIndexChanged(int index) double meshResolution = 200.0; #ifdef NINJAFOAM - coarse = 25000; - medium = 50000; - fine = 100000; + if (view->getUi()->useCOMM->isChecked()) { + coarse = 25000; + medium = 50000; + fine = 100000; + } #endif //NINJAFOAM int targetNumHorizCells = fine; @@ -499,37 +501,39 @@ void MainWindow::on_meshResType_currentIndexChanged(int index) meshResolution = (XCellSize + YCellSize) / 2; #ifdef NINJAFOAM - XLength = GDALXSize * GDALCellSize; - YLength = GDALYSize * GDALCellSize; - - double dz = GDALMaxValue - GDALMinValue; - double ZLength = max((0.1 * max(XLength, YLength)), (dz + 0.1 * dz)); - double zmin, zmax; - zmin = GDALMaxValue + 0.05 * ZLength; //zmin (above highest point in DEM for MDM) - zmax = GDALMaxValue + ZLength; //zmax - - double volume; - double cellCount; - double cellVolume; - - volume = XLength * YLength * (zmax-zmin); //volume of blockMesh - cellCount = targetNumHorizCells * 0.5; // cell count in volume 1 - cellVolume = volume/cellCount; // volume of 1 cell in blockMesh - double side = std::pow(cellVolume, (1.0/3.0)); // length of side of cell in blockMesh - - //determine number of rounds of refinement - int nCellsToAdd = 0; - int refinedCellCount = 0; - int nCellsInLowestLayer = int(XLength/side) * int(YLength/side); - int nRoundsRefinement = 0; - while(refinedCellCount < (0.5 * targetNumHorizCells)){ - nCellsToAdd = nCellsInLowestLayer * 8; //each cell is divided into 8 cells - refinedCellCount += nCellsToAdd - nCellsInLowestLayer; //subtract the parent cells - nCellsInLowestLayer = nCellsToAdd/2; //only half of the added cells are in the lowest layer - nRoundsRefinement += 1; - } - - meshResolution = side/(nRoundsRefinement*2.0); + if (view->getUi()->useCOMM->isChecked()) { + XLength = GDALXSize * GDALCellSize; + YLength = GDALYSize * GDALCellSize; + + double dz = GDALMaxValue - GDALMinValue; + double ZLength = max((0.1 * max(XLength, YLength)), (dz + 0.1 * dz)); + double zmin, zmax; + zmin = GDALMaxValue + 0.05 * ZLength; //zmin (above highest point in DEM for MDM) + zmax = GDALMaxValue + ZLength; //zmax + + double volume; + double cellCount; + double cellVolume; + + volume = XLength * YLength * (zmax-zmin); //volume of blockMesh + cellCount = targetNumHorizCells * 0.5; // cell count in volume 1 + cellVolume = volume/cellCount; // volume of 1 cell in blockMesh + double side = std::pow(cellVolume, (1.0/3.0)); // length of side of cell in blockMesh + + //determine number of rounds of refinement + int nCellsToAdd = 0; + int refinedCellCount = 0; + int nCellsInLowestLayer = int(XLength/side) * int(YLength/side); + int nRoundsRefinement = 0; + while(refinedCellCount < (0.5 * targetNumHorizCells)){ + nCellsToAdd = nCellsInLowestLayer * 8; //each cell is divided into 8 cells + refinedCellCount += nCellsToAdd - nCellsInLowestLayer; //subtract the parent cells + nCellsInLowestLayer = nCellsToAdd/2; //only half of the added cells are in the lowest layer + nRoundsRefinement += 1; + } + + meshResolution = side/(nRoundsRefinement*2.0); + } #endif //NINJAFOAM ui->meshResValue->setValue(meshResolution); From 39146c69abe6f7d55b4016c9981523492c87135d Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 23 Jun 2025 15:52:29 -0600 Subject: [PATCH 075/435] adjusted setMeshResolutionChoice() in ninjaArmy to properly swap back and forth between the mass and momentum solver mesh setting methods, for the C-API and the qt6 gui, according to the current method done in the cli and the old qt4 gui. Related to issue #582 --- autotest/api/test_capi_domain_average_wind.c | 7 +++-- src/gui/qt6/provider.cpp | 29 +++++++++++++++----- src/ninja/ninja.cpp | 7 +++-- src/ninja/ninjaArmy.cpp | 22 +++++++++++++++ 4 files changed, 53 insertions(+), 12 deletions(-) diff --git a/autotest/api/test_capi_domain_average_wind.c b/autotest/api/test_capi_domain_average_wind.c index 1cdd47d15..639e811f5 100644 --- a/autotest/api/test_capi_domain_average_wind.c +++ b/autotest/api/test_capi_domain_average_wind.c @@ -89,7 +89,8 @@ int main() const double cloud[2] = {10.0, 10.0}; const char * cloudUnits = "percent"; - const double meshResolution = 300; + const double meshResolution = -1.0; //set to value > 0.0 to override meshChoice with meshResolution value + //const double meshResolution = 300.0; const char * meshResolutionUnits = "m"; /* @@ -169,7 +170,7 @@ int main() printf("NinjaSetUniVegetation: err = %d\n", err); } - if( momentumFlag == true ) + if( meshResolution > 0.0 ) { err = NinjaSetMeshResolution(ninjaArmy, i, meshResolution, meshResolutionUnits, papszOptions); if(err != NINJA_SUCCESS) @@ -177,7 +178,7 @@ int main() printf("NinjaSetMeshResolution: err = %d\n", err); } } - else + else // meshResolution not set, use meshChoice { err = NinjaSetMeshResolutionChoice(ninjaArmy, i, meshChoice, papszOptions); if(err != NINJA_SUCCESS) diff --git a/src/gui/qt6/provider.cpp b/src/gui/qt6/provider.cpp index a1f73eda8..a5c77c795 100755 --- a/src/gui/qt6/provider.cpp +++ b/src/gui/qt6/provider.cpp @@ -142,7 +142,7 @@ int Provider::domain_average_exec(DomainAverageWind& input) { printf("NinjaSetUniVegetation: err = %d\n", err); } - if( momentumFlag == true ) + if( meshResolution > 0.0 ) { err = NinjaSetMeshResolution(ninjaArmy, i, meshResolution, meshResolutionUnits, papszOptions); if(err != NINJA_SUCCESS) @@ -150,7 +150,7 @@ int Provider::domain_average_exec(DomainAverageWind& input) { printf("NinjaSetMeshResolution: err = %d\n", err); } } - else + else // meshResolution not set, use meshChoice { err = NinjaSetMeshResolutionChoice(ninjaArmy, i, meshChoice, papszOptions); if(err != NINJA_SUCCESS) @@ -252,6 +252,10 @@ int Provider::point_exec(PointInitialization& input) { unsigned int numNinjas = input.getNumNinjas(); const char * outputPath = input.getOutputPath().c_str(); + //double meshResolution = view->getUi()->meshResValue->value(); // need to get this another way ..., currently outputResolution is set with this same command so will use that for now + double meshResolution = outputResolution; + const char * meshResolutionUnits = "m"; + /* * Create the army */ @@ -346,10 +350,21 @@ int Provider::point_exec(PointInitialization& input) { printf("NinjaSetUniVegetation: err = %d\n", err); } - err = NinjaSetMeshResolutionChoice(ninjaArmy, i, meshChoice, papszOptions); - if(err != NINJA_SUCCESS) + if( meshResolution > 0.0 ) { - printf("NinjaSetMeshResolutionChoice: err = %d\n", err); + err = NinjaSetMeshResolution(ninjaArmy, i, meshResolution, meshResolutionUnits, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetMeshResolution: err = %d\n", err); + } + } + else // meshResolution not set, use meshChoice + { + err = NinjaSetMeshResolutionChoice(ninjaArmy, i, meshChoice, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetMeshResolutionChoice: err = %d\n", err); + } } err = NinjaSetNumVertLayers(ninjaArmy, i, nLayers, papszOptions); @@ -488,7 +503,7 @@ int Provider::wxmodel_exec(WeatherModel& input) { printf("NinjaSetUniVegetation: err = %d\n", err); } - if( momentumFlag == true ) + if( meshResolution > 0.0 ) { err = NinjaSetMeshResolution(ninjaArmy, i, meshResolution, meshResolutionUnits, papszOptions); if(err != NINJA_SUCCESS) @@ -496,7 +511,7 @@ int Provider::wxmodel_exec(WeatherModel& input) { printf("NinjaSetMeshResolution: err = %d\n", err); } } - else + else // meshResolution not set, use meshChoice { err = NinjaSetMeshResolutionChoice(ninjaArmy, i, meshChoice, papszOptions); if(err != NINJA_SUCCESS) diff --git a/src/ninja/ninja.cpp b/src/ninja/ninja.cpp index 3d13adbb6..d319f3616 100644 --- a/src/ninja/ninja.cpp +++ b/src/ninja/ninja.cpp @@ -3721,7 +3721,9 @@ WindNinjaInputs::eNinjafoamMeshChoice ninja::get_eNinjafoamMeshChoice(std::strin return WindNinjaInputs::fine; } else{ - throw std::logic_error("Problem with mesh type string in ninja::get_eMeshType()."); + throw std::invalid_argument( "Invalid input '" + meshChoice + + "' in ninja::get_eMeshType()" + + "\nchoices are: 'coarse', 'medium', or 'fine'" ); } } @@ -4393,7 +4395,8 @@ void ninja::set_meshResChoice( std::string choice ) } else throw std::invalid_argument( "Invalid input '" + choice + - "' in ninja::set_meshResChoice" ); + "' in ninja::set_meshResChoice()" + + "\nchoices are: 'coarse', 'medium', or 'fine'" ); } void ninja::set_meshResChoice( const Mesh::eMeshChoice choice ) { diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 405ee0edc..8b7467c7e 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -1870,8 +1870,30 @@ int ninjaArmy::setUniVegetation( const int nIndex, char ** papszOptions ) int ninjaArmy::setMeshResolutionChoice( const int nIndex, const std::string choice, char ** papszOptions ) { +#ifndef NINJAFOAM IF_VALID_INDEX_TRY( nIndex, ninjas, ninjas[ nIndex ]->set_meshResChoice( choice ) ); +#else + int retval = NINJA_E_INVALID; + IF_VALID_INDEX( nIndex, ninjas ) + { + if( ninjas[ nIndex ]->identify() == "ninja" ) + { + ninjas[ nIndex ]->set_meshResChoice( choice ); + retval = NINJA_SUCCESS; + } else if( ninjas[ nIndex ]->identify() == "ninjafoam" ) + { + ninjas[ nIndex ]->set_MeshCount( ninja::get_eNinjafoamMeshChoice(choice) ); + retval = NINJA_SUCCESS; + } + else + { + retval = NINJA_E_INVALID; + } + } + return retval; +#endif + } int ninjaArmy::setMeshResolutionChoice( const int nIndex, const Mesh::eMeshChoice choice, From 0240168a2f3f25418c154144c2a1c557705c1a6d Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 23 Jun 2025 16:27:01 -0600 Subject: [PATCH 076/435] Added a splash screen class for splash screen animation --- src/gui/qt6/CMakeLists.txt | 2 + src/gui/qt6/main.cpp | 69 +++++++---------------------- src/gui/qt6/splashscreen.cpp | 86 ++++++++++++++++++++++++++++++++++++ src/gui/qt6/splashscreen.h | 36 +++++++++++++++ 4 files changed, 141 insertions(+), 52 deletions(-) create mode 100644 src/gui/qt6/splashscreen.cpp create mode 100644 src/gui/qt6/splashscreen.h diff --git a/src/gui/qt6/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt index c750dfafe..812dc9677 100755 --- a/src/gui/qt6/CMakeLists.txt +++ b/src/gui/qt6/CMakeLists.txt @@ -30,6 +30,8 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) modeldata.h provider.h controller.h controller.cpp + splashscreen.h + splashscreen.cpp ) # Define target properties for Android with Qt 6 as: diff --git a/src/gui/qt6/main.cpp b/src/gui/qt6/main.cpp index 2f197a635..40942c23c 100755 --- a/src/gui/qt6/main.cpp +++ b/src/gui/qt6/main.cpp @@ -6,10 +6,10 @@ #include #include #include -// #include "modeldata.h" -// #include "provider.h" +#include +#include #include "controller.h" - +#include "splashscreen.h" int main(int argc, char *argv[]) { @@ -35,56 +35,21 @@ int main(int argc, char *argv[]) { // Immediately pull timezone data QTimer::singleShot(0, w, &MainWindow::timeZoneDataRequest); - // Load and scale splash image - QPixmap bigPixmap(":/wn-splash.png"); + QPixmap bigSplashPixmap(":wn-splash.png"); QSize splashSize(1200, 320); - QPixmap splashPixmap = bigPixmap.scaled(splashSize, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation); - - // Create splash screen - QSplashScreen* splash = new QSplashScreen(splashPixmap); - splash->setFont(QFont("Sans Serif", 10)); - QRect screenGeometry = QGuiApplication::primaryScreen()->geometry(); - QPoint center = screenGeometry.center() - splash->rect().center(); - splash->move(center); - - // Apply opacity effect - QGraphicsOpacityEffect* effect = new QGraphicsOpacityEffect(splash); - splash->setGraphicsEffect(effect); - effect->setOpacity(0.0); // Initial opacity 0 - - // Show splash screen - splash->show(); - a.processEvents(); // Ensure splash is shown before animating - - // Fade-in animation - QPropertyAnimation* fadeIn = new QPropertyAnimation(effect, "opacity"); - fadeIn->setDuration(1500); - fadeIn->setStartValue(0.0); - fadeIn->setEndValue(1.0); - - // Fade-out animation - QPropertyAnimation* fadeOut = new QPropertyAnimation(effect, "opacity"); - fadeOut->setDuration(1500); - fadeOut->setStartValue(1.0); - fadeOut->setEndValue(0.0); - - // Sequence: After fade-in completes, wait a bit, then start fade-out - QObject::connect(fadeIn, &QPropertyAnimation::finished, [=]() { - QTimer::singleShot(1500, [=]() { - fadeOut->start(QAbstractAnimation::DeleteWhenStopped); - }); - }); - - // After fade-out completes, show main window and clean up - QObject::connect(fadeOut, &QPropertyAnimation::finished, [=]() { - splash->finish(w); - w->show(); - splash->deleteLater(); - }); - - // Start fade-in - fadeIn->start(QAbstractAnimation::DeleteWhenStopped); + QPixmap smallSplashPixmap; + smallSplashPixmap = bigSplashPixmap.scaled(splashSize, + Qt::KeepAspectRatioByExpanding); + QStringList list; + list << "Loading WindNinja " + ver + "..."; + list << "Loading mesh generator..."; + list << "Loading conjugate gradient solver..."; + list << "Loading preconditioner..."; + list << "WindNinja " + ver + " loaded."; + + SplashScreen *splash = new SplashScreen(smallSplashPixmap, list, 1000); + splash->display(); + QObject::connect(splash, SIGNAL(done()), w, SLOT(show())); return a.exec(); - } diff --git a/src/gui/qt6/splashscreen.cpp b/src/gui/qt6/splashscreen.cpp new file mode 100644 index 000000000..f23d3e80f --- /dev/null +++ b/src/gui/qt6/splashscreen.cpp @@ -0,0 +1,86 @@ +#include "splashscreen.h" +#include +#include +#include + +SplashScreen::SplashScreen(const QPixmap &pixmap, QStringList list, int time) + : QSplashScreen(pixmap), messages(list), messageTime(time), i(0), j(0), SplashScreenDone(false) +{ + numMessages = messages.size(); + messageFadeInterval = time; + alignment = Qt::AlignLeft | Qt::AlignBottom; + map = pixmap; + + opacityEffect = new QGraphicsOpacityEffect(this); + setGraphicsEffect(opacityEffect); + opacityEffect->setOpacity(0.0); + + fadeInAnimation = new QPropertyAnimation(opacityEffect, "opacity"); + fadeInAnimation->setDuration(1000); + fadeInAnimation->setStartValue(0.0); + fadeInAnimation->setEndValue(1.0); + connect(fadeInAnimation, &QPropertyAnimation::finished, this, &SplashScreen::onFadeInFinished); + + fadeOutAnimation = new QPropertyAnimation(opacityEffect, "opacity"); + fadeOutAnimation->setDuration(1000); + fadeOutAnimation->setStartValue(1.0); + fadeOutAnimation->setEndValue(0.0); + connect(fadeOutAnimation, &QPropertyAnimation::finished, this, &SplashScreen::onFadeOutFinished); + + messageTimer = new QTimer(this); + connect(messageTimer, &QTimer::timeout, this, &SplashScreen::update); +} + +void SplashScreen::display() +{ + show(); + fadeInAnimation->start(); +} + +void SplashScreen::update() +{ + if (SplashScreenDone || ++i >= numMessages) { + messageTimer->stop(); + fadeOut(); + return; + } + + clearMessage(); + showMessage(messages.value(i), alignment, Qt::gray); + QApplication::processEvents(); +} + +void SplashScreen::fadeOut() +{ + fadeOutAnimation->start(); +} + +void SplashScreen::onFadeInFinished() +{ + showMessage(messages.value(0), alignment, Qt::gray); + messageTimer->start(messageTime); +} + +void SplashScreen::onFadeOutFinished() +{ + if (!SplashScreenDone) { + emit done(); + } + close(); +} + +void SplashScreen::mousePressEvent(QMouseEvent *event) +{ + if (event->buttons() & Qt::LeftButton) { + SplashScreenDone = true; + + messageTimer->stop(); + + fadeInAnimation->stop(); + fadeOutAnimation->stop(); + fadeOutAnimation->disconnect(this); + + emit done(); + close(); + } +} diff --git a/src/gui/qt6/splashscreen.h b/src/gui/qt6/splashscreen.h new file mode 100644 index 000000000..9bf85479f --- /dev/null +++ b/src/gui/qt6/splashscreen.h @@ -0,0 +1,36 @@ +#include +#include +#include +#include +#include + +class SplashScreen : public QSplashScreen { + Q_OBJECT + +public: + SplashScreen(const QPixmap &pixmap, QStringList list, int time); + void display(); + +protected: + void mousePressEvent(QMouseEvent *event) override; + +signals: + void done(); + +private slots: + void update(); + void fadeOut(); + void onFadeOutFinished(); + void onFadeInFinished(); + +private: + QStringList messages; + int messageTime, numMessages, i, j, messageFadeInterval; + Qt::Alignment alignment; + QPixmap map; + QTimer *messageTimer; + QGraphicsOpacityEffect *opacityEffect; + QPropertyAnimation *fadeInAnimation; + QPropertyAnimation *fadeOutAnimation; + bool SplashScreenDone; +}; From f3a5e82ec7400492de2a0b297fef5a31a9154bc0 Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 23 Jun 2025 17:42:51 -0600 Subject: [PATCH 077/435] fixed a few dropped items from 39146c69abe6f7d55b4016c9981523492c87135d --- src/gui/controller.cpp | 2 +- src/gui/mainwindow.cpp | 22 ++++++++++------------ src/gui/provider.cpp | 8 ++++---- src/ninja/ninjaArmy.cpp | 1 - 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/gui/controller.cpp b/src/gui/controller.cpp index 1924eb3c2..437169fc1 100644 --- a/src/gui/controller.cpp +++ b/src/gui/controller.cpp @@ -101,7 +101,7 @@ void Controller::onGetDEMrequest(std::array boundsBox, QString output BaseInput Controller::setBaseInput() { QString demPath = view->getUi()->elevationInputFileLineEdit->text(); double outputResolution = view->getUi()->meshResolutionSpinBox->value(); - int nCPUs = view->getUi()->numProcessorsSpinbox->value(); + int nCPUs = view->getUi()->numberOfProcessorsSpinBox->value(); QString initMethod; if (view->getUi()->domainAverageCheckBox->isChecked()) { initMethod = "domain_average"; diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 95e3e62bd..14cf9538e 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -466,7 +466,7 @@ void MainWindow::on_meshResolutionComboBox_currentIndexChanged(int index) double meshResolution = 200.0; #ifdef NINJAFOAM - if (view->getUi()->useCOMM->isChecked()) { + if (ui->massAndMomentumSolverCheckBox->isChecked()) { coarse = 25000; medium = 50000; fine = 100000; @@ -500,16 +500,13 @@ void MainWindow::on_meshResolutionComboBox_currentIndexChanged(int index) meshResolution = (XCellSize + YCellSize) / 2; -<<<<<<< HEAD:src/gui/mainwindow.cpp - ui->meshResolutionSpinBox->setValue(meshResolution); -======= #ifdef NINJAFOAM - if (view->getUi()->useCOMM->isChecked()) { + if (ui->massAndMomentumSolverCheckBox->isChecked()) { XLength = GDALXSize * GDALCellSize; YLength = GDALYSize * GDALCellSize; double dz = GDALMaxValue - GDALMinValue; - double ZLength = max((0.1 * max(XLength, YLength)), (dz + 0.1 * dz)); + double ZLength = std::max((0.1 * std::max(XLength, YLength)), (dz + 0.1 * dz)); double zmin, zmax; zmin = GDALMaxValue + 0.05 * ZLength; //zmin (above highest point in DEM for MDM) zmax = GDALMaxValue + ZLength; //zmax @@ -539,13 +536,14 @@ void MainWindow::on_meshResolutionComboBox_currentIndexChanged(int index) } #endif //NINJAFOAM - ui->meshResValue->setValue(meshResolution); + ui->meshResolutionSpinBox->setValue(meshResolution); } void MainWindow::on_meshResolutionMetersRadioButton_toggled(bool checked) { if (checked) { - ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 0.3048); +// ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 0.3048); + ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value()); } } @@ -995,10 +993,10 @@ MainWindow::MainWindow(QWidget *parent) // Solver window // Update processor count and set user input default value & upper bound - int cpuCount = QThread::idealThreadCount(); - ui->availableProcessorsTextEdit->setPlainText("Available Processors: " + QString::number(cpuCount)); - ui->numberOfProcessorsSpinBox->setMaximum(cpuCount); - ui->numberOfProcessorsSpinBox->setValue(cpuCount); + int nCPUs = QThread::idealThreadCount(); + ui->availableProcessorsTextEdit->setPlainText("Available Processors: " + QString::number(nCPUs)); + ui->numberOfProcessorsSpinBox->setMaximum(nCPUs); + ui->numberOfProcessorsSpinBox->setValue(nCPUs); // Wind Input -> Point Init window ui->downloadPointInitData->setIcon(QIcon(":/application_get")); diff --git a/src/gui/provider.cpp b/src/gui/provider.cpp index a5c77c795..a18b5889f 100755 --- a/src/gui/provider.cpp +++ b/src/gui/provider.cpp @@ -1,6 +1,6 @@ #include "provider.h" #include "modeldata.h" -#include "../../ninja/windninja.h" +#include "../ninja/windninja.h" #include #include @@ -43,7 +43,7 @@ int Provider::domain_average_exec(DomainAverageWind& input) { unsigned int numNinjas = input.getNumNinjas(); const char* outputPath = input.getOutputPath().c_str(); - //double meshResolution = view->getUi()->meshResValue->value(); // need to get this another way ..., currently outputResolution is set with this same command so will use that for now + //double meshResolution = view->getUi()->meshResolutionSpinBox->value(); // need to get this another way ..., currently outputResolution is set with this same command so will use that for now double meshResolution = outputResolution; const char * meshResolutionUnits = "m"; @@ -252,7 +252,7 @@ int Provider::point_exec(PointInitialization& input) { unsigned int numNinjas = input.getNumNinjas(); const char * outputPath = input.getOutputPath().c_str(); - //double meshResolution = view->getUi()->meshResValue->value(); // need to get this another way ..., currently outputResolution is set with this same command so will use that for now + //double meshResolution = view->getUi()->meshResolutionSpinBox->value(); // need to get this another way ..., currently outputResolution is set with this same command so will use that for now double meshResolution = outputResolution; const char * meshResolutionUnits = "m"; @@ -406,7 +406,7 @@ int Provider::wxmodel_exec(WeatherModel& input) { unsigned int numNinjas = input.getNumNinjas(); const char* outputPath = input.getOutputPath().c_str(); - //double meshResolution = view->getUi()->meshResValue->value(); // need to get this another way ..., currently outputResolution is set with this same command so will use that for now + //double meshResolution = view->getUi()->meshResolutionSpinBox->value(); // need to get this another way ..., currently outputResolution is set with this same command so will use that for now double meshResolution = outputResolution; const char * meshResolutionUnits = "m"; diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 8b7467c7e..a4dc0cf5d 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -1893,7 +1893,6 @@ int ninjaArmy::setMeshResolutionChoice( const int nIndex, const std::string choi } return retval; #endif - } int ninjaArmy::setMeshResolutionChoice( const int nIndex, const Mesh::eMeshChoice choice, From 6cd266adf4c9d453d27a3223fe7fb9ee90d52d9f Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 23 Jun 2025 18:06:12 -0600 Subject: [PATCH 078/435] fixed a few dropped items from ninjaInit and lcpFix pull request merge. With this fix, opening and downloading dems no longer seg faults again --- src/gui/controller.cpp | 3 +-- src/gui/main.cpp | 11 ++++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/gui/controller.cpp b/src/gui/controller.cpp index 437169fc1..d15e3228d 100644 --- a/src/gui/controller.cpp +++ b/src/gui/controller.cpp @@ -73,7 +73,6 @@ void Controller::onTimeZoneDetailsRequest() { void Controller::onGetDEMrequest(std::array boundsBox, QString outputFile) { // Get correct fetch type - // TODO: set correct string for landscape files in else condition int fetchIndex = view->getUi()->elevationInputFileComboBox->currentIndex(); string fetchType; if (fetchIndex == 0) { @@ -88,7 +87,7 @@ void Controller::onGetDEMrequest(std::array boundsBox, QString output fetchType = "lcp"; } - double resolution = view->getUi()->meshResolutionSpinBox->value(); + double resolution = 30.0; provider.fetchDEMBoundingBox(outputFile.toStdString(), fetchType, resolution, boundsBox.data()); view->getUi()->elevationInputFileLineEdit->setText(outputFile); diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 59735ea87..6d930488c 100755 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -10,7 +10,15 @@ int main(int argc, char *argv[]) { + int result; + char ** papszOptions = NULL; + NinjaErr err = 0; + err = NinjaInit(papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaInit: err = %d\n", err); + } QApplication a(argc, argv); MainWindow w; @@ -21,6 +29,7 @@ int main(int argc, char *argv[]) { QTimer::singleShot(0, &w, &MainWindow::timeZoneDataRequest); w.show(); + result = a.exec(); - return a.exec(); + return result; } From 951dd71c682182fdd76f1a52d9d2e280e8ac576e Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 23 Jun 2025 18:14:44 -0600 Subject: [PATCH 079/435] now that the old qt stuff is gone, and qt6 gui is now the default qt gui, make the CMAKE NINJA_QTGUI default value always be ON, avoids accidentally not building and replacing the gui when testing. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 682c67c35..056d9dab5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -151,7 +151,7 @@ ELSE(USE_VCPKG) ENDIF(USE_VCPKG) # Ninja executables -option(NINJA_QTGUI "Build Qt GUI" OFF) +option(NINJA_QTGUI "Build Qt GUI" ON) option(NINJA_CLI "Build Command Line Interface" ON) From 5a6463ed289e59d98132fbbb4800694f13f59fd9 Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 23 Jun 2025 18:56:48 -0600 Subject: [PATCH 080/435] small cleanup to qt6 gui mesh resolution stuff, adjusts when changing from mass to momentum solver correctly now, also fixed the "custom" case to stop calculating weird values --- src/gui/mainwindow.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 14cf9538e..ba1d41085 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -293,6 +293,10 @@ void MainWindow::on_massSolverCheckBox_clicked() // Update app states state.useCOMtoggled = ui->massSolverCheckBox->isChecked(); + + // Run mesh calculator + MainWindow::on_meshResolutionComboBox_currentIndexChanged(ui->meshResolutionComboBox->currentIndex()); + refreshUI(ui); } @@ -310,6 +314,10 @@ void MainWindow::on_massAndMomentumSolverCheckBox_clicked() // Update app states state.useCOMMtoggled = ui->massAndMomentumSolverCheckBox->isChecked(); + + // Run mesh calculator + MainWindow::on_meshResolutionComboBox_currentIndexChanged(ui->meshResolutionComboBox->currentIndex()); + refreshUI(ui); } @@ -465,6 +473,13 @@ void MainWindow::on_meshResolutionComboBox_currentIndexChanged(int index) int fine = 20000; double meshResolution = 200.0; + // initial run values, a dem file has not yet been selected + if( GDALCellSize == 0.0 || GDALXSize == 0 || GDALYSize == 0 ) + { + ui->meshResolutionSpinBox->setValue(meshResolution); + return; + } + #ifdef NINJAFOAM if (ui->massAndMomentumSolverCheckBox->isChecked()) { coarse = 25000; @@ -485,7 +500,11 @@ void MainWindow::on_meshResolutionComboBox_currentIndexChanged(int index) targetNumHorizCells = fine; break; case 3: - targetNumHorizCells = meshResolution; + ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value()); + return; + default: + ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value()); + return; } // default values are native mesh values From 152cd850a4de426bbb016fdb00bab8940a1cb583 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 25 Jun 2025 14:02:18 -0600 Subject: [PATCH 081/435] adjusted page for surface input based on Jason's feedback --- src/gui/controller.cpp | 2 +- src/gui/mainwindow.cpp | 90 ++------ src/gui/mainwindow.h | 2 + src/gui/mainwindow.ui | 455 +++++++++++++++++++++++++---------------- 4 files changed, 303 insertions(+), 246 deletions(-) diff --git a/src/gui/controller.cpp b/src/gui/controller.cpp index 60ee9fa61..00bfa3ee5 100644 --- a/src/gui/controller.cpp +++ b/src/gui/controller.cpp @@ -74,7 +74,7 @@ void Controller::onGetDEMrequest(std::array boundsBox, QString output // Get correct fetch type // TODO: set correct string for landscape files in else condition - int fetchIndex = view->getUi()->elevationInputFileComboBox->currentIndex(); + int fetchIndex = view->getUi()->elevationInputTypeComboBox->currentIndex(); string fetchType; if (fetchIndex == 0) { fetchType = "srtm"; diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 7be3504c4..6f17dc058 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -74,7 +74,12 @@ MainWindow::~MainWindow() { delete ui; } void MainWindow::onTreeItemClicked(QTreeWidgetItem *item, int column) { int pageIndex = item->data(column, Qt::UserRole).toInt(); if (pageIndex >= 0) { - ui->stackedInputsPage->setCurrentIndex(pageIndex); + if(pageIndex >= 6) { + ui->inputsStackedWidget->setCurrentIndex(pageIndex+1); + } + else { + ui->inputsStackedWidget->setCurrentIndex(pageIndex); + } } } @@ -382,70 +387,8 @@ void MainWindow::on_elevationInputFileOpenButton_clicked() // User selects an elevation input file (by map import) void MainWindow::on_elevationInputFileDownloadButton_clicked() { - // We have to use batching since the Javascript part is async - struct JSFieldBatch { - QMap results; - int expected = 7; - std::function)> onReady; - }; - - auto batch = new JSFieldBatch(); - batch->onReady = [this, batch](QMap fields) { - northLat = fields["north_lat"].toDouble(); - southLat = fields["south_lat"].toDouble(); - eastLon = fields["east_lon"].toDouble(); - westLon = fields["west_lon"].toDouble(); - centerLat = fields["center_lat"].toDouble(); - centerLon = fields["center_lon"].toDouble(); - radius = fields["radius"].toDouble(); - - delete batch; // clean up - }; - - auto run = [this, batch](QString fieldId) { - webView->page()->runJavaScript(QString("document.getElementById('%1').value;").arg(fieldId), - [fieldId, batch](const QVariant &result) { - batch->results[fieldId] = result; - if (batch->results.size() == batch->expected) { - batch->onReady(batch->results); - } - }); - }; - - // Kick off all the field reads - run("north_lat"); - run("south_lat"); - run("east_lon"); - run("west_lon"); - run("center_lat"); - run("center_lon"); - run("radius"); - - // Verify input validity and write file - if (northLat != 0 && southLat != 0 && eastLon != 0 && westLon != 0) { - QString defaultName = "demDownload.tif"; - QString filter = "TIF Files (*.tif)"; - - // Get downloads path and join to filename - QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - QDir dir(downloadsPath); - QString fullPath = dir.filePath(defaultName); - - // Open save window - QString fileName = QFileDialog::getSaveFileName(this, - "Save DEM File", - fullPath, - filter); - - if (fileName != "") { - std::array coordsCopy = { northLat, eastLon, southLat, westLon }; - QString fileNameCopy = fileName; - - QtConcurrent::run([coordsCopy, fileNameCopy, this]() { - emit getDEMrequest(coordsCopy, fileNameCopy); - }); - } - } + int currentIndex = ui->inputsStackedWidget->currentIndex(); + ui->inputsStackedWidget->setCurrentIndex(currentIndex+1); } // User changes the mesh resolution spec for surface input @@ -905,7 +848,7 @@ MainWindow::MainWindow(QWidget *parent) */ // Top-level items - ui->stackedInputsPage->setCurrentIndex(0); + ui->inputsStackedWidget->setCurrentIndex(0); ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); // Solver Methodology (Page 0) ui->treeWidget->topLevelItem(1)->setData(0, Qt::UserRole, 4); // Inputs (Page 5) ui->treeWidget->topLevelItem(2)->setData(0, Qt::UserRole, 12); // Inputs (Page 13) @@ -967,13 +910,14 @@ MainWindow::MainWindow(QWidget *parent) ui->domainAverageTable->hideColumn(5); ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); - connect(ui->comboBox, QOverload::of(&QComboBox::currentIndexChanged), - this, [=](int index) { - if (index == 2) - ui->stackedWidget->setCurrentIndex(1); - else - ui->stackedWidget->setCurrentIndex(0); - }); + connect(ui->elevationInputTypeComboBox, QOverload::of(&QComboBox::currentIndexChanged), + ui->elevationInputTypeStackedWidget, &QStackedWidget::setCurrentIndex); + +} +void MainWindow::on_surfaceInputDownloadCancelButton_clicked() +{ + int currentIndex = ui->inputsStackedWidget->currentIndex(); + ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index a7b828c1c..4583a14c8 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -89,6 +89,8 @@ private slots: void on_meshResolutionFeetRadioButton_toggled(bool checked); + void on_surfaceInputDownloadCancelButton_clicked(); + signals: void solveRequest(); void timeZoneDataRequest(); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 642a20f6c..bc2a32af0 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -492,7 +492,7 @@ - + 0 @@ -524,7 +524,7 @@ QFrame::Shadow::Sunken - 5 + 6 @@ -793,7 +793,7 @@ li.checked::marker { content: "\2612"; } 0 - + QLayout::SizeConstraint::SetMinAndMaxSize @@ -809,155 +809,6 @@ li.checked::marker { content: "\2612"; } 5 - - - - - 0 - 0 - - - - Elevation Input Type - - - - - - - Draw Bounding Box - - - - - Enter Bounding Box - - - - - Enter Point Radius - - - - - - - - - 0 - 0 - - - - 0 - - - - - - - Bounding Box - - - - - - North - - - - - - - - - - South - - - - - - - - - - East - - - - - - - - - - West - - - - - - - - - - - - - - - - - - 0 - 0 - - - - Point and Radius - - - - - - Center Lat - - - - - - - - - - Center Lon - - - - - - - - - - Radius (miles) - - - - - - - - - - - - - - - - @@ -1024,25 +875,6 @@ li.checked::marker { content: "\2612"; } - - - - - WORLD SRTM (30m) - - - - - WORLD GMTED (250m) - - - - - Landscape File - - - - @@ -1277,7 +1109,7 @@ li.checked::marker { content: "\2612"; } Time Zone - + @@ -1364,6 +1196,19 @@ li.checked::marker { content: "\2612"; } + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + @@ -1395,6 +1240,259 @@ li.checked::marker { content: "\2612"; } + + + + + + + 0 + 0 + + + + Elevation Input Type + + + + + + + + + 0 + 0 + + + + + Bounding Box + + + + + Point Radius + + + + + + + + + 0 + 0 + + + + + WORLD SRTM (30m) + + + + + WORLD GMTED (250m) + + + + + Landscape File + + + + + + + + Sample + + + true + + + false + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 + 0 + + + + 0 + + + + + + + North + + + + + + + + + + South + + + + + + + + + + East + + + + + + + + + + West + + + + + + + + + + + + + + + 0 + 0 + + + + Center Lat + + + + + + + + + + Center Lon + + + + + + + + + + + 0 + 0 + + + + Radius (miles) + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + Download File + + + + + + + + 0 + 0 + + + + Cancel + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + @@ -2932,6 +3030,19 @@ li.checked::marker { content: "\2612"; } + + + + 470 + 410 + 26 + 24 + + + + ... + + From 5c371859a23dfeb7226a6b9e4355be10525e848b Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 25 Jun 2025 18:28:17 -0600 Subject: [PATCH 082/435] first pass adding menu actions to the qt6 gui involved renaming various menu actions and adding back in a few that were missing (even if some of them will end up commented out later because unused). Currently I just implemented functions for each of the menu actions that print that the given menu item has been clicked, seems many of the old qt4 called functions used old qt4 stuff that needs updated. --- src/gui/mainwindow.cpp | 141 +++++++++++++++++++++++++++++++++++++++++ src/gui/mainwindow.h | 32 ++++++++++ src/gui/mainwindow.ui | 76 ++++++++++++++-------- 3 files changed, 223 insertions(+), 26 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 2f960caa2..8778ee809 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -67,6 +67,145 @@ class DirectoryFilterModel : public QSortFilterProxyModel { MainWindow::~MainWindow() { delete ui; } +//// functions for Menu actions + +void MainWindow::newProject() +{ + printf("newProject clicked\n"); +} +void MainWindow::openProject() +{ + printf("openProject clicked\n"); +} +void MainWindow::exportSolution() +{ + printf("exportSolution clicked\n"); +} +void MainWindow::closeProject() +{ + printf("closeProject clicked\n"); +} + +void MainWindow::enableConsoleOutput() +{ + printf("enableConsoleOutput clicked\n"); +} +void MainWindow::writeConsoleOutput() +{ + printf("writeConsoleOutput clicked\n"); +} + +void MainWindow::resampleData() +{ + printf("resampleData clicked\n"); +} +void MainWindow::writeBlankStationFile() +{ + printf("writeBlankStationFile clicked\n"); +} +void MainWindow::setConfigurationOption() +{ + printf("setConfigurationOption clicked\n"); +} + +void MainWindow::displayArcGISProGuide() +{ + printf("displayArcGISProGuide clicked\n"); +} + +void MainWindow::displayTutorial1() +{ + printf("displayTutorial1 clicked\n"); +} +void MainWindow::displayTutorial2() +{ + printf("displayTutorial2 clicked\n"); +} +void MainWindow::displayTutorial3() +{ + printf("displayTutorial3 clicked\n"); +} +void MainWindow::displayTutorial4() +{ + printf("displayTutorial4 clicked\n"); +} + +void MainWindow::displayDemDownloadInstructions() +{ + printf("displayDemDownloadInstructions clicked\n"); +} +void MainWindow::displayFetchDemInstructions() +{ + printf("displayFetchDemInstructions clicked\n"); +} +void MainWindow::displayCommandLineInterfaceInstructions() +{ + printf("displayCommandLineInterfaceInstructions clicked\n"); +} + +void MainWindow::aboutWindNinja() +{ + printf("aboutWindNinja clicked\n"); +} +void MainWindow::citeWindNinja() +{ + printf("citeWindNinja clicked\n"); +} +void MainWindow::supportEmail() +{ + printf("supportEmail clicked\n"); +} +void MainWindow::submitBugReport() +{ + printf("submitBugReport clicked\n"); +} + +//// end functions for Menu actions + +void MainWindow::connectMenuActions() +{ + // QMenu fileMenu "File" actions + connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &MainWindow::on_elevationInputFileOpenButton_clicked); + connect(ui->newProjectAction, &QAction::triggered, this, &MainWindow::newProject); + connect(ui->openProjectAction, &QAction::triggered, this, &MainWindow::openProject); + connect(ui->exportSolutionAction, &QAction::triggered, this, &MainWindow::exportSolution); + connect(ui->closeProjectAction, &QAction::triggered, this, &MainWindow::closeProject); + //connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QCoreApplication::quit); // exit the entire app + connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); // just close the mainWindow (behavior of the old qt4 code) + + // QMenu optionsMenu "Options" actions + connect(ui->enableConsoleOutputAction, &QAction::triggered, this, &MainWindow::enableConsoleOutput); + connect(ui->writeConsoleOutputAction, &QAction::triggered, this, &MainWindow::writeConsoleOutput); + + // QMenu toolsMenu "Tools" actions + connect(ui->resampleDataAction, &QAction::triggered, this, &MainWindow::resampleData); + connect(ui->writeBlankStationFileAction, &QAction::triggered, this, &MainWindow::writeBlankStationFile); + connect(ui->setConfigurationOptionAction, &QAction::triggered, this, &MainWindow::setConfigurationOption); + + // QMenu helpMenu "Help" actions + + // sub QMenu displayingShapeFilesMenu "Displaying Shapefiles" actions + connect(ui->displayArcGISProGuideAction, &QAction::triggered, this, &MainWindow::displayArcGISProGuide); + + // sub QMenu tutorialsMenu "Tutorials" actions + connect(ui->displayTutorial1Action, &QAction::triggered, this, &MainWindow::displayTutorial1); + connect(ui->displayTutorial2Action, &QAction::triggered, this, &MainWindow::displayTutorial2); + connect(ui->displayTutorial3Action, &QAction::triggered, this, &MainWindow::displayTutorial3); + connect(ui->displayTutorial4Action, &QAction::triggered, this, &MainWindow::displayTutorial4); + + // sub QMenu instructionsMenu "Instructions" actions + connect(ui->displayDemDownloadInstructionsAction, &QAction::triggered, this, &MainWindow::displayDemDownloadInstructions); + connect(ui->displayFetchDemInstructionsAction, &QAction::triggered, this, &MainWindow::displayFetchDemInstructions); + connect(ui->displayCommandLineInterfaceInstructionsAction, &QAction::triggered, this, &MainWindow::displayCommandLineInterfaceInstructions); + + // remaining non-sub QMenu actions + connect(ui->aboutWindNinjaAction, &QAction::triggered, this, &MainWindow::aboutWindNinja); + connect(ui->citeWindNinjaAction, &QAction::triggered, this, &MainWindow::citeWindNinja); + connect(ui->supportEmailAction, &QAction::triggered, this, &MainWindow::supportEmail); + connect(ui->submitBugReportAction, &QAction::triggered, this, &MainWindow::submitBugReport); + connect(ui->aboutQtAction, &QAction::triggered, this, &QApplication::aboutQt); +} + /* * Click tree item helper function */ @@ -997,6 +1136,8 @@ MainWindow::MainWindow(QWidget *parent) connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::onTreeItemClicked); + connectMenuActions(); + /* * Downloaded Forecast explorer */ diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 1c2898b86..e18a1f0f1 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -100,6 +100,38 @@ private slots: void getDEMrequest(std::array boundsBox, QString outputFile); private: + // functions for Menu actions + // functions for QMenu fileMenu "File" actions + void newProject(); + void openProject(); + void exportSolution(); + void closeProject(); + // functions for QMenu optionsMenu "Options" actions + void enableConsoleOutput(); + void writeConsoleOutput(); + // functions for QMenu toolsMenu "Tools" actions + void resampleData(); + void writeBlankStationFile(); + void setConfigurationOption(); + // functions for QMenu helpMenu "Help" actions + // functions for sub QMenu displayingShapeFilesMenu "Displaying Shapefiles" actions + void displayArcGISProGuide(); + // functions for sub QMenu tutorialsMenu "Tutorials" actions + void displayTutorial1(); + void displayTutorial2(); + void displayTutorial3(); + void displayTutorial4(); + // functions for sub QMenu instructionsMenu "Instructions" actions + void displayDemDownloadInstructions(); + void displayFetchDemInstructions(); + void displayCommandLineInterfaceInstructions(); + // functions for remaining non-sub QMenu actions + void aboutWindNinja(); + void citeWindNinja(); + void supportEmail(); + void submitBugReport(); + + void connectMenuActions(); void onTreeItemClicked(QTreeWidgetItem *item, int column); QSet> invalidDAWCells; diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 01c9e7bd5..adbd64988 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -2822,6 +2822,7 @@ QMenu::item:selected { File + @@ -2832,12 +2833,14 @@ QMenu::item:selected { Options - + +
Tools + @@ -2849,41 +2852,52 @@ QMenu::item:selected { Displaying Shapefiles - +
Tutorials - - - - + + + + Instructions - - - + + + - - + + +
- + - Console Output + Enable Console Output + + + + + Write console output to file... + + + + + Resample Existing Data @@ -2901,44 +2915,44 @@ QMenu::item:selected { Displaying Shapefiles - + - How to Display Shapefiles in ArcMap + How to Display Shapefiles in ArcGIS Pro - + Tutorial 1: The Basics - + Tutorial 2: Diurnal Winds and Non-Neutral Stability - + Tutorial 3: Point Initialization - + Tutorial 4: Weather Model Initialization - + - DEM Download + DEM Download Instructions - + fetch_dem Instructions - + - Command Line Interface + Command Line Interface Instructions @@ -2946,12 +2960,12 @@ QMenu::item:selected { About WindNinja - + Citation - + Email Us @@ -2961,6 +2975,16 @@ QMenu::item:selected { Submit Bug Report + + + About Qt + + + + + Open Elevation Input File + + New Project From 8a9c7e896daaa569d1691383ef2d40cad8d3743f Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 27 Jun 2025 15:16:20 -0600 Subject: [PATCH 083/435] Added a template CONTRIBUTING.md file, WIP --- CONTRIBUTING.md | 169 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..fbe84cedd --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,169 @@ +# Contributing to WindNinja + +Thank you for considering to contribute to WindNinja. As a crucial tool used in fire management, we appreciate any support to help the project. + +Please see the guides below for common contributions: +- Ask a question +- Report an issue +- Request a feature +- Write and run tests - coming soon + + +### Explain contributions you are NOT looking for (if any). + +Again, defining this up front means less work for you. If someone ignores your guide and submits something you don’t want, you can simply close it and point to your policy. + +> Please, don't use the issue tracker for [support questions]. Check whether the #pocoo IRC channel on Freenode can help with your issue. If your problem is not strictly Werkzeug or Flask specific, #python is generally more active. Stack Overflow is also worth considering. + +[source: [Flask](https://github.com/pallets/flask/blob/master/CONTRIBUTING.rst)] **Need more inspiration?** [1] [cucumber-ruby](https://github.com/cucumber/cucumber-ruby/blob/master/CONTRIBUTING.md#about-to-create-a-new-github-issue) [2] [Read the Docs](http://read-the-docs.readthedocs.org/en/latest/open-source-philosophy.html#unsupported) + +# Ground Rules +### Set expectations for behavior (yours, and theirs). +This includes not just how to communicate with others (being respectful, considerate, etc) but also technical responsibilities (importance of testing, project dependencies, etc). Mention and link to your code of conduct, if you have one. + +> Responsibilities +> * Ensure cross-platform compatibility for every change that's accepted. Windows, Mac, Debian & Ubuntu Linux. +> * Ensure that code that goes into core meets all requirements in this checklist: https://gist.github.com/audreyr/4feef90445b9680475f2 +> * Create issues for any major changes and enhancements that you wish to make. Discuss things transparently and get community feedback. +> * Don't add any classes to the codebase unless absolutely needed. Err on the side of using functions. +> * Keep feature versions as small as possible, preferably one new feature per version. +> * Be welcoming to newcomers and encourage diverse new contributors from all backgrounds. See the [Python Community Code of Conduct](https://www.python.org/psf/codeofconduct/). + +[source: [cookiecutter](https://github.com/audreyr/cookiecutter/blob/master/CONTRIBUTING.rst)] **Need more inspiration?** [1] [Celery](https://github.com/celery/celery/blob/master/CONTRIBUTING.rst#community-code-of-conduct) [2] [geocoder](https://github.com/alexreisner/geocoder#contributing) + +# Your First Contribution +Help people who are new to your project understand where they can be most helpful. This is also a good time to let people know if you follow a label convention for flagging beginner issues. + +> Unsure where to begin contributing to Atom? You can start by looking through these beginner and help-wanted issues: +> Beginner issues - issues which should only require a few lines of code, and a test or two. +> Help wanted issues - issues which should be a bit more involved than beginner issues. +> Both issue lists are sorted by total number of comments. While not perfect, number of comments is a reasonable proxy for impact a given change will have. + +[source: [Atom](https://github.com/atom/atom/blob/master/CONTRIBUTING.md#your-first-code-contribution)] **Need more inspiration?** [1] [Read the Docs](http://docs.readthedocs.org/en/latest/contribute.html#contributing-to-development) [2] [Django](https://docs.djangoproject.com/en/dev/internals/contributing/new-contributors/#first-steps) (scroll down to "Guidelines" as well) + +### Bonus points: Add a link to a resource for people who have never contributed to open source before. +Here are a couple of friendly tutorials you can include: http://makeapullrequest.com/ and http://www.firsttimersonly.com/ + +> Working on your first Pull Request? You can learn how from this *free* series, [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github). + +[source: [React](https://github.com/facebook/react/blob/master/CONTRIBUTING.md#pull-requests)] + +As a side note, it helps to use newcomer-friendly language throughout the rest of your document. Here are a couple of examples from [Active Admin](https://github.com/activeadmin/activeadmin/blob/master/CONTRIBUTING.md): + +>At this point, you're ready to make your changes! Feel free to ask for help; everyone is a beginner at first :smile_cat: +> +>If a maintainer asks you to "rebase" your PR, they're saying that a lot of code has changed, and that you need to update your branch so it's easier to merge. + +# Getting started +### Give them a quick walkthrough of how to submit a contribution. +How you write this is up to you, but some things you may want to include: + +* Let them know if they need to sign a CLA, agree to a DCO, or get any other legal stuff out of the way +* If tests are required for contributions, let them know, and explain how to run the tests +* If you use anything other than GitHub to manage issues (ex. JIRA or Trac), let them know which tools they’ll need to contribute + +>For something that is bigger than a one or two line fix: + +>1. Create your own fork of the code +>2. Do the changes in your fork +>3. If you like the change and think the project could use it: + * Be sure you have followed the code style for the project. + * Sign the Contributor License Agreement, CLA, with the jQuery Foundation. + * Note the jQuery Foundation Code of Conduct. + * Send a pull request indicating that you have a CLA on file. + +[source: [Requirejs](http://requirejs.org/docs/contributing.html)] **Need more inspiration?** [1] [Active Admin](https://github.com/activeadmin/activeadmin/blob/master/CONTRIBUTING.md#1-where-do-i-go-from-here) [2] [Node.js](https://github.com/nodejs/node/blob/master/CONTRIBUTING.md#code-contributions) [3] [Ember.js](https://github.com/emberjs/ember.js/blob/master/CONTRIBUTING.md#pull-requests) + +### If you have a different process for small or "obvious" fixes, let them know. + +> Small contributions such as fixing spelling errors, where the content is small enough to not be considered intellectual property, can be submitted by a contributor as a patch, without a CLA. +> +>As a rule of thumb, changes are obvious fixes if they do not introduce any new functionality or creative thinking. As long as the change does not affect functionality, some likely examples include the following: +>* Spelling / grammar fixes +>* Typo correction, white space and formatting changes +>* Comment clean up +>* Bug fixes that change default return values or error codes stored in constants +>* Adding logging messages or debugging output +>* Changes to ‘metadata’ files like Gemfile, .gitignore, build scripts, etc. +>* Moving source files from one directory or package to another + +[source: [Chef](https://github.com/chef/chef/blob/master/CONTRIBUTING.md#chef-obvious-fix-policy)] **Need more inspiration?** [1] [Puppet](https://github.com/puppetlabs/puppet/blob/master/CONTRIBUTING.md#making-trivial-changes) + +# How to report a bug +### Explain security disclosures first! +At bare minimum, include this sentence: +> If you find a security vulnerability, do NOT open an issue. Email XXXX instead. + +If you don’t want to use your personal contact information, set up a “security@” email address. Larger projects might have more formal processes for disclosing security, including encrypted communication. (Disclosure: I am not a security expert.) + +> Any security issues should be submitted directly to security@travis-ci.org +> In order to determine whether you are dealing with a security issue, ask yourself these two questions: +> * Can I access something that's not mine, or something I shouldn't have access to? +> * Can I disable something for other people? +> +> If the answer to either of those two questions are "yes", then you're probably dealing with a security issue. Note that even if you answer "no" to both questions, you may still be dealing with a security issue, so if you're unsure, just email us at security@travis-ci.org. + +[source: [Travis CI](https://github.com/travis-ci/travis-ci/blob/master/CONTRIBUTING.md)] **Need more inspiration?** [1] [Celery](https://github.com/celery/celery/blob/master/CONTRIBUTING.rst#security) [2] [Express.js](https://github.com/expressjs/express/blob/master/Security.md) + +### Tell your contributors how to file a bug report. +You can even include a template so people can just copy-paste (again, less work for you). + +> When filing an issue, make sure to answer these five questions: +> +> 1. What version of Go are you using (go version)? +> 2. What operating system and processor architecture are you using? +> 3. What did you do? +> 4. What did you expect to see? +> 5. What did you see instead? +> General questions should go to the golang-nuts mailing list instead of the issue tracker. The gophers there will answer or ask you to file an issue if you've tripped over a bug. + +[source: [Go](https://github.com/golang/go/blob/master/CONTRIBUTING.md#filing-issues)] **Need more inspiration?** [1] [Celery](https://github.com/celery/celery/blob/master/CONTRIBUTING.rst#other-bugs ) [2] [Atom](https://github.com/atom/atom/blob/master/CONTRIBUTING.md#reporting-bugs) (includes template) + +# How to suggest a feature or enhancement +### If you have a particular roadmap, goals, or philosophy for development, share it here. +This information will give contributors context before they make suggestions that may not align with the project’s needs. + +> The Express philosophy is to provide small, robust tooling for HTTP servers, making it a great solution for single page applications, web sites, hybrids, or public HTTP APIs. +> +> Express does not force you to use any specific ORM or template engine. With support for over 14 template engines via Consolidate.js, you can quickly craft your perfect framework. + +[source: [Express](https://github.com/expressjs/express#philosophy)] **Need more inspiration?** [Active Admin](https://github.com/activeadmin/activeadmin#goals) + +### Explain your desired process for suggesting a feature. +If there is back-and-forth or signoff required, say so. Ask them to scope the feature, thinking through why it’s needed and how it might work. + +> If you find yourself wishing for a feature that doesn't exist in Elasticsearch, you are probably not alone. There are bound to be others out there with similar needs. Many of the features that Elasticsearch has today have been added because our users saw the need. Open an issue on our issues list on GitHub which describes the feature you would like to see, why you need it, and how it should work. + +[source: [Elasticsearch](https://github.com/elastic/elasticsearch/blob/master/CONTRIBUTING.md#feature-requests)] **Need more inspiration?** [1] [Hoodie](https://github.com/hoodiehq/hoodie/blob/master/CONTRIBUTING.md#feature-requests) [2] [Ember.js](https://github.com/emberjs/ember.js/blob/master/CONTRIBUTING.md#requesting-a-feature) + +# Code review process +### Explain how a contribution gets accepted after it’s been submitted. +Who reviews it? Who needs to sign off before it’s accepted? When should a contributor expect to hear from you? How can contributors get commit access, if at all? + +> The core team looks at Pull Requests on a regular basis in a weekly triage meeting that we hold in a public Google Hangout. The hangout is announced in the weekly status updates that are sent to the puppet-dev list. Notes are posted to the Puppet Community community-triage repo and include a link to a YouTube recording of the hangout. +> After feedback has been given we expect responses within two weeks. After two weeks we may close the pull request if it isn't showing any activity. + +[source: [Puppet](https://github.com/puppetlabs/puppet/blob/master/CONTRIBUTING.md#submitting-changes)] **Need more inspiration?** [1] [Meteor](https://meteor.hackpad.com/Responding-to-GitHub-Issues-SKE2u3tkSiH ) [2] [Express.js](https://github.com/expressjs/express/blob/master/Contributing.md#becoming-a-committer) + +# Community +If there are other channels you use besides GitHub to discuss contributions, mention them here. You can also list the author, maintainers, and/or contributors here, or set expectations for response time. + +> You can chat with the core team on https://gitter.im/cucumber/cucumber. We try to have office hours on Fridays. + +[source: [cucumber-ruby](https://github.com/cucumber/cucumber-ruby/blob/master/CONTRIBUTING.md#talking-with-other-devs)] **Need more inspiration?** + [1] [Chef](https://github.com/chef/chef/blob/master/CONTRIBUTING.md#-developer-office-hours) [2] [Cookiecutter](https://github.com/audreyr/cookiecutter#community) + +# BONUS: Code, commit message and labeling conventions +These sections are not necessary, but can help streamline the contributions you receive. + +### Explain your preferred style for code, if you have any. + +**Need inspiration?** [1] [Requirejs](http://requirejs.org/docs/contributing.html#codestyle) [2] [Elasticsearch](https://github.com/elastic/elasticsearch/blob/master/CONTRIBUTING.md#contributing-to-the-elasticsearch-codebase) + +### Explain if you use any commit message conventions. + +**Need inspiration?** [1] [Angular](https://github.com/angular/material/blob/master/.github/CONTRIBUTING.md#submit) [2] [Node.js](https://github.com/nodejs/node/blob/master/CONTRIBUTING.md#step-3-commit) + +### Explain if you use any labeling conventions for issues. + +**Need inspiration?** [1] [StandardIssueLabels](https://github.com/wagenet/StandardIssueLabels#standardissuelabels) [2] [Atom](https://github.com/atom/atom/blob/master/CONTRIBUTING.md#issue-and-pull-request-labels) \ No newline at end of file From 2062e477e0ec424f805082d6b56065f660a6abde Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 30 Jun 2025 13:18:41 -0600 Subject: [PATCH 084/435] Changed names of private slots and added connect statements for their signals --- src/gui/mainwindow.cpp | 92 +++++++++++++++++++++++++++++------------- src/gui/mainwindow.h | 48 +++++++++++----------- 2 files changed, 88 insertions(+), 52 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 6bfcbd8be..8336fa379 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -165,7 +165,7 @@ void MainWindow::submitBugReport() void MainWindow::connectMenuActions() { // QMenu fileMenu "File" actions - connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &MainWindow::on_elevationInputFileOpenButton_clicked); + connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &MainWindow::elevationInputFileOpenButtonClicked); connect(ui->newProjectAction, &QAction::triggered, this, &MainWindow::newProject); connect(ui->openProjectAction, &QAction::triggered, this, &MainWindow::openProject); connect(ui->exportSolutionAction, &QAction::triggered, this, &MainWindow::exportSolution); @@ -425,7 +425,7 @@ static void refreshUI(const Ui::MainWindow* ui) */ // Use selects Conservation of Mass -void MainWindow::on_massSolverCheckBox_clicked() +void MainWindow::massSolverCheckBoxClicked() { AppState& state = AppState::instance(); @@ -439,14 +439,14 @@ void MainWindow::on_massSolverCheckBox_clicked() state.useCOMtoggled = ui->massSolverCheckBox->isChecked(); // Run mesh calculator - MainWindow::on_meshResolutionComboBox_currentIndexChanged(ui->meshResolutionComboBox->currentIndex()); + MainWindow::meshResolutionComboBoxCurrentIndexChanged(ui->meshResolutionComboBox->currentIndex()); refreshUI(ui); } // User selects Conservation of Mass and Momentum -void MainWindow::on_massAndMomentumSolverCheckBox_clicked() +void MainWindow::massAndMomentumSolverCheckBoxClicked() { AppState& state = AppState::instance(); @@ -460,14 +460,14 @@ void MainWindow::on_massAndMomentumSolverCheckBox_clicked() state.useCOMMtoggled = ui->massAndMomentumSolverCheckBox->isChecked(); // Run mesh calculator - MainWindow::on_meshResolutionComboBox_currentIndexChanged(ui->meshResolutionComboBox->currentIndex()); + MainWindow::meshResolutionComboBoxCurrentIndexChanged(ui->meshResolutionComboBox->currentIndex()); refreshUI(ui); } // User selects an elevation input file (by file) -void MainWindow::on_elevationInputFileLineEdit_textChanged(const QString &arg1) +void MainWindow::elevationInputFileLineEditTextChanged(const QString &arg1) { // Get GDAL data information on DEM input QString fileName = ui->elevationInputFileLineEdit->text(); @@ -512,13 +512,13 @@ void MainWindow::on_elevationInputFileLineEdit_textChanged(const QString &arg1) GDALClose((GDALDatasetH)poInputDS); // Run mesh calculator - MainWindow::on_meshResolutionComboBox_currentIndexChanged(ui->meshResolutionComboBox->currentIndex()); + MainWindow::meshResolutionComboBoxCurrentIndexChanged(ui->meshResolutionComboBox->currentIndex()); refreshUI(ui); } -void MainWindow::on_elevationInputFileOpenButton_clicked() +void MainWindow::elevationInputFileOpenButtonClicked() { QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); QString filePath = QFileDialog::getOpenFileName(this, @@ -532,14 +532,14 @@ void MainWindow::on_elevationInputFileOpenButton_clicked() // User selects an elevation input file (by map import) -void MainWindow::on_elevationInputFileDownloadButton_clicked() +void MainWindow::elevationInputFileDownloadButtonClicked() { int currentIndex = ui->inputsStackedWidget->currentIndex(); ui->inputsStackedWidget->setCurrentIndex(currentIndex+1); } // User changes the mesh resolution spec for surface input -void MainWindow::on_meshResolutionComboBox_currentIndexChanged(int index) +void MainWindow::meshResolutionComboBoxCurrentIndexChanged(int index) { // Set value box enable for custom/other if (index == 3) { @@ -640,7 +640,7 @@ void MainWindow::on_meshResolutionComboBox_currentIndexChanged(int index) ui->meshResolutionSpinBox->setValue(meshResolution); } -void MainWindow::on_meshResolutionMetersRadioButton_toggled(bool checked) +void MainWindow::meshResolutionMetersRadioButtonToggled(bool checked) { if (checked) { // ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 0.3048); @@ -648,7 +648,7 @@ void MainWindow::on_meshResolutionMetersRadioButton_toggled(bool checked) } } -void MainWindow::on_meshResolutionFeetRadioButton_toggled(bool checked) +void MainWindow::meshResolutionFeetRadioButtonToggled(bool checked) { if (checked) { ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 3.28084); @@ -656,13 +656,13 @@ void MainWindow::on_meshResolutionFeetRadioButton_toggled(bool checked) } // User selects a new time zone -void MainWindow::on_timeZoneComboBox_currentIndexChanged(int index) +void MainWindow::timeZoneComboBoxCurrentIndexChanged(int index) { emit timeZoneDetailsRequest(); } // User toggles show all time zones -void MainWindow::on_timeZoneAllZonesCheckBox_clicked() +void MainWindow::timeZoneAllZonesCheckBoxClicked() { AppState& state = AppState::instance(); @@ -673,7 +673,7 @@ void MainWindow::on_timeZoneAllZonesCheckBox_clicked() } // User toggles show time zone details -void MainWindow::on_timeZoneDetailsCheckBox_clicked() +void MainWindow::timeZoneDetailsCheckBoxClicked() { AppState& state = AppState::instance(); @@ -686,7 +686,7 @@ void MainWindow::on_timeZoneDetailsCheckBox_clicked() } // User selects Diurnal Input -void MainWindow::on_diurnalCheckBox_clicked() +void MainWindow::diurnalCheckBoxClicked() { AppState& state = AppState::instance(); @@ -713,7 +713,7 @@ void MainWindow::on_diurnalCheckBox_clicked() } // User selects Stability Input -void MainWindow::on_stabilityCheckBox_clicked() +void MainWindow::stabilityCheckBoxClicked() { AppState& state = AppState::instance(); @@ -729,7 +729,7 @@ void MainWindow::on_stabilityCheckBox_clicked() // Domain Average Wind // User selects Domain Average Wind -void MainWindow::on_domainAverageCheckBox_clicked() +void MainWindow::domainAverageCheckBoxClicked() { AppState& state = AppState::instance(); @@ -749,7 +749,7 @@ void MainWindow::on_domainAverageCheckBox_clicked() } // User changes Domain Average Wind -> Input Wind Height -void MainWindow::on_windHeightComboBox_currentIndexChanged(int index) +void MainWindow::windHeightComboBoxCurrentIndexChanged(int index) { switch(index) { case 0: @@ -777,7 +777,7 @@ void MainWindow::on_windHeightComboBox_currentIndexChanged(int index) } // User clears the domain average wind input table -void MainWindow::on_clearTableButton_clicked() +void MainWindow::clearTableButtonClicked() { ui->domainAverageTable->clearContents(); invalidDAWCells.clear(); @@ -786,7 +786,7 @@ void MainWindow::on_clearTableButton_clicked() } // User changes a value in the domain average wind input table -void MainWindow::on_domainAverageTable_cellChanged(int row, int column) +void MainWindow::domainAverageTableCellChanged(int row, int column) { QTableWidget* table = ui->domainAverageTable; QTableWidgetItem* item = table->item(row, column); @@ -862,7 +862,7 @@ void MainWindow::on_domainAverageTable_cellChanged(int row, int column) } // User selects Point Initialization wind model -void MainWindow::on_pointInitializationCheckBox_clicked() +void MainWindow::pointInitializationCheckBoxClicked() { AppState& state = AppState::instance(); @@ -882,7 +882,7 @@ void MainWindow::on_pointInitializationCheckBox_clicked() } // User selects Weather Model Initialization model -void MainWindow::on_useWeatherModelInit_clicked() +void MainWindow::useWeatherModelInitClicked() { AppState& state = AppState::instance(); @@ -902,7 +902,7 @@ void MainWindow::on_useWeatherModelInit_clicked() } // User selects a new output location -void MainWindow::on_outputDirectoryButton_clicked() +void MainWindow::outputDirectoryButtonClicked() { QString currentPath = ui->outputDirectoryTextEdit->toPlainText(); QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); @@ -918,19 +918,19 @@ void MainWindow::on_outputDirectoryButton_clicked() } // User selects the solve Button on the solver page -void MainWindow::on_numberOfProcessorsSolveButton_clicked() +void MainWindow::numberOfProcessorsSolveButtonClicked() { ui->solveButton->click(); } // User selects the primary solve Button -void MainWindow::on_solveButton_clicked() +void MainWindow::solveButtonClicked() { emit solveRequest(); } // Enable double clicking on tree menu items -void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column) +void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) { if (item->text(0) == "Conservation of Mass") { ui->massSolverCheckBox->click(); @@ -1123,9 +1123,45 @@ MainWindow::MainWindow(QWidget *parent) connect(ui->elevationInputTypeComboBox, QOverload::of(&QComboBox::currentIndexChanged), ui->elevationInputTypeStackedWidget, &QStackedWidget::setCurrentIndex); + connect(ui->massSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::massSolverCheckBoxClicked); + connect(ui->massAndMomentumSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::massAndMomentumSolverCheckBoxClicked); + + connect(ui->elevationInputFileDownloadButton, &QPushButton::clicked, this, &MainWindow::elevationInputFileDownloadButtonClicked); + connect(ui->elevationInputFileOpenButton, &QPushButton::clicked, this, &MainWindow::elevationInputFileOpenButtonClicked); + connect(ui->elevationInputFileLineEdit, &QLineEdit::textChanged, this, &MainWindow::elevationInputFileLineEditTextChanged); + + connect(ui->meshResolutionComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &MainWindow::meshResolutionComboBoxCurrentIndexChanged); + + connect(ui->diurnalCheckBox, &QCheckBox::clicked, this, &MainWindow::diurnalCheckBoxClicked); + connect(ui->stabilityCheckBox, &QCheckBox::clicked, this, &MainWindow::stabilityCheckBoxClicked); + connect(ui->windHeightComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &MainWindow::windHeightComboBoxCurrentIndexChanged); + connect(ui->domainAverageCheckBox, &QCheckBox::clicked, this, &MainWindow::domainAverageCheckBoxClicked); + + connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, this, &MainWindow::treeWidgetItemDoubleClicked); + + connect(ui->pointInitializationCheckBox, &QCheckBox::clicked, this, &MainWindow::pointInitializationCheckBoxClicked); + connect(ui->useWeatherModelInit, &QCheckBox::clicked, this, &MainWindow::useWeatherModelInitClicked); + + connect(ui->clearTableButton, &QPushButton::clicked, this, &MainWindow::clearTableButtonClicked); + connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); + connect(ui->outputDirectoryButton, &QPushButton::clicked, this, &MainWindow::outputDirectoryButtonClicked); + connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); + + connect(ui->timeZoneAllZonesCheckBox, &QCheckBox::clicked, this, &MainWindow::timeZoneAllZonesCheckBoxClicked); + connect(ui->timeZoneDetailsCheckBox, &QCheckBox::clicked, this, &MainWindow::timeZoneDetailsCheckBoxClicked); + connect(ui->timeZoneComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &MainWindow::timeZoneComboBoxCurrentIndexChanged); + + connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &MainWindow::domainAverageTableCellChanged); + + connect(ui->meshResolutionMetersRadioButton, &QRadioButton::toggled, this, &MainWindow::meshResolutionMetersRadioButtonToggled); + connect(ui->meshResolutionFeetRadioButton, &QRadioButton::toggled, this, &MainWindow::meshResolutionFeetRadioButtonToggled); + + connect(ui->surfaceInputDownloadCancelButton, &QPushButton::clicked, this, &MainWindow::surfaceInputDownloadCancelButtonClicked); + + } -void MainWindow::on_surfaceInputDownloadCancelButton_clicked() +void MainWindow::surfaceInputDownloadCancelButtonClicked() { int currentIndex = ui->inputsStackedWidget->currentIndex(); ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 5a864d867..60512a15a 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -48,52 +48,52 @@ class MainWindow : public QMainWindow { ~MainWindow(); private slots: - void on_massSolverCheckBox_clicked(); - void on_massAndMomentumSolverCheckBox_clicked(); + void massSolverCheckBoxClicked(); + void massAndMomentumSolverCheckBoxClicked(); - void on_elevationInputFileDownloadButton_clicked(); + void elevationInputFileDownloadButtonClicked(); - void on_elevationInputFileOpenButton_clicked(); + void elevationInputFileOpenButtonClicked(); - void on_elevationInputFileLineEdit_textChanged(const QString &arg1); + void elevationInputFileLineEditTextChanged(const QString &arg1); - void on_meshResolutionComboBox_currentIndexChanged(int index); + void meshResolutionComboBoxCurrentIndexChanged(int index); - void on_diurnalCheckBox_clicked(); + void diurnalCheckBoxClicked(); - void on_stabilityCheckBox_clicked(); + void stabilityCheckBoxClicked(); - void on_windHeightComboBox_currentIndexChanged(int index); + void windHeightComboBoxCurrentIndexChanged(int index); - void on_domainAverageCheckBox_clicked(); + void domainAverageCheckBoxClicked(); - void on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column); + void treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column); - void on_pointInitializationCheckBox_clicked(); + void pointInitializationCheckBoxClicked(); - void on_useWeatherModelInit_clicked(); + void useWeatherModelInitClicked(); - void on_clearTableButton_clicked(); + void clearTableButtonClicked(); - void on_solveButton_clicked(); + void solveButtonClicked(); - void on_outputDirectoryButton_clicked(); + void outputDirectoryButtonClicked(); - void on_numberOfProcessorsSolveButton_clicked(); + void numberOfProcessorsSolveButtonClicked(); - void on_timeZoneAllZonesCheckBox_clicked(); + void timeZoneAllZonesCheckBoxClicked(); - void on_timeZoneDetailsCheckBox_clicked(); + void timeZoneDetailsCheckBoxClicked(); - void on_timeZoneComboBox_currentIndexChanged(int index); + void timeZoneComboBoxCurrentIndexChanged(int index); - void on_domainAverageTable_cellChanged(int row, int column); + void domainAverageTableCellChanged(int row, int column); - void on_meshResolutionMetersRadioButton_toggled(bool checked); + void meshResolutionMetersRadioButtonToggled(bool checked); - void on_meshResolutionFeetRadioButton_toggled(bool checked); + void meshResolutionFeetRadioButtonToggled(bool checked); - void on_surfaceInputDownloadCancelButton_clicked(); + void surfaceInputDownloadCancelButtonClicked(); signals: void solveRequest(); From 9fe38ede9a13b0022f229bcb7795bcd4900d2250 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 30 Jun 2025 13:26:46 -0600 Subject: [PATCH 085/435] Moved constructor to the top of class definitions --- src/gui/mainwindow.cpp | 779 +++++++++++++++++++++-------------------- 1 file changed, 390 insertions(+), 389 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 8336fa379..6ec641a31 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -65,6 +65,357 @@ class DirectoryFilterModel : public QSortFilterProxyModel { } }; +/* + * Dynamic UI handling + */ + +/* + * Helper function to refresh the ui state of the app + * Called on every user input action + */ +static void refreshUI(const Ui::MainWindow* ui) +{ + // Alias the AppState + AppState& state = AppState::instance(); + + // Define state icons + QIcon tickIcon(":/tick.png"); + QIcon xIcon(":/cross.png"); + QIcon bulletIcon(":/bullet_blue.png"); + + // Enable mouse tracking on tree + ui->treeWidget->setMouseTracking(true); + + // Update Solver Methodology UI + if (state.useCOMtoggled != state.useCOMMtoggled) { + state.solverMethodologyOk = true; + ui->treeWidget->topLevelItem(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(0)->setToolTip(0, ""); + } else if (state.useCOMtoggled && state.useCOMMtoggled) { + state.solverMethodologyOk = false; + ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently too many selections."); + } else { + state.solverMethodologyOk = false; + ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently no selections."); + } + + if (state.useCOMtoggled) { + ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, tickIcon); + } else { + ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, bulletIcon); + } + + if (state.useCOMMtoggled) { + ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, tickIcon); + } else { + ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, bulletIcon); + } + + /* + * Primary state machine for inputs (surface, wind, etc.) + */ + + // Update surface input state + if (ui->elevationInputFileLineEdit->text() != "") { + state.surfaceInputOk = true; + ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, ""); + } else { + state.surfaceInputOk = false; + ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, "No DEM file detected."); + } + + // Update diurnal input state + if (state.diurnalInputToggled) { + ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, tickIcon); + } else { + ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, bulletIcon); + } + + // Update stability input state + if (state.stabilityInputToggled) { + ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, tickIcon); + } else { + ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, bulletIcon); + } + + // Update domain average wind state + if (state.domainAverageWindToggled && state.domainAverageWindInputTableOk) { + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); + state.domainAverageWindOk = true; + } else if (state.domainAverageWindToggled && !state.domainAverageWindInputTableOk){ + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "Bad wind inputs; hover over red cells for explanation."); + state.domainAverageWindOk = false; + } else { + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); + state.domainAverageWindOk = false; + } + + // Update point initialization state + if (state.pointInitializationToggled) { + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, tickIcon); + state.pointInitializationOk = true; + } else { + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, bulletIcon); + state.pointInitializationOk = false; + } + + // Update weather model state + if (state.weatherModelToggled) { + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, tickIcon); + state.weatherModelOk = true; + } else { + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, bulletIcon); + state.weatherModelOk = false; + } + + // Update wind input + if (state.domainAverageWindOk || state.pointInitializationOk || state.weatherModelOk) { + ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, tickIcon); + state.windInputOk = true; + } else { + ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, xIcon); + state.windInputOk = false; + } + + // Update overall input UI state + if (state.surfaceInputOk && state.windInputOk) { + state.inputsOk = true; + ui->treeWidget->topLevelItem(1)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, ""); + } else if (!state.surfaceInputOk && !state.windInputOk) { + state.inputsOk = false; + ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface and wind inputs."); + } else if (!state.surfaceInputOk) { + state.inputsOk = false; + ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface input."); + } else if (!state.windInputOk) { + state.inputsOk = false; + ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad wind input."); + } + + // Update solve state + if (state.solverMethodologyOk && state.inputsOk) { + ui->solveButton->setEnabled(true); + ui->numberOfProcessorsSolveButton->setEnabled(true); + ui->solveButton->setToolTip(""); + ui->numberOfProcessorsSolveButton->setToolTip(""); + } else { + ui->solveButton->setEnabled(false); + ui->numberOfProcessorsSolveButton->setEnabled(false); + ui->solveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); + ui->numberOfProcessorsSolveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); + } +} + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent), + ui(new Ui::MainWindow) +{ + ui->setupUi(this); + + checkMessages(); + + // Set default window size + resize(1200, 700); + + // Immediately call a UI refresh to set initial states + refreshUI(ui); + // Expand tree UI + ui->treeWidget->expandAll(); + + /* + * Create file handler window for point init screen + */ + + // Get the correct Downloads folder path + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + + // Enable QFileSystemModel to process directories and files + QFileSystemModel *model = new QFileSystemModel(this); + model->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs | QDir::AllEntries); // Ensure files appear + model->setRootPath(downloadsPath); + + // Enable file watching so contents refresh properly + model->setReadOnly(false); + model->setResolveSymlinks(true); + + // Create a filtering model + DirectoryFilterModel *filterModel = new DirectoryFilterModel(); + filterModel->setSourceModel(model); + + // Set the correct root index inside Downloads + QModelIndex rootIndex = model->index(downloadsPath); + ui->treeFileExplorer->setModel(filterModel); + ui->treeFileExplorer->setRootIndex(filterModel->mapFromSource(rootIndex)); + + // Ensure folders expand and collapse correctly + ui->treeFileExplorer->setExpandsOnDoubleClick(true); + ui->treeFileExplorer->setAnimated(true); + ui->treeFileExplorer->setIndentation(15); + ui->treeFileExplorer->setSortingEnabled(true); + ui->treeFileExplorer->setItemsExpandable(true); + ui->treeFileExplorer->setUniformRowHeights(true); + + // Show only "Name" and "Date Modified" columns + ui->treeFileExplorer->hideColumn(1); // Hide Size column + ui->treeFileExplorer->hideColumn(2); // Hide Type column + + // Optional: Set column headers + QHeaderView *header = ui->treeFileExplorer->header(); + header->setSectionResizeMode(0, QHeaderView::Interactive); // Name fits content + header->setSectionResizeMode(3, QHeaderView::Stretch); // Date Modified stretches + model->setHeaderData(0, Qt::Horizontal, "Name"); + model->setHeaderData(3, Qt::Horizontal, "Date Modified"); + + // Force model to reload children + ui->treeFileExplorer->expandAll(); // Force expand all to check visibility + + /* + * Functionality for the map widget + */ + + // Enable remote content + QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true); + QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); + + // Resolve the map file path + QString filePath = QString(MAP_PATH); + + //Load HTML file with Leaflet + webView = new QWebEngineView(ui->mapPanelWidget); + QUrl url = QUrl::fromLocalFile(filePath); + webView->setUrl(url); + + // Set up layout + QVBoxLayout *layout = new QVBoxLayout(); + layout->setContentsMargins(0, 0, 0, 0); + layout->addWidget(webView); + + // Apply + ui->mapPanelWidget->setLayout(layout); + + /* + * Connect tree items to stacked tab window + */ + + // Top-level items + ui->inputsStackedWidget->setCurrentIndex(0); + ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); // Solver Methodology (Page 0) + ui->treeWidget->topLevelItem(1)->setData(0, Qt::UserRole, 4); // Inputs (Page 5) + ui->treeWidget->topLevelItem(2)->setData(0, Qt::UserRole, 12); // Inputs (Page 13) + + // Sub-items for Solver Methodology + ui->treeWidget->topLevelItem(0)->child(0)->setData(0, Qt::UserRole, 2); // Conservation of Mass (Page 1) + ui->treeWidget->topLevelItem(0)->child(1)->setData(0, Qt::UserRole, 3); // Conservation of Mass and Momentum (Page 2) + + // Sub-items for Inputs + ui->treeWidget->topLevelItem(1)->child(0)->setData(0, Qt::UserRole, 5); // Surface Input (Page 6) + ui->treeWidget->topLevelItem(1)->child(1)->setData(0, Qt::UserRole, 6); // Dirunal Input (Page 7) + ui->treeWidget->topLevelItem(1)->child(2)->setData(0, Qt::UserRole, 7); // Stability Input (Page 8) + ui->treeWidget->topLevelItem(1)->child(3)->setData(0, Qt::UserRole, 8); // Wind Input (Page 9) + + // Sub-sub-items for Wind Input + QTreeWidgetItem *windInputItem = ui->treeWidget->topLevelItem(1)->child(3); + windInputItem->child(0)->setData(0, Qt::UserRole, 9); // Domain Average Wind (Page 9) + windInputItem->child(1)->setData(0, Qt::UserRole, 10); // Point Init (Page 10) + windInputItem->child(2)->setData(0, Qt::UserRole, 11); // Weather Model (Page 11) + + connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::onTreeItemClicked); + + connectMenuActions(); + + /* + * Downloaded Forecast explorer + */ + + populateForecastDownloads(); + + /* + * Basic initial setup steps + */ + + // Surface Input window + // Set icons + ui->elevationInputFileOpenButton->setIcon(QIcon(":/folder.png")); + ui->elevationInputFileDownloadButton->setIcon(QIcon(":/swoop_final.png")); + + // Solver window + // Update processor count and set user input default value & upper bound + int nCPUs = QThread::idealThreadCount(); + ui->availableProcessorsTextEdit->setPlainText("Available Processors: " + QString::number(nCPUs)); + ui->numberOfProcessorsSpinBox->setMaximum(nCPUs); + ui->numberOfProcessorsSpinBox->setValue(nCPUs); + + // Wind Input -> Point Init window + ui->downloadPointInitData->setIcon(QIcon(":/application_get")); + + // Populate default location for output location + ui->outputDirectoryTextEdit->setText(downloadsPath); + ui->outputDirectoryButton->setIcon(QIcon(":/folder.png")); + + // Set initial visibility of time zone details + ui->timeZoneDetailsTextEdit->setVisible(false); + + // Set initial formatting of domain average input table + ui->domainAverageTable->hideColumn(2); + ui->domainAverageTable->hideColumn(3); + ui->domainAverageTable->hideColumn(4); + ui->domainAverageTable->hideColumn(5); + ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + + connect(ui->elevationInputTypeComboBox, QOverload::of(&QComboBox::currentIndexChanged), + ui->elevationInputTypeStackedWidget, &QStackedWidget::setCurrentIndex); + + connect(ui->massSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::massSolverCheckBoxClicked); + connect(ui->massAndMomentumSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::massAndMomentumSolverCheckBoxClicked); + + connect(ui->elevationInputFileDownloadButton, &QPushButton::clicked, this, &MainWindow::elevationInputFileDownloadButtonClicked); + connect(ui->elevationInputFileOpenButton, &QPushButton::clicked, this, &MainWindow::elevationInputFileOpenButtonClicked); + connect(ui->elevationInputFileLineEdit, &QLineEdit::textChanged, this, &MainWindow::elevationInputFileLineEditTextChanged); + + connect(ui->meshResolutionComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &MainWindow::meshResolutionComboBoxCurrentIndexChanged); + + connect(ui->diurnalCheckBox, &QCheckBox::clicked, this, &MainWindow::diurnalCheckBoxClicked); + connect(ui->stabilityCheckBox, &QCheckBox::clicked, this, &MainWindow::stabilityCheckBoxClicked); + connect(ui->windHeightComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &MainWindow::windHeightComboBoxCurrentIndexChanged); + connect(ui->domainAverageCheckBox, &QCheckBox::clicked, this, &MainWindow::domainAverageCheckBoxClicked); + + connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, this, &MainWindow::treeWidgetItemDoubleClicked); + + connect(ui->pointInitializationCheckBox, &QCheckBox::clicked, this, &MainWindow::pointInitializationCheckBoxClicked); + connect(ui->useWeatherModelInit, &QCheckBox::clicked, this, &MainWindow::useWeatherModelInitClicked); + + connect(ui->clearTableButton, &QPushButton::clicked, this, &MainWindow::clearTableButtonClicked); + connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); + connect(ui->outputDirectoryButton, &QPushButton::clicked, this, &MainWindow::outputDirectoryButtonClicked); + connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); + + connect(ui->timeZoneAllZonesCheckBox, &QCheckBox::clicked, this, &MainWindow::timeZoneAllZonesCheckBoxClicked); + connect(ui->timeZoneDetailsCheckBox, &QCheckBox::clicked, this, &MainWindow::timeZoneDetailsCheckBoxClicked); + connect(ui->timeZoneComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &MainWindow::timeZoneComboBoxCurrentIndexChanged); + + connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &MainWindow::domainAverageTableCellChanged); + + connect(ui->meshResolutionMetersRadioButton, &QRadioButton::toggled, this, &MainWindow::meshResolutionMetersRadioButtonToggled); + connect(ui->meshResolutionFeetRadioButton, &QRadioButton::toggled, this, &MainWindow::meshResolutionFeetRadioButtonToggled); + + connect(ui->surfaceInputDownloadCancelButton, &QPushButton::clicked, this, &MainWindow::surfaceInputDownloadCancelButtonClicked); + + +} + + + MainWindow::~MainWindow() { delete ui; } //// functions for Menu actions @@ -218,207 +569,54 @@ void MainWindow::onTreeItemClicked(QTreeWidgetItem *item, int column) { } else { ui->inputsStackedWidget->setCurrentIndex(pageIndex); - } - } -} - -// Recursive function to add files and directories correctly with Name and Date columns -void addFilesRecursively(QStandardItem *parentItem, const QString &dirPath) { - QDir dir(dirPath); - QFileInfoList entries = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); - for (const QFileInfo &entry : entries) { - QStandardItem *nameItem = new QStandardItem(entry.fileName()); - QStandardItem *dateItem = new QStandardItem(entry.lastModified().toString("yyyy-MM-dd HH:mm:ss")); - nameItem->setEditable(false); - dateItem->setEditable(false); - parentItem->appendRow({nameItem, dateItem}); - if (entry.isDir()) { - addFilesRecursively(nameItem, entry.absoluteFilePath()); - } - } -} - -// Function to populate forecastDownloads with .tif parent directories and all nested contents -void MainWindow::populateForecastDownloads() { - QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - QDir downloadsDir(downloadsPath); - - if (!downloadsDir.exists()) return; - - QStandardItemModel *model = new QStandardItemModel(this); - model->setHorizontalHeaderLabels({"Name", "Date Modified"}); - - QDirIterator it(downloadsPath, QDir::Dirs | QDir::NoDotAndDotDot); - while (it.hasNext()) { - QString dirPath = it.next(); - if (dirPath.endsWith(".tif", Qt::CaseInsensitive)) { - QStandardItem *parentItem = new QStandardItem(QFileInfo(dirPath).fileName()); - parentItem->setEditable(false); - addFilesRecursively(parentItem, dirPath); - model->appendRow(parentItem); - } - } - - ui->forecastDownloads->setModel(model); - ui->forecastDownloads->header()->setSectionResizeMode(QHeaderView::Stretch); - - // Disable editing and enable double-click expansion - ui->forecastDownloads->setEditTriggers(QAbstractItemView::NoEditTriggers); - ui->forecastDownloads->setExpandsOnDoubleClick(true); -} - -/* - * Dynamic UI handling - */ - -/* - * Helper function to refresh the ui state of the app - * Called on every user input action - */ -static void refreshUI(const Ui::MainWindow* ui) -{ - // Alias the AppState - AppState& state = AppState::instance(); - - // Define state icons - QIcon tickIcon(":/tick.png"); - QIcon xIcon(":/cross.png"); - QIcon bulletIcon(":/bullet_blue.png"); - - // Enable mouse tracking on tree - ui->treeWidget->setMouseTracking(true); - - // Update Solver Methodology UI - if (state.useCOMtoggled != state.useCOMMtoggled) { - state.solverMethodologyOk = true; - ui->treeWidget->topLevelItem(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(0)->setToolTip(0, ""); - } else if (state.useCOMtoggled && state.useCOMMtoggled) { - state.solverMethodologyOk = false; - ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently too many selections."); - } else { - state.solverMethodologyOk = false; - ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently no selections."); - } - - if (state.useCOMtoggled) { - ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, tickIcon); - } else { - ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, bulletIcon); - } - - if (state.useCOMMtoggled) { - ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, tickIcon); - } else { - ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, bulletIcon); - } - - /* - * Primary state machine for inputs (surface, wind, etc.) - */ - - // Update surface input state - if (ui->elevationInputFileLineEdit->text() != "") { - state.surfaceInputOk = true; - ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, ""); - } else { - state.surfaceInputOk = false; - ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, "No DEM file detected."); - } - - // Update diurnal input state - if (state.diurnalInputToggled) { - ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, tickIcon); - } else { - ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, bulletIcon); - } - - // Update stability input state - if (state.stabilityInputToggled) { - ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, tickIcon); - } else { - ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, bulletIcon); - } - - // Update domain average wind state - if (state.domainAverageWindToggled && state.domainAverageWindInputTableOk) { - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); - state.domainAverageWindOk = true; - } else if (state.domainAverageWindToggled && !state.domainAverageWindInputTableOk){ - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "Bad wind inputs; hover over red cells for explanation."); - state.domainAverageWindOk = false; - } else { - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, bulletIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); - state.domainAverageWindOk = false; + } } +} - // Update point initialization state - if (state.pointInitializationToggled) { - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, tickIcon); - state.pointInitializationOk = true; - } else { - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, bulletIcon); - state.pointInitializationOk = false; +// Recursive function to add files and directories correctly with Name and Date columns +void addFilesRecursively(QStandardItem *parentItem, const QString &dirPath) { + QDir dir(dirPath); + QFileInfoList entries = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); + for (const QFileInfo &entry : entries) { + QStandardItem *nameItem = new QStandardItem(entry.fileName()); + QStandardItem *dateItem = new QStandardItem(entry.lastModified().toString("yyyy-MM-dd HH:mm:ss")); + nameItem->setEditable(false); + dateItem->setEditable(false); + parentItem->appendRow({nameItem, dateItem}); + if (entry.isDir()) { + addFilesRecursively(nameItem, entry.absoluteFilePath()); + } } +} - // Update weather model state - if (state.weatherModelToggled) { - ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, tickIcon); - state.weatherModelOk = true; - } else { - ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, bulletIcon); - state.weatherModelOk = false; - } +// Function to populate forecastDownloads with .tif parent directories and all nested contents +void MainWindow::populateForecastDownloads() { + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + QDir downloadsDir(downloadsPath); - // Update wind input - if (state.domainAverageWindOk || state.pointInitializationOk || state.weatherModelOk) { - ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, tickIcon); - state.windInputOk = true; - } else { - ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, xIcon); - state.windInputOk = false; - } + if (!downloadsDir.exists()) return; - // Update overall input UI state - if (state.surfaceInputOk && state.windInputOk) { - state.inputsOk = true; - ui->treeWidget->topLevelItem(1)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, ""); - } else if (!state.surfaceInputOk && !state.windInputOk) { - state.inputsOk = false; - ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface and wind inputs."); - } else if (!state.surfaceInputOk) { - state.inputsOk = false; - ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface input."); - } else if (!state.windInputOk) { - state.inputsOk = false; - ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad wind input."); - } + QStandardItemModel *model = new QStandardItemModel(this); + model->setHorizontalHeaderLabels({"Name", "Date Modified"}); - // Update solve state - if (state.solverMethodologyOk && state.inputsOk) { - ui->solveButton->setEnabled(true); - ui->numberOfProcessorsSolveButton->setEnabled(true); - ui->solveButton->setToolTip(""); - ui->numberOfProcessorsSolveButton->setToolTip(""); - } else { - ui->solveButton->setEnabled(false); - ui->numberOfProcessorsSolveButton->setEnabled(false); - ui->solveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); - ui->numberOfProcessorsSolveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); + QDirIterator it(downloadsPath, QDir::Dirs | QDir::NoDotAndDotDot); + while (it.hasNext()) { + QString dirPath = it.next(); + if (dirPath.endsWith(".tif", Qt::CaseInsensitive)) { + QStandardItem *parentItem = new QStandardItem(QFileInfo(dirPath).fileName()); + parentItem->setEditable(false); + addFilesRecursively(parentItem, dirPath); + model->appendRow(parentItem); + } } -} + ui->forecastDownloads->setModel(model); + ui->forecastDownloads->header()->setSectionResizeMode(QHeaderView::Stretch); + + // Disable editing and enable double-click expansion + ui->forecastDownloads->setEditTriggers(QAbstractItemView::NoEditTriggers); + ui->forecastDownloads->setExpandsOnDoubleClick(true); +} /* * Signal and slot handlers @@ -964,203 +1162,6 @@ void MainWindow::loadMapKMZ(const std::vector& input){ } -MainWindow::MainWindow(QWidget *parent) - : QMainWindow(parent), - ui(new Ui::MainWindow) -{ - ui->setupUi(this); - - checkMessages(); - - // Set default window size - resize(1200, 700); - - // Immediately call a UI refresh to set initial states - refreshUI(ui); - // Expand tree UI - ui->treeWidget->expandAll(); - - /* - * Create file handler window for point init screen - */ - - // Get the correct Downloads folder path - QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - - // Enable QFileSystemModel to process directories and files - QFileSystemModel *model = new QFileSystemModel(this); - model->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs | QDir::AllEntries); // Ensure files appear - model->setRootPath(downloadsPath); - - // Enable file watching so contents refresh properly - model->setReadOnly(false); - model->setResolveSymlinks(true); - - // Create a filtering model - DirectoryFilterModel *filterModel = new DirectoryFilterModel(); - filterModel->setSourceModel(model); - - // Set the correct root index inside Downloads - QModelIndex rootIndex = model->index(downloadsPath); - ui->treeFileExplorer->setModel(filterModel); - ui->treeFileExplorer->setRootIndex(filterModel->mapFromSource(rootIndex)); - - // Ensure folders expand and collapse correctly - ui->treeFileExplorer->setExpandsOnDoubleClick(true); - ui->treeFileExplorer->setAnimated(true); - ui->treeFileExplorer->setIndentation(15); - ui->treeFileExplorer->setSortingEnabled(true); - ui->treeFileExplorer->setItemsExpandable(true); - ui->treeFileExplorer->setUniformRowHeights(true); - - // Show only "Name" and "Date Modified" columns - ui->treeFileExplorer->hideColumn(1); // Hide Size column - ui->treeFileExplorer->hideColumn(2); // Hide Type column - - // Optional: Set column headers - QHeaderView *header = ui->treeFileExplorer->header(); - header->setSectionResizeMode(0, QHeaderView::Interactive); // Name fits content - header->setSectionResizeMode(3, QHeaderView::Stretch); // Date Modified stretches - model->setHeaderData(0, Qt::Horizontal, "Name"); - model->setHeaderData(3, Qt::Horizontal, "Date Modified"); - - // Force model to reload children - ui->treeFileExplorer->expandAll(); // Force expand all to check visibility - - /* - * Functionality for the map widget - */ - - // Enable remote content - QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true); - QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); - - // Resolve the map file path - QString filePath = QString(MAP_PATH); - - //Load HTML file with Leaflet - webView = new QWebEngineView(ui->mapPanelWidget); - QUrl url = QUrl::fromLocalFile(filePath); - webView->setUrl(url); - - // Set up layout - QVBoxLayout *layout = new QVBoxLayout(); - layout->setContentsMargins(0, 0, 0, 0); - layout->addWidget(webView); - - // Apply - ui->mapPanelWidget->setLayout(layout); - - /* - * Connect tree items to stacked tab window - */ - - // Top-level items - ui->inputsStackedWidget->setCurrentIndex(0); - ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); // Solver Methodology (Page 0) - ui->treeWidget->topLevelItem(1)->setData(0, Qt::UserRole, 4); // Inputs (Page 5) - ui->treeWidget->topLevelItem(2)->setData(0, Qt::UserRole, 12); // Inputs (Page 13) - - // Sub-items for Solver Methodology - ui->treeWidget->topLevelItem(0)->child(0)->setData(0, Qt::UserRole, 2); // Conservation of Mass (Page 1) - ui->treeWidget->topLevelItem(0)->child(1)->setData(0, Qt::UserRole, 3); // Conservation of Mass and Momentum (Page 2) - - // Sub-items for Inputs - ui->treeWidget->topLevelItem(1)->child(0)->setData(0, Qt::UserRole, 5); // Surface Input (Page 6) - ui->treeWidget->topLevelItem(1)->child(1)->setData(0, Qt::UserRole, 6); // Dirunal Input (Page 7) - ui->treeWidget->topLevelItem(1)->child(2)->setData(0, Qt::UserRole, 7); // Stability Input (Page 8) - ui->treeWidget->topLevelItem(1)->child(3)->setData(0, Qt::UserRole, 8); // Wind Input (Page 9) - - // Sub-sub-items for Wind Input - QTreeWidgetItem *windInputItem = ui->treeWidget->topLevelItem(1)->child(3); - windInputItem->child(0)->setData(0, Qt::UserRole, 9); // Domain Average Wind (Page 9) - windInputItem->child(1)->setData(0, Qt::UserRole, 10); // Point Init (Page 10) - windInputItem->child(2)->setData(0, Qt::UserRole, 11); // Weather Model (Page 11) - - connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::onTreeItemClicked); - - connectMenuActions(); - - /* - * Downloaded Forecast explorer - */ - - populateForecastDownloads(); - - /* - * Basic initial setup steps - */ - - // Surface Input window - // Set icons - ui->elevationInputFileOpenButton->setIcon(QIcon(":/folder.png")); - ui->elevationInputFileDownloadButton->setIcon(QIcon(":/swoop_final.png")); - - // Solver window - // Update processor count and set user input default value & upper bound - int nCPUs = QThread::idealThreadCount(); - ui->availableProcessorsTextEdit->setPlainText("Available Processors: " + QString::number(nCPUs)); - ui->numberOfProcessorsSpinBox->setMaximum(nCPUs); - ui->numberOfProcessorsSpinBox->setValue(nCPUs); - - // Wind Input -> Point Init window - ui->downloadPointInitData->setIcon(QIcon(":/application_get")); - - // Populate default location for output location - ui->outputDirectoryTextEdit->setText(downloadsPath); - ui->outputDirectoryButton->setIcon(QIcon(":/folder.png")); - - // Set initial visibility of time zone details - ui->timeZoneDetailsTextEdit->setVisible(false); - - // Set initial formatting of domain average input table - ui->domainAverageTable->hideColumn(2); - ui->domainAverageTable->hideColumn(3); - ui->domainAverageTable->hideColumn(4); - ui->domainAverageTable->hideColumn(5); - ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); - - connect(ui->elevationInputTypeComboBox, QOverload::of(&QComboBox::currentIndexChanged), - ui->elevationInputTypeStackedWidget, &QStackedWidget::setCurrentIndex); - - connect(ui->massSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::massSolverCheckBoxClicked); - connect(ui->massAndMomentumSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::massAndMomentumSolverCheckBoxClicked); - - connect(ui->elevationInputFileDownloadButton, &QPushButton::clicked, this, &MainWindow::elevationInputFileDownloadButtonClicked); - connect(ui->elevationInputFileOpenButton, &QPushButton::clicked, this, &MainWindow::elevationInputFileOpenButtonClicked); - connect(ui->elevationInputFileLineEdit, &QLineEdit::textChanged, this, &MainWindow::elevationInputFileLineEditTextChanged); - - connect(ui->meshResolutionComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &MainWindow::meshResolutionComboBoxCurrentIndexChanged); - - connect(ui->diurnalCheckBox, &QCheckBox::clicked, this, &MainWindow::diurnalCheckBoxClicked); - connect(ui->stabilityCheckBox, &QCheckBox::clicked, this, &MainWindow::stabilityCheckBoxClicked); - connect(ui->windHeightComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &MainWindow::windHeightComboBoxCurrentIndexChanged); - connect(ui->domainAverageCheckBox, &QCheckBox::clicked, this, &MainWindow::domainAverageCheckBoxClicked); - - connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, this, &MainWindow::treeWidgetItemDoubleClicked); - - connect(ui->pointInitializationCheckBox, &QCheckBox::clicked, this, &MainWindow::pointInitializationCheckBoxClicked); - connect(ui->useWeatherModelInit, &QCheckBox::clicked, this, &MainWindow::useWeatherModelInitClicked); - - connect(ui->clearTableButton, &QPushButton::clicked, this, &MainWindow::clearTableButtonClicked); - connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); - connect(ui->outputDirectoryButton, &QPushButton::clicked, this, &MainWindow::outputDirectoryButtonClicked); - connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); - - connect(ui->timeZoneAllZonesCheckBox, &QCheckBox::clicked, this, &MainWindow::timeZoneAllZonesCheckBoxClicked); - connect(ui->timeZoneDetailsCheckBox, &QCheckBox::clicked, this, &MainWindow::timeZoneDetailsCheckBoxClicked); - connect(ui->timeZoneComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &MainWindow::timeZoneComboBoxCurrentIndexChanged); - - connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &MainWindow::domainAverageTableCellChanged); - - connect(ui->meshResolutionMetersRadioButton, &QRadioButton::toggled, this, &MainWindow::meshResolutionMetersRadioButtonToggled); - connect(ui->meshResolutionFeetRadioButton, &QRadioButton::toggled, this, &MainWindow::meshResolutionFeetRadioButtonToggled); - - connect(ui->surfaceInputDownloadCancelButton, &QPushButton::clicked, this, &MainWindow::surfaceInputDownloadCancelButtonClicked); - - -} - void MainWindow::surfaceInputDownloadCancelButtonClicked() { int currentIndex = ui->inputsStackedWidget->currentIndex(); From b14183c27886be612e68d536780a172c3fdb6a8a Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 1 Jul 2025 13:49:03 -0600 Subject: [PATCH 086/435] Changed app state variable names to be more descriptive of their use --- src/gui/appstate.h | 36 ++++++------- src/gui/controller.cpp | 10 ++-- src/gui/mainwindow.cpp | 118 ++++++++++++++++++++--------------------- src/gui/provider.cpp | 4 +- src/gui/provider.h | 2 +- 5 files changed, 85 insertions(+), 85 deletions(-) diff --git a/src/gui/appstate.h b/src/gui/appstate.h index 940102788..cc9aadc10 100644 --- a/src/gui/appstate.h +++ b/src/gui/appstate.h @@ -10,30 +10,30 @@ class AppState } // Solver Methodology input states - bool solverMethodologyOk = false; - bool useCOMtoggled = false; - bool useCOMMtoggled = false; + bool isSolverMethodologyValid = false; + bool isMassSolverToggled = false; + bool isMomentumSolverToggled = false; // Input states - bool inputsOk = false; - bool surfaceInputOk = false; - bool diurnalInputToggled = false; - bool stabilityInputToggled = false; + bool isInputsValid = false; + bool isSurfaceInputValid = false; + bool isDiurnalInputToggled = false; + bool isStabilityInputToggled = false; // Wind Input States - bool windInputOk = false; - bool domainAverageWindToggled = false; - bool domainAverageWindInputTableOk = true; - bool domainAverageWindOk = false; - bool pointInitializationToggled = false; - bool pointInitializationOk = false; - bool weatherModelToggled = false; - bool weatherModelOk = false; - bool showAllZones = false; - bool displayTimeZoneDetails = false; + bool isWindInputValid = false; + bool isDomainAverageInitializationToggled = false; + bool isDomainAverageWindInputTableValid = true; + bool isDomainAverageInitializationValid = false; + bool isPointInitializationToggled = false; + bool isPointInitializationValid = false; + bool isWeatherModelInitializationToggled = false; + bool isWeatherModelInitializationValid = false; + bool isShowAllTimeZonesSelected = false; + bool isDisplayTimeZoneDetailsSelected = false; // All Inputs Ok - bool solverReady = false; + bool isSolverReady = false; private: diff --git a/src/gui/controller.cpp b/src/gui/controller.cpp index 55ec6d7d3..40d77c05a 100644 --- a/src/gui/controller.cpp +++ b/src/gui/controller.cpp @@ -19,13 +19,13 @@ void Controller::onSolveRequest() { AppState& state = AppState::instance(); // Determine which run to perform - if (state.domainAverageWindOk) { + if (state.isDomainAverageInitializationValid) { DomainAverageWind domainAvgWind = setDomainAverageWind(); provider.domain_average_exec(domainAvgWind); - }else if(state.pointInitializationOk){ + }else if(state.isPointInitializationValid){ PointInitialization pointInit = setPointInitialization(); provider.point_exec(pointInit); - }else if(state.weatherModelOk){ + }else if(state.isWeatherModelInitializationValid){ WeatherModel weatherModel = setWeatherModel(); provider.wxmodel_exec(weatherModel); } @@ -44,8 +44,8 @@ void Controller::onSolveRequest() { // Get time zone list from provider void Controller::onTimeZoneDataRequest() { // Call provider to get 2D vector with timezone data - bool showAllZones = view->getUi()->timeZoneAllZonesCheckBox->isChecked(); - QVector> timeZoneData = provider.getTimeZoneData(showAllZones); + bool isShowAllTimeZonesSelected = view->getUi()->timeZoneAllZonesCheckBox->isChecked(); + QVector> timeZoneData = provider.getTimeZoneData(isShowAllTimeZonesSelected); // Clear timezone list view->getUi()->timeZoneComboBox->clear(); diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 6ec641a31..398210a13 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -87,27 +87,27 @@ static void refreshUI(const Ui::MainWindow* ui) ui->treeWidget->setMouseTracking(true); // Update Solver Methodology UI - if (state.useCOMtoggled != state.useCOMMtoggled) { - state.solverMethodologyOk = true; + if (state.isMassSolverToggled != state.isMomentumSolverToggled) { + state.isSolverMethodologyValid = true; ui->treeWidget->topLevelItem(0)->setIcon(0, tickIcon); ui->treeWidget->topLevelItem(0)->setToolTip(0, ""); - } else if (state.useCOMtoggled && state.useCOMMtoggled) { - state.solverMethodologyOk = false; + } else if (state.isMassSolverToggled && state.isMomentumSolverToggled) { + state.isSolverMethodologyValid = false; ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently too many selections."); } else { - state.solverMethodologyOk = false; + state.isSolverMethodologyValid = false; ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently no selections."); } - if (state.useCOMtoggled) { + if (state.isMassSolverToggled) { ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, tickIcon); } else { ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, bulletIcon); } - if (state.useCOMMtoggled) { + if (state.isMomentumSolverToggled) { ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, tickIcon); } else { ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, bulletIcon); @@ -119,92 +119,92 @@ static void refreshUI(const Ui::MainWindow* ui) // Update surface input state if (ui->elevationInputFileLineEdit->text() != "") { - state.surfaceInputOk = true; + state.isSurfaceInputValid = true; ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, tickIcon); ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, ""); } else { - state.surfaceInputOk = false; + state.isSurfaceInputValid = false; ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, xIcon); ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, "No DEM file detected."); } // Update diurnal input state - if (state.diurnalInputToggled) { + if (state.isDiurnalInputToggled) { ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, tickIcon); } else { ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, bulletIcon); } // Update stability input state - if (state.stabilityInputToggled) { + if (state.isStabilityInputToggled) { ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, tickIcon); } else { ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, bulletIcon); } // Update domain average wind state - if (state.domainAverageWindToggled && state.domainAverageWindInputTableOk) { + if (state.isDomainAverageInitializationToggled && state.isDomainAverageWindInputTableValid) { ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); - state.domainAverageWindOk = true; - } else if (state.domainAverageWindToggled && !state.domainAverageWindInputTableOk){ + state.isDomainAverageInitializationValid = true; + } else if (state.isDomainAverageInitializationToggled && !state.isDomainAverageWindInputTableValid){ ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, xIcon); ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "Bad wind inputs; hover over red cells for explanation."); - state.domainAverageWindOk = false; + state.isDomainAverageInitializationValid = false; } else { ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, bulletIcon); ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); - state.domainAverageWindOk = false; + state.isDomainAverageInitializationValid = false; } // Update point initialization state - if (state.pointInitializationToggled) { + if (state.isPointInitializationToggled) { ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, tickIcon); - state.pointInitializationOk = true; + state.isPointInitializationValid = true; } else { ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, bulletIcon); - state.pointInitializationOk = false; + state.isPointInitializationValid = false; } // Update weather model state - if (state.weatherModelToggled) { + if (state.isWeatherModelInitializationToggled) { ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, tickIcon); - state.weatherModelOk = true; + state.isWeatherModelInitializationValid = true; } else { ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, bulletIcon); - state.weatherModelOk = false; + state.isWeatherModelInitializationValid = false; } // Update wind input - if (state.domainAverageWindOk || state.pointInitializationOk || state.weatherModelOk) { + if (state.isDomainAverageInitializationValid || state.isPointInitializationValid || state.isWeatherModelInitializationValid) { ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, tickIcon); - state.windInputOk = true; + state.isWindInputValid = true; } else { ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, xIcon); - state.windInputOk = false; + state.isWindInputValid = false; } // Update overall input UI state - if (state.surfaceInputOk && state.windInputOk) { - state.inputsOk = true; + if (state.isSurfaceInputValid && state.isWindInputValid) { + state.isInputsValid = true; ui->treeWidget->topLevelItem(1)->setIcon(0, tickIcon); ui->treeWidget->topLevelItem(1)->setToolTip(0, ""); - } else if (!state.surfaceInputOk && !state.windInputOk) { - state.inputsOk = false; + } else if (!state.isSurfaceInputValid && !state.isWindInputValid) { + state.isInputsValid = false; ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface and wind inputs."); - } else if (!state.surfaceInputOk) { - state.inputsOk = false; + } else if (!state.isSurfaceInputValid) { + state.isInputsValid = false; ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface input."); - } else if (!state.windInputOk) { - state.inputsOk = false; + } else if (!state.isWindInputValid) { + state.isInputsValid = false; ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad wind input."); } // Update solve state - if (state.solverMethodologyOk && state.inputsOk) { + if (state.isSolverMethodologyValid && state.isInputsValid) { ui->solveButton->setEnabled(true); ui->numberOfProcessorsSolveButton->setEnabled(true); ui->solveButton->setToolTip(""); @@ -628,13 +628,13 @@ void MainWindow::massSolverCheckBoxClicked() AppState& state = AppState::instance(); // Only allow CoM or CoMM to be toggledGithub requies - if (state.useCOMMtoggled) { + if (state.isMomentumSolverToggled) { ui->massAndMomentumSolverCheckBox->setChecked(false); - state.useCOMMtoggled = ui->massAndMomentumSolverCheckBox->isChecked(); + state.isMomentumSolverToggled = ui->massAndMomentumSolverCheckBox->isChecked(); } // Update app states - state.useCOMtoggled = ui->massSolverCheckBox->isChecked(); + state.isMassSolverToggled = ui->massSolverCheckBox->isChecked(); // Run mesh calculator MainWindow::meshResolutionComboBoxCurrentIndexChanged(ui->meshResolutionComboBox->currentIndex()); @@ -649,13 +649,13 @@ void MainWindow::massAndMomentumSolverCheckBoxClicked() AppState& state = AppState::instance(); // Only allow CoM or CoMM to be toggled - if (state.useCOMtoggled) { + if (state.isMassSolverToggled) { ui->massSolverCheckBox->setChecked(false); - state.useCOMtoggled = ui->massSolverCheckBox->isChecked(); + state.isMassSolverToggled = ui->massSolverCheckBox->isChecked(); } // Update app states - state.useCOMMtoggled = ui->massAndMomentumSolverCheckBox->isChecked(); + state.isMomentumSolverToggled = ui->massAndMomentumSolverCheckBox->isChecked(); // Run mesh calculator MainWindow::meshResolutionComboBoxCurrentIndexChanged(ui->meshResolutionComboBox->currentIndex()); @@ -865,7 +865,7 @@ void MainWindow::timeZoneAllZonesCheckBoxClicked() AppState& state = AppState::instance(); // Update show all zones state - state.showAllZones = ui->timeZoneAllZonesCheckBox->isChecked(); + state.isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); emit timeZoneDataRequest(); } @@ -876,10 +876,10 @@ void MainWindow::timeZoneDetailsCheckBoxClicked() AppState& state = AppState::instance(); // Update time zone details state - state.displayTimeZoneDetails = ui->timeZoneDetailsCheckBox->isChecked(); + state.isDisplayTimeZoneDetailsSelected = ui->timeZoneDetailsCheckBox->isChecked(); // Update visibility of details pane - ui->timeZoneDetailsTextEdit->setVisible(state.displayTimeZoneDetails); + ui->timeZoneDetailsTextEdit->setVisible(state.isDisplayTimeZoneDetailsSelected); } @@ -889,7 +889,7 @@ void MainWindow::diurnalCheckBoxClicked() AppState& state = AppState::instance(); // Update UI state - state.diurnalInputToggled = ui->diurnalCheckBox->isChecked(); + state.isDiurnalInputToggled = ui->diurnalCheckBox->isChecked(); // Change the domain average input table based on diurnal wind QTableWidget* table = ui->domainAverageTable; @@ -916,7 +916,7 @@ void MainWindow::stabilityCheckBoxClicked() AppState& state = AppState::instance(); // Update UI state - state.stabilityInputToggled = ui->stabilityCheckBox->isChecked(); + state.isStabilityInputToggled = ui->stabilityCheckBox->isChecked(); refreshUI(ui); } @@ -932,14 +932,14 @@ void MainWindow::domainAverageCheckBoxClicked() AppState& state = AppState::instance(); // Update the domain average wind state - state.domainAverageWindToggled = ui->domainAverageCheckBox->isChecked(); + state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); // Only allow one wind methodology to be used - if (state.domainAverageWindToggled) { + if (state.isDomainAverageInitializationToggled) { ui->pointInitializationCheckBox->setChecked(false); ui->useWeatherModelInit->setChecked(false); - state.pointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); - state.weatherModelToggled = ui->useWeatherModelInit->isChecked(); + state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); + state.isWeatherModelInitializationToggled = ui->useWeatherModelInit->isChecked(); } // Update app state @@ -979,7 +979,7 @@ void MainWindow::clearTableButtonClicked() { ui->domainAverageTable->clearContents(); invalidDAWCells.clear(); - AppState::instance().domainAverageWindInputTableOk = true; + AppState::instance().isDomainAverageWindInputTableValid = true; refreshUI(ui); } @@ -1055,7 +1055,7 @@ void MainWindow::domainAverageTableCellChanged(int row, int column) item->setToolTip(""); } - AppState::instance().domainAverageWindInputTableOk = invalidDAWCells.isEmpty(); + AppState::instance().isDomainAverageWindInputTableValid = invalidDAWCells.isEmpty(); refreshUI(ui); } @@ -1065,14 +1065,14 @@ void MainWindow::pointInitializationCheckBoxClicked() AppState& state = AppState::instance(); // Update the domain average wind state - state.pointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); + state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); // Only allow one wind methodology to be used - if (state.pointInitializationToggled) { + if (state.isPointInitializationToggled) { ui->domainAverageCheckBox->setChecked(false); ui->useWeatherModelInit->setChecked(false); - state.domainAverageWindToggled = ui->domainAverageCheckBox->isChecked(); - state.weatherModelToggled = ui->useWeatherModelInit->isChecked(); + state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); + state.isWeatherModelInitializationToggled = ui->useWeatherModelInit->isChecked(); } // Update app state @@ -1085,14 +1085,14 @@ void MainWindow::useWeatherModelInitClicked() AppState& state = AppState::instance(); // Update the domain average wind state - state.weatherModelToggled = ui->useWeatherModelInit->isChecked(); + state.isWeatherModelInitializationToggled = ui->useWeatherModelInit->isChecked(); // Only allow one wind methodology to be used - if (state.weatherModelToggled) { + if (state.isWeatherModelInitializationToggled) { ui->domainAverageCheckBox->setChecked(false); ui->pointInitializationCheckBox->setChecked(false); - state.domainAverageWindToggled = ui->domainAverageCheckBox->isChecked(); - state.pointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); + state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); + state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); } // Update app state diff --git a/src/gui/provider.cpp b/src/gui/provider.cpp index a18b5889f..bdac69fd6 100755 --- a/src/gui/provider.cpp +++ b/src/gui/provider.cpp @@ -575,7 +575,7 @@ int Provider::wxmodel_exec(WeatherModel& input) { } // Time zone data provider -QVector> Provider::getTimeZoneData(bool showAllZones) { +QVector> Provider::getTimeZoneData(bool isShowAllTimeZonesSelected) { QVector> fullData; QVector> americaData; @@ -615,7 +615,7 @@ QVector> Provider::getTimeZoneData(bool showAllZones) { file.close(); - if (showAllZones) { + if (isShowAllTimeZonesSelected) { return fullData; } else { return americaData; diff --git a/src/gui/provider.h b/src/gui/provider.h index 6e3cf9ff7..d34a2c720 100755 --- a/src/gui/provider.h +++ b/src/gui/provider.h @@ -23,7 +23,7 @@ class Provider { public: Provider(); int domain_average_exec(class DomainAverageWind& input); - QVector> getTimeZoneData(bool showAllZones); + QVector> getTimeZoneData(bool isShowAllTimeZonesSelected); QVector> parseDomainAvgTable(QTableWidget* table); vector getOutputFileNames(QString demFile, QTableWidget* table, QString meshType, int numFiles, QString outputPath); QString getKmzFilePaths(); From 8f2c8ed35ba94fea82a7a239f8cb480a140d68ff Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 1 Jul 2025 15:32:45 -0600 Subject: [PATCH 087/435] Fixed spacing on comments in mainwindow --- src/gui/mainwindow.cpp | 139 ++++++++++------------------------------- src/gui/mainwindow.h | 22 ------- src/gui/mainwindow.ui | 2 +- 3 files changed, 34 insertions(+), 129 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 398210a13..64bbd242a 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -23,51 +23,6 @@ #include #include -// Menu filtering class -class DirectoryFilterModel : public QSortFilterProxyModel { -protected: - bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override { - QFileSystemModel *fsModel = qobject_cast(sourceModel()); - if (!fsModel) return false; - - QModelIndex index = fsModel->index(source_row, 0, source_parent); - if (!index.isValid()) return false; - - // Define the download path - QFileInfo fileInfo = fsModel->fileInfo(index); - QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - - // Keep the Downloads root directory - if (fileInfo.absoluteFilePath() == downloadsPath) { - return true; - } - - // Ensure filtering applies only inside Downloads - if (!fileInfo.absoluteFilePath().startsWith(downloadsPath)) { - return false; - } - - // Allow `WXSTATIONS-*` directories - if (fileInfo.isDir() && fileInfo.fileName().toLower().startsWith("wxstations")) { - return true; - } - - // Allow files **inside** `WXSTATIONS-*` - QModelIndex parentIndex = index.parent(); - if (parentIndex.isValid()) { - QFileInfo parentInfo = fsModel->fileInfo(parentIndex); - if (parentInfo.isDir() && parentInfo.fileName().toLower().startsWith("wxstations")) { - return true; - } - } - - return false; - } -}; - -/* - * Dynamic UI handling - */ /* * Helper function to refresh the ui state of the app @@ -75,18 +30,15 @@ class DirectoryFilterModel : public QSortFilterProxyModel { */ static void refreshUI(const Ui::MainWindow* ui) { - // Alias the AppState AppState& state = AppState::instance(); - // Define state icons QIcon tickIcon(":/tick.png"); QIcon xIcon(":/cross.png"); QIcon bulletIcon(":/bullet_blue.png"); - // Enable mouse tracking on tree ui->treeWidget->setMouseTracking(true); - // Update Solver Methodology UI + // Update Solver Methodology UI if (state.isMassSolverToggled != state.isMomentumSolverToggled) { state.isSolverMethodologyValid = true; ui->treeWidget->topLevelItem(0)->setIcon(0, tickIcon); @@ -113,11 +65,7 @@ static void refreshUI(const Ui::MainWindow* ui) ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, bulletIcon); } - /* - * Primary state machine for inputs (surface, wind, etc.) - */ - - // Update surface input state + // Update surface input state if (ui->elevationInputFileLineEdit->text() != "") { state.isSurfaceInputValid = true; ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, tickIcon); @@ -128,21 +76,21 @@ static void refreshUI(const Ui::MainWindow* ui) ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, "No DEM file detected."); } - // Update diurnal input state + // Update diurnal input state if (state.isDiurnalInputToggled) { ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, tickIcon); } else { ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, bulletIcon); } - // Update stability input state + // Update stability input state if (state.isStabilityInputToggled) { ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, tickIcon); } else { ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, bulletIcon); } - // Update domain average wind state + // Update domain average initialization if (state.isDomainAverageInitializationToggled && state.isDomainAverageWindInputTableValid) { ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); @@ -157,7 +105,7 @@ static void refreshUI(const Ui::MainWindow* ui) state.isDomainAverageInitializationValid = false; } - // Update point initialization state + // Update point initialization if (state.isPointInitializationToggled) { ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, tickIcon); state.isPointInitializationValid = true; @@ -166,7 +114,7 @@ static void refreshUI(const Ui::MainWindow* ui) state.isPointInitializationValid = false; } - // Update weather model state + // Update weather model initialization if (state.isWeatherModelInitializationToggled) { ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, tickIcon); state.isWeatherModelInitializationValid = true; @@ -175,7 +123,7 @@ static void refreshUI(const Ui::MainWindow* ui) state.isWeatherModelInitializationValid = false; } - // Update wind input + // Update wind input if (state.isDomainAverageInitializationValid || state.isPointInitializationValid || state.isWeatherModelInitializationValid) { ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, tickIcon); state.isWindInputValid = true; @@ -184,7 +132,7 @@ static void refreshUI(const Ui::MainWindow* ui) state.isWindInputValid = false; } - // Update overall input UI state + // Update overall input UI state if (state.isSurfaceInputValid && state.isWindInputValid) { state.isInputsValid = true; ui->treeWidget->topLevelItem(1)->setIcon(0, tickIcon); @@ -203,7 +151,7 @@ static void refreshUI(const Ui::MainWindow* ui) ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad wind input."); } - // Update solve state + // Update solve state if (state.isSolverMethodologyValid && state.isInputsValid) { ui->solveButton->setEnabled(true); ui->numberOfProcessorsSolveButton->setEnabled(true); @@ -222,43 +170,33 @@ MainWindow::MainWindow(QWidget *parent) ui(new Ui::MainWindow) { ui->setupUi(this); - checkMessages(); - - // Set default window size resize(1200, 700); - // Immediately call a UI refresh to set initial states + // Immediately call a UI refresh to set initial states refreshUI(ui); - // Expand tree UI + ui->treeWidget->expandAll(); /* * Create file handler window for point init screen */ - - // Get the correct Downloads folder path QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - - // Enable QFileSystemModel to process directories and files + // Enable QFileSystemModel to process directories and files QFileSystemModel *model = new QFileSystemModel(this); model->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs | QDir::AllEntries); // Ensure files appear model->setRootPath(downloadsPath); - // Enable file watching so contents refresh properly + // Enable file watching so contents refresh properly model->setReadOnly(false); model->setResolveSymlinks(true); - // Create a filtering model - DirectoryFilterModel *filterModel = new DirectoryFilterModel(); - filterModel->setSourceModel(model); - - // Set the correct root index inside Downloads + // Set the correct root index inside Downloads QModelIndex rootIndex = model->index(downloadsPath); - ui->treeFileExplorer->setModel(filterModel); - ui->treeFileExplorer->setRootIndex(filterModel->mapFromSource(rootIndex)); + ui->treeFileExplorer->setModel(model); + ui->treeFileExplorer->setRootIndex(rootIndex); - // Ensure folders expand and collapse correctly + // Ensure folders expand and collapse correctly ui->treeFileExplorer->setExpandsOnDoubleClick(true); ui->treeFileExplorer->setAnimated(true); ui->treeFileExplorer->setIndentation(15); @@ -266,65 +204,57 @@ MainWindow::MainWindow(QWidget *parent) ui->treeFileExplorer->setItemsExpandable(true); ui->treeFileExplorer->setUniformRowHeights(true); - // Show only "Name" and "Date Modified" columns + // Show only "Name" and "Date Modified" columns ui->treeFileExplorer->hideColumn(1); // Hide Size column ui->treeFileExplorer->hideColumn(2); // Hide Type column - // Optional: Set column headers + // Optional: Set column headers QHeaderView *header = ui->treeFileExplorer->header(); - header->setSectionResizeMode(0, QHeaderView::Interactive); // Name fits content - header->setSectionResizeMode(3, QHeaderView::Stretch); // Date Modified stretches + header->setSectionResizeMode(0, QHeaderView::Interactive); + header->setSectionResizeMode(3, QHeaderView::Stretch); model->setHeaderData(0, Qt::Horizontal, "Name"); model->setHeaderData(3, Qt::Horizontal, "Date Modified"); - // Force model to reload children - ui->treeFileExplorer->expandAll(); // Force expand all to check visibility + ui->treeFileExplorer->expandAll(); /* * Functionality for the map widget */ - - // Enable remote content QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true); QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); - // Resolve the map file path QString filePath = QString(MAP_PATH); - //Load HTML file with Leaflet webView = new QWebEngineView(ui->mapPanelWidget); QUrl url = QUrl::fromLocalFile(filePath); webView->setUrl(url); - // Set up layout QVBoxLayout *layout = new QVBoxLayout(); layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(webView); - // Apply ui->mapPanelWidget->setLayout(layout); /* * Connect tree items to stacked tab window */ - - // Top-level items + // Top-level items ui->inputsStackedWidget->setCurrentIndex(0); ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); // Solver Methodology (Page 0) ui->treeWidget->topLevelItem(1)->setData(0, Qt::UserRole, 4); // Inputs (Page 5) ui->treeWidget->topLevelItem(2)->setData(0, Qt::UserRole, 12); // Inputs (Page 13) - // Sub-items for Solver Methodology + // Sub-items for Solver Methodology ui->treeWidget->topLevelItem(0)->child(0)->setData(0, Qt::UserRole, 2); // Conservation of Mass (Page 1) ui->treeWidget->topLevelItem(0)->child(1)->setData(0, Qt::UserRole, 3); // Conservation of Mass and Momentum (Page 2) - // Sub-items for Inputs + // Sub-items for Inputs ui->treeWidget->topLevelItem(1)->child(0)->setData(0, Qt::UserRole, 5); // Surface Input (Page 6) ui->treeWidget->topLevelItem(1)->child(1)->setData(0, Qt::UserRole, 6); // Dirunal Input (Page 7) ui->treeWidget->topLevelItem(1)->child(2)->setData(0, Qt::UserRole, 7); // Stability Input (Page 8) ui->treeWidget->topLevelItem(1)->child(3)->setData(0, Qt::UserRole, 8); // Wind Input (Page 9) - // Sub-sub-items for Wind Input + // Sub-sub-items for Wind Input QTreeWidgetItem *windInputItem = ui->treeWidget->topLevelItem(1)->child(3); windInputItem->child(0)->setData(0, Qt::UserRole, 9); // Domain Average Wind (Page 9) windInputItem->child(1)->setData(0, Qt::UserRole, 10); // Point Init (Page 10) @@ -343,30 +273,27 @@ MainWindow::MainWindow(QWidget *parent) /* * Basic initial setup steps */ - - // Surface Input window - // Set icons + // Surface Input window ui->elevationInputFileOpenButton->setIcon(QIcon(":/folder.png")); ui->elevationInputFileDownloadButton->setIcon(QIcon(":/swoop_final.png")); - // Solver window - // Update processor count and set user input default value & upper bound + // Solver window int nCPUs = QThread::idealThreadCount(); ui->availableProcessorsTextEdit->setPlainText("Available Processors: " + QString::number(nCPUs)); ui->numberOfProcessorsSpinBox->setMaximum(nCPUs); ui->numberOfProcessorsSpinBox->setValue(nCPUs); - // Wind Input -> Point Init window + // Wind Input -> Point Init window ui->downloadPointInitData->setIcon(QIcon(":/application_get")); - // Populate default location for output location + // Populate default location for output location ui->outputDirectoryTextEdit->setText(downloadsPath); ui->outputDirectoryButton->setIcon(QIcon(":/folder.png")); - // Set initial visibility of time zone details + // Set initial visibility of time zone details ui->timeZoneDetailsTextEdit->setVisible(false); - // Set initial formatting of domain average input table + // Set initial formatting of domain average input table ui->domainAverageTable->hideColumn(2); ui->domainAverageTable->hideColumn(3); ui->domainAverageTable->hideColumn(4); diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 60512a15a..45e9bb835 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -50,49 +50,27 @@ class MainWindow : public QMainWindow { private slots: void massSolverCheckBoxClicked(); void massAndMomentumSolverCheckBoxClicked(); - void elevationInputFileDownloadButtonClicked(); - void elevationInputFileOpenButtonClicked(); - void elevationInputFileLineEditTextChanged(const QString &arg1); - void meshResolutionComboBoxCurrentIndexChanged(int index); - void diurnalCheckBoxClicked(); - void stabilityCheckBoxClicked(); - void windHeightComboBoxCurrentIndexChanged(int index); - void domainAverageCheckBoxClicked(); - void treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column); - void pointInitializationCheckBoxClicked(); - void useWeatherModelInitClicked(); - void clearTableButtonClicked(); - void solveButtonClicked(); - void outputDirectoryButtonClicked(); - void numberOfProcessorsSolveButtonClicked(); - void timeZoneAllZonesCheckBoxClicked(); - void timeZoneDetailsCheckBoxClicked(); - void timeZoneComboBoxCurrentIndexChanged(int index); - void domainAverageTableCellChanged(int row, int column); - void meshResolutionMetersRadioButtonToggled(bool checked); - void meshResolutionFeetRadioButtonToggled(bool checked); - void surfaceInputDownloadCancelButtonClicked(); signals: diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 2ac41f702..ec56e2a6b 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -524,7 +524,7 @@ QFrame::Shadow::Sunken - 6 + 12 From 245d72e495078400a5849dd078983d4486d01af1 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 2 Jul 2025 12:04:26 -0600 Subject: [PATCH 088/435] Decoupled the mainwindow the the controller, will implement new classes that handle specific pages/api functionality --- src/gui/controller.cpp | 2 +- src/gui/mainwindow.cpp | 255 ++++++++++++++++++++++++++++++++--------- src/gui/mainwindow.h | 5 +- src/gui/mainwindow.ui | 10 +- 4 files changed, 208 insertions(+), 64 deletions(-) diff --git a/src/gui/controller.cpp b/src/gui/controller.cpp index 40d77c05a..971ab7126 100644 --- a/src/gui/controller.cpp +++ b/src/gui/controller.cpp @@ -123,7 +123,7 @@ BaseInput Controller::setBaseInput() { heightUnits = "m"; } - bool useMomentum = view->getUi()->massAndMomentumSolverCheckBox->isChecked() ? 1 : 0; + bool useMomentum = view->getUi()->momentumSolverCheckBox->isChecked() ? 1 : 0; int numNinjas = 1; // Count the number of ninjas, depending on the wind method being used QVector> domainAvgTable = provider.parseDomainAvgTable(view->getUi()->domainAverageTable); diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 64bbd242a..959d77e5b 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -28,7 +28,7 @@ * Helper function to refresh the ui state of the app * Called on every user input action */ -static void refreshUI(const Ui::MainWindow* ui) +void MainWindow::refreshUI() { AppState& state = AppState::instance(); @@ -174,7 +174,7 @@ MainWindow::MainWindow(QWidget *parent) resize(1200, 700); // Immediately call a UI refresh to set initial states - refreshUI(ui); + refreshUI(); ui->treeWidget->expandAll(); @@ -260,7 +260,7 @@ MainWindow::MainWindow(QWidget *parent) windInputItem->child(1)->setData(0, Qt::UserRole, 10); // Point Init (Page 10) windInputItem->child(2)->setData(0, Qt::UserRole, 11); // Weather Model (Page 11) - connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::onTreeItemClicked); + connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); connectMenuActions(); @@ -304,7 +304,7 @@ MainWindow::MainWindow(QWidget *parent) ui->elevationInputTypeStackedWidget, &QStackedWidget::setCurrentIndex); connect(ui->massSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::massSolverCheckBoxClicked); - connect(ui->massAndMomentumSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::massAndMomentumSolverCheckBoxClicked); + connect(ui->momentumSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::momentumSolverCheckBoxClicked); connect(ui->elevationInputFileDownloadButton, &QPushButton::clicked, this, &MainWindow::elevationInputFileDownloadButtonClicked); connect(ui->elevationInputFileOpenButton, &QPushButton::clicked, this, &MainWindow::elevationInputFileOpenButtonClicked); @@ -338,7 +338,6 @@ MainWindow::MainWindow(QWidget *parent) connect(ui->surfaceInputDownloadCancelButton, &QPushButton::clicked, this, &MainWindow::surfaceInputDownloadCancelButtonClicked); - } @@ -484,11 +483,8 @@ void MainWindow::connectMenuActions() connect(ui->aboutQtAction, &QAction::triggered, this, &QApplication::aboutQt); } -/* - * Click tree item helper function - */ -void MainWindow::onTreeItemClicked(QTreeWidgetItem *item, int column) { +void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { int pageIndex = item->data(column, Qt::UserRole).toInt(); if (pageIndex >= 0) { if(pageIndex >= 6) { @@ -545,49 +541,35 @@ void MainWindow::populateForecastDownloads() { ui->forecastDownloads->setExpandsOnDoubleClick(true); } -/* - * Signal and slot handlers - */ -// Use selects Conservation of Mass void MainWindow::massSolverCheckBoxClicked() { AppState& state = AppState::instance(); - // Only allow CoM or CoMM to be toggledGithub requies if (state.isMomentumSolverToggled) { - ui->massAndMomentumSolverCheckBox->setChecked(false); - state.isMomentumSolverToggled = ui->massAndMomentumSolverCheckBox->isChecked(); + ui->momentumSolverCheckBox->setChecked(false); + state.isMomentumSolverToggled = ui->momentumSolverCheckBox->isChecked(); } - - // Update app states state.isMassSolverToggled = ui->massSolverCheckBox->isChecked(); - // Run mesh calculator MainWindow::meshResolutionComboBoxCurrentIndexChanged(ui->meshResolutionComboBox->currentIndex()); - - refreshUI(ui); + refreshUI(); } // User selects Conservation of Mass and Momentum -void MainWindow::massAndMomentumSolverCheckBoxClicked() +void MainWindow::momentumSolverCheckBoxClicked() { AppState& state = AppState::instance(); - // Only allow CoM or CoMM to be toggled if (state.isMassSolverToggled) { ui->massSolverCheckBox->setChecked(false); state.isMassSolverToggled = ui->massSolverCheckBox->isChecked(); } + state.isMomentumSolverToggled = ui->momentumSolverCheckBox->isChecked(); - // Update app states - state.isMomentumSolverToggled = ui->massAndMomentumSolverCheckBox->isChecked(); - - // Run mesh calculator MainWindow::meshResolutionComboBoxCurrentIndexChanged(ui->meshResolutionComboBox->currentIndex()); - - refreshUI(ui); + refreshUI(); } @@ -633,37 +615,27 @@ void MainWindow::elevationInputFileLineEditTextChanged(const QString &arg1) GDALMinValue = minVal; GDALMaxValue = maxVal; - // Close GDALClose((GDALDatasetH)poInputDS); - // Run mesh calculator MainWindow::meshResolutionComboBoxCurrentIndexChanged(ui->meshResolutionComboBox->currentIndex()); - - refreshUI(ui); + refreshUI(); } - void MainWindow::elevationInputFileOpenButtonClicked() { QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - QString filePath = QFileDialog::getOpenFileName(this, - "Select a file", // Window title - downloadsPath, // Starting directory - "(*.tif);;All Files (*)" // Filter - ); + QString filePath = QFileDialog::getOpenFileName(this, "Select a file", downloadsPath, "(*.tif);;All Files (*)"); ui->elevationInputFileLineEdit->setText(filePath); ui->elevationInputFileLineEdit->setToolTip(filePath); } - -// User selects an elevation input file (by map import) void MainWindow::elevationInputFileDownloadButtonClicked() { int currentIndex = ui->inputsStackedWidget->currentIndex(); ui->inputsStackedWidget->setCurrentIndex(currentIndex+1); } - // User changes the mesh resolution spec for surface input +// User changes the mesh resolution spec for surface input void MainWindow::meshResolutionComboBoxCurrentIndexChanged(int index) { // Set value box enable for custom/other @@ -688,7 +660,7 @@ void MainWindow::meshResolutionComboBoxCurrentIndexChanged(int index) } #ifdef NINJAFOAM - if (ui->massAndMomentumSolverCheckBox->isChecked()) { + if (ui->momentumSolverCheckBox->isChecked()) { coarse = 25000; medium = 50000; fine = 100000; @@ -727,7 +699,7 @@ void MainWindow::meshResolutionComboBoxCurrentIndexChanged(int index) meshResolution = (XCellSize + YCellSize) / 2; #ifdef NINJAFOAM - if (ui->massAndMomentumSolverCheckBox->isChecked()) { + if (ui->momentumSolverCheckBox->isChecked()) { XLength = GDALXSize * GDALCellSize; YLength = GDALYSize * GDALCellSize; @@ -783,7 +755,99 @@ void MainWindow::meshResolutionFeetRadioButtonToggled(bool checked) // User selects a new time zone void MainWindow::timeZoneComboBoxCurrentIndexChanged(int index) { - emit timeZoneDetailsRequest(); + QString currentTimeZone = ui->timeZoneComboBox->currentText(); + + QVector matchedRow; + QFile file(":/date_time_zonespec.csv"); + + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qWarning() << "Failed to open date_time_zonespec.csv"; + qDebug() << "No data found"; + } + + QTextStream in(&file); + bool firstLine = true; + + while (!in.atEnd()) { + QString line = in.readLine(); + + if (firstLine) { + firstLine = false; + continue; // skip header + } + + QStringList tokens = line.split(",", Qt::KeepEmptyParts); + QVector row; + + for (const QString& token : tokens) + row.append(token.trimmed().remove("\"")); + + QString fullZone = row.mid(0, 1).join("/"); + + if (fullZone == currentTimeZone) { + matchedRow = row; + break; + } + } + + file.close(); + + if (matchedRow.isEmpty()) { + qDebug() << "No matching time zone found."; + } + + QString standardName = matchedRow.value(2); + QString daylightName = matchedRow.value(4); + QString stdOffsetStr = matchedRow.value(5); // Already in HH:MM:SS + QString dstAdjustStr = matchedRow.value(6); // Already in HH:MM:SS + + // Function to convert signed HH:MM:SS to total seconds + auto timeToSeconds = [](const QString& t) -> int { + QString s = t.trimmed(); + bool negative = s.startsWith('-'); + s = s.remove(QChar('+')).remove(QChar('-')); + + QStringList parts = s.split(':'); + if (parts.size() != 3) return 0; + + int h = parts[0].toInt(); + int m = parts[1].toInt(); + int sec = parts[2].toInt(); + + int total = h * 3600 + m * 60 + sec; + return negative ? -total : total; + }; + + // Convert total seconds back to HH:MM:SS with sign + auto secondsToTime = [](int totalSec) -> QString { + QChar sign = totalSec < 0 ? '-' : '+'; + totalSec = std::abs(totalSec); + + int h = totalSec / 3600; + int m = (totalSec % 3600) / 60; + int s = totalSec % 60; + + return QString("%1%2:%3:%4") + .arg(sign) + .arg(h, 2, 10, QChar('0')) + .arg(m, 2, 10, QChar('0')) + .arg(s, 2, 10, QChar('0')); + }; + + int stdSecs = timeToSeconds(stdOffsetStr); + int dstSecs = timeToSeconds(dstAdjustStr); + QString combinedOffsetStr = secondsToTime(stdSecs + dstSecs); + + QString timeZoneDetails = QString("Standard Name:\t\t%1\n" + "Daylight Name:\t\t%2\n" + "Standard Offset from UTC:\t%3\n" + "Daylight Offset from UTC:\t%4") + .arg(standardName) + .arg(daylightName) + .arg(stdOffsetStr) + .arg(combinedOffsetStr); + + ui->timeZoneDetailsTextEdit->setText(timeZoneDetails); } // User toggles show all time zones @@ -794,7 +858,64 @@ void MainWindow::timeZoneAllZonesCheckBoxClicked() // Update show all zones state state.isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); - emit timeZoneDataRequest(); + // // Call provider to get 2D vector with timezone data + bool isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); + QVector> fullData; + QVector> americaData; + QVector> displayData; + + QFile file(":/date_time_zonespec.csv"); + + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qDebug() << "Failed to open CSV file."; + displayData = fullData; + } + + QTextStream in(&file); + bool firstLine = true; + + while (!in.atEnd()) { + QString line = in.readLine(); + + if (firstLine) { + firstLine = false; + continue; + } + + QStringList tokens = line.split(",", Qt::KeepEmptyParts); + QVector row; + for (const QString& token : tokens) + row.append(token.trimmed().remove('"')); + + if (!row.isEmpty()) + fullData.append(row); + + if (!row.isEmpty()) { + QStringList parts = row[0].split("/", Qt::KeepEmptyParts); + if (!parts.isEmpty() && parts[0] == "America" || row[0] == "Pacific/Honolulu") { + americaData.append(row); + } + } + } + + file.close(); + + if (isShowAllTimeZonesSelected) { + displayData = fullData; + } else { + displayData = americaData; + } + + ui->timeZoneComboBox->clear(); + + for (const QVector& zone : displayData) { + if (!zone.isEmpty()) { + ui->timeZoneComboBox->addItem(zone[0]); + } + } + + // Default to America/Denver + ui->timeZoneComboBox->setCurrentText("America/Denver"); } // User toggles show time zone details @@ -834,7 +955,7 @@ void MainWindow::diurnalCheckBoxClicked() ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); } - refreshUI(ui); + refreshUI(); } // User selects Stability Input @@ -844,7 +965,7 @@ void MainWindow::stabilityCheckBoxClicked() // Update UI state state.isStabilityInputToggled = ui->stabilityCheckBox->isChecked(); - refreshUI(ui); + refreshUI(); } /* @@ -870,7 +991,7 @@ void MainWindow::domainAverageCheckBoxClicked() } // Update app state - refreshUI(ui); + refreshUI(); } // User changes Domain Average Wind -> Input Wind Height @@ -907,7 +1028,7 @@ void MainWindow::clearTableButtonClicked() ui->domainAverageTable->clearContents(); invalidDAWCells.clear(); AppState::instance().isDomainAverageWindInputTableValid = true; - refreshUI(ui); + refreshUI(); } // User changes a value in the domain average wind input table @@ -983,7 +1104,7 @@ void MainWindow::domainAverageTableCellChanged(int row, int column) } AppState::instance().isDomainAverageWindInputTableValid = invalidDAWCells.isEmpty(); - refreshUI(ui); + refreshUI(); } // User selects Point Initialization wind model @@ -1003,7 +1124,7 @@ void MainWindow::pointInitializationCheckBoxClicked() } // Update app state - refreshUI(ui); + refreshUI(); } // User selects Weather Model Initialization model @@ -1023,7 +1144,7 @@ void MainWindow::useWeatherModelInitClicked() } // Update app state - refreshUI(ui); + refreshUI(); } // User selects a new output location @@ -1051,7 +1172,30 @@ void MainWindow::numberOfProcessorsSolveButtonClicked() // User selects the primary solve Button void MainWindow::solveButtonClicked() { - emit solveRequest(); + // // Alias app state, used to determine which type of solution to run + // AppState& state = AppState::instance(); + + // // Determine which run to perform + // if (state.isDomainAverageInitializationValid) { + // DomainAverageWind domainAvgWind = setDomainAverageWind(); + // provider.domain_average_exec(domainAvgWind); + // }else if(state.isPointInitializationValid){ + // PointInitialization pointInit = setPointInitialization(); + // provider.point_exec(pointInit); + // }else if(state.isWeatherModelInitializationValid){ + // WeatherModel weatherModel = setWeatherModel(); + // provider.wxmodel_exec(weatherModel); + // } + + + // vector outputFileList = provider.getOutputFileNames( + // view->getUi()->elevationInputFileLineEdit->text(), + // view->getUi()->domainAverageTable, + // view->getUi()->meshResolutionSpinBox->text(), + // provider.parseDomainAvgTable(view->getUi()->domainAverageTable).size(), + // view->getUi()->outputDirectoryTextEdit->toPlainText()); + + // view->loadMapKMZ(outputFileList); } // Enable double clicking on tree menu items @@ -1060,7 +1204,7 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) if (item->text(0) == "Conservation of Mass") { ui->massSolverCheckBox->click(); } else if (item->text(0) == "Conservation of Mass and Momentum") { - ui->massAndMomentumSolverCheckBox->click(); + ui->momentumSolverCheckBox->click(); } else if (item->text(0) == "Diurnal Input") { ui->diurnalCheckBox->click(); } else if (item->text(0) == "Stability Input") { @@ -1130,7 +1274,6 @@ void MainWindow::checkMessages(void) { ** ABORT -> There is a fundamental problem with windninja, and it should call ** abort() after displaying a message. */ - bool MainWindow::NinjaCheckVersions(char * mostrecentversion, char * localversion) { char comparemostrecentversion[256]; char comparelocalversion[256]; diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 45e9bb835..a7c8bc87c 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -32,6 +32,7 @@ class MainWindow : public QMainWindow { void populateForecastDownloads(); void toggleExpandCollapse(const QModelIndex &index); void loadMapKMZ(const std::vector& input); + void refreshUI(); // GDAL Values QString GDALDriverName, GDALDriverLongName; @@ -49,7 +50,7 @@ class MainWindow : public QMainWindow { private slots: void massSolverCheckBoxClicked(); - void massAndMomentumSolverCheckBoxClicked(); + void momentumSolverCheckBoxClicked(); void elevationInputFileDownloadButtonClicked(); void elevationInputFileOpenButtonClicked(); void elevationInputFileLineEditTextChanged(const QString &arg1); @@ -112,7 +113,7 @@ private slots: void submitBugReport(); void connectMenuActions(); - void onTreeItemClicked(QTreeWidgetItem *item, int column); + void treeItemClicked(QTreeWidgetItem *item, int column); QSet> invalidDAWCells; // DEM inputs diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index ec56e2a6b..8194b5417 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -524,7 +524,7 @@ QFrame::Shadow::Sunken - 12 + 3 @@ -656,7 +656,7 @@ li.checked::marker { content: "\2612"; } - + 5 @@ -671,7 +671,7 @@ li.checked::marker { content: "\2612"; } 5 - + PointingHandCursor @@ -681,7 +681,7 @@ li.checked::marker { content: "\2612"; } - + 8 @@ -706,7 +706,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical From 67b198480adc313fb02944ce88594ce47f8359f7 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 3 Jul 2025 10:21:33 -0600 Subject: [PATCH 089/435] Added dem fetching and time zone functions to SurfaceInput, cleaned up comments and spacing in MainWindow --- src/gui/CMakeLists.txt | 7 +- src/gui/controller.cpp | 6 +- src/gui/controller.h | 2 +- src/gui/main.cpp | 3 - src/gui/mainwindow.cpp | 236 +++++++++------------------------------ src/gui/mainwindow.h | 6 +- src/gui/mainwindow.ui | 2 +- src/gui/provider.cpp | 2 +- src/gui/provider.h | 2 +- src/gui/surfaceinput.cpp | 164 +++++++++++++++++++++++++++ src/gui/surfaceinput.h | 21 ++++ 11 files changed, 254 insertions(+), 197 deletions(-) create mode 100644 src/gui/surfaceinput.cpp create mode 100644 src/gui/surfaceinput.h diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index f700bbc80..abb8631dd 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -26,12 +26,11 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) ${PROJECT_SOURCES} ${CMAKE_SOURCE_DIR}/wn-resources.qrc appstate.h - provider.cpp - modeldata.h provider.h - controller.h - controller.cpp + modeldata.h splashscreen.h splashscreen.cpp + surfaceinput.h + surfaceinput.cpp ) # Define target properties for Android with Qt 6 as: diff --git a/src/gui/controller.cpp b/src/gui/controller.cpp index 971ab7126..b1c255581 100644 --- a/src/gui/controller.cpp +++ b/src/gui/controller.cpp @@ -9,7 +9,7 @@ Controller::Controller(MainWindow* view, QObject* parent) { connect(view, &MainWindow::solveRequest, this, &Controller::onSolveRequest); connect(view, &MainWindow::timeZoneDataRequest, this, &Controller::onTimeZoneDataRequest); - connect(view, &MainWindow::timeZoneDetailsRequest, this, &Controller::onTimeZoneDetailsRequest); + connect(view, &MainWindow::timeZoneDetailsRequest, this, &Controller::ontimeZoneDetailsRequest); connect(view, &MainWindow::getDEMrequest, this, &Controller::onGetDEMrequest); } @@ -62,9 +62,9 @@ void Controller::onTimeZoneDataRequest() { } // Get time zone details from provider -void Controller::onTimeZoneDetailsRequest() { +void Controller::ontimeZoneDetailsRequest() { QString currentTimeZone = view->getUi()->timeZoneComboBox->currentText(); - QString timeZoneDetails = provider.getTimeZoneDetails(currentTimeZone); + QString timeZoneDetails = provider.gettimeZoneDetails(currentTimeZone); // Set value in ui view->getUi()->timeZoneDetailsTextEdit->setText(timeZoneDetails); diff --git a/src/gui/controller.h b/src/gui/controller.h index f3b38ee4d..568fa7d70 100644 --- a/src/gui/controller.h +++ b/src/gui/controller.h @@ -23,7 +23,7 @@ class Controller : public QObject { void onSolveRequest(); void onTimeZoneDataRequest(); - void onTimeZoneDetailsRequest(); + void ontimeZoneDetailsRequest(); void onGetDEMrequest(std::array boundsBox, QString outputFile); }; diff --git a/src/gui/main.cpp b/src/gui/main.cpp index dfb8b62a4..81c182088 100755 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -8,7 +8,6 @@ #include #include #include -#include "controller.h" #include "splashscreen.h" @@ -41,8 +40,6 @@ int main(int argc, char *argv[]) { return 1; } - Controller controller(w); - // Immediately pull timezone data QTimer::singleShot(0, w, &MainWindow::timeZoneDataRequest); diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 959d77e5b..56bd95171 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -22,6 +22,7 @@ #include #include #include +#include "../ninja/windninja.h" /* @@ -337,6 +338,7 @@ MainWindow::MainWindow(QWidget *parent) connect(ui->meshResolutionFeetRadioButton, &QRadioButton::toggled, this, &MainWindow::meshResolutionFeetRadioButtonToggled); connect(ui->surfaceInputDownloadCancelButton, &QPushButton::clicked, this, &MainWindow::surfaceInputDownloadCancelButtonClicked); + connect(ui->surfaceInputDownloadButton, &QPushButton::clicked, this, &MainWindow::surfaceInputDownloadButtonClicked); } @@ -756,97 +758,7 @@ void MainWindow::meshResolutionFeetRadioButtonToggled(bool checked) void MainWindow::timeZoneComboBoxCurrentIndexChanged(int index) { QString currentTimeZone = ui->timeZoneComboBox->currentText(); - - QVector matchedRow; - QFile file(":/date_time_zonespec.csv"); - - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - qWarning() << "Failed to open date_time_zonespec.csv"; - qDebug() << "No data found"; - } - - QTextStream in(&file); - bool firstLine = true; - - while (!in.atEnd()) { - QString line = in.readLine(); - - if (firstLine) { - firstLine = false; - continue; // skip header - } - - QStringList tokens = line.split(",", Qt::KeepEmptyParts); - QVector row; - - for (const QString& token : tokens) - row.append(token.trimmed().remove("\"")); - - QString fullZone = row.mid(0, 1).join("/"); - - if (fullZone == currentTimeZone) { - matchedRow = row; - break; - } - } - - file.close(); - - if (matchedRow.isEmpty()) { - qDebug() << "No matching time zone found."; - } - - QString standardName = matchedRow.value(2); - QString daylightName = matchedRow.value(4); - QString stdOffsetStr = matchedRow.value(5); // Already in HH:MM:SS - QString dstAdjustStr = matchedRow.value(6); // Already in HH:MM:SS - - // Function to convert signed HH:MM:SS to total seconds - auto timeToSeconds = [](const QString& t) -> int { - QString s = t.trimmed(); - bool negative = s.startsWith('-'); - s = s.remove(QChar('+')).remove(QChar('-')); - - QStringList parts = s.split(':'); - if (parts.size() != 3) return 0; - - int h = parts[0].toInt(); - int m = parts[1].toInt(); - int sec = parts[2].toInt(); - - int total = h * 3600 + m * 60 + sec; - return negative ? -total : total; - }; - - // Convert total seconds back to HH:MM:SS with sign - auto secondsToTime = [](int totalSec) -> QString { - QChar sign = totalSec < 0 ? '-' : '+'; - totalSec = std::abs(totalSec); - - int h = totalSec / 3600; - int m = (totalSec % 3600) / 60; - int s = totalSec % 60; - - return QString("%1%2:%3:%4") - .arg(sign) - .arg(h, 2, 10, QChar('0')) - .arg(m, 2, 10, QChar('0')) - .arg(s, 2, 10, QChar('0')); - }; - - int stdSecs = timeToSeconds(stdOffsetStr); - int dstSecs = timeToSeconds(dstAdjustStr); - QString combinedOffsetStr = secondsToTime(stdSecs + dstSecs); - - QString timeZoneDetails = QString("Standard Name:\t\t%1\n" - "Daylight Name:\t\t%2\n" - "Standard Offset from UTC:\t%3\n" - "Daylight Offset from UTC:\t%4") - .arg(standardName) - .arg(daylightName) - .arg(stdOffsetStr) - .arg(combinedOffsetStr); - + QString timeZoneDetails = surfaceInput.fetchTimeZoneDetails(currentTimeZone); ui->timeZoneDetailsTextEdit->setText(timeZoneDetails); } @@ -854,60 +766,12 @@ void MainWindow::timeZoneComboBoxCurrentIndexChanged(int index) void MainWindow::timeZoneAllZonesCheckBoxClicked() { AppState& state = AppState::instance(); - - // Update show all zones state state.isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); - // // Call provider to get 2D vector with timezone data - bool isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); - QVector> fullData; - QVector> americaData; - QVector> displayData; - - QFile file(":/date_time_zonespec.csv"); - - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - qDebug() << "Failed to open CSV file."; - displayData = fullData; - } - - QTextStream in(&file); - bool firstLine = true; - - while (!in.atEnd()) { - QString line = in.readLine(); - - if (firstLine) { - firstLine = false; - continue; - } - - QStringList tokens = line.split(",", Qt::KeepEmptyParts); - QVector row; - for (const QString& token : tokens) - row.append(token.trimmed().remove('"')); - - if (!row.isEmpty()) - fullData.append(row); - - if (!row.isEmpty()) { - QStringList parts = row[0].split("/", Qt::KeepEmptyParts); - if (!parts.isEmpty() && parts[0] == "America" || row[0] == "Pacific/Honolulu") { - americaData.append(row); - } - } - } - - file.close(); - - if (isShowAllTimeZonesSelected) { - displayData = fullData; - } else { - displayData = americaData; - } + bool isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); + QVector> displayData = surfaceInput.fetchAllTimeZones(isShowAllTimeZonesSelected); ui->timeZoneComboBox->clear(); - for (const QVector& zone : displayData) { if (!zone.isEmpty()) { ui->timeZoneComboBox->addItem(zone[0]); @@ -918,28 +782,18 @@ void MainWindow::timeZoneAllZonesCheckBoxClicked() ui->timeZoneComboBox->setCurrentText("America/Denver"); } -// User toggles show time zone details void MainWindow::timeZoneDetailsCheckBoxClicked() { AppState& state = AppState::instance(); - - // Update time zone details state state.isDisplayTimeZoneDetailsSelected = ui->timeZoneDetailsCheckBox->isChecked(); - - // Update visibility of details pane ui->timeZoneDetailsTextEdit->setVisible(state.isDisplayTimeZoneDetailsSelected); - } -// User selects Diurnal Input void MainWindow::diurnalCheckBoxClicked() { AppState& state = AppState::instance(); - - // Update UI state state.isDiurnalInputToggled = ui->diurnalCheckBox->isChecked(); - // Change the domain average input table based on diurnal wind QTableWidget* table = ui->domainAverageTable; if (!ui->diurnalCheckBox->isChecked()) { table->hideColumn(2); @@ -958,31 +812,19 @@ void MainWindow::diurnalCheckBoxClicked() refreshUI(); } -// User selects Stability Input void MainWindow::stabilityCheckBoxClicked() { AppState& state = AppState::instance(); - - // Update UI state state.isStabilityInputToggled = ui->stabilityCheckBox->isChecked(); + refreshUI(); } -/* - * Wind Inputs - */ - -// Domain Average Wind - -// User selects Domain Average Wind void MainWindow::domainAverageCheckBoxClicked() { AppState& state = AppState::instance(); - - // Update the domain average wind state state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); - // Only allow one wind methodology to be used if (state.isDomainAverageInitializationToggled) { ui->pointInitializationCheckBox->setChecked(false); ui->useWeatherModelInit->setChecked(false); @@ -990,11 +832,9 @@ void MainWindow::domainAverageCheckBoxClicked() state.isWeatherModelInitializationToggled = ui->useWeatherModelInit->isChecked(); } - // Update app state refreshUI(); } -// User changes Domain Average Wind -> Input Wind Height void MainWindow::windHeightComboBoxCurrentIndexChanged(int index) { switch(index) { @@ -1022,16 +862,17 @@ void MainWindow::windHeightComboBoxCurrentIndexChanged(int index) } } -// User clears the domain average wind input table void MainWindow::clearTableButtonClicked() { + AppState& state = AppState::instance(); + AppState::instance().isDomainAverageWindInputTableValid = true; + ui->domainAverageTable->clearContents(); invalidDAWCells.clear(); - AppState::instance().isDomainAverageWindInputTableValid = true; + refreshUI(); } -// User changes a value in the domain average wind input table void MainWindow::domainAverageTableCellChanged(int row, int column) { QTableWidget* table = ui->domainAverageTable; @@ -1107,15 +948,11 @@ void MainWindow::domainAverageTableCellChanged(int row, int column) refreshUI(); } -// User selects Point Initialization wind model void MainWindow::pointInitializationCheckBoxClicked() { AppState& state = AppState::instance(); - - // Update the domain average wind state state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); - // Only allow one wind methodology to be used if (state.isPointInitializationToggled) { ui->domainAverageCheckBox->setChecked(false); ui->useWeatherModelInit->setChecked(false); @@ -1123,19 +960,15 @@ void MainWindow::pointInitializationCheckBoxClicked() state.isWeatherModelInitializationToggled = ui->useWeatherModelInit->isChecked(); } - // Update app state refreshUI(); } -// User selects Weather Model Initialization model void MainWindow::useWeatherModelInitClicked() { AppState& state = AppState::instance(); - // Update the domain average wind state state.isWeatherModelInitializationToggled = ui->useWeatherModelInit->isChecked(); - // Only allow one wind methodology to be used if (state.isWeatherModelInitializationToggled) { ui->domainAverageCheckBox->setChecked(false); ui->pointInitializationCheckBox->setChecked(false); @@ -1143,11 +976,9 @@ void MainWindow::useWeatherModelInitClicked() state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); } - // Update app state refreshUI(); } -// User selects a new output location void MainWindow::outputDirectoryButtonClicked() { QString currentPath = ui->outputDirectoryTextEdit->toPlainText(); @@ -1163,13 +994,11 @@ void MainWindow::outputDirectoryButtonClicked() } } -// User selects the solve Button on the solver page void MainWindow::numberOfProcessorsSolveButtonClicked() { ui->solveButton->click(); } -// User selects the primary solve Button void MainWindow::solveButtonClicked() { // // Alias app state, used to determine which type of solution to run @@ -1198,7 +1027,6 @@ void MainWindow::solveButtonClicked() // view->loadMapKMZ(outputFileList); } -// Enable double clicking on tree menu items void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) { if (item->text(0) == "Conservation of Mass") { @@ -1239,6 +1067,50 @@ void MainWindow::surfaceInputDownloadCancelButtonClicked() ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); } +void MainWindow::surfaceInputDownloadButtonClicked() +{ + double boundingBox[] = { ui->boundingBoxNorthLineEdit->text().toDouble(), + ui->boundingBoxEastLineEdit->text().toDouble(), + ui->boundingBoxSouthLineEdit->text().toDouble(), + ui->boundingBoxWestLineEdit->text().toDouble(), + }; + + double resolution = 30; + + QString defaultName = ""; + QString filter = "TIF Files (*.tif)"; + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + QDir dir(downloadsPath); + QString fullPath = dir.filePath(defaultName); + QString demFilePath = QFileDialog::getSaveFileName(this, "Save DEM File", fullPath, filter); + + if (!demFilePath.endsWith(".tif", Qt::CaseInsensitive)) { + demFilePath += ".tif"; + } + + std::string demFile = demFilePath.toStdString(); + + std::string fetchType; + switch(ui->elevationFileTypeComboBox->currentIndex()) + { + case 0: + fetchType = "srtm"; + break; + case 1: + fetchType = "gmted"; + break; + case 2: + fetchType = "lcp"; + break; + } + + int result = surfaceInput.fetchDEMFile(boundingBox, demFile, resolution, fetchType); + + ui->elevationInputFileLineEdit->setText(demFilePath); + int currentIndex = ui->inputsStackedWidget->currentIndex(); + ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); +} + /* ** Check for version updates, or messages from the server. */ diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index a7c8bc87c..77329a81b 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -16,6 +16,7 @@ #include "ninja_version.h" #include "cpl_http.h" +#include "surfaceinput.h" QT_BEGIN_NAMESPACE @@ -24,7 +25,8 @@ class MainWindow; } QT_END_NAMESPACE -class MainWindow : public QMainWindow { +class MainWindow : public QMainWindow +{ Q_OBJECT public: @@ -73,6 +75,7 @@ private slots: void meshResolutionMetersRadioButtonToggled(bool checked); void meshResolutionFeetRadioButtonToggled(bool checked); void surfaceInputDownloadCancelButtonClicked(); + void surfaceInputDownloadButtonClicked(); signals: void solveRequest(); @@ -127,6 +130,7 @@ private slots: Ui::MainWindow *ui; QWebEngineView *webView; + SurfaceInput surfaceInput; bool NinjaCheckVersions(char * mostrecentversion, char * localversion); char * NinjaQueryServerMessages(bool checkAbort); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 8194b5417..5f9dd7165 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -524,7 +524,7 @@ QFrame::Shadow::Sunken - 3 + 6 diff --git a/src/gui/provider.cpp b/src/gui/provider.cpp index bdac69fd6..7e9ac22bb 100755 --- a/src/gui/provider.cpp +++ b/src/gui/provider.cpp @@ -624,7 +624,7 @@ QVector> Provider::getTimeZoneData(bool isShowAllTimeZonesSelec } // Provider for getting time zone details -QString Provider::getTimeZoneDetails(const QString& currentTimeZone) { +QString Provider::gettimeZoneDetails(const QString& currentTimeZone) { QVector matchedRow; QFile file(":/date_time_zonespec.csv"); diff --git a/src/gui/provider.h b/src/gui/provider.h index d34a2c720..a8f1ede34 100755 --- a/src/gui/provider.h +++ b/src/gui/provider.h @@ -27,7 +27,7 @@ class Provider { QVector> parseDomainAvgTable(QTableWidget* table); vector getOutputFileNames(QString demFile, QTableWidget* table, QString meshType, int numFiles, QString outputPath); QString getKmzFilePaths(); - QString getTimeZoneDetails(const QString& currentTimeZone); + QString gettimeZoneDetails(const QString& currentTimeZone); void setMapLayers(); int point_exec(class PointInitialization& input); int wxmodel_exec(class WeatherModel& input); diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp new file mode 100644 index 000000000..483f83a2f --- /dev/null +++ b/src/gui/surfaceinput.cpp @@ -0,0 +1,164 @@ +#include "surfaceinput.h" +#include + +SurfaceInput::SurfaceInput() +{ +} + +QString SurfaceInput::fetchTimeZoneDetails(QString currentTimeZone) { + QVector matchedRow; + QFile file(":/date_time_zonespec.csv"); + + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qWarning() << "Failed to open date_time_zonespec.csv"; + qDebug() << "No data found"; + } + + QTextStream in(&file); + bool firstLine = true; + + while (!in.atEnd()) { + QString line = in.readLine(); + + if (firstLine) { + firstLine = false; + continue; // skip header + } + + QStringList tokens = line.split(",", Qt::KeepEmptyParts); + QVector row; + + for (const QString& token : tokens) + row.append(token.trimmed().remove("\"")); + + QString fullZone = row.mid(0, 1).join("/"); + + if (fullZone == currentTimeZone) { + matchedRow = row; + break; + } + } + + file.close(); + + if (matchedRow.isEmpty()) { + qDebug() << "No matching time zone found."; + } + + QString standardName = matchedRow.value(2); + QString daylightName = matchedRow.value(4); + QString stdOffsetStr = matchedRow.value(5); // Already in HH:MM:SS + QString dstAdjustStr = matchedRow.value(6); // Already in HH:MM:SS + + // Function to convert signed HH:MM:SS to total seconds + auto timeToSeconds = [](const QString& t) -> int { + QString s = t.trimmed(); + bool negative = s.startsWith('-'); + s = s.remove(QChar('+')).remove(QChar('-')); + + QStringList parts = s.split(':'); + if (parts.size() != 3) return 0; + + int h = parts[0].toInt(); + int m = parts[1].toInt(); + int sec = parts[2].toInt(); + + int total = h * 3600 + m * 60 + sec; + return negative ? -total : total; + }; + + // Convert total seconds back to HH:MM:SS with sign + auto secondsToTime = [](int totalSec) -> QString { + QChar sign = totalSec < 0 ? '-' : '+'; + totalSec = std::abs(totalSec); + + int h = totalSec / 3600; + int m = (totalSec % 3600) / 60; + int s = totalSec % 60; + + return QString("%1%2:%3:%4") + .arg(sign) + .arg(h, 2, 10, QChar('0')) + .arg(m, 2, 10, QChar('0')) + .arg(s, 2, 10, QChar('0')); + }; + + int stdSecs = timeToSeconds(stdOffsetStr); + int dstSecs = timeToSeconds(dstAdjustStr); + QString combinedOffsetStr = secondsToTime(stdSecs + dstSecs); + + return QString("Standard Name:\t\t%1\n" + "Daylight Name:\t\t%2\n" + "Standard Offset from UTC:\t%3\n" + "Daylight Offset from UTC:\t%4") + .arg(standardName) + .arg(daylightName) + .arg(stdOffsetStr) + .arg(combinedOffsetStr); + +} + +QVector> SurfaceInput::fetchAllTimeZones(bool isShowAllTimeZonesSelected) +{ + QVector> fullData; + QVector> americaData; + + QFile file(":/date_time_zonespec.csv"); + + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qDebug() << "Failed to open CSV file."; + return fullData; + } + + QTextStream in(&file); + bool firstLine = true; + + while (!in.atEnd()) { + QString line = in.readLine(); + + if (firstLine) { + firstLine = false; + continue; + } + + QStringList tokens = line.split(",", Qt::KeepEmptyParts); + QVector row; + for (const QString& token : tokens) + row.append(token.trimmed().remove('"')); + + if (!row.isEmpty()) + fullData.append(row); + + if (!row.isEmpty()) { + QStringList parts = row[0].split("/", Qt::KeepEmptyParts); + if (!parts.isEmpty() && parts[0] == "America" || row[0] == "Pacific/Honolulu") { + americaData.append(row); + } + } + } + + file.close(); + + if (isShowAllTimeZonesSelected) { + return fullData; + } else { + return americaData; + } +} + +int SurfaceInput::fetchDEMFile(double boundingBox[], std::string demFile, double resolution, std::string fetchType) +{ + NinjaArmyH* ninjaArmy = NULL; + char ** papszOptions = NULL; + NinjaErr err = 0; + + err = NinjaFetchDEMBBox(ninjaArmy, boundingBox, demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); + if (err != NINJA_SUCCESS){ + qDebug() << "NinjaFetchDEMBBox: err =" << err; + return err; + } + else + { + return NINJA_SUCCESS; + } +} diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h new file mode 100644 index 000000000..e93e19ae7 --- /dev/null +++ b/src/gui/surfaceinput.h @@ -0,0 +1,21 @@ +#ifndef SURFACEINPUT_H +#define SURFACEINPUT_H + +#include +#include "../ninja/windninja.h" + +class SurfaceInput +{ +public: + SurfaceInput(); + + QString fetchTimeZoneDetails(QString currentTimeZone); + QVector> fetchAllTimeZones(bool isShowAllTimeZonesSelected); + int fetchDEMFile(double boundingBox[], std::string demFile, double resolution, std::string fetchType); + +private: + +}; + +#endif // SURFACEINPUT_H + From d700125dade7bdef374bb38051f2d808d0cd9fe0 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 3 Jul 2025 12:00:52 -0600 Subject: [PATCH 090/435] Fixed some file issues with downloading and opening a surface input, started work on implementing gdal calculations in SurfaceInput class --- src/gui/mainwindow.cpp | 171 ++++++--------------------------------- src/gui/mainwindow.h | 4 +- src/gui/surfaceinput.cpp | 132 ++++++++++++++++++++++++++++++ src/gui/surfaceinput.h | 9 +++ 4 files changed, 169 insertions(+), 147 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 56bd95171..5d5f0f75f 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -558,8 +558,6 @@ void MainWindow::massSolverCheckBoxClicked() refreshUI(); } - -// User selects Conservation of Mass and Momentum void MainWindow::momentumSolverCheckBoxClicked() { AppState& state = AppState::instance(); @@ -574,61 +572,37 @@ void MainWindow::momentumSolverCheckBoxClicked() refreshUI(); } - -// User selects an elevation input file (by file) void MainWindow::elevationInputFileLineEditTextChanged(const QString &arg1) { - // Get GDAL data information on DEM input - QString fileName = ui->elevationInputFileLineEdit->text(); - double adfGeoTransform[6]; - GDALDataset *poInputDS; - poInputDS = (GDALDataset*)GDALOpen(fileName.toStdString().c_str(), GA_ReadOnly); - - // Set driver info - GDALDriverName = poInputDS->GetDriver()->GetDescription(); - GDALDriverLongName = poInputDS->GetDriver()->GetMetadataItem(GDAL_DMD_LONGNAME); - - // get x and y dimensions - GDALXSize = poInputDS->GetRasterXSize(); - GDALYSize = poInputDS->GetRasterYSize(); - - // Calculate cell size - if (poInputDS->GetGeoTransform(adfGeoTransform) == CE_None) { - double c1, c2; - c1 = adfGeoTransform[1]; - c2 = adfGeoTransform[5]; - if (abs(c1) == abs(c2)) { - GDALCellSize = abs(c1); - } else { - GDALClose((GDALDatasetH)poInputDS); - } - } - - // Get GDAL min/max values - GDALRasterBand* band = poInputDS->GetRasterBand(1); - int gotMin = 0, gotMax = 0; - double minVal = band->GetMinimum(&gotMin); - double maxVal = band->GetMaximum(&gotMax); - - if (!gotMin || !gotMax) { - band->ComputeStatistics(false, &minVal, &maxVal, nullptr, nullptr, nullptr, nullptr); - } - - GDALMinValue = minVal; - GDALMaxValue = maxVal; - - GDALClose((GDALDatasetH)poInputDS); - + surfaceInput.computeDEMFile(currentDemFilePath); MainWindow::meshResolutionComboBoxCurrentIndexChanged(ui->meshResolutionComboBox->currentIndex()); + refreshUI(); } void MainWindow::elevationInputFileOpenButtonClicked() { - QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - QString filePath = QFileDialog::getOpenFileName(this, "Select a file", downloadsPath, "(*.tif);;All Files (*)"); - ui->elevationInputFileLineEdit->setText(filePath); - ui->elevationInputFileLineEdit->setToolTip(filePath); + QString directoryPath; + if(!currentDemFilePath.isEmpty()) + { + directoryPath = currentDemFilePath; + } + else { + directoryPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + } + QString demFilePath = QFileDialog::getOpenFileName(this, "Select a file", directoryPath, "(*.tif);;All Files (*)"); + + if (demFilePath.isEmpty()) { + if (!currentDemFilePath.isEmpty()) { + ui->elevationInputFileLineEdit->setText(QFileInfo(currentDemFilePath).fileName()); + ui->elevationInputFileLineEdit->setToolTip(currentDemFilePath); + } + return; + } + + currentDemFilePath = demFilePath; + ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); + ui->elevationInputFileLineEdit->setToolTip(demFilePath); } void MainWindow::elevationInputFileDownloadButtonClicked() @@ -646,97 +620,6 @@ void MainWindow::meshResolutionComboBoxCurrentIndexChanged(int index) } else { ui->meshResolutionSpinBox->setEnabled(false); } - - // default values are native mesh values - - int coarse = 4000; - int medium = 10000; - int fine = 20000; - double meshResolution = 200.0; - - // initial run values, a dem file has not yet been selected - if( GDALCellSize == 0.0 || GDALXSize == 0 || GDALYSize == 0 ) - { - ui->meshResolutionSpinBox->setValue(meshResolution); - return; - } - -#ifdef NINJAFOAM - if (ui->momentumSolverCheckBox->isChecked()) { - coarse = 25000; - medium = 50000; - fine = 100000; - } -#endif //NINJAFOAM - - int targetNumHorizCells = fine; - switch (index) { - case 0: - targetNumHorizCells = coarse; - break; - case 1: - targetNumHorizCells = medium; - break; - case 2: - targetNumHorizCells = fine; - break; - case 3: - ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value()); - return; - default: - ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value()); - return; - } - - // default values are native mesh values - - double XLength = GDALXSize * GDALCellSize; - double YLength = GDALYSize * GDALCellSize; - double nXcells = 2 * std::sqrt((double)targetNumHorizCells) * (XLength / (XLength + YLength)); - double nYcells = 2 * std::sqrt((double)targetNumHorizCells) * (YLength / (XLength + YLength)); - - double XCellSize = XLength / nXcells; - double YCellSize = YLength / nYcells; - - meshResolution = (XCellSize + YCellSize) / 2; - -#ifdef NINJAFOAM - if (ui->momentumSolverCheckBox->isChecked()) { - XLength = GDALXSize * GDALCellSize; - YLength = GDALYSize * GDALCellSize; - - double dz = GDALMaxValue - GDALMinValue; - double ZLength = std::max((0.1 * std::max(XLength, YLength)), (dz + 0.1 * dz)); - double zmin, zmax; - zmin = GDALMaxValue + 0.05 * ZLength; //zmin (above highest point in DEM for MDM) - zmax = GDALMaxValue + ZLength; //zmax - - double volume; - double cellCount; - double cellVolume; - - volume = XLength * YLength * (zmax-zmin); //volume of blockMesh - cellCount = targetNumHorizCells * 0.5; // cell count in volume 1 - cellVolume = volume/cellCount; // volume of 1 cell in blockMesh - double side = std::pow(cellVolume, (1.0/3.0)); // length of side of cell in blockMesh - - //determine number of rounds of refinement - int nCellsToAdd = 0; - int refinedCellCount = 0; - int nCellsInLowestLayer = int(XLength/side) * int(YLength/side); - int nRoundsRefinement = 0; - while(refinedCellCount < (0.5 * targetNumHorizCells)){ - nCellsToAdd = nCellsInLowestLayer * 8; //each cell is divided into 8 cells - refinedCellCount += nCellsToAdd - nCellsInLowestLayer; //subtract the parent cells - nCellsInLowestLayer = nCellsToAdd/2; //only half of the added cells are in the lowest layer - nRoundsRefinement += 1; - } - - meshResolution = side/(nRoundsRefinement*2.0); - } -#endif //NINJAFOAM - - ui->meshResolutionSpinBox->setValue(meshResolution); } void MainWindow::meshResolutionMetersRadioButtonToggled(bool checked) @@ -1078,16 +961,14 @@ void MainWindow::surfaceInputDownloadButtonClicked() double resolution = 30; QString defaultName = ""; - QString filter = "TIF Files (*.tif)"; QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); QDir dir(downloadsPath); QString fullPath = dir.filePath(defaultName); - QString demFilePath = QFileDialog::getSaveFileName(this, "Save DEM File", fullPath, filter); - + QString demFilePath = QFileDialog::getSaveFileName(this, "Save DEM File", fullPath, "TIF Files (*.tif)"); if (!demFilePath.endsWith(".tif", Qt::CaseInsensitive)) { demFilePath += ".tif"; } - + currentDemFilePath = demFilePath; std::string demFile = demFilePath.toStdString(); std::string fetchType; @@ -1106,7 +987,7 @@ void MainWindow::surfaceInputDownloadButtonClicked() int result = surfaceInput.fetchDEMFile(boundingBox, demFile, resolution, fetchType); - ui->elevationInputFileLineEdit->setText(demFilePath); + ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); int currentIndex = ui->inputsStackedWidget->currentIndex(); ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 77329a81b..ef470ad00 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -9,8 +9,6 @@ #include #include #include "ui_mainwindow.h" -#include "gdal_utils.h" -#include "gdal_priv.h" #include #include #include "ninja_version.h" @@ -132,6 +130,8 @@ private slots: QWebEngineView *webView; SurfaceInput surfaceInput; + QString currentDemFilePath; + bool NinjaCheckVersions(char * mostrecentversion, char * localversion); char * NinjaQueryServerMessages(bool checkAbort); void checkMessages(void); diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 483f83a2f..6d6beef9c 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -162,3 +162,135 @@ int SurfaceInput::fetchDEMFile(double boundingBox[], std::string demFile, double return NINJA_SUCCESS; } } + +int SurfaceInput::computeDEMFile(QString filePath) +{ + double adfGeoTransform[6]; + GDALDataset *poInputDS; + poInputDS = (GDALDataset*)GDALOpen(filePath.toStdString().c_str(), GA_ReadOnly); + + // Set driver info + GDALDriverName = poInputDS->GetDriver()->GetDescription(); + GDALDriverLongName = poInputDS->GetDriver()->GetMetadataItem(GDAL_DMD_LONGNAME); + + // get x and y dimensions + GDALXSize = poInputDS->GetRasterXSize(); + GDALYSize = poInputDS->GetRasterYSize(); + + // Calculate cell size + if (poInputDS->GetGeoTransform(adfGeoTransform) == CE_None) { + double c1, c2; + c1 = adfGeoTransform[1]; + c2 = adfGeoTransform[5]; + if (abs(c1) == abs(c2)) { + GDALCellSize = abs(c1); + } else { + GDALClose((GDALDatasetH)poInputDS); + } + } + + // Get GDAL min/max values + GDALRasterBand* band = poInputDS->GetRasterBand(1); + int gotMin = 0, gotMax = 0; + double minVal = band->GetMinimum(&gotMin); + double maxVal = band->GetMaximum(&gotMax); + + if (!gotMin || !gotMax) { + band->ComputeStatistics(false, &minVal, &maxVal, nullptr, nullptr, nullptr, nullptr); + } + + GDALMinValue = minVal; + GDALMaxValue = maxVal; + + GDALClose((GDALDatasetH)poInputDS); + + return 0; +} + +int SurfaceInput::computeMeshResolution(int index, bool isMomemtumChecked) +{ + int coarse = 4000; + int medium = 10000; + int fine = 20000; + double meshResolution = 200.0; + + // initial run values, a dem file has not yet been selected + if( GDALCellSize == 0.0 || GDALXSize == 0 || GDALYSize == 0 ) + { + return meshResolution; + } + +#ifdef NINJAFOAM + if (isMomemtumChecked) { + coarse = 25000; + medium = 50000; + fine = 100000; + } +#endif //NINJAFOAM + + int targetNumHorizCells = fine; + switch (index) { + case 0: + targetNumHorizCells = coarse; + break; + case 1: + targetNumHorizCells = medium; + break; + case 2: + targetNumHorizCells = fine; + break; + case 3: + return 200; + default: + return 200; + } + + double XLength = GDALXSize * GDALCellSize; + double YLength = GDALYSize * GDALCellSize; + double nXcells = 2 * std::sqrt((double)targetNumHorizCells) * (XLength / (XLength + YLength)); + double nYcells = 2 * std::sqrt((double)targetNumHorizCells) * (YLength / (XLength + YLength)); + + double XCellSize = XLength / nXcells; + double YCellSize = YLength / nYcells; + + meshResolution = (XCellSize + YCellSize) / 2; + +#ifdef NINJAFOAM + if (isMomemtumChecked) { + XLength = GDALXSize * GDALCellSize; + YLength = GDALYSize * GDALCellSize; + + double dz = GDALMaxValue - GDALMinValue; + double ZLength = std::max((0.1 * std::max(XLength, YLength)), (dz + 0.1 * dz)); + double zmin, zmax; + zmin = GDALMaxValue + 0.05 * ZLength; //zmin (above highest point in DEM for MDM) + zmax = GDALMaxValue + ZLength; //zmax + + double volume; + double cellCount; + double cellVolume; + + volume = XLength * YLength * (zmax-zmin); //volume of blockMesh + cellCount = targetNumHorizCells * 0.5; // cell count in volume 1 + cellVolume = volume/cellCount; // volume of 1 cell in blockMesh + double side = std::pow(cellVolume, (1.0/3.0)); // length of side of cell in blockMesh + + //determine number of rounds of refinement + int nCellsToAdd = 0; + int refinedCellCount = 0; + int nCellsInLowestLayer = int(XLength/side) * int(YLength/side); + int nRoundsRefinement = 0; + while(refinedCellCount < (0.5 * targetNumHorizCells)){ + nCellsToAdd = nCellsInLowestLayer * 8; //each cell is divided into 8 cells + refinedCellCount += nCellsToAdd - nCellsInLowestLayer; //subtract the parent cells + nCellsInLowestLayer = nCellsToAdd/2; //only half of the added cells are in the lowest layer + nRoundsRefinement += 1; + } + + meshResolution = side/(nRoundsRefinement*2.0); + } +#endif //NINJAFOAM + + return meshResolution; + +} diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index e93e19ae7..fdb6a8cbb 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -2,6 +2,8 @@ #define SURFACEINPUT_H #include +#include "gdal_utils.h" +#include "gdal_priv.h" #include "../ninja/windninja.h" class SurfaceInput @@ -12,8 +14,15 @@ class SurfaceInput QString fetchTimeZoneDetails(QString currentTimeZone); QVector> fetchAllTimeZones(bool isShowAllTimeZonesSelected); int fetchDEMFile(double boundingBox[], std::string demFile, double resolution, std::string fetchType); + int computeDEMFile(QString filePath); + double computeMeshResolution(int index); private: + QString GDALDriverName, GDALDriverLongName; + int GDALXSize, GDALYSize; + double GDALCellSize, GDALNoData; + double GDALMaxValue, GDALMinValue; + }; From def7c3550f18c78320dd5db134288f0a099c3dff Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 3 Jul 2025 14:51:42 -0600 Subject: [PATCH 091/435] Finished moving mesh calculations to surface input and adjusted code for time zone details --- src/gui/main.cpp | 5 +---- src/gui/mainwindow.cpp | 16 ++++++++-------- src/gui/surfaceinput.cpp | 10 +--------- src/gui/surfaceinput.h | 9 +++------ 4 files changed, 13 insertions(+), 27 deletions(-) diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 81c182088..ce8b9c4b0 100755 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -17,7 +17,7 @@ int main(int argc, char *argv[]) { char ** papszOptions = NULL; NinjaErr err = 0; - err = NinjaInit(papszOptions); + err = NinjaInit(papszOptions); //TODO: NEED TO ADD NINJA INITIALIZE FOR GUI THROUGH API if(err != NINJA_SUCCESS) { printf("NinjaInit: err = %d\n", err); @@ -40,9 +40,6 @@ int main(int argc, char *argv[]) { return 1; } - // Immediately pull timezone data - QTimer::singleShot(0, w, &MainWindow::timeZoneDataRequest); - QPixmap bigSplashPixmap(":wn-splash.png"); QSize splashSize(1200, 320); QPixmap smallSplashPixmap; diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 5d5f0f75f..ddaf3e08f 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -174,6 +174,8 @@ MainWindow::MainWindow(QWidget *parent) checkMessages(); resize(1200, 700); + timeZoneAllZonesCheckBoxClicked(); + // Immediately call a UI refresh to set initial states refreshUI(); @@ -554,7 +556,7 @@ void MainWindow::massSolverCheckBoxClicked() } state.isMassSolverToggled = ui->massSolverCheckBox->isChecked(); - MainWindow::meshResolutionComboBoxCurrentIndexChanged(ui->meshResolutionComboBox->currentIndex()); + ui->meshResolutionSpinBox->setValue(surfaceInput.computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); refreshUI(); } @@ -568,15 +570,16 @@ void MainWindow::momentumSolverCheckBoxClicked() } state.isMomentumSolverToggled = ui->momentumSolverCheckBox->isChecked(); - MainWindow::meshResolutionComboBoxCurrentIndexChanged(ui->meshResolutionComboBox->currentIndex()); + ui->meshResolutionSpinBox->setValue(surfaceInput.computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); refreshUI(); } void MainWindow::elevationInputFileLineEditTextChanged(const QString &arg1) { surfaceInput.computeDEMFile(currentDemFilePath); - MainWindow::meshResolutionComboBoxCurrentIndexChanged(ui->meshResolutionComboBox->currentIndex()); + surfaceInput.computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked()); + ui->meshResolutionSpinBox->setValue(surfaceInput.computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); refreshUI(); } @@ -611,22 +614,20 @@ void MainWindow::elevationInputFileDownloadButtonClicked() ui->inputsStackedWidget->setCurrentIndex(currentIndex+1); } -// User changes the mesh resolution spec for surface input void MainWindow::meshResolutionComboBoxCurrentIndexChanged(int index) { - // Set value box enable for custom/other if (index == 3) { ui->meshResolutionSpinBox->setEnabled(true); } else { ui->meshResolutionSpinBox->setEnabled(false); } + ui->meshResolutionSpinBox->setValue(surfaceInput.computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); } void MainWindow::meshResolutionMetersRadioButtonToggled(bool checked) { if (checked) { -// ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 0.3048); - ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value()); + ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 0.3048); } } @@ -637,7 +638,6 @@ void MainWindow::meshResolutionFeetRadioButtonToggled(bool checked) } } -// User selects a new time zone void MainWindow::timeZoneComboBoxCurrentIndexChanged(int index) { QString currentTimeZone = ui->timeZoneComboBox->currentText(); diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 6d6beef9c..a4946e3cb 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -169,15 +169,10 @@ int SurfaceInput::computeDEMFile(QString filePath) GDALDataset *poInputDS; poInputDS = (GDALDataset*)GDALOpen(filePath.toStdString().c_str(), GA_ReadOnly); - // Set driver info GDALDriverName = poInputDS->GetDriver()->GetDescription(); - GDALDriverLongName = poInputDS->GetDriver()->GetMetadataItem(GDAL_DMD_LONGNAME); - - // get x and y dimensions GDALXSize = poInputDS->GetRasterXSize(); GDALYSize = poInputDS->GetRasterYSize(); - // Calculate cell size if (poInputDS->GetGeoTransform(adfGeoTransform) == CE_None) { double c1, c2; c1 = adfGeoTransform[1]; @@ -189,12 +184,10 @@ int SurfaceInput::computeDEMFile(QString filePath) } } - // Get GDAL min/max values GDALRasterBand* band = poInputDS->GetRasterBand(1); int gotMin = 0, gotMax = 0; double minVal = band->GetMinimum(&gotMin); double maxVal = band->GetMaximum(&gotMax); - if (!gotMin || !gotMax) { band->ComputeStatistics(false, &minVal, &maxVal, nullptr, nullptr, nullptr, nullptr); } @@ -207,14 +200,13 @@ int SurfaceInput::computeDEMFile(QString filePath) return 0; } -int SurfaceInput::computeMeshResolution(int index, bool isMomemtumChecked) +double SurfaceInput::computeMeshResolution(int index, bool isMomemtumChecked) { int coarse = 4000; int medium = 10000; int fine = 20000; double meshResolution = 200.0; - // initial run values, a dem file has not yet been selected if( GDALCellSize == 0.0 || GDALXSize == 0 || GDALYSize == 0 ) { return meshResolution; diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index fdb6a8cbb..da4366422 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -15,15 +15,12 @@ class SurfaceInput QVector> fetchAllTimeZones(bool isShowAllTimeZonesSelected); int fetchDEMFile(double boundingBox[], std::string demFile, double resolution, std::string fetchType); int computeDEMFile(QString filePath); - double computeMeshResolution(int index); + double computeMeshResolution(int index, bool isMomemtumChecked); private: - QString GDALDriverName, GDALDriverLongName; + QString GDALDriverName; int GDALXSize, GDALYSize; - double GDALCellSize, GDALNoData; - double GDALMaxValue, GDALMinValue; - - + double GDALCellSize, GDALMaxValue, GDALMinValue; }; #endif // SURFACEINPUT_H From 543193a8efb696e40491b5a34562a34c55a656bd Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 7 Jul 2025 10:52:47 -0600 Subject: [PATCH 092/435] Added a menubar class to reduce the size of mainwindow --- src/gui/CMakeLists.txt | 1 + src/gui/mainwindow.cpp | 148 ++-------------------------------------- src/gui/mainwindow.h | 33 +-------- src/gui/menubar.cpp | 150 +++++++++++++++++++++++++++++++++++++++++ src/gui/menubar.h | 52 ++++++++++++++ 5 files changed, 211 insertions(+), 173 deletions(-) create mode 100644 src/gui/menubar.cpp create mode 100644 src/gui/menubar.h diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index abb8631dd..1d4c852f3 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -31,6 +31,7 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) splashscreen.cpp surfaceinput.h surfaceinput.cpp + menubar.h menubar.cpp ) # Define target properties for Android with Qt 6 as: diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index ddaf3e08f..54237f8d3 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -265,8 +265,6 @@ MainWindow::MainWindow(QWidget *parent) connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); - connectMenuActions(); - /* * Downloaded Forecast explorer */ @@ -342,149 +340,15 @@ MainWindow::MainWindow(QWidget *parent) connect(ui->surfaceInputDownloadCancelButton, &QPushButton::clicked, this, &MainWindow::surfaceInputDownloadCancelButtonClicked); connect(ui->surfaceInputDownloadButton, &QPushButton::clicked, this, &MainWindow::surfaceInputDownloadButtonClicked); + menuBar = new MenuBar(ui, this); + connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); // just close the mainWindow (behavior of the old qt4 code) + connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &MainWindow::elevationInputFileOpenButtonClicked); } - - -MainWindow::~MainWindow() { delete ui; } - -//// functions for Menu actions - -void MainWindow::newProject() -{ - printf("newProject clicked\n"); -} -void MainWindow::openProject() -{ - printf("openProject clicked\n"); -} -void MainWindow::exportSolution() -{ - printf("exportSolution clicked\n"); -} -void MainWindow::closeProject() -{ - printf("closeProject clicked\n"); -} - -void MainWindow::enableConsoleOutput() -{ - printf("enableConsoleOutput clicked\n"); -} -void MainWindow::writeConsoleOutput() -{ - printf("writeConsoleOutput clicked\n"); -} - -void MainWindow::resampleData() -{ - printf("resampleData clicked\n"); -} -void MainWindow::writeBlankStationFile() -{ - printf("writeBlankStationFile clicked\n"); -} -void MainWindow::setConfigurationOption() -{ - printf("setConfigurationOption clicked\n"); -} - -void MainWindow::displayArcGISProGuide() -{ - printf("displayArcGISProGuide clicked\n"); -} - -void MainWindow::displayTutorial1() -{ - printf("displayTutorial1 clicked\n"); -} -void MainWindow::displayTutorial2() -{ - printf("displayTutorial2 clicked\n"); -} -void MainWindow::displayTutorial3() -{ - printf("displayTutorial3 clicked\n"); -} -void MainWindow::displayTutorial4() -{ - printf("displayTutorial4 clicked\n"); -} - -void MainWindow::displayDemDownloadInstructions() -{ - printf("displayDemDownloadInstructions clicked\n"); -} -void MainWindow::displayFetchDemInstructions() -{ - printf("displayFetchDemInstructions clicked\n"); -} -void MainWindow::displayCommandLineInterfaceInstructions() -{ - printf("displayCommandLineInterfaceInstructions clicked\n"); -} - -void MainWindow::aboutWindNinja() -{ - printf("aboutWindNinja clicked\n"); -} -void MainWindow::citeWindNinja() -{ - printf("citeWindNinja clicked\n"); -} -void MainWindow::supportEmail() -{ - printf("supportEmail clicked\n"); -} -void MainWindow::submitBugReport() -{ - printf("submitBugReport clicked\n"); -} - -//// end functions for Menu actions - -void MainWindow::connectMenuActions() +MainWindow::~MainWindow() { - // QMenu fileMenu "File" actions - connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &MainWindow::elevationInputFileOpenButtonClicked); - connect(ui->newProjectAction, &QAction::triggered, this, &MainWindow::newProject); - connect(ui->openProjectAction, &QAction::triggered, this, &MainWindow::openProject); - connect(ui->exportSolutionAction, &QAction::triggered, this, &MainWindow::exportSolution); - connect(ui->closeProjectAction, &QAction::triggered, this, &MainWindow::closeProject); - //connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QCoreApplication::quit); // exit the entire app - connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); // just close the mainWindow (behavior of the old qt4 code) - - // QMenu optionsMenu "Options" actions - connect(ui->enableConsoleOutputAction, &QAction::triggered, this, &MainWindow::enableConsoleOutput); - connect(ui->writeConsoleOutputAction, &QAction::triggered, this, &MainWindow::writeConsoleOutput); - - // QMenu toolsMenu "Tools" actions - connect(ui->resampleDataAction, &QAction::triggered, this, &MainWindow::resampleData); - connect(ui->writeBlankStationFileAction, &QAction::triggered, this, &MainWindow::writeBlankStationFile); - connect(ui->setConfigurationOptionAction, &QAction::triggered, this, &MainWindow::setConfigurationOption); - - // QMenu helpMenu "Help" actions - - // sub QMenu displayingShapeFilesMenu "Displaying Shapefiles" actions - connect(ui->displayArcGISProGuideAction, &QAction::triggered, this, &MainWindow::displayArcGISProGuide); - - // sub QMenu tutorialsMenu "Tutorials" actions - connect(ui->displayTutorial1Action, &QAction::triggered, this, &MainWindow::displayTutorial1); - connect(ui->displayTutorial2Action, &QAction::triggered, this, &MainWindow::displayTutorial2); - connect(ui->displayTutorial3Action, &QAction::triggered, this, &MainWindow::displayTutorial3); - connect(ui->displayTutorial4Action, &QAction::triggered, this, &MainWindow::displayTutorial4); - - // sub QMenu instructionsMenu "Instructions" actions - connect(ui->displayDemDownloadInstructionsAction, &QAction::triggered, this, &MainWindow::displayDemDownloadInstructions); - connect(ui->displayFetchDemInstructionsAction, &QAction::triggered, this, &MainWindow::displayFetchDemInstructions); - connect(ui->displayCommandLineInterfaceInstructionsAction, &QAction::triggered, this, &MainWindow::displayCommandLineInterfaceInstructions); - - // remaining non-sub QMenu actions - connect(ui->aboutWindNinjaAction, &QAction::triggered, this, &MainWindow::aboutWindNinja); - connect(ui->citeWindNinjaAction, &QAction::triggered, this, &MainWindow::citeWindNinja); - connect(ui->supportEmailAction, &QAction::triggered, this, &MainWindow::supportEmail); - connect(ui->submitBugReportAction, &QAction::triggered, this, &MainWindow::submitBugReport); - connect(ui->aboutQtAction, &QAction::triggered, this, &QApplication::aboutQt); + delete menuBar; + delete ui; } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index ef470ad00..595847da5 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -15,6 +15,7 @@ #include "cpl_http.h" #include "surfaceinput.h" +#include "menubar.h" QT_BEGIN_NAMESPACE @@ -82,37 +83,6 @@ private slots: void getDEMrequest(std::array boundsBox, QString outputFile); private: - // functions for Menu actions - // functions for QMenu fileMenu "File" actions - void newProject(); - void openProject(); - void exportSolution(); - void closeProject(); - // functions for QMenu optionsMenu "Options" actions - void enableConsoleOutput(); - void writeConsoleOutput(); - // functions for QMenu toolsMenu "Tools" actions - void resampleData(); - void writeBlankStationFile(); - void setConfigurationOption(); - // functions for QMenu helpMenu "Help" actions - // functions for sub QMenu displayingShapeFilesMenu "Displaying Shapefiles" actions - void displayArcGISProGuide(); - // functions for sub QMenu tutorialsMenu "Tutorials" actions - void displayTutorial1(); - void displayTutorial2(); - void displayTutorial3(); - void displayTutorial4(); - // functions for sub QMenu instructionsMenu "Instructions" actions - void displayDemDownloadInstructions(); - void displayFetchDemInstructions(); - void displayCommandLineInterfaceInstructions(); - // functions for remaining non-sub QMenu actions - void aboutWindNinja(); - void citeWindNinja(); - void supportEmail(); - void submitBugReport(); - void connectMenuActions(); void treeItemClicked(QTreeWidgetItem *item, int column); QSet> invalidDAWCells; @@ -129,6 +99,7 @@ private slots: Ui::MainWindow *ui; QWebEngineView *webView; SurfaceInput surfaceInput; + MenuBar* menuBar; QString currentDemFilePath; diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp new file mode 100644 index 000000000..6efbf5fd1 --- /dev/null +++ b/src/gui/menubar.cpp @@ -0,0 +1,150 @@ +#include "menubar.h" +#include "ui_mainwindow.h" // To know about Ui::MainWindow +#include +#include + +MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) + : QObject(parent), ui(ui) +{ + // QMenu fileMenu "File" actions + connect(ui->newProjectAction, &QAction::triggered, this, &MenuBar::newProject); + connect(ui->openProjectAction, &QAction::triggered, this, &MenuBar::openProject); + connect(ui->exportSolutionAction, &QAction::triggered, this, &MenuBar::exportSolution); + connect(ui->closeProjectAction, &QAction::triggered, this, &MenuBar::closeProject); + //connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QCoreApplication::quit); // exit the entire app + // QMenu optionsMenu "Options" actions + connect(ui->enableConsoleOutputAction, &QAction::triggered, this, &MenuBar::enableConsoleOutput); + connect(ui->writeConsoleOutputAction, &QAction::triggered, this, &MenuBar::writeConsoleOutput); + + // QMenu toolsMenu "Tools" actions + connect(ui->resampleDataAction, &QAction::triggered, this, &MenuBar::resampleData); + connect(ui->writeBlankStationFileAction, &QAction::triggered, this, &MenuBar::writeBlankStationFile); + connect(ui->setConfigurationOptionAction, &QAction::triggered, this, &MenuBar::setConfigurationOption); + + // QMenu helpMenu "Help" actions + // sub QMenu displayingShapeFilesMenu "Displaying Shapefiles" actions + connect(ui->displayArcGISProGuideAction, &QAction::triggered, this, &MenuBar::displayArcGISProGuide); + + // sub QMenu tutorialsMenu "Tutorials" actions + connect(ui->displayTutorial1Action, &QAction::triggered, this, &MenuBar::displayTutorial1); + connect(ui->displayTutorial2Action, &QAction::triggered, this, &MenuBar::displayTutorial2); + connect(ui->displayTutorial3Action, &QAction::triggered, this, &MenuBar::displayTutorial3); + connect(ui->displayTutorial4Action, &QAction::triggered, this, &MenuBar::displayTutorial4); + + // sub QMenu instructionsMenu "Instructions" actions + connect(ui->displayDemDownloadInstructionsAction, &QAction::triggered, this, &MenuBar::displayDemDownloadInstructions); + connect(ui->displayFetchDemInstructionsAction, &QAction::triggered, this, &MenuBar::displayFetchDemInstructions); + connect(ui->displayCommandLineInterfaceInstructionsAction, &QAction::triggered, this, &MenuBar::displayCommandLineInterfaceInstructions); + + // remaining non-sub QMenu actions + connect(ui->aboutWindNinjaAction, &QAction::triggered, this, &MenuBar::aboutWindNinja); + connect(ui->citeWindNinjaAction, &QAction::triggered, this, &MenuBar::citeWindNinja); + connect(ui->supportEmailAction, &QAction::triggered, this, &MenuBar::supportEmail); + connect(ui->submitBugReportAction, &QAction::triggered, this, &MenuBar::submitBugReport); + connect(ui->aboutQtAction, &QAction::triggered, this, &QApplication::aboutQt); +} + +void MenuBar::newProject() +{ + qDebug() << "MenuBar: newProject() triggered"; +} + +void MenuBar::openProject() +{ + qDebug() << "MenuBar: openProject() triggered"; +} + +void MenuBar::exportSolution() +{ + qDebug() << "MenuBar: exportSolution() triggered"; +} + +void MenuBar::closeProject() +{ + qDebug() << "MenuBar: closeProject() triggered"; +} + +void MenuBar::enableConsoleOutput() +{ + qDebug() << "MenuBar: enableConsoleOutput() triggered"; +} + +void MenuBar::writeConsoleOutput() +{ + qDebug() << "MenuBar: writeConsoleOutput() triggered"; +} + +void MenuBar::resampleData() +{ + qDebug() << "MenuBar: resampleData() triggered"; +} + +void MenuBar::writeBlankStationFile() +{ + qDebug() << "MenuBar: writeBlankStationFile() triggered"; +} + +void MenuBar::setConfigurationOption() +{ + qDebug() << "MenuBar: setConfigurationOption() triggered"; +} + +void MenuBar::displayArcGISProGuide() +{ + qDebug() << "MenuBar: displayArcGISProGuide() triggered"; +} + +void MenuBar::displayTutorial1() +{ + qDebug() << "MenuBar: displayTutorial1() triggered"; +} + +void MenuBar::displayTutorial2() +{ + qDebug() << "MenuBar: displayTutorial2() triggered"; +} + +void MenuBar::displayTutorial3() +{ + qDebug() << "MenuBar: displayTutorial3() triggered"; +} + +void MenuBar::displayTutorial4() +{ + qDebug() << "MenuBar: displayTutorial4() triggered"; +} + +void MenuBar::displayDemDownloadInstructions() +{ + qDebug() << "MenuBar: displayDemDownloadInstructions() triggered"; +} + +void MenuBar::displayFetchDemInstructions() +{ + qDebug() << "MenuBar: displayFetchDemInstructions() triggered"; +} + +void MenuBar::displayCommandLineInterfaceInstructions() +{ + qDebug() << "MenuBar: displayCommandLineInterfaceInstructions() triggered"; +} + +void MenuBar::aboutWindNinja() +{ + qDebug() << "MenuBar: aboutWindNinja() triggered"; +} + +void MenuBar::citeWindNinja() +{ + qDebug() << "MenuBar: citeWindNinja() triggered"; +} + +void MenuBar::supportEmail() +{ + qDebug() << "MenuBar: supportEmail() triggered"; +} + +void MenuBar::submitBugReport() +{ + qDebug() << "MenuBar: submitBugReport() triggered"; +} diff --git a/src/gui/menubar.h b/src/gui/menubar.h new file mode 100644 index 000000000..10cf33f63 --- /dev/null +++ b/src/gui/menubar.h @@ -0,0 +1,52 @@ +#ifndef MENUBAR_H +#define MENUBAR_H + +#include + +namespace Ui { +class MainWindow; +} + +class MenuBar : public QObject +{ + Q_OBJECT +public: + explicit MenuBar(Ui::MainWindow* ui, QObject* parent = nullptr); + +private slots: + // functions for Menu actions + // functions for QMenu fileMenu "File" actions + void newProject(); + void openProject(); + void exportSolution(); + void closeProject(); + // functions for QMenu optionsMenu "Options" actions + void enableConsoleOutput(); + void writeConsoleOutput(); + // functions for QMenu toolsMenu "Tools" actions + void resampleData(); + void writeBlankStationFile(); + void setConfigurationOption(); + // functions for QMenu helpMenu "Help" actions + // functions for sub QMenu displayingShapeFilesMenu "Displaying Shapefiles" actions + void displayArcGISProGuide(); + // functions for sub QMenu tutorialsMenu "Tutorials" actions + void displayTutorial1(); + void displayTutorial2(); + void displayTutorial3(); + void displayTutorial4(); + // functions for sub QMenu instructionsMenu "Instructions" actions + void displayDemDownloadInstructions(); + void displayFetchDemInstructions(); + void displayCommandLineInterfaceInstructions(); + // functions for remaining non-sub QMenu actions + void aboutWindNinja(); + void citeWindNinja(); + void supportEmail(); + void submitBugReport(); + +private: + Ui::MainWindow* ui; +}; + +#endif // MENUBAR_H From 28acdbcb953516e52bb347137414e5d26848e61b Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 7 Jul 2025 10:55:58 -0600 Subject: [PATCH 093/435] Changed surface input into a pointer --- src/gui/mainwindow.cpp | 20 +++++++++++--------- src/gui/mainwindow.h | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 54237f8d3..2c4b1f22c 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -232,6 +232,8 @@ MainWindow::MainWindow(QWidget *parent) QUrl url = QUrl::fromLocalFile(filePath); webView->setUrl(url); + surfaceInput = new SurfaceInput(); + QVBoxLayout *layout = new QVBoxLayout(); layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(webView); @@ -420,7 +422,7 @@ void MainWindow::massSolverCheckBoxClicked() } state.isMassSolverToggled = ui->massSolverCheckBox->isChecked(); - ui->meshResolutionSpinBox->setValue(surfaceInput.computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); refreshUI(); } @@ -434,16 +436,16 @@ void MainWindow::momentumSolverCheckBoxClicked() } state.isMomentumSolverToggled = ui->momentumSolverCheckBox->isChecked(); - ui->meshResolutionSpinBox->setValue(surfaceInput.computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); refreshUI(); } void MainWindow::elevationInputFileLineEditTextChanged(const QString &arg1) { - surfaceInput.computeDEMFile(currentDemFilePath); - surfaceInput.computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked()); + surfaceInput->computeDEMFile(currentDemFilePath); + surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked()); - ui->meshResolutionSpinBox->setValue(surfaceInput.computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); refreshUI(); } @@ -485,7 +487,7 @@ void MainWindow::meshResolutionComboBoxCurrentIndexChanged(int index) } else { ui->meshResolutionSpinBox->setEnabled(false); } - ui->meshResolutionSpinBox->setValue(surfaceInput.computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); } void MainWindow::meshResolutionMetersRadioButtonToggled(bool checked) @@ -505,7 +507,7 @@ void MainWindow::meshResolutionFeetRadioButtonToggled(bool checked) void MainWindow::timeZoneComboBoxCurrentIndexChanged(int index) { QString currentTimeZone = ui->timeZoneComboBox->currentText(); - QString timeZoneDetails = surfaceInput.fetchTimeZoneDetails(currentTimeZone); + QString timeZoneDetails = surfaceInput->fetchTimeZoneDetails(currentTimeZone); ui->timeZoneDetailsTextEdit->setText(timeZoneDetails); } @@ -516,7 +518,7 @@ void MainWindow::timeZoneAllZonesCheckBoxClicked() state.isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); bool isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); - QVector> displayData = surfaceInput.fetchAllTimeZones(isShowAllTimeZonesSelected); + QVector> displayData = surfaceInput->fetchAllTimeZones(isShowAllTimeZonesSelected); ui->timeZoneComboBox->clear(); for (const QVector& zone : displayData) { @@ -849,7 +851,7 @@ void MainWindow::surfaceInputDownloadButtonClicked() break; } - int result = surfaceInput.fetchDEMFile(boundingBox, demFile, resolution, fetchType); + int result = surfaceInput->fetchDEMFile(boundingBox, demFile, resolution, fetchType); ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); int currentIndex = ui->inputsStackedWidget->currentIndex(); diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 595847da5..5e5079052 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -98,7 +98,7 @@ private slots: Ui::MainWindow *ui; QWebEngineView *webView; - SurfaceInput surfaceInput; + SurfaceInput* surfaceInput; MenuBar* menuBar; QString currentDemFilePath; From 9cdc9c041a69d2c5d9b4972dfdb9e2891c5a450a Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 7 Jul 2025 11:23:58 -0600 Subject: [PATCH 094/435] Moved connect statements to function and moved include statements from the .cpp file to the .h file --- src/gui/mainwindow.cpp | 50 +++++++++++------------------------------- src/gui/mainwindow.h | 38 ++++++++++++++++++++++---------- 2 files changed, 39 insertions(+), 49 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 2c4b1f22c..9e02e91e2 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -1,29 +1,4 @@ #include "mainwindow.h" -#include "appstate.h" -#include "./ui_mainwindow.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "../ninja/windninja.h" - /* * Helper function to refresh the ui state of the app @@ -175,10 +150,7 @@ MainWindow::MainWindow(QWidget *parent) resize(1200, 700); timeZoneAllZonesCheckBoxClicked(); - - // Immediately call a UI refresh to set initial states refreshUI(); - ui->treeWidget->expandAll(); /* @@ -233,6 +205,7 @@ MainWindow::MainWindow(QWidget *parent) webView->setUrl(url); surfaceInput = new SurfaceInput(); + menuBar = new MenuBar(ui, this); QVBoxLayout *layout = new QVBoxLayout(); layout->setContentsMargins(0, 0, 0, 0); @@ -270,7 +243,6 @@ MainWindow::MainWindow(QWidget *parent) /* * Downloaded Forecast explorer */ - populateForecastDownloads(); /* @@ -303,6 +275,18 @@ MainWindow::MainWindow(QWidget *parent) ui->domainAverageTable->hideColumn(5); ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + connectSignals(); +} + +MainWindow::~MainWindow() +{ + delete surfaceInput; + delete menuBar; + delete ui; +} + +void MainWindow::connectSignals() +{ connect(ui->elevationInputTypeComboBox, QOverload::of(&QComboBox::currentIndexChanged), ui->elevationInputTypeStackedWidget, &QStackedWidget::setCurrentIndex); @@ -342,18 +326,10 @@ MainWindow::MainWindow(QWidget *parent) connect(ui->surfaceInputDownloadCancelButton, &QPushButton::clicked, this, &MainWindow::surfaceInputDownloadCancelButtonClicked); connect(ui->surfaceInputDownloadButton, &QPushButton::clicked, this, &MainWindow::surfaceInputDownloadButtonClicked); - menuBar = new MenuBar(ui, this); connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); // just close the mainWindow (behavior of the old qt4 code) connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &MainWindow::elevationInputFileOpenButtonClicked); } -MainWindow::~MainWindow() -{ - delete menuBar; - delete ui; -} - - void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { int pageIndex = item->data(column, Qt::UserRole).toInt(); if (pageIndex >= 0) { diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 5e5079052..49e5d5172 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -1,6 +1,12 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H +#include "ninja_version.h" +#include "surfaceinput.h" +#include "menubar.h" +#include "ui_mainwindow.h" +#include "cpl_http.h" +#include "appstate.h" #include #include #include @@ -8,14 +14,28 @@ #include #include #include -#include "ui_mainwindow.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include -#include "ninja_version.h" -#include "cpl_http.h" -#include "surfaceinput.h" -#include "menubar.h" QT_BEGIN_NAMESPACE @@ -76,14 +96,8 @@ private slots: void surfaceInputDownloadCancelButtonClicked(); void surfaceInputDownloadButtonClicked(); -signals: - void solveRequest(); - void timeZoneDataRequest(); - void timeZoneDetailsRequest(); - void getDEMrequest(std::array boundsBox, QString outputFile); - private: - void connectMenuActions(); + void connectSignals(); void treeItemClicked(QTreeWidgetItem *item, int column); QSet> invalidDAWCells; From cef3c439fa3bce28e451d17b0715c35bff14cc22 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 7 Jul 2025 12:55:30 -0600 Subject: [PATCH 095/435] Changed the buttons for meters and feet to a combo box on surface input --- src/gui/mainwindow.cpp | 61 ++++++++++++---------------- src/gui/mainwindow.h | 3 +- src/gui/mainwindow.ui | 91 +++++++++++------------------------------- 3 files changed, 50 insertions(+), 105 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 9e02e91e2..180453dd0 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -287,47 +287,33 @@ MainWindow::~MainWindow() void MainWindow::connectSignals() { - connect(ui->elevationInputTypeComboBox, QOverload::of(&QComboBox::currentIndexChanged), - ui->elevationInputTypeStackedWidget, &QStackedWidget::setCurrentIndex); - + connect(ui->elevationInputTypeComboBox, &QComboBox::currentIndexChanged, ui->elevationInputTypeStackedWidget, &QStackedWidget::setCurrentIndex); connect(ui->massSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::massSolverCheckBoxClicked); connect(ui->momentumSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::momentumSolverCheckBoxClicked); - connect(ui->elevationInputFileDownloadButton, &QPushButton::clicked, this, &MainWindow::elevationInputFileDownloadButtonClicked); connect(ui->elevationInputFileOpenButton, &QPushButton::clicked, this, &MainWindow::elevationInputFileOpenButtonClicked); connect(ui->elevationInputFileLineEdit, &QLineEdit::textChanged, this, &MainWindow::elevationInputFileLineEditTextChanged); - - connect(ui->meshResolutionComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &MainWindow::meshResolutionComboBoxCurrentIndexChanged); - + connect(ui->meshResolutionComboBox, &QComboBox::currentIndexChanged, this, &MainWindow::meshResolutionComboBoxCurrentIndexChanged); + connect(ui->meshResolutionUnitsComboBox, &QComboBox::currentIndexChanged, this, &MainWindow::meshResolutionUnitsComboBoxCurrentIndexChanged); connect(ui->diurnalCheckBox, &QCheckBox::clicked, this, &MainWindow::diurnalCheckBoxClicked); connect(ui->stabilityCheckBox, &QCheckBox::clicked, this, &MainWindow::stabilityCheckBoxClicked); - connect(ui->windHeightComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &MainWindow::windHeightComboBoxCurrentIndexChanged); + connect(ui->windHeightComboBox, &QComboBox::currentIndexChanged, this, &MainWindow::windHeightComboBoxCurrentIndexChanged); connect(ui->domainAverageCheckBox, &QCheckBox::clicked, this, &MainWindow::domainAverageCheckBoxClicked); - connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, this, &MainWindow::treeWidgetItemDoubleClicked); - connect(ui->pointInitializationCheckBox, &QCheckBox::clicked, this, &MainWindow::pointInitializationCheckBoxClicked); connect(ui->useWeatherModelInit, &QCheckBox::clicked, this, &MainWindow::useWeatherModelInitClicked); - connect(ui->clearTableButton, &QPushButton::clicked, this, &MainWindow::clearTableButtonClicked); connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); - connect(ui->outputDirectoryButton, &QPushButton::clicked, this, &MainWindow::outputDirectoryButtonClicked); connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); - connect(ui->timeZoneAllZonesCheckBox, &QCheckBox::clicked, this, &MainWindow::timeZoneAllZonesCheckBoxClicked); connect(ui->timeZoneDetailsCheckBox, &QCheckBox::clicked, this, &MainWindow::timeZoneDetailsCheckBoxClicked); - connect(ui->timeZoneComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &MainWindow::timeZoneComboBoxCurrentIndexChanged); - + connect(ui->timeZoneComboBox, &QComboBox::currentIndexChanged, this, &MainWindow::timeZoneComboBoxCurrentIndexChanged); connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &MainWindow::domainAverageTableCellChanged); - - connect(ui->meshResolutionMetersRadioButton, &QRadioButton::toggled, this, &MainWindow::meshResolutionMetersRadioButtonToggled); - connect(ui->meshResolutionFeetRadioButton, &QRadioButton::toggled, this, &MainWindow::meshResolutionFeetRadioButtonToggled); - connect(ui->surfaceInputDownloadCancelButton, &QPushButton::clicked, this, &MainWindow::surfaceInputDownloadCancelButtonClicked); connect(ui->surfaceInputDownloadButton, &QPushButton::clicked, this, &MainWindow::surfaceInputDownloadButtonClicked); - - connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); // just close the mainWindow (behavior of the old qt4 code) + connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &MainWindow::elevationInputFileOpenButtonClicked); + } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { @@ -466,20 +452,6 @@ void MainWindow::meshResolutionComboBoxCurrentIndexChanged(int index) ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); } -void MainWindow::meshResolutionMetersRadioButtonToggled(bool checked) -{ - if (checked) { - ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 0.3048); - } -} - -void MainWindow::meshResolutionFeetRadioButtonToggled(bool checked) -{ - if (checked) { - ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 3.28084); - } -} - void MainWindow::timeZoneComboBoxCurrentIndexChanged(int index) { QString currentTimeZone = ui->timeZoneComboBox->currentText(); @@ -562,7 +534,8 @@ void MainWindow::domainAverageCheckBoxClicked() void MainWindow::windHeightComboBoxCurrentIndexChanged(int index) { - switch(index) { + switch(index) + { case 0: ui->windHeightValue->setValue(20.00); ui->windHeightValue->setEnabled(false); @@ -951,3 +924,19 @@ char * MainWindow::NinjaQueryServerMessages(bool checkAbort) return NULL; } + +void MainWindow::meshResolutionUnitsComboBoxCurrentIndexChanged(int index) +{ + qDebug() << "ComboBox changed to index:" << index; + switch(index) + { + case 0: + ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 0.3048); + break; + + case 1: + ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 3.28084); + break; + } +} + diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 49e5d5172..962d27c72 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -91,10 +91,9 @@ private slots: void timeZoneDetailsCheckBoxClicked(); void timeZoneComboBoxCurrentIndexChanged(int index); void domainAverageTableCellChanged(int row, int column); - void meshResolutionMetersRadioButtonToggled(bool checked); - void meshResolutionFeetRadioButtonToggled(bool checked); void surfaceInputDownloadCancelButtonClicked(); void surfaceInputDownloadButtonClicked(); + void meshResolutionUnitsComboBoxCurrentIndexChanged(int index); private: void connectSignals(); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 5f9dd7165..9321c822a 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -524,7 +524,7 @@ QFrame::Shadow::Sunken - 6 + 5 @@ -909,34 +909,6 @@ li.checked::marker { content: "\2612"; } Mesh Resolution - - - - false - - - - 0 - 0 - - - - PointingHandCursor - - - false - - - 0.010000000000000 - - - 10000.000000000000000 - - - 200.000000000000000 - - - @@ -971,9 +943,9 @@ li.checked::marker { content: "\2612"; } - + - true + false @@ -984,36 +956,34 @@ li.checked::marker { content: "\2612"; } PointingHandCursor - - Feet - - + false - - - - - - true - - - - 0 - 0 - - - - PointingHandCursor + + 0.010000000000000 - - Meters + + 10000.000000000000000 - - true + + 200.000000000000000 + + + + + Meters + + + + + Feet + + + + @@ -3030,19 +3000,6 @@ li.checked::marker { content: "\2612"; } - - - - 470 - 410 - 26 - 24 - - - - ... - - From 33060c378771440128f6fc87388a36d4a4398d42 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 7 Jul 2025 13:24:01 -0600 Subject: [PATCH 096/435] Added point and radius computation for surface input downloads --- src/gui/mainwindow.cpp | 22 ++++++++++++++++------ src/gui/surfaceinput.cpp | 21 +++++++++++++++++++++ src/gui/surfaceinput.h | 1 + 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 180453dd0..012fc0026 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -313,7 +313,6 @@ void MainWindow::connectSignals() connect(ui->surfaceInputDownloadButton, &QPushButton::clicked, this, &MainWindow::surfaceInputDownloadButtonClicked); connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &MainWindow::elevationInputFileOpenButtonClicked); - } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { @@ -767,11 +766,22 @@ void MainWindow::surfaceInputDownloadCancelButtonClicked() void MainWindow::surfaceInputDownloadButtonClicked() { - double boundingBox[] = { ui->boundingBoxNorthLineEdit->text().toDouble(), - ui->boundingBoxEastLineEdit->text().toDouble(), - ui->boundingBoxSouthLineEdit->text().toDouble(), - ui->boundingBoxWestLineEdit->text().toDouble(), - }; + double boundingBox[4]; + switch(ui->elevationInputTypeStackedWidget->currentIndex()) + { + case 0: + boundingBox[0] = ui->boundingBoxNorthLineEdit->text().toDouble(); + boundingBox[1] = ui->boundingBoxEastLineEdit->text().toDouble(); + boundingBox[2] = ui->boundingBoxSouthLineEdit->text().toDouble(); + boundingBox[3] = ui->boundingBoxWestLineEdit->text().toDouble(); + break; + case 1: + double centerLat = ui->pointRadiusLatLineEdit->text().toDouble(); + double centerLon = ui->pointRadiusLonLineEdit->text().toDouble(); + double radius = ui->pointRadiusRadiusLineEdit->text().toDouble(); + surfaceInput->computePointRadius(centerLat, centerLon, radius, boundingBox); + break; + } double resolution = 30; diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index a4946e3cb..7b3c5fec0 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -286,3 +286,24 @@ double SurfaceInput::computeMeshResolution(int index, bool isMomemtumChecked) return meshResolution; } + +void SurfaceInput::computePointRadius(double centerLat, double centerLon, double radius, double boundingBox[4]) +{ + const double EARTH_RADIUS_MILES = 3958.7613; + const double DEG_TO_RAD = M_PI / 180.0; + + double deltaLat = radius / (2.0 * M_PI * EARTH_RADIUS_MILES / 360.0); + double latRadius = EARTH_RADIUS_MILES * std::cos(centerLat * DEG_TO_RAD); + double deltaLon = radius / (2.0 * M_PI * latRadius / 360.0); + + boundingBox[0] = centerLat + deltaLat; // North latitude + boundingBox[1] = centerLon + deltaLon; // East longitude + boundingBox[2] = centerLat - deltaLat; // South latitude + boundingBox[3] = centerLon - deltaLon; // West longitude + + qDebug() << "Bounding Box (N, E, S, W):" + << boundingBox[0] + << boundingBox[1] + << boundingBox[2] + << boundingBox[3]; +} diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index da4366422..2bc727e1d 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -16,6 +16,7 @@ class SurfaceInput int fetchDEMFile(double boundingBox[], std::string demFile, double resolution, std::string fetchType); int computeDEMFile(QString filePath); double computeMeshResolution(int index, bool isMomemtumChecked); + void computePointRadius(double centerLat, double centerLon, double radius, double boundingBox[4]); private: QString GDALDriverName; From 1a52b85b33921b7d43a87488c8b3b5f2b06cb5b7 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 8 Jul 2025 09:59:38 -0600 Subject: [PATCH 097/435] cleaned up map.html and add a class that will faciliate communication between the webengineview and the map --- data/map.html | 424 ++++++++++------------------------------- src/gui/CMakeLists.txt | 1 + src/gui/mainwindow.cpp | 8 +- src/gui/mainwindow.h | 4 + src/gui/mainwindow.ui | 2 +- src/gui/mapbridge.cpp | 2 + src/gui/mapbridge.h | 18 ++ src/gui/menubar.cpp | 2 +- 8 files changed, 133 insertions(+), 328 deletions(-) create mode 100644 src/gui/mapbridge.cpp create mode 100644 src/gui/mapbridge.h diff --git a/data/map.html b/data/map.html index f59612ff4..617f095a8 100755 --- a/data/map.html +++ b/data/map.html @@ -1,340 +1,121 @@ - - - Leaflet.draw drawing and editing tools - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + Leaflet.draw drawing and editing tools + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -
- - - + diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 1d4c852f3..b6918491a 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -32,6 +32,7 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) surfaceinput.h surfaceinput.cpp menubar.h menubar.cpp + mapbridge.h mapbridge.cpp ) # Define target properties for Android with Qt 6 as: diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 012fc0026..ec5306741 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -199,8 +199,11 @@ MainWindow::MainWindow(QWidget *parent) QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); QString filePath = QString(MAP_PATH); - + channel = new QWebChannel(this); + mapBridge = new MapBridge(this); webView = new QWebEngineView(ui->mapPanelWidget); + channel->registerObject(QStringLiteral("bridge"), mapBridge); + webView->page()->setWebChannel(channel); QUrl url = QUrl::fromLocalFile(filePath); webView->setUrl(url); @@ -790,6 +793,9 @@ void MainWindow::surfaceInputDownloadButtonClicked() QDir dir(downloadsPath); QString fullPath = dir.filePath(defaultName); QString demFilePath = QFileDialog::getSaveFileName(this, "Save DEM File", fullPath, "TIF Files (*.tif)"); + if (demFilePath.isEmpty()) { + return; + } if (!demFilePath.endsWith(".tif", Qt::CaseInsensitive)) { demFilePath += ".tif"; } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 962d27c72..c5aca9353 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -4,9 +4,11 @@ #include "ninja_version.h" #include "surfaceinput.h" #include "menubar.h" +#include "mapbridge.h" #include "ui_mainwindow.h" #include "cpl_http.h" #include "appstate.h" +#include #include #include #include @@ -111,6 +113,8 @@ private slots: Ui::MainWindow *ui; QWebEngineView *webView; + QWebChannel *channel; + MapBridge *mapBridge; SurfaceInput* surfaceInput; MenuBar* menuBar; diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 9321c822a..654a114d3 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -524,7 +524,7 @@ QFrame::Shadow::Sunken - 5 + 6 diff --git a/src/gui/mapbridge.cpp b/src/gui/mapbridge.cpp new file mode 100644 index 000000000..f23980a3d --- /dev/null +++ b/src/gui/mapbridge.cpp @@ -0,0 +1,2 @@ +#include "mapbridge.h" + diff --git a/src/gui/mapbridge.h b/src/gui/mapbridge.h new file mode 100644 index 000000000..6ccb090c7 --- /dev/null +++ b/src/gui/mapbridge.h @@ -0,0 +1,18 @@ +#ifndef BRIDGE_H +#define BRIDGE_H + +#include +#include + +class MapBridge : public QObject { + Q_OBJECT +public: + explicit MapBridge(QObject *parent = nullptr) : QObject(parent) {} + +public slots: + void receiveMessage(const QString &msg) { + qDebug() << "Received from JS:" << msg; + } +}; + +#endif // BRIDGE_H diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp index 6efbf5fd1..cb6eb91f4 100644 --- a/src/gui/menubar.cpp +++ b/src/gui/menubar.cpp @@ -1,5 +1,5 @@ #include "menubar.h" -#include "ui_mainwindow.h" // To know about Ui::MainWindow +#include "ui_mainwindow.h" #include #include From 2243f4566ed4bdd2d8211e0407f63c7109dbdaa2 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 8 Jul 2025 11:49:49 -0600 Subject: [PATCH 098/435] Implemened draw button for bounding box --- data/map.html | 37 ++++++++++++++++++++++++++++++------- src/gui/mainwindow.cpp | 13 ++++++++++++- src/gui/mainwindow.h | 1 + src/gui/mainwindow.ui | 4 ++-- src/gui/mapbridge.cpp | 20 ++++++++++++++++++++ src/gui/mapbridge.h | 7 ++++--- src/gui/menubar.cpp | 2 -- 7 files changed, 69 insertions(+), 15 deletions(-) diff --git a/data/map.html b/data/map.html index 617f095a8..22c2bc15f 100755 --- a/data/map.html +++ b/data/map.html @@ -64,12 +64,6 @@
diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index ec5306741..d1062ddda 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -253,7 +253,8 @@ MainWindow::MainWindow(QWidget *parent) */ // Surface Input window ui->elevationInputFileOpenButton->setIcon(QIcon(":/folder.png")); - ui->elevationInputFileDownloadButton->setIcon(QIcon(":/swoop_final.png")); + ui->elevationInputFileDownloadButton->setIcon(QIcon(":/server_go.png")); + ui->elevationInputTypePushButton->setIcon(QIcon(":/swoop_final.png")); // Solver window int nCPUs = QThread::idealThreadCount(); @@ -316,6 +317,7 @@ void MainWindow::connectSignals() connect(ui->surfaceInputDownloadButton, &QPushButton::clicked, this, &MainWindow::surfaceInputDownloadButtonClicked); connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &MainWindow::elevationInputFileOpenButtonClicked); + connect(ui->elevationInputTypePushButton, &QPushButton::clicked, this, &MainWindow::elevationInputTypePushButtonClicked); } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { @@ -956,3 +958,12 @@ void MainWindow::meshResolutionUnitsComboBoxCurrentIndexChanged(int index) } } +void MainWindow::elevationInputTypePushButtonClicked() +{ + if(ui->elevationInputTypePushButton->isChecked()) + { + webView->page()->runJavaScript("startRectangleDrawing();"); + ui->elevationInputTypePushButton->setChecked(false); + } +} + diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index c5aca9353..ed784fc20 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -96,6 +96,7 @@ private slots: void surfaceInputDownloadCancelButtonClicked(); void surfaceInputDownloadButtonClicked(); void meshResolutionUnitsComboBoxCurrentIndexChanged(int index); + void elevationInputTypePushButtonClicked(); private: void connectSignals(); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 654a114d3..e4e751fa9 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -1272,9 +1272,9 @@ li.checked::marker { content: "\2612"; }
- + - Sample + Draw true diff --git a/src/gui/mapbridge.cpp b/src/gui/mapbridge.cpp index f23980a3d..e54ed8501 100644 --- a/src/gui/mapbridge.cpp +++ b/src/gui/mapbridge.cpp @@ -1,2 +1,22 @@ #include "mapbridge.h" +void MapBridge::receiveBoundingBox(const QString &jsonCoords) { + QJsonDocument doc = QJsonDocument::fromJson(jsonCoords.toUtf8()); + if (!doc.isObject()) { + qWarning() << "Invalid bounding box JSON"; + return; + } + + QJsonObject obj = doc.object(); + + double north = obj["north"].toDouble(); + double south = obj["south"].toDouble(); + double east = obj["east"].toDouble(); + double west = obj["west"].toDouble(); + + qDebug() << "Bounding box received:"; + qDebug() << "North:" << north << "South:" << south; + qDebug() << "East:" << east << "West:" << west; + + // TODO: emit signal, update UI, etc. +} diff --git a/src/gui/mapbridge.h b/src/gui/mapbridge.h index 6ccb090c7..7a8b3199c 100644 --- a/src/gui/mapbridge.h +++ b/src/gui/mapbridge.h @@ -3,6 +3,8 @@ #include #include +#include +#include class MapBridge : public QObject { Q_OBJECT @@ -10,9 +12,8 @@ class MapBridge : public QObject { explicit MapBridge(QObject *parent = nullptr) : QObject(parent) {} public slots: - void receiveMessage(const QString &msg) { - qDebug() << "Received from JS:" << msg; - } + void receiveBoundingBox(const QString &jsonCoords); + }; #endif // BRIDGE_H diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp index cb6eb91f4..0fdc75127 100644 --- a/src/gui/menubar.cpp +++ b/src/gui/menubar.cpp @@ -1,7 +1,5 @@ #include "menubar.h" #include "ui_mainwindow.h" -#include -#include MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) : QObject(parent), ui(ui) From 9ed2fc2bc875b516a8d771d463844bfae6be905c Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 8 Jul 2025 11:55:12 -0600 Subject: [PATCH 099/435] Added handles to make the bounding box adjustable --- data/map.html | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/data/map.html b/data/map.html index 22c2bc15f..152d42911 100755 --- a/data/map.html +++ b/data/map.html @@ -18,6 +18,19 @@ max-width: 100%; box-sizing: border-box; } + .leaflet-div-icon { + background: white; + border: 2px solid #0077ff; + border-radius: 50%; + width: 10px !important; + height: 10px !important; + margin-left: -5px !important; + margin-top: -5px !important; + box-shadow: 0 0 1px #000; + } + .leaflet-drag-target { + cursor: move !important; + } @@ -89,6 +102,9 @@ mbrLayer.clearLayers(); mbrLayer.addLayer(layer); + // Enable editing mode + layer.editing.enable(); + if (layer instanceof L.Rectangle) { const bounds = layer.getBounds(); const bboxData = { From ad7b939dcd60c49db5489f212053d49131849b00 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 8 Jul 2025 12:57:44 -0600 Subject: [PATCH 100/435] Added signal in bridge class to properly update the GUI with bounding box --- data/map.html | 4 ++++ src/gui/mainwindow.cpp | 18 +++++++++++++++++- src/gui/mainwindow.h | 1 + src/gui/mapbridge.cpp | 2 +- src/gui/mapbridge.h | 4 ++++ 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/data/map.html b/data/map.html index 152d42911..fa2f1e24d 100755 --- a/data/map.html +++ b/data/map.html @@ -138,6 +138,10 @@ mbrLayer.clearLayers(); rectangleDrawer.enable(); } + function stopRectangleDrawing() { + mbrLayer.clearLayers(); + rectangleDrawer.disable(); + } const baseMaps = {}; const overlayMaps = {}; diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index d1062ddda..097311251 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -318,6 +318,7 @@ void MainWindow::connectSignals() connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &MainWindow::elevationInputFileOpenButtonClicked); connect(ui->elevationInputTypePushButton, &QPushButton::clicked, this, &MainWindow::elevationInputTypePushButtonClicked); + connect(mapBridge, &MapBridge::boundingBoxReceived, this, &MainWindow::boundingBoxReceived); } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { @@ -963,7 +964,22 @@ void MainWindow::elevationInputTypePushButtonClicked() if(ui->elevationInputTypePushButton->isChecked()) { webView->page()->runJavaScript("startRectangleDrawing();"); - ui->elevationInputTypePushButton->setChecked(false); } + else + { + webView->page()->runJavaScript("stopRectangleDrawing();"); + } +} + +void MainWindow::boundingBoxReceived(double north, double south, double east, double west) +{ + qDebug() << "MainWindow received bbox: " + << north << south << east << west; + + ui->boundingBoxNorthLineEdit->setText(QString::number(north)); + ui->boundingBoxEastLineEdit->setText(QString::number(east)); + ui->boundingBoxSouthLineEdit->setText(QString::number(south)); + ui->boundingBoxWestLineEdit->setText(QString::number(west)); + ui->elevationInputTypePushButton->setChecked(false); } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index ed784fc20..29630ba26 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -97,6 +97,7 @@ private slots: void surfaceInputDownloadButtonClicked(); void meshResolutionUnitsComboBoxCurrentIndexChanged(int index); void elevationInputTypePushButtonClicked(); + void onBoundingBoxReceived(double north, double south, double east, double west); private: void connectSignals(); diff --git a/src/gui/mapbridge.cpp b/src/gui/mapbridge.cpp index e54ed8501..f1b8d74d3 100644 --- a/src/gui/mapbridge.cpp +++ b/src/gui/mapbridge.cpp @@ -18,5 +18,5 @@ void MapBridge::receiveBoundingBox(const QString &jsonCoords) { qDebug() << "North:" << north << "South:" << south; qDebug() << "East:" << east << "West:" << west; - // TODO: emit signal, update UI, etc. + emit boundingBoxReceived(north, south, east, west); } diff --git a/src/gui/mapbridge.h b/src/gui/mapbridge.h index 7a8b3199c..da15280ff 100644 --- a/src/gui/mapbridge.h +++ b/src/gui/mapbridge.h @@ -11,6 +11,10 @@ class MapBridge : public QObject { public: explicit MapBridge(QObject *parent = nullptr) : QObject(parent) {} +signals: + void boundingBoxReceived(double north, double south, double east, double west); + + public slots: void receiveBoundingBox(const QString &jsonCoords); From 59b0bef0ee23696b53d81b10b55900d76e398ea2 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 8 Jul 2025 16:25:34 -0600 Subject: [PATCH 101/435] Added functions to compute point and radius from bounding box coords --- src/gui/mainwindow.cpp | 14 ++++++++++++-- src/gui/mainwindow.h | 2 +- src/gui/surfaceinput.cpp | 28 +++++++++++++++++++++++++++- src/gui/surfaceinput.h | 3 ++- 4 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 097311251..1f439500e 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -284,6 +284,9 @@ MainWindow::MainWindow(QWidget *parent) MainWindow::~MainWindow() { + delete webView; + delete channel; + delete mapBridge; delete surfaceInput; delete menuBar; delete ui; @@ -785,7 +788,7 @@ void MainWindow::surfaceInputDownloadButtonClicked() double centerLat = ui->pointRadiusLatLineEdit->text().toDouble(); double centerLon = ui->pointRadiusLonLineEdit->text().toDouble(); double radius = ui->pointRadiusRadiusLineEdit->text().toDouble(); - surfaceInput->computePointRadius(centerLat, centerLon, radius, boundingBox); + surfaceInput->computeBoundingBox(centerLat, centerLon, radius, boundingBox); break; } @@ -946,7 +949,6 @@ char * MainWindow::NinjaQueryServerMessages(bool checkAbort) void MainWindow::meshResolutionUnitsComboBoxCurrentIndexChanged(int index) { - qDebug() << "ComboBox changed to index:" << index; switch(index) { case 0: @@ -981,5 +983,13 @@ void MainWindow::boundingBoxReceived(double north, double south, double east, do ui->boundingBoxSouthLineEdit->setText(QString::number(south)); ui->boundingBoxWestLineEdit->setText(QString::number(west)); ui->elevationInputTypePushButton->setChecked(false); + + double pointRadius[3]; + surfaceInput->computePointRadius(north, east, south, west, pointRadius); + + ui->pointRadiusLatLineEdit->setText(QString::number(pointRadius[0])); + ui->pointRadiusLonLineEdit->setText(QString::number(pointRadius[1])); + ui->pointRadiusRadiusLineEdit->setText(QString::number(pointRadius[2])); + } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 29630ba26..bda0b61db 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -97,7 +97,7 @@ private slots: void surfaceInputDownloadButtonClicked(); void meshResolutionUnitsComboBoxCurrentIndexChanged(int index); void elevationInputTypePushButtonClicked(); - void onBoundingBoxReceived(double north, double south, double east, double west); + void boundingBoxReceived(double north, double south, double east, double west); private: void connectSignals(); diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 7b3c5fec0..ed3a596bf 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -287,7 +287,7 @@ double SurfaceInput::computeMeshResolution(int index, bool isMomemtumChecked) } -void SurfaceInput::computePointRadius(double centerLat, double centerLon, double radius, double boundingBox[4]) +void SurfaceInput::computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]) { const double EARTH_RADIUS_MILES = 3958.7613; const double DEG_TO_RAD = M_PI / 180.0; @@ -307,3 +307,29 @@ void SurfaceInput::computePointRadius(double centerLat, double centerLon, double << boundingBox[2] << boundingBox[3]; } + +void SurfaceInput::computePointRadius(double north, double east, double south, double west, double pointRadius[3]) +{ + const double EARTH_RADIUS_MILES = 3958.7613; + const double DEG_TO_RAD = M_PI / 180.0; + + double centerLat = (north + south) / 2.0; + double centerLon = (east + west) / 2.0; + + double deltaLat = std::abs(north - south) / 2.0; + double deltaLon = std::abs(east - west) / 2.0; + + double latMiles = (2.0 * M_PI * EARTH_RADIUS_MILES / 360.0) * deltaLat; + + double latRadius = EARTH_RADIUS_MILES * std::cos(centerLat * DEG_TO_RAD); + double lonMiles = (2.0 * M_PI * latRadius / 360.0) * deltaLon; + + double radius = (latMiles + lonMiles) / 2.0; + + pointRadius[0] = centerLat; + pointRadius[1] = centerLon; + pointRadius[2] = radius; + + qDebug() << "Center (Lat, Lon):" << centerLat << centerLon; + qDebug() << "Estimated Radius (mi):" << radius; +} diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index 2bc727e1d..cfad50947 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -16,7 +16,8 @@ class SurfaceInput int fetchDEMFile(double boundingBox[], std::string demFile, double resolution, std::string fetchType); int computeDEMFile(QString filePath); double computeMeshResolution(int index, bool isMomemtumChecked); - void computePointRadius(double centerLat, double centerLon, double radius, double boundingBox[4]); + void computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]); + void computePointRadius(double north, double east, double south, double west, double pointRadius[3]); private: QString GDALDriverName; From 370cfb6f80bfa63e1ae15461527c590d3abead2b Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 9 Jul 2025 15:40:41 -0600 Subject: [PATCH 102/435] When resizing the bounding box, the coordinates displayed on the GUI will change as well --- data/map.html | 49 +++++++++++++++++++++---------------------------- 1 file changed, 21 insertions(+), 28 deletions(-) diff --git a/data/map.html b/data/map.html index fa2f1e24d..7355ce861 100755 --- a/data/map.html +++ b/data/map.html @@ -95,44 +95,37 @@ }); const mbrLayer = new L.FeatureGroup(); - const txtboxLayer = new L.FeatureGroup(); map.addLayer(mbrLayer); map.on('draw:created', function (e) { const layer = e.layer; mbrLayer.clearLayers(); mbrLayer.addLayer(layer); - // Enable editing mode - layer.editing.enable(); - if (layer instanceof L.Rectangle) { - const bounds = layer.getBounds(); - const bboxData = { - north: bounds.getNorth(), - south: bounds.getSouth(), - east: bounds.getEast(), - west: bounds.getWest() - }; - - // Send to Qt via QWebChannel - if (window.bridge && window.bridge.receiveBoundingBox) { - window.bridge.receiveBoundingBox(JSON.stringify(bboxData)); + layer.editing.enable(); + + function sendBoundingBox() { + const bounds = layer.getBounds(); + const bboxData = { + north: bounds.getNorth(), + south: bounds.getSouth(), + east: bounds.getEast(), + west: bounds.getWest() + }; + + if (window.bridge && window.bridge.receiveBoundingBox) { + window.bridge.receiveBoundingBox(JSON.stringify(bboxData)); + } } + + // Send once on creation + sendBoundingBox(); + + // Send on edit (move or resize) + layer.on('edit', sendBoundingBox); } }); - map.addLayer(txtboxLayer); - - const drawControl = new L.Control.Draw({ - position: 'topright', - draw: { - polyline: false, - polygon: false, - circle: false, - marker: false, - circlemarker: false, - rectangle: true - } - }); + const rectangleDrawer = new L.Draw.Rectangle(map); function startRectangleDrawing() { mbrLayer.clearLayers(); From 14a23c876f9077ee4da7b0862bdeb008da5161d7 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 9 Jul 2025 16:02:24 -0600 Subject: [PATCH 103/435] Ensured cancel button clears bounding box inputs as well as graph --- src/gui/mainwindow.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 1f439500e..1d34d0bfb 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -771,6 +771,17 @@ void MainWindow::surfaceInputDownloadCancelButtonClicked() { int currentIndex = ui->inputsStackedWidget->currentIndex(); ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); + + ui->boundingBoxNorthLineEdit->clear(); + ui->boundingBoxEastLineEdit->clear(); + ui->boundingBoxSouthLineEdit->clear(); + ui->boundingBoxWestLineEdit->clear(); + + ui->pointRadiusLatLineEdit->clear(); + ui->pointRadiusLonLineEdit->clear(); + ui->pointRadiusRadiusLineEdit->clear(); + + webView->page()->runJavaScript("stopRectangleDrawing();"); } void MainWindow::surfaceInputDownloadButtonClicked() From a531087642bd191ce02001ad17051808821b29ab Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 10 Jul 2025 13:18:16 -0600 Subject: [PATCH 104/435] WIP on bounding box being drawn when line edits are updated, added surfaceinputview class --- data/map.html | 32 +++++ src/gui/CMakeLists.txt | 1 + src/gui/mainwindow.cpp | 181 +--------------------------- src/gui/mainwindow.h | 29 +---- src/gui/surfaceinputview.cpp | 223 +++++++++++++++++++++++++++++++++++ src/gui/surfaceinputview.h | 50 ++++++++ 6 files changed, 316 insertions(+), 200 deletions(-) create mode 100644 src/gui/surfaceinputview.cpp create mode 100644 src/gui/surfaceinputview.h diff --git a/data/map.html b/data/map.html index 7355ce861..6879221b4 100755 --- a/data/map.html +++ b/data/map.html @@ -125,6 +125,38 @@ layer.on('edit', sendBoundingBox); } }); + function drawBoundingBox(north, south, east, west) { + // Clear any existing rectangle + mbrLayer.clearLayers(); + + const bounds = [[south, west], [north, east]]; + const rectangle = L.rectangle(bounds, { + color: '#ff7800', + weight: 2 + }).addTo(mbrLayer); + + map.fitBounds(rectangle.getBounds()); + + rectangle.editing.enable(); // Enable edit mode + + // Send bounding box to bridge + function sendBoundingBox() { + const bounds = rectangle.getBounds(); + const bboxData = { + north: bounds.getNorth(), + south: bounds.getSouth(), + east: bounds.getEast(), + west: bounds.getWest() + }; + + if (window.bridge && window.bridge.receiveBoundingBox) { + window.bridge.receiveBoundingBox(JSON.stringify(bboxData)); + } + } + + sendBoundingBox(); // Send initially + rectangle.on('edit', sendBoundingBox); // Send on edits + } const rectangleDrawer = new L.Draw.Rectangle(map); function startRectangleDrawing() { diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index b6918491a..6bbf1d480 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -33,6 +33,7 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) surfaceinput.cpp menubar.h menubar.cpp mapbridge.h mapbridge.cpp + surfaceinputview.h surfaceinputview.cpp ) # Define target properties for Android with Qt 6 as: diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 1d34d0bfb..954aa301f 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -210,6 +210,8 @@ MainWindow::MainWindow(QWidget *parent) surfaceInput = new SurfaceInput(); menuBar = new MenuBar(ui, this); + surfaceInputView = new SurfaceInputView(ui, webView, surfaceInput, this); + QVBoxLayout *layout = new QVBoxLayout(); layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(webView); @@ -297,11 +299,6 @@ void MainWindow::connectSignals() connect(ui->elevationInputTypeComboBox, &QComboBox::currentIndexChanged, ui->elevationInputTypeStackedWidget, &QStackedWidget::setCurrentIndex); connect(ui->massSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::massSolverCheckBoxClicked); connect(ui->momentumSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::momentumSolverCheckBoxClicked); - connect(ui->elevationInputFileDownloadButton, &QPushButton::clicked, this, &MainWindow::elevationInputFileDownloadButtonClicked); - connect(ui->elevationInputFileOpenButton, &QPushButton::clicked, this, &MainWindow::elevationInputFileOpenButtonClicked); - connect(ui->elevationInputFileLineEdit, &QLineEdit::textChanged, this, &MainWindow::elevationInputFileLineEditTextChanged); - connect(ui->meshResolutionComboBox, &QComboBox::currentIndexChanged, this, &MainWindow::meshResolutionComboBoxCurrentIndexChanged); - connect(ui->meshResolutionUnitsComboBox, &QComboBox::currentIndexChanged, this, &MainWindow::meshResolutionUnitsComboBoxCurrentIndexChanged); connect(ui->diurnalCheckBox, &QCheckBox::clicked, this, &MainWindow::diurnalCheckBoxClicked); connect(ui->stabilityCheckBox, &QCheckBox::clicked, this, &MainWindow::stabilityCheckBoxClicked); connect(ui->windHeightComboBox, &QComboBox::currentIndexChanged, this, &MainWindow::windHeightComboBoxCurrentIndexChanged); @@ -316,12 +313,9 @@ void MainWindow::connectSignals() connect(ui->timeZoneDetailsCheckBox, &QCheckBox::clicked, this, &MainWindow::timeZoneDetailsCheckBoxClicked); connect(ui->timeZoneComboBox, &QComboBox::currentIndexChanged, this, &MainWindow::timeZoneComboBoxCurrentIndexChanged); connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &MainWindow::domainAverageTableCellChanged); - connect(ui->surfaceInputDownloadCancelButton, &QPushButton::clicked, this, &MainWindow::surfaceInputDownloadCancelButtonClicked); - connect(ui->surfaceInputDownloadButton, &QPushButton::clicked, this, &MainWindow::surfaceInputDownloadButtonClicked); connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); - connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &MainWindow::elevationInputFileOpenButtonClicked); - connect(ui->elevationInputTypePushButton, &QPushButton::clicked, this, &MainWindow::elevationInputTypePushButtonClicked); - connect(mapBridge, &MapBridge::boundingBoxReceived, this, &MainWindow::boundingBoxReceived); + connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInputView, &SurfaceInputView::boundingBoxReceived); + connect(surfaceInputView, &SurfaceInputView::requestRefresh, this, &MainWindow::refreshUI); } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { @@ -410,56 +404,6 @@ void MainWindow::momentumSolverCheckBoxClicked() refreshUI(); } -void MainWindow::elevationInputFileLineEditTextChanged(const QString &arg1) -{ - surfaceInput->computeDEMFile(currentDemFilePath); - surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked()); - - ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); - refreshUI(); -} - -void MainWindow::elevationInputFileOpenButtonClicked() -{ - QString directoryPath; - if(!currentDemFilePath.isEmpty()) - { - directoryPath = currentDemFilePath; - } - else { - directoryPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - } - QString demFilePath = QFileDialog::getOpenFileName(this, "Select a file", directoryPath, "(*.tif);;All Files (*)"); - - if (demFilePath.isEmpty()) { - if (!currentDemFilePath.isEmpty()) { - ui->elevationInputFileLineEdit->setText(QFileInfo(currentDemFilePath).fileName()); - ui->elevationInputFileLineEdit->setToolTip(currentDemFilePath); - } - return; - } - - currentDemFilePath = demFilePath; - ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); - ui->elevationInputFileLineEdit->setToolTip(demFilePath); -} - -void MainWindow::elevationInputFileDownloadButtonClicked() -{ - int currentIndex = ui->inputsStackedWidget->currentIndex(); - ui->inputsStackedWidget->setCurrentIndex(currentIndex+1); -} - -void MainWindow::meshResolutionComboBoxCurrentIndexChanged(int index) -{ - if (index == 3) { - ui->meshResolutionSpinBox->setEnabled(true); - } else { - ui->meshResolutionSpinBox->setEnabled(false); - } - ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); -} - void MainWindow::timeZoneComboBoxCurrentIndexChanged(int index) { QString currentTimeZone = ui->timeZoneComboBox->currentText(); @@ -767,79 +711,6 @@ void MainWindow::loadMapKMZ(const std::vector& input){ } -void MainWindow::surfaceInputDownloadCancelButtonClicked() -{ - int currentIndex = ui->inputsStackedWidget->currentIndex(); - ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); - - ui->boundingBoxNorthLineEdit->clear(); - ui->boundingBoxEastLineEdit->clear(); - ui->boundingBoxSouthLineEdit->clear(); - ui->boundingBoxWestLineEdit->clear(); - - ui->pointRadiusLatLineEdit->clear(); - ui->pointRadiusLonLineEdit->clear(); - ui->pointRadiusRadiusLineEdit->clear(); - - webView->page()->runJavaScript("stopRectangleDrawing();"); -} - -void MainWindow::surfaceInputDownloadButtonClicked() -{ - double boundingBox[4]; - switch(ui->elevationInputTypeStackedWidget->currentIndex()) - { - case 0: - boundingBox[0] = ui->boundingBoxNorthLineEdit->text().toDouble(); - boundingBox[1] = ui->boundingBoxEastLineEdit->text().toDouble(); - boundingBox[2] = ui->boundingBoxSouthLineEdit->text().toDouble(); - boundingBox[3] = ui->boundingBoxWestLineEdit->text().toDouble(); - break; - case 1: - double centerLat = ui->pointRadiusLatLineEdit->text().toDouble(); - double centerLon = ui->pointRadiusLonLineEdit->text().toDouble(); - double radius = ui->pointRadiusRadiusLineEdit->text().toDouble(); - surfaceInput->computeBoundingBox(centerLat, centerLon, radius, boundingBox); - break; - } - - double resolution = 30; - - QString defaultName = ""; - QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - QDir dir(downloadsPath); - QString fullPath = dir.filePath(defaultName); - QString demFilePath = QFileDialog::getSaveFileName(this, "Save DEM File", fullPath, "TIF Files (*.tif)"); - if (demFilePath.isEmpty()) { - return; - } - if (!demFilePath.endsWith(".tif", Qt::CaseInsensitive)) { - demFilePath += ".tif"; - } - currentDemFilePath = demFilePath; - std::string demFile = demFilePath.toStdString(); - - std::string fetchType; - switch(ui->elevationFileTypeComboBox->currentIndex()) - { - case 0: - fetchType = "srtm"; - break; - case 1: - fetchType = "gmted"; - break; - case 2: - fetchType = "lcp"; - break; - } - - int result = surfaceInput->fetchDEMFile(boundingBox, demFile, resolution, fetchType); - - ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); - int currentIndex = ui->inputsStackedWidget->currentIndex(); - ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); -} - /* ** Check for version updates, or messages from the server. */ @@ -958,49 +829,5 @@ char * MainWindow::NinjaQueryServerMessages(bool checkAbort) return NULL; } -void MainWindow::meshResolutionUnitsComboBoxCurrentIndexChanged(int index) -{ - switch(index) - { - case 0: - ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 0.3048); - break; - - case 1: - ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 3.28084); - break; - } -} - -void MainWindow::elevationInputTypePushButtonClicked() -{ - if(ui->elevationInputTypePushButton->isChecked()) - { - webView->page()->runJavaScript("startRectangleDrawing();"); - } - else - { - webView->page()->runJavaScript("stopRectangleDrawing();"); - } -} - -void MainWindow::boundingBoxReceived(double north, double south, double east, double west) -{ - qDebug() << "MainWindow received bbox: " - << north << south << east << west; - - ui->boundingBoxNorthLineEdit->setText(QString::number(north)); - ui->boundingBoxEastLineEdit->setText(QString::number(east)); - ui->boundingBoxSouthLineEdit->setText(QString::number(south)); - ui->boundingBoxWestLineEdit->setText(QString::number(west)); - ui->elevationInputTypePushButton->setChecked(false); - - double pointRadius[3]; - surfaceInput->computePointRadius(north, east, south, west, pointRadius); - ui->pointRadiusLatLineEdit->setText(QString::number(pointRadius[0])); - ui->pointRadiusLonLineEdit->setText(QString::number(pointRadius[1])); - ui->pointRadiusRadiusLineEdit->setText(QString::number(pointRadius[2])); - -} diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index bda0b61db..a1eff13a4 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -3,6 +3,7 @@ #include "ninja_version.h" #include "surfaceinput.h" +#include "surfaceinputview.h" #include "menubar.h" #include "mapbridge.h" #include "ui_mainwindow.h" @@ -55,7 +56,6 @@ class MainWindow : public QMainWindow void populateForecastDownloads(); void toggleExpandCollapse(const QModelIndex &index); void loadMapKMZ(const std::vector& input); - void refreshUI(); // GDAL Values QString GDALDriverName, GDALDriverLongName; @@ -74,10 +74,6 @@ class MainWindow : public QMainWindow private slots: void massSolverCheckBoxClicked(); void momentumSolverCheckBoxClicked(); - void elevationInputFileDownloadButtonClicked(); - void elevationInputFileOpenButtonClicked(); - void elevationInputFileLineEditTextChanged(const QString &arg1); - void meshResolutionComboBoxCurrentIndexChanged(int index); void diurnalCheckBoxClicked(); void stabilityCheckBoxClicked(); void windHeightComboBoxCurrentIndexChanged(int index); @@ -93,34 +89,21 @@ private slots: void timeZoneDetailsCheckBoxClicked(); void timeZoneComboBoxCurrentIndexChanged(int index); void domainAverageTableCellChanged(int row, int column); - void surfaceInputDownloadCancelButtonClicked(); - void surfaceInputDownloadButtonClicked(); - void meshResolutionUnitsComboBoxCurrentIndexChanged(int index); - void elevationInputTypePushButtonClicked(); - void boundingBoxReceived(double north, double south, double east, double west); + void refreshUI(); + private: void connectSignals(); void treeItemClicked(QTreeWidgetItem *item, int column); QSet> invalidDAWCells; - // DEM inputs - double northLat; - double southLat; - double eastLon; - double westLon; - double centerLat; - double centerLon; - double radius; - Ui::MainWindow *ui; QWebEngineView *webView; QWebChannel *channel; MapBridge *mapBridge; - SurfaceInput* surfaceInput; - MenuBar* menuBar; - - QString currentDemFilePath; + SurfaceInput *surfaceInput; + SurfaceInputView *surfaceInputView; + MenuBar *menuBar; bool NinjaCheckVersions(char * mostrecentversion, char * localversion); char * NinjaQueryServerMessages(bool checkAbort); diff --git a/src/gui/surfaceinputview.cpp b/src/gui/surfaceinputview.cpp new file mode 100644 index 000000000..0bea888a2 --- /dev/null +++ b/src/gui/surfaceinputview.cpp @@ -0,0 +1,223 @@ +#include "surfaceinputview.h" +#include "ui_mainwindow.h" + +SurfaceInputView::SurfaceInputView(Ui::MainWindow *ui, + QWebEngineView *webView, + SurfaceInput *surfaceInput, + QObject* parent) + : QObject(parent), + ui(ui), + webView(webView), + surfaceInput(surfaceInput) +{ + connect(ui->boundingBoxNorthLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); + connect(ui->boundingBoxSouthLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); + connect(ui->boundingBoxEastLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); + connect(ui->boundingBoxWestLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); + connect(ui->elevationInputFileDownloadButton, &QPushButton::clicked, this, &SurfaceInputView::elevationInputFileDownloadButtonClicked); + connect(ui->elevationInputFileOpenButton, &QPushButton::clicked, this, &SurfaceInputView::elevationInputFileOpenButtonClicked); + connect(ui->elevationInputFileLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::elevationInputFileLineEditTextChanged); + connect(ui->meshResolutionComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInputView::meshResolutionComboBoxCurrentIndexChanged); + connect(ui->meshResolutionUnitsComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInputView::meshResolutionUnitsComboBoxCurrentIndexChanged); + connect(ui->surfaceInputDownloadCancelButton, &QPushButton::clicked, this, &SurfaceInputView::surfaceInputDownloadCancelButtonClicked); + connect(ui->surfaceInputDownloadButton, &QPushButton::clicked, this, &SurfaceInputView::surfaceInputDownloadButtonClicked); + connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &SurfaceInputView::elevationInputFileOpenButtonClicked); + connect(ui->elevationInputTypePushButton, &QPushButton::clicked, this, &SurfaceInputView::elevationInputTypePushButtonClicked); +} + + +void SurfaceInputView::meshResolutionUnitsComboBoxCurrentIndexChanged(int index) +{ + switch(index) + { + case 0: + ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 0.3048); + break; + + case 1: + ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 3.28084); + break; + } +} + +void SurfaceInputView::elevationInputTypePushButtonClicked() +{ + if(ui->elevationInputTypePushButton->isChecked()) + { + webView->page()->runJavaScript("startRectangleDrawing();"); + } + else + { + webView->page()->runJavaScript("stopRectangleDrawing();"); + } +} + +void SurfaceInputView::boundingBoxReceived(double north, double south, double east, double west) +{ + qDebug() << "MainWindow received bbox: " + << north << south << east << west; + + // Block signals before updating to avoid triggering textChanged + ui->boundingBoxNorthLineEdit->blockSignals(true); + ui->boundingBoxEastLineEdit->blockSignals(true); + ui->boundingBoxSouthLineEdit->blockSignals(true); + ui->boundingBoxWestLineEdit->blockSignals(true); + + ui->boundingBoxNorthLineEdit->setText(QString::number(north)); + ui->boundingBoxEastLineEdit->setText(QString::number(east)); + ui->boundingBoxSouthLineEdit->setText(QString::number(south)); + ui->boundingBoxWestLineEdit->setText(QString::number(west)); + + // Re-enable signals + ui->boundingBoxNorthLineEdit->blockSignals(false); + ui->boundingBoxEastLineEdit->blockSignals(false); + ui->boundingBoxSouthLineEdit->blockSignals(false); + ui->boundingBoxWestLineEdit->blockSignals(false); + + ui->elevationInputTypePushButton->setChecked(false); + + double pointRadius[3]; + surfaceInput->computePointRadius(north, east, south, west, pointRadius); + + ui->pointRadiusLatLineEdit->setText(QString::number(pointRadius[0])); + ui->pointRadiusLonLineEdit->setText(QString::number(pointRadius[1])); + ui->pointRadiusRadiusLineEdit->setText(QString::number(pointRadius[2])); +} + +void SurfaceInputView::boundingBoxLineEditsTextChanged() +{ + QString north = ui->boundingBoxNorthLineEdit->text(); + QString east = ui->boundingBoxEastLineEdit->text(); + QString south = ui->boundingBoxSouthLineEdit->text(); + QString west = ui->boundingBoxWestLineEdit->text(); + + if (!north.isEmpty() && !east.isEmpty() && !south.isEmpty() && !west.isEmpty()) + { + QString js = QString("drawBoundingBox(%1, %2, %3, %4);").arg(north).arg(south) .arg(east).arg(west); + webView->page()->runJavaScript(js); + } +} + +void SurfaceInputView::surfaceInputDownloadCancelButtonClicked() +{ + int currentIndex = ui->inputsStackedWidget->currentIndex(); + ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); + + ui->boundingBoxNorthLineEdit->clear(); + ui->boundingBoxEastLineEdit->clear(); + ui->boundingBoxSouthLineEdit->clear(); + ui->boundingBoxWestLineEdit->clear(); + + ui->pointRadiusLatLineEdit->clear(); + ui->pointRadiusLonLineEdit->clear(); + ui->pointRadiusRadiusLineEdit->clear(); + + webView->page()->runJavaScript("stopRectangleDrawing();"); +} + +void SurfaceInputView::surfaceInputDownloadButtonClicked() +{ + double boundingBox[4]; + switch(ui->elevationInputTypeStackedWidget->currentIndex()) + { + case 0: + boundingBox[0] = ui->boundingBoxNorthLineEdit->text().toDouble(); + boundingBox[1] = ui->boundingBoxEastLineEdit->text().toDouble(); + boundingBox[2] = ui->boundingBoxSouthLineEdit->text().toDouble(); + boundingBox[3] = ui->boundingBoxWestLineEdit->text().toDouble(); + break; + case 1: + double centerLat = ui->pointRadiusLatLineEdit->text().toDouble(); + double centerLon = ui->pointRadiusLonLineEdit->text().toDouble(); + double radius = ui->pointRadiusRadiusLineEdit->text().toDouble(); + surfaceInput->computeBoundingBox(centerLat, centerLon, radius, boundingBox); + break; + } + + double resolution = 30; + + QString defaultName = ""; + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + QDir dir(downloadsPath); + QString fullPath = dir.filePath(defaultName); + QString demFilePath = QFileDialog::getSaveFileName(ui->centralwidget, "Save DEM File", fullPath, "TIF Files (*.tif)"); + if (demFilePath.isEmpty()) { + return; + } + if (!demFilePath.endsWith(".tif", Qt::CaseInsensitive)) { + demFilePath += ".tif"; + } + currentDemFilePath = demFilePath; + std::string demFile = demFilePath.toStdString(); + + std::string fetchType; + switch(ui->elevationFileTypeComboBox->currentIndex()) + { + case 0: + fetchType = "srtm"; + break; + case 1: + fetchType = "gmted"; + break; + case 2: + fetchType = "lcp"; + break; + } + + int result = surfaceInput->fetchDEMFile(boundingBox, demFile, resolution, fetchType); + + ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); + int currentIndex = ui->inputsStackedWidget->currentIndex(); + ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); +} + +void SurfaceInputView::elevationInputFileDownloadButtonClicked() +{ + int currentIndex = ui->inputsStackedWidget->currentIndex(); + ui->inputsStackedWidget->setCurrentIndex(currentIndex+1); +} + +void SurfaceInputView::meshResolutionComboBoxCurrentIndexChanged(int index) +{ + if (index == 3) { + ui->meshResolutionSpinBox->setEnabled(true); + } else { + ui->meshResolutionSpinBox->setEnabled(false); + } + ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); +} + +void SurfaceInputView::elevationInputFileLineEditTextChanged(const QString &arg1) +{ + surfaceInput->computeDEMFile(currentDemFilePath); + surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked()); + + ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + emit requestRefresh(); +} + +void SurfaceInputView::elevationInputFileOpenButtonClicked() +{ + QString directoryPath; + if(!currentDemFilePath.isEmpty()) + { + directoryPath = currentDemFilePath; + } + else { + directoryPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + } + QString demFilePath = QFileDialog::getOpenFileName(ui->centralwidget, "Select a file", directoryPath, "(*.tif);;All Files (*)"); + + if (demFilePath.isEmpty()) { + if (!currentDemFilePath.isEmpty()) { + ui->elevationInputFileLineEdit->setText(QFileInfo(currentDemFilePath).fileName()); + ui->elevationInputFileLineEdit->setToolTip(currentDemFilePath); + } + return; + } + + currentDemFilePath = demFilePath; + ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); + ui->elevationInputFileLineEdit->setToolTip(demFilePath); +} + diff --git a/src/gui/surfaceinputview.h b/src/gui/surfaceinputview.h new file mode 100644 index 000000000..31651bd65 --- /dev/null +++ b/src/gui/surfaceinputview.h @@ -0,0 +1,50 @@ +#ifndef SURFACEINPUTVIEW_H +#define SURFACEINPUTVIEW_H + +#include "surfaceinput.h" +#include +#include +#include +#include +#include +#include +#include + +namespace Ui { +class MainWindow; +} + +class SurfaceInputView : public QObject { + Q_OBJECT +public: + explicit SurfaceInputView(Ui::MainWindow* ui, + QWebEngineView* webView, + SurfaceInput* surfaceInput, + QObject* parent = nullptr); + +signals: + void requestRefresh(); + +public slots: + void boundingBoxReceived(double north, double south, double east, double west); + +private slots: + void surfaceInputDownloadCancelButtonClicked(); + void surfaceInputDownloadButtonClicked(); + void meshResolutionUnitsComboBoxCurrentIndexChanged(int index); + void elevationInputTypePushButtonClicked(); + void boundingBoxLineEditsTextChanged(); + void elevationInputFileDownloadButtonClicked(); + void elevationInputFileOpenButtonClicked(); + void elevationInputFileLineEditTextChanged(const QString &arg1); + void meshResolutionComboBoxCurrentIndexChanged(int index); + +private: + Ui::MainWindow *ui; + QWebEngineView *webView; + SurfaceInput *surfaceInput; + + QString currentDemFilePath; +}; + +#endif // SURFACEINPUTVIEW_H From b64a72f5dc0fa185d148a7d0e80810a8b202e316 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 10 Jul 2025 13:35:02 -0600 Subject: [PATCH 105/435] renamed menubar to match the new surfaceinput class --- src/gui/CMakeLists.txt | 2 +- src/gui/mainwindow.cpp | 4 +- src/gui/mainwindow.h | 16 +-- src/gui/menubar.cpp | 148 --------------------------- src/gui/menubarview.cpp | 148 +++++++++++++++++++++++++++ src/gui/{menubar.h => menubarview.h} | 10 +- 6 files changed, 158 insertions(+), 170 deletions(-) delete mode 100644 src/gui/menubar.cpp create mode 100644 src/gui/menubarview.cpp rename src/gui/{menubar.h => menubarview.h} (87%) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 6bbf1d480..08c8bddb7 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -31,7 +31,7 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) splashscreen.cpp surfaceinput.h surfaceinput.cpp - menubar.h menubar.cpp + menubarview.h menubarview.cpp mapbridge.h mapbridge.cpp surfaceinputview.h surfaceinputview.cpp diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 954aa301f..b70640a6f 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -208,7 +208,7 @@ MainWindow::MainWindow(QWidget *parent) webView->setUrl(url); surfaceInput = new SurfaceInput(); - menuBar = new MenuBar(ui, this); + menuBarView = new MenuBarView(ui, this); surfaceInputView = new SurfaceInputView(ui, webView, surfaceInput, this); @@ -290,7 +290,7 @@ MainWindow::~MainWindow() delete channel; delete mapBridge; delete surfaceInput; - delete menuBar; + delete menuBarView; delete ui; } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index a1eff13a4..0b76ecdc6 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -4,7 +4,7 @@ #include "ninja_version.h" #include "surfaceinput.h" #include "surfaceinputview.h" -#include "menubar.h" +#include "menubarview.h" #include "mapbridge.h" #include "ui_mainwindow.h" #include "cpl_http.h" @@ -52,22 +52,10 @@ class MainWindow : public QMainWindow Q_OBJECT public: - Ui::MainWindow* getUi() const { return ui; } void populateForecastDownloads(); void toggleExpandCollapse(const QModelIndex &index); void loadMapKMZ(const std::vector& input); - // GDAL Values - QString GDALDriverName, GDALDriverLongName; - std::string GDALProjRef; - bool hasGDALCenter; - double GDALCenterLat; - double GDALCenterLon; - int GDALXSize, GDALYSize; - double GDALCellSize, GDALNoData; - double GDALMaxValue, GDALMinValue; - - MainWindow(QWidget *parent = nullptr); ~MainWindow(); @@ -103,7 +91,7 @@ private slots: MapBridge *mapBridge; SurfaceInput *surfaceInput; SurfaceInputView *surfaceInputView; - MenuBar *menuBar; + MenuBarView *menuBarView; bool NinjaCheckVersions(char * mostrecentversion, char * localversion); char * NinjaQueryServerMessages(bool checkAbort); diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp deleted file mode 100644 index 0fdc75127..000000000 --- a/src/gui/menubar.cpp +++ /dev/null @@ -1,148 +0,0 @@ -#include "menubar.h" -#include "ui_mainwindow.h" - -MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) - : QObject(parent), ui(ui) -{ - // QMenu fileMenu "File" actions - connect(ui->newProjectAction, &QAction::triggered, this, &MenuBar::newProject); - connect(ui->openProjectAction, &QAction::triggered, this, &MenuBar::openProject); - connect(ui->exportSolutionAction, &QAction::triggered, this, &MenuBar::exportSolution); - connect(ui->closeProjectAction, &QAction::triggered, this, &MenuBar::closeProject); - //connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QCoreApplication::quit); // exit the entire app - // QMenu optionsMenu "Options" actions - connect(ui->enableConsoleOutputAction, &QAction::triggered, this, &MenuBar::enableConsoleOutput); - connect(ui->writeConsoleOutputAction, &QAction::triggered, this, &MenuBar::writeConsoleOutput); - - // QMenu toolsMenu "Tools" actions - connect(ui->resampleDataAction, &QAction::triggered, this, &MenuBar::resampleData); - connect(ui->writeBlankStationFileAction, &QAction::triggered, this, &MenuBar::writeBlankStationFile); - connect(ui->setConfigurationOptionAction, &QAction::triggered, this, &MenuBar::setConfigurationOption); - - // QMenu helpMenu "Help" actions - // sub QMenu displayingShapeFilesMenu "Displaying Shapefiles" actions - connect(ui->displayArcGISProGuideAction, &QAction::triggered, this, &MenuBar::displayArcGISProGuide); - - // sub QMenu tutorialsMenu "Tutorials" actions - connect(ui->displayTutorial1Action, &QAction::triggered, this, &MenuBar::displayTutorial1); - connect(ui->displayTutorial2Action, &QAction::triggered, this, &MenuBar::displayTutorial2); - connect(ui->displayTutorial3Action, &QAction::triggered, this, &MenuBar::displayTutorial3); - connect(ui->displayTutorial4Action, &QAction::triggered, this, &MenuBar::displayTutorial4); - - // sub QMenu instructionsMenu "Instructions" actions - connect(ui->displayDemDownloadInstructionsAction, &QAction::triggered, this, &MenuBar::displayDemDownloadInstructions); - connect(ui->displayFetchDemInstructionsAction, &QAction::triggered, this, &MenuBar::displayFetchDemInstructions); - connect(ui->displayCommandLineInterfaceInstructionsAction, &QAction::triggered, this, &MenuBar::displayCommandLineInterfaceInstructions); - - // remaining non-sub QMenu actions - connect(ui->aboutWindNinjaAction, &QAction::triggered, this, &MenuBar::aboutWindNinja); - connect(ui->citeWindNinjaAction, &QAction::triggered, this, &MenuBar::citeWindNinja); - connect(ui->supportEmailAction, &QAction::triggered, this, &MenuBar::supportEmail); - connect(ui->submitBugReportAction, &QAction::triggered, this, &MenuBar::submitBugReport); - connect(ui->aboutQtAction, &QAction::triggered, this, &QApplication::aboutQt); -} - -void MenuBar::newProject() -{ - qDebug() << "MenuBar: newProject() triggered"; -} - -void MenuBar::openProject() -{ - qDebug() << "MenuBar: openProject() triggered"; -} - -void MenuBar::exportSolution() -{ - qDebug() << "MenuBar: exportSolution() triggered"; -} - -void MenuBar::closeProject() -{ - qDebug() << "MenuBar: closeProject() triggered"; -} - -void MenuBar::enableConsoleOutput() -{ - qDebug() << "MenuBar: enableConsoleOutput() triggered"; -} - -void MenuBar::writeConsoleOutput() -{ - qDebug() << "MenuBar: writeConsoleOutput() triggered"; -} - -void MenuBar::resampleData() -{ - qDebug() << "MenuBar: resampleData() triggered"; -} - -void MenuBar::writeBlankStationFile() -{ - qDebug() << "MenuBar: writeBlankStationFile() triggered"; -} - -void MenuBar::setConfigurationOption() -{ - qDebug() << "MenuBar: setConfigurationOption() triggered"; -} - -void MenuBar::displayArcGISProGuide() -{ - qDebug() << "MenuBar: displayArcGISProGuide() triggered"; -} - -void MenuBar::displayTutorial1() -{ - qDebug() << "MenuBar: displayTutorial1() triggered"; -} - -void MenuBar::displayTutorial2() -{ - qDebug() << "MenuBar: displayTutorial2() triggered"; -} - -void MenuBar::displayTutorial3() -{ - qDebug() << "MenuBar: displayTutorial3() triggered"; -} - -void MenuBar::displayTutorial4() -{ - qDebug() << "MenuBar: displayTutorial4() triggered"; -} - -void MenuBar::displayDemDownloadInstructions() -{ - qDebug() << "MenuBar: displayDemDownloadInstructions() triggered"; -} - -void MenuBar::displayFetchDemInstructions() -{ - qDebug() << "MenuBar: displayFetchDemInstructions() triggered"; -} - -void MenuBar::displayCommandLineInterfaceInstructions() -{ - qDebug() << "MenuBar: displayCommandLineInterfaceInstructions() triggered"; -} - -void MenuBar::aboutWindNinja() -{ - qDebug() << "MenuBar: aboutWindNinja() triggered"; -} - -void MenuBar::citeWindNinja() -{ - qDebug() << "MenuBar: citeWindNinja() triggered"; -} - -void MenuBar::supportEmail() -{ - qDebug() << "MenuBar: supportEmail() triggered"; -} - -void MenuBar::submitBugReport() -{ - qDebug() << "MenuBar: submitBugReport() triggered"; -} diff --git a/src/gui/menubarview.cpp b/src/gui/menubarview.cpp new file mode 100644 index 000000000..a5025765c --- /dev/null +++ b/src/gui/menubarview.cpp @@ -0,0 +1,148 @@ +#include "menubarview.h" +#include "ui_mainwindow.h" + +MenuBarView::MenuBarView(Ui::MainWindow* ui, QObject* parent) + : QObject(parent), ui(ui) +{ + // QMenu fileMenu "File" actions + connect(ui->newProjectAction, &QAction::triggered, this, &MenuBarView::newProject); + connect(ui->openProjectAction, &QAction::triggered, this, &MenuBarView::openProject); + connect(ui->exportSolutionAction, &QAction::triggered, this, &MenuBarView::exportSolution); + connect(ui->closeProjectAction, &QAction::triggered, this, &MenuBarView::closeProject); + //connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QCoreApplication::quit); // exit the entire app + // QMenu optionsMenu "Options" actions + connect(ui->enableConsoleOutputAction, &QAction::triggered, this, &MenuBarView::enableConsoleOutput); + connect(ui->writeConsoleOutputAction, &QAction::triggered, this, &MenuBarView::writeConsoleOutput); + + // QMenu toolsMenu "Tools" actions + connect(ui->resampleDataAction, &QAction::triggered, this, &MenuBarView::resampleData); + connect(ui->writeBlankStationFileAction, &QAction::triggered, this, &MenuBarView::writeBlankStationFile); + connect(ui->setConfigurationOptionAction, &QAction::triggered, this, &MenuBarView::setConfigurationOption); + + // QMenu helpMenu "Help" actions + // sub QMenu displayingShapeFilesMenu "Displaying Shapefiles" actions + connect(ui->displayArcGISProGuideAction, &QAction::triggered, this, &MenuBarView::displayArcGISProGuide); + + // sub QMenu tutorialsMenu "Tutorials" actions + connect(ui->displayTutorial1Action, &QAction::triggered, this, &MenuBarView::displayTutorial1); + connect(ui->displayTutorial2Action, &QAction::triggered, this, &MenuBarView::displayTutorial2); + connect(ui->displayTutorial3Action, &QAction::triggered, this, &MenuBarView::displayTutorial3); + connect(ui->displayTutorial4Action, &QAction::triggered, this, &MenuBarView::displayTutorial4); + + // sub QMenu instructionsMenu "Instructions" actions + connect(ui->displayDemDownloadInstructionsAction, &QAction::triggered, this, &MenuBarView::displayDemDownloadInstructions); + connect(ui->displayFetchDemInstructionsAction, &QAction::triggered, this, &MenuBarView::displayFetchDemInstructions); + connect(ui->displayCommandLineInterfaceInstructionsAction, &QAction::triggered, this, &MenuBarView::displayCommandLineInterfaceInstructions); + + // remaining non-sub QMenu actions + connect(ui->aboutWindNinjaAction, &QAction::triggered, this, &MenuBarView::aboutWindNinja); + connect(ui->citeWindNinjaAction, &QAction::triggered, this, &MenuBarView::citeWindNinja); + connect(ui->supportEmailAction, &QAction::triggered, this, &MenuBarView::supportEmail); + connect(ui->submitBugReportAction, &QAction::triggered, this, &MenuBarView::submitBugReport); + connect(ui->aboutQtAction, &QAction::triggered, this, &QApplication::aboutQt); +} + +void MenuBarView::newProject() +{ + qDebug() << "MenuBarView: newProject() triggered"; +} + +void MenuBarView::openProject() +{ + qDebug() << "MenuBarView: openProject() triggered"; +} + +void MenuBarView::exportSolution() +{ + qDebug() << "MenuBarView: exportSolution() triggered"; +} + +void MenuBarView::closeProject() +{ + qDebug() << "MenuBarView: closeProject() triggered"; +} + +void MenuBarView::enableConsoleOutput() +{ + qDebug() << "MenuBarView: enableConsoleOutput() triggered"; +} + +void MenuBarView::writeConsoleOutput() +{ + qDebug() << "MenuBarView: writeConsoleOutput() triggered"; +} + +void MenuBarView::resampleData() +{ + qDebug() << "MenuBarView: resampleData() triggered"; +} + +void MenuBarView::writeBlankStationFile() +{ + qDebug() << "MenuBarView: writeBlankStationFile() triggered"; +} + +void MenuBarView::setConfigurationOption() +{ + qDebug() << "MenuBarView: setConfigurationOption() triggered"; +} + +void MenuBarView::displayArcGISProGuide() +{ + qDebug() << "MenuBarView: displayArcGISProGuide() triggered"; +} + +void MenuBarView::displayTutorial1() +{ + qDebug() << "MenuBarView: displayTutorial1() triggered"; +} + +void MenuBarView::displayTutorial2() +{ + qDebug() << "MenuBarView: displayTutorial2() triggered"; +} + +void MenuBarView::displayTutorial3() +{ + qDebug() << "MenuBarView: displayTutorial3() triggered"; +} + +void MenuBarView::displayTutorial4() +{ + qDebug() << "MenuBarView: displayTutorial4() triggered"; +} + +void MenuBarView::displayDemDownloadInstructions() +{ + qDebug() << "MenuBarView: displayDemDownloadInstructions() triggered"; +} + +void MenuBarView::displayFetchDemInstructions() +{ + qDebug() << "MenuBarView: displayFetchDemInstructions() triggered"; +} + +void MenuBarView::displayCommandLineInterfaceInstructions() +{ + qDebug() << "MenuBarView: displayCommandLineInterfaceInstructions() triggered"; +} + +void MenuBarView::aboutWindNinja() +{ + qDebug() << "MenuBarView: aboutWindNinja() triggered"; +} + +void MenuBarView::citeWindNinja() +{ + qDebug() << "MenuBarView: citeWindNinja() triggered"; +} + +void MenuBarView::supportEmail() +{ + qDebug() << "MenuBarView: supportEmail() triggered"; +} + +void MenuBarView::submitBugReport() +{ + qDebug() << "MenuBarView: submitBugReport() triggered"; +} diff --git a/src/gui/menubar.h b/src/gui/menubarview.h similarity index 87% rename from src/gui/menubar.h rename to src/gui/menubarview.h index 10cf33f63..ecaab727f 100644 --- a/src/gui/menubar.h +++ b/src/gui/menubarview.h @@ -1,5 +1,5 @@ -#ifndef MENUBAR_H -#define MENUBAR_H +#ifndef MENUBARVIEW_H +#define MENUBARVIEW_H #include @@ -7,11 +7,11 @@ namespace Ui { class MainWindow; } -class MenuBar : public QObject +class MenuBarView : public QObject { Q_OBJECT public: - explicit MenuBar(Ui::MainWindow* ui, QObject* parent = nullptr); + explicit MenuBarView(Ui::MainWindow* ui, QObject* parent = nullptr); private slots: // functions for Menu actions @@ -49,4 +49,4 @@ private slots: Ui::MainWindow* ui; }; -#endif // MENUBAR_H +#endif // MENUBARVIEW_H From ff6d15da452268de716da2342316c5a4ba24cd0f Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 11 Jul 2025 12:52:21 -0600 Subject: [PATCH 106/435] Added a progress bar dialog box for the download, WIP --- src/gui/surfaceinputview.cpp | 43 +++++++++++++++++++++++++++++------- src/gui/surfaceinputview.h | 7 ++++++ 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/gui/surfaceinputview.cpp b/src/gui/surfaceinputview.cpp index 0bea888a2..a8909c13c 100644 --- a/src/gui/surfaceinputview.cpp +++ b/src/gui/surfaceinputview.cpp @@ -57,7 +57,6 @@ void SurfaceInputView::boundingBoxReceived(double north, double south, double ea qDebug() << "MainWindow received bbox: " << north << south << east << west; - // Block signals before updating to avoid triggering textChanged ui->boundingBoxNorthLineEdit->blockSignals(true); ui->boundingBoxEastLineEdit->blockSignals(true); ui->boundingBoxSouthLineEdit->blockSignals(true); @@ -68,7 +67,6 @@ void SurfaceInputView::boundingBoxReceived(double north, double south, double ea ui->boundingBoxSouthLineEdit->setText(QString::number(south)); ui->boundingBoxWestLineEdit->setText(QString::number(west)); - // Re-enable signals ui->boundingBoxNorthLineEdit->blockSignals(false); ui->boundingBoxEastLineEdit->blockSignals(false); ui->boundingBoxSouthLineEdit->blockSignals(false); @@ -86,14 +84,23 @@ void SurfaceInputView::boundingBoxReceived(double north, double south, double ea void SurfaceInputView::boundingBoxLineEditsTextChanged() { - QString north = ui->boundingBoxNorthLineEdit->text(); - QString east = ui->boundingBoxEastLineEdit->text(); - QString south = ui->boundingBoxSouthLineEdit->text(); - QString west = ui->boundingBoxWestLineEdit->text(); + bool isNorthValid, isEastValid, isSouthValid, isWestValid; - if (!north.isEmpty() && !east.isEmpty() && !south.isEmpty() && !west.isEmpty()) + double north = ui->boundingBoxNorthLineEdit->text().toDouble(&isNorthValid); + double east = ui->boundingBoxEastLineEdit->text().toDouble(&isEastValid); + double south = ui->boundingBoxSouthLineEdit->text().toDouble(&isSouthValid); + double west = ui->boundingBoxWestLineEdit->text().toDouble(&isWestValid); + + qDebug() << north << south << east << west; + + if (isNorthValid && isEastValid && isSouthValid && isWestValid) { - QString js = QString("drawBoundingBox(%1, %2, %3, %4);").arg(north).arg(south) .arg(east).arg(west); + QString js = QString("drawBoundingBox(%1, %2, %3, %4);") + .arg(north, 0, 'f', 10) + .arg(south, 0, 'f', 10) + .arg(east, 0, 'f', 10) + .arg(west, 0, 'f', 10); + webView->page()->runJavaScript(js); } } @@ -164,8 +171,28 @@ void SurfaceInputView::surfaceInputDownloadButtonClicked() break; } + QProgressDialog progress("Fetching DEM file...", QString(), 0, 0, ui->centralwidget); + progress.setWindowModality(Qt::WindowModal); + progress.setCancelButton(nullptr); + progress.setMinimumDuration(0); + progress.show(); + + // Start the future + QFuture future = QtConcurrent::run(&SurfaceInput::fetchDEMFile, surfaceInput, boundingBox, demFile, resolution, fetchType); + QFutureWatcher futureWatcher; + futureWatcher.setFuture(future); + + // Use a local event loop to wait until the operation is done + QEventLoop loop; + QObject::connect(&futureWatcher, &QFutureWatcher::finished, &loop, &QEventLoop::quit); + loop.exec(); // blocks but keeps UI responsive + + progress.close(); // optional, will close automatically as it's parented to the UI + int result = surfaceInput->fetchDEMFile(boundingBox, demFile, resolution, fetchType); + progress.close(); + ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); int currentIndex = ui->inputsStackedWidget->currentIndex(); ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); diff --git a/src/gui/surfaceinputview.h b/src/gui/surfaceinputview.h index 31651bd65..2de3e0f40 100644 --- a/src/gui/surfaceinputview.h +++ b/src/gui/surfaceinputview.h @@ -9,6 +9,11 @@ #include #include #include +#include +#include +#include +#include +#include namespace Ui { class MainWindow; @@ -44,6 +49,8 @@ private slots: QWebEngineView *webView; SurfaceInput *surfaceInput; + QFutureWatcher futureWatcher; + QString currentDemFilePath; }; From c2f7905ec1f097706f307b86ae58e13229d7f419 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 15 Jul 2025 11:30:29 -0600 Subject: [PATCH 107/435] Bounding box is updated correctly when inputing bb coordinates or point and radius coordinates, fixed issues with spacers as well --- data/map.html | 16 +++--------- src/gui/mainwindow.ui | 36 +++++++++++++++----------- src/gui/surfaceinput.cpp | 9 +++---- src/gui/surfaceinput.h | 5 ++-- src/gui/surfaceinputview.cpp | 49 +++++++++++++++++++++--------------- src/gui/surfaceinputview.h | 1 + 6 files changed, 61 insertions(+), 55 deletions(-) diff --git a/data/map.html b/data/map.html index 6879221b4..46e090c11 100755 --- a/data/map.html +++ b/data/map.html @@ -130,16 +130,10 @@ mbrLayer.clearLayers(); const bounds = [[south, west], [north, east]]; - const rectangle = L.rectangle(bounds, { - color: '#ff7800', - weight: 2 - }).addTo(mbrLayer); + const rectangle = L.rectangle(bounds).addTo(mbrLayer); + + rectangle.editing.enable(); - map.fitBounds(rectangle.getBounds()); - - rectangle.editing.enable(); // Enable edit mode - - // Send bounding box to bridge function sendBoundingBox() { const bounds = rectangle.getBounds(); const bboxData = { @@ -153,9 +147,7 @@ window.bridge.receiveBoundingBox(JSON.stringify(bboxData)); } } - - sendBoundingBox(); // Send initially - rectangle.on('edit', sendBoundingBox); // Send on edits + rectangle.on('edit', sendBoundingBox); } const rectangleDrawer = new L.Draw.Rectangle(map); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index e4e751fa9..1b084922c 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -524,7 +524,7 @@ QFrame::Shadow::Sunken - 6 + 5 @@ -793,7 +793,7 @@ li.checked::marker { content: "\2612"; } 0 - + QLayout::SizeConstraint::SetMinAndMaxSize @@ -1166,19 +1166,6 @@ li.checked::marker { content: "\2612"; }
- - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - @@ -1208,6 +1195,22 @@ li.checked::marker { content: "\2612"; } + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::MinimumExpanding + + + + 20 + 40 + + + +
@@ -1453,6 +1456,9 @@ li.checked::marker { content: "\2612"; } Qt::Orientation::Vertical + + QSizePolicy::Policy::Expanding + 20 diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index ed3a596bf..3b4a588e4 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -1,5 +1,4 @@ #include "surfaceinput.h" -#include SurfaceInput::SurfaceInput() { @@ -47,10 +46,9 @@ QString SurfaceInput::fetchTimeZoneDetails(QString currentTimeZone) { QString standardName = matchedRow.value(2); QString daylightName = matchedRow.value(4); - QString stdOffsetStr = matchedRow.value(5); // Already in HH:MM:SS - QString dstAdjustStr = matchedRow.value(6); // Already in HH:MM:SS + QString stdOffsetStr = matchedRow.value(5); + QString dstAdjustStr = matchedRow.value(6); - // Function to convert signed HH:MM:SS to total seconds auto timeToSeconds = [](const QString& t) -> int { QString s = t.trimmed(); bool negative = s.startsWith('-'); @@ -163,7 +161,7 @@ int SurfaceInput::fetchDEMFile(double boundingBox[], std::string demFile, double } } -int SurfaceInput::computeDEMFile(QString filePath) +void SurfaceInput::computeDEMFile(QString filePath) { double adfGeoTransform[6]; GDALDataset *poInputDS; @@ -197,7 +195,6 @@ int SurfaceInput::computeDEMFile(QString filePath) GDALClose((GDALDatasetH)poInputDS); - return 0; } double SurfaceInput::computeMeshResolution(int index, bool isMomemtumChecked) diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index cfad50947..e456db505 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -1,10 +1,11 @@ #ifndef SURFACEINPUT_H #define SURFACEINPUT_H -#include #include "gdal_utils.h" #include "gdal_priv.h" #include "../ninja/windninja.h" +#include +#include class SurfaceInput { @@ -14,7 +15,7 @@ class SurfaceInput QString fetchTimeZoneDetails(QString currentTimeZone); QVector> fetchAllTimeZones(bool isShowAllTimeZonesSelected); int fetchDEMFile(double boundingBox[], std::string demFile, double resolution, std::string fetchType); - int computeDEMFile(QString filePath); + void computeDEMFile(QString filePath); double computeMeshResolution(int index, bool isMomemtumChecked); void computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]); void computePointRadius(double north, double east, double south, double west, double pointRadius[3]); diff --git a/src/gui/surfaceinputview.cpp b/src/gui/surfaceinputview.cpp index a8909c13c..e02ecc81d 100644 --- a/src/gui/surfaceinputview.cpp +++ b/src/gui/surfaceinputview.cpp @@ -14,6 +14,9 @@ SurfaceInputView::SurfaceInputView(Ui::MainWindow *ui, connect(ui->boundingBoxSouthLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); connect(ui->boundingBoxEastLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); connect(ui->boundingBoxWestLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); + connect(ui->pointRadiusLatLineEdit,&QLineEdit::textChanged, this, &SurfaceInputView::pointRadiusLineEditsTextChanged); + connect(ui->pointRadiusLonLineEdit,&QLineEdit::textChanged, this, &SurfaceInputView::pointRadiusLineEditsTextChanged); + connect(ui->pointRadiusRadiusLineEdit,&QLineEdit::textChanged, this, &SurfaceInputView::pointRadiusLineEditsTextChanged); connect(ui->elevationInputFileDownloadButton, &QPushButton::clicked, this, &SurfaceInputView::elevationInputFileDownloadButtonClicked); connect(ui->elevationInputFileOpenButton, &QPushButton::clicked, this, &SurfaceInputView::elevationInputFileOpenButtonClicked); connect(ui->elevationInputFileLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::elevationInputFileLineEditTextChanged); @@ -54,9 +57,6 @@ void SurfaceInputView::elevationInputTypePushButtonClicked() void SurfaceInputView::boundingBoxReceived(double north, double south, double east, double west) { - qDebug() << "MainWindow received bbox: " - << north << south << east << west; - ui->boundingBoxNorthLineEdit->blockSignals(true); ui->boundingBoxEastLineEdit->blockSignals(true); ui->boundingBoxSouthLineEdit->blockSignals(true); @@ -72,14 +72,13 @@ void SurfaceInputView::boundingBoxReceived(double north, double south, double ea ui->boundingBoxSouthLineEdit->blockSignals(false); ui->boundingBoxWestLineEdit->blockSignals(false); - ui->elevationInputTypePushButton->setChecked(false); - double pointRadius[3]; surfaceInput->computePointRadius(north, east, south, west, pointRadius); - ui->pointRadiusLatLineEdit->setText(QString::number(pointRadius[0])); ui->pointRadiusLonLineEdit->setText(QString::number(pointRadius[1])); ui->pointRadiusRadiusLineEdit->setText(QString::number(pointRadius[2])); + + ui->elevationInputTypePushButton->setChecked(false); } void SurfaceInputView::boundingBoxLineEditsTextChanged() @@ -91,20 +90,36 @@ void SurfaceInputView::boundingBoxLineEditsTextChanged() double south = ui->boundingBoxSouthLineEdit->text().toDouble(&isSouthValid); double west = ui->boundingBoxWestLineEdit->text().toDouble(&isWestValid); - qDebug() << north << south << east << west; - if (isNorthValid && isEastValid && isSouthValid && isWestValid) { QString js = QString("drawBoundingBox(%1, %2, %3, %4);") - .arg(north, 0, 'f', 10) - .arg(south, 0, 'f', 10) - .arg(east, 0, 'f', 10) - .arg(west, 0, 'f', 10); - + .arg(north, 0, 'f', 10) + .arg(south, 0, 'f', 10) + .arg(east, 0, 'f', 10) + .arg(west, 0, 'f', 10); webView->page()->runJavaScript(js); } } +void SurfaceInputView::pointRadiusLineEditsTextChanged() +{ + bool isLatValid, isLonValid, isRadiusValid; + + double lat = ui->pointRadiusLatLineEdit->text().toDouble(&isLatValid); + double lon = ui->pointRadiusLonLineEdit->text().toDouble(&isLonValid); + double radius = ui->pointRadiusRadiusLineEdit->text().toDouble(&isRadiusValid); + double boundingBox[4]; + + if(isLatValid && isLonValid && isRadiusValid) + { + surfaceInput->computeBoundingBox(lat, lon, radius, boundingBox); + ui->boundingBoxNorthLineEdit->setText(QString::number(boundingBox[0])); + ui->boundingBoxEastLineEdit->setText(QString::number(boundingBox[1])); + ui->boundingBoxSouthLineEdit->setText(QString::number(boundingBox[2])); + ui->boundingBoxWestLineEdit->setText(QString::number(boundingBox[3])); + } +} + void SurfaceInputView::surfaceInputDownloadCancelButtonClicked() { int currentIndex = ui->inputsStackedWidget->currentIndex(); @@ -177,19 +192,13 @@ void SurfaceInputView::surfaceInputDownloadButtonClicked() progress.setMinimumDuration(0); progress.show(); - // Start the future QFuture future = QtConcurrent::run(&SurfaceInput::fetchDEMFile, surfaceInput, boundingBox, demFile, resolution, fetchType); QFutureWatcher futureWatcher; futureWatcher.setFuture(future); - // Use a local event loop to wait until the operation is done QEventLoop loop; QObject::connect(&futureWatcher, &QFutureWatcher::finished, &loop, &QEventLoop::quit); - loop.exec(); // blocks but keeps UI responsive - - progress.close(); // optional, will close automatically as it's parented to the UI - - int result = surfaceInput->fetchDEMFile(boundingBox, demFile, resolution, fetchType); + loop.exec(); progress.close(); diff --git a/src/gui/surfaceinputview.h b/src/gui/surfaceinputview.h index 2de3e0f40..ade8253ef 100644 --- a/src/gui/surfaceinputview.h +++ b/src/gui/surfaceinputview.h @@ -39,6 +39,7 @@ private slots: void meshResolutionUnitsComboBoxCurrentIndexChanged(int index); void elevationInputTypePushButtonClicked(); void boundingBoxLineEditsTextChanged(); + void pointRadiusLineEditsTextChanged(); void elevationInputFileDownloadButtonClicked(); void elevationInputFileOpenButtonClicked(); void elevationInputFileLineEditTextChanged(const QString &arg1); From f36a90d586cf335ab21233aa22d186e075c67edd Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 15 Jul 2025 12:12:36 -0600 Subject: [PATCH 108/435] Cleaned up the implementation of the progress dialog box for fetching a DEM --- src/gui/mainwindow.ui | 4 +- src/gui/surfaceinput.cpp | 4 +- src/gui/surfaceinput.h | 2 +- src/gui/surfaceinputview.cpp | 92 +++++++++++++++++++----------------- src/gui/surfaceinputview.h | 8 +++- 5 files changed, 60 insertions(+), 50 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 1b084922c..89800ae29 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -1079,7 +1079,7 @@ li.checked::marker { content: "\2612"; } Time Zone - + @@ -1196,7 +1196,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 3b4a588e4..a27918c88 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -144,13 +144,13 @@ QVector> SurfaceInput::fetchAllTimeZones(bool isShowAllTimeZone } } -int SurfaceInput::fetchDEMFile(double boundingBox[], std::string demFile, double resolution, std::string fetchType) +int SurfaceInput::fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType) { NinjaArmyH* ninjaArmy = NULL; char ** papszOptions = NULL; NinjaErr err = 0; - err = NinjaFetchDEMBBox(ninjaArmy, boundingBox, demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); + err = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); if (err != NINJA_SUCCESS){ qDebug() << "NinjaFetchDEMBBox: err =" << err; return err; diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index e456db505..821f727f6 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -14,7 +14,7 @@ class SurfaceInput QString fetchTimeZoneDetails(QString currentTimeZone); QVector> fetchAllTimeZones(bool isShowAllTimeZonesSelected); - int fetchDEMFile(double boundingBox[], std::string demFile, double resolution, std::string fetchType); + int fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); void computeDEMFile(QString filePath); double computeMeshResolution(int index, bool isMomemtumChecked); void computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]); diff --git a/src/gui/surfaceinputview.cpp b/src/gui/surfaceinputview.cpp index e02ecc81d..efea74ea9 100644 --- a/src/gui/surfaceinputview.cpp +++ b/src/gui/surfaceinputview.cpp @@ -139,22 +139,12 @@ void SurfaceInputView::surfaceInputDownloadCancelButtonClicked() void SurfaceInputView::surfaceInputDownloadButtonClicked() { - double boundingBox[4]; - switch(ui->elevationInputTypeStackedWidget->currentIndex()) - { - case 0: - boundingBox[0] = ui->boundingBoxNorthLineEdit->text().toDouble(); - boundingBox[1] = ui->boundingBoxEastLineEdit->text().toDouble(); - boundingBox[2] = ui->boundingBoxSouthLineEdit->text().toDouble(); - boundingBox[3] = ui->boundingBoxWestLineEdit->text().toDouble(); - break; - case 1: - double centerLat = ui->pointRadiusLatLineEdit->text().toDouble(); - double centerLon = ui->pointRadiusLonLineEdit->text().toDouble(); - double radius = ui->pointRadiusRadiusLineEdit->text().toDouble(); - surfaceInput->computeBoundingBox(centerLat, centerLon, radius, boundingBox); - break; - } + QVector boundingBox = { + ui->boundingBoxNorthLineEdit->text().toDouble(), + ui->boundingBoxEastLineEdit->text().toDouble(), + ui->boundingBoxSouthLineEdit->text().toDouble(), + ui->boundingBoxWestLineEdit->text().toDouble() + }; double resolution = 30; @@ -169,7 +159,7 @@ void SurfaceInputView::surfaceInputDownloadButtonClicked() if (!demFilePath.endsWith(".tif", Qt::CaseInsensitive)) { demFilePath += ".tif"; } - currentDemFilePath = demFilePath; + currentDEMFilePath = demFilePath; std::string demFile = demFilePath.toStdString(); std::string fetchType; @@ -186,25 +176,7 @@ void SurfaceInputView::surfaceInputDownloadButtonClicked() break; } - QProgressDialog progress("Fetching DEM file...", QString(), 0, 0, ui->centralwidget); - progress.setWindowModality(Qt::WindowModal); - progress.setCancelButton(nullptr); - progress.setMinimumDuration(0); - progress.show(); - - QFuture future = QtConcurrent::run(&SurfaceInput::fetchDEMFile, surfaceInput, boundingBox, demFile, resolution, fetchType); - QFutureWatcher futureWatcher; - futureWatcher.setFuture(future); - - QEventLoop loop; - QObject::connect(&futureWatcher, &QFutureWatcher::finished, &loop, &QEventLoop::quit); - loop.exec(); - - progress.close(); - - ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); - int currentIndex = ui->inputsStackedWidget->currentIndex(); - ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); + startFetchDEM(boundingBox, demFile, resolution, fetchType); } void SurfaceInputView::elevationInputFileDownloadButtonClicked() @@ -225,7 +197,7 @@ void SurfaceInputView::meshResolutionComboBoxCurrentIndexChanged(int index) void SurfaceInputView::elevationInputFileLineEditTextChanged(const QString &arg1) { - surfaceInput->computeDEMFile(currentDemFilePath); + surfaceInput->computeDEMFile(currentDEMFilePath); surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked()); ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); @@ -235,9 +207,9 @@ void SurfaceInputView::elevationInputFileLineEditTextChanged(const QString &arg1 void SurfaceInputView::elevationInputFileOpenButtonClicked() { QString directoryPath; - if(!currentDemFilePath.isEmpty()) + if(!currentDEMFilePath.isEmpty()) { - directoryPath = currentDemFilePath; + directoryPath = currentDEMFilePath; } else { directoryPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); @@ -245,15 +217,49 @@ void SurfaceInputView::elevationInputFileOpenButtonClicked() QString demFilePath = QFileDialog::getOpenFileName(ui->centralwidget, "Select a file", directoryPath, "(*.tif);;All Files (*)"); if (demFilePath.isEmpty()) { - if (!currentDemFilePath.isEmpty()) { - ui->elevationInputFileLineEdit->setText(QFileInfo(currentDemFilePath).fileName()); - ui->elevationInputFileLineEdit->setToolTip(currentDemFilePath); + if (!currentDEMFilePath.isEmpty()) { + ui->elevationInputFileLineEdit->setText(QFileInfo(currentDEMFilePath).fileName()); + ui->elevationInputFileLineEdit->setToolTip(currentDEMFilePath); } return; } - currentDemFilePath = demFilePath; + currentDEMFilePath = demFilePath; ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); ui->elevationInputFileLineEdit->setToolTip(demFilePath); } +void SurfaceInputView::startFetchDEM(QVector boundingBox, std::string demFile, double resolution, std::string fetchType) +{ + progress = new QProgressDialog("Fetching DEM file...", QString(), 0, 0, ui->centralwidget); + progress->setWindowModality(Qt::WindowModal); + progress->setCancelButton(nullptr); + progress->setMinimumDuration(0); + progress->setAutoClose(true); + progress->show(); + + futureWatcher = new QFutureWatcher(this); + QFuture future = QtConcurrent::run(&SurfaceInput::fetchDEMFile, surfaceInput, boundingBox, demFile, resolution, fetchType); + futureWatcher->setFuture(future); + + connect(futureWatcher, &QFutureWatcher::finished, this, &SurfaceInputView::fetchDEMFinished); +} + +void SurfaceInputView::fetchDEMFinished() +{ + if (progress) { + progress->close(); + progress->deleteLater(); + progress = nullptr; + } + + if (futureWatcher) { + futureWatcher->deleteLater(); + futureWatcher = nullptr; + } + + ui->elevationInputFileLineEdit->setText(QFileInfo(currentDEMFilePath).fileName()); + int currentIndex = ui->inputsStackedWidget->currentIndex(); + ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); +} + diff --git a/src/gui/surfaceinputview.h b/src/gui/surfaceinputview.h index ade8253ef..06a63751c 100644 --- a/src/gui/surfaceinputview.h +++ b/src/gui/surfaceinputview.h @@ -44,15 +44,19 @@ private slots: void elevationInputFileOpenButtonClicked(); void elevationInputFileLineEditTextChanged(const QString &arg1); void meshResolutionComboBoxCurrentIndexChanged(int index); + void fetchDEMFinished(); private: + void startFetchDEM(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); Ui::MainWindow *ui; QWebEngineView *webView; SurfaceInput *surfaceInput; - QFutureWatcher futureWatcher; + QProgressDialog *progress; + QFutureWatcher *futureWatcher; - QString currentDemFilePath; + + QString currentDEMFilePath; }; #endif // SURFACEINPUTVIEW_H From ea9e4e4550a5c88b46bda9fbb096acf57ee2369e Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 15 Jul 2025 12:30:12 -0600 Subject: [PATCH 109/435] When you double click the surface input tree item, the file select box will now open --- src/gui/CMakeLists.txt | 10 ++++++---- src/gui/mainwindow.cpp | 25 ++++++++++++++++++------- src/gui/mainwindow.h | 3 +++ src/gui/surfaceinputview.cpp | 1 + src/gui/surfaceinputview.h | 2 +- 5 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 08c8bddb7..da7e02309 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -26,14 +26,16 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) ${PROJECT_SOURCES} ${CMAKE_SOURCE_DIR}/wn-resources.qrc appstate.h - modeldata.h splashscreen.h splashscreen.cpp surfaceinput.h surfaceinput.cpp - menubarview.h menubarview.cpp - mapbridge.h mapbridge.cpp - surfaceinputview.h surfaceinputview.cpp + menubarview.h + menubarview.cpp + mapbridge.h + mapbridge.cpp + surfaceinputview.h + surfaceinputview.cpp ) # Define target properties for Android with Qt 6 as: diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index b70640a6f..8f19b2855 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -316,6 +316,7 @@ void MainWindow::connectSignals() connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInputView, &SurfaceInputView::boundingBoxReceived); connect(surfaceInputView, &SurfaceInputView::requestRefresh, this, &MainWindow::refreshUI); + connect(this, &MainWindow::openElevationFile, surfaceInputView, &SurfaceInputView::elevationInputFileOpenButtonClicked); } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { @@ -679,20 +680,30 @@ void MainWindow::solveButtonClicked() void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) { - if (item->text(0) == "Conservation of Mass") { + if (item->text(0) == "Conservation of Mass") + { ui->massSolverCheckBox->click(); - } else if (item->text(0) == "Conservation of Mass and Momentum") { + } else if (item->text(0) == "Conservation of Mass and Momentum") + { ui->momentumSolverCheckBox->click(); - } else if (item->text(0) == "Diurnal Input") { + } else if (item->text(0) == "Diurnal Input") + { ui->diurnalCheckBox->click(); - } else if (item->text(0) == "Stability Input") { + } else if (item->text(0) == "Stability Input") + { ui->stabilityCheckBox->click(); - } else if (item->text(0) == "Domain Average Wind") { + } else if (item->text(0) == "Domain Average Wind") + { ui->domainAverageCheckBox->click(); - } else if (item->text(0) == "Point Initialization") { + } else if (item->text(0) == "Point Initialization") + { ui->pointInitializationCheckBox->click(); - } else if (item->text(0) == "Weather Model") { + } else if (item->text(0) == "Weather Model") + { ui->useWeatherModelInit->click(); + } else if (item->text(0) == "Surface Input") + { + emit openElevationFile(); } } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 0b76ecdc6..8d07f4e42 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -59,6 +59,9 @@ class MainWindow : public QMainWindow MainWindow(QWidget *parent = nullptr); ~MainWindow(); +signals: + void openElevationFile(); + private slots: void massSolverCheckBoxClicked(); void momentumSolverCheckBoxClicked(); diff --git a/src/gui/surfaceinputview.cpp b/src/gui/surfaceinputview.cpp index efea74ea9..7c384e832 100644 --- a/src/gui/surfaceinputview.cpp +++ b/src/gui/surfaceinputview.cpp @@ -26,6 +26,7 @@ SurfaceInputView::SurfaceInputView(Ui::MainWindow *ui, connect(ui->surfaceInputDownloadButton, &QPushButton::clicked, this, &SurfaceInputView::surfaceInputDownloadButtonClicked); connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &SurfaceInputView::elevationInputFileOpenButtonClicked); connect(ui->elevationInputTypePushButton, &QPushButton::clicked, this, &SurfaceInputView::elevationInputTypePushButtonClicked); + } diff --git a/src/gui/surfaceinputview.h b/src/gui/surfaceinputview.h index 06a63751c..ec7d54ad0 100644 --- a/src/gui/surfaceinputview.h +++ b/src/gui/surfaceinputview.h @@ -32,6 +32,7 @@ class SurfaceInputView : public QObject { public slots: void boundingBoxReceived(double north, double south, double east, double west); + void elevationInputFileOpenButtonClicked(); private slots: void surfaceInputDownloadCancelButtonClicked(); @@ -41,7 +42,6 @@ private slots: void boundingBoxLineEditsTextChanged(); void pointRadiusLineEditsTextChanged(); void elevationInputFileDownloadButtonClicked(); - void elevationInputFileOpenButtonClicked(); void elevationInputFileLineEditTextChanged(const QString &arg1); void meshResolutionComboBoxCurrentIndexChanged(int index); void fetchDEMFinished(); From e9e58e331f49656f4e081a0ee8bcc458a9607aec Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 15 Jul 2025 12:49:00 -0600 Subject: [PATCH 110/435] Fixed some names and adjusted default state for checkbox --- src/gui/mainwindow.ui | 50 ++++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 89800ae29..65a4564e4 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -572,7 +572,7 @@ li.checked::marker { content: "\2612"; }
- + Qt::Orientation::Vertical @@ -706,7 +706,7 @@ li.checked::marker { content: "\2612"; }
- + Qt::Orientation::Vertical @@ -735,7 +735,7 @@ li.checked::marker { content: "\2612"; } 5 - + 8 @@ -766,7 +766,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical @@ -876,7 +876,7 @@ li.checked::marker { content: "\2612"; }
- + Qt::Orientation::Horizontal @@ -985,7 +985,7 @@ li.checked::marker { content: "\2612"; }
- + Qt::Orientation::Horizontal @@ -1047,7 +1047,7 @@ li.checked::marker { content: "\2612"; }
- + Qt::Orientation::Horizontal @@ -1079,7 +1079,7 @@ li.checked::marker { content: "\2612"; } Time Zone - + @@ -1133,6 +1133,9 @@ li.checked::marker { content: "\2612"; } Show All Zones + + true + @@ -1192,16 +1195,29 @@ li.checked::marker { content: "\2612"; } + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + - + Qt::Orientation::Vertical - QSizePolicy::Policy::MinimumExpanding + QSizePolicy::Policy::Expanding @@ -1288,7 +1304,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Horizontal @@ -1452,7 +1468,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical @@ -1497,7 +1513,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical @@ -1539,7 +1555,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical @@ -1594,7 +1610,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -1673,7 +1689,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Horizontal @@ -2887,7 +2903,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical From df913db1f0f69f575ee6462afe80f354880554e2 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 15 Jul 2025 16:40:47 -0600 Subject: [PATCH 111/435] WIP on drawing the area of a specified .tif on the map --- data/map.html | 11 +++++++++++ src/gui/mainwindow.cpp | 1 + src/gui/mainwindow.h | 1 + src/gui/mainwindow.ui | 20 +++++++++++++++++++- src/gui/surfaceinput.cpp | 14 ++++++++++++++ src/gui/surfaceinput.h | 5 +++-- src/gui/surfaceinputview.cpp | 10 ++++++++++ src/gui/surfaceinputview.h | 2 -- 8 files changed, 59 insertions(+), 5 deletions(-) diff --git a/data/map.html b/data/map.html index 46e090c11..1eed998d7 100755 --- a/data/map.html +++ b/data/map.html @@ -149,6 +149,17 @@ } rectangle.on('edit', sendBoundingBox); } + + function drawDEM(north, south, east, west) { + const bounds = [[south, west], [north, east]]; + + const rectangle = L.rectangle(bounds, { + color: 'black', + weight: 2, + fill: false + }).addTo(mbrLayer); + } + const rectangleDrawer = new L.Draw.Rectangle(map); function startRectangleDrawing() { diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 8f19b2855..31bda79f4 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -430,6 +430,7 @@ void MainWindow::timeZoneAllZonesCheckBoxClicked() // Default to America/Denver ui->timeZoneComboBox->setCurrentText("America/Denver"); + ui->timeZoneComboBox->setMaxVisibleItems(15); } void MainWindow::timeZoneDetailsCheckBoxClicked() diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 8d07f4e42..2b9ae8575 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -36,6 +36,7 @@ #include #include #include +#include #include #include diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 65a4564e4..5cda133ed 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -524,7 +524,7 @@ QFrame::Shadow::Sunken - 5 + 8 @@ -657,6 +657,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + 5 @@ -1486,10 +1492,19 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + 0 + + QLayout::SizeConstraint::SetNoConstraint + 5 @@ -1517,6 +1532,9 @@ li.checked::marker { content: "\2612"; } Qt::Orientation::Vertical + + QSizePolicy::Policy::Expanding + 20 diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index a27918c88..41171334d 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -170,6 +170,7 @@ void SurfaceInput::computeDEMFile(QString filePath) GDALDriverName = poInputDS->GetDriver()->GetDescription(); GDALXSize = poInputDS->GetRasterXSize(); GDALYSize = poInputDS->GetRasterYSize(); + GDALGetCorners(poInputDS, DEMCorners); if (poInputDS->GetGeoTransform(adfGeoTransform) == CE_None) { double c1, c2; @@ -330,3 +331,16 @@ void SurfaceInput::computePointRadius(double north, double east, double south, d qDebug() << "Center (Lat, Lon):" << centerLat << centerLon; qDebug() << "Estimated Radius (mi):" << radius; } + +void SurfaceInput::getDEMCorners(double bbox[4]) +{ + double west = std::min({DEMCorners[0], DEMCorners[2], DEMCorners[4], DEMCorners[6]}); + double east = std::max({DEMCorners[0], DEMCorners[2], DEMCorners[4], DEMCorners[6]}); + double south = std::min({DEMCorners[1], DEMCorners[3], DEMCorners[5], DEMCorners[7]}); + double north = std::max({DEMCorners[1], DEMCorners[3], DEMCorners[5], DEMCorners[7]}); + + bbox[0] = north; + bbox[1] = east; + bbox[2] = south; + bbox[3] = west; +} diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index 821f727f6..16770f403 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -1,8 +1,7 @@ #ifndef SURFACEINPUT_H #define SURFACEINPUT_H -#include "gdal_utils.h" -#include "gdal_priv.h" +#include "../ninja/gdal_util.h"" #include "../ninja/windninja.h" #include #include @@ -19,11 +18,13 @@ class SurfaceInput double computeMeshResolution(int index, bool isMomemtumChecked); void computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]); void computePointRadius(double north, double east, double south, double west, double pointRadius[3]); + void getDEMCorners(double bbox[4]); private: QString GDALDriverName; int GDALXSize, GDALYSize; double GDALCellSize, GDALMaxValue, GDALMinValue; + double DEMCorners[8]; }; #endif // SURFACEINPUT_H diff --git a/src/gui/surfaceinputview.cpp b/src/gui/surfaceinputview.cpp index 7c384e832..74c2196eb 100644 --- a/src/gui/surfaceinputview.cpp +++ b/src/gui/surfaceinputview.cpp @@ -228,6 +228,16 @@ void SurfaceInputView::elevationInputFileOpenButtonClicked() currentDEMFilePath = demFilePath; ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); ui->elevationInputFileLineEdit->setToolTip(demFilePath); + + double boundingBox[4]; + surfaceInput->getDEMCorners(boundingBox); + + QString js = QString("drawDEM(%1, %2, %3, %4);") + .arg(boundingBox[0], 0, 'f', 8) + .arg(boundingBox[1], 0, 'f', 8) + .arg(boundingBox[2], 0, 'f', 8) + .arg(boundingBox[3], 0, 'f', 8); + webView->page()->runJavaScript(js); } void SurfaceInputView::startFetchDEM(QVector boundingBox, std::string demFile, double resolution, std::string fetchType) diff --git a/src/gui/surfaceinputview.h b/src/gui/surfaceinputview.h index ec7d54ad0..87fb96e23 100644 --- a/src/gui/surfaceinputview.h +++ b/src/gui/surfaceinputview.h @@ -54,8 +54,6 @@ private slots: QProgressDialog *progress; QFutureWatcher *futureWatcher; - - QString currentDEMFilePath; }; From b16be16fca3843832d8be53f8f71c1082bf1c4bd Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 16 Jul 2025 10:20:09 -0600 Subject: [PATCH 112/435] Added functionality to draw an outline of a specified .tif file onto the map --- data/map.html | 16 ++++++++++++---- src/gui/surfaceinput.cpp | 12 ++---------- src/gui/surfaceinput.h | 2 +- src/gui/surfaceinputview.cpp | 26 ++++++++++++++++++-------- 4 files changed, 33 insertions(+), 23 deletions(-) diff --git a/data/map.html b/data/map.html index 1eed998d7..4f16be425 100755 --- a/data/map.html +++ b/data/map.html @@ -150,10 +150,18 @@ rectangle.on('edit', sendBoundingBox); } - function drawDEM(north, south, east, west) { - const bounds = [[south, west], [north, east]]; - - const rectangle = L.rectangle(bounds, { + function drawDEM(DEMCorners) { + mbrLayer.clearLayers(); + + const latLngCorners = [ + [DEMCorners[1], DEMCorners[0]], // NE + [DEMCorners[3], DEMCorners[2]], // SE + [DEMCorners[5], DEMCorners[4]], // SW + [DEMCorners[7], DEMCorners[6]], // NW + [DEMCorners[1], DEMCorners[0]] // NE + ]; + + const rectangle = L.polygon(latLngCorners, { color: 'black', weight: 2, fill: false diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 41171334d..4efff3be8 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -332,15 +332,7 @@ void SurfaceInput::computePointRadius(double north, double east, double south, d qDebug() << "Estimated Radius (mi):" << radius; } -void SurfaceInput::getDEMCorners(double bbox[4]) +double* SurfaceInput::getDEMCorners() { - double west = std::min({DEMCorners[0], DEMCorners[2], DEMCorners[4], DEMCorners[6]}); - double east = std::max({DEMCorners[0], DEMCorners[2], DEMCorners[4], DEMCorners[6]}); - double south = std::min({DEMCorners[1], DEMCorners[3], DEMCorners[5], DEMCorners[7]}); - double north = std::max({DEMCorners[1], DEMCorners[3], DEMCorners[5], DEMCorners[7]}); - - bbox[0] = north; - bbox[1] = east; - bbox[2] = south; - bbox[3] = west; + return DEMCorners; } diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index 16770f403..7c9e7dbee 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -18,7 +18,7 @@ class SurfaceInput double computeMeshResolution(int index, bool isMomemtumChecked); void computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]); void computePointRadius(double north, double east, double south, double west, double pointRadius[3]); - void getDEMCorners(double bbox[4]); + double* getDEMCorners(); private: QString GDALDriverName; diff --git a/src/gui/surfaceinputview.cpp b/src/gui/surfaceinputview.cpp index 74c2196eb..bf6fdf06a 100644 --- a/src/gui/surfaceinputview.cpp +++ b/src/gui/surfaceinputview.cpp @@ -126,6 +126,10 @@ void SurfaceInputView::surfaceInputDownloadCancelButtonClicked() int currentIndex = ui->inputsStackedWidget->currentIndex(); ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); + ui->elevationInputTypeComboBox->setCurrentIndex(0); + ui->elevationFileTypeComboBox->setCurrentIndex(0); + ui->elevationInputTypePushButton->setChecked(false); + ui->boundingBoxNorthLineEdit->clear(); ui->boundingBoxEastLineEdit->clear(); ui->boundingBoxSouthLineEdit->clear(); @@ -136,6 +140,15 @@ void SurfaceInputView::surfaceInputDownloadCancelButtonClicked() ui->pointRadiusRadiusLineEdit->clear(); webView->page()->runJavaScript("stopRectangleDrawing();"); + if(!currentDEMFilePath.isEmpty()) + { + double *DEMCorners = surfaceInput->getDEMCorners(); + QStringList cornerStrs; + for (int i = 0; i < 8; ++i) + cornerStrs << QString::number(DEMCorners[i], 'f', 8); + QString js = QString("drawDEM([%1]);").arg(cornerStrs.join(", ")); + webView->page()->runJavaScript(js); + } } void SurfaceInputView::surfaceInputDownloadButtonClicked() @@ -229,14 +242,11 @@ void SurfaceInputView::elevationInputFileOpenButtonClicked() ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); ui->elevationInputFileLineEdit->setToolTip(demFilePath); - double boundingBox[4]; - surfaceInput->getDEMCorners(boundingBox); - - QString js = QString("drawDEM(%1, %2, %3, %4);") - .arg(boundingBox[0], 0, 'f', 8) - .arg(boundingBox[1], 0, 'f', 8) - .arg(boundingBox[2], 0, 'f', 8) - .arg(boundingBox[3], 0, 'f', 8); + double *DEMCorners = surfaceInput->getDEMCorners(); + QStringList cornerStrs; + for (int i = 0; i < 8; ++i) + cornerStrs << QString::number(DEMCorners[i], 'f', 8); + QString js = QString("drawDEM([%1]);").arg(cornerStrs.join(", ")); webView->page()->runJavaScript(js); } From 8f3f1ea469796e82ecc41733eff1eaa710f11ab5 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 16 Jul 2025 14:00:01 -0600 Subject: [PATCH 113/435] Fixed spacing from 2 spaces to 4 spaces --- src/gui/main.cpp | 68 +-- src/gui/mainwindow.cpp | 1074 +++++++++++++++++----------------- src/gui/mainwindow.h | 76 +-- src/gui/mapbridge.cpp | 28 +- src/gui/mapbridge.h | 8 +- src/gui/menubarview.cpp | 72 +-- src/gui/menubarview.h | 66 +-- src/gui/splashscreen.cpp | 90 +-- src/gui/splashscreen.h | 36 +- src/gui/surfaceinput.cpp | 282 +++++---- src/gui/surfaceinput.h | 26 +- src/gui/surfaceinputview.cpp | 411 +++++++------ src/gui/surfaceinputview.h | 50 +- 13 files changed, 1138 insertions(+), 1149 deletions(-) diff --git a/src/gui/main.cpp b/src/gui/main.cpp index ce8b9c4b0..b11c80f69 100755 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -13,49 +13,49 @@ int main(int argc, char *argv[]) { - int result; + int result; - char ** papszOptions = NULL; - NinjaErr err = 0; - err = NinjaInit(papszOptions); //TODO: NEED TO ADD NINJA INITIALIZE FOR GUI THROUGH API - if(err != NINJA_SUCCESS) - { + char ** papszOptions = NULL; + NinjaErr err = 0; + err = NinjaInit(papszOptions); //TODO: NEED TO ADD NINJA INITIALIZE FOR GUI THROUGH API + if(err != NINJA_SUCCESS) + { printf("NinjaInit: err = %d\n", err); - } + } - QApplication a(argc, argv); - QIcon icon(":/wn-icon.png"); - QString ver = NINJA_VERSION_STRING; - a.setWindowIcon(icon); - a.setApplicationName(QString("WindNinja")); - a.setApplicationVersion(ver); + QApplication a(argc, argv); + QIcon icon(":/wn-icon.png"); + QString ver = NINJA_VERSION_STRING; + a.setWindowIcon(icon); + a.setApplicationName(QString("WindNinja")); + a.setApplicationVersion(ver); - MainWindow* w = nullptr; - try { + MainWindow* w = nullptr; + try { w = new MainWindow; - } catch (...) { + } catch (...) { QMessageBox::critical(nullptr, "Initialization Error", "WindNinja failed to initialize. Most likely cause is failure to find data " "dependencies. Try setting the environment variable WINDNINJA_DATA"); return 1; - } + } - QPixmap bigSplashPixmap(":wn-splash.png"); - QSize splashSize(1200, 320); - QPixmap smallSplashPixmap; - smallSplashPixmap = bigSplashPixmap.scaled(splashSize, + QPixmap bigSplashPixmap(":wn-splash.png"); + QSize splashSize(1200, 320); + QPixmap smallSplashPixmap; + smallSplashPixmap = bigSplashPixmap.scaled(splashSize, Qt::KeepAspectRatioByExpanding); - QStringList list; - list << "Loading WindNinja " + ver + "..."; - list << "Loading mesh generator..."; - list << "Loading conjugate gradient solver..."; - list << "Loading preconditioner..."; - list << "WindNinja " + ver + " loaded."; - - SplashScreen *splash = new SplashScreen(smallSplashPixmap, list, 1000); - splash->display(); - QObject::connect(splash, SIGNAL(done()), w, SLOT(show())); - - result = a.exec(); - return result; + QStringList list; + list << "Loading WindNinja " + ver + "..."; + list << "Loading mesh generator..."; + list << "Loading conjugate gradient solver..."; + list << "Loading preconditioner..."; + list << "WindNinja " + ver + " loaded."; + + SplashScreen *splash = new SplashScreen(smallSplashPixmap, list, 1000); + splash->display(); + QObject::connect(splash, SIGNAL(done()), w, SLOT(show())); + + result = a.exec(); + return result; } diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 31bda79f4..8951e11dd 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -6,282 +6,282 @@ */ void MainWindow::refreshUI() { - AppState& state = AppState::instance(); - - QIcon tickIcon(":/tick.png"); - QIcon xIcon(":/cross.png"); - QIcon bulletIcon(":/bullet_blue.png"); - - ui->treeWidget->setMouseTracking(true); - - // Update Solver Methodology UI - if (state.isMassSolverToggled != state.isMomentumSolverToggled) { - state.isSolverMethodologyValid = true; - ui->treeWidget->topLevelItem(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(0)->setToolTip(0, ""); - } else if (state.isMassSolverToggled && state.isMomentumSolverToggled) { - state.isSolverMethodologyValid = false; - ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently too many selections."); - } else { - state.isSolverMethodologyValid = false; - ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently no selections."); - } + AppState& state = AppState::instance(); + + QIcon tickIcon(":/tick.png"); + QIcon xIcon(":/cross.png"); + QIcon bulletIcon(":/bullet_blue.png"); + + ui->treeWidget->setMouseTracking(true); + + // Update Solver Methodology UI + if (state.isMassSolverToggled != state.isMomentumSolverToggled) { + state.isSolverMethodologyValid = true; + ui->treeWidget->topLevelItem(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(0)->setToolTip(0, ""); + } else if (state.isMassSolverToggled && state.isMomentumSolverToggled) { + state.isSolverMethodologyValid = false; + ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently too many selections."); + } else { + state.isSolverMethodologyValid = false; + ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently no selections."); + } - if (state.isMassSolverToggled) { - ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, tickIcon); - } else { - ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, bulletIcon); - } + if (state.isMassSolverToggled) { + ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, tickIcon); + } else { + ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, bulletIcon); + } - if (state.isMomentumSolverToggled) { - ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, tickIcon); - } else { - ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, bulletIcon); - } + if (state.isMomentumSolverToggled) { + ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, tickIcon); + } else { + ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, bulletIcon); + } - // Update surface input state - if (ui->elevationInputFileLineEdit->text() != "") { - state.isSurfaceInputValid = true; - ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, ""); - } else { - state.isSurfaceInputValid = false; - ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, "No DEM file detected."); - } + // Update surface input state + if (ui->elevationInputFileLineEdit->text() != "") { + state.isSurfaceInputValid = true; + ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, ""); + } else { + state.isSurfaceInputValid = false; + ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, "No DEM file detected."); + } - // Update diurnal input state - if (state.isDiurnalInputToggled) { - ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, tickIcon); - } else { - ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, bulletIcon); - } + // Update diurnal input state + if (state.isDiurnalInputToggled) { + ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, tickIcon); + } else { + ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, bulletIcon); + } - // Update stability input state - if (state.isStabilityInputToggled) { - ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, tickIcon); - } else { - ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, bulletIcon); - } + // Update stability input state + if (state.isStabilityInputToggled) { + ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, tickIcon); + } else { + ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, bulletIcon); + } - // Update domain average initialization - if (state.isDomainAverageInitializationToggled && state.isDomainAverageWindInputTableValid) { - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); - state.isDomainAverageInitializationValid = true; - } else if (state.isDomainAverageInitializationToggled && !state.isDomainAverageWindInputTableValid){ - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "Bad wind inputs; hover over red cells for explanation."); - state.isDomainAverageInitializationValid = false; - } else { - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, bulletIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); - state.isDomainAverageInitializationValid = false; - } + // Update domain average initialization + if (state.isDomainAverageInitializationToggled && state.isDomainAverageWindInputTableValid) { + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); + state.isDomainAverageInitializationValid = true; + } else if (state.isDomainAverageInitializationToggled && !state.isDomainAverageWindInputTableValid){ + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "Bad wind inputs; hover over red cells for explanation."); + state.isDomainAverageInitializationValid = false; + } else { + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); + state.isDomainAverageInitializationValid = false; + } - // Update point initialization - if (state.isPointInitializationToggled) { - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, tickIcon); - state.isPointInitializationValid = true; - } else { - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, bulletIcon); - state.isPointInitializationValid = false; - } + // Update point initialization + if (state.isPointInitializationToggled) { + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, tickIcon); + state.isPointInitializationValid = true; + } else { + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, bulletIcon); + state.isPointInitializationValid = false; + } - // Update weather model initialization - if (state.isWeatherModelInitializationToggled) { - ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, tickIcon); - state.isWeatherModelInitializationValid = true; - } else { - ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, bulletIcon); - state.isWeatherModelInitializationValid = false; - } + // Update weather model initialization + if (state.isWeatherModelInitializationToggled) { + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, tickIcon); + state.isWeatherModelInitializationValid = true; + } else { + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, bulletIcon); + state.isWeatherModelInitializationValid = false; + } - // Update wind input - if (state.isDomainAverageInitializationValid || state.isPointInitializationValid || state.isWeatherModelInitializationValid) { - ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, tickIcon); - state.isWindInputValid = true; - } else { - ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, xIcon); - state.isWindInputValid = false; - } + // Update wind input + if (state.isDomainAverageInitializationValid || state.isPointInitializationValid || state.isWeatherModelInitializationValid) { + ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, tickIcon); + state.isWindInputValid = true; + } else { + ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, xIcon); + state.isWindInputValid = false; + } - // Update overall input UI state - if (state.isSurfaceInputValid && state.isWindInputValid) { - state.isInputsValid = true; - ui->treeWidget->topLevelItem(1)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, ""); - } else if (!state.isSurfaceInputValid && !state.isWindInputValid) { - state.isInputsValid = false; - ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface and wind inputs."); - } else if (!state.isSurfaceInputValid) { - state.isInputsValid = false; - ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface input."); - } else if (!state.isWindInputValid) { - state.isInputsValid = false; - ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad wind input."); - } + // Update overall input UI state + if (state.isSurfaceInputValid && state.isWindInputValid) { + state.isInputsValid = true; + ui->treeWidget->topLevelItem(1)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, ""); + } else if (!state.isSurfaceInputValid && !state.isWindInputValid) { + state.isInputsValid = false; + ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface and wind inputs."); + } else if (!state.isSurfaceInputValid) { + state.isInputsValid = false; + ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface input."); + } else if (!state.isWindInputValid) { + state.isInputsValid = false; + ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad wind input."); + } - // Update solve state - if (state.isSolverMethodologyValid && state.isInputsValid) { - ui->solveButton->setEnabled(true); - ui->numberOfProcessorsSolveButton->setEnabled(true); - ui->solveButton->setToolTip(""); - ui->numberOfProcessorsSolveButton->setToolTip(""); - } else { - ui->solveButton->setEnabled(false); - ui->numberOfProcessorsSolveButton->setEnabled(false); - ui->solveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); - ui->numberOfProcessorsSolveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); - } + // Update solve state + if (state.isSolverMethodologyValid && state.isInputsValid) { + ui->solveButton->setEnabled(true); + ui->numberOfProcessorsSolveButton->setEnabled(true); + ui->solveButton->setToolTip(""); + ui->numberOfProcessorsSolveButton->setToolTip(""); + } else { + ui->solveButton->setEnabled(false); + ui->numberOfProcessorsSolveButton->setEnabled(false); + ui->solveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); + ui->numberOfProcessorsSolveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); + } } MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { - ui->setupUi(this); - checkMessages(); - resize(1200, 700); - - timeZoneAllZonesCheckBoxClicked(); - refreshUI(); - ui->treeWidget->expandAll(); - - /* - * Create file handler window for point init screen - */ - QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - // Enable QFileSystemModel to process directories and files - QFileSystemModel *model = new QFileSystemModel(this); - model->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs | QDir::AllEntries); // Ensure files appear - model->setRootPath(downloadsPath); - - // Enable file watching so contents refresh properly - model->setReadOnly(false); - model->setResolveSymlinks(true); - - // Set the correct root index inside Downloads - QModelIndex rootIndex = model->index(downloadsPath); - ui->treeFileExplorer->setModel(model); - ui->treeFileExplorer->setRootIndex(rootIndex); - - // Ensure folders expand and collapse correctly - ui->treeFileExplorer->setExpandsOnDoubleClick(true); - ui->treeFileExplorer->setAnimated(true); - ui->treeFileExplorer->setIndentation(15); - ui->treeFileExplorer->setSortingEnabled(true); - ui->treeFileExplorer->setItemsExpandable(true); - ui->treeFileExplorer->setUniformRowHeights(true); - - // Show only "Name" and "Date Modified" columns - ui->treeFileExplorer->hideColumn(1); // Hide Size column - ui->treeFileExplorer->hideColumn(2); // Hide Type column - - // Optional: Set column headers - QHeaderView *header = ui->treeFileExplorer->header(); - header->setSectionResizeMode(0, QHeaderView::Interactive); - header->setSectionResizeMode(3, QHeaderView::Stretch); - model->setHeaderData(0, Qt::Horizontal, "Name"); - model->setHeaderData(3, Qt::Horizontal, "Date Modified"); - - ui->treeFileExplorer->expandAll(); - - /* - * Functionality for the map widget - */ - QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true); - QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); - - QString filePath = QString(MAP_PATH); - channel = new QWebChannel(this); - mapBridge = new MapBridge(this); - webView = new QWebEngineView(ui->mapPanelWidget); - channel->registerObject(QStringLiteral("bridge"), mapBridge); - webView->page()->setWebChannel(channel); - QUrl url = QUrl::fromLocalFile(filePath); - webView->setUrl(url); - - surfaceInput = new SurfaceInput(); - menuBarView = new MenuBarView(ui, this); - - surfaceInputView = new SurfaceInputView(ui, webView, surfaceInput, this); - - QVBoxLayout *layout = new QVBoxLayout(); - layout->setContentsMargins(0, 0, 0, 0); - layout->addWidget(webView); - - ui->mapPanelWidget->setLayout(layout); - - /* - * Connect tree items to stacked tab window - */ - // Top-level items - ui->inputsStackedWidget->setCurrentIndex(0); - ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); // Solver Methodology (Page 0) - ui->treeWidget->topLevelItem(1)->setData(0, Qt::UserRole, 4); // Inputs (Page 5) - ui->treeWidget->topLevelItem(2)->setData(0, Qt::UserRole, 12); // Inputs (Page 13) - - // Sub-items for Solver Methodology - ui->treeWidget->topLevelItem(0)->child(0)->setData(0, Qt::UserRole, 2); // Conservation of Mass (Page 1) - ui->treeWidget->topLevelItem(0)->child(1)->setData(0, Qt::UserRole, 3); // Conservation of Mass and Momentum (Page 2) - - // Sub-items for Inputs - ui->treeWidget->topLevelItem(1)->child(0)->setData(0, Qt::UserRole, 5); // Surface Input (Page 6) - ui->treeWidget->topLevelItem(1)->child(1)->setData(0, Qt::UserRole, 6); // Dirunal Input (Page 7) - ui->treeWidget->topLevelItem(1)->child(2)->setData(0, Qt::UserRole, 7); // Stability Input (Page 8) - ui->treeWidget->topLevelItem(1)->child(3)->setData(0, Qt::UserRole, 8); // Wind Input (Page 9) - - // Sub-sub-items for Wind Input - QTreeWidgetItem *windInputItem = ui->treeWidget->topLevelItem(1)->child(3); - windInputItem->child(0)->setData(0, Qt::UserRole, 9); // Domain Average Wind (Page 9) - windInputItem->child(1)->setData(0, Qt::UserRole, 10); // Point Init (Page 10) - windInputItem->child(2)->setData(0, Qt::UserRole, 11); // Weather Model (Page 11) - - connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); - - /* - * Downloaded Forecast explorer - */ - populateForecastDownloads(); - - /* - * Basic initial setup steps - */ - // Surface Input window - ui->elevationInputFileOpenButton->setIcon(QIcon(":/folder.png")); - ui->elevationInputFileDownloadButton->setIcon(QIcon(":/server_go.png")); - ui->elevationInputTypePushButton->setIcon(QIcon(":/swoop_final.png")); - - // Solver window - int nCPUs = QThread::idealThreadCount(); - ui->availableProcessorsTextEdit->setPlainText("Available Processors: " + QString::number(nCPUs)); - ui->numberOfProcessorsSpinBox->setMaximum(nCPUs); - ui->numberOfProcessorsSpinBox->setValue(nCPUs); - - // Wind Input -> Point Init window - ui->downloadPointInitData->setIcon(QIcon(":/application_get")); - - // Populate default location for output location - ui->outputDirectoryTextEdit->setText(downloadsPath); - ui->outputDirectoryButton->setIcon(QIcon(":/folder.png")); - - // Set initial visibility of time zone details - ui->timeZoneDetailsTextEdit->setVisible(false); - - // Set initial formatting of domain average input table - ui->domainAverageTable->hideColumn(2); - ui->domainAverageTable->hideColumn(3); - ui->domainAverageTable->hideColumn(4); - ui->domainAverageTable->hideColumn(5); - ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); - - connectSignals(); + ui->setupUi(this); + checkMessages(); + resize(1200, 700); + + timeZoneAllZonesCheckBoxClicked(); + refreshUI(); + ui->treeWidget->expandAll(); + + /* + * Create file handler window for point init screen + */ + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + // Enable QFileSystemModel to process directories and files + QFileSystemModel *model = new QFileSystemModel(this); + model->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs | QDir::AllEntries); // Ensure files appear + model->setRootPath(downloadsPath); + + // Enable file watching so contents refresh properly + model->setReadOnly(false); + model->setResolveSymlinks(true); + + // Set the correct root index inside Downloads + QModelIndex rootIndex = model->index(downloadsPath); + ui->treeFileExplorer->setModel(model); + ui->treeFileExplorer->setRootIndex(rootIndex); + + // Ensure folders expand and collapse correctly + ui->treeFileExplorer->setExpandsOnDoubleClick(true); + ui->treeFileExplorer->setAnimated(true); + ui->treeFileExplorer->setIndentation(15); + ui->treeFileExplorer->setSortingEnabled(true); + ui->treeFileExplorer->setItemsExpandable(true); + ui->treeFileExplorer->setUniformRowHeights(true); + + // Show only "Name" and "Date Modified" columns + ui->treeFileExplorer->hideColumn(1); // Hide Size column + ui->treeFileExplorer->hideColumn(2); // Hide Type column + + // Optional: Set column headers + QHeaderView *header = ui->treeFileExplorer->header(); + header->setSectionResizeMode(0, QHeaderView::Interactive); + header->setSectionResizeMode(3, QHeaderView::Stretch); + model->setHeaderData(0, Qt::Horizontal, "Name"); + model->setHeaderData(3, Qt::Horizontal, "Date Modified"); + + ui->treeFileExplorer->expandAll(); + + /* + * Functionality for the map widget + */ + QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true); + QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); + + QString filePath = QString(MAP_PATH); + channel = new QWebChannel(this); + mapBridge = new MapBridge(this); + webView = new QWebEngineView(ui->mapPanelWidget); + channel->registerObject(QStringLiteral("bridge"), mapBridge); + webView->page()->setWebChannel(channel); + QUrl url = QUrl::fromLocalFile(filePath); + webView->setUrl(url); + + surfaceInput = new SurfaceInput(); + menuBarView = new MenuBarView(ui, this); + + surfaceInputView = new SurfaceInputView(ui, webView, surfaceInput, this); + + QVBoxLayout *layout = new QVBoxLayout(); + layout->setContentsMargins(0, 0, 0, 0); + layout->addWidget(webView); + + ui->mapPanelWidget->setLayout(layout); + + /* + * Connect tree items to stacked tab window + */ + // Top-level items + ui->inputsStackedWidget->setCurrentIndex(0); + ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); // Solver Methodology (Page 0) + ui->treeWidget->topLevelItem(1)->setData(0, Qt::UserRole, 4); // Inputs (Page 5) + ui->treeWidget->topLevelItem(2)->setData(0, Qt::UserRole, 12); // Inputs (Page 13) + + // Sub-items for Solver Methodology + ui->treeWidget->topLevelItem(0)->child(0)->setData(0, Qt::UserRole, 2); // Conservation of Mass (Page 1) + ui->treeWidget->topLevelItem(0)->child(1)->setData(0, Qt::UserRole, 3); // Conservation of Mass and Momentum (Page 2) + + // Sub-items for Inputs + ui->treeWidget->topLevelItem(1)->child(0)->setData(0, Qt::UserRole, 5); // Surface Input (Page 6) + ui->treeWidget->topLevelItem(1)->child(1)->setData(0, Qt::UserRole, 6); // Dirunal Input (Page 7) + ui->treeWidget->topLevelItem(1)->child(2)->setData(0, Qt::UserRole, 7); // Stability Input (Page 8) + ui->treeWidget->topLevelItem(1)->child(3)->setData(0, Qt::UserRole, 8); // Wind Input (Page 9) + + // Sub-sub-items for Wind Input + QTreeWidgetItem *windInputItem = ui->treeWidget->topLevelItem(1)->child(3); + windInputItem->child(0)->setData(0, Qt::UserRole, 9); // Domain Average Wind (Page 9) + windInputItem->child(1)->setData(0, Qt::UserRole, 10); // Point Init (Page 10) + windInputItem->child(2)->setData(0, Qt::UserRole, 11); // Weather Model (Page 11) + + connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); + + /* + * Downloaded Forecast explorer + */ + populateForecastDownloads(); + + /* + * Basic initial setup steps + */ + // Surface Input window + ui->elevationInputFileOpenButton->setIcon(QIcon(":/folder.png")); + ui->elevationInputFileDownloadButton->setIcon(QIcon(":/server_go.png")); + ui->elevationInputTypePushButton->setIcon(QIcon(":/swoop_final.png")); + + // Solver window + int nCPUs = QThread::idealThreadCount(); + ui->availableProcessorsTextEdit->setPlainText("Available Processors: " + QString::number(nCPUs)); + ui->numberOfProcessorsSpinBox->setMaximum(nCPUs); + ui->numberOfProcessorsSpinBox->setValue(nCPUs); + + // Wind Input -> Point Init window + ui->downloadPointInitData->setIcon(QIcon(":/application_get")); + + // Populate default location for output location + ui->outputDirectoryTextEdit->setText(downloadsPath); + ui->outputDirectoryButton->setIcon(QIcon(":/folder.png")); + + // Set initial visibility of time zone details + ui->timeZoneDetailsTextEdit->setVisible(false); + + // Set initial formatting of domain average input table + ui->domainAverageTable->hideColumn(2); + ui->domainAverageTable->hideColumn(3); + ui->domainAverageTable->hideColumn(4); + ui->domainAverageTable->hideColumn(5); + ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + + connectSignals(); } MainWindow::~MainWindow() @@ -296,359 +296,359 @@ MainWindow::~MainWindow() void MainWindow::connectSignals() { - connect(ui->elevationInputTypeComboBox, &QComboBox::currentIndexChanged, ui->elevationInputTypeStackedWidget, &QStackedWidget::setCurrentIndex); - connect(ui->massSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::massSolverCheckBoxClicked); - connect(ui->momentumSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::momentumSolverCheckBoxClicked); - connect(ui->diurnalCheckBox, &QCheckBox::clicked, this, &MainWindow::diurnalCheckBoxClicked); - connect(ui->stabilityCheckBox, &QCheckBox::clicked, this, &MainWindow::stabilityCheckBoxClicked); - connect(ui->windHeightComboBox, &QComboBox::currentIndexChanged, this, &MainWindow::windHeightComboBoxCurrentIndexChanged); - connect(ui->domainAverageCheckBox, &QCheckBox::clicked, this, &MainWindow::domainAverageCheckBoxClicked); - connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, this, &MainWindow::treeWidgetItemDoubleClicked); - connect(ui->pointInitializationCheckBox, &QCheckBox::clicked, this, &MainWindow::pointInitializationCheckBoxClicked); - connect(ui->useWeatherModelInit, &QCheckBox::clicked, this, &MainWindow::useWeatherModelInitClicked); - connect(ui->clearTableButton, &QPushButton::clicked, this, &MainWindow::clearTableButtonClicked); - connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); - connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); - connect(ui->timeZoneAllZonesCheckBox, &QCheckBox::clicked, this, &MainWindow::timeZoneAllZonesCheckBoxClicked); - connect(ui->timeZoneDetailsCheckBox, &QCheckBox::clicked, this, &MainWindow::timeZoneDetailsCheckBoxClicked); - connect(ui->timeZoneComboBox, &QComboBox::currentIndexChanged, this, &MainWindow::timeZoneComboBoxCurrentIndexChanged); - connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &MainWindow::domainAverageTableCellChanged); - connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); - connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInputView, &SurfaceInputView::boundingBoxReceived); - connect(surfaceInputView, &SurfaceInputView::requestRefresh, this, &MainWindow::refreshUI); - connect(this, &MainWindow::openElevationFile, surfaceInputView, &SurfaceInputView::elevationInputFileOpenButtonClicked); + connect(ui->elevationInputTypeComboBox, &QComboBox::currentIndexChanged, ui->elevationInputTypeStackedWidget, &QStackedWidget::setCurrentIndex); + connect(ui->massSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::massSolverCheckBoxClicked); + connect(ui->momentumSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::momentumSolverCheckBoxClicked); + connect(ui->diurnalCheckBox, &QCheckBox::clicked, this, &MainWindow::diurnalCheckBoxClicked); + connect(ui->stabilityCheckBox, &QCheckBox::clicked, this, &MainWindow::stabilityCheckBoxClicked); + connect(ui->windHeightComboBox, &QComboBox::currentIndexChanged, this, &MainWindow::windHeightComboBoxCurrentIndexChanged); + connect(ui->domainAverageCheckBox, &QCheckBox::clicked, this, &MainWindow::domainAverageCheckBoxClicked); + connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, this, &MainWindow::treeWidgetItemDoubleClicked); + connect(ui->pointInitializationCheckBox, &QCheckBox::clicked, this, &MainWindow::pointInitializationCheckBoxClicked); + connect(ui->useWeatherModelInit, &QCheckBox::clicked, this, &MainWindow::useWeatherModelInitClicked); + connect(ui->clearTableButton, &QPushButton::clicked, this, &MainWindow::clearTableButtonClicked); + connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); + connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); + connect(ui->timeZoneAllZonesCheckBox, &QCheckBox::clicked, this, &MainWindow::timeZoneAllZonesCheckBoxClicked); + connect(ui->timeZoneDetailsCheckBox, &QCheckBox::clicked, this, &MainWindow::timeZoneDetailsCheckBoxClicked); + connect(ui->timeZoneComboBox, &QComboBox::currentIndexChanged, this, &MainWindow::timeZoneComboBoxCurrentIndexChanged); + connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &MainWindow::domainAverageTableCellChanged); + connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); + connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInputView, &SurfaceInputView::boundingBoxReceived); + connect(surfaceInputView, &SurfaceInputView::requestRefresh, this, &MainWindow::refreshUI); + connect(this, &MainWindow::openElevationFile, surfaceInputView, &SurfaceInputView::elevationInputFileOpenButtonClicked); } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { - int pageIndex = item->data(column, Qt::UserRole).toInt(); - if (pageIndex >= 0) { + int pageIndex = item->data(column, Qt::UserRole).toInt(); + if (pageIndex >= 0) { if(pageIndex >= 6) { - ui->inputsStackedWidget->setCurrentIndex(pageIndex+1); + ui->inputsStackedWidget->setCurrentIndex(pageIndex+1); } else { - ui->inputsStackedWidget->setCurrentIndex(pageIndex); + ui->inputsStackedWidget->setCurrentIndex(pageIndex); + } } - } } // Recursive function to add files and directories correctly with Name and Date columns void addFilesRecursively(QStandardItem *parentItem, const QString &dirPath) { - QDir dir(dirPath); - QFileInfoList entries = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); - for (const QFileInfo &entry : entries) { - QStandardItem *nameItem = new QStandardItem(entry.fileName()); - QStandardItem *dateItem = new QStandardItem(entry.lastModified().toString("yyyy-MM-dd HH:mm:ss")); - nameItem->setEditable(false); - dateItem->setEditable(false); - parentItem->appendRow({nameItem, dateItem}); - if (entry.isDir()) { - addFilesRecursively(nameItem, entry.absoluteFilePath()); + QDir dir(dirPath); + QFileInfoList entries = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); + for (const QFileInfo &entry : entries) { + QStandardItem *nameItem = new QStandardItem(entry.fileName()); + QStandardItem *dateItem = new QStandardItem(entry.lastModified().toString("yyyy-MM-dd HH:mm:ss")); + nameItem->setEditable(false); + dateItem->setEditable(false); + parentItem->appendRow({nameItem, dateItem}); + if (entry.isDir()) { + addFilesRecursively(nameItem, entry.absoluteFilePath()); + } } - } } // Function to populate forecastDownloads with .tif parent directories and all nested contents void MainWindow::populateForecastDownloads() { - QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - QDir downloadsDir(downloadsPath); - - if (!downloadsDir.exists()) return; - - QStandardItemModel *model = new QStandardItemModel(this); - model->setHorizontalHeaderLabels({"Name", "Date Modified"}); - - QDirIterator it(downloadsPath, QDir::Dirs | QDir::NoDotAndDotDot); - while (it.hasNext()) { - QString dirPath = it.next(); - if (dirPath.endsWith(".tif", Qt::CaseInsensitive)) { - QStandardItem *parentItem = new QStandardItem(QFileInfo(dirPath).fileName()); - parentItem->setEditable(false); - addFilesRecursively(parentItem, dirPath); - model->appendRow(parentItem); + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + QDir downloadsDir(downloadsPath); + + if (!downloadsDir.exists()) return; + + QStandardItemModel *model = new QStandardItemModel(this); + model->setHorizontalHeaderLabels({"Name", "Date Modified"}); + + QDirIterator it(downloadsPath, QDir::Dirs | QDir::NoDotAndDotDot); + while (it.hasNext()) { + QString dirPath = it.next(); + if (dirPath.endsWith(".tif", Qt::CaseInsensitive)) { + QStandardItem *parentItem = new QStandardItem(QFileInfo(dirPath).fileName()); + parentItem->setEditable(false); + addFilesRecursively(parentItem, dirPath); + model->appendRow(parentItem); + } } - } - ui->forecastDownloads->setModel(model); - ui->forecastDownloads->header()->setSectionResizeMode(QHeaderView::Stretch); + ui->forecastDownloads->setModel(model); + ui->forecastDownloads->header()->setSectionResizeMode(QHeaderView::Stretch); - // Disable editing and enable double-click expansion - ui->forecastDownloads->setEditTriggers(QAbstractItemView::NoEditTriggers); - ui->forecastDownloads->setExpandsOnDoubleClick(true); + // Disable editing and enable double-click expansion + ui->forecastDownloads->setEditTriggers(QAbstractItemView::NoEditTriggers); + ui->forecastDownloads->setExpandsOnDoubleClick(true); } void MainWindow::massSolverCheckBoxClicked() { - AppState& state = AppState::instance(); + AppState& state = AppState::instance(); - if (state.isMomentumSolverToggled) { - ui->momentumSolverCheckBox->setChecked(false); - state.isMomentumSolverToggled = ui->momentumSolverCheckBox->isChecked(); - } - state.isMassSolverToggled = ui->massSolverCheckBox->isChecked(); + if (state.isMomentumSolverToggled) { + ui->momentumSolverCheckBox->setChecked(false); + state.isMomentumSolverToggled = ui->momentumSolverCheckBox->isChecked(); + } + state.isMassSolverToggled = ui->massSolverCheckBox->isChecked(); - ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); - refreshUI(); + ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + refreshUI(); } void MainWindow::momentumSolverCheckBoxClicked() { - AppState& state = AppState::instance(); + AppState& state = AppState::instance(); - if (state.isMassSolverToggled) { - ui->massSolverCheckBox->setChecked(false); - state.isMassSolverToggled = ui->massSolverCheckBox->isChecked(); - } - state.isMomentumSolverToggled = ui->momentumSolverCheckBox->isChecked(); + if (state.isMassSolverToggled) { + ui->massSolverCheckBox->setChecked(false); + state.isMassSolverToggled = ui->massSolverCheckBox->isChecked(); + } + state.isMomentumSolverToggled = ui->momentumSolverCheckBox->isChecked(); - ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); - refreshUI(); + ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + refreshUI(); } void MainWindow::timeZoneComboBoxCurrentIndexChanged(int index) { - QString currentTimeZone = ui->timeZoneComboBox->currentText(); - QString timeZoneDetails = surfaceInput->fetchTimeZoneDetails(currentTimeZone); - ui->timeZoneDetailsTextEdit->setText(timeZoneDetails); + QString currentTimeZone = ui->timeZoneComboBox->currentText(); + QString timeZoneDetails = surfaceInput->fetchTimeZoneDetails(currentTimeZone); + ui->timeZoneDetailsTextEdit->setText(timeZoneDetails); } // User toggles show all time zones void MainWindow::timeZoneAllZonesCheckBoxClicked() { - AppState& state = AppState::instance(); - state.isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); + AppState& state = AppState::instance(); + state.isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); - bool isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); - QVector> displayData = surfaceInput->fetchAllTimeZones(isShowAllTimeZonesSelected); + bool isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); + QVector> displayData = surfaceInput->fetchAllTimeZones(isShowAllTimeZonesSelected); - ui->timeZoneComboBox->clear(); - for (const QVector& zone : displayData) { - if (!zone.isEmpty()) { - ui->timeZoneComboBox->addItem(zone[0]); + ui->timeZoneComboBox->clear(); + for (const QVector& zone : displayData) { + if (!zone.isEmpty()) { + ui->timeZoneComboBox->addItem(zone[0]); + } } - } - // Default to America/Denver - ui->timeZoneComboBox->setCurrentText("America/Denver"); - ui->timeZoneComboBox->setMaxVisibleItems(15); + // Default to America/Denver + ui->timeZoneComboBox->setCurrentText("America/Denver"); } void MainWindow::timeZoneDetailsCheckBoxClicked() { - AppState& state = AppState::instance(); - state.isDisplayTimeZoneDetailsSelected = ui->timeZoneDetailsCheckBox->isChecked(); - ui->timeZoneDetailsTextEdit->setVisible(state.isDisplayTimeZoneDetailsSelected); + AppState& state = AppState::instance(); + state.isDisplayTimeZoneDetailsSelected = ui->timeZoneDetailsCheckBox->isChecked(); + ui->timeZoneDetailsTextEdit->setVisible(state.isDisplayTimeZoneDetailsSelected); } void MainWindow::diurnalCheckBoxClicked() { - AppState& state = AppState::instance(); - state.isDiurnalInputToggled = ui->diurnalCheckBox->isChecked(); - - QTableWidget* table = ui->domainAverageTable; - if (!ui->diurnalCheckBox->isChecked()) { - table->hideColumn(2); - table->hideColumn(3); - table->hideColumn(4); - table->hideColumn(5); - ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); - } else { - table->showColumn(2); - table->showColumn(3); - table->showColumn(4); - table->showColumn(5); - ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); - } + AppState& state = AppState::instance(); + state.isDiurnalInputToggled = ui->diurnalCheckBox->isChecked(); + + QTableWidget* table = ui->domainAverageTable; + if(!ui->diurnalCheckBox->isChecked()) { + table->hideColumn(2); + table->hideColumn(3); + table->hideColumn(4); + table->hideColumn(5); + ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + } else { + table->showColumn(2); + table->showColumn(3); + table->showColumn(4); + table->showColumn(5); + ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + } - refreshUI(); + refreshUI(); } void MainWindow::stabilityCheckBoxClicked() { - AppState& state = AppState::instance(); - state.isStabilityInputToggled = ui->stabilityCheckBox->isChecked(); + AppState& state = AppState::instance(); + state.isStabilityInputToggled = ui->stabilityCheckBox->isChecked(); - refreshUI(); + refreshUI(); } void MainWindow::domainAverageCheckBoxClicked() { - AppState& state = AppState::instance(); - state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); + AppState& state = AppState::instance(); + state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); - if (state.isDomainAverageInitializationToggled) { - ui->pointInitializationCheckBox->setChecked(false); - ui->useWeatherModelInit->setChecked(false); - state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); - state.isWeatherModelInitializationToggled = ui->useWeatherModelInit->isChecked(); - } + if (state.isDomainAverageInitializationToggled) { + ui->pointInitializationCheckBox->setChecked(false); + ui->useWeatherModelInit->setChecked(false); + state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); + state.isWeatherModelInitializationToggled = ui->useWeatherModelInit->isChecked(); + } - refreshUI(); + refreshUI(); } void MainWindow::windHeightComboBoxCurrentIndexChanged(int index) { - switch(index) - { - case 0: - ui->windHeightValue->setValue(20.00); - ui->windHeightValue->setEnabled(false); - ui->windHeightFeet->setChecked(true); - ui->windHeightFeet->setEnabled(false); - ui->windHeightMeters->setEnabled(false); - break; - - case 1: - ui->windHeightValue->setValue(10.00); - ui->windHeightValue->setEnabled(false); - ui->windHeightMeters->setChecked(true); - ui->windHeightFeet->setEnabled(false); - ui->windHeightMeters->setEnabled(false); - break; - - case 2: - ui->windHeightValue->setEnabled(true); - ui->windHeightFeet->setEnabled(true); - ui->windHeightMeters->setEnabled(true); - break; - } + switch(index) + { + case 0: + ui->windHeightValue->setValue(20.00); + ui->windHeightValue->setEnabled(false); + ui->windHeightFeet->setChecked(true); + ui->windHeightFeet->setEnabled(false); + ui->windHeightMeters->setEnabled(false); + break; + + case 1: + ui->windHeightValue->setValue(10.00); + ui->windHeightValue->setEnabled(false); + ui->windHeightMeters->setChecked(true); + ui->windHeightFeet->setEnabled(false); + ui->windHeightMeters->setEnabled(false); + break; + + case 2: + ui->windHeightValue->setEnabled(true); + ui->windHeightFeet->setEnabled(true); + ui->windHeightMeters->setEnabled(true); + break; + } } void MainWindow::clearTableButtonClicked() { - AppState& state = AppState::instance(); - AppState::instance().isDomainAverageWindInputTableValid = true; + AppState& state = AppState::instance(); + AppState::instance().isDomainAverageWindInputTableValid = true; - ui->domainAverageTable->clearContents(); - invalidDAWCells.clear(); + ui->domainAverageTable->clearContents(); + invalidDAWCells.clear(); - refreshUI(); + refreshUI(); } void MainWindow::domainAverageTableCellChanged(int row, int column) { - QTableWidget* table = ui->domainAverageTable; - QTableWidgetItem* item = table->item(row, column); - if (!item) return; - - QString value = item->text().trimmed(); - bool valid = false; - QString errorMessage; - - // Allow empty input - if (value.isEmpty()) { - valid = true; - } else { - switch (column) { - case 0: { - double d = value.toDouble(&valid); - if (!valid || d <= 0) - valid = false; - errorMessage = "Must be a positive number"; - break; - } - case 1: { - int i = value.toDouble(&valid); - if (!valid || i < 0 || i > 359.9) { - valid = false; - errorMessage = "Must be a number between 0 and 359"; - } - break; - } - case 2: { - QTime t = QTime::fromString(value, "hh:mm"); - valid = t.isValid(); - if (!valid) errorMessage = "Must be a valid 24h time (hh:mm)"; - break; - } - case 3: { - QDate d = QDate::fromString(value, "MM/dd/yyyy"); - valid = d.isValid(); - if (!valid) errorMessage = "Must be a valid date (MM/DD/YYYY)"; - break; - } - case 4: { - int i = value.toDouble(&valid); - if (!valid || i < 0 || i > 100) { - valid = false; - errorMessage = "Must be a number between 0 and 100"; - } - break; - } - case 5: { - value.toInt(&valid); - if (!valid) errorMessage = "Must be an integer"; - break; - } - default: - valid = true; + QTableWidget* table = ui->domainAverageTable; + QTableWidgetItem* item = table->item(row, column); + if (!item) return; + + QString value = item->text().trimmed(); + bool valid = false; + QString errorMessage; + + // Allow empty input + if (value.isEmpty()) + { + valid = true; + } else + { + switch (column) + { + case 0: { + double d = value.toDouble(&valid); + if (!valid || d <= 0) { + valid = false; + errorMessage = "Must be a positive number"; + } + break; + } + case 1: { + int i = value.toDouble(&valid); + if (!valid || i < 0 || i > 359.9) { + valid = false; + errorMessage = "Must be a number between 0 and 359"; + } + break; + } + case 2: { + QTime t = QTime::fromString(value, "hh:mm"); + valid = t.isValid(); + if (!valid) errorMessage = "Must be a valid 24h time (hh:mm)"; + break; + } + case 3: { + QDate d = QDate::fromString(value, "MM/dd/yyyy"); + valid = d.isValid(); + if (!valid) errorMessage = "Must be a valid date (MM/DD/YYYY)"; + break; + } + case 4: { + int i = value.toDouble(&valid); + if (!valid || i < 0 || i > 100) { + valid = false; + errorMessage = "Must be a number between 0 and 100"; + } + break; + } + case 5: { + value.toInt(&valid); + if (!valid) errorMessage = "Must be an integer"; + break; + } + default: + valid = true; + } } - } - QPair cell(row, column); - if (!valid) { + QPair cell(row, column); + if (!valid) { invalidDAWCells.insert(cell); item->setBackground(Qt::red); item->setToolTip(errorMessage); - } else { + } else { invalidDAWCells.remove(cell); item->setBackground(QBrush()); // Reset to default item->setToolTip(""); - } + } - AppState::instance().isDomainAverageWindInputTableValid = invalidDAWCells.isEmpty(); - refreshUI(); + AppState::instance().isDomainAverageWindInputTableValid = invalidDAWCells.isEmpty(); + refreshUI(); } void MainWindow::pointInitializationCheckBoxClicked() { - AppState& state = AppState::instance(); - state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); + AppState& state = AppState::instance(); + state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); - if (state.isPointInitializationToggled) { - ui->domainAverageCheckBox->setChecked(false); - ui->useWeatherModelInit->setChecked(false); - state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); - state.isWeatherModelInitializationToggled = ui->useWeatherModelInit->isChecked(); - } + if (state.isPointInitializationToggled) { + ui->domainAverageCheckBox->setChecked(false); + ui->useWeatherModelInit->setChecked(false); + state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); + state.isWeatherModelInitializationToggled = ui->useWeatherModelInit->isChecked(); + } - refreshUI(); + refreshUI(); } void MainWindow::useWeatherModelInitClicked() { - AppState& state = AppState::instance(); + AppState& state = AppState::instance(); - state.isWeatherModelInitializationToggled = ui->useWeatherModelInit->isChecked(); + state.isWeatherModelInitializationToggled = ui->useWeatherModelInit->isChecked(); - if (state.isWeatherModelInitializationToggled) { - ui->domainAverageCheckBox->setChecked(false); - ui->pointInitializationCheckBox->setChecked(false); - state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); - state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); - } + if (state.isWeatherModelInitializationToggled) { + ui->domainAverageCheckBox->setChecked(false); + ui->pointInitializationCheckBox->setChecked(false); + state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); + state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); + } - refreshUI(); + refreshUI(); } void MainWindow::outputDirectoryButtonClicked() { - QString currentPath = ui->outputDirectoryTextEdit->toPlainText(); - QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - QString dirPath = QFileDialog::getExistingDirectory(this, - "Select a directory", // Window title - currentPath, // Starting location - QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); - - if (!dirPath.isEmpty()) { - ui->outputDirectoryTextEdit->setText(dirPath); - ui->outputDirectoryTextEdit->setToolTip(dirPath); - } + QString currentPath = ui->outputDirectoryTextEdit->toPlainText(); + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + QString dirPath = QFileDialog::getExistingDirectory(this, "Select a directory", currentPath, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); + + if (!dirPath.isEmpty()) { + ui->outputDirectoryTextEdit->setText(dirPath); + ui->outputDirectoryTextEdit->setToolTip(dirPath); + } } void MainWindow::numberOfProcessorsSolveButtonClicked() { - ui->solveButton->click(); + ui->solveButton->click(); } void MainWindow::solveButtonClicked() @@ -681,46 +681,44 @@ void MainWindow::solveButtonClicked() void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) { - if (item->text(0) == "Conservation of Mass") - { - ui->massSolverCheckBox->click(); - } else if (item->text(0) == "Conservation of Mass and Momentum") - { - ui->momentumSolverCheckBox->click(); - } else if (item->text(0) == "Diurnal Input") - { - ui->diurnalCheckBox->click(); - } else if (item->text(0) == "Stability Input") - { - ui->stabilityCheckBox->click(); - } else if (item->text(0) == "Domain Average Wind") - { - ui->domainAverageCheckBox->click(); - } else if (item->text(0) == "Point Initialization") - { - ui->pointInitializationCheckBox->click(); - } else if (item->text(0) == "Weather Model") - { - ui->useWeatherModelInit->click(); - } else if (item->text(0) == "Surface Input") - { - emit openElevationFile(); - } + if (item->text(0) == "Conservation of Mass") + { + ui->massSolverCheckBox->click(); + } else if (item->text(0) == "Conservation of Mass and Momentum") + { + ui->momentumSolverCheckBox->click(); + } else if (item->text(0) == "Diurnal Input") + { + ui->diurnalCheckBox->click(); + } else if (item->text(0) == "Stability Input") + { + ui->stabilityCheckBox->click(); + } else if (item->text(0) == "Domain Average Wind") + { + ui->domainAverageCheckBox->click(); + } else if (item->text(0) == "Point Initialization") + { + ui->pointInitializationCheckBox->click(); + } else if (item->text(0) == "Weather Model") + { + ui->useWeatherModelInit->click(); + } else if (item->text(0) == "Surface Input") + { + emit openElevationFile(); + } } void MainWindow::loadMapKMZ(const std::vector& input){ + for (const auto& dir : input) { + QString qDir = QString::fromStdString(dir); - for (const auto& dir : input) { - QString qDir = QString::fromStdString(dir); - - QFile f(qDir); - f.open(QIODevice::ReadOnly); - QByteArray data = f.readAll(); - QString base64 = data.toBase64(); - - webView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); - } + QFile f(qDir); + f.open(QIODevice::ReadOnly); + QByteArray data = f.readAll(); + QString base64 = data.toBase64(); + webView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + } } /* diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 2b9ae8575..ecd0ac0d5 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -50,55 +50,55 @@ QT_END_NAMESPACE class MainWindow : public QMainWindow { - Q_OBJECT + Q_OBJECT public: - void populateForecastDownloads(); - void toggleExpandCollapse(const QModelIndex &index); - void loadMapKMZ(const std::vector& input); + void populateForecastDownloads(); + void toggleExpandCollapse(const QModelIndex &index); + void loadMapKMZ(const std::vector& input); - MainWindow(QWidget *parent = nullptr); - ~MainWindow(); + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); signals: - void openElevationFile(); + void openElevationFile(); private slots: - void massSolverCheckBoxClicked(); - void momentumSolverCheckBoxClicked(); - void diurnalCheckBoxClicked(); - void stabilityCheckBoxClicked(); - void windHeightComboBoxCurrentIndexChanged(int index); - void domainAverageCheckBoxClicked(); - void treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column); - void pointInitializationCheckBoxClicked(); - void useWeatherModelInitClicked(); - void clearTableButtonClicked(); - void solveButtonClicked(); - void outputDirectoryButtonClicked(); - void numberOfProcessorsSolveButtonClicked(); - void timeZoneAllZonesCheckBoxClicked(); - void timeZoneDetailsCheckBoxClicked(); - void timeZoneComboBoxCurrentIndexChanged(int index); - void domainAverageTableCellChanged(int row, int column); - void refreshUI(); + void massSolverCheckBoxClicked(); + void momentumSolverCheckBoxClicked(); + void diurnalCheckBoxClicked(); + void stabilityCheckBoxClicked(); + void windHeightComboBoxCurrentIndexChanged(int index); + void domainAverageCheckBoxClicked(); + void treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column); + void pointInitializationCheckBoxClicked(); + void useWeatherModelInitClicked(); + void clearTableButtonClicked(); + void solveButtonClicked(); + void outputDirectoryButtonClicked(); + void numberOfProcessorsSolveButtonClicked(); + void timeZoneAllZonesCheckBoxClicked(); + void timeZoneDetailsCheckBoxClicked(); + void timeZoneComboBoxCurrentIndexChanged(int index); + void domainAverageTableCellChanged(int row, int column); + void refreshUI(); private: - void connectSignals(); - void treeItemClicked(QTreeWidgetItem *item, int column); - QSet> invalidDAWCells; + void connectSignals(); + void treeItemClicked(QTreeWidgetItem *item, int column); + QSet> invalidDAWCells; - Ui::MainWindow *ui; - QWebEngineView *webView; - QWebChannel *channel; - MapBridge *mapBridge; - SurfaceInput *surfaceInput; - SurfaceInputView *surfaceInputView; - MenuBarView *menuBarView; + Ui::MainWindow *ui; + QWebEngineView *webView; + QWebChannel *channel; + MapBridge *mapBridge; + SurfaceInput *surfaceInput; + SurfaceInputView *surfaceInputView; + MenuBarView *menuBarView; - bool NinjaCheckVersions(char * mostrecentversion, char * localversion); - char * NinjaQueryServerMessages(bool checkAbort); - void checkMessages(void); + bool NinjaCheckVersions(char * mostrecentversion, char * localversion); + char * NinjaQueryServerMessages(bool checkAbort); + void checkMessages(void); }; #endif // MAINWINDOW_H diff --git a/src/gui/mapbridge.cpp b/src/gui/mapbridge.cpp index f1b8d74d3..24329e600 100644 --- a/src/gui/mapbridge.cpp +++ b/src/gui/mapbridge.cpp @@ -1,22 +1,22 @@ #include "mapbridge.h" void MapBridge::receiveBoundingBox(const QString &jsonCoords) { - QJsonDocument doc = QJsonDocument::fromJson(jsonCoords.toUtf8()); - if (!doc.isObject()) { - qWarning() << "Invalid bounding box JSON"; - return; - } + QJsonDocument doc = QJsonDocument::fromJson(jsonCoords.toUtf8()); + if (!doc.isObject()) { + qWarning() << "Invalid bounding box JSON"; + return; + } - QJsonObject obj = doc.object(); + QJsonObject obj = doc.object(); - double north = obj["north"].toDouble(); - double south = obj["south"].toDouble(); - double east = obj["east"].toDouble(); - double west = obj["west"].toDouble(); + double north = obj["north"].toDouble(); + double south = obj["south"].toDouble(); + double east = obj["east"].toDouble(); + double west = obj["west"].toDouble(); - qDebug() << "Bounding box received:"; - qDebug() << "North:" << north << "South:" << south; - qDebug() << "East:" << east << "West:" << west; + qDebug() << "Bounding box received:"; + qDebug() << "North:" << north << "South:" << south; + qDebug() << "East:" << east << "West:" << west; - emit boundingBoxReceived(north, south, east, west); + emit boundingBoxReceived(north, south, east, west); } diff --git a/src/gui/mapbridge.h b/src/gui/mapbridge.h index da15280ff..514bb45e5 100644 --- a/src/gui/mapbridge.h +++ b/src/gui/mapbridge.h @@ -7,16 +7,16 @@ #include class MapBridge : public QObject { - Q_OBJECT + Q_OBJECT public: - explicit MapBridge(QObject *parent = nullptr) : QObject(parent) {} + explicit MapBridge(QObject *parent = nullptr) : QObject(parent) {} signals: - void boundingBoxReceived(double north, double south, double east, double west); + void boundingBoxReceived(double north, double south, double east, double west); public slots: - void receiveBoundingBox(const QString &jsonCoords); + void receiveBoundingBox(const QString &jsonCoords); }; diff --git a/src/gui/menubarview.cpp b/src/gui/menubarview.cpp index a5025765c..7d50f0942 100644 --- a/src/gui/menubarview.cpp +++ b/src/gui/menubarview.cpp @@ -4,42 +4,42 @@ MenuBarView::MenuBarView(Ui::MainWindow* ui, QObject* parent) : QObject(parent), ui(ui) { - // QMenu fileMenu "File" actions - connect(ui->newProjectAction, &QAction::triggered, this, &MenuBarView::newProject); - connect(ui->openProjectAction, &QAction::triggered, this, &MenuBarView::openProject); - connect(ui->exportSolutionAction, &QAction::triggered, this, &MenuBarView::exportSolution); - connect(ui->closeProjectAction, &QAction::triggered, this, &MenuBarView::closeProject); - //connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QCoreApplication::quit); // exit the entire app - // QMenu optionsMenu "Options" actions - connect(ui->enableConsoleOutputAction, &QAction::triggered, this, &MenuBarView::enableConsoleOutput); - connect(ui->writeConsoleOutputAction, &QAction::triggered, this, &MenuBarView::writeConsoleOutput); - - // QMenu toolsMenu "Tools" actions - connect(ui->resampleDataAction, &QAction::triggered, this, &MenuBarView::resampleData); - connect(ui->writeBlankStationFileAction, &QAction::triggered, this, &MenuBarView::writeBlankStationFile); - connect(ui->setConfigurationOptionAction, &QAction::triggered, this, &MenuBarView::setConfigurationOption); - - // QMenu helpMenu "Help" actions - // sub QMenu displayingShapeFilesMenu "Displaying Shapefiles" actions - connect(ui->displayArcGISProGuideAction, &QAction::triggered, this, &MenuBarView::displayArcGISProGuide); - - // sub QMenu tutorialsMenu "Tutorials" actions - connect(ui->displayTutorial1Action, &QAction::triggered, this, &MenuBarView::displayTutorial1); - connect(ui->displayTutorial2Action, &QAction::triggered, this, &MenuBarView::displayTutorial2); - connect(ui->displayTutorial3Action, &QAction::triggered, this, &MenuBarView::displayTutorial3); - connect(ui->displayTutorial4Action, &QAction::triggered, this, &MenuBarView::displayTutorial4); - - // sub QMenu instructionsMenu "Instructions" actions - connect(ui->displayDemDownloadInstructionsAction, &QAction::triggered, this, &MenuBarView::displayDemDownloadInstructions); - connect(ui->displayFetchDemInstructionsAction, &QAction::triggered, this, &MenuBarView::displayFetchDemInstructions); - connect(ui->displayCommandLineInterfaceInstructionsAction, &QAction::triggered, this, &MenuBarView::displayCommandLineInterfaceInstructions); - - // remaining non-sub QMenu actions - connect(ui->aboutWindNinjaAction, &QAction::triggered, this, &MenuBarView::aboutWindNinja); - connect(ui->citeWindNinjaAction, &QAction::triggered, this, &MenuBarView::citeWindNinja); - connect(ui->supportEmailAction, &QAction::triggered, this, &MenuBarView::supportEmail); - connect(ui->submitBugReportAction, &QAction::triggered, this, &MenuBarView::submitBugReport); - connect(ui->aboutQtAction, &QAction::triggered, this, &QApplication::aboutQt); + // QMenu fileMenu "File" actions + connect(ui->newProjectAction, &QAction::triggered, this, &MenuBarView::newProject); + connect(ui->openProjectAction, &QAction::triggered, this, &MenuBarView::openProject); + connect(ui->exportSolutionAction, &QAction::triggered, this, &MenuBarView::exportSolution); + connect(ui->closeProjectAction, &QAction::triggered, this, &MenuBarView::closeProject); + //connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QCoreApplication::quit); // exit the entire app + // QMenu optionsMenu "Options" actions + connect(ui->enableConsoleOutputAction, &QAction::triggered, this, &MenuBarView::enableConsoleOutput); + connect(ui->writeConsoleOutputAction, &QAction::triggered, this, &MenuBarView::writeConsoleOutput); + + // QMenu toolsMenu "Tools" actions + connect(ui->resampleDataAction, &QAction::triggered, this, &MenuBarView::resampleData); + connect(ui->writeBlankStationFileAction, &QAction::triggered, this, &MenuBarView::writeBlankStationFile); + connect(ui->setConfigurationOptionAction, &QAction::triggered, this, &MenuBarView::setConfigurationOption); + + // QMenu helpMenu "Help" actions + // sub QMenu displayingShapeFilesMenu "Displaying Shapefiles" actions + connect(ui->displayArcGISProGuideAction, &QAction::triggered, this, &MenuBarView::displayArcGISProGuide); + + // sub QMenu tutorialsMenu "Tutorials" actions + connect(ui->displayTutorial1Action, &QAction::triggered, this, &MenuBarView::displayTutorial1); + connect(ui->displayTutorial2Action, &QAction::triggered, this, &MenuBarView::displayTutorial2); + connect(ui->displayTutorial3Action, &QAction::triggered, this, &MenuBarView::displayTutorial3); + connect(ui->displayTutorial4Action, &QAction::triggered, this, &MenuBarView::displayTutorial4); + + // sub QMenu instructionsMenu "Instructions" actions + connect(ui->displayDemDownloadInstructionsAction, &QAction::triggered, this, &MenuBarView::displayDemDownloadInstructions); + connect(ui->displayFetchDemInstructionsAction, &QAction::triggered, this, &MenuBarView::displayFetchDemInstructions); + connect(ui->displayCommandLineInterfaceInstructionsAction, &QAction::triggered, this, &MenuBarView::displayCommandLineInterfaceInstructions); + + // remaining non-sub QMenu actions + connect(ui->aboutWindNinjaAction, &QAction::triggered, this, &MenuBarView::aboutWindNinja); + connect(ui->citeWindNinjaAction, &QAction::triggered, this, &MenuBarView::citeWindNinja); + connect(ui->supportEmailAction, &QAction::triggered, this, &MenuBarView::supportEmail); + connect(ui->submitBugReportAction, &QAction::triggered, this, &MenuBarView::submitBugReport); + connect(ui->aboutQtAction, &QAction::triggered, this, &QApplication::aboutQt); } void MenuBarView::newProject() diff --git a/src/gui/menubarview.h b/src/gui/menubarview.h index ecaab727f..c0d647ceb 100644 --- a/src/gui/menubarview.h +++ b/src/gui/menubarview.h @@ -9,44 +9,44 @@ class MainWindow; class MenuBarView : public QObject { - Q_OBJECT + Q_OBJECT public: - explicit MenuBarView(Ui::MainWindow* ui, QObject* parent = nullptr); + explicit MenuBarView(Ui::MainWindow* ui, QObject* parent = nullptr); private slots: - // functions for Menu actions - // functions for QMenu fileMenu "File" actions - void newProject(); - void openProject(); - void exportSolution(); - void closeProject(); - // functions for QMenu optionsMenu "Options" actions - void enableConsoleOutput(); - void writeConsoleOutput(); - // functions for QMenu toolsMenu "Tools" actions - void resampleData(); - void writeBlankStationFile(); - void setConfigurationOption(); - // functions for QMenu helpMenu "Help" actions - // functions for sub QMenu displayingShapeFilesMenu "Displaying Shapefiles" actions - void displayArcGISProGuide(); - // functions for sub QMenu tutorialsMenu "Tutorials" actions - void displayTutorial1(); - void displayTutorial2(); - void displayTutorial3(); - void displayTutorial4(); - // functions for sub QMenu instructionsMenu "Instructions" actions - void displayDemDownloadInstructions(); - void displayFetchDemInstructions(); - void displayCommandLineInterfaceInstructions(); - // functions for remaining non-sub QMenu actions - void aboutWindNinja(); - void citeWindNinja(); - void supportEmail(); - void submitBugReport(); + // functions for Menu actions + // functions for QMenu fileMenu "File" actions + void newProject(); + void openProject(); + void exportSolution(); + void closeProject(); + // functions for QMenu optionsMenu "Options" actions + void enableConsoleOutput(); + void writeConsoleOutput(); + // functions for QMenu toolsMenu "Tools" actions + void resampleData(); + void writeBlankStationFile(); + void setConfigurationOption(); + // functions for QMenu helpMenu "Help" actions + // functions for sub QMenu displayingShapeFilesMenu "Displaying Shapefiles" actions + void displayArcGISProGuide(); + // functions for sub QMenu tutorialsMenu "Tutorials" actions + void displayTutorial1(); + void displayTutorial2(); + void displayTutorial3(); + void displayTutorial4(); + // functions for sub QMenu instructionsMenu "Instructions" actions + void displayDemDownloadInstructions(); + void displayFetchDemInstructions(); + void displayCommandLineInterfaceInstructions(); + // functions for remaining non-sub QMenu actions + void aboutWindNinja(); + void citeWindNinja(); + void supportEmail(); + void submitBugReport(); private: - Ui::MainWindow* ui; + Ui::MainWindow* ui; }; #endif // MENUBARVIEW_H diff --git a/src/gui/splashscreen.cpp b/src/gui/splashscreen.cpp index f23d3e80f..f6be9cfe8 100644 --- a/src/gui/splashscreen.cpp +++ b/src/gui/splashscreen.cpp @@ -6,81 +6,81 @@ SplashScreen::SplashScreen(const QPixmap &pixmap, QStringList list, int time) : QSplashScreen(pixmap), messages(list), messageTime(time), i(0), j(0), SplashScreenDone(false) { - numMessages = messages.size(); - messageFadeInterval = time; - alignment = Qt::AlignLeft | Qt::AlignBottom; - map = pixmap; + numMessages = messages.size(); + messageFadeInterval = time; + alignment = Qt::AlignLeft | Qt::AlignBottom; + map = pixmap; - opacityEffect = new QGraphicsOpacityEffect(this); - setGraphicsEffect(opacityEffect); - opacityEffect->setOpacity(0.0); + opacityEffect = new QGraphicsOpacityEffect(this); + setGraphicsEffect(opacityEffect); + opacityEffect->setOpacity(0.0); - fadeInAnimation = new QPropertyAnimation(opacityEffect, "opacity"); - fadeInAnimation->setDuration(1000); - fadeInAnimation->setStartValue(0.0); - fadeInAnimation->setEndValue(1.0); - connect(fadeInAnimation, &QPropertyAnimation::finished, this, &SplashScreen::onFadeInFinished); + fadeInAnimation = new QPropertyAnimation(opacityEffect, "opacity"); + fadeInAnimation->setDuration(1000); + fadeInAnimation->setStartValue(0.0); + fadeInAnimation->setEndValue(1.0); + connect(fadeInAnimation, &QPropertyAnimation::finished, this, &SplashScreen::onFadeInFinished); - fadeOutAnimation = new QPropertyAnimation(opacityEffect, "opacity"); - fadeOutAnimation->setDuration(1000); - fadeOutAnimation->setStartValue(1.0); - fadeOutAnimation->setEndValue(0.0); - connect(fadeOutAnimation, &QPropertyAnimation::finished, this, &SplashScreen::onFadeOutFinished); + fadeOutAnimation = new QPropertyAnimation(opacityEffect, "opacity"); + fadeOutAnimation->setDuration(1000); + fadeOutAnimation->setStartValue(1.0); + fadeOutAnimation->setEndValue(0.0); + connect(fadeOutAnimation, &QPropertyAnimation::finished, this, &SplashScreen::onFadeOutFinished); - messageTimer = new QTimer(this); - connect(messageTimer, &QTimer::timeout, this, &SplashScreen::update); + messageTimer = new QTimer(this); + connect(messageTimer, &QTimer::timeout, this, &SplashScreen::update); } void SplashScreen::display() { - show(); - fadeInAnimation->start(); + show(); + fadeInAnimation->start(); } void SplashScreen::update() { - if (SplashScreenDone || ++i >= numMessages) { - messageTimer->stop(); - fadeOut(); - return; - } + if (SplashScreenDone || ++i >= numMessages) { + messageTimer->stop(); + fadeOut(); + return; + } - clearMessage(); - showMessage(messages.value(i), alignment, Qt::gray); - QApplication::processEvents(); + clearMessage(); + showMessage(messages.value(i), alignment, Qt::gray); + QApplication::processEvents(); } void SplashScreen::fadeOut() { - fadeOutAnimation->start(); + fadeOutAnimation->start(); } void SplashScreen::onFadeInFinished() { - showMessage(messages.value(0), alignment, Qt::gray); - messageTimer->start(messageTime); + showMessage(messages.value(0), alignment, Qt::gray); + messageTimer->start(messageTime); } void SplashScreen::onFadeOutFinished() { - if (!SplashScreenDone) { - emit done(); - } - close(); + if (!SplashScreenDone) { + emit done(); + } + close(); } void SplashScreen::mousePressEvent(QMouseEvent *event) { - if (event->buttons() & Qt::LeftButton) { - SplashScreenDone = true; + if (event->buttons() & Qt::LeftButton) { + SplashScreenDone = true; - messageTimer->stop(); + messageTimer->stop(); - fadeInAnimation->stop(); - fadeOutAnimation->stop(); - fadeOutAnimation->disconnect(this); + fadeInAnimation->stop(); + fadeOutAnimation->stop(); + fadeOutAnimation->disconnect(this); - emit done(); - close(); - } + emit done(); + close(); + } } diff --git a/src/gui/splashscreen.h b/src/gui/splashscreen.h index 9bf85479f..be420ad69 100644 --- a/src/gui/splashscreen.h +++ b/src/gui/splashscreen.h @@ -5,32 +5,32 @@ #include class SplashScreen : public QSplashScreen { - Q_OBJECT + Q_OBJECT public: - SplashScreen(const QPixmap &pixmap, QStringList list, int time); - void display(); + SplashScreen(const QPixmap &pixmap, QStringList list, int time); + void display(); protected: - void mousePressEvent(QMouseEvent *event) override; + void mousePressEvent(QMouseEvent *event) override; signals: - void done(); + void done(); private slots: - void update(); - void fadeOut(); - void onFadeOutFinished(); - void onFadeInFinished(); + void update(); + void fadeOut(); + void onFadeOutFinished(); + void onFadeInFinished(); private: - QStringList messages; - int messageTime, numMessages, i, j, messageFadeInterval; - Qt::Alignment alignment; - QPixmap map; - QTimer *messageTimer; - QGraphicsOpacityEffect *opacityEffect; - QPropertyAnimation *fadeInAnimation; - QPropertyAnimation *fadeOutAnimation; - bool SplashScreenDone; + QStringList messages; + int messageTime, numMessages, i, j, messageFadeInterval; + Qt::Alignment alignment; + QPixmap map; + QTimer *messageTimer; + QGraphicsOpacityEffect *opacityEffect; + QPropertyAnimation *fadeInAnimation; + QPropertyAnimation *fadeOutAnimation; + bool SplashScreenDone; }; diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 4efff3be8..caddccdc8 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -146,193 +146,185 @@ QVector> SurfaceInput::fetchAllTimeZones(bool isShowAllTimeZone int SurfaceInput::fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType) { - NinjaArmyH* ninjaArmy = NULL; - char ** papszOptions = NULL; - NinjaErr err = 0; - - err = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); - if (err != NINJA_SUCCESS){ - qDebug() << "NinjaFetchDEMBBox: err =" << err; - return err; - } - else - { - return NINJA_SUCCESS; - } + NinjaArmyH* ninjaArmy = NULL; + char ** papszOptions = NULL; + NinjaErr err = 0; + + err = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); + if (err != NINJA_SUCCESS){ + qDebug() << "NinjaFetchDEMBBox: err =" << err; + return err; + } + else + { + return NINJA_SUCCESS; + } } void SurfaceInput::computeDEMFile(QString filePath) { - double adfGeoTransform[6]; - GDALDataset *poInputDS; - poInputDS = (GDALDataset*)GDALOpen(filePath.toStdString().c_str(), GA_ReadOnly); - - GDALDriverName = poInputDS->GetDriver()->GetDescription(); - GDALXSize = poInputDS->GetRasterXSize(); - GDALYSize = poInputDS->GetRasterYSize(); - GDALGetCorners(poInputDS, DEMCorners); - - if (poInputDS->GetGeoTransform(adfGeoTransform) == CE_None) { - double c1, c2; - c1 = adfGeoTransform[1]; - c2 = adfGeoTransform[5]; - if (abs(c1) == abs(c2)) { - GDALCellSize = abs(c1); - } else { - GDALClose((GDALDatasetH)poInputDS); + double adfGeoTransform[6]; + GDALDataset *poInputDS; + poInputDS = (GDALDataset*)GDALOpen(filePath.toStdString().c_str(), GA_ReadOnly); + + GDALDriverName = poInputDS->GetDriver()->GetDescription(); + GDALXSize = poInputDS->GetRasterXSize(); + GDALYSize = poInputDS->GetRasterYSize(); + GDALGetCorners(poInputDS, DEMCorners); + + if (poInputDS->GetGeoTransform(adfGeoTransform) == CE_None) + { + double c1, c2; + c1 = adfGeoTransform[1]; + c2 = adfGeoTransform[5]; + if (abs(c1) == abs(c2)) { + GDALCellSize = abs(c1); + } else { + GDALClose((GDALDatasetH)poInputDS); + } } - } - GDALRasterBand* band = poInputDS->GetRasterBand(1); - int gotMin = 0, gotMax = 0; - double minVal = band->GetMinimum(&gotMin); - double maxVal = band->GetMaximum(&gotMax); - if (!gotMin || !gotMax) { - band->ComputeStatistics(false, &minVal, &maxVal, nullptr, nullptr, nullptr, nullptr); - } + GDALRasterBand* band = poInputDS->GetRasterBand(1); + int gotMin = 0, gotMax = 0; + double minVal = band->GetMinimum(&gotMin); + double maxVal = band->GetMaximum(&gotMax); + if (!gotMin || !gotMax) { + band->ComputeStatistics(false, &minVal, &maxVal, nullptr, nullptr, nullptr, nullptr); + } - GDALMinValue = minVal; - GDALMaxValue = maxVal; + GDALMinValue = minVal; + GDALMaxValue = maxVal; - GDALClose((GDALDatasetH)poInputDS); + GDALClose((GDALDatasetH)poInputDS); } double SurfaceInput::computeMeshResolution(int index, bool isMomemtumChecked) { - int coarse = 4000; - int medium = 10000; - int fine = 20000; - double meshResolution = 200.0; - - if( GDALCellSize == 0.0 || GDALXSize == 0 || GDALYSize == 0 ) - { - return meshResolution; - } + int coarse = 4000; + int medium = 10000; + int fine = 20000; + double meshResolution = 200.0; + + if( GDALCellSize == 0.0 || GDALXSize == 0 || GDALYSize == 0 ) + { + return meshResolution; + } -#ifdef NINJAFOAM - if (isMomemtumChecked) { - coarse = 25000; - medium = 50000; - fine = 100000; - } -#endif //NINJAFOAM - - int targetNumHorizCells = fine; - switch (index) { - case 0: - targetNumHorizCells = coarse; - break; - case 1: - targetNumHorizCells = medium; - break; - case 2: - targetNumHorizCells = fine; - break; - case 3: - return 200; - default: - return 200; - } + #ifdef NINJAFOAM + if (isMomemtumChecked) { + coarse = 25000; + medium = 50000; + fine = 100000; + } + #endif //NINJAFOAM + + int targetNumHorizCells = fine; + switch (index) { + case 0: + targetNumHorizCells = coarse; + break; + case 1: + targetNumHorizCells = medium; + break; + case 2: + targetNumHorizCells = fine; + break; + case 3: + return 200; + default: + return 200; + } - double XLength = GDALXSize * GDALCellSize; - double YLength = GDALYSize * GDALCellSize; - double nXcells = 2 * std::sqrt((double)targetNumHorizCells) * (XLength / (XLength + YLength)); - double nYcells = 2 * std::sqrt((double)targetNumHorizCells) * (YLength / (XLength + YLength)); + double XLength = GDALXSize * GDALCellSize; + double YLength = GDALYSize * GDALCellSize; + double nXcells = 2 * std::sqrt((double)targetNumHorizCells) * (XLength / (XLength + YLength)); + double nYcells = 2 * std::sqrt((double)targetNumHorizCells) * (YLength / (XLength + YLength)); - double XCellSize = XLength / nXcells; - double YCellSize = YLength / nYcells; + double XCellSize = XLength / nXcells; + double YCellSize = YLength / nYcells; - meshResolution = (XCellSize + YCellSize) / 2; + meshResolution = (XCellSize + YCellSize) / 2; -#ifdef NINJAFOAM - if (isMomemtumChecked) { - XLength = GDALXSize * GDALCellSize; - YLength = GDALYSize * GDALCellSize; + #ifdef NINJAFOAM + if (isMomemtumChecked) { + XLength = GDALXSize * GDALCellSize; + YLength = GDALYSize * GDALCellSize; - double dz = GDALMaxValue - GDALMinValue; - double ZLength = std::max((0.1 * std::max(XLength, YLength)), (dz + 0.1 * dz)); - double zmin, zmax; - zmin = GDALMaxValue + 0.05 * ZLength; //zmin (above highest point in DEM for MDM) - zmax = GDALMaxValue + ZLength; //zmax + double dz = GDALMaxValue - GDALMinValue; + double ZLength = std::max((0.1 * std::max(XLength, YLength)), (dz + 0.1 * dz)); + double zmin, zmax; + zmin = GDALMaxValue + 0.05 * ZLength; //zmin (above highest point in DEM for MDM) + zmax = GDALMaxValue + ZLength; //zmax - double volume; - double cellCount; - double cellVolume; + double volume; + double cellCount; + double cellVolume; - volume = XLength * YLength * (zmax-zmin); //volume of blockMesh - cellCount = targetNumHorizCells * 0.5; // cell count in volume 1 - cellVolume = volume/cellCount; // volume of 1 cell in blockMesh - double side = std::pow(cellVolume, (1.0/3.0)); // length of side of cell in blockMesh + volume = XLength * YLength * (zmax-zmin); //volume of blockMesh + cellCount = targetNumHorizCells * 0.5; // cell count in volume 1 + cellVolume = volume/cellCount; // volume of 1 cell in blockMesh + double side = std::pow(cellVolume, (1.0/3.0)); // length of side of cell in blockMesh //determine number of rounds of refinement - int nCellsToAdd = 0; - int refinedCellCount = 0; - int nCellsInLowestLayer = int(XLength/side) * int(YLength/side); - int nRoundsRefinement = 0; - while(refinedCellCount < (0.5 * targetNumHorizCells)){ - nCellsToAdd = nCellsInLowestLayer * 8; //each cell is divided into 8 cells - refinedCellCount += nCellsToAdd - nCellsInLowestLayer; //subtract the parent cells - nCellsInLowestLayer = nCellsToAdd/2; //only half of the added cells are in the lowest layer - nRoundsRefinement += 1; + int nCellsToAdd = 0; + int refinedCellCount = 0; + int nCellsInLowestLayer = int(XLength/side) * int(YLength/side); + int nRoundsRefinement = 0; + while(refinedCellCount < (0.5 * targetNumHorizCells)){ + nCellsToAdd = nCellsInLowestLayer * 8; //each cell is divided into 8 cells + refinedCellCount += nCellsToAdd - nCellsInLowestLayer; //subtract the parent cells + nCellsInLowestLayer = nCellsToAdd/2; //only half of the added cells are in the lowest layer + nRoundsRefinement += 1; + } + + meshResolution = side/(nRoundsRefinement*2.0); } + #endif //NINJAFOAM - meshResolution = side/(nRoundsRefinement*2.0); - } -#endif //NINJAFOAM - - return meshResolution; + return meshResolution; } void SurfaceInput::computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]) { - const double EARTH_RADIUS_MILES = 3958.7613; - const double DEG_TO_RAD = M_PI / 180.0; - - double deltaLat = radius / (2.0 * M_PI * EARTH_RADIUS_MILES / 360.0); - double latRadius = EARTH_RADIUS_MILES * std::cos(centerLat * DEG_TO_RAD); - double deltaLon = radius / (2.0 * M_PI * latRadius / 360.0); - - boundingBox[0] = centerLat + deltaLat; // North latitude - boundingBox[1] = centerLon + deltaLon; // East longitude - boundingBox[2] = centerLat - deltaLat; // South latitude - boundingBox[3] = centerLon - deltaLon; // West longitude - - qDebug() << "Bounding Box (N, E, S, W):" - << boundingBox[0] - << boundingBox[1] - << boundingBox[2] - << boundingBox[3]; + const double EARTH_RADIUS_MILES = 3958.7613; + const double DEG_TO_RAD = M_PI / 180.0; + + double deltaLat = radius / (2.0 * M_PI * EARTH_RADIUS_MILES / 360.0); + double latRadius = EARTH_RADIUS_MILES * std::cos(centerLat * DEG_TO_RAD); + double deltaLon = radius / (2.0 * M_PI * latRadius / 360.0); + + boundingBox[0] = centerLat + deltaLat; // North + boundingBox[1] = centerLon + deltaLon; // East + boundingBox[2] = centerLat - deltaLat; // South + boundingBox[3] = centerLon - deltaLon; // West } void SurfaceInput::computePointRadius(double north, double east, double south, double west, double pointRadius[3]) { - const double EARTH_RADIUS_MILES = 3958.7613; - const double DEG_TO_RAD = M_PI / 180.0; - - double centerLat = (north + south) / 2.0; - double centerLon = (east + west) / 2.0; + const double EARTH_RADIUS_MILES = 3958.7613; + const double DEG_TO_RAD = M_PI / 180.0; - double deltaLat = std::abs(north - south) / 2.0; - double deltaLon = std::abs(east - west) / 2.0; + double centerLat = (north + south) / 2.0; + double centerLon = (east + west) / 2.0; - double latMiles = (2.0 * M_PI * EARTH_RADIUS_MILES / 360.0) * deltaLat; + double deltaLat = std::abs(north - south) / 2.0; + double deltaLon = std::abs(east - west) / 2.0; - double latRadius = EARTH_RADIUS_MILES * std::cos(centerLat * DEG_TO_RAD); - double lonMiles = (2.0 * M_PI * latRadius / 360.0) * deltaLon; + double latMiles = (2.0 * M_PI * EARTH_RADIUS_MILES / 360.0) * deltaLat; - double radius = (latMiles + lonMiles) / 2.0; + double latRadius = EARTH_RADIUS_MILES * std::cos(centerLat * DEG_TO_RAD); + double lonMiles = (2.0 * M_PI * latRadius / 360.0) * deltaLon; - pointRadius[0] = centerLat; - pointRadius[1] = centerLon; - pointRadius[2] = radius; + double radius = (latMiles + lonMiles) / 2.0; - qDebug() << "Center (Lat, Lon):" << centerLat << centerLon; - qDebug() << "Estimated Radius (mi):" << radius; + pointRadius[0] = centerLat; + pointRadius[1] = centerLon; + pointRadius[2] = radius; } double* SurfaceInput::getDEMCorners() { - return DEMCorners; + return DEMCorners; } diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index 7c9e7dbee..82976de4d 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -9,22 +9,22 @@ class SurfaceInput { public: - SurfaceInput(); + SurfaceInput(); - QString fetchTimeZoneDetails(QString currentTimeZone); - QVector> fetchAllTimeZones(bool isShowAllTimeZonesSelected); - int fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); - void computeDEMFile(QString filePath); - double computeMeshResolution(int index, bool isMomemtumChecked); - void computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]); - void computePointRadius(double north, double east, double south, double west, double pointRadius[3]); - double* getDEMCorners(); + QString fetchTimeZoneDetails(QString currentTimeZone); + QVector> fetchAllTimeZones(bool isShowAllTimeZonesSelected); + int fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); + void computeDEMFile(QString filePath); + double computeMeshResolution(int index, bool isMomemtumChecked); + void computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]); + void computePointRadius(double north, double east, double south, double west, double pointRadius[3]); + double* getDEMCorners(); private: - QString GDALDriverName; - int GDALXSize, GDALYSize; - double GDALCellSize, GDALMaxValue, GDALMinValue; - double DEMCorners[8]; + QString GDALDriverName; + int GDALXSize, GDALYSize; + double GDALCellSize, GDALMaxValue, GDALMinValue; + double DEMCorners[8]; }; #endif // SURFACEINPUT_H diff --git a/src/gui/surfaceinputview.cpp b/src/gui/surfaceinputview.cpp index bf6fdf06a..36ed54d14 100644 --- a/src/gui/surfaceinputview.cpp +++ b/src/gui/surfaceinputview.cpp @@ -10,277 +10,276 @@ SurfaceInputView::SurfaceInputView(Ui::MainWindow *ui, webView(webView), surfaceInput(surfaceInput) { - connect(ui->boundingBoxNorthLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); - connect(ui->boundingBoxSouthLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); - connect(ui->boundingBoxEastLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); - connect(ui->boundingBoxWestLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); - connect(ui->pointRadiusLatLineEdit,&QLineEdit::textChanged, this, &SurfaceInputView::pointRadiusLineEditsTextChanged); - connect(ui->pointRadiusLonLineEdit,&QLineEdit::textChanged, this, &SurfaceInputView::pointRadiusLineEditsTextChanged); - connect(ui->pointRadiusRadiusLineEdit,&QLineEdit::textChanged, this, &SurfaceInputView::pointRadiusLineEditsTextChanged); - connect(ui->elevationInputFileDownloadButton, &QPushButton::clicked, this, &SurfaceInputView::elevationInputFileDownloadButtonClicked); - connect(ui->elevationInputFileOpenButton, &QPushButton::clicked, this, &SurfaceInputView::elevationInputFileOpenButtonClicked); - connect(ui->elevationInputFileLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::elevationInputFileLineEditTextChanged); - connect(ui->meshResolutionComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInputView::meshResolutionComboBoxCurrentIndexChanged); - connect(ui->meshResolutionUnitsComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInputView::meshResolutionUnitsComboBoxCurrentIndexChanged); - connect(ui->surfaceInputDownloadCancelButton, &QPushButton::clicked, this, &SurfaceInputView::surfaceInputDownloadCancelButtonClicked); - connect(ui->surfaceInputDownloadButton, &QPushButton::clicked, this, &SurfaceInputView::surfaceInputDownloadButtonClicked); - connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &SurfaceInputView::elevationInputFileOpenButtonClicked); - connect(ui->elevationInputTypePushButton, &QPushButton::clicked, this, &SurfaceInputView::elevationInputTypePushButtonClicked); - + connect(ui->boundingBoxNorthLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); + connect(ui->boundingBoxSouthLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); + connect(ui->boundingBoxEastLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); + connect(ui->boundingBoxWestLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); + connect(ui->pointRadiusLatLineEdit,&QLineEdit::textChanged, this, &SurfaceInputView::pointRadiusLineEditsTextChanged); + connect(ui->pointRadiusLonLineEdit,&QLineEdit::textChanged, this, &SurfaceInputView::pointRadiusLineEditsTextChanged); + connect(ui->pointRadiusRadiusLineEdit,&QLineEdit::textChanged, this, &SurfaceInputView::pointRadiusLineEditsTextChanged); + connect(ui->elevationInputFileDownloadButton, &QPushButton::clicked, this, &SurfaceInputView::elevationInputFileDownloadButtonClicked); + connect(ui->elevationInputFileOpenButton, &QPushButton::clicked, this, &SurfaceInputView::elevationInputFileOpenButtonClicked); + connect(ui->elevationInputFileLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::elevationInputFileLineEditTextChanged); + connect(ui->meshResolutionComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInputView::meshResolutionComboBoxCurrentIndexChanged); + connect(ui->meshResolutionUnitsComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInputView::meshResolutionUnitsComboBoxCurrentIndexChanged); + connect(ui->surfaceInputDownloadCancelButton, &QPushButton::clicked, this, &SurfaceInputView::surfaceInputDownloadCancelButtonClicked); + connect(ui->surfaceInputDownloadButton, &QPushButton::clicked, this, &SurfaceInputView::surfaceInputDownloadButtonClicked); + connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &SurfaceInputView::elevationInputFileOpenButtonClicked); + connect(ui->elevationInputTypePushButton, &QPushButton::clicked, this, &SurfaceInputView::elevationInputTypePushButtonClicked); } void SurfaceInputView::meshResolutionUnitsComboBoxCurrentIndexChanged(int index) { - switch(index) - { - case 0: - ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 0.3048); - break; - - case 1: - ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 3.28084); - break; - } + switch(index) + { + case 0: + ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 0.3048); + break; + + case 1: + ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 3.28084); + break; + } } void SurfaceInputView::elevationInputTypePushButtonClicked() { - if(ui->elevationInputTypePushButton->isChecked()) - { - webView->page()->runJavaScript("startRectangleDrawing();"); - } - else - { - webView->page()->runJavaScript("stopRectangleDrawing();"); - } + if(ui->elevationInputTypePushButton->isChecked()) + { + webView->page()->runJavaScript("startRectangleDrawing();"); + } + else + { + webView->page()->runJavaScript("stopRectangleDrawing();"); + } } void SurfaceInputView::boundingBoxReceived(double north, double south, double east, double west) { - ui->boundingBoxNorthLineEdit->blockSignals(true); - ui->boundingBoxEastLineEdit->blockSignals(true); - ui->boundingBoxSouthLineEdit->blockSignals(true); - ui->boundingBoxWestLineEdit->blockSignals(true); - - ui->boundingBoxNorthLineEdit->setText(QString::number(north)); - ui->boundingBoxEastLineEdit->setText(QString::number(east)); - ui->boundingBoxSouthLineEdit->setText(QString::number(south)); - ui->boundingBoxWestLineEdit->setText(QString::number(west)); - - ui->boundingBoxNorthLineEdit->blockSignals(false); - ui->boundingBoxEastLineEdit->blockSignals(false); - ui->boundingBoxSouthLineEdit->blockSignals(false); - ui->boundingBoxWestLineEdit->blockSignals(false); - - double pointRadius[3]; - surfaceInput->computePointRadius(north, east, south, west, pointRadius); - ui->pointRadiusLatLineEdit->setText(QString::number(pointRadius[0])); - ui->pointRadiusLonLineEdit->setText(QString::number(pointRadius[1])); - ui->pointRadiusRadiusLineEdit->setText(QString::number(pointRadius[2])); - - ui->elevationInputTypePushButton->setChecked(false); + ui->boundingBoxNorthLineEdit->blockSignals(true); + ui->boundingBoxEastLineEdit->blockSignals(true); + ui->boundingBoxSouthLineEdit->blockSignals(true); + ui->boundingBoxWestLineEdit->blockSignals(true); + + ui->boundingBoxNorthLineEdit->setText(QString::number(north)); + ui->boundingBoxEastLineEdit->setText(QString::number(east)); + ui->boundingBoxSouthLineEdit->setText(QString::number(south)); + ui->boundingBoxWestLineEdit->setText(QString::number(west)); + + ui->boundingBoxNorthLineEdit->blockSignals(false); + ui->boundingBoxEastLineEdit->blockSignals(false); + ui->boundingBoxSouthLineEdit->blockSignals(false); + ui->boundingBoxWestLineEdit->blockSignals(false); + + double pointRadius[3]; + surfaceInput->computePointRadius(north, east, south, west, pointRadius); + ui->pointRadiusLatLineEdit->setText(QString::number(pointRadius[0])); + ui->pointRadiusLonLineEdit->setText(QString::number(pointRadius[1])); + ui->pointRadiusRadiusLineEdit->setText(QString::number(pointRadius[2])); + + ui->elevationInputTypePushButton->setChecked(false); } void SurfaceInputView::boundingBoxLineEditsTextChanged() { - bool isNorthValid, isEastValid, isSouthValid, isWestValid; + bool isNorthValid, isEastValid, isSouthValid, isWestValid; - double north = ui->boundingBoxNorthLineEdit->text().toDouble(&isNorthValid); - double east = ui->boundingBoxEastLineEdit->text().toDouble(&isEastValid); - double south = ui->boundingBoxSouthLineEdit->text().toDouble(&isSouthValid); - double west = ui->boundingBoxWestLineEdit->text().toDouble(&isWestValid); + double north = ui->boundingBoxNorthLineEdit->text().toDouble(&isNorthValid); + double east = ui->boundingBoxEastLineEdit->text().toDouble(&isEastValid); + double south = ui->boundingBoxSouthLineEdit->text().toDouble(&isSouthValid); + double west = ui->boundingBoxWestLineEdit->text().toDouble(&isWestValid); - if (isNorthValid && isEastValid && isSouthValid && isWestValid) - { - QString js = QString("drawBoundingBox(%1, %2, %3, %4);") + if (isNorthValid && isEastValid && isSouthValid && isWestValid) + { + QString js = QString("drawBoundingBox(%1, %2, %3, %4);") .arg(north, 0, 'f', 10) .arg(south, 0, 'f', 10) .arg(east, 0, 'f', 10) .arg(west, 0, 'f', 10); - webView->page()->runJavaScript(js); - } + webView->page()->runJavaScript(js); + } } void SurfaceInputView::pointRadiusLineEditsTextChanged() { - bool isLatValid, isLonValid, isRadiusValid; - - double lat = ui->pointRadiusLatLineEdit->text().toDouble(&isLatValid); - double lon = ui->pointRadiusLonLineEdit->text().toDouble(&isLonValid); - double radius = ui->pointRadiusRadiusLineEdit->text().toDouble(&isRadiusValid); - double boundingBox[4]; - - if(isLatValid && isLonValid && isRadiusValid) - { - surfaceInput->computeBoundingBox(lat, lon, radius, boundingBox); - ui->boundingBoxNorthLineEdit->setText(QString::number(boundingBox[0])); - ui->boundingBoxEastLineEdit->setText(QString::number(boundingBox[1])); - ui->boundingBoxSouthLineEdit->setText(QString::number(boundingBox[2])); - ui->boundingBoxWestLineEdit->setText(QString::number(boundingBox[3])); - } + bool isLatValid, isLonValid, isRadiusValid; + + double lat = ui->pointRadiusLatLineEdit->text().toDouble(&isLatValid); + double lon = ui->pointRadiusLonLineEdit->text().toDouble(&isLonValid); + double radius = ui->pointRadiusRadiusLineEdit->text().toDouble(&isRadiusValid); + double boundingBox[4]; + + if(isLatValid && isLonValid && isRadiusValid) + { + surfaceInput->computeBoundingBox(lat, lon, radius, boundingBox); + ui->boundingBoxNorthLineEdit->setText(QString::number(boundingBox[0])); + ui->boundingBoxEastLineEdit->setText(QString::number(boundingBox[1])); + ui->boundingBoxSouthLineEdit->setText(QString::number(boundingBox[2])); + ui->boundingBoxWestLineEdit->setText(QString::number(boundingBox[3])); + } } void SurfaceInputView::surfaceInputDownloadCancelButtonClicked() { - int currentIndex = ui->inputsStackedWidget->currentIndex(); - ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); + int currentIndex = ui->inputsStackedWidget->currentIndex(); + ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); - ui->elevationInputTypeComboBox->setCurrentIndex(0); - ui->elevationFileTypeComboBox->setCurrentIndex(0); - ui->elevationInputTypePushButton->setChecked(false); + ui->elevationInputTypeComboBox->setCurrentIndex(0); + ui->elevationFileTypeComboBox->setCurrentIndex(0); + ui->elevationInputTypePushButton->setChecked(false); - ui->boundingBoxNorthLineEdit->clear(); - ui->boundingBoxEastLineEdit->clear(); - ui->boundingBoxSouthLineEdit->clear(); - ui->boundingBoxWestLineEdit->clear(); + ui->boundingBoxNorthLineEdit->clear(); + ui->boundingBoxEastLineEdit->clear(); + ui->boundingBoxSouthLineEdit->clear(); + ui->boundingBoxWestLineEdit->clear(); - ui->pointRadiusLatLineEdit->clear(); - ui->pointRadiusLonLineEdit->clear(); - ui->pointRadiusRadiusLineEdit->clear(); + ui->pointRadiusLatLineEdit->clear(); + ui->pointRadiusLonLineEdit->clear(); + ui->pointRadiusRadiusLineEdit->clear(); - webView->page()->runJavaScript("stopRectangleDrawing();"); - if(!currentDEMFilePath.isEmpty()) - { - double *DEMCorners = surfaceInput->getDEMCorners(); - QStringList cornerStrs; - for (int i = 0; i < 8; ++i) - cornerStrs << QString::number(DEMCorners[i], 'f', 8); - QString js = QString("drawDEM([%1]);").arg(cornerStrs.join(", ")); - webView->page()->runJavaScript(js); - } + webView->page()->runJavaScript("stopRectangleDrawing();"); + if(!currentDEMFilePath.isEmpty()) + { + double *DEMCorners = surfaceInput->getDEMCorners(); + QStringList cornerStrs; + for (int i = 0; i < 8; ++i) + cornerStrs << QString::number(DEMCorners[i], 'f', 8); + QString js = QString("drawDEM([%1]);").arg(cornerStrs.join(", ")); + webView->page()->runJavaScript(js); + } } void SurfaceInputView::surfaceInputDownloadButtonClicked() { - QVector boundingBox = { - ui->boundingBoxNorthLineEdit->text().toDouble(), - ui->boundingBoxEastLineEdit->text().toDouble(), - ui->boundingBoxSouthLineEdit->text().toDouble(), - ui->boundingBoxWestLineEdit->text().toDouble() - }; - - double resolution = 30; - - QString defaultName = ""; - QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - QDir dir(downloadsPath); - QString fullPath = dir.filePath(defaultName); - QString demFilePath = QFileDialog::getSaveFileName(ui->centralwidget, "Save DEM File", fullPath, "TIF Files (*.tif)"); - if (demFilePath.isEmpty()) { - return; - } - if (!demFilePath.endsWith(".tif", Qt::CaseInsensitive)) { - demFilePath += ".tif"; - } - currentDEMFilePath = demFilePath; - std::string demFile = demFilePath.toStdString(); - - std::string fetchType; - switch(ui->elevationFileTypeComboBox->currentIndex()) - { - case 0: - fetchType = "srtm"; - break; - case 1: - fetchType = "gmted"; - break; - case 2: - fetchType = "lcp"; - break; - } - - startFetchDEM(boundingBox, demFile, resolution, fetchType); + QVector boundingBox = { + ui->boundingBoxNorthLineEdit->text().toDouble(), + ui->boundingBoxEastLineEdit->text().toDouble(), + ui->boundingBoxSouthLineEdit->text().toDouble(), + ui->boundingBoxWestLineEdit->text().toDouble() + }; + + double resolution = 30; + + QString defaultName = ""; + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + QDir dir(downloadsPath); + QString fullPath = dir.filePath(defaultName); + QString demFilePath = QFileDialog::getSaveFileName(ui->centralwidget, "Save DEM File", fullPath, "TIF Files (*.tif)"); + if (demFilePath.isEmpty()) { + return; + } + if (!demFilePath.endsWith(".tif", Qt::CaseInsensitive)) { + demFilePath += ".tif"; + } + currentDEMFilePath = demFilePath; + std::string demFile = demFilePath.toStdString(); + + std::string fetchType; + switch(ui->elevationFileTypeComboBox->currentIndex()) + { + case 0: + fetchType = "srtm"; + break; + case 1: + fetchType = "gmted"; + break; + case 2: + fetchType = "lcp"; + break; + } + + startFetchDEM(boundingBox, demFile, resolution, fetchType); } void SurfaceInputView::elevationInputFileDownloadButtonClicked() { - int currentIndex = ui->inputsStackedWidget->currentIndex(); - ui->inputsStackedWidget->setCurrentIndex(currentIndex+1); + int currentIndex = ui->inputsStackedWidget->currentIndex(); + ui->inputsStackedWidget->setCurrentIndex(currentIndex+1); } void SurfaceInputView::meshResolutionComboBoxCurrentIndexChanged(int index) { - if (index == 3) { - ui->meshResolutionSpinBox->setEnabled(true); - } else { - ui->meshResolutionSpinBox->setEnabled(false); - } - ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + if (index == 3) { + ui->meshResolutionSpinBox->setEnabled(true); + } else { + ui->meshResolutionSpinBox->setEnabled(false); + } + ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); } void SurfaceInputView::elevationInputFileLineEditTextChanged(const QString &arg1) { - surfaceInput->computeDEMFile(currentDEMFilePath); - surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked()); + surfaceInput->computeDEMFile(currentDEMFilePath); + surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked()); - ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); - emit requestRefresh(); + ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + emit requestRefresh(); } void SurfaceInputView::elevationInputFileOpenButtonClicked() { - QString directoryPath; - if(!currentDEMFilePath.isEmpty()) - { - directoryPath = currentDEMFilePath; - } - else { - directoryPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - } - QString demFilePath = QFileDialog::getOpenFileName(ui->centralwidget, "Select a file", directoryPath, "(*.tif);;All Files (*)"); - - if (demFilePath.isEmpty()) { + QString directoryPath; + if(!currentDEMFilePath.isEmpty()) + { + directoryPath = currentDEMFilePath; + } + else { + directoryPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + } + QString demFilePath = QFileDialog::getOpenFileName(ui->centralwidget, "Select a file", directoryPath, "(*.tif);;All Files (*)"); + + if (demFilePath.isEmpty()) { if (!currentDEMFilePath.isEmpty()) { - ui->elevationInputFileLineEdit->setText(QFileInfo(currentDEMFilePath).fileName()); - ui->elevationInputFileLineEdit->setToolTip(currentDEMFilePath); + ui->elevationInputFileLineEdit->setText(QFileInfo(currentDEMFilePath).fileName()); + ui->elevationInputFileLineEdit->setToolTip(currentDEMFilePath); } - return; - } - - currentDEMFilePath = demFilePath; - ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); - ui->elevationInputFileLineEdit->setToolTip(demFilePath); - - double *DEMCorners = surfaceInput->getDEMCorners(); - QStringList cornerStrs; - for (int i = 0; i < 8; ++i) - cornerStrs << QString::number(DEMCorners[i], 'f', 8); - QString js = QString("drawDEM([%1]);").arg(cornerStrs.join(", ")); - webView->page()->runJavaScript(js); + return; + } + + currentDEMFilePath = demFilePath; + ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); + ui->elevationInputFileLineEdit->setToolTip(demFilePath); + + double *DEMCorners = surfaceInput->getDEMCorners(); + QStringList cornerStrs; + for (int i = 0; i < 8; ++i) + cornerStrs << QString::number(DEMCorners[i], 'f', 8); + QString js = QString("drawDEM([%1]);").arg(cornerStrs.join(", ")); + webView->page()->runJavaScript(js); } void SurfaceInputView::startFetchDEM(QVector boundingBox, std::string demFile, double resolution, std::string fetchType) { - progress = new QProgressDialog("Fetching DEM file...", QString(), 0, 0, ui->centralwidget); - progress->setWindowModality(Qt::WindowModal); - progress->setCancelButton(nullptr); - progress->setMinimumDuration(0); - progress->setAutoClose(true); - progress->show(); - - futureWatcher = new QFutureWatcher(this); - QFuture future = QtConcurrent::run(&SurfaceInput::fetchDEMFile, surfaceInput, boundingBox, demFile, resolution, fetchType); - futureWatcher->setFuture(future); - - connect(futureWatcher, &QFutureWatcher::finished, this, &SurfaceInputView::fetchDEMFinished); + progress = new QProgressDialog("Fetching DEM file...", QString(), 0, 0, ui->centralwidget); + progress->setWindowModality(Qt::WindowModal); + progress->setCancelButton(nullptr); + progress->setMinimumDuration(0); + progress->setAutoClose(true); + progress->show(); + + futureWatcher = new QFutureWatcher(this); + QFuture future = QtConcurrent::run(&SurfaceInput::fetchDEMFile, surfaceInput, boundingBox, demFile, resolution, fetchType); + futureWatcher->setFuture(future); + + connect(futureWatcher, &QFutureWatcher::finished, this, &SurfaceInputView::fetchDEMFinished); } void SurfaceInputView::fetchDEMFinished() { - if (progress) { - progress->close(); - progress->deleteLater(); - progress = nullptr; - } - - if (futureWatcher) { - futureWatcher->deleteLater(); - futureWatcher = nullptr; - } - - ui->elevationInputFileLineEdit->setText(QFileInfo(currentDEMFilePath).fileName()); - int currentIndex = ui->inputsStackedWidget->currentIndex(); - ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); + if (progress) { + progress->close(); + progress->deleteLater(); + progress = nullptr; + } + + if (futureWatcher) { + futureWatcher->deleteLater(); + futureWatcher = nullptr; + } + + ui->elevationInputFileLineEdit->setText(QFileInfo(currentDEMFilePath).fileName()); + int currentIndex = ui->inputsStackedWidget->currentIndex(); + ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); } diff --git a/src/gui/surfaceinputview.h b/src/gui/surfaceinputview.h index 87fb96e23..e66f0b058 100644 --- a/src/gui/surfaceinputview.h +++ b/src/gui/surfaceinputview.h @@ -22,39 +22,39 @@ class MainWindow; class SurfaceInputView : public QObject { Q_OBJECT public: - explicit SurfaceInputView(Ui::MainWindow* ui, - QWebEngineView* webView, - SurfaceInput* surfaceInput, - QObject* parent = nullptr); + explicit SurfaceInputView(Ui::MainWindow* ui, + QWebEngineView* webView, + SurfaceInput* surfaceInput, + QObject* parent = nullptr); signals: - void requestRefresh(); + void requestRefresh(); public slots: - void boundingBoxReceived(double north, double south, double east, double west); - void elevationInputFileOpenButtonClicked(); + void boundingBoxReceived(double north, double south, double east, double west); + void elevationInputFileOpenButtonClicked(); private slots: - void surfaceInputDownloadCancelButtonClicked(); - void surfaceInputDownloadButtonClicked(); - void meshResolutionUnitsComboBoxCurrentIndexChanged(int index); - void elevationInputTypePushButtonClicked(); - void boundingBoxLineEditsTextChanged(); - void pointRadiusLineEditsTextChanged(); - void elevationInputFileDownloadButtonClicked(); - void elevationInputFileLineEditTextChanged(const QString &arg1); - void meshResolutionComboBoxCurrentIndexChanged(int index); - void fetchDEMFinished(); + void surfaceInputDownloadCancelButtonClicked(); + void surfaceInputDownloadButtonClicked(); + void meshResolutionUnitsComboBoxCurrentIndexChanged(int index); + void elevationInputTypePushButtonClicked(); + void boundingBoxLineEditsTextChanged(); + void pointRadiusLineEditsTextChanged(); + void elevationInputFileDownloadButtonClicked(); + void elevationInputFileLineEditTextChanged(const QString &arg1); + void meshResolutionComboBoxCurrentIndexChanged(int index); + void fetchDEMFinished(); private: - void startFetchDEM(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); - Ui::MainWindow *ui; - QWebEngineView *webView; - SurfaceInput *surfaceInput; - - QProgressDialog *progress; - QFutureWatcher *futureWatcher; - QString currentDEMFilePath; + void startFetchDEM(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); + Ui::MainWindow *ui; + QWebEngineView *webView; + SurfaceInput *surfaceInput; + + QProgressDialog *progress; + QFutureWatcher *futureWatcher; + QString currentDEMFilePath; }; #endif // SURFACEINPUTVIEW_H From 6cc4e630d3accc49f12a3ff029057e5842eee722 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 16 Jul 2025 15:06:07 -0600 Subject: [PATCH 114/435] Fixed issue where spacers were not expanding and made ensured splash screen is the top window being displayed --- src/gui/CMakeLists.txt | 3 +- src/gui/mainwindow.ui | 95 +++++++++++++++++++--------------------- src/gui/splashscreen.cpp | 2 + 3 files changed, 47 insertions(+), 53 deletions(-) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index da7e02309..9b933ccec 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -10,8 +10,7 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(QT NAMES Qt6 REQUIRED COMPONENTS Widgets) -find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) -find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets WebEngineWidgets) +find_package(Qt6 REQUIRED COMPONENTS Widgets WebEngineWidgets) set(PROJECT_SOURCES main.cpp diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 5cda133ed..5f61cc236 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -494,7 +494,7 @@ - + 0 0 @@ -524,7 +524,7 @@ QFrame::Shadow::Sunken - 8 + 6 @@ -593,7 +593,7 @@ li.checked::marker { content: "\2612"; } 0 - + 5 @@ -663,7 +663,7 @@ li.checked::marker { content: "\2612"; } 0 - + 5 @@ -727,7 +727,7 @@ li.checked::marker { content: "\2612"; } - + 5 @@ -799,7 +799,7 @@ li.checked::marker { content: "\2612"; } 0 - + QLayout::SizeConstraint::SetMinAndMaxSize @@ -1085,7 +1085,33 @@ li.checked::marker { content: "\2612"; } Time Zone - + + + + + + 0 + 0 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Name: Mountain Standard Time</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Name: Mountain Daylight Time</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Offset from UTC: -07:00:00</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Offset from UTC: -06:00:00</p></body></html> + + + Qt::TextInteractionFlag::NoTextInteraction + + + @@ -1175,45 +1201,6 @@ li.checked::marker { content: "\2612"; } - - - - - 0 - 0 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Name: Mountain Standard Time</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Name: Mountain Daylight Time</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Offset from UTC: -07:00:00</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Offset from UTC: -06:00:00</p></body></html> - - - Qt::TextInteractionFlag::NoTextInteraction - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - @@ -1236,7 +1223,7 @@ li.checked::marker { content: "\2612"; } - + @@ -1498,7 +1485,7 @@ li.checked::marker { content: "\2612"; } 0 - + 0 @@ -1546,7 +1533,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -1564,6 +1551,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + PointingHandCursor @@ -1589,7 +1582,7 @@ li.checked::marker { content: "\2612"; } - + 6 @@ -2730,7 +2723,7 @@ li.checked::marker { content: "\2612"; } - + QLayout::SizeConstraint::SetDefaultConstraint diff --git a/src/gui/splashscreen.cpp b/src/gui/splashscreen.cpp index f6be9cfe8..e5d1577e4 100644 --- a/src/gui/splashscreen.cpp +++ b/src/gui/splashscreen.cpp @@ -6,6 +6,8 @@ SplashScreen::SplashScreen(const QPixmap &pixmap, QStringList list, int time) : QSplashScreen(pixmap), messages(list), messageTime(time), i(0), j(0), SplashScreenDone(false) { + setWindowFlags(Qt::WindowStaysOnTopHint | Qt::SplashScreen); + numMessages = messages.size(); messageFadeInterval = time; alignment = Qt::AlignLeft | Qt::AlignBottom; From 26edfc746b937097f7e519b24789038f6549dbf6 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 16 Jul 2025 15:43:45 -0600 Subject: [PATCH 115/435] Made sure the .tif file is drawn anytime the elevation file line edit is updated --- src/gui/surfaceinputview.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/gui/surfaceinputview.cpp b/src/gui/surfaceinputview.cpp index 36ed54d14..ad7afcc95 100644 --- a/src/gui/surfaceinputview.cpp +++ b/src/gui/surfaceinputview.cpp @@ -214,6 +214,14 @@ void SurfaceInputView::elevationInputFileLineEditTextChanged(const QString &arg1 surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked()); ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + + double *DEMCorners = surfaceInput->getDEMCorners(); + QStringList cornerStrs; + for (int i = 0; i < 8; ++i) + cornerStrs << QString::number(DEMCorners[i], 'f', 8); + QString js = QString("drawDEM([%1]);").arg(cornerStrs.join(", ")); + webView->page()->runJavaScript(js); + emit requestRefresh(); } @@ -240,13 +248,6 @@ void SurfaceInputView::elevationInputFileOpenButtonClicked() currentDEMFilePath = demFilePath; ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); ui->elevationInputFileLineEdit->setToolTip(demFilePath); - - double *DEMCorners = surfaceInput->getDEMCorners(); - QStringList cornerStrs; - for (int i = 0; i < 8; ++i) - cornerStrs << QString::number(DEMCorners[i], 'f', 8); - QString js = QString("drawDEM([%1]);").arg(cornerStrs.join(", ")); - webView->page()->runJavaScript(js); } void SurfaceInputView::startFetchDEM(QVector boundingBox, std::string demFile, double resolution, std::string fetchType) From 93ec18f14df4eb7baac10557c9e16e90be2fa154 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 17 Jul 2025 15:27:01 -0600 Subject: [PATCH 116/435] Commented out bug until able to talk about behavior, also fixed indenting in .html file --- data/map.html | 430 +++++++++++++++++------------------ src/gui/surfaceinputview.cpp | 30 +-- 2 files changed, 228 insertions(+), 232 deletions(-) diff --git a/data/map.html b/data/map.html index 4f16be425..ff2a82839 100755 --- a/data/map.html +++ b/data/map.html @@ -1,233 +1,229 @@ - - Leaflet.draw drawing and editing tools - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + Leaflet Map + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -
- + const baseMaps = {}; + const overlayMaps = {}; + const layerControl = L.control.layers(baseMaps, overlayMaps).addTo(map); + L.control.scale().addTo(map); + + new QWebChannel(qt.webChannelTransport, function (channel) { + window.bridge = channel.objects.bridge; + console.log("WebChannel connected. Bridge is ready."); + }); + + async function loadKmzFromBase64(base64Data) { + try { + const binary = atob(base64Data); + const bytes = new Uint8Array(binary.length); + for (let i = 0; i < binary.length; i++) { + bytes[i] = binary.charCodeAt(i); + } + + const zip = await JSZip.loadAsync(bytes.buffer); + const kmlFiles = Object.values(zip.files).filter(entry => + entry.name.toLowerCase().endsWith('.kml') + ); + + if (kmlFiles.length === 0) { + alert('No KML files found in this KMZ.'); + return; + } + + const kmlGroup = L.featureGroup().addTo(map); + for (const entry of kmlFiles) { + const kmlText = await entry.async('string'); + const parser = new DOMParser(); + const kml = parser.parseFromString(kmlText, 'text/xml'); + const track = new L.KML(kml); + kmlGroup.addLayer(track); + const layerName = entry.name || 'Unnamed Layer'; + layerControl.addOverlay(track, layerName); + } + + setTimeout(() => { + if (kmlGroup.getLayers().length > 0) { + map.fitBounds(kmlGroup.getBounds()); + } + }, 1000); + + } catch (err) { + console.error('Failed to load KMZ from base64:', err); + } + } + diff --git a/src/gui/surfaceinputview.cpp b/src/gui/surfaceinputview.cpp index ad7afcc95..2a717cb00 100644 --- a/src/gui/surfaceinputview.cpp +++ b/src/gui/surfaceinputview.cpp @@ -103,21 +103,21 @@ void SurfaceInputView::boundingBoxLineEditsTextChanged() void SurfaceInputView::pointRadiusLineEditsTextChanged() { - bool isLatValid, isLonValid, isRadiusValid; - - double lat = ui->pointRadiusLatLineEdit->text().toDouble(&isLatValid); - double lon = ui->pointRadiusLonLineEdit->text().toDouble(&isLonValid); - double radius = ui->pointRadiusRadiusLineEdit->text().toDouble(&isRadiusValid); - double boundingBox[4]; - - if(isLatValid && isLonValid && isRadiusValid) - { - surfaceInput->computeBoundingBox(lat, lon, radius, boundingBox); - ui->boundingBoxNorthLineEdit->setText(QString::number(boundingBox[0])); - ui->boundingBoxEastLineEdit->setText(QString::number(boundingBox[1])); - ui->boundingBoxSouthLineEdit->setText(QString::number(boundingBox[2])); - ui->boundingBoxWestLineEdit->setText(QString::number(boundingBox[3])); - } + // bool isLatValid, isLonValid, isRadiusValid; + + // double lat = ui->pointRadiusLatLineEdit->text().toDouble(&isLatValid); + // double lon = ui->pointRadiusLonLineEdit->text().toDouble(&isLonValid); + // double radius = ui->pointRadiusRadiusLineEdit->text().toDouble(&isRadiusValid); + // double boundingBox[4]; + + // if(isLatValid && isLonValid && isRadiusValid) + // { + // surfaceInput->computeBoundingBox(lat, lon, radius, boundingBox); + // ui->boundingBoxNorthLineEdit->setText(QString::number(boundingBox[0])); + // ui->boundingBoxEastLineEdit->setText(QString::number(boundingBox[1])); + // ui->boundingBoxSouthLineEdit->setText(QString::number(boundingBox[2])); + // ui->boundingBoxWestLineEdit->setText(QString::number(boundingBox[3])); + // } } void SurfaceInputView::surfaceInputDownloadCancelButtonClicked() From b08ad202b1d921bca854b57944f9e6869de86b8b Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 21 Jul 2025 14:39:26 -0600 Subject: [PATCH 117/435] Cleaned up and updated map.html file with proper formatting and header comment --- data/map.html | 142 ++++++++++++++++++++++++++------------------------ 1 file changed, 74 insertions(+), 68 deletions(-) diff --git a/data/map.html b/data/map.html index ff2a82839..f19c9cf35 100755 --- a/data/map.html +++ b/data/map.html @@ -1,3 +1,34 @@ + + @@ -40,7 +71,6 @@ - @@ -76,10 +106,9 @@
From 90f09bda67fc56023ea9bc02f14e370c6f5120df Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 21 Jul 2025 15:21:50 -0600 Subject: [PATCH 118/435] Added header comments to all GUI files --- src/gui/appstate.h | 29 +++++++++++++++++++++++++++++ src/gui/main.cpp | 29 +++++++++++++++++++++++++++++ src/gui/mainwindow.cpp | 29 +++++++++++++++++++++++++++++ src/gui/mainwindow.h | 29 +++++++++++++++++++++++++++++ src/gui/mapbridge.cpp | 29 +++++++++++++++++++++++++++++ src/gui/mapbridge.h | 29 +++++++++++++++++++++++++++++ src/gui/menubarview.cpp | 29 +++++++++++++++++++++++++++++ src/gui/menubarview.h | 29 +++++++++++++++++++++++++++++ src/gui/splashscreen.cpp | 29 +++++++++++++++++++++++++++++ src/gui/splashscreen.h | 29 +++++++++++++++++++++++++++++ src/gui/surfaceinput.cpp | 29 +++++++++++++++++++++++++++++ src/gui/surfaceinput.h | 29 +++++++++++++++++++++++++++++ src/gui/surfaceinputview.cpp | 29 +++++++++++++++++++++++++++++ src/gui/surfaceinputview.h | 29 +++++++++++++++++++++++++++++ 14 files changed, 406 insertions(+) diff --git a/src/gui/appstate.h b/src/gui/appstate.h index cc9aadc10..7230e5de2 100644 --- a/src/gui/appstate.h +++ b/src/gui/appstate.h @@ -1,3 +1,32 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Stores the states for inputs in the GUI + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + #ifndef APPSTATE_H #define APPSTATE_H diff --git a/src/gui/main.cpp b/src/gui/main.cpp index b11c80f69..72f7ae2d2 100755 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -1,3 +1,32 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: main() function to initiate Qt GUI + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + #include "mainwindow.h" #include "../ninja/windninja.h" #include diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 8951e11dd..1145a4983 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -1,3 +1,32 @@ +/****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Main Window that handles GUI scraping and state changes + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + #include "mainwindow.h" /* diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index ecd0ac0d5..99b05e851 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -1,3 +1,32 @@ +/****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Main Window that handles GUI scraping and state changes + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + #ifndef MAINWINDOW_H #define MAINWINDOW_H diff --git a/src/gui/mapbridge.cpp b/src/gui/mapbridge.cpp index 24329e600..b4ebe862c 100644 --- a/src/gui/mapbridge.cpp +++ b/src/gui/mapbridge.cpp @@ -1,3 +1,32 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Connects the Qt GUI to the map.html using a Bridge + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + #include "mapbridge.h" void MapBridge::receiveBoundingBox(const QString &jsonCoords) { diff --git a/src/gui/mapbridge.h b/src/gui/mapbridge.h index 514bb45e5..4737e557a 100644 --- a/src/gui/mapbridge.h +++ b/src/gui/mapbridge.h @@ -1,3 +1,32 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Connects the Qt GUI to the map.html using a Bridge + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + #ifndef BRIDGE_H #define BRIDGE_H diff --git a/src/gui/menubarview.cpp b/src/gui/menubarview.cpp index 7d50f0942..dc1fc6296 100644 --- a/src/gui/menubarview.cpp +++ b/src/gui/menubarview.cpp @@ -1,3 +1,32 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Hands GUI related logic for the Menu Bar + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + #include "menubarview.h" #include "ui_mainwindow.h" diff --git a/src/gui/menubarview.h b/src/gui/menubarview.h index c0d647ceb..b896995fd 100644 --- a/src/gui/menubarview.h +++ b/src/gui/menubarview.h @@ -1,3 +1,32 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Hands GUI related logic for the Menu Bar + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + #ifndef MENUBARVIEW_H #define MENUBARVIEW_H diff --git a/src/gui/splashscreen.cpp b/src/gui/splashscreen.cpp index e5d1577e4..b698f14f4 100644 --- a/src/gui/splashscreen.cpp +++ b/src/gui/splashscreen.cpp @@ -1,3 +1,32 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Splash screen that will show a pixmap and n messages for n seconds + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + #include "splashscreen.h" #include #include diff --git a/src/gui/splashscreen.h b/src/gui/splashscreen.h index be420ad69..de5e91eda 100644 --- a/src/gui/splashscreen.h +++ b/src/gui/splashscreen.h @@ -1,3 +1,32 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Splash screen that will show a pixmap and n messages for n seconds + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + #include #include #include diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index caddccdc8..301fad588 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -1,3 +1,32 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Handles non-GUI related logic and API calls for Surface Input + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + #include "surfaceinput.h" SurfaceInput::SurfaceInput() diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index 82976de4d..42ad930ac 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -1,3 +1,32 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Handles non-GUI related logic and API calls for Surface Input + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + #ifndef SURFACEINPUT_H #define SURFACEINPUT_H diff --git a/src/gui/surfaceinputview.cpp b/src/gui/surfaceinputview.cpp index 2a717cb00..301ca3cff 100644 --- a/src/gui/surfaceinputview.cpp +++ b/src/gui/surfaceinputview.cpp @@ -1,3 +1,32 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Hands GUI related logic for the Surface Input Page + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + #include "surfaceinputview.h" #include "ui_mainwindow.h" diff --git a/src/gui/surfaceinputview.h b/src/gui/surfaceinputview.h index e66f0b058..1a8f9d5e0 100644 --- a/src/gui/surfaceinputview.h +++ b/src/gui/surfaceinputview.h @@ -1,3 +1,32 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Hands GUI related logic for the Surface Input Page + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + #ifndef SURFACEINPUTVIEW_H #define SURFACEINPUTVIEW_H From 542098ac88e52175327a92e93d55ff5e5a62006b Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 22 Jul 2025 11:59:42 -0600 Subject: [PATCH 119/435] Cleaned up code by adding a serverBridge class to faciliate conversation between ninjastorm and WindNinja --- src/gui/CMakeLists.txt | 1 + src/gui/mainwindow.cpp | 121 +-------------------------------------- src/gui/mainwindow.h | 8 +-- src/gui/serverbridge.cpp | 121 +++++++++++++++++++++++++++++++++++++++ src/gui/serverbridge.h | 23 ++++++++ src/gui/surfaceinput.h | 2 +- 6 files changed, 150 insertions(+), 126 deletions(-) create mode 100644 src/gui/serverbridge.cpp create mode 100644 src/gui/serverbridge.h diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 9b933ccec..b0bc04173 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -35,6 +35,7 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) mapbridge.cpp surfaceinputview.h surfaceinputview.cpp + serverbridge.h serverbridge.cpp ) # Define target properties for Android with Qt 6 as: diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 1145a4983..de562847e 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -175,7 +175,8 @@ MainWindow::MainWindow(QWidget *parent) ui(new Ui::MainWindow) { ui->setupUi(this); - checkMessages(); + serverBridge = new ServerBridge(); + serverBridge->checkMessages(); resize(1200, 700); timeZoneAllZonesCheckBoxClicked(); @@ -750,123 +751,5 @@ void MainWindow::loadMapKMZ(const std::vector& input){ } } -/* -** Check for version updates, or messages from the server. -*/ -void MainWindow::checkMessages(void) { - QMessageBox mbox; - char *papszMsg = NinjaQueryServerMessages(true); - if (papszMsg != NULL) { - if (strcmp(papszMsg, "TRUE\n") == 0) { - mbox.setText("There is a fatal flaw in Windninja, it must close."); - mbox.exec(); - delete[] papszMsg; - abort(); - } - - else { - char *papszMsg = NinjaQueryServerMessages(false); - if (papszMsg != NULL) { - mbox.setText(papszMsg); - - mbox.exec(); - delete[] papszMsg; - } - } - } -} - -/* -** Query the ninjastorm.firelab.org/sqlitetest/messages.txt and ask for the most up to date version. -** There are three current values: -** -** VERSION -> a semantic version string, comparable with strcmp() -** MESSAGE -> One or more messages to display to the user -** ABORT -> There is a fundamental problem with windninja, and it should call -** abort() after displaying a message. -*/ -bool MainWindow::NinjaCheckVersions(char * mostrecentversion, char * localversion) { - char comparemostrecentversion[256]; - char comparelocalversion[256]; - int mostrecentversionIndex = 0; - int localversionIndex = 0; - while (*mostrecentversion) { - if (*mostrecentversion != '.') { - comparemostrecentversion[mostrecentversionIndex++] = *mostrecentversion; - } - mostrecentversion++; - } - comparemostrecentversion[mostrecentversionIndex] = '\0'; - - while (*localversion) { - if (*localversion != '.') { - comparelocalversion[localversionIndex++] = *localversion; - } - localversion++; - } - - comparelocalversion[localversionIndex] = '\0'; - return strcmp(comparemostrecentversion, comparelocalversion) == 0; - -} - -char * MainWindow::NinjaQueryServerMessages(bool checkAbort) -{ - CPLSetConfigOption("GDAL_HTTP_UNSAFESSL", "YES"); - const char* url = "https://ninjastorm.firelab.org/sqlitetest/messages.txt"; - CPLHTTPResult *poResult = CPLHTTPFetch(url, NULL); - CPLSetConfigOption( "GDAL_HTTP_TIMEOUT", NULL ); - if( !poResult || poResult->nStatus != 0 || poResult->nDataLen == 0 ) - { - CPLDebug( "NINJA", "Failed to reach the ninjastorm server." ); - return NULL; - } - - const char* pszTextContent = reinterpret_cast(poResult->pabyData); - std::vector messages; - std::istringstream iss(pszTextContent); - std::string message; - - // Read all lines into the vector - while (std::getline(iss, message)) { - messages.push_back(message); - } - - // Process all lines except the last two - std::ostringstream oss; - if (checkAbort) { - for (size_t i = 0; i < messages.size(); ++i) { - if (i == messages.size()-1) { // check final line - oss << messages[i] << "\n"; - } - } - } - else { - bool versionisuptodate = NinjaCheckVersions(const_cast(messages[1].c_str()), const_cast(NINJA_VERSION_STRING)); - if (!versionisuptodate) { - oss << messages[0] << "\n"; - oss << "You are using an outdated WindNinja version, please update to version: " << messages[1] << "\n" << "\n"; - } - if (messages[4].empty() == false) { - for (size_t i = 3; i < messages.size() - 2; ++i) { - if (!messages[i].empty()) { - oss << messages[i] << "\n"; - } - } - } - if (messages[4].empty() && versionisuptodate) { - return NULL; - } - } - - std::string resultingmessage = oss.str(); - char* returnString = new char[resultingmessage.length() + 1]; - std::strcpy(returnString, resultingmessage.c_str()); - CPLHTTPDestroyResult(poResult); - return returnString; - - return NULL; -} - diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 99b05e851..083a09b90 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -30,13 +30,12 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H -#include "ninja_version.h" #include "surfaceinput.h" #include "surfaceinputview.h" #include "menubarview.h" #include "mapbridge.h" +#include "serverbridge.h" #include "ui_mainwindow.h" -#include "cpl_http.h" #include "appstate.h" #include #include @@ -125,9 +124,6 @@ private slots: SurfaceInput *surfaceInput; SurfaceInputView *surfaceInputView; MenuBarView *menuBarView; - - bool NinjaCheckVersions(char * mostrecentversion, char * localversion); - char * NinjaQueryServerMessages(bool checkAbort); - void checkMessages(void); + ServerBridge *serverBridge; }; #endif // MAINWINDOW_H diff --git a/src/gui/serverbridge.cpp b/src/gui/serverbridge.cpp new file mode 100644 index 000000000..d438b5708 --- /dev/null +++ b/src/gui/serverbridge.cpp @@ -0,0 +1,121 @@ +#include "serverbridge.h" + +ServerBridge::ServerBridge() {} + +/* +** Check for version updates, or messages from the server. +*/ +void ServerBridge::checkMessages(void) { + QMessageBox mbox; + char *papszMsg = NinjaQueryServerMessages(true); + if (papszMsg != NULL) { + if (strcmp(papszMsg, "TRUE\n") == 0) { + mbox.setText("There is a fatal flaw in Windninja, it must close."); + mbox.exec(); + delete[] papszMsg; + abort(); + } + + else { + char *papszMsg = NinjaQueryServerMessages(false); + if (papszMsg != NULL) { + mbox.setText(papszMsg); + + mbox.exec(); + delete[] papszMsg; + } + } + } +} + +/* +** Query the ninjastorm.firelab.org/sqlitetest/messages.txt and ask for the most up to date version. +** There are three current values: +** +** VERSION -> a semantic version string, comparable with strcmp() +** MESSAGE -> One or more messages to display to the user +** ABORT -> There is a fundamental problem with windninja, and it should call +** abort() after displaying a message. +*/ +bool ServerBridge::NinjaCheckVersions(char * mostrecentversion, char * localversion) { + char comparemostrecentversion[256]; + char comparelocalversion[256]; + int mostrecentversionIndex = 0; + int localversionIndex = 0; + while (*mostrecentversion) { + if (*mostrecentversion != '.') { + comparemostrecentversion[mostrecentversionIndex++] = *mostrecentversion; + } + mostrecentversion++; + } + comparemostrecentversion[mostrecentversionIndex] = '\0'; + + while (*localversion) { + if (*localversion != '.') { + comparelocalversion[localversionIndex++] = *localversion; + } + localversion++; + } + + comparelocalversion[localversionIndex] = '\0'; + return strcmp(comparemostrecentversion, comparelocalversion) == 0; + +} + +char * ServerBridge::NinjaQueryServerMessages(bool checkAbort) +{ + CPLSetConfigOption("GDAL_HTTP_UNSAFESSL", "YES"); + const char* url = "https://ninjastorm.firelab.org/sqlitetest/messages.txt"; + CPLHTTPResult *poResult = CPLHTTPFetch(url, NULL); + CPLSetConfigOption( "GDAL_HTTP_TIMEOUT", NULL ); + if( !poResult || poResult->nStatus != 0 || poResult->nDataLen == 0 ) + { + CPLDebug( "NINJA", "Failed to reach the ninjastorm server." ); + return NULL; + } + + const char* pszTextContent = reinterpret_cast(poResult->pabyData); + std::vector messages; + std::istringstream iss(pszTextContent); + std::string message; + + // Read all lines into the vector + while (std::getline(iss, message)) { + messages.push_back(message); + } + + // Process all lines except the last two + std::ostringstream oss; + if (checkAbort) { + for (size_t i = 0; i < messages.size(); ++i) { + if (i == messages.size()-1) { // check final line + oss << messages[i] << "\n"; + } + } + } + else { + bool versionisuptodate = NinjaCheckVersions(const_cast(messages[1].c_str()), const_cast(NINJA_VERSION_STRING)); + if (!versionisuptodate) { + oss << messages[0] << "\n"; + oss << "You are using an outdated WindNinja version, please update to version: " << messages[1] << "\n" << "\n"; + } + if (messages[4].empty() == false) { + for (size_t i = 3; i < messages.size() - 2; ++i) { + if (!messages[i].empty()) { + oss << messages[i] << "\n"; + } + } + } + if (messages[4].empty() && versionisuptodate) { + return NULL; + } + } + + std::string resultingmessage = oss.str(); + char* returnString = new char[resultingmessage.length() + 1]; + std::strcpy(returnString, resultingmessage.c_str()); + CPLHTTPDestroyResult(poResult); + return returnString; + + return NULL; +} diff --git a/src/gui/serverbridge.h b/src/gui/serverbridge.h new file mode 100644 index 000000000..fafa90f80 --- /dev/null +++ b/src/gui/serverbridge.h @@ -0,0 +1,23 @@ +#ifndef SERVERBRIDGE_H +#define SERVERBRIDGE_H + +#include +#include "ninja_version.h" +#include +#include +#include + +class ServerBridge +{ +public: + ServerBridge(); + void checkMessages(void); + +private: + QString version; + + bool NinjaCheckVersions(char * mostrecentversion, char * localversion); + char * NinjaQueryServerMessages(bool checkAbort); +}; + +#endif // SERVERBRIDGE_H diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index 42ad930ac..a72e80652 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -30,7 +30,7 @@ #ifndef SURFACEINPUT_H #define SURFACEINPUT_H -#include "../ninja/gdal_util.h"" +#include "../ninja/gdal_util.h" #include "../ninja/windninja.h" #include #include From 88c67d2d9d87e8ceb05c4bb424d330c453c3e5b4 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 22 Jul 2025 12:47:59 -0600 Subject: [PATCH 120/435] Changed .ui naming scheme for weather model page, also added spacers --- src/gui/mainwindow.cpp | 23 ++++++++++---------- src/gui/mainwindow.ui | 48 ++++++++++++++++++++++++++++++++---------- 2 files changed, 48 insertions(+), 23 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index de562847e..7e6913922 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -335,7 +335,6 @@ void MainWindow::connectSignals() connect(ui->domainAverageCheckBox, &QCheckBox::clicked, this, &MainWindow::domainAverageCheckBoxClicked); connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, this, &MainWindow::treeWidgetItemDoubleClicked); connect(ui->pointInitializationCheckBox, &QCheckBox::clicked, this, &MainWindow::pointInitializationCheckBoxClicked); - connect(ui->useWeatherModelInit, &QCheckBox::clicked, this, &MainWindow::useWeatherModelInitClicked); connect(ui->clearTableButton, &QPushButton::clicked, this, &MainWindow::clearTableButtonClicked); connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); @@ -377,7 +376,7 @@ void addFilesRecursively(QStandardItem *parentItem, const QString &dirPath) { } } -// Function to populate forecastDownloads with .tif parent directories and all nested contents +// Function to populate weatherModelDataTreeView with .tif parent directories and all nested contents void MainWindow::populateForecastDownloads() { QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); QDir downloadsDir(downloadsPath); @@ -398,12 +397,12 @@ void MainWindow::populateForecastDownloads() { } } - ui->forecastDownloads->setModel(model); - ui->forecastDownloads->header()->setSectionResizeMode(QHeaderView::Stretch); + ui->weatherModelDataTreeView->setModel(model); + ui->weatherModelDataTreeView->header()->setSectionResizeMode(QHeaderView::Stretch); // Disable editing and enable double-click expansion - ui->forecastDownloads->setEditTriggers(QAbstractItemView::NoEditTriggers); - ui->forecastDownloads->setExpandsOnDoubleClick(true); + ui->weatherModelDataTreeView->setEditTriggers(QAbstractItemView::NoEditTriggers); + ui->weatherModelDataTreeView->setExpandsOnDoubleClick(true); } @@ -507,9 +506,9 @@ void MainWindow::domainAverageCheckBoxClicked() if (state.isDomainAverageInitializationToggled) { ui->pointInitializationCheckBox->setChecked(false); - ui->useWeatherModelInit->setChecked(false); + ui->weatherModelCheckBox->setChecked(false); state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); - state.isWeatherModelInitializationToggled = ui->useWeatherModelInit->isChecked(); + state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); } refreshUI(); @@ -640,9 +639,9 @@ void MainWindow::pointInitializationCheckBoxClicked() if (state.isPointInitializationToggled) { ui->domainAverageCheckBox->setChecked(false); - ui->useWeatherModelInit->setChecked(false); + ui->weatherModelCheckBox->setChecked(false); state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); - state.isWeatherModelInitializationToggled = ui->useWeatherModelInit->isChecked(); + state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); } refreshUI(); @@ -652,7 +651,7 @@ void MainWindow::useWeatherModelInitClicked() { AppState& state = AppState::instance(); - state.isWeatherModelInitializationToggled = ui->useWeatherModelInit->isChecked(); + state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); if (state.isWeatherModelInitializationToggled) { ui->domainAverageCheckBox->setChecked(false); @@ -731,7 +730,7 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) ui->pointInitializationCheckBox->click(); } else if (item->text(0) == "Weather Model") { - ui->useWeatherModelInit->click(); + ui->weatherModelCheckBox->click(); } else if (item->text(0) == "Surface Input") { emit openElevationFile(); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 5f61cc236..27b3f5511 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -524,7 +524,7 @@ QFrame::Shadow::Sunken - 6 + 11 @@ -2571,7 +2571,7 @@ li.checked::marker { content: "\2612"; }
- + 5 @@ -2585,7 +2585,7 @@ li.checked::marker { content: "\2612"; } 5 - + 0 @@ -2613,7 +2613,7 @@ li.checked::marker { content: "\2612"; } - + Download Weather Data @@ -2634,16 +2634,16 @@ li.checked::marker { content: "\2612"; } 0 - + - + PointingHandCursor - + PointingHandCursor @@ -2659,7 +2659,7 @@ li.checked::marker { content: "\2612"; } - + PointingHandCursor @@ -2668,10 +2668,23 @@ li.checked::marker { content: "\2612"; } + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + - + Downloaded Forecasts @@ -2692,14 +2705,14 @@ li.checked::marker { content: "\2612"; } 0 - + true - + PointingHandCursor @@ -2720,6 +2733,19 @@ li.checked::marker { content: "\2612"; }
+ + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + +
From da68f03876cc169302ce12e1f9a220ac66563192 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 22 Jul 2025 13:45:24 -0600 Subject: [PATCH 121/435] Created a domain average view class for gui functionality, added header comments to new classes --- src/gui/CMakeLists.txt | 1 + src/gui/domainaverageview.cpp | 173 ++++++++++++++++++++++++++++++++++ src/gui/domainaverageview.h | 64 +++++++++++++ src/gui/mainwindow.cpp | 139 +-------------------------- src/gui/mainwindow.h | 7 +- src/gui/mainwindow.ui | 53 +++++------ src/gui/serverbridge.cpp | 29 ++++++ src/gui/serverbridge.h | 30 ++++++ 8 files changed, 326 insertions(+), 170 deletions(-) create mode 100644 src/gui/domainaverageview.cpp create mode 100644 src/gui/domainaverageview.h diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index b0bc04173..296944ad3 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -36,6 +36,7 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) surfaceinputview.h surfaceinputview.cpp serverbridge.h serverbridge.cpp + domainaverageview.h domainaverageview.cpp ) # Define target properties for Android with Qt 6 as: diff --git a/src/gui/domainaverageview.cpp b/src/gui/domainaverageview.cpp new file mode 100644 index 000000000..bb9a214be --- /dev/null +++ b/src/gui/domainaverageview.cpp @@ -0,0 +1,173 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Handles GUI related logic for the Domain Average Page + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + +#include "domainaverageview.h" +#include "ui_mainwindow.h" + +DomainAverageView::DomainAverageView(Ui::MainWindow* ui, QObject* parent) + : QObject(parent), + ui(ui) +{ + connect(ui->inputWindHeightComboBox, &QComboBox::currentIndexChanged, this, &DomainAverageView::windHeightComboBoxCurrentIndexChanged); + connect(ui->clearTableButton, &QPushButton::clicked, this, &DomainAverageView::clearTableButtonClicked); + connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &DomainAverageView::domainAverageTableCellChanged); + connect(ui->domainAverageCheckBox, &QCheckBox::clicked, this, &DomainAverageView::domainAverageCheckBoxClicked); +} + +void DomainAverageView::domainAverageTableCellChanged(int row, int column) +{ + QTableWidget* table = ui->domainAverageTable; + QTableWidgetItem* item = table->item(row, column); + if (!item) return; + + QString value = item->text().trimmed(); + bool valid = false; + QString errorMessage; + + // Allow empty input + if (value.isEmpty()) + { + valid = true; + } else + { + switch (column) + { + case 0: { + double d = value.toDouble(&valid); + if (!valid || d <= 0) { + valid = false; + errorMessage = "Must be a positive number"; + } + break; + } + case 1: { + int i = value.toDouble(&valid); + if (!valid || i < 0 || i > 359.9) { + valid = false; + errorMessage = "Must be a number between 0 and 359"; + } + break; + } + case 2: { + QTime t = QTime::fromString(value, "hh:mm"); + valid = t.isValid(); + if (!valid) errorMessage = "Must be a valid 24h time (hh:mm)"; + break; + } + case 3: { + QDate d = QDate::fromString(value, "MM/dd/yyyy"); + valid = d.isValid(); + if (!valid) errorMessage = "Must be a valid date (MM/DD/YYYY)"; + break; + } + case 4: { + int i = value.toDouble(&valid); + if (!valid || i < 0 || i > 100) { + valid = false; + errorMessage = "Must be a number between 0 and 100"; + } + break; + } + case 5: { + value.toInt(&valid); + if (!valid) errorMessage = "Must be an integer"; + break; + } + default: + valid = true; + } + } + + QPair cell(row, column); + if (!valid) { + invalidDAWCells.insert(cell); + item->setBackground(Qt::red); + item->setToolTip(errorMessage); + } else { + invalidDAWCells.remove(cell); + item->setBackground(QBrush()); // Reset to default + item->setToolTip(""); + } + + AppState::instance().isDomainAverageWindInputTableValid = invalidDAWCells.isEmpty(); + emit requestRefresh(); +} + + +void DomainAverageView::clearTableButtonClicked() +{ + AppState& state = AppState::instance(); + AppState::instance().isDomainAverageWindInputTableValid = true; + + ui->domainAverageTable->clearContents(); + invalidDAWCells.clear(); + + emit requestRefresh(); +} + +void DomainAverageView::windHeightComboBoxCurrentIndexChanged(int index) +{ + switch(index) + { + case 0: + ui->inputWindHeightSpinBox->setValue(20.00); + ui->inputWindHeightSpinBox->setEnabled(false); + ui->inputWindHeightUnitsComboBox->setCurrentIndex(0); + break; + + case 1: + ui->inputWindHeightSpinBox->setValue(10.00); + ui->inputWindHeightSpinBox->setEnabled(false); + ui->inputWindHeightUnitsComboBox->setCurrentIndex(1); + break; + + case 2: + ui->inputWindHeightSpinBox->setValue(0.00); + ui->inputWindHeightSpinBox->setEnabled(true); + ui->inputWindHeightUnitsComboBox->setCurrentIndex(0); + ui->inputWindHeightUnitsComboBox->setEnabled(true); + break; + } +} + +void DomainAverageView::domainAverageCheckBoxClicked() +{ + AppState& state = AppState::instance(); + state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); + + if (state.isDomainAverageInitializationToggled) { + ui->pointInitializationCheckBox->setChecked(false); + ui->weatherModelCheckBox->setChecked(false); + state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); + state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); + } + + emit requestRefresh(); +} + diff --git a/src/gui/domainaverageview.h b/src/gui/domainaverageview.h new file mode 100644 index 000000000..d7b8fc643 --- /dev/null +++ b/src/gui/domainaverageview.h @@ -0,0 +1,64 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Handles GUI related logic for the Domain Average Page + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + + +#ifndef DOMAINAVERAGEVIEW_H +#define DOMAINAVERAGEVIEW_H + +#include "appstate.h" +#include +#include +#include + +namespace Ui { +class MainWindow; +} + +class DomainAverageView: public QObject { + Q_OBJECT + +signals: + void requestRefresh(); + +public: + explicit DomainAverageView(Ui::MainWindow* ui, QObject* parent = nullptr); + +private: + QSet> invalidDAWCells; + Ui::MainWindow *ui; + + void domainAverageTableCellChanged(int row, int column); + void clearTableButtonClicked(); + void domainAverageCheckBoxClicked(); + void windHeightComboBoxCurrentIndexChanged(int index); + void windHeightUnitsComboBoxCurrentIndexChanged(int index); + +}; + +#endif // DOMAINAVERAGEVIEW_H diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 7e6913922..45b6c5146 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -241,6 +241,7 @@ MainWindow::MainWindow(QWidget *parent) menuBarView = new MenuBarView(ui, this); surfaceInputView = new SurfaceInputView(ui, webView, surfaceInput, this); + domainAverageView = new DomainAverageView(ui, this); QVBoxLayout *layout = new QVBoxLayout(); layout->setContentsMargins(0, 0, 0, 0); @@ -331,20 +332,17 @@ void MainWindow::connectSignals() connect(ui->momentumSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::momentumSolverCheckBoxClicked); connect(ui->diurnalCheckBox, &QCheckBox::clicked, this, &MainWindow::diurnalCheckBoxClicked); connect(ui->stabilityCheckBox, &QCheckBox::clicked, this, &MainWindow::stabilityCheckBoxClicked); - connect(ui->windHeightComboBox, &QComboBox::currentIndexChanged, this, &MainWindow::windHeightComboBoxCurrentIndexChanged); - connect(ui->domainAverageCheckBox, &QCheckBox::clicked, this, &MainWindow::domainAverageCheckBoxClicked); connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, this, &MainWindow::treeWidgetItemDoubleClicked); connect(ui->pointInitializationCheckBox, &QCheckBox::clicked, this, &MainWindow::pointInitializationCheckBoxClicked); - connect(ui->clearTableButton, &QPushButton::clicked, this, &MainWindow::clearTableButtonClicked); connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); connect(ui->timeZoneAllZonesCheckBox, &QCheckBox::clicked, this, &MainWindow::timeZoneAllZonesCheckBoxClicked); connect(ui->timeZoneDetailsCheckBox, &QCheckBox::clicked, this, &MainWindow::timeZoneDetailsCheckBoxClicked); connect(ui->timeZoneComboBox, &QComboBox::currentIndexChanged, this, &MainWindow::timeZoneComboBoxCurrentIndexChanged); - connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &MainWindow::domainAverageTableCellChanged); connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInputView, &SurfaceInputView::boundingBoxReceived); connect(surfaceInputView, &SurfaceInputView::requestRefresh, this, &MainWindow::refreshUI); + connect(domainAverageView, &DomainAverageView::requestRefresh, this, &MainWindow::refreshUI); connect(this, &MainWindow::openElevationFile, surfaceInputView, &SurfaceInputView::elevationInputFileOpenButtonClicked); } @@ -441,7 +439,6 @@ void MainWindow::timeZoneComboBoxCurrentIndexChanged(int index) ui->timeZoneDetailsTextEdit->setText(timeZoneDetails); } -// User toggles show all time zones void MainWindow::timeZoneAllZonesCheckBoxClicked() { AppState& state = AppState::instance(); @@ -499,138 +496,6 @@ void MainWindow::stabilityCheckBoxClicked() refreshUI(); } -void MainWindow::domainAverageCheckBoxClicked() -{ - AppState& state = AppState::instance(); - state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); - - if (state.isDomainAverageInitializationToggled) { - ui->pointInitializationCheckBox->setChecked(false); - ui->weatherModelCheckBox->setChecked(false); - state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); - state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); - } - - refreshUI(); -} - -void MainWindow::windHeightComboBoxCurrentIndexChanged(int index) -{ - switch(index) - { - case 0: - ui->windHeightValue->setValue(20.00); - ui->windHeightValue->setEnabled(false); - ui->windHeightFeet->setChecked(true); - ui->windHeightFeet->setEnabled(false); - ui->windHeightMeters->setEnabled(false); - break; - - case 1: - ui->windHeightValue->setValue(10.00); - ui->windHeightValue->setEnabled(false); - ui->windHeightMeters->setChecked(true); - ui->windHeightFeet->setEnabled(false); - ui->windHeightMeters->setEnabled(false); - break; - - case 2: - ui->windHeightValue->setEnabled(true); - ui->windHeightFeet->setEnabled(true); - ui->windHeightMeters->setEnabled(true); - break; - } -} - -void MainWindow::clearTableButtonClicked() -{ - AppState& state = AppState::instance(); - AppState::instance().isDomainAverageWindInputTableValid = true; - - ui->domainAverageTable->clearContents(); - invalidDAWCells.clear(); - - refreshUI(); -} - -void MainWindow::domainAverageTableCellChanged(int row, int column) -{ - QTableWidget* table = ui->domainAverageTable; - QTableWidgetItem* item = table->item(row, column); - if (!item) return; - - QString value = item->text().trimmed(); - bool valid = false; - QString errorMessage; - - // Allow empty input - if (value.isEmpty()) - { - valid = true; - } else - { - switch (column) - { - case 0: { - double d = value.toDouble(&valid); - if (!valid || d <= 0) { - valid = false; - errorMessage = "Must be a positive number"; - } - break; - } - case 1: { - int i = value.toDouble(&valid); - if (!valid || i < 0 || i > 359.9) { - valid = false; - errorMessage = "Must be a number between 0 and 359"; - } - break; - } - case 2: { - QTime t = QTime::fromString(value, "hh:mm"); - valid = t.isValid(); - if (!valid) errorMessage = "Must be a valid 24h time (hh:mm)"; - break; - } - case 3: { - QDate d = QDate::fromString(value, "MM/dd/yyyy"); - valid = d.isValid(); - if (!valid) errorMessage = "Must be a valid date (MM/DD/YYYY)"; - break; - } - case 4: { - int i = value.toDouble(&valid); - if (!valid || i < 0 || i > 100) { - valid = false; - errorMessage = "Must be a number between 0 and 100"; - } - break; - } - case 5: { - value.toInt(&valid); - if (!valid) errorMessage = "Must be an integer"; - break; - } - default: - valid = true; - } - } - - QPair cell(row, column); - if (!valid) { - invalidDAWCells.insert(cell); - item->setBackground(Qt::red); - item->setToolTip(errorMessage); - } else { - invalidDAWCells.remove(cell); - item->setBackground(QBrush()); // Reset to default - item->setToolTip(""); - } - - AppState::instance().isDomainAverageWindInputTableValid = invalidDAWCells.isEmpty(); - refreshUI(); -} void MainWindow::pointInitializationCheckBoxClicked() { diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 083a09b90..fdcc1d6f4 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -33,6 +33,7 @@ #include "surfaceinput.h" #include "surfaceinputview.h" #include "menubarview.h" +#include "domainaverageview.h" #include "mapbridge.h" #include "serverbridge.h" #include "ui_mainwindow.h" @@ -96,26 +97,21 @@ private slots: void momentumSolverCheckBoxClicked(); void diurnalCheckBoxClicked(); void stabilityCheckBoxClicked(); - void windHeightComboBoxCurrentIndexChanged(int index); - void domainAverageCheckBoxClicked(); void treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column); void pointInitializationCheckBoxClicked(); void useWeatherModelInitClicked(); - void clearTableButtonClicked(); void solveButtonClicked(); void outputDirectoryButtonClicked(); void numberOfProcessorsSolveButtonClicked(); void timeZoneAllZonesCheckBoxClicked(); void timeZoneDetailsCheckBoxClicked(); void timeZoneComboBoxCurrentIndexChanged(int index); - void domainAverageTableCellChanged(int row, int column); void refreshUI(); private: void connectSignals(); void treeItemClicked(QTreeWidgetItem *item, int column); - QSet> invalidDAWCells; Ui::MainWindow *ui; QWebEngineView *webView; @@ -125,5 +121,6 @@ private slots: SurfaceInputView *surfaceInputView; MenuBarView *menuBarView; ServerBridge *serverBridge; + DomainAverageView *domainAverageView; }; #endif // MAINWINDOW_H diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 27b3f5511..90c3e499d 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -524,7 +524,7 @@ QFrame::Shadow::Sunken - 11 + 10 @@ -1633,23 +1633,7 @@ li.checked::marker { content: "\2612"; } - - - false - - - PointingHandCursor - - - 0.010000000000000 - - - 20.000000000000000 - - - - - + PointingHandCursor @@ -1671,32 +1655,45 @@ li.checked::marker { content: "\2612"; } - + false PointingHandCursor - - Feet + + 0.010000000000000 - - true + + 20.000000000000000 - + false - - PointingHandCursor + + + 0 + 0 + - - Meters + + false + + + Feet + + + + + Meters + + diff --git a/src/gui/serverbridge.cpp b/src/gui/serverbridge.cpp index d438b5708..6966b73de 100644 --- a/src/gui/serverbridge.cpp +++ b/src/gui/serverbridge.cpp @@ -1,3 +1,32 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Connects the Qt GUI with the ninjastorm server + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + #include "serverbridge.h" ServerBridge::ServerBridge() {} diff --git a/src/gui/serverbridge.h b/src/gui/serverbridge.h index fafa90f80..421ae1914 100644 --- a/src/gui/serverbridge.h +++ b/src/gui/serverbridge.h @@ -1,3 +1,33 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Connects the Qt GUI with the ninjastorm server + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + + #ifndef SERVERBRIDGE_H #define SERVERBRIDGE_H From 21d50fca476d4db3bd27620eab48d51efe8274e8 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 22 Jul 2025 14:03:21 -0600 Subject: [PATCH 122/435] Added timezone functions to surfaceinputview, adjusted signals between mainwindow and surfaceinput view --- src/gui/mainwindow.cpp | 43 +++--------------------------------- src/gui/mainwindow.h | 6 ----- src/gui/mainwindow.ui | 2 +- src/gui/surfaceinputview.cpp | 36 ++++++++++++++++++++++++++++++ src/gui/surfaceinputview.h | 4 ++++ 5 files changed, 44 insertions(+), 47 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 45b6c5146..3c0709f45 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -178,8 +178,8 @@ MainWindow::MainWindow(QWidget *parent) serverBridge = new ServerBridge(); serverBridge->checkMessages(); resize(1200, 700); - - timeZoneAllZonesCheckBoxClicked(); + surfaceInputView = new SurfaceInputView(ui, webView, surfaceInput, this); + surfaceInputView->timeZoneAllZonesCheckBoxClicked(); refreshUI(); ui->treeWidget->expandAll(); @@ -336,14 +336,10 @@ void MainWindow::connectSignals() connect(ui->pointInitializationCheckBox, &QCheckBox::clicked, this, &MainWindow::pointInitializationCheckBoxClicked); connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); - connect(ui->timeZoneAllZonesCheckBox, &QCheckBox::clicked, this, &MainWindow::timeZoneAllZonesCheckBoxClicked); - connect(ui->timeZoneDetailsCheckBox, &QCheckBox::clicked, this, &MainWindow::timeZoneDetailsCheckBoxClicked); - connect(ui->timeZoneComboBox, &QComboBox::currentIndexChanged, this, &MainWindow::timeZoneComboBoxCurrentIndexChanged); connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInputView, &SurfaceInputView::boundingBoxReceived); connect(surfaceInputView, &SurfaceInputView::requestRefresh, this, &MainWindow::refreshUI); connect(domainAverageView, &DomainAverageView::requestRefresh, this, &MainWindow::refreshUI); - connect(this, &MainWindow::openElevationFile, surfaceInputView, &SurfaceInputView::elevationInputFileOpenButtonClicked); } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { @@ -432,39 +428,6 @@ void MainWindow::momentumSolverCheckBoxClicked() refreshUI(); } -void MainWindow::timeZoneComboBoxCurrentIndexChanged(int index) -{ - QString currentTimeZone = ui->timeZoneComboBox->currentText(); - QString timeZoneDetails = surfaceInput->fetchTimeZoneDetails(currentTimeZone); - ui->timeZoneDetailsTextEdit->setText(timeZoneDetails); -} - -void MainWindow::timeZoneAllZonesCheckBoxClicked() -{ - AppState& state = AppState::instance(); - state.isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); - - bool isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); - QVector> displayData = surfaceInput->fetchAllTimeZones(isShowAllTimeZonesSelected); - - ui->timeZoneComboBox->clear(); - for (const QVector& zone : displayData) { - if (!zone.isEmpty()) { - ui->timeZoneComboBox->addItem(zone[0]); - } - } - - // Default to America/Denver - ui->timeZoneComboBox->setCurrentText("America/Denver"); -} - -void MainWindow::timeZoneDetailsCheckBoxClicked() -{ - AppState& state = AppState::instance(); - state.isDisplayTimeZoneDetailsSelected = ui->timeZoneDetailsCheckBox->isChecked(); - ui->timeZoneDetailsTextEdit->setVisible(state.isDisplayTimeZoneDetailsSelected); -} - void MainWindow::diurnalCheckBoxClicked() { AppState& state = AppState::instance(); @@ -598,7 +561,7 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) ui->weatherModelCheckBox->click(); } else if (item->text(0) == "Surface Input") { - emit openElevationFile(); + surfaceInputView->elevationInputFileOpenButtonClicked(); } } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index fdcc1d6f4..604e9ca59 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -89,9 +89,6 @@ class MainWindow : public QMainWindow MainWindow(QWidget *parent = nullptr); ~MainWindow(); -signals: - void openElevationFile(); - private slots: void massSolverCheckBoxClicked(); void momentumSolverCheckBoxClicked(); @@ -103,9 +100,6 @@ private slots: void solveButtonClicked(); void outputDirectoryButtonClicked(); void numberOfProcessorsSolveButtonClicked(); - void timeZoneAllZonesCheckBoxClicked(); - void timeZoneDetailsCheckBoxClicked(); - void timeZoneComboBoxCurrentIndexChanged(int index); void refreshUI(); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 90c3e499d..c77d5a510 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -524,7 +524,7 @@ QFrame::Shadow::Sunken - 10 + 5 diff --git a/src/gui/surfaceinputview.cpp b/src/gui/surfaceinputview.cpp index 301ca3cff..09abc9a42 100644 --- a/src/gui/surfaceinputview.cpp +++ b/src/gui/surfaceinputview.cpp @@ -55,6 +55,9 @@ SurfaceInputView::SurfaceInputView(Ui::MainWindow *ui, connect(ui->surfaceInputDownloadButton, &QPushButton::clicked, this, &SurfaceInputView::surfaceInputDownloadButtonClicked); connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &SurfaceInputView::elevationInputFileOpenButtonClicked); connect(ui->elevationInputTypePushButton, &QPushButton::clicked, this, &SurfaceInputView::elevationInputTypePushButtonClicked); + connect(ui->timeZoneAllZonesCheckBox, &QCheckBox::clicked, this, &SurfaceInputView::timeZoneAllZonesCheckBoxClicked); + connect(ui->timeZoneDetailsCheckBox, &QCheckBox::clicked, this, &SurfaceInputView::timeZoneDetailsCheckBoxClicked); + connect(ui->timeZoneComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInputView::timeZoneComboBoxCurrentIndexChanged); } @@ -313,3 +316,36 @@ void SurfaceInputView::fetchDEMFinished() ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); } +void SurfaceInputView::timeZoneComboBoxCurrentIndexChanged(int index) +{ + QString currentTimeZone = ui->timeZoneComboBox->currentText(); + QString timeZoneDetails = surfaceInput->fetchTimeZoneDetails(currentTimeZone); + ui->timeZoneDetailsTextEdit->setText(timeZoneDetails); +} + +void SurfaceInputView::timeZoneAllZonesCheckBoxClicked() +{ + AppState& state = AppState::instance(); + state.isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); + + bool isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); + QVector> displayData = surfaceInput->fetchAllTimeZones(isShowAllTimeZonesSelected); + + ui->timeZoneComboBox->clear(); + for (const QVector& zone : displayData) { + if (!zone.isEmpty()) { + ui->timeZoneComboBox->addItem(zone[0]); + } + } + + // Default to America/Denver + ui->timeZoneComboBox->setCurrentText("America/Denver"); +} + +void SurfaceInputView::timeZoneDetailsCheckBoxClicked() +{ + AppState& state = AppState::instance(); + state.isDisplayTimeZoneDetailsSelected = ui->timeZoneDetailsCheckBox->isChecked(); + ui->timeZoneDetailsTextEdit->setVisible(state.isDisplayTimeZoneDetailsSelected); +} + diff --git a/src/gui/surfaceinputview.h b/src/gui/surfaceinputview.h index 1a8f9d5e0..5ccb7b885 100644 --- a/src/gui/surfaceinputview.h +++ b/src/gui/surfaceinputview.h @@ -30,6 +30,7 @@ #ifndef SURFACEINPUTVIEW_H #define SURFACEINPUTVIEW_H +#include "appstate.h" #include "surfaceinput.h" #include #include @@ -62,6 +63,7 @@ class SurfaceInputView : public QObject { public slots: void boundingBoxReceived(double north, double south, double east, double west); void elevationInputFileOpenButtonClicked(); + void timeZoneAllZonesCheckBoxClicked(); private slots: void surfaceInputDownloadCancelButtonClicked(); @@ -74,6 +76,8 @@ private slots: void elevationInputFileLineEditTextChanged(const QString &arg1); void meshResolutionComboBoxCurrentIndexChanged(int index); void fetchDEMFinished(); + void timeZoneDetailsCheckBoxClicked(); + void timeZoneComboBoxCurrentIndexChanged(int index); private: void startFetchDEM(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); From 45290afd53d0be8c74ba6be280f4b3799ae0e23f Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 24 Jul 2025 11:53:50 -0600 Subject: [PATCH 123/435] Combining logic/API classes with GUI classes --- src/gui/CMakeLists.txt | 6 +- ...omainaverageview.cpp => domainaverage.cpp} | 20 +- .../{domainaverageview.h => domainaverage.h} | 19 +- src/gui/mainwindow.cpp | 12 +- src/gui/mainwindow.h | 19 +- src/gui/{menubarview.cpp => menubar.cpp} | 130 +++---- src/gui/{menubarview.h => menubar.h} | 10 +- src/gui/surfaceinput.cpp | 323 ----------------- src/gui/surfaceinputview.cpp | 337 +++++++++++++++++- src/gui/surfaceinputview.h | 19 +- 10 files changed, 453 insertions(+), 442 deletions(-) rename src/gui/{domainaverageview.cpp => domainaverage.cpp} (90%) rename src/gui/{domainaverageview.h => domainaverage.h} (90%) rename src/gui/{menubarview.cpp => menubar.cpp} (54%) rename src/gui/{menubarview.h => menubar.h} (94%) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 296944ad3..a89a1e7e9 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -29,14 +29,14 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) splashscreen.cpp surfaceinput.h surfaceinput.cpp - menubarview.h - menubarview.cpp + menubar.h + menubar.cpp mapbridge.h mapbridge.cpp surfaceinputview.h surfaceinputview.cpp serverbridge.h serverbridge.cpp - domainaverageview.h domainaverageview.cpp + domainaverage.h domainaverage.cpp ) # Define target properties for Android with Qt 6 as: diff --git a/src/gui/domainaverageview.cpp b/src/gui/domainaverage.cpp similarity index 90% rename from src/gui/domainaverageview.cpp rename to src/gui/domainaverage.cpp index bb9a214be..aef2b5f37 100644 --- a/src/gui/domainaverageview.cpp +++ b/src/gui/domainaverage.cpp @@ -27,20 +27,20 @@ * *****************************************************************************/ -#include "domainaverageview.h" +#include "domainaverage.h" #include "ui_mainwindow.h" -DomainAverageView::DomainAverageView(Ui::MainWindow* ui, QObject* parent) +DomainAverage::DomainAverage(Ui::MainWindow* ui, QObject* parent) : QObject(parent), ui(ui) { - connect(ui->inputWindHeightComboBox, &QComboBox::currentIndexChanged, this, &DomainAverageView::windHeightComboBoxCurrentIndexChanged); - connect(ui->clearTableButton, &QPushButton::clicked, this, &DomainAverageView::clearTableButtonClicked); - connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &DomainAverageView::domainAverageTableCellChanged); - connect(ui->domainAverageCheckBox, &QCheckBox::clicked, this, &DomainAverageView::domainAverageCheckBoxClicked); + connect(ui->inputWindHeightComboBox, &QComboBox::currentIndexChanged, this, &DomainAverage::windHeightComboBoxCurrentIndexChanged); + connect(ui->clearTableButton, &QPushButton::clicked, this, &DomainAverage::clearTableButtonClicked); + connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &DomainAverage::domainAverageTableCellChanged); + connect(ui->domainAverageCheckBox, &QCheckBox::clicked, this, &DomainAverage::domainAverageCheckBoxClicked); } -void DomainAverageView::domainAverageTableCellChanged(int row, int column) +void DomainAverage::domainAverageTableCellChanged(int row, int column) { QTableWidget* table = ui->domainAverageTable; QTableWidgetItem* item = table->item(row, column); @@ -120,7 +120,7 @@ void DomainAverageView::domainAverageTableCellChanged(int row, int column) } -void DomainAverageView::clearTableButtonClicked() +void DomainAverage::clearTableButtonClicked() { AppState& state = AppState::instance(); AppState::instance().isDomainAverageWindInputTableValid = true; @@ -131,7 +131,7 @@ void DomainAverageView::clearTableButtonClicked() emit requestRefresh(); } -void DomainAverageView::windHeightComboBoxCurrentIndexChanged(int index) +void DomainAverage::windHeightComboBoxCurrentIndexChanged(int index) { switch(index) { @@ -156,7 +156,7 @@ void DomainAverageView::windHeightComboBoxCurrentIndexChanged(int index) } } -void DomainAverageView::domainAverageCheckBoxClicked() +void DomainAverage::domainAverageCheckBoxClicked() { AppState& state = AppState::instance(); state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); diff --git a/src/gui/domainaverageview.h b/src/gui/domainaverage.h similarity index 90% rename from src/gui/domainaverageview.h rename to src/gui/domainaverage.h index d7b8fc643..0e65d7540 100644 --- a/src/gui/domainaverageview.h +++ b/src/gui/domainaverage.h @@ -28,8 +28,8 @@ *****************************************************************************/ -#ifndef DOMAINAVERAGEVIEW_H -#define DOMAINAVERAGEVIEW_H +#ifndef DOMAINAVERAGE_H +#define DOMAINAVERAGE_H #include "appstate.h" #include @@ -40,25 +40,26 @@ namespace Ui { class MainWindow; } -class DomainAverageView: public QObject { +class DomainAverage: public QObject { Q_OBJECT signals: void requestRefresh(); public: - explicit DomainAverageView(Ui::MainWindow* ui, QObject* parent = nullptr); - -private: - QSet> invalidDAWCells; - Ui::MainWindow *ui; + explicit DomainAverage(Ui::MainWindow* ui, QObject* parent = nullptr); +private slots: void domainAverageTableCellChanged(int row, int column); void clearTableButtonClicked(); void domainAverageCheckBoxClicked(); void windHeightComboBoxCurrentIndexChanged(int index); void windHeightUnitsComboBoxCurrentIndexChanged(int index); +private: + QSet> invalidDAWCells; + Ui::MainWindow *ui; + }; -#endif // DOMAINAVERAGEVIEW_H +#endif // DOMAINAVERAGE_H diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 3c0709f45..5fe1c8f29 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -238,10 +238,10 @@ MainWindow::MainWindow(QWidget *parent) webView->setUrl(url); surfaceInput = new SurfaceInput(); - menuBarView = new MenuBarView(ui, this); + menuBar = new MenuBar(ui, this); surfaceInputView = new SurfaceInputView(ui, webView, surfaceInput, this); - domainAverageView = new DomainAverageView(ui, this); + domainAverage = new DomainAverage(ui, this); QVBoxLayout *layout = new QVBoxLayout(); layout->setContentsMargins(0, 0, 0, 0); @@ -321,7 +321,7 @@ MainWindow::~MainWindow() delete channel; delete mapBridge; delete surfaceInput; - delete menuBarView; + delete menuBar; delete ui; } @@ -339,7 +339,7 @@ void MainWindow::connectSignals() connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInputView, &SurfaceInputView::boundingBoxReceived); connect(surfaceInputView, &SurfaceInputView::requestRefresh, this, &MainWindow::refreshUI); - connect(domainAverageView, &DomainAverageView::requestRefresh, this, &MainWindow::refreshUI); + connect(domainAverage, &DomainAverage::requestRefresh, this, &MainWindow::refreshUI); } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { @@ -410,7 +410,7 @@ void MainWindow::massSolverCheckBoxClicked() } state.isMassSolverToggled = ui->massSolverCheckBox->isChecked(); - ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + ui->meshResolutionSpinBox->setValue(surfaceInputView->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); refreshUI(); } @@ -424,7 +424,7 @@ void MainWindow::momentumSolverCheckBoxClicked() } state.isMomentumSolverToggled = ui->momentumSolverCheckBox->isChecked(); - ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + ui->meshResolutionSpinBox->setValue(surfaceInputView->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); refreshUI(); } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 604e9ca59..9e9ffea18 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -31,9 +31,8 @@ #define MAINWINDOW_H #include "surfaceinput.h" -#include "surfaceinputview.h" -#include "menubarview.h" -#include "domainaverageview.h" +#include "menubar.h" +#include "domainaverage.h" #include "mapbridge.h" #include "serverbridge.h" #include "ui_mainwindow.h" @@ -102,19 +101,19 @@ private slots: void numberOfProcessorsSolveButtonClicked(); void refreshUI(); - private: - void connectSignals(); - void treeItemClicked(QTreeWidgetItem *item, int column); - Ui::MainWindow *ui; QWebEngineView *webView; QWebChannel *channel; MapBridge *mapBridge; SurfaceInput *surfaceInput; - SurfaceInputView *surfaceInputView; - MenuBarView *menuBarView; + MenuBar *menuBar; ServerBridge *serverBridge; - DomainAverageView *domainAverageView; + DomainAverage *domainAverage; + + void connectSignals(); + void treeItemClicked(QTreeWidgetItem *item, int column); + + }; #endif // MAINWINDOW_H diff --git a/src/gui/menubarview.cpp b/src/gui/menubar.cpp similarity index 54% rename from src/gui/menubarview.cpp rename to src/gui/menubar.cpp index dc1fc6296..5bf83bceb 100644 --- a/src/gui/menubarview.cpp +++ b/src/gui/menubar.cpp @@ -27,151 +27,151 @@ * *****************************************************************************/ -#include "menubarview.h" +#include "menubar.h" #include "ui_mainwindow.h" -MenuBarView::MenuBarView(Ui::MainWindow* ui, QObject* parent) +MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) : QObject(parent), ui(ui) { // QMenu fileMenu "File" actions - connect(ui->newProjectAction, &QAction::triggered, this, &MenuBarView::newProject); - connect(ui->openProjectAction, &QAction::triggered, this, &MenuBarView::openProject); - connect(ui->exportSolutionAction, &QAction::triggered, this, &MenuBarView::exportSolution); - connect(ui->closeProjectAction, &QAction::triggered, this, &MenuBarView::closeProject); + connect(ui->newProjectAction, &QAction::triggered, this, &MenuBar::newProject); + connect(ui->openProjectAction, &QAction::triggered, this, &MenuBar::openProject); + connect(ui->exportSolutionAction, &QAction::triggered, this, &MenuBar::exportSolution); + connect(ui->closeProjectAction, &QAction::triggered, this, &MenuBar::closeProject); //connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QCoreApplication::quit); // exit the entire app // QMenu optionsMenu "Options" actions - connect(ui->enableConsoleOutputAction, &QAction::triggered, this, &MenuBarView::enableConsoleOutput); - connect(ui->writeConsoleOutputAction, &QAction::triggered, this, &MenuBarView::writeConsoleOutput); + connect(ui->enableConsoleOutputAction, &QAction::triggered, this, &MenuBar::enableConsoleOutput); + connect(ui->writeConsoleOutputAction, &QAction::triggered, this, &MenuBar::writeConsoleOutput); // QMenu toolsMenu "Tools" actions - connect(ui->resampleDataAction, &QAction::triggered, this, &MenuBarView::resampleData); - connect(ui->writeBlankStationFileAction, &QAction::triggered, this, &MenuBarView::writeBlankStationFile); - connect(ui->setConfigurationOptionAction, &QAction::triggered, this, &MenuBarView::setConfigurationOption); + connect(ui->resampleDataAction, &QAction::triggered, this, &MenuBar::resampleData); + connect(ui->writeBlankStationFileAction, &QAction::triggered, this, &MenuBar::writeBlankStationFile); + connect(ui->setConfigurationOptionAction, &QAction::triggered, this, &MenuBar::setConfigurationOption); // QMenu helpMenu "Help" actions // sub QMenu displayingShapeFilesMenu "Displaying Shapefiles" actions - connect(ui->displayArcGISProGuideAction, &QAction::triggered, this, &MenuBarView::displayArcGISProGuide); + connect(ui->displayArcGISProGuideAction, &QAction::triggered, this, &MenuBar::displayArcGISProGuide); // sub QMenu tutorialsMenu "Tutorials" actions - connect(ui->displayTutorial1Action, &QAction::triggered, this, &MenuBarView::displayTutorial1); - connect(ui->displayTutorial2Action, &QAction::triggered, this, &MenuBarView::displayTutorial2); - connect(ui->displayTutorial3Action, &QAction::triggered, this, &MenuBarView::displayTutorial3); - connect(ui->displayTutorial4Action, &QAction::triggered, this, &MenuBarView::displayTutorial4); + connect(ui->displayTutorial1Action, &QAction::triggered, this, &MenuBar::displayTutorial1); + connect(ui->displayTutorial2Action, &QAction::triggered, this, &MenuBar::displayTutorial2); + connect(ui->displayTutorial3Action, &QAction::triggered, this, &MenuBar::displayTutorial3); + connect(ui->displayTutorial4Action, &QAction::triggered, this, &MenuBar::displayTutorial4); // sub QMenu instructionsMenu "Instructions" actions - connect(ui->displayDemDownloadInstructionsAction, &QAction::triggered, this, &MenuBarView::displayDemDownloadInstructions); - connect(ui->displayFetchDemInstructionsAction, &QAction::triggered, this, &MenuBarView::displayFetchDemInstructions); - connect(ui->displayCommandLineInterfaceInstructionsAction, &QAction::triggered, this, &MenuBarView::displayCommandLineInterfaceInstructions); + connect(ui->displayDemDownloadInstructionsAction, &QAction::triggered, this, &MenuBar::displayDemDownloadInstructions); + connect(ui->displayFetchDemInstructionsAction, &QAction::triggered, this, &MenuBar::displayFetchDemInstructions); + connect(ui->displayCommandLineInterfaceInstructionsAction, &QAction::triggered, this, &MenuBar::displayCommandLineInterfaceInstructions); // remaining non-sub QMenu actions - connect(ui->aboutWindNinjaAction, &QAction::triggered, this, &MenuBarView::aboutWindNinja); - connect(ui->citeWindNinjaAction, &QAction::triggered, this, &MenuBarView::citeWindNinja); - connect(ui->supportEmailAction, &QAction::triggered, this, &MenuBarView::supportEmail); - connect(ui->submitBugReportAction, &QAction::triggered, this, &MenuBarView::submitBugReport); + connect(ui->aboutWindNinjaAction, &QAction::triggered, this, &MenuBar::aboutWindNinja); + connect(ui->citeWindNinjaAction, &QAction::triggered, this, &MenuBar::citeWindNinja); + connect(ui->supportEmailAction, &QAction::triggered, this, &MenuBar::supportEmail); + connect(ui->submitBugReportAction, &QAction::triggered, this, &MenuBar::submitBugReport); connect(ui->aboutQtAction, &QAction::triggered, this, &QApplication::aboutQt); } -void MenuBarView::newProject() +void MenuBar::newProject() { - qDebug() << "MenuBarView: newProject() triggered"; + qDebug() << "MenuBar: newProject() triggered"; } -void MenuBarView::openProject() +void MenuBar::openProject() { - qDebug() << "MenuBarView: openProject() triggered"; + qDebug() << "MenuBar: openProject() triggered"; } -void MenuBarView::exportSolution() +void MenuBar::exportSolution() { - qDebug() << "MenuBarView: exportSolution() triggered"; + qDebug() << "MenuBar: exportSolution() triggered"; } -void MenuBarView::closeProject() +void MenuBar::closeProject() { - qDebug() << "MenuBarView: closeProject() triggered"; + qDebug() << "MenuBar: closeProject() triggered"; } -void MenuBarView::enableConsoleOutput() +void MenuBar::enableConsoleOutput() { - qDebug() << "MenuBarView: enableConsoleOutput() triggered"; + qDebug() << "MenuBar: enableConsoleOutput() triggered"; } -void MenuBarView::writeConsoleOutput() +void MenuBar::writeConsoleOutput() { - qDebug() << "MenuBarView: writeConsoleOutput() triggered"; + qDebug() << "MenuBar: writeConsoleOutput() triggered"; } -void MenuBarView::resampleData() +void MenuBar::resampleData() { - qDebug() << "MenuBarView: resampleData() triggered"; + qDebug() << "MenuBar: resampleData() triggered"; } -void MenuBarView::writeBlankStationFile() +void MenuBar::writeBlankStationFile() { - qDebug() << "MenuBarView: writeBlankStationFile() triggered"; + qDebug() << "MenuBar: writeBlankStationFile() triggered"; } -void MenuBarView::setConfigurationOption() +void MenuBar::setConfigurationOption() { - qDebug() << "MenuBarView: setConfigurationOption() triggered"; + qDebug() << "MenuBar: setConfigurationOption() triggered"; } -void MenuBarView::displayArcGISProGuide() +void MenuBar::displayArcGISProGuide() { - qDebug() << "MenuBarView: displayArcGISProGuide() triggered"; + qDebug() << "MenuBar: displayArcGISProGuide() triggered"; } -void MenuBarView::displayTutorial1() +void MenuBar::displayTutorial1() { - qDebug() << "MenuBarView: displayTutorial1() triggered"; + qDebug() << "MenuBar: displayTutorial1() triggered"; } -void MenuBarView::displayTutorial2() +void MenuBar::displayTutorial2() { - qDebug() << "MenuBarView: displayTutorial2() triggered"; + qDebug() << "MenuBar: displayTutorial2() triggered"; } -void MenuBarView::displayTutorial3() +void MenuBar::displayTutorial3() { - qDebug() << "MenuBarView: displayTutorial3() triggered"; + qDebug() << "MenuBar: displayTutorial3() triggered"; } -void MenuBarView::displayTutorial4() +void MenuBar::displayTutorial4() { - qDebug() << "MenuBarView: displayTutorial4() triggered"; + qDebug() << "MenuBar: displayTutorial4() triggered"; } -void MenuBarView::displayDemDownloadInstructions() +void MenuBar::displayDemDownloadInstructions() { - qDebug() << "MenuBarView: displayDemDownloadInstructions() triggered"; + qDebug() << "MenuBar: displayDemDownloadInstructions() triggered"; } -void MenuBarView::displayFetchDemInstructions() +void MenuBar::displayFetchDemInstructions() { - qDebug() << "MenuBarView: displayFetchDemInstructions() triggered"; + qDebug() << "MenuBar: displayFetchDemInstructions() triggered"; } -void MenuBarView::displayCommandLineInterfaceInstructions() +void MenuBar::displayCommandLineInterfaceInstructions() { - qDebug() << "MenuBarView: displayCommandLineInterfaceInstructions() triggered"; + qDebug() << "MenuBar: displayCommandLineInterfaceInstructions() triggered"; } -void MenuBarView::aboutWindNinja() +void MenuBar::aboutWindNinja() { - qDebug() << "MenuBarView: aboutWindNinja() triggered"; + qDebug() << "MenuBar: aboutWindNinja() triggered"; } -void MenuBarView::citeWindNinja() +void MenuBar::citeWindNinja() { - qDebug() << "MenuBarView: citeWindNinja() triggered"; + qDebug() << "MenuBar: citeWindNinja() triggered"; } -void MenuBarView::supportEmail() +void MenuBar::supportEmail() { - qDebug() << "MenuBarView: supportEmail() triggered"; + qDebug() << "MenuBar: supportEmail() triggered"; } -void MenuBarView::submitBugReport() +void MenuBar::submitBugReport() { - qDebug() << "MenuBarView: submitBugReport() triggered"; + qDebug() << "MenuBar: submitBugReport() triggered"; } diff --git a/src/gui/menubarview.h b/src/gui/menubar.h similarity index 94% rename from src/gui/menubarview.h rename to src/gui/menubar.h index b896995fd..0d7970404 100644 --- a/src/gui/menubarview.h +++ b/src/gui/menubar.h @@ -27,8 +27,8 @@ * *****************************************************************************/ -#ifndef MENUBARVIEW_H -#define MENUBARVIEW_H +#ifndef MENUBAR_H +#define MENUBAR_H #include @@ -36,11 +36,11 @@ namespace Ui { class MainWindow; } -class MenuBarView : public QObject +class MenuBar : public QObject { Q_OBJECT public: - explicit MenuBarView(Ui::MainWindow* ui, QObject* parent = nullptr); + explicit MenuBar(Ui::MainWindow* ui, QObject* parent = nullptr); private slots: // functions for Menu actions @@ -78,4 +78,4 @@ private slots: Ui::MainWindow* ui; }; -#endif // MENUBARVIEW_H +#endif // MENUBAR_H diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 301fad588..84244bb46 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -33,327 +33,4 @@ SurfaceInput::SurfaceInput() { } -QString SurfaceInput::fetchTimeZoneDetails(QString currentTimeZone) { - QVector matchedRow; - QFile file(":/date_time_zonespec.csv"); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - qWarning() << "Failed to open date_time_zonespec.csv"; - qDebug() << "No data found"; - } - - QTextStream in(&file); - bool firstLine = true; - - while (!in.atEnd()) { - QString line = in.readLine(); - - if (firstLine) { - firstLine = false; - continue; // skip header - } - - QStringList tokens = line.split(",", Qt::KeepEmptyParts); - QVector row; - - for (const QString& token : tokens) - row.append(token.trimmed().remove("\"")); - - QString fullZone = row.mid(0, 1).join("/"); - - if (fullZone == currentTimeZone) { - matchedRow = row; - break; - } - } - - file.close(); - - if (matchedRow.isEmpty()) { - qDebug() << "No matching time zone found."; - } - - QString standardName = matchedRow.value(2); - QString daylightName = matchedRow.value(4); - QString stdOffsetStr = matchedRow.value(5); - QString dstAdjustStr = matchedRow.value(6); - - auto timeToSeconds = [](const QString& t) -> int { - QString s = t.trimmed(); - bool negative = s.startsWith('-'); - s = s.remove(QChar('+')).remove(QChar('-')); - - QStringList parts = s.split(':'); - if (parts.size() != 3) return 0; - - int h = parts[0].toInt(); - int m = parts[1].toInt(); - int sec = parts[2].toInt(); - - int total = h * 3600 + m * 60 + sec; - return negative ? -total : total; - }; - - // Convert total seconds back to HH:MM:SS with sign - auto secondsToTime = [](int totalSec) -> QString { - QChar sign = totalSec < 0 ? '-' : '+'; - totalSec = std::abs(totalSec); - - int h = totalSec / 3600; - int m = (totalSec % 3600) / 60; - int s = totalSec % 60; - - return QString("%1%2:%3:%4") - .arg(sign) - .arg(h, 2, 10, QChar('0')) - .arg(m, 2, 10, QChar('0')) - .arg(s, 2, 10, QChar('0')); - }; - - int stdSecs = timeToSeconds(stdOffsetStr); - int dstSecs = timeToSeconds(dstAdjustStr); - QString combinedOffsetStr = secondsToTime(stdSecs + dstSecs); - - return QString("Standard Name:\t\t%1\n" - "Daylight Name:\t\t%2\n" - "Standard Offset from UTC:\t%3\n" - "Daylight Offset from UTC:\t%4") - .arg(standardName) - .arg(daylightName) - .arg(stdOffsetStr) - .arg(combinedOffsetStr); - -} - -QVector> SurfaceInput::fetchAllTimeZones(bool isShowAllTimeZonesSelected) -{ - QVector> fullData; - QVector> americaData; - - QFile file(":/date_time_zonespec.csv"); - - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - qDebug() << "Failed to open CSV file."; - return fullData; - } - - QTextStream in(&file); - bool firstLine = true; - - while (!in.atEnd()) { - QString line = in.readLine(); - - if (firstLine) { - firstLine = false; - continue; - } - - QStringList tokens = line.split(",", Qt::KeepEmptyParts); - QVector row; - for (const QString& token : tokens) - row.append(token.trimmed().remove('"')); - - if (!row.isEmpty()) - fullData.append(row); - - if (!row.isEmpty()) { - QStringList parts = row[0].split("/", Qt::KeepEmptyParts); - if (!parts.isEmpty() && parts[0] == "America" || row[0] == "Pacific/Honolulu") { - americaData.append(row); - } - } - } - - file.close(); - - if (isShowAllTimeZonesSelected) { - return fullData; - } else { - return americaData; - } -} - -int SurfaceInput::fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType) -{ - NinjaArmyH* ninjaArmy = NULL; - char ** papszOptions = NULL; - NinjaErr err = 0; - - err = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); - if (err != NINJA_SUCCESS){ - qDebug() << "NinjaFetchDEMBBox: err =" << err; - return err; - } - else - { - return NINJA_SUCCESS; - } -} - -void SurfaceInput::computeDEMFile(QString filePath) -{ - double adfGeoTransform[6]; - GDALDataset *poInputDS; - poInputDS = (GDALDataset*)GDALOpen(filePath.toStdString().c_str(), GA_ReadOnly); - - GDALDriverName = poInputDS->GetDriver()->GetDescription(); - GDALXSize = poInputDS->GetRasterXSize(); - GDALYSize = poInputDS->GetRasterYSize(); - GDALGetCorners(poInputDS, DEMCorners); - - if (poInputDS->GetGeoTransform(adfGeoTransform) == CE_None) - { - double c1, c2; - c1 = adfGeoTransform[1]; - c2 = adfGeoTransform[5]; - if (abs(c1) == abs(c2)) { - GDALCellSize = abs(c1); - } else { - GDALClose((GDALDatasetH)poInputDS); - } - } - - GDALRasterBand* band = poInputDS->GetRasterBand(1); - int gotMin = 0, gotMax = 0; - double minVal = band->GetMinimum(&gotMin); - double maxVal = band->GetMaximum(&gotMax); - if (!gotMin || !gotMax) { - band->ComputeStatistics(false, &minVal, &maxVal, nullptr, nullptr, nullptr, nullptr); - } - - GDALMinValue = minVal; - GDALMaxValue = maxVal; - - GDALClose((GDALDatasetH)poInputDS); - -} - -double SurfaceInput::computeMeshResolution(int index, bool isMomemtumChecked) -{ - int coarse = 4000; - int medium = 10000; - int fine = 20000; - double meshResolution = 200.0; - - if( GDALCellSize == 0.0 || GDALXSize == 0 || GDALYSize == 0 ) - { - return meshResolution; - } - - #ifdef NINJAFOAM - if (isMomemtumChecked) { - coarse = 25000; - medium = 50000; - fine = 100000; - } - #endif //NINJAFOAM - - int targetNumHorizCells = fine; - switch (index) { - case 0: - targetNumHorizCells = coarse; - break; - case 1: - targetNumHorizCells = medium; - break; - case 2: - targetNumHorizCells = fine; - break; - case 3: - return 200; - default: - return 200; - } - - double XLength = GDALXSize * GDALCellSize; - double YLength = GDALYSize * GDALCellSize; - double nXcells = 2 * std::sqrt((double)targetNumHorizCells) * (XLength / (XLength + YLength)); - double nYcells = 2 * std::sqrt((double)targetNumHorizCells) * (YLength / (XLength + YLength)); - - double XCellSize = XLength / nXcells; - double YCellSize = YLength / nYcells; - - meshResolution = (XCellSize + YCellSize) / 2; - - #ifdef NINJAFOAM - if (isMomemtumChecked) { - XLength = GDALXSize * GDALCellSize; - YLength = GDALYSize * GDALCellSize; - - double dz = GDALMaxValue - GDALMinValue; - double ZLength = std::max((0.1 * std::max(XLength, YLength)), (dz + 0.1 * dz)); - double zmin, zmax; - zmin = GDALMaxValue + 0.05 * ZLength; //zmin (above highest point in DEM for MDM) - zmax = GDALMaxValue + ZLength; //zmax - - double volume; - double cellCount; - double cellVolume; - - volume = XLength * YLength * (zmax-zmin); //volume of blockMesh - cellCount = targetNumHorizCells * 0.5; // cell count in volume 1 - cellVolume = volume/cellCount; // volume of 1 cell in blockMesh - double side = std::pow(cellVolume, (1.0/3.0)); // length of side of cell in blockMesh - - //determine number of rounds of refinement - int nCellsToAdd = 0; - int refinedCellCount = 0; - int nCellsInLowestLayer = int(XLength/side) * int(YLength/side); - int nRoundsRefinement = 0; - while(refinedCellCount < (0.5 * targetNumHorizCells)){ - nCellsToAdd = nCellsInLowestLayer * 8; //each cell is divided into 8 cells - refinedCellCount += nCellsToAdd - nCellsInLowestLayer; //subtract the parent cells - nCellsInLowestLayer = nCellsToAdd/2; //only half of the added cells are in the lowest layer - nRoundsRefinement += 1; - } - - meshResolution = side/(nRoundsRefinement*2.0); - } - #endif //NINJAFOAM - - return meshResolution; - -} - -void SurfaceInput::computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]) -{ - const double EARTH_RADIUS_MILES = 3958.7613; - const double DEG_TO_RAD = M_PI / 180.0; - - double deltaLat = radius / (2.0 * M_PI * EARTH_RADIUS_MILES / 360.0); - double latRadius = EARTH_RADIUS_MILES * std::cos(centerLat * DEG_TO_RAD); - double deltaLon = radius / (2.0 * M_PI * latRadius / 360.0); - - boundingBox[0] = centerLat + deltaLat; // North - boundingBox[1] = centerLon + deltaLon; // East - boundingBox[2] = centerLat - deltaLat; // South - boundingBox[3] = centerLon - deltaLon; // West -} - -void SurfaceInput::computePointRadius(double north, double east, double south, double west, double pointRadius[3]) -{ - const double EARTH_RADIUS_MILES = 3958.7613; - const double DEG_TO_RAD = M_PI / 180.0; - - double centerLat = (north + south) / 2.0; - double centerLon = (east + west) / 2.0; - - double deltaLat = std::abs(north - south) / 2.0; - double deltaLon = std::abs(east - west) / 2.0; - - double latMiles = (2.0 * M_PI * EARTH_RADIUS_MILES / 360.0) * deltaLat; - - double latRadius = EARTH_RADIUS_MILES * std::cos(centerLat * DEG_TO_RAD); - double lonMiles = (2.0 * M_PI * latRadius / 360.0) * deltaLon; - - double radius = (latMiles + lonMiles) / 2.0; - - pointRadius[0] = centerLat; - pointRadius[1] = centerLon; - pointRadius[2] = radius; -} - -double* SurfaceInput::getDEMCorners() -{ - return DEMCorners; -} diff --git a/src/gui/surfaceinputview.cpp b/src/gui/surfaceinputview.cpp index 09abc9a42..8f9c50144 100644 --- a/src/gui/surfaceinputview.cpp +++ b/src/gui/surfaceinputview.cpp @@ -105,7 +105,7 @@ void SurfaceInputView::boundingBoxReceived(double north, double south, double ea ui->boundingBoxWestLineEdit->blockSignals(false); double pointRadius[3]; - surfaceInput->computePointRadius(north, east, south, west, pointRadius); + computePointRadius(north, east, south, west, pointRadius); ui->pointRadiusLatLineEdit->setText(QString::number(pointRadius[0])); ui->pointRadiusLonLineEdit->setText(QString::number(pointRadius[1])); ui->pointRadiusRadiusLineEdit->setText(QString::number(pointRadius[2])); @@ -173,7 +173,6 @@ void SurfaceInputView::surfaceInputDownloadCancelButtonClicked() webView->page()->runJavaScript("stopRectangleDrawing();"); if(!currentDEMFilePath.isEmpty()) { - double *DEMCorners = surfaceInput->getDEMCorners(); QStringList cornerStrs; for (int i = 0; i < 8; ++i) cornerStrs << QString::number(DEMCorners[i], 'f', 8); @@ -237,17 +236,16 @@ void SurfaceInputView::meshResolutionComboBoxCurrentIndexChanged(int index) } else { ui->meshResolutionSpinBox->setEnabled(false); } - ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + ui->meshResolutionSpinBox->setValue(computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); } void SurfaceInputView::elevationInputFileLineEditTextChanged(const QString &arg1) { - surfaceInput->computeDEMFile(currentDEMFilePath); - surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked()); + computeDEMFile(currentDEMFilePath); + computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked()); - ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + ui->meshResolutionSpinBox->setValue(computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); - double *DEMCorners = surfaceInput->getDEMCorners(); QStringList cornerStrs; for (int i = 0; i < 8; ++i) cornerStrs << QString::number(DEMCorners[i], 'f', 8); @@ -319,7 +317,7 @@ void SurfaceInputView::fetchDEMFinished() void SurfaceInputView::timeZoneComboBoxCurrentIndexChanged(int index) { QString currentTimeZone = ui->timeZoneComboBox->currentText(); - QString timeZoneDetails = surfaceInput->fetchTimeZoneDetails(currentTimeZone); + QString timeZoneDetails = fetchTimeZoneDetails(currentTimeZone); ui->timeZoneDetailsTextEdit->setText(timeZoneDetails); } @@ -329,7 +327,7 @@ void SurfaceInputView::timeZoneAllZonesCheckBoxClicked() state.isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); bool isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); - QVector> displayData = surfaceInput->fetchAllTimeZones(isShowAllTimeZonesSelected); + QVector> displayData = fetchAllTimeZones(isShowAllTimeZonesSelected); ui->timeZoneComboBox->clear(); for (const QVector& zone : displayData) { @@ -349,3 +347,324 @@ void SurfaceInputView::timeZoneDetailsCheckBoxClicked() ui->timeZoneDetailsTextEdit->setVisible(state.isDisplayTimeZoneDetailsSelected); } +QString SurfaceInputView::fetchTimeZoneDetails(QString currentTimeZone) { + QVector matchedRow; + QFile file(":/date_time_zonespec.csv"); + + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qWarning() << "Failed to open date_time_zonespec.csv"; + qDebug() << "No data found"; + } + + QTextStream in(&file); + bool firstLine = true; + + while (!in.atEnd()) { + QString line = in.readLine(); + + if (firstLine) { + firstLine = false; + continue; // skip header + } + + QStringList tokens = line.split(",", Qt::KeepEmptyParts); + QVector row; + + for (const QString& token : tokens) + row.append(token.trimmed().remove("\"")); + + QString fullZone = row.mid(0, 1).join("/"); + + if (fullZone == currentTimeZone) { + matchedRow = row; + break; + } + } + + file.close(); + + if (matchedRow.isEmpty()) { + qDebug() << "No matching time zone found."; + } + + QString standardName = matchedRow.value(2); + QString daylightName = matchedRow.value(4); + QString stdOffsetStr = matchedRow.value(5); + QString dstAdjustStr = matchedRow.value(6); + + auto timeToSeconds = [](const QString& t) -> int { + QString s = t.trimmed(); + bool negative = s.startsWith('-'); + s = s.remove(QChar('+')).remove(QChar('-')); + + QStringList parts = s.split(':'); + if (parts.size() != 3) return 0; + + int h = parts[0].toInt(); + int m = parts[1].toInt(); + int sec = parts[2].toInt(); + + int total = h * 3600 + m * 60 + sec; + return negative ? -total : total; + }; + + // Convert total seconds back to HH:MM:SS with sign + auto secondsToTime = [](int totalSec) -> QString { + QChar sign = totalSec < 0 ? '-' : '+'; + totalSec = std::abs(totalSec); + + int h = totalSec / 3600; + int m = (totalSec % 3600) / 60; + int s = totalSec % 60; + + return QString("%1%2:%3:%4") + .arg(sign) + .arg(h, 2, 10, QChar('0')) + .arg(m, 2, 10, QChar('0')) + .arg(s, 2, 10, QChar('0')); + }; + + int stdSecs = timeToSeconds(stdOffsetStr); + int dstSecs = timeToSeconds(dstAdjustStr); + QString combinedOffsetStr = secondsToTime(stdSecs + dstSecs); + + return QString("Standard Name:\t\t%1\n" + "Daylight Name:\t\t%2\n" + "Standard Offset from UTC:\t%3\n" + "Daylight Offset from UTC:\t%4") + .arg(standardName) + .arg(daylightName) + .arg(stdOffsetStr) + .arg(combinedOffsetStr); + +} + +QVector> SurfaceInputView::fetchAllTimeZones(bool isShowAllTimeZonesSelected) +{ + QVector> fullData; + QVector> americaData; + + QFile file(":/date_time_zonespec.csv"); + + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qDebug() << "Failed to open CSV file."; + return fullData; + } + + QTextStream in(&file); + bool firstLine = true; + + while (!in.atEnd()) { + QString line = in.readLine(); + + if (firstLine) { + firstLine = false; + continue; + } + + QStringList tokens = line.split(",", Qt::KeepEmptyParts); + QVector row; + for (const QString& token : tokens) + row.append(token.trimmed().remove('"')); + + if (!row.isEmpty()) + fullData.append(row); + + if (!row.isEmpty()) { + QStringList parts = row[0].split("/", Qt::KeepEmptyParts); + if (!parts.isEmpty() && parts[0] == "America" || row[0] == "Pacific/Honolulu") { + americaData.append(row); + } + } + } + + file.close(); + + if (isShowAllTimeZonesSelected) { + return fullData; + } else { + return americaData; + } +} + +int SurfaceInputView::fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType) +{ + NinjaArmyH* ninjaArmy = NULL; + char ** papszOptions = NULL; + NinjaErr err = 0; + + err = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); + if (err != NINJA_SUCCESS){ + qDebug() << "NinjaFetchDEMBBox: err =" << err; + return err; + } + else + { + return NINJA_SUCCESS; + } +} + +void SurfaceInputView::computeDEMFile(QString filePath) +{ + double adfGeoTransform[6]; + GDALDataset *poInputDS; + poInputDS = (GDALDataset*)GDALOpen(filePath.toStdString().c_str(), GA_ReadOnly); + + GDALDriverName = poInputDS->GetDriver()->GetDescription(); + GDALXSize = poInputDS->GetRasterXSize(); + GDALYSize = poInputDS->GetRasterYSize(); + GDALGetCorners(poInputDS, DEMCorners); + + if (poInputDS->GetGeoTransform(adfGeoTransform) == CE_None) + { + double c1, c2; + c1 = adfGeoTransform[1]; + c2 = adfGeoTransform[5]; + if (abs(c1) == abs(c2)) { + GDALCellSize = abs(c1); + } else { + GDALClose((GDALDatasetH)poInputDS); + } + } + + GDALRasterBand* band = poInputDS->GetRasterBand(1); + int gotMin = 0, gotMax = 0; + double minVal = band->GetMinimum(&gotMin); + double maxVal = band->GetMaximum(&gotMax); + if (!gotMin || !gotMax) { + band->ComputeStatistics(false, &minVal, &maxVal, nullptr, nullptr, nullptr, nullptr); + } + + GDALMinValue = minVal; + GDALMaxValue = maxVal; + + GDALClose((GDALDatasetH)poInputDS); + +} + +double SurfaceInputView::computeMeshResolution(int index, bool isMomemtumChecked) +{ + int coarse = 4000; + int medium = 10000; + int fine = 20000; + double meshResolution = 200.0; + + if( GDALCellSize == 0.0 || GDALXSize == 0 || GDALYSize == 0 ) + { + return meshResolution; + } + +#ifdef NINJAFOAM + if (isMomemtumChecked) { + coarse = 25000; + medium = 50000; + fine = 100000; + } +#endif //NINJAFOAM + + int targetNumHorizCells = fine; + switch (index) { + case 0: + targetNumHorizCells = coarse; + break; + case 1: + targetNumHorizCells = medium; + break; + case 2: + targetNumHorizCells = fine; + break; + case 3: + return 200; + default: + return 200; + } + + double XLength = GDALXSize * GDALCellSize; + double YLength = GDALYSize * GDALCellSize; + double nXcells = 2 * std::sqrt((double)targetNumHorizCells) * (XLength / (XLength + YLength)); + double nYcells = 2 * std::sqrt((double)targetNumHorizCells) * (YLength / (XLength + YLength)); + + double XCellSize = XLength / nXcells; + double YCellSize = YLength / nYcells; + + meshResolution = (XCellSize + YCellSize) / 2; + +#ifdef NINJAFOAM + if (isMomemtumChecked) { + XLength = GDALXSize * GDALCellSize; + YLength = GDALYSize * GDALCellSize; + + double dz = GDALMaxValue - GDALMinValue; + double ZLength = std::max((0.1 * std::max(XLength, YLength)), (dz + 0.1 * dz)); + double zmin, zmax; + zmin = GDALMaxValue + 0.05 * ZLength; //zmin (above highest point in DEM for MDM) + zmax = GDALMaxValue + ZLength; //zmax + + double volume; + double cellCount; + double cellVolume; + + volume = XLength * YLength * (zmax-zmin); //volume of blockMesh + cellCount = targetNumHorizCells * 0.5; // cell count in volume 1 + cellVolume = volume/cellCount; // volume of 1 cell in blockMesh + double side = std::pow(cellVolume, (1.0/3.0)); // length of side of cell in blockMesh + + //determine number of rounds of refinement + int nCellsToAdd = 0; + int refinedCellCount = 0; + int nCellsInLowestLayer = int(XLength/side) * int(YLength/side); + int nRoundsRefinement = 0; + while(refinedCellCount < (0.5 * targetNumHorizCells)){ + nCellsToAdd = nCellsInLowestLayer * 8; //each cell is divided into 8 cells + refinedCellCount += nCellsToAdd - nCellsInLowestLayer; //subtract the parent cells + nCellsInLowestLayer = nCellsToAdd/2; //only half of the added cells are in the lowest layer + nRoundsRefinement += 1; + } + + meshResolution = side/(nRoundsRefinement*2.0); + } +#endif //NINJAFOAM + + return meshResolution; + +} + +void SurfaceInputView::computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]) +{ + const double EARTH_RADIUS_MILES = 3958.7613; + const double DEG_TO_RAD = M_PI / 180.0; + + double deltaLat = radius / (2.0 * M_PI * EARTH_RADIUS_MILES / 360.0); + double latRadius = EARTH_RADIUS_MILES * std::cos(centerLat * DEG_TO_RAD); + double deltaLon = radius / (2.0 * M_PI * latRadius / 360.0); + + boundingBox[0] = centerLat + deltaLat; // North + boundingBox[1] = centerLon + deltaLon; // East + boundingBox[2] = centerLat - deltaLat; // South + boundingBox[3] = centerLon - deltaLon; // West +} + +void SurfaceInputView::computePointRadius(double north, double east, double south, double west, double pointRadius[3]) +{ + const double EARTH_RADIUS_MILES = 3958.7613; + const double DEG_TO_RAD = M_PI / 180.0; + + double centerLat = (north + south) / 2.0; + double centerLon = (east + west) / 2.0; + + double deltaLat = std::abs(north - south) / 2.0; + double deltaLon = std::abs(east - west) / 2.0; + + double latMiles = (2.0 * M_PI * EARTH_RADIUS_MILES / 360.0) * deltaLat; + + double latRadius = EARTH_RADIUS_MILES * std::cos(centerLat * DEG_TO_RAD); + double lonMiles = (2.0 * M_PI * latRadius / 360.0) * deltaLon; + + double radius = (latMiles + lonMiles) / 2.0; + + pointRadius[0] = centerLat; + pointRadius[1] = centerLon; + pointRadius[2] = radius; +} + + diff --git a/src/gui/surfaceinputview.h b/src/gui/surfaceinputview.h index 5ccb7b885..06af28558 100644 --- a/src/gui/surfaceinputview.h +++ b/src/gui/surfaceinputview.h @@ -49,13 +49,15 @@ namespace Ui { class MainWindow; } -class SurfaceInputView : public QObject { +class SurfaceInputView : public QObject +{ Q_OBJECT public: explicit SurfaceInputView(Ui::MainWindow* ui, QWebEngineView* webView, SurfaceInput* surfaceInput, QObject* parent = nullptr); + double computeMeshResolution(int index, bool isMomemtumChecked); signals: void requestRefresh(); @@ -80,7 +82,6 @@ private slots: void timeZoneComboBoxCurrentIndexChanged(int index); private: - void startFetchDEM(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); Ui::MainWindow *ui; QWebEngineView *webView; SurfaceInput *surfaceInput; @@ -88,6 +89,20 @@ private slots: QProgressDialog *progress; QFutureWatcher *futureWatcher; QString currentDEMFilePath; + + QString GDALDriverName; + int GDALXSize, GDALYSize; + double GDALCellSize, GDALMaxValue, GDALMinValue; + double DEMCorners[8]; + + QString fetchTimeZoneDetails(QString currentTimeZone); + QVector> fetchAllTimeZones(bool isShowAllTimeZonesSelected); + int fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); + void computeDEMFile(QString filePath); + void computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]); + void computePointRadius(double north, double east, double south, double west, double pointRadius[3]); + void startFetchDEM(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); + }; #endif // SURFACEINPUTVIEW_H From 8ed3f43a96b3241ada2ecc2a1905897a824791aa Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 24 Jul 2025 12:53:07 -0600 Subject: [PATCH 124/435] Finished renaming and merging, should be clearer to class function and less complex --- src/gui/CMakeLists.txt | 6 +- ...mainaverage.cpp => domainaverageinput.cpp} | 20 +- .../{domainaverage.h => domainaverageinput.h} | 11 +- src/gui/mainwindow.cpp | 20 +- src/gui/mainwindow.h | 4 +- src/gui/surfaceinput.cpp | 636 ++++++++++++++++- src/gui/surfaceinput.h | 74 +- src/gui/surfaceinputview.cpp | 670 ------------------ src/gui/surfaceinputview.h | 108 --- 9 files changed, 724 insertions(+), 825 deletions(-) rename src/gui/{domainaverage.cpp => domainaverageinput.cpp} (89%) rename src/gui/{domainaverage.h => domainaverageinput.h} (88%) delete mode 100644 src/gui/surfaceinputview.cpp delete mode 100644 src/gui/surfaceinputview.h diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index a89a1e7e9..5afc9738d 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -33,10 +33,10 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) menubar.cpp mapbridge.h mapbridge.cpp - surfaceinputview.h - surfaceinputview.cpp + surfaceinput.h + surfaceinput.cpp serverbridge.h serverbridge.cpp - domainaverage.h domainaverage.cpp + domainaverageinput.h domainaverageinput.cpp ) # Define target properties for Android with Qt 6 as: diff --git a/src/gui/domainaverage.cpp b/src/gui/domainaverageinput.cpp similarity index 89% rename from src/gui/domainaverage.cpp rename to src/gui/domainaverageinput.cpp index aef2b5f37..6a154cb01 100644 --- a/src/gui/domainaverage.cpp +++ b/src/gui/domainaverageinput.cpp @@ -27,20 +27,20 @@ * *****************************************************************************/ -#include "domainaverage.h" +#include "domainaverageinput.h" #include "ui_mainwindow.h" -DomainAverage::DomainAverage(Ui::MainWindow* ui, QObject* parent) +DomainAverageInput::DomainAverageInput(Ui::MainWindow* ui, QObject* parent) : QObject(parent), ui(ui) { - connect(ui->inputWindHeightComboBox, &QComboBox::currentIndexChanged, this, &DomainAverage::windHeightComboBoxCurrentIndexChanged); - connect(ui->clearTableButton, &QPushButton::clicked, this, &DomainAverage::clearTableButtonClicked); - connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &DomainAverage::domainAverageTableCellChanged); - connect(ui->domainAverageCheckBox, &QCheckBox::clicked, this, &DomainAverage::domainAverageCheckBoxClicked); + connect(ui->inputWindHeightComboBox, &QComboBox::currentIndexChanged, this, &DomainAverageInput::windHeightComboBoxCurrentIndexChanged); + connect(ui->clearTableButton, &QPushButton::clicked, this, &DomainAverageInput::clearTableButtonClicked); + connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &DomainAverageInput::domainAverageTableCellChanged); + connect(ui->domainAverageCheckBox, &QCheckBox::clicked, this, &DomainAverageInput::domainAverageCheckBoxClicked); } -void DomainAverage::domainAverageTableCellChanged(int row, int column) +void DomainAverageInput::domainAverageTableCellChanged(int row, int column) { QTableWidget* table = ui->domainAverageTable; QTableWidgetItem* item = table->item(row, column); @@ -120,7 +120,7 @@ void DomainAverage::domainAverageTableCellChanged(int row, int column) } -void DomainAverage::clearTableButtonClicked() +void DomainAverageInput::clearTableButtonClicked() { AppState& state = AppState::instance(); AppState::instance().isDomainAverageWindInputTableValid = true; @@ -131,7 +131,7 @@ void DomainAverage::clearTableButtonClicked() emit requestRefresh(); } -void DomainAverage::windHeightComboBoxCurrentIndexChanged(int index) +void DomainAverageInput::windHeightComboBoxCurrentIndexChanged(int index) { switch(index) { @@ -156,7 +156,7 @@ void DomainAverage::windHeightComboBoxCurrentIndexChanged(int index) } } -void DomainAverage::domainAverageCheckBoxClicked() +void DomainAverageInput::domainAverageCheckBoxClicked() { AppState& state = AppState::instance(); state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); diff --git a/src/gui/domainaverage.h b/src/gui/domainaverageinput.h similarity index 88% rename from src/gui/domainaverage.h rename to src/gui/domainaverageinput.h index 0e65d7540..cfab393f7 100644 --- a/src/gui/domainaverage.h +++ b/src/gui/domainaverageinput.h @@ -28,8 +28,8 @@ *****************************************************************************/ -#ifndef DOMAINAVERAGE_H -#define DOMAINAVERAGE_H +#ifndef DOMAINAVERAGEINPUT_H +#define DOMAINAVERAGEINPUT_H #include "appstate.h" #include @@ -40,21 +40,20 @@ namespace Ui { class MainWindow; } -class DomainAverage: public QObject { +class DomainAverageInput: public QObject { Q_OBJECT signals: void requestRefresh(); public: - explicit DomainAverage(Ui::MainWindow* ui, QObject* parent = nullptr); + explicit DomainAverageInput(Ui::MainWindow* ui, QObject* parent = nullptr); private slots: void domainAverageTableCellChanged(int row, int column); void clearTableButtonClicked(); void domainAverageCheckBoxClicked(); void windHeightComboBoxCurrentIndexChanged(int index); - void windHeightUnitsComboBoxCurrentIndexChanged(int index); private: QSet> invalidDAWCells; @@ -62,4 +61,4 @@ private slots: }; -#endif // DOMAINAVERAGE_H +#endif // DOMAINAVERAGEINPUT_H diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 5fe1c8f29..55ee598b6 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -178,8 +178,6 @@ MainWindow::MainWindow(QWidget *parent) serverBridge = new ServerBridge(); serverBridge->checkMessages(); resize(1200, 700); - surfaceInputView = new SurfaceInputView(ui, webView, surfaceInput, this); - surfaceInputView->timeZoneAllZonesCheckBoxClicked(); refreshUI(); ui->treeWidget->expandAll(); @@ -237,11 +235,11 @@ MainWindow::MainWindow(QWidget *parent) QUrl url = QUrl::fromLocalFile(filePath); webView->setUrl(url); - surfaceInput = new SurfaceInput(); menuBar = new MenuBar(ui, this); - surfaceInputView = new SurfaceInputView(ui, webView, surfaceInput, this); - domainAverage = new DomainAverage(ui, this); + surfaceInput = new SurfaceInput(ui, webView, this); + surfaceInput->timeZoneAllZonesCheckBoxClicked(); + domainAverageInput = new DomainAverageInput(ui, this); QVBoxLayout *layout = new QVBoxLayout(); layout->setContentsMargins(0, 0, 0, 0); @@ -337,9 +335,9 @@ void MainWindow::connectSignals() connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); - connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInputView, &SurfaceInputView::boundingBoxReceived); - connect(surfaceInputView, &SurfaceInputView::requestRefresh, this, &MainWindow::refreshUI); - connect(domainAverage, &DomainAverage::requestRefresh, this, &MainWindow::refreshUI); + connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); + connect(surfaceInput, &SurfaceInput::requestRefresh, this, &MainWindow::refreshUI); + connect(domainAverageInput, &DomainAverageInput::requestRefresh, this, &MainWindow::refreshUI); } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { @@ -410,7 +408,7 @@ void MainWindow::massSolverCheckBoxClicked() } state.isMassSolverToggled = ui->massSolverCheckBox->isChecked(); - ui->meshResolutionSpinBox->setValue(surfaceInputView->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); refreshUI(); } @@ -424,7 +422,7 @@ void MainWindow::momentumSolverCheckBoxClicked() } state.isMomentumSolverToggled = ui->momentumSolverCheckBox->isChecked(); - ui->meshResolutionSpinBox->setValue(surfaceInputView->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); refreshUI(); } @@ -561,7 +559,7 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) ui->weatherModelCheckBox->click(); } else if (item->text(0) == "Surface Input") { - surfaceInputView->elevationInputFileOpenButtonClicked(); + surfaceInput->elevationInputFileOpenButtonClicked(); } } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 9e9ffea18..af4b9b099 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -32,7 +32,7 @@ #include "surfaceinput.h" #include "menubar.h" -#include "domainaverage.h" +#include "domainaverageinput.h" #include "mapbridge.h" #include "serverbridge.h" #include "ui_mainwindow.h" @@ -109,7 +109,7 @@ private slots: SurfaceInput *surfaceInput; MenuBar *menuBar; ServerBridge *serverBridge; - DomainAverage *domainAverage; + DomainAverageInput *domainAverageInput; void connectSignals(); void treeItemClicked(QTreeWidgetItem *item, int column); diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 84244bb46..270beb19e 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -3,7 +3,7 @@ * $Id$ * * Project: WindNinja Qt GUI - * Purpose: Handles non-GUI related logic and API calls for Surface Input + * Purpose: Hands GUI related logic for the Surface Input Page * Author: Mason Willman * ****************************************************************************** @@ -28,9 +28,641 @@ *****************************************************************************/ #include "surfaceinput.h" +#include "ui_mainwindow.h" -SurfaceInput::SurfaceInput() +SurfaceInput::SurfaceInput(Ui::MainWindow *ui, + QWebEngineView *webView, + QObject* parent) + : QObject(parent), + ui(ui), + webView(webView) { + connect(ui->boundingBoxNorthLineEdit, &QLineEdit::textChanged, this, &SurfaceInput::boundingBoxLineEditsTextChanged); + connect(ui->boundingBoxSouthLineEdit, &QLineEdit::textChanged, this, &SurfaceInput::boundingBoxLineEditsTextChanged); + connect(ui->boundingBoxEastLineEdit, &QLineEdit::textChanged, this, &SurfaceInput::boundingBoxLineEditsTextChanged); + connect(ui->boundingBoxWestLineEdit, &QLineEdit::textChanged, this, &SurfaceInput::boundingBoxLineEditsTextChanged); + connect(ui->pointRadiusLatLineEdit,&QLineEdit::textChanged, this, &SurfaceInput::pointRadiusLineEditsTextChanged); + connect(ui->pointRadiusLonLineEdit,&QLineEdit::textChanged, this, &SurfaceInput::pointRadiusLineEditsTextChanged); + connect(ui->pointRadiusRadiusLineEdit,&QLineEdit::textChanged, this, &SurfaceInput::pointRadiusLineEditsTextChanged); + connect(ui->elevationInputFileDownloadButton, &QPushButton::clicked, this, &SurfaceInput::elevationInputFileDownloadButtonClicked); + connect(ui->elevationInputFileOpenButton, &QPushButton::clicked, this, &SurfaceInput::elevationInputFileOpenButtonClicked); + connect(ui->elevationInputFileLineEdit, &QLineEdit::textChanged, this, &SurfaceInput::elevationInputFileLineEditTextChanged); + connect(ui->meshResolutionComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInput::meshResolutionComboBoxCurrentIndexChanged); + connect(ui->meshResolutionUnitsComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInput::meshResolutionUnitsComboBoxCurrentIndexChanged); + connect(ui->surfaceInputDownloadCancelButton, &QPushButton::clicked, this, &SurfaceInput::surfaceInputDownloadCancelButtonClicked); + connect(ui->surfaceInputDownloadButton, &QPushButton::clicked, this, &SurfaceInput::surfaceInputDownloadButtonClicked); + connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &SurfaceInput::elevationInputFileOpenButtonClicked); + connect(ui->elevationInputTypePushButton, &QPushButton::clicked, this, &SurfaceInput::elevationInputTypePushButtonClicked); + connect(ui->timeZoneAllZonesCheckBox, &QCheckBox::clicked, this, &SurfaceInput::timeZoneAllZonesCheckBoxClicked); + connect(ui->timeZoneDetailsCheckBox, &QCheckBox::clicked, this, &SurfaceInput::timeZoneDetailsCheckBoxClicked); + connect(ui->timeZoneComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInput::timeZoneComboBoxCurrentIndexChanged); +} + + +void SurfaceInput::meshResolutionUnitsComboBoxCurrentIndexChanged(int index) +{ + switch(index) + { + case 0: + ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 0.3048); + break; + + case 1: + ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 3.28084); + break; + } +} + +void SurfaceInput::elevationInputTypePushButtonClicked() +{ + if(ui->elevationInputTypePushButton->isChecked()) + { + webView->page()->runJavaScript("startRectangleDrawing();"); + } + else + { + webView->page()->runJavaScript("stopRectangleDrawing();"); + } +} + +void SurfaceInput::boundingBoxReceived(double north, double south, double east, double west) +{ + ui->boundingBoxNorthLineEdit->blockSignals(true); + ui->boundingBoxEastLineEdit->blockSignals(true); + ui->boundingBoxSouthLineEdit->blockSignals(true); + ui->boundingBoxWestLineEdit->blockSignals(true); + + ui->boundingBoxNorthLineEdit->setText(QString::number(north)); + ui->boundingBoxEastLineEdit->setText(QString::number(east)); + ui->boundingBoxSouthLineEdit->setText(QString::number(south)); + ui->boundingBoxWestLineEdit->setText(QString::number(west)); + + ui->boundingBoxNorthLineEdit->blockSignals(false); + ui->boundingBoxEastLineEdit->blockSignals(false); + ui->boundingBoxSouthLineEdit->blockSignals(false); + ui->boundingBoxWestLineEdit->blockSignals(false); + + double pointRadius[3]; + computePointRadius(north, east, south, west, pointRadius); + ui->pointRadiusLatLineEdit->setText(QString::number(pointRadius[0])); + ui->pointRadiusLonLineEdit->setText(QString::number(pointRadius[1])); + ui->pointRadiusRadiusLineEdit->setText(QString::number(pointRadius[2])); + + ui->elevationInputTypePushButton->setChecked(false); +} + +void SurfaceInput::boundingBoxLineEditsTextChanged() +{ + bool isNorthValid, isEastValid, isSouthValid, isWestValid; + + double north = ui->boundingBoxNorthLineEdit->text().toDouble(&isNorthValid); + double east = ui->boundingBoxEastLineEdit->text().toDouble(&isEastValid); + double south = ui->boundingBoxSouthLineEdit->text().toDouble(&isSouthValid); + double west = ui->boundingBoxWestLineEdit->text().toDouble(&isWestValid); + + if (isNorthValid && isEastValid && isSouthValid && isWestValid) + { + QString js = QString("drawBoundingBox(%1, %2, %3, %4);") + .arg(north, 0, 'f', 10) + .arg(south, 0, 'f', 10) + .arg(east, 0, 'f', 10) + .arg(west, 0, 'f', 10); + webView->page()->runJavaScript(js); + } +} + +void SurfaceInput::pointRadiusLineEditsTextChanged() +{ + // bool isLatValid, isLonValid, isRadiusValid; + + // double lat = ui->pointRadiusLatLineEdit->text().toDouble(&isLatValid); + // double lon = ui->pointRadiusLonLineEdit->text().toDouble(&isLonValid); + // double radius = ui->pointRadiusRadiusLineEdit->text().toDouble(&isRadiusValid); + // double boundingBox[4]; + + // if(isLatValid && isLonValid && isRadiusValid) + // { + // surfaceInput->computeBoundingBox(lat, lon, radius, boundingBox); + // ui->boundingBoxNorthLineEdit->setText(QString::number(boundingBox[0])); + // ui->boundingBoxEastLineEdit->setText(QString::number(boundingBox[1])); + // ui->boundingBoxSouthLineEdit->setText(QString::number(boundingBox[2])); + // ui->boundingBoxWestLineEdit->setText(QString::number(boundingBox[3])); + // } +} + +void SurfaceInput::surfaceInputDownloadCancelButtonClicked() +{ + int currentIndex = ui->inputsStackedWidget->currentIndex(); + ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); + + ui->elevationInputTypeComboBox->setCurrentIndex(0); + ui->elevationFileTypeComboBox->setCurrentIndex(0); + ui->elevationInputTypePushButton->setChecked(false); + + ui->boundingBoxNorthLineEdit->clear(); + ui->boundingBoxEastLineEdit->clear(); + ui->boundingBoxSouthLineEdit->clear(); + ui->boundingBoxWestLineEdit->clear(); + + ui->pointRadiusLatLineEdit->clear(); + ui->pointRadiusLonLineEdit->clear(); + ui->pointRadiusRadiusLineEdit->clear(); + + webView->page()->runJavaScript("stopRectangleDrawing();"); + if(!currentDEMFilePath.isEmpty()) + { + QStringList cornerStrs; + for (int i = 0; i < 8; ++i) + cornerStrs << QString::number(DEMCorners[i], 'f', 8); + QString js = QString("drawDEM([%1]);").arg(cornerStrs.join(", ")); + webView->page()->runJavaScript(js); + } +} + +void SurfaceInput::surfaceInputDownloadButtonClicked() +{ + QVector boundingBox = { + ui->boundingBoxNorthLineEdit->text().toDouble(), + ui->boundingBoxEastLineEdit->text().toDouble(), + ui->boundingBoxSouthLineEdit->text().toDouble(), + ui->boundingBoxWestLineEdit->text().toDouble() + }; + + double resolution = 30; + + QString defaultName = ""; + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + QDir dir(downloadsPath); + QString fullPath = dir.filePath(defaultName); + QString demFilePath = QFileDialog::getSaveFileName(ui->centralwidget, "Save DEM File", fullPath, "TIF Files (*.tif)"); + if (demFilePath.isEmpty()) { + return; + } + if (!demFilePath.endsWith(".tif", Qt::CaseInsensitive)) { + demFilePath += ".tif"; + } + currentDEMFilePath = demFilePath; + std::string demFile = demFilePath.toStdString(); + + std::string fetchType; + switch(ui->elevationFileTypeComboBox->currentIndex()) + { + case 0: + fetchType = "srtm"; + break; + case 1: + fetchType = "gmted"; + break; + case 2: + fetchType = "lcp"; + break; + } + + startFetchDEM(boundingBox, demFile, resolution, fetchType); +} + +void SurfaceInput::elevationInputFileDownloadButtonClicked() +{ + int currentIndex = ui->inputsStackedWidget->currentIndex(); + ui->inputsStackedWidget->setCurrentIndex(currentIndex+1); +} + +void SurfaceInput::meshResolutionComboBoxCurrentIndexChanged(int index) +{ + if (index == 3) { + ui->meshResolutionSpinBox->setEnabled(true); + } else { + ui->meshResolutionSpinBox->setEnabled(false); + } + ui->meshResolutionSpinBox->setValue(computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); +} + +void SurfaceInput::elevationInputFileLineEditTextChanged(const QString &arg1) +{ + computeDEMFile(currentDEMFilePath); + computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked()); + + ui->meshResolutionSpinBox->setValue(computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + + QStringList cornerStrs; + for (int i = 0; i < 8; ++i) + cornerStrs << QString::number(DEMCorners[i], 'f', 8); + QString js = QString("drawDEM([%1]);").arg(cornerStrs.join(", ")); + webView->page()->runJavaScript(js); + + emit requestRefresh(); +} + +void SurfaceInput::elevationInputFileOpenButtonClicked() +{ + QString directoryPath; + if(!currentDEMFilePath.isEmpty()) + { + directoryPath = currentDEMFilePath; + } + else { + directoryPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + } + QString demFilePath = QFileDialog::getOpenFileName(ui->centralwidget, "Select a file", directoryPath, "(*.tif);;All Files (*)"); + + if (demFilePath.isEmpty()) { + if (!currentDEMFilePath.isEmpty()) { + ui->elevationInputFileLineEdit->setText(QFileInfo(currentDEMFilePath).fileName()); + ui->elevationInputFileLineEdit->setToolTip(currentDEMFilePath); + } + return; + } + + currentDEMFilePath = demFilePath; + ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); + ui->elevationInputFileLineEdit->setToolTip(demFilePath); +} + +void SurfaceInput::startFetchDEM(QVector boundingBox, std::string demFile, double resolution, std::string fetchType) +{ + progress = new QProgressDialog("Fetching DEM file...", QString(), 0, 0, ui->centralwidget); + progress->setWindowModality(Qt::WindowModal); + progress->setCancelButton(nullptr); + progress->setMinimumDuration(0); + progress->setAutoClose(true); + progress->show(); + + futureWatcher = new QFutureWatcher(this); + QFuture future = QtConcurrent::run(&SurfaceInput::fetchDEMFile, surfaceInput, boundingBox, demFile, resolution, fetchType); + futureWatcher->setFuture(future); + + connect(futureWatcher, &QFutureWatcher::finished, this, &SurfaceInput::fetchDEMFinished); +} + +void SurfaceInput::fetchDEMFinished() +{ + if (progress) { + progress->close(); + progress->deleteLater(); + progress = nullptr; + } + + if (futureWatcher) { + futureWatcher->deleteLater(); + futureWatcher = nullptr; + } + + ui->elevationInputFileLineEdit->setText(QFileInfo(currentDEMFilePath).fileName()); + int currentIndex = ui->inputsStackedWidget->currentIndex(); + ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); +} + +void SurfaceInput::timeZoneComboBoxCurrentIndexChanged(int index) +{ + QString currentTimeZone = ui->timeZoneComboBox->currentText(); + QString timeZoneDetails = fetchTimeZoneDetails(currentTimeZone); + ui->timeZoneDetailsTextEdit->setText(timeZoneDetails); +} + +void SurfaceInput::timeZoneAllZonesCheckBoxClicked() +{ + AppState& state = AppState::instance(); + state.isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); + + bool isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); + QVector> displayData = fetchAllTimeZones(isShowAllTimeZonesSelected); + + ui->timeZoneComboBox->clear(); + for (const QVector& zone : displayData) { + if (!zone.isEmpty()) { + ui->timeZoneComboBox->addItem(zone[0]); + } + } + + // Default to America/Denver + ui->timeZoneComboBox->setCurrentText("America/Denver"); +} + +void SurfaceInput::timeZoneDetailsCheckBoxClicked() +{ + AppState& state = AppState::instance(); + state.isDisplayTimeZoneDetailsSelected = ui->timeZoneDetailsCheckBox->isChecked(); + ui->timeZoneDetailsTextEdit->setVisible(state.isDisplayTimeZoneDetailsSelected); +} + +QString SurfaceInput::fetchTimeZoneDetails(QString currentTimeZone) { + QVector matchedRow; + QFile file(":/date_time_zonespec.csv"); + + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qWarning() << "Failed to open date_time_zonespec.csv"; + qDebug() << "No data found"; + } + + QTextStream in(&file); + bool firstLine = true; + + while (!in.atEnd()) { + QString line = in.readLine(); + + if (firstLine) { + firstLine = false; + continue; // skip header + } + + QStringList tokens = line.split(",", Qt::KeepEmptyParts); + QVector row; + + for (const QString& token : tokens) + row.append(token.trimmed().remove("\"")); + + QString fullZone = row.mid(0, 1).join("/"); + + if (fullZone == currentTimeZone) { + matchedRow = row; + break; + } + } + + file.close(); + + if (matchedRow.isEmpty()) { + qDebug() << "No matching time zone found."; + } + + QString standardName = matchedRow.value(2); + QString daylightName = matchedRow.value(4); + QString stdOffsetStr = matchedRow.value(5); + QString dstAdjustStr = matchedRow.value(6); + + auto timeToSeconds = [](const QString& t) -> int { + QString s = t.trimmed(); + bool negative = s.startsWith('-'); + s = s.remove(QChar('+')).remove(QChar('-')); + + QStringList parts = s.split(':'); + if (parts.size() != 3) return 0; + + int h = parts[0].toInt(); + int m = parts[1].toInt(); + int sec = parts[2].toInt(); + + int total = h * 3600 + m * 60 + sec; + return negative ? -total : total; + }; + + // Convert total seconds back to HH:MM:SS with sign + auto secondsToTime = [](int totalSec) -> QString { + QChar sign = totalSec < 0 ? '-' : '+'; + totalSec = std::abs(totalSec); + + int h = totalSec / 3600; + int m = (totalSec % 3600) / 60; + int s = totalSec % 60; + + return QString("%1%2:%3:%4") + .arg(sign) + .arg(h, 2, 10, QChar('0')) + .arg(m, 2, 10, QChar('0')) + .arg(s, 2, 10, QChar('0')); + }; + + int stdSecs = timeToSeconds(stdOffsetStr); + int dstSecs = timeToSeconds(dstAdjustStr); + QString combinedOffsetStr = secondsToTime(stdSecs + dstSecs); + + return QString("Standard Name:\t\t%1\n" + "Daylight Name:\t\t%2\n" + "Standard Offset from UTC:\t%3\n" + "Daylight Offset from UTC:\t%4") + .arg(standardName) + .arg(daylightName) + .arg(stdOffsetStr) + .arg(combinedOffsetStr); + +} + +QVector> SurfaceInput::fetchAllTimeZones(bool isShowAllTimeZonesSelected) +{ + QVector> fullData; + QVector> americaData; + + QFile file(":/date_time_zonespec.csv"); + + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + qDebug() << "Failed to open CSV file."; + return fullData; + } + + QTextStream in(&file); + bool firstLine = true; + + while (!in.atEnd()) { + QString line = in.readLine(); + + if (firstLine) { + firstLine = false; + continue; + } + + QStringList tokens = line.split(",", Qt::KeepEmptyParts); + QVector row; + for (const QString& token : tokens) + row.append(token.trimmed().remove('"')); + + if (!row.isEmpty()) + fullData.append(row); + + if (!row.isEmpty()) { + QStringList parts = row[0].split("/", Qt::KeepEmptyParts); + if (!parts.isEmpty() && parts[0] == "America" || row[0] == "Pacific/Honolulu") { + americaData.append(row); + } + } + } + + file.close(); + + if (isShowAllTimeZonesSelected) { + return fullData; + } else { + return americaData; + } +} + +int SurfaceInput::fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType) +{ + NinjaArmyH* ninjaArmy = NULL; + char ** papszOptions = NULL; + NinjaErr err = 0; + + err = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); + if (err != NINJA_SUCCESS){ + qDebug() << "NinjaFetchDEMBBox: err =" << err; + return err; + } + else + { + return NINJA_SUCCESS; + } +} + +void SurfaceInput::computeDEMFile(QString filePath) +{ + double adfGeoTransform[6]; + GDALDataset *poInputDS; + poInputDS = (GDALDataset*)GDALOpen(filePath.toStdString().c_str(), GA_ReadOnly); + + GDALDriverName = poInputDS->GetDriver()->GetDescription(); + GDALXSize = poInputDS->GetRasterXSize(); + GDALYSize = poInputDS->GetRasterYSize(); + GDALGetCorners(poInputDS, DEMCorners); + + if (poInputDS->GetGeoTransform(adfGeoTransform) == CE_None) + { + double c1, c2; + c1 = adfGeoTransform[1]; + c2 = adfGeoTransform[5]; + if (abs(c1) == abs(c2)) { + GDALCellSize = abs(c1); + } else { + GDALClose((GDALDatasetH)poInputDS); + } + } + + GDALRasterBand* band = poInputDS->GetRasterBand(1); + int gotMin = 0, gotMax = 0; + double minVal = band->GetMinimum(&gotMin); + double maxVal = band->GetMaximum(&gotMax); + if (!gotMin || !gotMax) { + band->ComputeStatistics(false, &minVal, &maxVal, nullptr, nullptr, nullptr, nullptr); + } + + GDALMinValue = minVal; + GDALMaxValue = maxVal; + + GDALClose((GDALDatasetH)poInputDS); + +} + +double SurfaceInput::computeMeshResolution(int index, bool isMomemtumChecked) +{ + int coarse = 4000; + int medium = 10000; + int fine = 20000; + double meshResolution = 200.0; + + if( GDALCellSize == 0.0 || GDALXSize == 0 || GDALYSize == 0 ) + { + return meshResolution; + } + +#ifdef NINJAFOAM + if (isMomemtumChecked) { + coarse = 25000; + medium = 50000; + fine = 100000; + } +#endif //NINJAFOAM + + int targetNumHorizCells = fine; + switch (index) { + case 0: + targetNumHorizCells = coarse; + break; + case 1: + targetNumHorizCells = medium; + break; + case 2: + targetNumHorizCells = fine; + break; + case 3: + return 200; + default: + return 200; + } + + double XLength = GDALXSize * GDALCellSize; + double YLength = GDALYSize * GDALCellSize; + double nXcells = 2 * std::sqrt((double)targetNumHorizCells) * (XLength / (XLength + YLength)); + double nYcells = 2 * std::sqrt((double)targetNumHorizCells) * (YLength / (XLength + YLength)); + + double XCellSize = XLength / nXcells; + double YCellSize = YLength / nYcells; + + meshResolution = (XCellSize + YCellSize) / 2; + +#ifdef NINJAFOAM + if (isMomemtumChecked) { + XLength = GDALXSize * GDALCellSize; + YLength = GDALYSize * GDALCellSize; + + double dz = GDALMaxValue - GDALMinValue; + double ZLength = std::max((0.1 * std::max(XLength, YLength)), (dz + 0.1 * dz)); + double zmin, zmax; + zmin = GDALMaxValue + 0.05 * ZLength; //zmin (above highest point in DEM for MDM) + zmax = GDALMaxValue + ZLength; //zmax + + double volume; + double cellCount; + double cellVolume; + + volume = XLength * YLength * (zmax-zmin); //volume of blockMesh + cellCount = targetNumHorizCells * 0.5; // cell count in volume 1 + cellVolume = volume/cellCount; // volume of 1 cell in blockMesh + double side = std::pow(cellVolume, (1.0/3.0)); // length of side of cell in blockMesh + + //determine number of rounds of refinement + int nCellsToAdd = 0; + int refinedCellCount = 0; + int nCellsInLowestLayer = int(XLength/side) * int(YLength/side); + int nRoundsRefinement = 0; + while(refinedCellCount < (0.5 * targetNumHorizCells)){ + nCellsToAdd = nCellsInLowestLayer * 8; //each cell is divided into 8 cells + refinedCellCount += nCellsToAdd - nCellsInLowestLayer; //subtract the parent cells + nCellsInLowestLayer = nCellsToAdd/2; //only half of the added cells are in the lowest layer + nRoundsRefinement += 1; + } + + meshResolution = side/(nRoundsRefinement*2.0); + } +#endif //NINJAFOAM + + return meshResolution; + +} + +void SurfaceInput::computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]) +{ + const double EARTH_RADIUS_MILES = 3958.7613; + const double DEG_TO_RAD = M_PI / 180.0; + + double deltaLat = radius / (2.0 * M_PI * EARTH_RADIUS_MILES / 360.0); + double latRadius = EARTH_RADIUS_MILES * std::cos(centerLat * DEG_TO_RAD); + double deltaLon = radius / (2.0 * M_PI * latRadius / 360.0); + + boundingBox[0] = centerLat + deltaLat; // North + boundingBox[1] = centerLon + deltaLon; // East + boundingBox[2] = centerLat - deltaLat; // South + boundingBox[3] = centerLon - deltaLon; // West +} + +void SurfaceInput::computePointRadius(double north, double east, double south, double west, double pointRadius[3]) +{ + const double EARTH_RADIUS_MILES = 3958.7613; + const double DEG_TO_RAD = M_PI / 180.0; + + double centerLat = (north + south) / 2.0; + double centerLon = (east + west) / 2.0; + + double deltaLat = std::abs(north - south) / 2.0; + double deltaLon = std::abs(east - west) / 2.0; + + double latMiles = (2.0 * M_PI * EARTH_RADIUS_MILES / 360.0) * deltaLat; + + double latRadius = EARTH_RADIUS_MILES * std::cos(centerLat * DEG_TO_RAD); + double lonMiles = (2.0 * M_PI * latRadius / 360.0) * deltaLon; + + double radius = (latMiles + lonMiles) / 2.0; + + pointRadius[0] = centerLat; + pointRadius[1] = centerLon; + pointRadius[2] = radius; } diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index a72e80652..14a2dcbcd 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -3,7 +3,7 @@ * $Id$ * * Project: WindNinja Qt GUI - * Purpose: Handles non-GUI related logic and API calls for Surface Input + * Purpose: Hands GUI related logic for the Surface Input Page * Author: Mason Willman * ****************************************************************************** @@ -30,31 +30,79 @@ #ifndef SURFACEINPUT_H #define SURFACEINPUT_H -#include "../ninja/gdal_util.h" +#include "appstate.h" #include "../ninja/windninja.h" +#include "../ninja/gdal_util.h" +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include + +namespace Ui { +class MainWindow; +} -class SurfaceInput +class SurfaceInput : public QObject { + Q_OBJECT public: - SurfaceInput(); + explicit SurfaceInput(Ui::MainWindow* ui, + QWebEngineView* webView, + QObject* parent = nullptr); + double computeMeshResolution(int index, bool isMomemtumChecked); + +signals: + void requestRefresh(); + +public slots: + void boundingBoxReceived(double north, double south, double east, double west); + void elevationInputFileOpenButtonClicked(); + void timeZoneAllZonesCheckBoxClicked(); + +private slots: + void surfaceInputDownloadCancelButtonClicked(); + void surfaceInputDownloadButtonClicked(); + void meshResolutionUnitsComboBoxCurrentIndexChanged(int index); + void elevationInputTypePushButtonClicked(); + void boundingBoxLineEditsTextChanged(); + void pointRadiusLineEditsTextChanged(); + void elevationInputFileDownloadButtonClicked(); + void elevationInputFileLineEditTextChanged(const QString &arg1); + void meshResolutionComboBoxCurrentIndexChanged(int index); + void fetchDEMFinished(); + void timeZoneDetailsCheckBoxClicked(); + void timeZoneComboBoxCurrentIndexChanged(int index); + +private: + Ui::MainWindow *ui; + QWebEngineView *webView; + SurfaceInput *surfaceInput; + + QProgressDialog *progress; + QFutureWatcher *futureWatcher; + QString currentDEMFilePath; + + QString GDALDriverName; + int GDALXSize, GDALYSize; + double GDALCellSize, GDALMaxValue, GDALMinValue; + double DEMCorners[8]; QString fetchTimeZoneDetails(QString currentTimeZone); QVector> fetchAllTimeZones(bool isShowAllTimeZonesSelected); int fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); void computeDEMFile(QString filePath); - double computeMeshResolution(int index, bool isMomemtumChecked); void computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]); void computePointRadius(double north, double east, double south, double west, double pointRadius[3]); - double* getDEMCorners(); + void startFetchDEM(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); -private: - QString GDALDriverName; - int GDALXSize, GDALYSize; - double GDALCellSize, GDALMaxValue, GDALMinValue; - double DEMCorners[8]; }; #endif // SURFACEINPUT_H - diff --git a/src/gui/surfaceinputview.cpp b/src/gui/surfaceinputview.cpp deleted file mode 100644 index 8f9c50144..000000000 --- a/src/gui/surfaceinputview.cpp +++ /dev/null @@ -1,670 +0,0 @@ - /****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Hands GUI related logic for the Surface Input Page - * Author: Mason Willman - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#include "surfaceinputview.h" -#include "ui_mainwindow.h" - -SurfaceInputView::SurfaceInputView(Ui::MainWindow *ui, - QWebEngineView *webView, - SurfaceInput *surfaceInput, - QObject* parent) - : QObject(parent), - ui(ui), - webView(webView), - surfaceInput(surfaceInput) -{ - connect(ui->boundingBoxNorthLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); - connect(ui->boundingBoxSouthLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); - connect(ui->boundingBoxEastLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); - connect(ui->boundingBoxWestLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::boundingBoxLineEditsTextChanged); - connect(ui->pointRadiusLatLineEdit,&QLineEdit::textChanged, this, &SurfaceInputView::pointRadiusLineEditsTextChanged); - connect(ui->pointRadiusLonLineEdit,&QLineEdit::textChanged, this, &SurfaceInputView::pointRadiusLineEditsTextChanged); - connect(ui->pointRadiusRadiusLineEdit,&QLineEdit::textChanged, this, &SurfaceInputView::pointRadiusLineEditsTextChanged); - connect(ui->elevationInputFileDownloadButton, &QPushButton::clicked, this, &SurfaceInputView::elevationInputFileDownloadButtonClicked); - connect(ui->elevationInputFileOpenButton, &QPushButton::clicked, this, &SurfaceInputView::elevationInputFileOpenButtonClicked); - connect(ui->elevationInputFileLineEdit, &QLineEdit::textChanged, this, &SurfaceInputView::elevationInputFileLineEditTextChanged); - connect(ui->meshResolutionComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInputView::meshResolutionComboBoxCurrentIndexChanged); - connect(ui->meshResolutionUnitsComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInputView::meshResolutionUnitsComboBoxCurrentIndexChanged); - connect(ui->surfaceInputDownloadCancelButton, &QPushButton::clicked, this, &SurfaceInputView::surfaceInputDownloadCancelButtonClicked); - connect(ui->surfaceInputDownloadButton, &QPushButton::clicked, this, &SurfaceInputView::surfaceInputDownloadButtonClicked); - connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &SurfaceInputView::elevationInputFileOpenButtonClicked); - connect(ui->elevationInputTypePushButton, &QPushButton::clicked, this, &SurfaceInputView::elevationInputTypePushButtonClicked); - connect(ui->timeZoneAllZonesCheckBox, &QCheckBox::clicked, this, &SurfaceInputView::timeZoneAllZonesCheckBoxClicked); - connect(ui->timeZoneDetailsCheckBox, &QCheckBox::clicked, this, &SurfaceInputView::timeZoneDetailsCheckBoxClicked); - connect(ui->timeZoneComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInputView::timeZoneComboBoxCurrentIndexChanged); -} - - -void SurfaceInputView::meshResolutionUnitsComboBoxCurrentIndexChanged(int index) -{ - switch(index) - { - case 0: - ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 0.3048); - break; - - case 1: - ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 3.28084); - break; - } -} - -void SurfaceInputView::elevationInputTypePushButtonClicked() -{ - if(ui->elevationInputTypePushButton->isChecked()) - { - webView->page()->runJavaScript("startRectangleDrawing();"); - } - else - { - webView->page()->runJavaScript("stopRectangleDrawing();"); - } -} - -void SurfaceInputView::boundingBoxReceived(double north, double south, double east, double west) -{ - ui->boundingBoxNorthLineEdit->blockSignals(true); - ui->boundingBoxEastLineEdit->blockSignals(true); - ui->boundingBoxSouthLineEdit->blockSignals(true); - ui->boundingBoxWestLineEdit->blockSignals(true); - - ui->boundingBoxNorthLineEdit->setText(QString::number(north)); - ui->boundingBoxEastLineEdit->setText(QString::number(east)); - ui->boundingBoxSouthLineEdit->setText(QString::number(south)); - ui->boundingBoxWestLineEdit->setText(QString::number(west)); - - ui->boundingBoxNorthLineEdit->blockSignals(false); - ui->boundingBoxEastLineEdit->blockSignals(false); - ui->boundingBoxSouthLineEdit->blockSignals(false); - ui->boundingBoxWestLineEdit->blockSignals(false); - - double pointRadius[3]; - computePointRadius(north, east, south, west, pointRadius); - ui->pointRadiusLatLineEdit->setText(QString::number(pointRadius[0])); - ui->pointRadiusLonLineEdit->setText(QString::number(pointRadius[1])); - ui->pointRadiusRadiusLineEdit->setText(QString::number(pointRadius[2])); - - ui->elevationInputTypePushButton->setChecked(false); -} - -void SurfaceInputView::boundingBoxLineEditsTextChanged() -{ - bool isNorthValid, isEastValid, isSouthValid, isWestValid; - - double north = ui->boundingBoxNorthLineEdit->text().toDouble(&isNorthValid); - double east = ui->boundingBoxEastLineEdit->text().toDouble(&isEastValid); - double south = ui->boundingBoxSouthLineEdit->text().toDouble(&isSouthValid); - double west = ui->boundingBoxWestLineEdit->text().toDouble(&isWestValid); - - if (isNorthValid && isEastValid && isSouthValid && isWestValid) - { - QString js = QString("drawBoundingBox(%1, %2, %3, %4);") - .arg(north, 0, 'f', 10) - .arg(south, 0, 'f', 10) - .arg(east, 0, 'f', 10) - .arg(west, 0, 'f', 10); - webView->page()->runJavaScript(js); - } -} - -void SurfaceInputView::pointRadiusLineEditsTextChanged() -{ - // bool isLatValid, isLonValid, isRadiusValid; - - // double lat = ui->pointRadiusLatLineEdit->text().toDouble(&isLatValid); - // double lon = ui->pointRadiusLonLineEdit->text().toDouble(&isLonValid); - // double radius = ui->pointRadiusRadiusLineEdit->text().toDouble(&isRadiusValid); - // double boundingBox[4]; - - // if(isLatValid && isLonValid && isRadiusValid) - // { - // surfaceInput->computeBoundingBox(lat, lon, radius, boundingBox); - // ui->boundingBoxNorthLineEdit->setText(QString::number(boundingBox[0])); - // ui->boundingBoxEastLineEdit->setText(QString::number(boundingBox[1])); - // ui->boundingBoxSouthLineEdit->setText(QString::number(boundingBox[2])); - // ui->boundingBoxWestLineEdit->setText(QString::number(boundingBox[3])); - // } -} - -void SurfaceInputView::surfaceInputDownloadCancelButtonClicked() -{ - int currentIndex = ui->inputsStackedWidget->currentIndex(); - ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); - - ui->elevationInputTypeComboBox->setCurrentIndex(0); - ui->elevationFileTypeComboBox->setCurrentIndex(0); - ui->elevationInputTypePushButton->setChecked(false); - - ui->boundingBoxNorthLineEdit->clear(); - ui->boundingBoxEastLineEdit->clear(); - ui->boundingBoxSouthLineEdit->clear(); - ui->boundingBoxWestLineEdit->clear(); - - ui->pointRadiusLatLineEdit->clear(); - ui->pointRadiusLonLineEdit->clear(); - ui->pointRadiusRadiusLineEdit->clear(); - - webView->page()->runJavaScript("stopRectangleDrawing();"); - if(!currentDEMFilePath.isEmpty()) - { - QStringList cornerStrs; - for (int i = 0; i < 8; ++i) - cornerStrs << QString::number(DEMCorners[i], 'f', 8); - QString js = QString("drawDEM([%1]);").arg(cornerStrs.join(", ")); - webView->page()->runJavaScript(js); - } -} - -void SurfaceInputView::surfaceInputDownloadButtonClicked() -{ - QVector boundingBox = { - ui->boundingBoxNorthLineEdit->text().toDouble(), - ui->boundingBoxEastLineEdit->text().toDouble(), - ui->boundingBoxSouthLineEdit->text().toDouble(), - ui->boundingBoxWestLineEdit->text().toDouble() - }; - - double resolution = 30; - - QString defaultName = ""; - QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - QDir dir(downloadsPath); - QString fullPath = dir.filePath(defaultName); - QString demFilePath = QFileDialog::getSaveFileName(ui->centralwidget, "Save DEM File", fullPath, "TIF Files (*.tif)"); - if (demFilePath.isEmpty()) { - return; - } - if (!demFilePath.endsWith(".tif", Qt::CaseInsensitive)) { - demFilePath += ".tif"; - } - currentDEMFilePath = demFilePath; - std::string demFile = demFilePath.toStdString(); - - std::string fetchType; - switch(ui->elevationFileTypeComboBox->currentIndex()) - { - case 0: - fetchType = "srtm"; - break; - case 1: - fetchType = "gmted"; - break; - case 2: - fetchType = "lcp"; - break; - } - - startFetchDEM(boundingBox, demFile, resolution, fetchType); -} - -void SurfaceInputView::elevationInputFileDownloadButtonClicked() -{ - int currentIndex = ui->inputsStackedWidget->currentIndex(); - ui->inputsStackedWidget->setCurrentIndex(currentIndex+1); -} - -void SurfaceInputView::meshResolutionComboBoxCurrentIndexChanged(int index) -{ - if (index == 3) { - ui->meshResolutionSpinBox->setEnabled(true); - } else { - ui->meshResolutionSpinBox->setEnabled(false); - } - ui->meshResolutionSpinBox->setValue(computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); -} - -void SurfaceInputView::elevationInputFileLineEditTextChanged(const QString &arg1) -{ - computeDEMFile(currentDEMFilePath); - computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked()); - - ui->meshResolutionSpinBox->setValue(computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); - - QStringList cornerStrs; - for (int i = 0; i < 8; ++i) - cornerStrs << QString::number(DEMCorners[i], 'f', 8); - QString js = QString("drawDEM([%1]);").arg(cornerStrs.join(", ")); - webView->page()->runJavaScript(js); - - emit requestRefresh(); -} - -void SurfaceInputView::elevationInputFileOpenButtonClicked() -{ - QString directoryPath; - if(!currentDEMFilePath.isEmpty()) - { - directoryPath = currentDEMFilePath; - } - else { - directoryPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - } - QString demFilePath = QFileDialog::getOpenFileName(ui->centralwidget, "Select a file", directoryPath, "(*.tif);;All Files (*)"); - - if (demFilePath.isEmpty()) { - if (!currentDEMFilePath.isEmpty()) { - ui->elevationInputFileLineEdit->setText(QFileInfo(currentDEMFilePath).fileName()); - ui->elevationInputFileLineEdit->setToolTip(currentDEMFilePath); - } - return; - } - - currentDEMFilePath = demFilePath; - ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); - ui->elevationInputFileLineEdit->setToolTip(demFilePath); -} - -void SurfaceInputView::startFetchDEM(QVector boundingBox, std::string demFile, double resolution, std::string fetchType) -{ - progress = new QProgressDialog("Fetching DEM file...", QString(), 0, 0, ui->centralwidget); - progress->setWindowModality(Qt::WindowModal); - progress->setCancelButton(nullptr); - progress->setMinimumDuration(0); - progress->setAutoClose(true); - progress->show(); - - futureWatcher = new QFutureWatcher(this); - QFuture future = QtConcurrent::run(&SurfaceInput::fetchDEMFile, surfaceInput, boundingBox, demFile, resolution, fetchType); - futureWatcher->setFuture(future); - - connect(futureWatcher, &QFutureWatcher::finished, this, &SurfaceInputView::fetchDEMFinished); -} - -void SurfaceInputView::fetchDEMFinished() -{ - if (progress) { - progress->close(); - progress->deleteLater(); - progress = nullptr; - } - - if (futureWatcher) { - futureWatcher->deleteLater(); - futureWatcher = nullptr; - } - - ui->elevationInputFileLineEdit->setText(QFileInfo(currentDEMFilePath).fileName()); - int currentIndex = ui->inputsStackedWidget->currentIndex(); - ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); -} - -void SurfaceInputView::timeZoneComboBoxCurrentIndexChanged(int index) -{ - QString currentTimeZone = ui->timeZoneComboBox->currentText(); - QString timeZoneDetails = fetchTimeZoneDetails(currentTimeZone); - ui->timeZoneDetailsTextEdit->setText(timeZoneDetails); -} - -void SurfaceInputView::timeZoneAllZonesCheckBoxClicked() -{ - AppState& state = AppState::instance(); - state.isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); - - bool isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); - QVector> displayData = fetchAllTimeZones(isShowAllTimeZonesSelected); - - ui->timeZoneComboBox->clear(); - for (const QVector& zone : displayData) { - if (!zone.isEmpty()) { - ui->timeZoneComboBox->addItem(zone[0]); - } - } - - // Default to America/Denver - ui->timeZoneComboBox->setCurrentText("America/Denver"); -} - -void SurfaceInputView::timeZoneDetailsCheckBoxClicked() -{ - AppState& state = AppState::instance(); - state.isDisplayTimeZoneDetailsSelected = ui->timeZoneDetailsCheckBox->isChecked(); - ui->timeZoneDetailsTextEdit->setVisible(state.isDisplayTimeZoneDetailsSelected); -} - -QString SurfaceInputView::fetchTimeZoneDetails(QString currentTimeZone) { - QVector matchedRow; - QFile file(":/date_time_zonespec.csv"); - - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - qWarning() << "Failed to open date_time_zonespec.csv"; - qDebug() << "No data found"; - } - - QTextStream in(&file); - bool firstLine = true; - - while (!in.atEnd()) { - QString line = in.readLine(); - - if (firstLine) { - firstLine = false; - continue; // skip header - } - - QStringList tokens = line.split(",", Qt::KeepEmptyParts); - QVector row; - - for (const QString& token : tokens) - row.append(token.trimmed().remove("\"")); - - QString fullZone = row.mid(0, 1).join("/"); - - if (fullZone == currentTimeZone) { - matchedRow = row; - break; - } - } - - file.close(); - - if (matchedRow.isEmpty()) { - qDebug() << "No matching time zone found."; - } - - QString standardName = matchedRow.value(2); - QString daylightName = matchedRow.value(4); - QString stdOffsetStr = matchedRow.value(5); - QString dstAdjustStr = matchedRow.value(6); - - auto timeToSeconds = [](const QString& t) -> int { - QString s = t.trimmed(); - bool negative = s.startsWith('-'); - s = s.remove(QChar('+')).remove(QChar('-')); - - QStringList parts = s.split(':'); - if (parts.size() != 3) return 0; - - int h = parts[0].toInt(); - int m = parts[1].toInt(); - int sec = parts[2].toInt(); - - int total = h * 3600 + m * 60 + sec; - return negative ? -total : total; - }; - - // Convert total seconds back to HH:MM:SS with sign - auto secondsToTime = [](int totalSec) -> QString { - QChar sign = totalSec < 0 ? '-' : '+'; - totalSec = std::abs(totalSec); - - int h = totalSec / 3600; - int m = (totalSec % 3600) / 60; - int s = totalSec % 60; - - return QString("%1%2:%3:%4") - .arg(sign) - .arg(h, 2, 10, QChar('0')) - .arg(m, 2, 10, QChar('0')) - .arg(s, 2, 10, QChar('0')); - }; - - int stdSecs = timeToSeconds(stdOffsetStr); - int dstSecs = timeToSeconds(dstAdjustStr); - QString combinedOffsetStr = secondsToTime(stdSecs + dstSecs); - - return QString("Standard Name:\t\t%1\n" - "Daylight Name:\t\t%2\n" - "Standard Offset from UTC:\t%3\n" - "Daylight Offset from UTC:\t%4") - .arg(standardName) - .arg(daylightName) - .arg(stdOffsetStr) - .arg(combinedOffsetStr); - -} - -QVector> SurfaceInputView::fetchAllTimeZones(bool isShowAllTimeZonesSelected) -{ - QVector> fullData; - QVector> americaData; - - QFile file(":/date_time_zonespec.csv"); - - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - qDebug() << "Failed to open CSV file."; - return fullData; - } - - QTextStream in(&file); - bool firstLine = true; - - while (!in.atEnd()) { - QString line = in.readLine(); - - if (firstLine) { - firstLine = false; - continue; - } - - QStringList tokens = line.split(",", Qt::KeepEmptyParts); - QVector row; - for (const QString& token : tokens) - row.append(token.trimmed().remove('"')); - - if (!row.isEmpty()) - fullData.append(row); - - if (!row.isEmpty()) { - QStringList parts = row[0].split("/", Qt::KeepEmptyParts); - if (!parts.isEmpty() && parts[0] == "America" || row[0] == "Pacific/Honolulu") { - americaData.append(row); - } - } - } - - file.close(); - - if (isShowAllTimeZonesSelected) { - return fullData; - } else { - return americaData; - } -} - -int SurfaceInputView::fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType) -{ - NinjaArmyH* ninjaArmy = NULL; - char ** papszOptions = NULL; - NinjaErr err = 0; - - err = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); - if (err != NINJA_SUCCESS){ - qDebug() << "NinjaFetchDEMBBox: err =" << err; - return err; - } - else - { - return NINJA_SUCCESS; - } -} - -void SurfaceInputView::computeDEMFile(QString filePath) -{ - double adfGeoTransform[6]; - GDALDataset *poInputDS; - poInputDS = (GDALDataset*)GDALOpen(filePath.toStdString().c_str(), GA_ReadOnly); - - GDALDriverName = poInputDS->GetDriver()->GetDescription(); - GDALXSize = poInputDS->GetRasterXSize(); - GDALYSize = poInputDS->GetRasterYSize(); - GDALGetCorners(poInputDS, DEMCorners); - - if (poInputDS->GetGeoTransform(adfGeoTransform) == CE_None) - { - double c1, c2; - c1 = adfGeoTransform[1]; - c2 = adfGeoTransform[5]; - if (abs(c1) == abs(c2)) { - GDALCellSize = abs(c1); - } else { - GDALClose((GDALDatasetH)poInputDS); - } - } - - GDALRasterBand* band = poInputDS->GetRasterBand(1); - int gotMin = 0, gotMax = 0; - double minVal = band->GetMinimum(&gotMin); - double maxVal = band->GetMaximum(&gotMax); - if (!gotMin || !gotMax) { - band->ComputeStatistics(false, &minVal, &maxVal, nullptr, nullptr, nullptr, nullptr); - } - - GDALMinValue = minVal; - GDALMaxValue = maxVal; - - GDALClose((GDALDatasetH)poInputDS); - -} - -double SurfaceInputView::computeMeshResolution(int index, bool isMomemtumChecked) -{ - int coarse = 4000; - int medium = 10000; - int fine = 20000; - double meshResolution = 200.0; - - if( GDALCellSize == 0.0 || GDALXSize == 0 || GDALYSize == 0 ) - { - return meshResolution; - } - -#ifdef NINJAFOAM - if (isMomemtumChecked) { - coarse = 25000; - medium = 50000; - fine = 100000; - } -#endif //NINJAFOAM - - int targetNumHorizCells = fine; - switch (index) { - case 0: - targetNumHorizCells = coarse; - break; - case 1: - targetNumHorizCells = medium; - break; - case 2: - targetNumHorizCells = fine; - break; - case 3: - return 200; - default: - return 200; - } - - double XLength = GDALXSize * GDALCellSize; - double YLength = GDALYSize * GDALCellSize; - double nXcells = 2 * std::sqrt((double)targetNumHorizCells) * (XLength / (XLength + YLength)); - double nYcells = 2 * std::sqrt((double)targetNumHorizCells) * (YLength / (XLength + YLength)); - - double XCellSize = XLength / nXcells; - double YCellSize = YLength / nYcells; - - meshResolution = (XCellSize + YCellSize) / 2; - -#ifdef NINJAFOAM - if (isMomemtumChecked) { - XLength = GDALXSize * GDALCellSize; - YLength = GDALYSize * GDALCellSize; - - double dz = GDALMaxValue - GDALMinValue; - double ZLength = std::max((0.1 * std::max(XLength, YLength)), (dz + 0.1 * dz)); - double zmin, zmax; - zmin = GDALMaxValue + 0.05 * ZLength; //zmin (above highest point in DEM for MDM) - zmax = GDALMaxValue + ZLength; //zmax - - double volume; - double cellCount; - double cellVolume; - - volume = XLength * YLength * (zmax-zmin); //volume of blockMesh - cellCount = targetNumHorizCells * 0.5; // cell count in volume 1 - cellVolume = volume/cellCount; // volume of 1 cell in blockMesh - double side = std::pow(cellVolume, (1.0/3.0)); // length of side of cell in blockMesh - - //determine number of rounds of refinement - int nCellsToAdd = 0; - int refinedCellCount = 0; - int nCellsInLowestLayer = int(XLength/side) * int(YLength/side); - int nRoundsRefinement = 0; - while(refinedCellCount < (0.5 * targetNumHorizCells)){ - nCellsToAdd = nCellsInLowestLayer * 8; //each cell is divided into 8 cells - refinedCellCount += nCellsToAdd - nCellsInLowestLayer; //subtract the parent cells - nCellsInLowestLayer = nCellsToAdd/2; //only half of the added cells are in the lowest layer - nRoundsRefinement += 1; - } - - meshResolution = side/(nRoundsRefinement*2.0); - } -#endif //NINJAFOAM - - return meshResolution; - -} - -void SurfaceInputView::computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]) -{ - const double EARTH_RADIUS_MILES = 3958.7613; - const double DEG_TO_RAD = M_PI / 180.0; - - double deltaLat = radius / (2.0 * M_PI * EARTH_RADIUS_MILES / 360.0); - double latRadius = EARTH_RADIUS_MILES * std::cos(centerLat * DEG_TO_RAD); - double deltaLon = radius / (2.0 * M_PI * latRadius / 360.0); - - boundingBox[0] = centerLat + deltaLat; // North - boundingBox[1] = centerLon + deltaLon; // East - boundingBox[2] = centerLat - deltaLat; // South - boundingBox[3] = centerLon - deltaLon; // West -} - -void SurfaceInputView::computePointRadius(double north, double east, double south, double west, double pointRadius[3]) -{ - const double EARTH_RADIUS_MILES = 3958.7613; - const double DEG_TO_RAD = M_PI / 180.0; - - double centerLat = (north + south) / 2.0; - double centerLon = (east + west) / 2.0; - - double deltaLat = std::abs(north - south) / 2.0; - double deltaLon = std::abs(east - west) / 2.0; - - double latMiles = (2.0 * M_PI * EARTH_RADIUS_MILES / 360.0) * deltaLat; - - double latRadius = EARTH_RADIUS_MILES * std::cos(centerLat * DEG_TO_RAD); - double lonMiles = (2.0 * M_PI * latRadius / 360.0) * deltaLon; - - double radius = (latMiles + lonMiles) / 2.0; - - pointRadius[0] = centerLat; - pointRadius[1] = centerLon; - pointRadius[2] = radius; -} - - diff --git a/src/gui/surfaceinputview.h b/src/gui/surfaceinputview.h deleted file mode 100644 index 06af28558..000000000 --- a/src/gui/surfaceinputview.h +++ /dev/null @@ -1,108 +0,0 @@ - /****************************************************************************** - * - * $Id$ - * - * Project: WindNinja Qt GUI - * Purpose: Hands GUI related logic for the Surface Input Page - * Author: Mason Willman - * - ****************************************************************************** - * - * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) - * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT - * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 - * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT - * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES - * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER - * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, - * RELIABILITY, OR ANY OTHER CHARACTERISTIC. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - *****************************************************************************/ - -#ifndef SURFACEINPUTVIEW_H -#define SURFACEINPUTVIEW_H - -#include "appstate.h" -#include "surfaceinput.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace Ui { -class MainWindow; -} - -class SurfaceInputView : public QObject -{ - Q_OBJECT -public: - explicit SurfaceInputView(Ui::MainWindow* ui, - QWebEngineView* webView, - SurfaceInput* surfaceInput, - QObject* parent = nullptr); - double computeMeshResolution(int index, bool isMomemtumChecked); - -signals: - void requestRefresh(); - -public slots: - void boundingBoxReceived(double north, double south, double east, double west); - void elevationInputFileOpenButtonClicked(); - void timeZoneAllZonesCheckBoxClicked(); - -private slots: - void surfaceInputDownloadCancelButtonClicked(); - void surfaceInputDownloadButtonClicked(); - void meshResolutionUnitsComboBoxCurrentIndexChanged(int index); - void elevationInputTypePushButtonClicked(); - void boundingBoxLineEditsTextChanged(); - void pointRadiusLineEditsTextChanged(); - void elevationInputFileDownloadButtonClicked(); - void elevationInputFileLineEditTextChanged(const QString &arg1); - void meshResolutionComboBoxCurrentIndexChanged(int index); - void fetchDEMFinished(); - void timeZoneDetailsCheckBoxClicked(); - void timeZoneComboBoxCurrentIndexChanged(int index); - -private: - Ui::MainWindow *ui; - QWebEngineView *webView; - SurfaceInput *surfaceInput; - - QProgressDialog *progress; - QFutureWatcher *futureWatcher; - QString currentDEMFilePath; - - QString GDALDriverName; - int GDALXSize, GDALYSize; - double GDALCellSize, GDALMaxValue, GDALMinValue; - double DEMCorners[8]; - - QString fetchTimeZoneDetails(QString currentTimeZone); - QVector> fetchAllTimeZones(bool isShowAllTimeZonesSelected); - int fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); - void computeDEMFile(QString filePath); - void computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]); - void computePointRadius(double north, double east, double south, double west, double pointRadius[3]); - void startFetchDEM(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); - -}; - -#endif // SURFACEINPUTVIEW_H From 0676f5ee44f09f3522bef042b3f2d7004b7b9d3c Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 24 Jul 2025 13:01:45 -0600 Subject: [PATCH 125/435] Removed old, uncessary files from MSU team original project design --- src/gui/controller.cpp | 250 ------------ src/gui/controller.h | 30 -- src/gui/modeldata.h | 117 ------ src/gui/provider.cpp | 884 ----------------------------------------- src/gui/provider.h | 42 -- 5 files changed, 1323 deletions(-) delete mode 100644 src/gui/controller.cpp delete mode 100644 src/gui/controller.h delete mode 100755 src/gui/modeldata.h delete mode 100755 src/gui/provider.cpp delete mode 100755 src/gui/provider.h diff --git a/src/gui/controller.cpp b/src/gui/controller.cpp deleted file mode 100644 index b1c255581..000000000 --- a/src/gui/controller.cpp +++ /dev/null @@ -1,250 +0,0 @@ -#include "controller.h" -#include -#include - -using namespace std; - -Controller::Controller(MainWindow* view, QObject* parent) - : QObject(parent), view(view) -{ - connect(view, &MainWindow::solveRequest, this, &Controller::onSolveRequest); - connect(view, &MainWindow::timeZoneDataRequest, this, &Controller::onTimeZoneDataRequest); - connect(view, &MainWindow::timeZoneDetailsRequest, this, &Controller::ontimeZoneDetailsRequest); - connect(view, &MainWindow::getDEMrequest, this, &Controller::onGetDEMrequest); -} - -// Listens for solve request; facilitates model creation and provider passing -void Controller::onSolveRequest() { - // Alias app state, used to determine which type of solution to run - AppState& state = AppState::instance(); - - // Determine which run to perform - if (state.isDomainAverageInitializationValid) { - DomainAverageWind domainAvgWind = setDomainAverageWind(); - provider.domain_average_exec(domainAvgWind); - }else if(state.isPointInitializationValid){ - PointInitialization pointInit = setPointInitialization(); - provider.point_exec(pointInit); - }else if(state.isWeatherModelInitializationValid){ - WeatherModel weatherModel = setWeatherModel(); - provider.wxmodel_exec(weatherModel); - } - - - vector outputFileList = provider.getOutputFileNames( - view->getUi()->elevationInputFileLineEdit->text(), - view->getUi()->domainAverageTable, - view->getUi()->meshResolutionSpinBox->text(), - provider.parseDomainAvgTable(view->getUi()->domainAverageTable).size(), - view->getUi()->outputDirectoryTextEdit->toPlainText()); - - view->loadMapKMZ(outputFileList); -} - -// Get time zone list from provider -void Controller::onTimeZoneDataRequest() { - // Call provider to get 2D vector with timezone data - bool isShowAllTimeZonesSelected = view->getUi()->timeZoneAllZonesCheckBox->isChecked(); - QVector> timeZoneData = provider.getTimeZoneData(isShowAllTimeZonesSelected); - - // Clear timezone list - view->getUi()->timeZoneComboBox->clear(); - - // Populate timezone list - for (const QVector& zone : timeZoneData) { - if (!zone.isEmpty()) { - view->getUi()->timeZoneComboBox->addItem(zone[0]); - } - } - - // Default to America/Denver - view->getUi()->timeZoneComboBox->setCurrentText("America/Denver"); -} - -// Get time zone details from provider -void Controller::ontimeZoneDetailsRequest() { - QString currentTimeZone = view->getUi()->timeZoneComboBox->currentText(); - QString timeZoneDetails = provider.gettimeZoneDetails(currentTimeZone); - - // Set value in ui - view->getUi()->timeZoneDetailsTextEdit->setText(timeZoneDetails); -} - -void Controller::onGetDEMrequest(std::array boundsBox, QString outputFile) { - - // Get correct fetch type - // TODO: set correct string for landscape files in else condition - int fetchIndex = view->getUi()->elevationInputTypeComboBox->currentIndex(); - string fetchType; - if (fetchIndex == 0) { - fetchType = "srtm"; - } else if (fetchIndex == 1) { - fetchType = "gmted"; - } else if (fetchIndex == 2) { - printf("downloading lcp file\n"); - fetchType = "lcp"; - } else { - printf("Controller::onGetDEMrequest(), fetchIndex %d is outside of range, using fetchType \"lcp\"\n", fetchIndex); - fetchType = "lcp"; - } - - double resolution = 30.0; - - provider.fetchDEMBoundingBox(outputFile.toStdString(), fetchType, resolution, boundsBox.data()); - view->getUi()->elevationInputFileLineEdit->setText(outputFile); -} - -/* - * Helper functions that construct the API input models - */ - -BaseInput Controller::setBaseInput() { - QString demPath = view->getUi()->elevationInputFileLineEdit->text(); - double outputResolution = view->getUi()->meshResolutionSpinBox->value(); - int nCPUs = view->getUi()->numberOfProcessorsSpinBox->value(); - QString initMethod; - if (view->getUi()->domainAverageCheckBox->isChecked()) { - initMethod = "domain_average"; - } else if (view->getUi()->pointInitializationCheckBox->isChecked()) { - initMethod = "point"; - } else { - initMethod = "wxmodel"; - } - QString meshType = view->getUi()->meshResolutionComboBox->currentText().toLower(); - QString vegetation = view->getUi()->vegetationComboBox->currentText().toLower(); - int nLayers = 20; - int diurnalFlag = view->getUi()->diurnalCheckBox->isChecked() ? 1 : 0; - - double height = view->getUi()->windHeightValue->value(); - QString heightUnits; - if (view->getUi()->windHeightFeet) { - heightUnits = "ft"; - } else { - heightUnits = "m"; - } - - bool useMomentum = view->getUi()->momentumSolverCheckBox->isChecked() ? 1 : 0; - int numNinjas = 1; - // Count the number of ninjas, depending on the wind method being used - QVector> domainAvgTable = provider.parseDomainAvgTable(view->getUi()->domainAverageTable); - - if (view->getUi()->domainAverageCheckBox->isChecked()) { - if (domainAvgTable.size() > 0) { - numNinjas = domainAvgTable.size(); - } - } else if (view->getUi()->pointInitializationCheckBox->isChecked()) { - //TODO - //numNinjas = view->getUi()->pointInitStepsValue->value(); - } else { - //Todo wxmodel - } - - QString outputPath = view->getUi()->outputDirectoryTextEdit->toPlainText(); - - return BaseInput ( - demPath.toStdString(), - nCPUs, - outputResolution, - initMethod.toStdString(), - meshType.toStdString(), - vegetation.toStdString(), - nLayers, - diurnalFlag, - height, - heightUnits.toStdString(), - useMomentum, - numNinjas, - outputPath.toStdString() - ); -} - -DomainAverageWind Controller::setDomainAverageWind() { - BaseInput baseInput = setBaseInput(); - - // Get all wind data - QVector> windData = provider.parseDomainAvgTable(view->getUi()->domainAverageTable); - - // Get speed and direction lists - vector speedList; - vector directionList; - for (int i = 0; i < windData.size(); i++) { - speedList.push_back(windData[i][0].toDouble()); - directionList.push_back(windData[i][1].toDouble()); - } - QString speedUnits = view->getUi()->tableSpeedUnits->currentText(); - - return DomainAverageWind ( - baseInput, - speedList, - speedUnits.toStdString(), - directionList - ); -} - -PointInitialization Controller::setPointInitialization() { - BaseInput baseInput = setBaseInput(); - - vector year; - vector month; - vector day ; - vector hour ; - vector minute ; - //ToDo Understand QT setting and receivingS - char* station_path = "NULL"; - char* osTimeZone= view->getUi()->timeZoneComboBox->currentText().toUtf8().data();; - bool matchPointFlag = true; - int numNinjas = baseInput.getNumNinjas(); - - QDateTime startTime = QDateTime::fromString("2025-04-22 00:00", "yyyy-MM-dd HH:mm"); - QDateTime endTime = QDateTime::fromString("2025-04-22 12:00", "yyyy-MM-dd HH:mm"); - - //divides times and setsup simulations - QList ninjaTimes; - - qint64 totalSeconds = startTime.secsTo(endTime); - - qint64 step = totalSeconds / (numNinjas - 1); - - for (int i = 0; i < numNinjas; ++i) { - QDateTime timePoint = startTime.addSecs(i * step); - ninjaTimes.append(timePoint); - } - - for (const QDateTime& dt : ninjaTimes) { - QDate date = dt.date(); - QTime time = dt.time(); - - year.push_back(date.year()); - month.push_back(date.month()); - day.push_back(date.day()); - hour.push_back(time.hour()); - minute.push_back(time.minute()); - } - - return PointInitialization ( - baseInput, - year, - month, - day, - hour, - minute, - station_path, - osTimeZone, - matchPointFlag - ); -} - - -WeatherModel Controller::setWeatherModel() { - //Todo Implement WeatherModel - BaseInput baseInput = setBaseInput(); - - char* forecast = "NULL"; - char* osTimeZone= "NULL"; - - return WeatherModel ( - baseInput, - forecast, - osTimeZone - ); -} diff --git a/src/gui/controller.h b/src/gui/controller.h deleted file mode 100644 index 568fa7d70..000000000 --- a/src/gui/controller.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef CONTROLLER_H -#define CONTROLLER_H - -#include -#include -#include "appstate.h" -#include "mainwindow.h" -#include "modeldata.h" -#include "provider.h" - -class Controller : public QObject { - Q_OBJECT -public: - Controller(MainWindow* view, QObject* parent = nullptr); - -private: - MainWindow* view; - Provider provider; - BaseInput setBaseInput(); - DomainAverageWind setDomainAverageWind(); - PointInitialization setPointInitialization(); - WeatherModel setWeatherModel(); - - void onSolveRequest(); - void onTimeZoneDataRequest(); - void ontimeZoneDetailsRequest(); - void onGetDEMrequest(std::array boundsBox, QString outputFile); -}; - -#endif // CONTROLLER_H diff --git a/src/gui/modeldata.h b/src/gui/modeldata.h deleted file mode 100755 index 07e8e2a7c..000000000 --- a/src/gui/modeldata.h +++ /dev/null @@ -1,117 +0,0 @@ -#ifndef MODELDATA_H -#define MODELDATA_H - -#include -#include - -using namespace std; - -class BaseInput { - private: - string demFile; - int nCPUs; - double outputResolution; - string initializationMethod; - string meshChoice; - string vegetation; - int nLayers; - int diurnalFlag; - double height; - string heightUnits; - bool momentumFlag; - int numNinjas; - string outputPath; - - public: - BaseInput() {} - - // Constructor - BaseInput(string demFile, int nCPUs, double outputResolution, string initializationMethod, string meshChoice, string vegetation, - int nLayers, int diurnalFlag, double height, string heightUnits, bool momentumFlag, int numNinjas, string outputPath) - : demFile(demFile), nCPUs(nCPUs), outputResolution(outputResolution), initializationMethod(initializationMethod), meshChoice(meshChoice), - vegetation(vegetation), nLayers(nLayers), diurnalFlag(diurnalFlag), height(height), heightUnits(heightUnits), momentumFlag(momentumFlag), numNinjas(numNinjas), outputPath(outputPath) {} - - // Getter methods - const string& getDemFile() const { return demFile; } - int getNumCPUs() { return nCPUs; } - double getOutputResolution() { return outputResolution; } - const string& getInitializationMethod() const { return initializationMethod; } - const string& getMeshChoice() const { return meshChoice; } - const string& getVegetation() const { return vegetation; } - int getNLayers() { return nLayers; } - int getDiurnalFlag() { return diurnalFlag; } - double getHeight() { return height; } - const string& getHeightUnits() const { return heightUnits; } - bool getMomentumFlag() { return momentumFlag; } - int getNumNinjas() { return numNinjas; } - const string& getOutputPath() const { return outputPath; } -}; - -class DomainAverageWind : public BaseInput { - private: - vector speedList; - string speedUnits; - vector directionList; - - public: - // Constructor - DomainAverageWind(const BaseInput& baseInput, - vector speedList, string speedUnits, vector directionList) - : BaseInput(baseInput), speedList(speedList), speedUnits(speedUnits), directionList(directionList) {} - - // Getter methods - vector getSpeedList() { return speedList; } - const string& getSpeedUnits() const { return speedUnits; } - vector getDirectionList() { return directionList; } -}; - -class PointInitialization : public BaseInput { - private: - vector year; - vector month; - vector day; - vector hour; - vector minute; - char* station_path; - char* osTimeZone; - bool matchPointFlag; - - public: - // Constructor - PointInitialization(const BaseInput& baseInput, - vector year, vector month, vector day, vector hour, vector minute, char* station_path, char* osTimeZone, bool matchPointFlag) - : BaseInput(baseInput), year(year), month(month), day(day), hour(hour), minute(minute), station_path(station_path), osTimeZone(osTimeZone), matchPointFlag(matchPointFlag) {} - - // Getter methods - vector getYear() { return year; } - vector getMonth() { return month; } - vector getDay() { return day; } - vector getHour() { return hour; } - vector getMinute() { return minute; } - char* getStationPath() { return station_path; } - char* getOSTimeZone() { return osTimeZone; } - bool getMatchPointFlag() {return matchPointFlag;} -}; - -class WeatherModel : public BaseInput { - private: - char* forecast; - char* osTimeZone; - - public: - // Constructor - WeatherModel(const BaseInput& baseInput, - char* forecast, char* osTimeZone) - : BaseInput(baseInput), forecast(forecast), osTimeZone(osTimeZone) {} - - // Getter methods - char* getForecast() { return forecast; } - char* getOSTimeZone() { return osTimeZone; } -}; - -class modeldata { - public: - modeldata() {} -}; - -#endif // MODELDATA_H diff --git a/src/gui/provider.cpp b/src/gui/provider.cpp deleted file mode 100755 index 7e9ac22bb..000000000 --- a/src/gui/provider.cpp +++ /dev/null @@ -1,884 +0,0 @@ -#include "provider.h" -#include "modeldata.h" -#include "../ninja/windninja.h" - -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - - -NinjaArmyH* ninjaArmy = NULL; -const char * comType = "cli"; -char ** papszOptions = NULL; -NinjaErr err = 0; - -Provider::Provider() { - -} - -int Provider::domain_average_exec(DomainAverageWind& input) { - - std::vector speedVector = input.getSpeedList(); - const double* speedList = speedVector.data(); - std::vector directionVector = input.getDirectionList(); - const double* directionList = directionVector.data(); - const char * demFile = input.getDemFile().c_str(); - int nCPUs = input.getNumCPUs(); - double outputResolution = input.getOutputResolution(); - const char* initializationMethod = input.getInitializationMethod().c_str(); - const char* meshChoice = input.getMeshChoice().c_str(); - const char* vegetation = input.getVegetation().c_str(); - const int nLayers = input.getNLayers(); - const int diurnalFlag = input.getDiurnalFlag(); - const double height = input.getHeight(); - const char* heightUnits = input.getHeightUnits().c_str(); - const char* speedUnits = input.getSpeedUnits().c_str(); - bool momentumFlag = input.getMomentumFlag(); - unsigned int numNinjas = input.getNumNinjas(); - const char* outputPath = input.getOutputPath().c_str(); - - //double meshResolution = view->getUi()->meshResolutionSpinBox->value(); // need to get this another way ..., currently outputResolution is set with this same command so will use that for now - double meshResolution = outputResolution; - const char * meshResolutionUnits = "m"; - - const int year[2] = {2023, 2023}; - const int month[2] = {10, 11}; - const int day[2] = {10, 11}; - const int hour[2] = {12, 13}; - const int minute[2] = {30, 31}; - const char * timezone = "UTC"; - const double air[2] = {50.0, 50.0}; - const char * airUnits = "F"; - const double cloud[2] = {10.0, 10.0}; - const char * cloudUnits = "percent"; - - /* - * Create the army - */ - //ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speedList, speedUnits, directionList, papszOptions); - ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speedList, speedUnits, directionList, year, month, day, hour, minute, timezone, air, airUnits, cloud, cloudUnits, papszOptions); - if( NULL == ninjaArmy ) - { - printf("NinjaCreateArmy: ninjaArmy = NULL\n"); - } - - /* - * Prepare the army - */ - for(unsigned int i=0; i 0.0 ) - { - err = NinjaSetMeshResolution(ninjaArmy, i, meshResolution, meshResolutionUnits, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaSetMeshResolution: err = %d\n", err); - } - } - else // meshResolution not set, use meshChoice - { - err = NinjaSetMeshResolutionChoice(ninjaArmy, i, meshChoice, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaSetMeshResolutionChoice: err = %d\n", err); - } - } - - err = NinjaSetNumVertLayers(ninjaArmy, i, nLayers, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaSetNumVertLayers: err = %d\n", err); - } - - - err = NinjaSetGoogOutFlag(ninjaArmy, i, true, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaSetGoogOutFlag err = %d\n", err); - } - } - - /* - * Start the simulations - */ - err = NinjaStartRuns(ninjaArmy, nCPUs, papszOptions); - if(err != 1) //NinjaStartRuns returns 1 on success - { - printf("NinjaStartRuns: err = %d\n", err); - } - - /* - * Get the outputs - */ - const double* outputSpeedGrid = NULL; - const double* outputDirectionGrid = NULL; - const char* outputGridProjection = NULL; - const int nIndex = 0; - const char* units = "m"; - - //Google Maps Output - outputSpeedGrid = NinjaGetOutputSpeedGrid(ninjaArmy, nIndex, papszOptions); - if( NULL == outputSpeedGrid ) - { - printf("Error in NinjaGetOutputSpeedGrid"); - } - - outputDirectionGrid = NinjaGetOutputDirectionGrid(ninjaArmy, nIndex, papszOptions); - if( NULL == outputDirectionGrid ) - { - printf("Error in NinjaGetOutputDirectionGrid"); - } - - outputGridProjection = NinjaGetOutputGridProjection(ninjaArmy, nIndex, papszOptions); - if( NULL == outputGridProjection ) - { - printf("Error in NinjaGetOutputGridProjection"); - } - - /* - * Clean up - */ - err = NinjaDestroyArmy(ninjaArmy, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaDestroyRuns: err = %d\n", err); - } - - return NINJA_SUCCESS; -} - -int Provider::point_exec(PointInitialization& input) { - - vector yearVector = input.getYear(); - int* year = yearVector.data(); - vector monthVector = input.getMonth(); - int* month = monthVector.data(); - vector dayVector = input.getDay(); - int* day = dayVector.data(); - vector hourVector = input.getHour(); - int* hour = hourVector.data(); - vector minuteVector = input.getMinute(); - int* minute = minuteVector.data(); - char* station_path = input.getStationPath(); - char* osTimeZone = input.getOSTimeZone(); - bool matchPointFlag = input.getMatchPointFlag(); - - char * demFile = const_cast(input.getDemFile().c_str()); - int nCPUs = input.getNumCPUs(); - double outputResolution = input.getOutputResolution(); - const char* initializationMethod = input.getInitializationMethod().c_str(); - const char* meshChoice = input.getMeshChoice().c_str(); - const char* vegetation = input.getVegetation().c_str(); - const int nLayers = input.getNLayers(); - const int diurnalFlag = input.getDiurnalFlag(); - const double height = input.getHeight(); - const char* heightUnits = input.getHeightUnits().c_str(); - bool momentumFlag = input.getMomentumFlag(); - unsigned int numNinjas = input.getNumNinjas(); - const char * outputPath = input.getOutputPath().c_str(); - - //double meshResolution = view->getUi()->meshResolutionSpinBox->value(); // need to get this another way ..., currently outputResolution is set with this same command so will use that for now - double meshResolution = outputResolution; - const char * meshResolutionUnits = "m"; - - /* - * Create the army - */ - ninjaArmy = NinjaMakePointArmy(year, month, day, hour, minute, numNinjas, osTimeZone, station_path, demFile, matchPointFlag, momentumFlag, papszOptions); - - if( NULL == ninjaArmy ) - { - printf("NinjaCreateArmy: ninjaArmy = NULL\n"); - } - - /* - * Prepare the army - */ - for(unsigned int i=0; i 0.0 ) - { - err = NinjaSetMeshResolution(ninjaArmy, i, meshResolution, meshResolutionUnits, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaSetMeshResolution: err = %d\n", err); - } - } - else // meshResolution not set, use meshChoice - { - err = NinjaSetMeshResolutionChoice(ninjaArmy, i, meshChoice, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaSetMeshResolutionChoice: err = %d\n", err); - } - } - - err = NinjaSetNumVertLayers(ninjaArmy, i, nLayers, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaSetNumVertLayers: err = %d\n", err); - } - } - - /* - * Start the simulations - */ - err = NinjaStartRuns(ninjaArmy, nCPUs, papszOptions); - if(err != 1) //NinjaStartRuns returns 1 on success - { - printf("NinjaStartRuns: err = %d\n", err); - } - - return NINJA_SUCCESS; -} - -int Provider::wxmodel_exec(WeatherModel& input) { - - /* - * Set up Weather Model Initialization run - */ - - const char * demFile = input.getDemFile().c_str(); - int nCPUs = input.getNumCPUs(); - double outputResolution = input.getOutputResolution(); - const char* initializationMethod = input.getInitializationMethod().c_str(); - const char* meshChoice = input.getMeshChoice().c_str(); - const char* vegetation = input.getVegetation().c_str(); - const int nLayers = input.getNLayers(); - const int diurnalFlag = input.getDiurnalFlag(); - const double height = input.getHeight(); - const char* heightUnits = input.getHeightUnits().c_str(); - bool momentumFlag = input.getMomentumFlag(); - unsigned int numNinjas = input.getNumNinjas(); - const char* outputPath = input.getOutputPath().c_str(); - - //double meshResolution = view->getUi()->meshResolutionSpinBox->value(); // need to get this another way ..., currently outputResolution is set with this same command so will use that for now - double meshResolution = outputResolution; - const char * meshResolutionUnits = "m"; - - /* inputs that can vary among ninjas in an army */ - //const char * speedUnits = input.get; - - const char * forecast = input.getForecast(); - const char * osTimeZone = input.getOSTimeZone(); - - /* - * Create the army - */ - ninjaArmy = NinjaMakeWeatherModelArmy(forecast, osTimeZone, momentumFlag, papszOptions); - if( NULL == ninjaArmy ) - { - printf("NinjaCreateArmy: ninjaArmy = NULL\n"); - } - - /* - * Prepare the army - */ - for(unsigned int i=0; i 0.0 ) - { - err = NinjaSetMeshResolution(ninjaArmy, i, meshResolution, meshResolutionUnits, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaSetMeshResolution: err = %d\n", err); - } - } - else // meshResolution not set, use meshChoice - { - err = NinjaSetMeshResolutionChoice(ninjaArmy, i, meshChoice, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaSetMeshResolutionChoice: err = %d\n", err); - } - } - - err = NinjaSetNumVertLayers(ninjaArmy, i, nLayers, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaSetNumVertLayers: err = %d\n", err); - } - } - - /* - * Start the simulations - */ - err = NinjaStartRuns(ninjaArmy, nCPUs, papszOptions); - if(err != 1) //NinjaStartRuns returns 1 on success - { - printf("NinjaStartRuns: err = %d\n", err); - } - - /* - * Get the outputs - */ - const double* outputSpeedGrid = NULL; - const double* outputDirectionGrid = NULL; - const char* outputGridProjection = NULL; - const int nIndex = 0; - const char* units = "m"; - outputSpeedGrid = NinjaGetOutputSpeedGrid(ninjaArmy, nIndex, papszOptions); - if( NULL == outputSpeedGrid ) - { - printf("Error in NinjaGetOutputSpeedGrid"); - } - - outputDirectionGrid = NinjaGetOutputDirectionGrid(ninjaArmy, nIndex, papszOptions); - if( NULL == outputDirectionGrid ) - { - printf("Error in NinjaGetOutputDirectionGrid"); - } - - outputGridProjection = NinjaGetOutputGridProjection(ninjaArmy, nIndex, papszOptions); - if( NULL == outputGridProjection ) - { - printf("Error in NinjaGetOutputGridProjection"); - } - - /* - * Clean up - */ - err = NinjaDestroyArmy(ninjaArmy, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaDestroyRuns: err = %d\n", err); - } - - return NINJA_SUCCESS; -} - -// Time zone data provider -QVector> Provider::getTimeZoneData(bool isShowAllTimeZonesSelected) { - QVector> fullData; - QVector> americaData; - - QFile file(":/date_time_zonespec.csv"); - - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - qDebug() << "Failed to open CSV file."; - return fullData; - } - - QTextStream in(&file); - bool firstLine = true; - - while (!in.atEnd()) { - QString line = in.readLine(); - - if (firstLine) { - firstLine = false; - continue; - } - - QStringList tokens = line.split(",", Qt::KeepEmptyParts); - QVector row; - for (const QString& token : tokens) - row.append(token.trimmed().remove('"')); - - if (!row.isEmpty()) - fullData.append(row); - - if (!row.isEmpty()) { - QStringList parts = row[0].split("/", Qt::KeepEmptyParts); - if (!parts.isEmpty() && parts[0] == "America" || row[0] == "Pacific/Honolulu") { - americaData.append(row); - } - } - } - - file.close(); - - if (isShowAllTimeZonesSelected) { - return fullData; - } else { - return americaData; - } - -} - -// Provider for getting time zone details -QString Provider::gettimeZoneDetails(const QString& currentTimeZone) { - QVector matchedRow; - QFile file(":/date_time_zonespec.csv"); - - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - qWarning() << "Failed to open date_time_zonespec.csv"; - return "No data found"; - } - - QTextStream in(&file); - bool firstLine = true; - - while (!in.atEnd()) { - QString line = in.readLine(); - - if (firstLine) { - firstLine = false; - continue; // skip header - } - - QStringList tokens = line.split(",", Qt::KeepEmptyParts); - QVector row; - - for (const QString& token : tokens) - row.append(token.trimmed().remove("\"")); - - QString fullZone = row.mid(0, 1).join("/"); - - if (fullZone == currentTimeZone) { - matchedRow = row; - break; - } - } - - file.close(); - - if (matchedRow.isEmpty()) { - return "No matching time zone found."; - } - - QString standardName = matchedRow.value(2); - QString daylightName = matchedRow.value(4); - QString stdOffsetStr = matchedRow.value(5); // Already in HH:MM:SS - QString dstAdjustStr = matchedRow.value(6); // Already in HH:MM:SS - - // Function to convert signed HH:MM:SS to total seconds - auto timeToSeconds = [](const QString& t) -> int { - QString s = t.trimmed(); - bool negative = s.startsWith('-'); - s = s.remove(QChar('+')).remove(QChar('-')); - - QStringList parts = s.split(':'); - if (parts.size() != 3) return 0; - - int h = parts[0].toInt(); - int m = parts[1].toInt(); - int sec = parts[2].toInt(); - - int total = h * 3600 + m * 60 + sec; - return negative ? -total : total; - }; - - // Convert total seconds back to HH:MM:SS with sign - auto secondsToTime = [](int totalSec) -> QString { - QChar sign = totalSec < 0 ? '-' : '+'; - totalSec = std::abs(totalSec); - - int h = totalSec / 3600; - int m = (totalSec % 3600) / 60; - int s = totalSec % 60; - - return QString("%1%2:%3:%4") - .arg(sign) - .arg(h, 2, 10, QChar('0')) - .arg(m, 2, 10, QChar('0')) - .arg(s, 2, 10, QChar('0')); - }; - - int stdSecs = timeToSeconds(stdOffsetStr); - int dstSecs = timeToSeconds(dstAdjustStr); - QString combinedOffsetStr = secondsToTime(stdSecs + dstSecs); - - return QString("Standard Name:\t\t%1\n" - "Daylight Name:\t\t%2\n" - "Standard Offset from UTC:\t%3\n" - "Daylight Offset from UTC:\t%4") - .arg(standardName) - .arg(daylightName) - .arg(stdOffsetStr) - .arg(combinedOffsetStr); -} - -// Provider for parsing the domain average wind table -QVector> Provider::parseDomainAvgTable(QTableWidget* table) { - QVector> result; - - int rowCount = table->rowCount(); - int colCount = table->columnCount(); - - for (int row = 0; row < rowCount; ++row) { - bool rowComplete = true; - QVector rowData; - - for (int col = 0; col < colCount; ++col) { - if (table->isColumnHidden(col)) { - continue; // skip this column entirely - } - - QTableWidgetItem* item = table->item(row, col); - - if (!item || item->text().trimmed().isEmpty()) { - rowComplete = false; - break; - } - - rowData.append(item->text().trimmed()); - } - - if (rowComplete) { - result.append(rowData); - } - } - return result; -} - -int Provider::fetchDEMBoundingBox(const string demFileOutPut, const string fetch_type, int resolution, double* boundsBox) -{ - /* - * Setting up NinjaArmy - */ - - NinjaArmyH* ninjaArmy = NULL; - char ** papszOptions = NULL; - NinjaErr err = 0; - - /* - * Testing fetching from a DEM bounding box - */ - // Bounding box (north, east, south, west) - err = NinjaFetchDEMBBox(ninjaArmy, boundsBox, demFileOutPut.c_str(), resolution, strdup(fetch_type.c_str()), papszOptions); - if (err != NINJA_SUCCESS){ - printf("NinjaFetchDEMBBox: err = %d\n", err); - } - - return NINJA_SUCCESS; -} - -int Provider::fetchForecast(const string wx_model_type, int numNinjas, const string demFile){ - /* - * const char*wx_model_type = "NOMADS-HRRR-CONUS-3-KM"; - * int numNinjas = 2; - */ - - /* - * Setting up NinjaArmy - */ - NinjaArmyH* ninjaArmy = NULL; - char ** papszOptions = NULL; - NinjaErr err = 0; - - /* - * Testing fetching for a Forecast file (wx_model_type are the names listed in the weather station download in WindNinja) - */ - const char* forecastFilename = NinjaFetchForecast(ninjaArmy, wx_model_type.c_str(), numNinjas, demFile.c_str(), papszOptions); - if (strcmp(forecastFilename, "exception") == 0){ - printf("NinjaFetchForecast: err = %s\n", forecastFilename); - } - else{ - printf("NinjaFetchForecast: forecastFilename = %s\n", forecastFilename); - } - - return NINJA_SUCCESS; -} - -int Provider::fetchStationData(int year, int month, int day, int hour, int minute, int numNinjas, const string output_path, int bufferZone, const string bufferUnits, const string demFile, const string osTimeZone, int fetchLatestFlag){ - /* - * int year[1] = {2023}; - * int month[1] = {10}; - * int day[1] = {10}; - * int hour[1] = {12}; - * int minute[1] = {60}; - * const char* output_path = ""; - * const char* elevation_file = "data/missoula_valley.tif"; - * const char* osTimeZone = "UTC"; - * bool fetchLatestFlag = 1; - * / - - /* - * Setting up NinjaArmy - */ - NinjaArmyH* ninjaArmy = NULL; - char ** papszOptions = NULL; - NinjaErr err = 0; - - /* - * Testing fetching station data from a geotiff file. - */ - - err = NinjaFetchStation(&year, &month, &day, &hour, &minute, numNinjas, demFile.c_str(), bufferZone, bufferUnits.c_str(), osTimeZone.c_str(), fetchLatestFlag, output_path.c_str(), papszOptions); - if (err != NINJA_SUCCESS) { - printf("NinjaFetchStation: err = %d\n", err); - } else { - printf("NinjaFetchStation: success\n"); - } - - return NINJA_SUCCESS; -} - -int Provider::fetchFromDEMPoint (double adfPoints[2], double adfBuff[2], const string units, double dfCellSize, const string pszDstFile, const string fetchtype){ - /* - * double adfPoint[] = {104.0, 40.07}; // Point coordinates (longitude, latitude) - * double adfBuff[] = {30, 30}; // Buffer to store the elevation value - * const char* units = "mi"; - * double dfCellSize = 30.0; // Cell size in meters - * char* pszDstFile = "data/dem_point_output.tif"; - * char* fetchType = "gmted"; - */ - - /* - * Setting up NinjaArmy - */ - NinjaArmyH* ninjaArmy = NULL; - char ** papszOptions = NULL; - NinjaErr err = 0; - - /* - * Testing fetching from a DEM point - */ - err = NinjaFetchDEMPoint(ninjaArmy, adfPoints, adfBuff, units.c_str(), dfCellSize, strdup(pszDstFile.c_str()), strdup(fetchtype.c_str()), papszOptions); - if (err != NINJA_SUCCESS) { - printf("NinjaFetchDemPoint: err = %d\n", err); - } else { - printf("NinjaFetchDemPoint: elevation = %f\n", adfBuff[0]); - } - - return NINJA_SUCCESS; -} - -vector Provider::getOutputFileNames(QString demFile, QTableWidget *table, QString meshValue, int numFiles, QString outputPath) { - vector outputFiles; - QDir outDir(outputPath); - QString demName = QFileInfo(demFile).completeBaseName(); - int meshInt = static_cast(std::round(meshValue.toDouble())); - QString meshSize = QString::number(meshInt) + "m"; - - for (int i = 0; i < numFiles; i++) { - QString direction = table->item(i, 1)->text().trimmed(); - QString speed = table->item(i, 0)->text().trimmed(); - QString filePath = outDir.filePath(QString("%1_%2_%3_%4.kmz") - .arg(demName) - .arg(direction) - .arg(speed) - .arg(meshSize)); - outputFiles.push_back(filePath.toStdString()); - } - - return outputFiles; -} diff --git a/src/gui/provider.h b/src/gui/provider.h deleted file mode 100755 index a8f1ede34..000000000 --- a/src/gui/provider.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef PROVIDER_H -#define PROVIDER_H - -#include "appstate.h" -#include "modeldata.h" -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -class Provider { - private: - class NinjaArmyH* ninjaArmy = nullptr; - const char* comType = "cli"; - char** papszOptions = nullptr; - int err = 0; - - public: - Provider(); - int domain_average_exec(class DomainAverageWind& input); - QVector> getTimeZoneData(bool isShowAllTimeZonesSelected); - QVector> parseDomainAvgTable(QTableWidget* table); - vector getOutputFileNames(QString demFile, QTableWidget* table, QString meshType, int numFiles, QString outputPath); - QString getKmzFilePaths(); - QString gettimeZoneDetails(const QString& currentTimeZone); - void setMapLayers(); - int point_exec(class PointInitialization& input); - int wxmodel_exec(class WeatherModel& input); - - int fetchDEMBoundingBox(const string demFileOutPut, const string fetch_type, int resolution, double* boundsBox); - int fetchForecast(const string wx_model_type, int numNinjas, const string demFile); - int fetchStationData(int year, int month, int day, int hour, int minute, int numNinjas, const string output_path, int bufferZone, const string bufferUnits, const string demFile, const string osTimeZone, int fetchLatestFlag); - int fetchFromDEMPoint (double adfPoints[2], double adfBuff[2], const string units, double dfCellSize, const string pszDstFile, const string fetchtype); - -}; - -#endif //PROVIDER_H From 171de13acd6748c3cca686d12a65a0d57c4b33fd Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 24 Jul 2025 15:02:27 -0600 Subject: [PATCH 126/435] Added domain average to the solve button execution, WIP --- src/gui/main.cpp | 4 +- src/gui/mainwindow.cpp | 158 +++++++++++++++++++++++++++++++++------ src/gui/mainwindow.h | 1 + src/gui/mainwindow.ui | 22 +----- src/gui/surfaceinput.cpp | 5 ++ src/gui/surfaceinput.h | 2 +- src/ninja/windninja.cpp | 6 +- src/ninja/windninja.h | 6 +- 8 files changed, 152 insertions(+), 52 deletions(-) diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 72f7ae2d2..910ddd0b6 100755 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -40,7 +40,9 @@ #include "splashscreen.h" -int main(int argc, char *argv[]) { +int main(int argc, char *argv[]) +{ + setbuf(stdout, nullptr); int result; diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 55ee598b6..594f270f4 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -297,7 +297,7 @@ MainWindow::MainWindow(QWidget *parent) ui->downloadPointInitData->setIcon(QIcon(":/application_get")); // Populate default location for output location - ui->outputDirectoryTextEdit->setText(downloadsPath); + ui->outputDirectoryLineEdit->setText(downloadsPath); ui->outputDirectoryButton->setIcon(QIcon(":/folder.png")); // Set initial visibility of time zone details @@ -491,14 +491,14 @@ void MainWindow::useWeatherModelInitClicked() void MainWindow::outputDirectoryButtonClicked() { - QString currentPath = ui->outputDirectoryTextEdit->toPlainText(); - QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - QString dirPath = QFileDialog::getExistingDirectory(this, "Select a directory", currentPath, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); - - if (!dirPath.isEmpty()) { - ui->outputDirectoryTextEdit->setText(dirPath); - ui->outputDirectoryTextEdit->setToolTip(dirPath); - } + // QString currentPath = ui->outputDirectoryLineEdit->toPlainText(); + // QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + // QString dirPath = QFileDialog::getExistingDirectory(this, "Select a directory", currentPath, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); + + // if (!dirPath.isEmpty()) { + // ui->outputDirectoryLineEdit->setText(dirPath); + // ui->outputDirectoryLineEdit->setToolTip(dirPath); + // } } void MainWindow::numberOfProcessorsSolveButtonClicked() @@ -508,20 +508,130 @@ void MainWindow::numberOfProcessorsSolveButtonClicked() void MainWindow::solveButtonClicked() { - // // Alias app state, used to determine which type of solution to run - // AppState& state = AppState::instance(); - - // // Determine which run to perform - // if (state.isDomainAverageInitializationValid) { - // DomainAverageWind domainAvgWind = setDomainAverageWind(); - // provider.domain_average_exec(domainAvgWind); - // }else if(state.isPointInitializationValid){ - // PointInitialization pointInit = setPointInitialization(); - // provider.point_exec(pointInit); - // }else if(state.isWeatherModelInitializationValid){ - // WeatherModel weatherModel = setWeatherModel(); - // provider.wxmodel_exec(weatherModel); - // } + AppState& state = AppState::instance(); + + int numNinjas; + NinjaArmyH *ninjaArmy; + char **papszOptions; + const char *initializationMethod; + + if (state.isDomainAverageInitializationValid) + { + initializationMethod = "domain_average"; + QList speeds; + QList directions; + + int rowCount = ui->domainAverageTable->rowCount(); + for (int row = 0; row < rowCount; ++row) { + QTableWidgetItem* speedItem = ui->domainAverageTable->item(row, 0); // speed + QTableWidgetItem* directionItem = ui->domainAverageTable->item(row, 1); // direction + + if (speedItem && directionItem) { + speeds << speedItem->text().toDouble(); + directions << directionItem->text().toDouble(); + } + } + numNinjas = speeds.size(); + bool momentumFlag = ui->momentumSolverCheckBox->isChecked(); + QString speedUnits = ui->tableSpeedUnits->currentText(); + ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), papszOptions); + } + + int err; + for(unsigned int i=0; inumberOfProcessorsSpinBox->value(), papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetNumberCPUs: err = %d\n", err); + } + + err = NinjaSetInitializationMethod(ninjaArmy, i, initializationMethod, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetInitializationMethod: err = %d\n", err); + } + + err = NinjaSetDem(ninjaArmy, i, surfaceInput->getDEMFilePath().toUtf8().constData(), papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetDem: err = %d\n", err); + } + + err = NinjaSetPosition(ninjaArmy, i, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetPosition: err = %d\n", err); + } + + err = NinjaSetInputWindHeight(ninjaArmy, i, ui->inputWindHeightSpinBox->value(), "m", papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetInputWindHeight: err = %d\n", err); + } + + err = NinjaSetOutputWindHeight(ninjaArmy, i, ui->inputWindHeightSpinBox->value(), "ft", papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetOutputWindHeight: err = %d\n", err); + } + + err = NinjaSetOutputSpeedUnits(ninjaArmy, i, ui->tableSpeedUnits->currentText().toUtf8().constData(), papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetOutputSpeedUnits: err = %d\n", err); + } + + err = NinjaSetDiurnalWinds(ninjaArmy, i, ui->diurnalCheckBox->isChecked(), papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetDiurnalWinds: err = %d\n", err); + } + + err = NinjaSetUniVegetation(ninjaArmy, i, ui->vegetationComboBox->currentText().toLower().toUtf8().constData(), papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetUniVegetation: err = %d\n", err); + } + + err = NinjaSetMeshResolutionChoice(ninjaArmy, i, ui->meshResolutionComboBox->currentText().toLower().toUtf8().constData(), papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetMeshResolutionChoice: err = %d\n", err); + } + + err = NinjaSetNumVertLayers(ninjaArmy, i, 20, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetNumVertLayers: err = %d\n", err); + } + + err = NinjaSetOutputPath(ninjaArmy, i, ui->outputDirectoryLineEdit->text().toUtf8().constData(), papszOptions); + + err = NinjaSetGoogOutFlag(ninjaArmy, i, true, papszOptions); + } + + err = NinjaStartRuns(ninjaArmy, ui->numberOfProcessorsSpinBox->value(), papszOptions); + if(err != 1) //NinjaStartRuns returns 1 on success + { + printf("NinjaStartRuns: err = %d\n", err); + } + + err = NinjaDestroyArmy(ninjaArmy, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaDestroyRuns: err = %d\n", err); + } + // vector outputFileList = provider.getOutputFileNames( @@ -529,7 +639,7 @@ void MainWindow::solveButtonClicked() // view->getUi()->domainAverageTable, // view->getUi()->meshResolutionSpinBox->text(), // provider.parseDomainAvgTable(view->getUi()->domainAverageTable).size(), - // view->getUi()->outputDirectoryTextEdit->toPlainText()); + // view->getUi()->outputDirectoryLineEdit->toPlainText()); // view->loadMapKMZ(outputFileList); } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index af4b9b099..ed9478610 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -37,6 +37,7 @@ #include "serverbridge.h" #include "ui_mainwindow.h" #include "appstate.h" +#include "../ninja/windninja.h" #include #include #include diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index c77d5a510..5a60dabe8 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -524,7 +524,7 @@ QFrame::Shadow::Sunken - 5 + 13 @@ -2886,25 +2886,7 @@ li.checked::marker { content: "\2612"; } - - - - 0 - 0 - - - - - 300 - 30 - - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - + true diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 270beb19e..7a58455a9 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -665,4 +665,9 @@ void SurfaceInput::computePointRadius(double north, double east, double south, d pointRadius[2] = radius; } +QString SurfaceInput::getDEMFilePath() +{ + return currentDEMFilePath; +} + diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index 14a2dcbcd..40ef6934b 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -58,6 +58,7 @@ class SurfaceInput : public QObject QWebEngineView* webView, QObject* parent = nullptr); double computeMeshResolution(int index, bool isMomemtumChecked); + QString getDEMFilePath(); signals: void requestRefresh(); @@ -102,7 +103,6 @@ private slots: void computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]); void computePointRadius(double north, double east, double south, double west, double pointRadius[3]); void startFetchDEM(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); - }; #endif // SURFACEINPUT_H diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 9fb2660fe..320691d23 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -102,9 +102,9 @@ extern "C" */ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakeDomainAverageArmy -// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options ) - ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, - const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options ) + ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options ) +// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, +// const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options ) { #ifndef NINJAFOAM diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 12d0a5365..92c8c9c9e 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -79,9 +79,9 @@ typedef int NinjaErr; * Contructor/Destructors *-----------------------------------------------------------------------------*/ WINDNINJADLL_EXPORT NinjaArmyH * NinjaMakeDomainAverageArmy -// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options); - ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, - const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char* airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options); + ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options); +// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, +// const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char* airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options); //TODO: add helper function to generate arrays of years, months, days, hours, and minutes from a station file WINDNINJADLL_EXPORT NinjaArmyH * NinjaMakePointArmy From 9034e14bd2f407481ca69bc28ce837a5d1fa54d7 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 24 Jul 2025 15:56:53 -0600 Subject: [PATCH 127/435] Added kmz map loading back in, domain average should be working in a bare bones state --- src/gui/mainwindow.cpp | 33 ++++++++++++++++++++++++--------- src/gui/surfaceinput.cpp | 5 +++-- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 594f270f4..a90a1547d 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -514,12 +514,12 @@ void MainWindow::solveButtonClicked() NinjaArmyH *ninjaArmy; char **papszOptions; const char *initializationMethod; + QList speeds; + QList directions; if (state.isDomainAverageInitializationValid) { initializationMethod = "domain_average"; - QList speeds; - QList directions; int rowCount = ui->domainAverageTable->rowCount(); for (int row = 0; row < rowCount; ++row) { @@ -632,16 +632,31 @@ void MainWindow::solveButtonClicked() printf("NinjaDestroyRuns: err = %d\n", err); } + vector outputFiles; + QDir outDir(ui->outputDirectoryLineEdit->text()); + QString demName = QFileInfo(ui->elevationInputFileLineEdit->text()).baseName(); + int meshInt = static_cast(std::round(ui->meshResolutionSpinBox->value())); + QString meshSize = QString::number(meshInt) + "m"; + + for (int i = 0; i < numNinjas; i++) { + QString filePath = outDir.filePath(QString("%1_%2_%3_%4.kmz") + .arg(demName) + .arg(directions[i]) + .arg(speeds[i]) + .arg(meshSize)); + outputFiles.push_back(filePath.toStdString()); + } + for (const auto& dir : outputFiles) { + QString qDir = QString::fromStdString(dir); - // vector outputFileList = provider.getOutputFileNames( - // view->getUi()->elevationInputFileLineEdit->text(), - // view->getUi()->domainAverageTable, - // view->getUi()->meshResolutionSpinBox->text(), - // provider.parseDomainAvgTable(view->getUi()->domainAverageTable).size(), - // view->getUi()->outputDirectoryLineEdit->toPlainText()); + QFile f(qDir); + f.open(QIODevice::ReadOnly); + QByteArray data = f.readAll(); + QString base64 = data.toBase64(); - // view->loadMapKMZ(outputFileList); + webView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + } } void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 7a58455a9..23f08c28c 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -239,9 +239,10 @@ void SurfaceInput::meshResolutionComboBoxCurrentIndexChanged(int index) void SurfaceInput::elevationInputFileLineEditTextChanged(const QString &arg1) { - computeDEMFile(currentDEMFilePath); - computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked()); + QFileInfo file(currentDEMFilePath); + ui->outputDirectoryLineEdit->setText(file.absolutePath()); + computeDEMFile(currentDEMFilePath); ui->meshResolutionSpinBox->setValue(computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); QStringList cornerStrs; From 5c77ab416c7420f41bcf05af47320a80365eedf4 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 25 Jul 2025 14:55:18 -0600 Subject: [PATCH 128/435] Able to display legends alongside kmz files, still WIP --- data/map.html | 94 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 58 insertions(+), 36 deletions(-) diff --git a/data/map.html b/data/map.html index f19c9cf35..b770721ca 100755 --- a/data/map.html +++ b/data/map.html @@ -174,45 +174,67 @@ rectangleDrawer.disable(); } - async function loadKmzFromBase64(base64Data) { - try { - const binary = atob(base64Data); - const bytes = new Uint8Array(binary.length); - for (let i = 0; i < binary.length; i++) { - bytes[i] = binary.charCodeAt(i); - } - - const zip = await JSZip.loadAsync(bytes.buffer); - const kmlFiles = Object.values(zip.files).filter(entry => - entry.name.toLowerCase().endsWith('.kml') - ); - - if (kmlFiles.length === 0) { - alert('No KML files found in this KMZ.'); - return; - } - - const kmlGroup = L.featureGroup().addTo(map); - for (const entry of kmlFiles) { - const kmlText = await entry.async('string'); - const parser = new DOMParser(); - const kml = parser.parseFromString(kmlText, 'text/xml'); - const track = new L.KML(kml); - kmlGroup.addLayer(track); - const layerName = entry.name || 'Unnamed Layer'; - layerControl.addOverlay(track, layerName); - } - - setTimeout(() => { - if (kmlGroup.getLayers().length > 0) { - map.fitBounds(kmlGroup.getBounds()); - } - }, 1000); - } catch (err) { - console.error('Failed to load KMZ from base64:', err); + async function loadKmzFromBase64(kmlData) { + const binary = atob(kmlData); + const bytes = new Uint8Array(binary.length); + for (let i = 0; i < binary.length; i++) { + bytes[i] = binary.charCodeAt(i); + } + const zip = await JSZip.loadAsync(bytes.buffer); + + const kmlEntries = Object.values(zip.files).filter(entry => + entry.name.toLowerCase().endsWith('.kml') + ); + const legendEntries = Object.values(zip.files).filter(entry => + entry.name.toLowerCase().endsWith('.bmp') + ); + + if (kmlEntries.length === 0) { + alert('No KML files found in this KMZ.'); + return; + } + + for (const entry of kmlEntries) { + const kmlText = await entry.async('string'); + const parser = new DOMParser(); + const kmlDoc = parser.parseFromString(kmlText, 'text/xml'); + const kmlLayer = new L.KML(kmlDoc); + + const kmlLegendLayer = L.layerGroup([kmlLayer]); + + const layerName = entry.name; + + const legendControl = L.control({ position: 'bottomright' }); + legendControl.onAdd = function () { + const container = L.DomUtil.create('div', 'kmz-legend'); + container.style.background = 'white'; + container.style.padding = '4px'; + container.style.borderRadius = '6px'; + container.style.maxWidth = '250px'; + container.innerHTML = `${layerName}
`; + + legendEntries.forEach(async (legendEntry) => { + const blob = await legendEntry.async('blob'); + const url = URL.createObjectURL(blob); + const img = new Image(); + img.src = url; + img.style.maxWidth = '80%'; + img.style.marginTop = '6px'; + container.appendChild(img); + }); + + return container; + }; + + kmlLegendLayer.on('add', () => legendControl.addTo(map)); + kmlLegendLayer.on('remove', () => legendControl.remove()); + + layerControl.addOverlay(kmlLegendLayer, layerName); + kmlLegendLayer.addTo(map); } } + map.on('draw:created', ({ layer }) => { mapRectangleLayer.clearLayers(); mapRectangleLayer.addLayer(layer); From 6408ac1ba9beb77d340ccdfe4170a279a6862be9 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 25 Jul 2025 15:09:49 -0600 Subject: [PATCH 129/435] Created a prepareArmy helper function, will continue to create helper functions as needed --- src/gui/mainwindow.cpp | 166 ++++++++++++++++++++--------------------- src/gui/mainwindow.h | 2 +- 2 files changed, 84 insertions(+), 84 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index a90a1547d..7abfe4fbd 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -523,8 +523,8 @@ void MainWindow::solveButtonClicked() int rowCount = ui->domainAverageTable->rowCount(); for (int row = 0; row < rowCount; ++row) { - QTableWidgetItem* speedItem = ui->domainAverageTable->item(row, 0); // speed - QTableWidgetItem* directionItem = ui->domainAverageTable->item(row, 1); // direction + QTableWidgetItem* speedItem = ui->domainAverageTable->item(row, 0); + QTableWidgetItem* directionItem = ui->domainAverageTable->item(row, 1); if (speedItem && directionItem) { speeds << speedItem->text().toDouble(); @@ -537,6 +537,79 @@ void MainWindow::solveButtonClicked() ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), papszOptions); } + prepareArmy(ninjaArmy, numNinjas, initializationMethod); + + int err = NinjaStartRuns(ninjaArmy, ui->numberOfProcessorsSpinBox->value(), papszOptions); + if(err != 1) //NinjaStartRuns returns 1 on success + { + printf("NinjaStartRuns: err = %d\n", err); + } + + err = NinjaDestroyArmy(ninjaArmy, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaDestroyRuns: err = %d\n", err); + } + + vector outputFiles; + QDir outDir(ui->outputDirectoryLineEdit->text()); + QString demName = QFileInfo(ui->elevationInputFileLineEdit->text()).baseName(); + int meshInt = static_cast(std::round(ui->meshResolutionSpinBox->value())); + QString meshSize = QString::number(meshInt) + "m"; + + for (int i = 0; i < numNinjas; i++) { + QString filePath = outDir.filePath(QString("%1_%2_%3_%4.kmz") + .arg(demName) + .arg(directions[i]) + .arg(speeds[i]) + .arg(meshSize)); + outputFiles.push_back(filePath.toStdString()); + } + + for (const auto& dir : outputFiles) { + QString qDir = QString::fromStdString(dir); + + QFile f(qDir); + f.open(QIODevice::ReadOnly); + QByteArray data = f.readAll(); + QString base64 = data.toBase64(); + + webView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + } +} + +void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) +{ + if (item->text(0) == "Conservation of Mass") + { + ui->massSolverCheckBox->click(); + } else if (item->text(0) == "Conservation of Mass and Momentum") + { + ui->momentumSolverCheckBox->click(); + } else if (item->text(0) == "Diurnal Input") + { + ui->diurnalCheckBox->click(); + } else if (item->text(0) == "Stability Input") + { + ui->stabilityCheckBox->click(); + } else if (item->text(0) == "Domain Average Wind") + { + ui->domainAverageCheckBox->click(); + } else if (item->text(0) == "Point Initialization") + { + ui->pointInitializationCheckBox->click(); + } else if (item->text(0) == "Weather Model") + { + ui->weatherModelCheckBox->click(); + } else if (item->text(0) == "Surface Input") + { + surfaceInput->elevationInputFileOpenButtonClicked(); + } +} + +void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* initializationMethod) +{ + char **papszOptions = nullptr; int err; for(unsigned int i=0; ioutputDirectoryLineEdit->text().toUtf8().constData(), papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetOutputPath: err = %d\n", err); + } err = NinjaSetGoogOutFlag(ninjaArmy, i, true, papszOptions); - } - - err = NinjaStartRuns(ninjaArmy, ui->numberOfProcessorsSpinBox->value(), papszOptions); - if(err != 1) //NinjaStartRuns returns 1 on success - { - printf("NinjaStartRuns: err = %d\n", err); - } - - err = NinjaDestroyArmy(ninjaArmy, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaDestroyRuns: err = %d\n", err); - } - - vector outputFiles; - QDir outDir(ui->outputDirectoryLineEdit->text()); - QString demName = QFileInfo(ui->elevationInputFileLineEdit->text()).baseName(); - int meshInt = static_cast(std::round(ui->meshResolutionSpinBox->value())); - QString meshSize = QString::number(meshInt) + "m"; - - for (int i = 0; i < numNinjas; i++) { - QString filePath = outDir.filePath(QString("%1_%2_%3_%4.kmz") - .arg(demName) - .arg(directions[i]) - .arg(speeds[i]) - .arg(meshSize)); - outputFiles.push_back(filePath.toStdString()); - } - - for (const auto& dir : outputFiles) { - QString qDir = QString::fromStdString(dir); - - QFile f(qDir); - f.open(QIODevice::ReadOnly); - QByteArray data = f.readAll(); - QString base64 = data.toBase64(); - - webView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); - } -} - -void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) -{ - if (item->text(0) == "Conservation of Mass") - { - ui->massSolverCheckBox->click(); - } else if (item->text(0) == "Conservation of Mass and Momentum") - { - ui->momentumSolverCheckBox->click(); - } else if (item->text(0) == "Diurnal Input") - { - ui->diurnalCheckBox->click(); - } else if (item->text(0) == "Stability Input") - { - ui->stabilityCheckBox->click(); - } else if (item->text(0) == "Domain Average Wind") - { - ui->domainAverageCheckBox->click(); - } else if (item->text(0) == "Point Initialization") - { - ui->pointInitializationCheckBox->click(); - } else if (item->text(0) == "Weather Model") - { - ui->weatherModelCheckBox->click(); - } else if (item->text(0) == "Surface Input") - { - surfaceInput->elevationInputFileOpenButtonClicked(); - } -} - -void MainWindow::loadMapKMZ(const std::vector& input){ - for (const auto& dir : input) { - QString qDir = QString::fromStdString(dir); - - QFile f(qDir); - f.open(QIODevice::ReadOnly); - QByteArray data = f.readAll(); - QString base64 = data.toBase64(); - - webView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetGoogOutFlag: err = %d\n", err); + } } } - diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index ed9478610..f3938a061 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -114,7 +114,7 @@ private slots: void connectSignals(); void treeItemClicked(QTreeWidgetItem *item, int column); - + void prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* initializationMethod); }; #endif // MAINWINDOW_H From d55aa6f6c81bea023bcf75df3e9b3ef1d2e06714 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 25 Jul 2025 17:31:23 -0600 Subject: [PATCH 130/435] Started implementing the output pages, current WIP --- src/gui/mainwindow.cpp | 17 +- src/gui/mainwindow.ui | 3265 +++++++++++++++++++++++++--------------- 2 files changed, 2051 insertions(+), 1231 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 7abfe4fbd..1720979fe 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -252,9 +252,10 @@ MainWindow::MainWindow(QWidget *parent) */ // Top-level items ui->inputsStackedWidget->setCurrentIndex(0); - ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); // Solver Methodology (Page 0) - ui->treeWidget->topLevelItem(1)->setData(0, Qt::UserRole, 4); // Inputs (Page 5) - ui->treeWidget->topLevelItem(2)->setData(0, Qt::UserRole, 12); // Inputs (Page 13) + ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); + ui->treeWidget->topLevelItem(1)->setData(0, Qt::UserRole, 4); + ui->treeWidget->topLevelItem(2)->setData(0, Qt::UserRole, 12); + ui->treeWidget->topLevelItem(3)->setData(0, Qt::UserRole, 18); // Sub-items for Solver Methodology ui->treeWidget->topLevelItem(0)->child(0)->setData(0, Qt::UserRole, 2); // Conservation of Mass (Page 1) @@ -272,6 +273,14 @@ MainWindow::MainWindow(QWidget *parent) windInputItem->child(1)->setData(0, Qt::UserRole, 10); // Point Init (Page 10) windInputItem->child(2)->setData(0, Qt::UserRole, 11); // Weather Model (Page 11) + // Sub-items for Outputs + ui->treeWidget->topLevelItem(2)->child(0)->setData(0, Qt::UserRole, 13); // Surface Input (Page 6) + ui->treeWidget->topLevelItem(2)->child(1)->setData(0, Qt::UserRole, 14); // Dirunal Input (Page 7) + ui->treeWidget->topLevelItem(2)->child(2)->setData(0, Qt::UserRole, 15); // Stability Input (Page 8) + ui->treeWidget->topLevelItem(2)->child(3)->setData(0, Qt::UserRole, 16); // Wind Input (Page 9) + ui->treeWidget->topLevelItem(2)->child(4)->setData(0, Qt::UserRole, 17); // Wind Input (Page 9) + + connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); /* @@ -344,7 +353,7 @@ void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { int pageIndex = item->data(column, Qt::UserRole).toInt(); if (pageIndex >= 0) { if(pageIndex >= 6) { - ui->inputsStackedWidget->setCurrentIndex(pageIndex+1); + ui->inputsStackedWidget->setCurrentIndex(pageIndex); } else { ui->inputsStackedWidget->setCurrentIndex(pageIndex); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 5a60dabe8..89640873f 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -468,6 +468,36 @@
+ + + Outputs + + + + Google Earth + + + + + Fire Behavior + + + + + Shape Files + + + + + GeoSpatial PDF Files + + + + + VTK Files + + + Solver @@ -524,7 +554,7 @@ QFrame::Shadow::Sunken - 13 + 17 @@ -1222,231 +1252,350 @@ li.checked::marker { content: "\2612"; }
- - + + + + 0 + 0 + + + + + 0 + + + QLayout::SizeConstraint::SetNoConstraint + + + 5 + + + 5 + + + 5 + + + 5 + - + + + PointingHandCursor + + + Use Diurnal Wind + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Expanding + + + + 20 + 40 + + + + + + + + + + 0 + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 0 + 0 + + + + PointingHandCursor + + + Use Stability + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + 6 + + + 5 + + + 5 + + + 5 + + + 5 + + + 0 0 + + + 0 + 5 + + + + PointingHandCursor + + + Domain Average Wind + + + + + + + + 0 + 100 + + - Elevation Input Type + Input Wind Height - - - - - - - - 0 - 0 - - - - - Bounding Box - - - - - Point Radius - - - - + + + + + PointingHandCursor + - - - - 0 - 0 - - - - - WORLD SRTM (30m) - - - - - WORLD GMTED (250m) - - - - - Landscape File - - - + + 20ft-US + - - - Draw - - - true - - - false - - + + 10m-SI + - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - + + Custom + - + - - + + + + false + + + PointingHandCursor + + + 0.010000000000000 + + + 20.000000000000000 + + + + + + + false + - + 0 0 - - 0 + + false - - - - - - North - - - - - - - - - - South - - - - - - - - - - East - - - - - - - - - - West - - - - - - - - - - - - - - - 0 - 0 - - - - Center Lat - - - - - - - - - - Center Lon - - - - - - - - - - - 0 - 0 - - - - Radius (miles) - - - - - - - - + + + Feet + + + + + Meters + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + - + - + + + Table Unites: + + + + + - + 0 0 - - Download File + + + 60 + 0 + + + + + 60 + 16777215 + + + + PointingHandCursor + + + + mph + + + + + m/s + + + + + kph + + + + + kts + + + + + + + + + 0 + 0 + + + + + 40 + 0 + + + + 40 + 16777215 + + + + PointingHandCursor + + + Qt::LayoutDirection::LeftToRight + + + + °F + + + + + °C + + - + - + 0 0 + + PointingHandCursor + - Cancel + Clear Table - + Qt::Orientation::Horizontal @@ -1461,82 +1610,195 @@ li.checked::marker { content: "\2612"; } - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Expanding + + + + 1 + 0 + - + - 20 - 40 + 100 + 0 - - - - - - - - 0 - 0 - - - - - 0 - - - QLayout::SizeConstraint::SetNoConstraint - - - 5 - - - 5 - - - 5 - - - 5 - - - - - PointingHandCursor + + true - - Use Diurnal Wind + + QAbstractItemView::DragDropMode::DragDrop - - - - - - Qt::Orientation::Vertical + + Qt::DropAction::MoveAction - - QSizePolicy::Policy::Expanding + + true - - - 20 - 40 - + + 50 - + + false + + + 20 + + + 80 + + + true + + + false + + + 20 + + + 20 + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Speed +(Select) + + + + 10 + + + + + + Direction +(degrees) + + + + + + + 10 + + + + + + Time +(hh:mm) + + + + 10 + + + + + + Date +(mm/dd/yyyy) + + + + 10 + + + + + + Cloud Cover +(%) + + + + 10 + + + + + + Air Temp +(Select) + + + + 10 + + + + - - - - 0 - + + + + 0 + 0 + + + + + 1000 + 16777215 + + + 5 @@ -1550,481 +1812,537 @@ li.checked::marker { content: "\2612"; } 5 - + - + 0 0 + + + 0 + 20 + + + + + 16777215 + 20 + + PointingHandCursor - Use Stability + Point Initialization - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - - 6 - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 0 - 0 - - - - - 0 - 5 - - - - PointingHandCursor - - - Domain Average Wind - - - - - - - - 0 - 100 - + + + + 1 + 0 + - Input Wind Height + Select Weather Stations - + + + 0 + + + 0 + + + 0 + + + 0 + - - - PointingHandCursor + + + 0 - - 20ft-US - + + + + 0 + 0 + + + + + 200 + 16777215 + + + + PointingHandCursor + + + + Download from DEM + + + + + Download by Station ID + + + - - 10m-SI - + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + - - Custom - + + + + 250 + 16777215 + + + + PointingHandCursor + + + + Download Most Recent Data + + + + + Download Between Two Dates + + + - - - - - - false - - - PointingHandCursor - - - 0.010000000000000 - - - 20.000000000000000 - - + - - - false - - - - 0 - 0 - - - - false - - - - Feet - - + - - Meters - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - Table Unites: - - - - - - - - 0 - 0 - - - - - 60 - 0 - - - - - 60 - 16777215 - - - - PointingHandCursor - - - - mph - - - - - m/s - - - - - kph - - - - - kts - - - - - - - - - 0 - 0 - - - - - 40 - 0 - - - - - 40 - 16777215 - - - - PointingHandCursor - - - Qt::LayoutDirection::LeftToRight - - - - °F - - - - - °C - - - - - - - - - 0 - 0 - - - - PointingHandCursor - - - Clear Table - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - 1 - 0 - - - - - 100 - 0 - - - - true - - - QAbstractItemView::DragDropMode::DragDrop - - - Qt::DropAction::MoveAction - - - true - - - 50 - - - false - - - 20 - - - 80 - - - true - - - false - - - 20 - - - 20 - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Speed -(Select) - - - - 10 - - - - - - Direction -(degrees) - - - - - - - 10 - - - - - - Time -(hh:mm) - - - - 10 - - - - - - Date -(mm/dd/yyyy) - - - - 10 - - - - - - Cloud Cover -(%) - - - - 10 - - - - - - Air Temp -(Select) - - - - 10 - - - + + + + 225 + 0 + + + + + 225 + 16777215 + + + + 0 + + + 1 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + Buffer Around DEM + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + PointingHandCursor + + + + + + + PointingHandCursor + + + + mi + + + + + km + + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + 120 + 16777215 + + + + Download Data + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 0 + + + + + + 0 + 0 + + + + + 0 + 50 + + + + + 16777215 + 50 + + + + Input Station IDs + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + KMSO, PNTM8 + + + false + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + 140 + 16777215 + + + + PointingHandCursor + + + Download Data + + + + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + 225 + 0 + + + + + 225 + 16777215 + + + + 1 + + + + + + 0 + 0 + + + + + 0 + 150 + + + + + 10 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Start Time + + + + + + PointingHandCursor + + + true + + + + + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + + 16777215 + 70 + + + + PointingHandCursor + + + End Time + + + + + + true + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + PointingHandCursor + + + Write Station KML + + + + + + + true + + + 10 + + + 300 + + + true + + + false + + + + - - - - 0 - 0 - - - - - 1000 - 16777215 - - - + + 5 @@ -2038,7 +2356,7 @@ li.checked::marker { content: "\2612"; } 5 - + 0 @@ -2061,22 +2379,19 @@ li.checked::marker { content: "\2612"; } PointingHandCursor - Point Initialization + Weather Model Initialization - - - - 1 - 0 - - + - Select Weather Stations + Download Weather Data - + + false + + 0 @@ -2090,583 +2405,773 @@ li.checked::marker { content: "\2612"; } 0 - - - 0 - + - - - - 0 - 0 - - - - - 200 - 16777215 - - + PointingHandCursor - - - Download from DEM - - - - - Download by Station ID - - - - - Qt::Orientation::Horizontal + + + PointingHandCursor - - - 40 - 20 - + + - - - - - - - 250 - 16777215 - + + hour(s) - - PointingHandCursor + + 1 + + + + + + + PointingHandCursor + + + Download Data - - - Download Most Recent Data - - - - - Download Between Two Dates - - - - - - - - - - 225 - 0 - + + + Qt::Orientation::Horizontal - + - 225 - 16777215 + 40 + 20 - - 0 - - - 1 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - Buffer Around DEM - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - PointingHandCursor - - - - - - - PointingHandCursor - - - - mi - - - - - km - - - - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - 120 - 16777215 - - - - Download Data - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 0 - - - - - - 0 - 0 - - - - - 0 - 50 - - - - - 16777215 - 50 - - - - Input Station IDs - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - KMSO, PNTM8 - - - false - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - 140 - 16777215 - - - - PointingHandCursor - - - Download Data - - - - - - + + + + + + + + Downloaded Forecasts + + + + 5 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + true + - + + + + + PointingHandCursor + + + Select Specific Time Steps + + + true + + + false + + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + + 0 + 100 + + + + Output Wind Height + + + + + + PointingHandCursor + + + + 20ft-US + - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - + + 10m-SI + - - - - 225 - 0 - - - - - 225 - 16777215 - - - - 1 - - - - - - 0 - 0 - + + Custom + + + + + + + + false + + + PointingHandCursor + + + 0.010000000000000 + + + 20.000000000000000 + + + + + + + false + + + + 0 + 0 + + + + false + + + + Feet + + + + + Meters + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + Output Speed Units: + + + + + + + + mph + + + + + m/s + + + + + kph + + + + + kts + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Clip output by: + + + + + + + % + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + Write Raw Weather Model Output + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + Create Google Earth Files (*.kmz) + + + true + + + true + + + + + + Vectors + + + + + + Line Width: - + + + + + + 1 + + + + + + + Apply Vector Scaling + + + + + + + Qt::Orientation::Horizontal + + - 0 - 150 + 40 + 20 - - - 10 - - - 0 - - - 0 - - - 0 + + + + + + + + + Legend + + + + + + + Uniform Range - - 0 + + + + Equal Count + + + + + + + Use Consistent Color Scale + + + + + + + Qt::Orientation::Horizontal + + + + 153 + 20 + + + + + + + + + + + Resolution + + + + + + Use Mesh Resolution + + + true + + - - - - 0 - 0 - - - - - 0 - 70 - - - - Start Time - - - - - - PointingHandCursor - - - true - - - - + + + + + + + Meters + + + + + Feet + + - - - - 0 - 0 - - - - - 0 - 70 - + + + Qt::Orientation::Horizontal - + - 16777215 - 70 + 40 + 20 - - PointingHandCursor - - - End Time - - - - - - true - - - - + + + + + + + + + + + + Alternative Color Schemes + + + true + + + + + + + Default + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + Create Fire Behavior Files (*.asc) + + + true + + + + + + Resolution + + + + + + Use Mesh Resolution + + + true + + + + + + + + + + Meters + + + + + Feet + + - + - Qt::Orientation::Vertical + Qt::Orientation::Horizontal - 20 - 40 + 40 + 20 - - - - - - - - PointingHandCursor - - - Write Station KML - - - - - - - true - - - 10 - - - 300 - - - true - - - false - + + + + + Create *.atm file(s) + + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + Create Shape Files (*.sph) + + + true + + + + + + Resolution + + + + + + Use Mesh Resolution + + + true + + + + + + + + + + Meters + + + + + Feet + + + + + + + + - - - - - - 5 - - - 5 - - - 5 - - - 5 - - - - - 0 - 0 - - - - - 0 - 20 - + + + Qt::Orientation::Vertical - + - 16777215 - 20 + 20 + 40 - - PointingHandCursor - - - Weather Model Initialization - - + + + + + - + - Download Weather Data + Create Geospatial PDF Files (*.pdf) - false + true - - - 0 - - - 0 - - - 0 - - - 0 - + + true + + - + + + Vectors + + + + + + Line Width: + + + + + + + 1 + + + + + + + Apply Vector Scaling + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + - - - PointingHandCursor + + + Basemap: - - - PointingHandCursor - - - - - - hour(s) + + + + + + Qt::Orientation::Horizontal - - 1 + + + 40 + 20 + - + + + + + - - - PointingHandCursor - + - Download Data + Size: - + + + + + + + Qt::Orientation::Horizontal @@ -2681,47 +3186,51 @@ li.checked::marker { content: "\2612"; } - + - Downloaded Forecasts + Resolution - - - 5 - - - 0 - - - 0 - - - 0 - - - 0 - + - - - true - - - - - - - PointingHandCursor - + - Select Specific Time Steps + Use Mesh Resolution true - - false - + + + + + + + + + Meters + + + + + Feet + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + @@ -2731,7 +3240,53 @@ li.checked::marker { content: "\2612"; } - + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + Create VTK Files (*.vtk) + + + + + + + + 0 + 0 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Write VTK surface and volume files</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Note that *vtk files are for advanced users and are rarely used by fire managers/modelers</span></p></body></html> + + + + + Qt::Orientation::Vertical @@ -2933,6 +3488,262 @@ li.checked::marker { content: "\2612"; } + + + + + + + 0 + 0 + + + + Elevation Input Type + + + + + + + + + 0 + 0 + + + + + Bounding Box + + + + + Point Radius + + + + + + + + + 0 + 0 + + + + + WORLD SRTM (30m) + + + + + WORLD GMTED (250m) + + + + + Landscape File + + + + + + + + Draw + + + true + + + false + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 + 0 + + + + 0 + + + + + + + North + + + + + + + + + + South + + + + + + + + + + East + + + + + + + + + + West + + + + + + + + + + + + + + + 0 + 0 + + + + Center Lat + + + + + + + + + + Center Lon + + + + + + + + + + + 0 + 0 + + + + Radius (miles) + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + Download File + + + + + + + + 0 + 0 + + + + Cancel + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Expanding + + + + 20 + 40 + + + + + + From 7825e5bbc20e0c7875a4d6678dfd2f1832b07382 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 28 Jul 2025 09:51:32 -0600 Subject: [PATCH 131/435] Pages now shrink properly and order of pages is correct. All combo boxes have appropriate values --- src/gui/mainwindow.cpp | 9 +- src/gui/mainwindow.ui | 276 ++++++++++++++++++++++++++++++++++++++- src/gui/surfaceinput.cpp | 6 +- 3 files changed, 276 insertions(+), 15 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 1720979fe..5c417c2c9 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -253,26 +253,24 @@ MainWindow::MainWindow(QWidget *parent) // Top-level items ui->inputsStackedWidget->setCurrentIndex(0); ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); - ui->treeWidget->topLevelItem(1)->setData(0, Qt::UserRole, 4); - ui->treeWidget->topLevelItem(2)->setData(0, Qt::UserRole, 12); - ui->treeWidget->topLevelItem(3)->setData(0, Qt::UserRole, 18); - // Sub-items for Solver Methodology ui->treeWidget->topLevelItem(0)->child(0)->setData(0, Qt::UserRole, 2); // Conservation of Mass (Page 1) ui->treeWidget->topLevelItem(0)->child(1)->setData(0, Qt::UserRole, 3); // Conservation of Mass and Momentum (Page 2) + ui->treeWidget->topLevelItem(1)->setData(0, Qt::UserRole, 4); // Sub-items for Inputs ui->treeWidget->topLevelItem(1)->child(0)->setData(0, Qt::UserRole, 5); // Surface Input (Page 6) ui->treeWidget->topLevelItem(1)->child(1)->setData(0, Qt::UserRole, 6); // Dirunal Input (Page 7) + ui->treeWidget->topLevelItem(1)->child(2)->setData(0, Qt::UserRole, 7); // Stability Input (Page 8) ui->treeWidget->topLevelItem(1)->child(3)->setData(0, Qt::UserRole, 8); // Wind Input (Page 9) - // Sub-sub-items for Wind Input QTreeWidgetItem *windInputItem = ui->treeWidget->topLevelItem(1)->child(3); windInputItem->child(0)->setData(0, Qt::UserRole, 9); // Domain Average Wind (Page 9) windInputItem->child(1)->setData(0, Qt::UserRole, 10); // Point Init (Page 10) windInputItem->child(2)->setData(0, Qt::UserRole, 11); // Weather Model (Page 11) + ui->treeWidget->topLevelItem(2)->setData(0, Qt::UserRole, 12); // Sub-items for Outputs ui->treeWidget->topLevelItem(2)->child(0)->setData(0, Qt::UserRole, 13); // Surface Input (Page 6) ui->treeWidget->topLevelItem(2)->child(1)->setData(0, Qt::UserRole, 14); // Dirunal Input (Page 7) @@ -280,6 +278,7 @@ MainWindow::MainWindow(QWidget *parent) ui->treeWidget->topLevelItem(2)->child(3)->setData(0, Qt::UserRole, 16); // Wind Input (Page 9) ui->treeWidget->topLevelItem(2)->child(4)->setData(0, Qt::UserRole, 17); // Wind Input (Page 9) + ui->treeWidget->topLevelItem(3)->setData(0, Qt::UserRole, 18); connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 89640873f..f14422f8a 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -554,7 +554,7 @@ QFrame::Shadow::Sunken - 17 + 13 @@ -1397,7 +1397,7 @@ li.checked::marker { content: "\2612"; } - + 0 100 @@ -2529,6 +2529,12 @@ li.checked::marker { content: "\2612"; } 100 + + + 0 + 70 + + Output Wind Height @@ -2694,9 +2700,15 @@ li.checked::marker { content: "\2612"; } + + false + Write Raw Weather Model Output + + true + @@ -2718,6 +2730,18 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 0 + 384 + + Create Google Earth Files (*.kmz) @@ -2730,10 +2754,25 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 0 + 70 + + Vectors + + QLayout::SizeConstraint::SetNoConstraint + @@ -2746,6 +2785,9 @@ li.checked::marker { content: "\2612"; } 1 + + 1.000000000000000 + @@ -2773,12 +2815,36 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 0 + 69 + + Legend + + + 0 + 0 + + + + + 131 + 0 + + Uniform Range @@ -2816,18 +2882,36 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 0 + 114 + + Resolution + + false + Use Mesh Resolution true + + true + @@ -2867,12 +2951,27 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 0 + 69 + + Alternative Color Schemes true + + false + @@ -2921,6 +3020,18 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 0 + 186 + + Create Fire Behavior Files (*.asc) @@ -2930,6 +3041,18 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 0 + 142 + + Resolution @@ -3008,6 +3131,18 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 0 + 158 + + Create Shape Files (*.sph) @@ -3017,6 +3152,18 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 0 + 114 + + Resolution @@ -3047,6 +3194,19 @@ li.checked::marker { content: "\2612"; } + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + @@ -3075,6 +3235,18 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 0 + 300 + + Create Geospatial PDF Files (*.pdf) @@ -3084,9 +3256,21 @@ li.checked::marker { content: "\2612"; } true - + + + + 0 + 0 + + + + + 0 + 70 + + Vectors @@ -3138,7 +3322,30 @@ li.checked::marker { content: "\2612"; } - + + + + 0 + 0 + + + + + 86 + 0 + + + + + TopoFire topo maps + + + + + Hillshade + + + @@ -3165,10 +3372,43 @@ li.checked::marker { content: "\2612"; } - + + + + 0 + 0 + + + + + Letter-8 1/2 x 11 + + + + + Legal-8 1/2 x 14 + + + + + Tabloid-7 11 x 17 + + + - + + + + Portrait + + + + + Landscape + + + @@ -3187,6 +3427,18 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 0 + 70 + + Resolution @@ -3258,6 +3510,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + Create VTK Files (*.vtk) @@ -3436,6 +3694,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + Output Directory diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 23f08c28c..8705a199a 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -152,8 +152,7 @@ void SurfaceInput::pointRadiusLineEditsTextChanged() void SurfaceInput::surfaceInputDownloadCancelButtonClicked() { - int currentIndex = ui->inputsStackedWidget->currentIndex(); - ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); + ui->inputsStackedWidget->setCurrentIndex(5); ui->elevationInputTypeComboBox->setCurrentIndex(0); ui->elevationFileTypeComboBox->setCurrentIndex(0); @@ -223,8 +222,7 @@ void SurfaceInput::surfaceInputDownloadButtonClicked() void SurfaceInput::elevationInputFileDownloadButtonClicked() { - int currentIndex = ui->inputsStackedWidget->currentIndex(); - ui->inputsStackedWidget->setCurrentIndex(currentIndex+1); + ui->inputsStackedWidget->setCurrentIndex(19); } void SurfaceInput::meshResolutionComboBoxCurrentIndexChanged(int index) From a36aba0478ac35f41aba0588c2e6de10e706239f Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 28 Jul 2025 11:30:54 -0600 Subject: [PATCH 132/435] Adjusted the GUI more and added basic state checking for all outputs --- src/gui/appstate.h | 13 ++++ src/gui/mainwindow.cpp | 160 +++++++++++++++++++++++++++++++++++++++++ src/gui/mainwindow.h | 6 ++ src/gui/mainwindow.ui | 144 +++++++++++++++++++++++++++---------- 4 files changed, 285 insertions(+), 38 deletions(-) diff --git a/src/gui/appstate.h b/src/gui/appstate.h index 7230e5de2..be8fdf8ab 100644 --- a/src/gui/appstate.h +++ b/src/gui/appstate.h @@ -61,6 +61,19 @@ class AppState bool isShowAllTimeZonesSelected = false; bool isDisplayTimeZoneDetailsSelected = false; + //Output States + bool isOutputsValid = false; + bool isGoogleEarthToggled = false; + bool isGoogleEarthValid = false; + bool isFireBehaviorToggled = false; + bool isFireBehaviorValid = false; + bool isShapeFilesToggled = false; + bool isShapeFilesValid = false; + bool isGeoSpatialPDFFilesToggled = false; + bool isGeoSpatialPDFFilesValid = false; + bool isVTKFilesToggled = false; + bool isVTKFilesValid = false; + // All Inputs Ok bool isSolverReady = false; diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 5c417c2c9..719964eda 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -156,6 +156,125 @@ void MainWindow::refreshUI() ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad wind input."); } + if(state.isGoogleEarthToggled) + { + if(state.isSurfaceInputValid) + { + state.isGoogleEarthValid = true; + ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + state.isGoogleEarthValid = false; + ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); + ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->child(0)->setToolTip(0, "Cannot read DEM File"); + } + } + else + { + ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, bulletIcon); + } + if(state.isFireBehaviorToggled) + { + if(state.isSurfaceInputValid) + { + state.isFireBehaviorValid = true; + ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + state.isFireBehaviorValid = false; + ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); + ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->child(1)->setToolTip(0, "Cannot read DEM File"); + } + } + else + { + ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, bulletIcon); + } + if(state.isShapeFilesToggled) + { + if(state.isSurfaceInputValid) + { + state.isShapeFilesValid = true; + ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + state.isShapeFilesValid = false; + ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); + ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->child(2)->setToolTip(0, "Cannot read DEM File"); + } + } + else + { + ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, bulletIcon); + } + if(state.isGeoSpatialPDFFilesToggled) + { + if(state.isSurfaceInputValid) + { + state.isGeoSpatialPDFFilesValid = true; + ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + state.isGeoSpatialPDFFilesValid = false; + ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); + ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->child(3)->setToolTip(0, "Cannot read DEM File"); + } + } + else + { + ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, bulletIcon); + } + if(state.isVTKFilesToggled) + { + if(state.isSurfaceInputValid) + { + state.isVTKFilesValid = true; + ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + state.isVTKFilesValid = false; + ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); + ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->child(4)->setToolTip(0, "Cannot read DEM File"); + } + } + else + { + ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, bulletIcon); + } + + + if(state.isGoogleEarthValid || state.isFireBehaviorValid || state.isShapeFilesValid || state.isGeoSpatialPDFFilesValid || state.isVTKFilesValid) + { + state.isOutputsValid = true; + ui->treeWidget->topLevelItem(2)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "No Output Selected"); + } + // Update solve state if (state.isSolverMethodologyValid && state.isInputsValid) { ui->solveButton->setEnabled(true); @@ -346,6 +465,12 @@ void MainWindow::connectSignals() connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); connect(surfaceInput, &SurfaceInput::requestRefresh, this, &MainWindow::refreshUI); connect(domainAverageInput, &DomainAverageInput::requestRefresh, this, &MainWindow::refreshUI); + connect(ui->googleEarthGroupBox, &QGroupBox::toggled, this, &MainWindow::googleEarthGroupBoxCheckBoxClicked); + connect(ui->fireBehaviorGroupBox, &QGroupBox::toggled, this, &MainWindow::fireBehaviorGroupBoxCheckBoxClicked); + connect(ui->shapeFilesGroupBox, &QGroupBox::toggled, this, &MainWindow::shapeFilesGroupBoxCheckBoxClicked); + connect(ui->geospatialPDFFilesGroupBox, &QGroupBox::toggled, this, &MainWindow::geospatialPDFFilesGroupBoxCheckBoxClicked); + connect(ui->VTKFilesCheckBox, &QCheckBox::clicked, this, &MainWindow::VTKFilesCheckBoxClicked); + } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { @@ -615,6 +740,41 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) } } +void MainWindow::googleEarthGroupBoxCheckBoxClicked(bool checked) +{ + AppState& state = AppState::instance(); + state.isGoogleEarthToggled = checked; + refreshUI(); +} + +void MainWindow::fireBehaviorGroupBoxCheckBoxClicked(bool checked) +{ + AppState& state = AppState::instance(); + state.isFireBehaviorToggled = checked; + refreshUI(); +} + +void MainWindow::shapeFilesGroupBoxCheckBoxClicked(bool checked) +{ + AppState& state = AppState::instance(); + state.isShapeFilesToggled = checked; + refreshUI(); +} + +void MainWindow::geospatialPDFFilesGroupBoxCheckBoxClicked(bool checked) +{ + AppState& state = AppState::instance(); + state.isGeoSpatialPDFFilesToggled = checked; + refreshUI(); +} + +void MainWindow::VTKFilesCheckBoxClicked(bool checked) +{ + AppState& state = AppState::instance(); + state.isVTKFilesToggled = checked; + refreshUI(); +} + void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* initializationMethod) { char **papszOptions = nullptr; diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index f3938a061..3a45f2bea 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -100,6 +100,12 @@ private slots: void solveButtonClicked(); void outputDirectoryButtonClicked(); void numberOfProcessorsSolveButtonClicked(); + void googleEarthGroupBoxCheckBoxClicked(bool checked); + void fireBehaviorGroupBoxCheckBoxClicked(bool checked); + void shapeFilesGroupBoxCheckBoxClicked(bool checked); + void geospatialPDFFilesGroupBoxCheckBoxClicked(bool checked); + void VTKFilesCheckBoxClicked(bool checked); + void refreshUI(); private: diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index f14422f8a..2b7eca54e 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -2,6 +2,9 @@ MainWindow + + true + 0 @@ -554,7 +557,7 @@ QFrame::Shadow::Sunken - 13 + 16 @@ -2749,7 +2752,7 @@ li.checked::marker { content: "\2612"; } true - true + false @@ -2881,7 +2884,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -2899,7 +2902,7 @@ li.checked::marker { content: "\2612"; } - + false @@ -2914,10 +2917,16 @@ li.checked::marker { content: "\2612"; } - + - + + + + 0 + 0 + + Meters @@ -2931,7 +2940,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Horizontal @@ -2975,11 +2984,52 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + Default + + + ROPGW (Red Orange Pink Green White) + + + + + Oranges + + + + + Blues + + + + + Pinks + + + + + Greens + + + + + Magic Beans + + + + + Pink to Green + + @@ -3019,7 +3069,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -3038,9 +3088,12 @@ li.checked::marker { content: "\2612"; } true + + false + - + 0 @@ -3058,7 +3111,7 @@ li.checked::marker { content: "\2612"; } - + Use Mesh Resolution @@ -3067,10 +3120,10 @@ li.checked::marker { content: "\2612"; } - + - + Meters @@ -3084,7 +3137,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Horizontal @@ -3100,7 +3153,7 @@ li.checked::marker { content: "\2612"; } - + Create *.atm file(s) @@ -3130,7 +3183,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -3149,9 +3202,12 @@ li.checked::marker { content: "\2612"; } true + + false + - + 0 @@ -3169,7 +3225,7 @@ li.checked::marker { content: "\2612"; } - + Use Mesh Resolution @@ -3178,10 +3234,10 @@ li.checked::marker { content: "\2612"; } - + - + Meters @@ -3195,7 +3251,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Horizontal @@ -3217,7 +3273,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical @@ -3234,7 +3290,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -3254,7 +3310,7 @@ li.checked::marker { content: "\2612"; } true - true + false @@ -3313,16 +3369,16 @@ li.checked::marker { content: "\2612"; } - + - + Basemap: - + 0 @@ -3335,6 +3391,12 @@ li.checked::marker { content: "\2612"; } 0 + + + 170 + 16777215 + + TopoFire topo maps @@ -3348,7 +3410,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Horizontal @@ -3363,7 +3425,7 @@ li.checked::marker { content: "\2612"; } - + @@ -3372,13 +3434,19 @@ li.checked::marker { content: "\2612"; } - + 0 0 + + + 160 + 16777215 + + Letter-8 1/2 x 11 @@ -3397,7 +3465,7 @@ li.checked::marker { content: "\2612"; } - + Portrait @@ -3426,7 +3494,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -3444,7 +3512,7 @@ li.checked::marker { content: "\2612"; } - + Use Mesh Resolution @@ -3453,10 +3521,10 @@ li.checked::marker { content: "\2612"; } - + - + Meters @@ -3470,7 +3538,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Horizontal @@ -3509,7 +3577,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -3522,7 +3590,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -3544,7 +3612,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical From 2d9f846dabb0d04f96632b9c6fa4bd3319dc8b8e Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 28 Jul 2025 11:44:53 -0600 Subject: [PATCH 133/435] Added double click functionality to all outputs --- src/gui/mainwindow.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++ src/gui/mainwindow.ui | 2 +- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 719964eda..87c60b228 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -737,6 +737,57 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) } else if (item->text(0) == "Surface Input") { surfaceInput->elevationInputFileOpenButtonClicked(); + } else if (item->text(0) == "Google Earth") + { + if(!ui->googleEarthGroupBox->isChecked()) + { + ui->googleEarthGroupBox->setChecked(true); + }else + { + ui->googleEarthGroupBox->setChecked(false); + } + } else if (item->text(0) == "Surface Input") + { + surfaceInput->elevationInputFileOpenButtonClicked(); + } else if (item->text(0) == "Google Earth") + { + if(!ui->googleEarthGroupBox->isChecked()) + { + ui->googleEarthGroupBox->setChecked(true); + }else + { + ui->googleEarthGroupBox->setChecked(false); + } + } else if (item->text(0) == "Fire Behavior") + { + if(!ui->fireBehaviorGroupBox->isChecked()) + { + ui->fireBehaviorGroupBox->setChecked(true); + }else + { + ui->fireBehaviorGroupBox->setChecked(false); + } + } else if (item->text(0) == "Shape Files") + { + if(!ui->shapeFilesGroupBox->isChecked()) + { + ui->shapeFilesGroupBox->setChecked(true); + }else + { + ui->shapeFilesGroupBox->setChecked(false); + } + } else if (item->text(0) == "Geospatial PDF Files") + { + if(!ui->geospatialPDFFilesGroupBox->isChecked()) + { + ui->geospatialPDFFilesGroupBox->setChecked(true); + }else + { + ui->geospatialPDFFilesGroupBox->setChecked(false); + } + } else if (item->text(0) == "VTK Files") + { + ui->VTKFilesCheckBox->click(); } } diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 2b7eca54e..39ad7c422 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -492,7 +492,7 @@ - GeoSpatial PDF Files + Geospatial PDF Files From 3f8b2a278d9a50c45dd9e5001c3e742385cdc2c2 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 28 Jul 2025 14:05:40 -0600 Subject: [PATCH 134/435] Added output flags helper function, fixed default values and ranges for GUI widgets, and fixed solver state to match old GUI --- src/gui/mainwindow.cpp | 148 +++++++++++++++++++++++++++++++++------- src/gui/mainwindow.h | 1 + src/gui/mainwindow.ui | 90 +++++++++++++++++------- src/ninja/windninja.cpp | 3 +- 4 files changed, 192 insertions(+), 50 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 87c60b228..0eb23cb43 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -175,6 +175,7 @@ void MainWindow::refreshUI() } else { + state.isGoogleEarthValid = false; ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, bulletIcon); } if(state.isFireBehaviorToggled) @@ -196,6 +197,7 @@ void MainWindow::refreshUI() } else { + state.isFireBehaviorValid = false; ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, bulletIcon); } if(state.isShapeFilesToggled) @@ -217,6 +219,7 @@ void MainWindow::refreshUI() } else { + state.isShapeFilesValid = false; ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, bulletIcon); } if(state.isGeoSpatialPDFFilesToggled) @@ -238,6 +241,7 @@ void MainWindow::refreshUI() } else { + state.isGeoSpatialPDFFilesValid = false; ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, bulletIcon); } if(state.isVTKFilesToggled) @@ -259,6 +263,7 @@ void MainWindow::refreshUI() } else { + state.isVTKFilesValid = false; ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, bulletIcon); } @@ -275,17 +280,20 @@ void MainWindow::refreshUI() ui->treeWidget->topLevelItem(2)->setToolTip(0, "No Output Selected"); } - // Update solve state - if (state.isSolverMethodologyValid && state.isInputsValid) { + if (state.isSolverMethodologyValid && state.isInputsValid && state.isOutputsValid) { ui->solveButton->setEnabled(true); ui->numberOfProcessorsSolveButton->setEnabled(true); ui->solveButton->setToolTip(""); ui->numberOfProcessorsSolveButton->setToolTip(""); + ui->treeWidget->topLevelItem(3)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(3)->setToolTip(0, ""); } else { ui->solveButton->setEnabled(false); ui->numberOfProcessorsSolveButton->setEnabled(false); ui->solveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); ui->numberOfProcessorsSolveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); + ui->treeWidget->topLevelItem(3)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(3)->setToolTip(0, "There are errors in the inputs or outputs"); } } @@ -871,18 +879,6 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i printf("NinjaSetInputWindHeight: err = %d\n", err); } - err = NinjaSetOutputWindHeight(ninjaArmy, i, ui->inputWindHeightSpinBox->value(), "ft", papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaSetOutputWindHeight: err = %d\n", err); - } - - err = NinjaSetOutputSpeedUnits(ninjaArmy, i, ui->tableSpeedUnits->currentText().toUtf8().constData(), papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaSetOutputSpeedUnits: err = %d\n", err); - } - err = NinjaSetDiurnalWinds(ninjaArmy, i, ui->diurnalCheckBox->isChecked(), papszOptions); if(err != NINJA_SUCCESS) { @@ -907,17 +903,121 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i printf("NinjaSetNumVertLayers: err = %d\n", err); } - err = NinjaSetOutputPath(ninjaArmy, i, ui->outputDirectoryLineEdit->text().toUtf8().constData(), papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaSetOutputPath: err = %d\n", err); - } + setOutputFlags(ninjaArmy, i); + } +} - err = NinjaSetGoogOutFlag(ninjaArmy, i, true, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaSetGoogOutFlag: err = %d\n", err); - } +void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i) +{ + char **papszOptions = nullptr; + int err; + + err = NinjaSetOutputPath(ninjaArmy, i, ui->outputDirectoryLineEdit->text().toUtf8().constData(), papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetOutputPath: err =" << err; + } + + err = NinjaSetOutputWindHeight(ninjaArmy, i, ui->outputWindHeightSpinBox->value(), "ft", papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetOutputWindHeight: err =" << err; + } + + err = NinjaSetOutputSpeedUnits(ninjaArmy, i, ui->outputSpeedUnitsComboBox->currentText().toUtf8().constData(), papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetOutputSpeedUnits: err =" << err; + } + + err = NinjaSetGoogOutFlag(ninjaArmy, i, true, papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetGoogOutFlag: err =" << err; + } + + err = NinjaSetGoogResolution(ninjaArmy, i, ui->googleEarthMeshResolutionSpinBox->value(), "m", papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetGoogResolution: err =" << err; + } + + err = NinjaSetGoogSpeedScaling(ninjaArmy, i, "equal_color", papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetGoogSpeedScaling: err =" << err; + } + + err = NinjaSetGoogLineWidth(ninjaArmy, i, ui->googleEarthVectorsSpinBox->value(), papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetGoogLineWidth: err =" << err; + } + + err = NinjaSetAsciiOutFlag(ninjaArmy, i, ui->fireBehaviorGroupBox->isChecked(), papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetAsciiOutFlag: err =" << err; + } + + err = NinjaSetAsciiResolution(ninjaArmy, i, ui->fireBehaviorMeshResolutionSpinBox->value(), "m", papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetAsciiResolution: err =" << err; + } + + err = NinjaSetShpOutFlag(ninjaArmy, i, ui->shapeFilesGroupBox->isChecked(), papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetShpOutFlag: err =" << err; + } + + err = NinjaSetShpResolution(ninjaArmy, i, ui->shapeFilesMeshResolutionSpinBox->value(), "m", papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetShpResolution: err =" << err; + } + + err = NinjaSetPDFOutFlag(ninjaArmy, i, ui->geospatialPDFFilesGroupBox->isChecked(), papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetPDFOutFlag: err =" << err; + } + + err = NinjaSetPDFLineWidth(ninjaArmy, i, ui->geospatialPDFFilesVectorsSpinBox->value(), papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetPDFLineWidth: err =" << err; + } + + err = NinjaSetPDFBaseMap(ninjaArmy, i, 0, papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetPDFBaseMap: err =" << err; + } + + err = NinjaSetPDFDEM(ninjaArmy, i, surfaceInput->getDEMFilePath().toUtf8().constData(), papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetPDFDEM: err =" << err; + } + + err = NinjaSetPDFSize(ninjaArmy, i, 1, 1, 1, papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetPDFSize: err =" << err; + } + + err = NinjaSetPDFResolution(ninjaArmy, i, ui->geospatialPDFFilesMeshResolutionSpinBox->value(), "m", papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetPDFResolution: err =" << err; + } + + err = NinjaSetVtkOutFlag(ninjaArmy, i, ui->VTKFilesCheckBox->isChecked(), papszOptions); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetVtkOutFlag: err =" << err; } } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 3a45f2bea..fcbdce996 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -121,6 +121,7 @@ private slots: void connectSignals(); void treeItemClicked(QTreeWidgetItem *item, int column); void prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* initializationMethod); + void setOutputFlags(NinjaArmyH *ninjaArmy, int i); }; #endif // MAINWINDOW_H diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 39ad7c422..b9669a1bb 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -557,7 +557,7 @@ QFrame::Shadow::Sunken - 16 + 12 @@ -2573,7 +2573,10 @@ li.checked::marker { content: "\2612"; } PointingHandCursor - 0.010000000000000 + 0.000000000000000 + + + 10000.000000000000000 20.000000000000000 @@ -2756,7 +2759,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -2777,31 +2780,34 @@ li.checked::marker { content: "\2612"; } QLayout::SizeConstraint::SetNoConstraint - + Line Width: - + 1 + + 10.000000000000000 + 1.000000000000000 - + Apply Vector Scaling - + Qt::Orientation::Horizontal @@ -2861,7 +2867,7 @@ li.checked::marker { content: "\2612"; } - + Use Consistent Color Scale @@ -2917,7 +2923,14 @@ li.checked::marker { content: "\2612"; } - + + + 5000.000000000000000 + + + 200.000000000000000 + + @@ -3052,7 +3065,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical @@ -3120,7 +3133,14 @@ li.checked::marker { content: "\2612"; } - + + + 5000.000000000000000 + + + 200.000000000000000 + + @@ -3153,7 +3173,7 @@ li.checked::marker { content: "\2612"; } - + Create *.atm file(s) @@ -3166,7 +3186,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical @@ -3234,7 +3254,14 @@ li.checked::marker { content: "\2612"; } - + + + 5000.000000000000000 + + + 200.000000000000000 + + @@ -3314,7 +3341,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -3332,28 +3359,34 @@ li.checked::marker { content: "\2612"; } - + Line Width: - + 1 + + 10.000000000000000 + + + 1.000000000000000 + - + Apply Vector Scaling - + Qt::Orientation::Horizontal @@ -3410,7 +3443,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Horizontal @@ -3427,14 +3460,14 @@ li.checked::marker { content: "\2612"; } - + Size: - + 0 @@ -3465,7 +3498,7 @@ li.checked::marker { content: "\2612"; } - + Portrait @@ -3479,7 +3512,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Horizontal @@ -3521,7 +3554,14 @@ li.checked::marker { content: "\2612"; } - + + + 5000.000000000000000 + + + 200.000000000000000 + + diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 320691d23..efdb7814a 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -1615,7 +1615,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetGoogResolution * * \param army An opaque handle to a valid ninjaArmy. * \param nIndex The run to apply the setting to. - * \param scaling The scaling at which to write the Google Earth output. + * \param scaling The scaling at which to write the Google Earth output. ("equal_color", "color", "equal_interval", "interval") * * \return NINJA_SUCCESS on success, non-zero otherwise. */ @@ -1731,6 +1731,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetAsciiOutFlag } } + /** * \brief Set the resolution of the raster output for a simulation. * From ff127707a0f1a5171dc488897fd04cc088eb0bea Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 28 Jul 2025 15:05:12 -0600 Subject: [PATCH 135/435] Added item data to combo boxes to help avoid if else statement checking for API calls --- src/gui/mainwindow.cpp | 44 +++++----- src/gui/mainwindow.ui | 180 +++++++++++++++++++++++++++++++++++------ 2 files changed, 180 insertions(+), 44 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 0eb23cb43..9a0dfd93c 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -347,9 +347,6 @@ MainWindow::MainWindow(QWidget *parent) ui->treeFileExplorer->expandAll(); - /* - * Functionality for the map widget - */ QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true); QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); @@ -407,13 +404,6 @@ MainWindow::MainWindow(QWidget *parent) ui->treeWidget->topLevelItem(3)->setData(0, Qt::UserRole, 18); - connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); - - /* - * Downloaded Forecast explorer - */ - populateForecastDownloads(); - /* * Basic initial setup steps */ @@ -445,6 +435,20 @@ MainWindow::MainWindow(QWidget *parent) ui->domainAverageTable->hideColumn(5); ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + ui->outputWindHeightUnitsComboBox->setItemData(0, "ft"); + ui->outputWindHeightUnitsComboBox->setItemData(1, "m"); + ui->googleEarthMeshResolutionComboBox->setItemData(0, "m"); + ui->googleEarthMeshResolutionComboBox->setItemData(1, "ft"); + ui->fireBehaviorMeshResolutionComboBox->setItemData(0, "m"); + ui->fireBehaviorMeshResolutionComboBox->setItemData(1, "ft"); + ui->shapeFilesMeshResolutionComboBox->setItemData(0, "m"); + ui->shapeFilesMeshResolutionComboBox->setItemData(1, "ft"); + ui->geospatialPDFFilesMeshResolutionComboBox->setItemData(0, "m"); + ui->geospatialPDFFilesMeshResolutionComboBox->setItemData(1, "ft"); + + ui->legendComboBox->setItemData(0, "equal_interval"); + ui->legendComboBox->setItemData(0, "equal_color"); + connectSignals(); } @@ -478,7 +482,7 @@ void MainWindow::connectSignals() connect(ui->shapeFilesGroupBox, &QGroupBox::toggled, this, &MainWindow::shapeFilesGroupBoxCheckBoxClicked); connect(ui->geospatialPDFFilesGroupBox, &QGroupBox::toggled, this, &MainWindow::geospatialPDFFilesGroupBoxCheckBoxClicked); connect(ui->VTKFilesCheckBox, &QCheckBox::clicked, this, &MainWindow::VTKFilesCheckBoxClicked); - + connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { @@ -918,7 +922,7 @@ void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i) qDebug() << "NinjaSetOutputPath: err =" << err; } - err = NinjaSetOutputWindHeight(ninjaArmy, i, ui->outputWindHeightSpinBox->value(), "ft", papszOptions); + err = NinjaSetOutputWindHeight(ninjaArmy, i, ui->outputWindHeightSpinBox->value(), ui->outputWindHeightUnitsComboBox->itemData(ui->outputWindHeightUnitsComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetOutputWindHeight: err =" << err; @@ -930,19 +934,19 @@ void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i) qDebug() << "NinjaSetOutputSpeedUnits: err =" << err; } - err = NinjaSetGoogOutFlag(ninjaArmy, i, true, papszOptions); + err = NinjaSetGoogOutFlag(ninjaArmy, i, ui->googleEarthGroupBox->isChecked(), papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetGoogOutFlag: err =" << err; } - err = NinjaSetGoogResolution(ninjaArmy, i, ui->googleEarthMeshResolutionSpinBox->value(), "m", papszOptions); + err = NinjaSetGoogResolution(ninjaArmy, i, ui->googleEarthMeshResolutionSpinBox->value(), ui->googleEarthMeshResolutionComboBox->itemData(ui->googleEarthMeshResolutionComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetGoogResolution: err =" << err; } - err = NinjaSetGoogSpeedScaling(ninjaArmy, i, "equal_color", papszOptions); + err = NinjaSetGoogSpeedScaling(ninjaArmy, i, ui->legendComboBox->itemData(ui->legendComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetGoogSpeedScaling: err =" << err; @@ -960,7 +964,7 @@ void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i) qDebug() << "NinjaSetAsciiOutFlag: err =" << err; } - err = NinjaSetAsciiResolution(ninjaArmy, i, ui->fireBehaviorMeshResolutionSpinBox->value(), "m", papszOptions); + err = NinjaSetAsciiResolution(ninjaArmy, i, ui->fireBehaviorMeshResolutionSpinBox->value(), ui->fireBehaviorMeshResolutionComboBox->itemData(ui->fireBehaviorMeshResolutionComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetAsciiResolution: err =" << err; @@ -972,7 +976,7 @@ void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i) qDebug() << "NinjaSetShpOutFlag: err =" << err; } - err = NinjaSetShpResolution(ninjaArmy, i, ui->shapeFilesMeshResolutionSpinBox->value(), "m", papszOptions); + err = NinjaSetShpResolution(ninjaArmy, i, ui->shapeFilesMeshResolutionSpinBox->value(), ui->shapeFilesMeshResolutionComboBox->itemData(ui->shapeFilesMeshResolutionComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetShpResolution: err =" << err; @@ -990,7 +994,7 @@ void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i) qDebug() << "NinjaSetPDFLineWidth: err =" << err; } - err = NinjaSetPDFBaseMap(ninjaArmy, i, 0, papszOptions); + err = NinjaSetPDFBaseMap(ninjaArmy, i, ui->basemapComboBox->currentIndex(), papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetPDFBaseMap: err =" << err; @@ -1002,13 +1006,13 @@ void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i) qDebug() << "NinjaSetPDFDEM: err =" << err; } - err = NinjaSetPDFSize(ninjaArmy, i, 1, 1, 1, papszOptions); + err = NinjaSetPDFSize(ninjaArmy, i, 11, 8.5, 150, papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetPDFSize: err =" << err; } - err = NinjaSetPDFResolution(ninjaArmy, i, ui->geospatialPDFFilesMeshResolutionSpinBox->value(), "m", papszOptions); + err = NinjaSetPDFResolution(ninjaArmy, i, ui->geospatialPDFFilesMeshResolutionSpinBox->value(), ui->geospatialPDFFilesMeshResolutionComboBox->itemData(ui->geospatialPDFFilesMeshResolutionComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetPDFResolution: err =" << err; diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index b9669a1bb..5926ecade 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -557,7 +557,7 @@ QFrame::Shadow::Sunken - 12 + 16 @@ -2643,7 +2643,7 @@ li.checked::marker { content: "\2612"; } - m/s + mps @@ -2841,7 +2841,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -2906,11 +2906,20 @@ li.checked::marker { content: "\2612"; } Resolution - + - - false + + + 0 + 0 + + + + + 0 + 70 + Use Mesh Resolution @@ -2918,12 +2927,12 @@ li.checked::marker { content: "\2612"; } true - - true - - + + + false + 5000.000000000000000 @@ -2934,12 +2943,27 @@ li.checked::marker { content: "\2612"; } + + false + - + 0 0 + + + 80 + 0 + + + + + 80 + 16777215 + + Meters @@ -2959,7 +2983,7 @@ li.checked::marker { content: "\2612"; } - 40 + 302 20 @@ -3108,7 +3132,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -3116,24 +3140,39 @@ li.checked::marker { content: "\2612"; } 0 - 142 + 114 Resolution - + + + + 0 + 0 + + + + + 0 + 70 + + Use Mesh Resolution true - + + + false + 5000.000000000000000 @@ -3144,6 +3183,27 @@ li.checked::marker { content: "\2612"; } + + false + + + + 0 + 0 + + + + + 80 + 0 + + + + + 80 + 16777215 + + Meters @@ -3163,7 +3223,7 @@ li.checked::marker { content: "\2612"; } - 40 + 302 20 @@ -3243,18 +3303,33 @@ li.checked::marker { content: "\2612"; } Resolution - + + + + 0 + 0 + + + + + 0 + 70 + + Use Mesh Resolution true - + + + false + 5000.000000000000000 @@ -3265,6 +3340,27 @@ li.checked::marker { content: "\2612"; } + + false + + + + 0 + 0 + + + + + 80 + 0 + + + + + 80 + 16777215 + + Meters @@ -3284,7 +3380,7 @@ li.checked::marker { content: "\2612"; } - 40 + 302 20 @@ -3537,24 +3633,39 @@ li.checked::marker { content: "\2612"; } 0 - 70 + 114 Resolution - + + + + 0 + 0 + + + + + 0 + 70 + + Use Mesh Resolution true - + + + false + 5000.000000000000000 @@ -3565,6 +3676,27 @@ li.checked::marker { content: "\2612"; } + + false + + + + 0 + 0 + + + + + 80 + 0 + + + + + 80 + 16777215 + + Meters @@ -3584,7 +3716,7 @@ li.checked::marker { content: "\2612"; } - 40 + 302 20 From 6035e341afc2912d8048e6dc9bcee9be01025792 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 28 Jul 2025 15:30:44 -0600 Subject: [PATCH 136/435] Added functions to toggle the mesh resolution on and off for each output --- src/gui/mainwindow.cpp | 44 ++++++++++++++++++++++++++++++++++-------- src/gui/mainwindow.h | 13 +++++++++---- 2 files changed, 45 insertions(+), 12 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 9a0dfd93c..b1422b384 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -477,11 +477,15 @@ void MainWindow::connectSignals() connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); connect(surfaceInput, &SurfaceInput::requestRefresh, this, &MainWindow::refreshUI); connect(domainAverageInput, &DomainAverageInput::requestRefresh, this, &MainWindow::refreshUI); - connect(ui->googleEarthGroupBox, &QGroupBox::toggled, this, &MainWindow::googleEarthGroupBoxCheckBoxClicked); - connect(ui->fireBehaviorGroupBox, &QGroupBox::toggled, this, &MainWindow::fireBehaviorGroupBoxCheckBoxClicked); - connect(ui->shapeFilesGroupBox, &QGroupBox::toggled, this, &MainWindow::shapeFilesGroupBoxCheckBoxClicked); - connect(ui->geospatialPDFFilesGroupBox, &QGroupBox::toggled, this, &MainWindow::geospatialPDFFilesGroupBoxCheckBoxClicked); + connect(ui->googleEarthGroupBox, &QGroupBox::toggled, this, &MainWindow::googleEarthGroupBoxToggled); + connect(ui->fireBehaviorGroupBox, &QGroupBox::toggled, this, &MainWindow::fireBehaviorGroupBoxToggled); + connect(ui->shapeFilesGroupBox, &QGroupBox::toggled, this, &MainWindow::shapeFilesGroupBoxToggled); + connect(ui->geospatialPDFFilesGroupBox, &QGroupBox::toggled, this, &MainWindow::geospatialPDFFilesGroupBoxToggled); connect(ui->VTKFilesCheckBox, &QCheckBox::clicked, this, &MainWindow::VTKFilesCheckBoxClicked); + connect(ui->googleEarthMeshResolutionGroupBox, &QGroupBox::toggled, this, &MainWindow::googleEarthMeshResolutionGroupBoxToggled); + connect(ui->fireBehaviorMeshResolutionGroupBox, &QGroupBox::toggled, this, &MainWindow::fireBehaviorMeshResolutionGroupBoxToggled); + connect(ui->shapeFilesMeshResolutionGroupBox, &QGroupBox::toggled, this, &MainWindow::shapeFilesMeshResolutionGroupBoxToggled); + connect(ui->geospatialPDFFilesMeshResolutionGroupBox, &QGroupBox::toggled, this, &MainWindow::geospatialPDFFilesMeshResolutionGroupBoxToggled); connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); } @@ -803,28 +807,28 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) } } -void MainWindow::googleEarthGroupBoxCheckBoxClicked(bool checked) +void MainWindow::googleEarthGroupBoxToggled(bool checked) { AppState& state = AppState::instance(); state.isGoogleEarthToggled = checked; refreshUI(); } -void MainWindow::fireBehaviorGroupBoxCheckBoxClicked(bool checked) +void MainWindow::fireBehaviorGroupBoxToggled(bool checked) { AppState& state = AppState::instance(); state.isFireBehaviorToggled = checked; refreshUI(); } -void MainWindow::shapeFilesGroupBoxCheckBoxClicked(bool checked) +void MainWindow::shapeFilesGroupBoxToggled(bool checked) { AppState& state = AppState::instance(); state.isShapeFilesToggled = checked; refreshUI(); } -void MainWindow::geospatialPDFFilesGroupBoxCheckBoxClicked(bool checked) +void MainWindow::geospatialPDFFilesGroupBoxToggled(bool checked) { AppState& state = AppState::instance(); state.isGeoSpatialPDFFilesToggled = checked; @@ -838,6 +842,30 @@ void MainWindow::VTKFilesCheckBoxClicked(bool checked) refreshUI(); } +void MainWindow::googleEarthMeshResolutionGroupBoxToggled(bool checked) +{ + ui->googleEarthMeshResolutionSpinBox->setEnabled(!checked); + ui->googleEarthMeshResolutionComboBox->setEnabled(!checked); +} + +void MainWindow::fireBehaviorMeshResolutionGroupBoxToggled(bool checked) +{ + ui->fireBehaviorMeshResolutionSpinBox->setEnabled(!checked); + ui->fireBehaviorMeshResolutionComboBox->setEnabled(!checked); +} + +void MainWindow::shapeFilesMeshResolutionGroupBoxToggled(bool checked) +{ + ui->shapeFilesMeshResolutionSpinBox->setEnabled(!checked); + ui->shapeFilesMeshResolutionComboBox->setEnabled(!checked); +} + +void MainWindow::geospatialPDFFilesMeshResolutionGroupBoxToggled(bool checked) +{ + ui->geospatialPDFFilesMeshResolutionSpinBox->setEnabled(!checked); + ui->geospatialPDFFilesMeshResolutionComboBox->setEnabled(!checked); +} + void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* initializationMethod) { char **papszOptions = nullptr; diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index fcbdce996..e9d4992c7 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -100,11 +100,16 @@ private slots: void solveButtonClicked(); void outputDirectoryButtonClicked(); void numberOfProcessorsSolveButtonClicked(); - void googleEarthGroupBoxCheckBoxClicked(bool checked); - void fireBehaviorGroupBoxCheckBoxClicked(bool checked); - void shapeFilesGroupBoxCheckBoxClicked(bool checked); - void geospatialPDFFilesGroupBoxCheckBoxClicked(bool checked); + void googleEarthGroupBoxToggled(bool checked); + void fireBehaviorGroupBoxToggled(bool checked); + void shapeFilesGroupBoxToggled(bool checked); + void geospatialPDFFilesGroupBoxToggled(bool checked); void VTKFilesCheckBoxClicked(bool checked); + void googleEarthMeshResolutionGroupBoxToggled(bool checked); + void fireBehaviorMeshResolutionGroupBoxToggled(bool checked); + void shapeFilesMeshResolutionGroupBoxToggled(bool checked); + void geospatialPDFFilesMeshResolutionGroupBoxToggled(bool checked); + void refreshUI(); From 41ddd1ee7146094800b149263f62f845d5020a28 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 28 Jul 2025 15:54:22 -0600 Subject: [PATCH 137/435] Fixed functionality to select output directory --- src/gui/mainwindow.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index b1422b384..ab1021f7b 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -486,6 +486,7 @@ void MainWindow::connectSignals() connect(ui->fireBehaviorMeshResolutionGroupBox, &QGroupBox::toggled, this, &MainWindow::fireBehaviorMeshResolutionGroupBoxToggled); connect(ui->shapeFilesMeshResolutionGroupBox, &QGroupBox::toggled, this, &MainWindow::shapeFilesMeshResolutionGroupBoxToggled); connect(ui->geospatialPDFFilesMeshResolutionGroupBox, &QGroupBox::toggled, this, &MainWindow::geospatialPDFFilesMeshResolutionGroupBoxToggled); + connect(ui->outputDirectoryButton, &QPushButton::clicked, this, &MainWindow::outputDirectoryButtonClicked); connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); } @@ -640,14 +641,18 @@ void MainWindow::useWeatherModelInitClicked() void MainWindow::outputDirectoryButtonClicked() { - // QString currentPath = ui->outputDirectoryLineEdit->toPlainText(); - // QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - // QString dirPath = QFileDialog::getExistingDirectory(this, "Select a directory", currentPath, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); - - // if (!dirPath.isEmpty()) { - // ui->outputDirectoryLineEdit->setText(dirPath); - // ui->outputDirectoryLineEdit->setToolTip(dirPath); - // } + QString currentPath = ui->outputDirectoryLineEdit->text(); + QString dirPath = QFileDialog::getExistingDirectory(this, "Select a directory", currentPath, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); + + if (!dirPath.isEmpty()) + { + ui->outputDirectoryLineEdit->setText(dirPath); + ui->outputDirectoryLineEdit->setToolTip(dirPath); + } else + { + ui->outputDirectoryLineEdit->setText(currentPath); + ui->outputDirectoryLineEdit->setToolTip(currentPath); + } } void MainWindow::numberOfProcessorsSolveButtonClicked() From 1b0a082e03a34087ed60122ee6bf50619214d9ff Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 29 Jul 2025 10:00:05 -0600 Subject: [PATCH 138/435] Properly scaping the mesh resolution and pdf size from the GUI, needs clean up --- src/gui/mainwindow.cpp | 105 +++++++++++++++++++++++++++++++++++++++-- src/gui/mainwindow.ui | 2 +- 2 files changed, 101 insertions(+), 6 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index ab1021f7b..c20c921f6 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -437,6 +437,8 @@ MainWindow::MainWindow(QWidget *parent) ui->outputWindHeightUnitsComboBox->setItemData(0, "ft"); ui->outputWindHeightUnitsComboBox->setItemData(1, "m"); + ui->meshResolutionUnitsComboBox->setItemData(0, "m"); + ui->meshResolutionUnitsComboBox->setItemData(1, "ft"); ui->googleEarthMeshResolutionComboBox->setItemData(0, "m"); ui->googleEarthMeshResolutionComboBox->setItemData(1, "ft"); ui->fireBehaviorMeshResolutionComboBox->setItemData(0, "m"); @@ -949,6 +951,99 @@ void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i) char **papszOptions = nullptr; int err; + double googleEarthMeshResolution; + QByteArray googleEarthMeshResolutionUnits; + if (!ui->googleEarthMeshResolutionGroupBox->isChecked()) + { + googleEarthMeshResolution = ui->googleEarthMeshResolutionSpinBox->value(); + googleEarthMeshResolutionUnits = ui->googleEarthMeshResolutionComboBox + ->itemData(ui->googleEarthMeshResolutionComboBox->currentIndex()) + .toString().toUtf8(); + } + else + { + googleEarthMeshResolution = ui->meshResolutionSpinBox->value(); + googleEarthMeshResolutionUnits = ui->meshResolutionUnitsComboBox + ->itemData(ui->meshResolutionUnitsComboBox->currentIndex()) + .toString().toUtf8(); + } + + double fireBehaviorMeshResolution; + QByteArray fireBehaviorMeshResolutionUnits; + if (!ui->fireBehaviorMeshResolutionGroupBox->isChecked()) + { + fireBehaviorMeshResolution = ui->fireBehaviorMeshResolutionSpinBox->value(); + fireBehaviorMeshResolutionUnits = ui->fireBehaviorMeshResolutionComboBox + ->itemData(ui->fireBehaviorMeshResolutionComboBox->currentIndex()) + .toString().toUtf8(); + } + else + { + fireBehaviorMeshResolution = ui->meshResolutionSpinBox->value(); + fireBehaviorMeshResolutionUnits = ui->meshResolutionUnitsComboBox + ->itemData(ui->meshResolutionUnitsComboBox->currentIndex()) + .toString().toUtf8(); + } + + double shapeFilesMeshResolution; + QByteArray shapeFilesMeshResolutionUnits; + if (!ui->shapeFilesMeshResolutionGroupBox->isChecked()) + { + shapeFilesMeshResolution = ui->shapeFilesMeshResolutionSpinBox->value(); + shapeFilesMeshResolutionUnits = ui->shapeFilesMeshResolutionComboBox + ->itemData(ui->shapeFilesMeshResolutionComboBox->currentIndex()) + .toString().toUtf8(); + } + else + { + shapeFilesMeshResolution = ui->meshResolutionSpinBox->value(); + shapeFilesMeshResolutionUnits = ui->meshResolutionUnitsComboBox + ->itemData(ui->meshResolutionUnitsComboBox->currentIndex()) + .toString().toUtf8(); + } + + double geospatialPDFFilesMeshResolution; + QByteArray geospatialPDFFilesMeshResolutionUnits; + if (!ui->geospatialPDFFilesGroupBox->isChecked()) + { + geospatialPDFFilesMeshResolution = ui->geospatialPDFFilesMeshResolutionSpinBox->value(); + geospatialPDFFilesMeshResolutionUnits = ui->geospatialPDFFilesMeshResolutionComboBox + ->itemData(ui->geospatialPDFFilesMeshResolutionComboBox->currentIndex()) + .toString().toUtf8(); + } + else + { + geospatialPDFFilesMeshResolution = ui->meshResolutionSpinBox->value(); + geospatialPDFFilesMeshResolutionUnits = ui->meshResolutionUnitsComboBox + ->itemData(ui->meshResolutionUnitsComboBox->currentIndex()) + .toString().toUtf8(); + } + + double PDFHeight, PDFWidth, PDFDpi; + switch(ui->sizeDimensionsComboBox->currentIndex()) + { + case 0: + PDFHeight = 11.0; + PDFWidth = 8.5; + PDFDpi = 150; + break; + case 1: + PDFHeight = 14.0; + PDFWidth = 8.5; + PDFDpi = 150; + break; + case 2: + PDFHeight = 17.0; + PDFWidth = 11.0; + PDFDpi = 150; + break; + } + if (ui->sizeOrientationComboBox->currentIndex() == 1) + { + std::swap(PDFHeight, PDFWidth); + } + + err = NinjaSetOutputPath(ninjaArmy, i, ui->outputDirectoryLineEdit->text().toUtf8().constData(), papszOptions); if (err != NINJA_SUCCESS) { @@ -973,7 +1068,7 @@ void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i) qDebug() << "NinjaSetGoogOutFlag: err =" << err; } - err = NinjaSetGoogResolution(ninjaArmy, i, ui->googleEarthMeshResolutionSpinBox->value(), ui->googleEarthMeshResolutionComboBox->itemData(ui->googleEarthMeshResolutionComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); + err = NinjaSetGoogResolution(ninjaArmy, i, googleEarthMeshResolution, googleEarthMeshResolutionUnits.constData(), papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetGoogResolution: err =" << err; @@ -997,7 +1092,7 @@ void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i) qDebug() << "NinjaSetAsciiOutFlag: err =" << err; } - err = NinjaSetAsciiResolution(ninjaArmy, i, ui->fireBehaviorMeshResolutionSpinBox->value(), ui->fireBehaviorMeshResolutionComboBox->itemData(ui->fireBehaviorMeshResolutionComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); + err = NinjaSetAsciiResolution(ninjaArmy, i, fireBehaviorMeshResolution, fireBehaviorMeshResolutionUnits.constData(), papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetAsciiResolution: err =" << err; @@ -1009,7 +1104,7 @@ void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i) qDebug() << "NinjaSetShpOutFlag: err =" << err; } - err = NinjaSetShpResolution(ninjaArmy, i, ui->shapeFilesMeshResolutionSpinBox->value(), ui->shapeFilesMeshResolutionComboBox->itemData(ui->shapeFilesMeshResolutionComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); + err = NinjaSetShpResolution(ninjaArmy, i, shapeFilesMeshResolution, shapeFilesMeshResolutionUnits.constData(), papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetShpResolution: err =" << err; @@ -1039,13 +1134,13 @@ void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i) qDebug() << "NinjaSetPDFDEM: err =" << err; } - err = NinjaSetPDFSize(ninjaArmy, i, 11, 8.5, 150, papszOptions); + err = NinjaSetPDFSize(ninjaArmy, i, PDFHeight, PDFWidth, PDFDpi, papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetPDFSize: err =" << err; } - err = NinjaSetPDFResolution(ninjaArmy, i, ui->geospatialPDFFilesMeshResolutionSpinBox->value(), ui->geospatialPDFFilesMeshResolutionComboBox->itemData(ui->geospatialPDFFilesMeshResolutionComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); + err = NinjaSetPDFResolution(ninjaArmy, i, geospatialPDFFilesMeshResolution, geospatialPDFFilesMeshResolutionUnits.constData(), papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetPDFResolution: err =" << err; diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 5926ecade..200476865 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -557,7 +557,7 @@ QFrame::Shadow::Sunken - 16 + 12 From 36c46c2b5b4eb52bce4b021db658bfd94eff9156 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 29 Jul 2025 11:50:10 -0600 Subject: [PATCH 139/435] Redesigned the GUI for point initialization and added a point initialization downloads page, minimal functionality currently --- src/gui/CMakeLists.txt | 1 + src/gui/domainaverageinput.cpp | 4 +- src/gui/mainwindow.cpp | 36 +- src/gui/mainwindow.ui | 1692 ++++++++++++++------------ src/gui/pointinitializationinput.cpp | 3 + src/gui/pointinitializationinput.h | 10 + 6 files changed, 950 insertions(+), 796 deletions(-) create mode 100644 src/gui/pointinitializationinput.cpp create mode 100644 src/gui/pointinitializationinput.h diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 5afc9738d..1dbdf9ac4 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -37,6 +37,7 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) surfaceinput.cpp serverbridge.h serverbridge.cpp domainaverageinput.h domainaverageinput.cpp + pointinitializationinput.h pointinitializationinput.cpp ) # Define target properties for Android with Qt 6 as: diff --git a/src/gui/domainaverageinput.cpp b/src/gui/domainaverageinput.cpp index 6a154cb01..eadec9ee8 100644 --- a/src/gui/domainaverageinput.cpp +++ b/src/gui/domainaverageinput.cpp @@ -162,9 +162,9 @@ void DomainAverageInput::domainAverageCheckBoxClicked() state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); if (state.isDomainAverageInitializationToggled) { - ui->pointInitializationCheckBox->setChecked(false); + ui->pointInitializationGroupBox->setChecked(false); ui->weatherModelCheckBox->setChecked(false); - state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); + state.isPointInitializationToggled = ui->pointInitializationGroupBox->isChecked(); state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); } diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index c20c921f6..16fefe0d4 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -323,29 +323,29 @@ MainWindow::MainWindow(QWidget *parent) // Set the correct root index inside Downloads QModelIndex rootIndex = model->index(downloadsPath); - ui->treeFileExplorer->setModel(model); - ui->treeFileExplorer->setRootIndex(rootIndex); + ui->pointInitializationTreeView->setModel(model); + ui->pointInitializationTreeView->setRootIndex(rootIndex); // Ensure folders expand and collapse correctly - ui->treeFileExplorer->setExpandsOnDoubleClick(true); - ui->treeFileExplorer->setAnimated(true); - ui->treeFileExplorer->setIndentation(15); - ui->treeFileExplorer->setSortingEnabled(true); - ui->treeFileExplorer->setItemsExpandable(true); - ui->treeFileExplorer->setUniformRowHeights(true); + ui->pointInitializationTreeView->setExpandsOnDoubleClick(true); + ui->pointInitializationTreeView->setAnimated(true); + ui->pointInitializationTreeView->setIndentation(15); + ui->pointInitializationTreeView->setSortingEnabled(true); + ui->pointInitializationTreeView->setItemsExpandable(true); + ui->pointInitializationTreeView->setUniformRowHeights(true); // Show only "Name" and "Date Modified" columns - ui->treeFileExplorer->hideColumn(1); // Hide Size column - ui->treeFileExplorer->hideColumn(2); // Hide Type column + ui->pointInitializationTreeView->hideColumn(1); // Hide Size column + ui->pointInitializationTreeView->hideColumn(2); // Hide Type column // Optional: Set column headers - QHeaderView *header = ui->treeFileExplorer->header(); + QHeaderView *header = ui->pointInitializationTreeView->header(); header->setSectionResizeMode(0, QHeaderView::Interactive); header->setSectionResizeMode(3, QHeaderView::Stretch); model->setHeaderData(0, Qt::Horizontal, "Name"); model->setHeaderData(3, Qt::Horizontal, "Date Modified"); - ui->treeFileExplorer->expandAll(); + ui->pointInitializationTreeView->expandAll(); QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true); QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); @@ -419,7 +419,7 @@ MainWindow::MainWindow(QWidget *parent) ui->numberOfProcessorsSpinBox->setValue(nCPUs); // Wind Input -> Point Init window - ui->downloadPointInitData->setIcon(QIcon(":/application_get")); + ui->pointInitializationDownloadDataButton->setIcon(QIcon(":/application_get")); // Populate default location for output location ui->outputDirectoryLineEdit->setText(downloadsPath); @@ -472,7 +472,7 @@ void MainWindow::connectSignals() connect(ui->diurnalCheckBox, &QCheckBox::clicked, this, &MainWindow::diurnalCheckBoxClicked); connect(ui->stabilityCheckBox, &QCheckBox::clicked, this, &MainWindow::stabilityCheckBoxClicked); connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, this, &MainWindow::treeWidgetItemDoubleClicked); - connect(ui->pointInitializationCheckBox, &QCheckBox::clicked, this, &MainWindow::pointInitializationCheckBoxClicked); + //connect(ui->pointInitializationCheckBox, &QCheckBox::clicked, this, &MainWindow::pointInitializationCheckBoxClicked); connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); @@ -613,7 +613,7 @@ void MainWindow::stabilityCheckBoxClicked() void MainWindow::pointInitializationCheckBoxClicked() { AppState& state = AppState::instance(); - state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); + state.isPointInitializationToggled = ui->pointInitializationGroupBox->isChecked(); if (state.isPointInitializationToggled) { ui->domainAverageCheckBox->setChecked(false); @@ -633,9 +633,9 @@ void MainWindow::useWeatherModelInitClicked() if (state.isWeatherModelInitializationToggled) { ui->domainAverageCheckBox->setChecked(false); - ui->pointInitializationCheckBox->setChecked(false); + ui->pointInitializationGroupBox->setChecked(false); state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); - state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); + state.isPointInitializationToggled = ui->pointInitializationGroupBox->isChecked(); } refreshUI(); @@ -753,7 +753,7 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) ui->domainAverageCheckBox->click(); } else if (item->text(0) == "Point Initialization") { - ui->pointInitializationCheckBox->click(); + //ui->pointInitializationCheckBox->click(); } else if (item->text(0) == "Weather Model") { ui->weatherModelCheckBox->click(); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 200476865..370d578b1 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -557,7 +557,7 @@ QFrame::Shadow::Sunken - 12 + 10 @@ -1815,7 +1815,258 @@ li.checked::marker { content: "\2612"; } 5 - + + + Point Initialization + + + true + + + false + + + + + + + + Select Weather Stations + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + 140 + 16777215 + + + + PointingHandCursor + + + Download Data + + + + + + + + + true + + + 10 + + + 300 + + + true + + + false + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + Refresh Weather Stations + + + + + + + + + Qt::Orientation::Horizontal + + + + + + + + 0 + 0 + + + + + 0 + 81 + + + + + 16777215 + 81 + + + + 0 + + + + + + + Start Time + + + + + + + Stop Time + + + + + + + Number of Time Steps + + + + + + + PointingHandCursor + + + true + + + + + + + true + + + + + + + + + + + + + + + 0 + 0 + + + + + 16777215 + 30 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Sample Text</p></body></html> + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + Qt::Orientation::Horizontal + + + + + + + PointingHandCursor + + + Write Station KML + + + + + + + + + + + + 5 + + + 5 + + + 5 + + + 5 + + + 0 @@ -1838,22 +2089,19 @@ li.checked::marker { content: "\2612"; } PointingHandCursor - Point Initialization + Weather Model Initialization - - - - 1 - 0 - - + - Select Weather Stations + Download Weather Data + + + false - + 0 @@ -1867,583 +2115,42 @@ li.checked::marker { content: "\2612"; } 0 - - - 0 - + - - - - 0 - 0 - + + + PointingHandCursor - - - 200 - 16777215 - + + + + + + PointingHandCursor + + + + + + hour(s) + + 1 + + + + + PointingHandCursor - - - Download from DEM - - - - - Download by Station ID - - + + Download Data + - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - 250 - 16777215 - - - - PointingHandCursor - - - - Download Most Recent Data - - - - - Download Between Two Dates - - - - - - - - - - - - - 225 - 0 - - - - - 225 - 16777215 - - - - 0 - - - 1 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - Buffer Around DEM - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - PointingHandCursor - - - - - - - PointingHandCursor - - - - mi - - - - - km - - - - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - 120 - 16777215 - - - - Download Data - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 0 - - - - - - 0 - 0 - - - - - 0 - 50 - - - - - 16777215 - 50 - - - - Input Station IDs - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - KMSO, PNTM8 - - - false - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - 140 - 16777215 - - - - PointingHandCursor - - - Download Data - - - - - - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - 225 - 0 - - - - - 225 - 16777215 - - - - 1 - - - - - - 0 - 0 - - - - - 0 - 150 - - - - - 10 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Start Time - - - - - - PointingHandCursor - - - true - - - - - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - - 16777215 - 70 - - - - PointingHandCursor - - - End Time - - - - - - true - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - - - - - PointingHandCursor - - - Write Station KML - - - - - - - true - - - 10 - - - 300 - - - true - - - false - - - - - - - - - - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 0 - 0 - - - - - 0 - 20 - - - - - 16777215 - 20 - - - - PointingHandCursor - - - Weather Model Initialization - - - - - - - Download Weather Data - - - false - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - PointingHandCursor - - - - - - - PointingHandCursor - - - - - - hour(s) - - - 1 - - - - - - - PointingHandCursor - - - Download Data - - - - - + Qt::Orientation::Horizontal @@ -3978,10 +3685,266 @@ li.checked::marker { content: "\2612"; } - + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + + 0 + 0 + + + + Elevation Input Type + + + + + + + + + 0 + 0 + + + + + Bounding Box + + + + + Point Radius + + + + + + + + + 0 + 0 + + + + + WORLD SRTM (30m) + + + + + WORLD GMTED (250m) + + + + + Landscape File + + + + + + + + Draw + + + true + + + false + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 + 0 + + + + 0 + + + + + + + North + + + + + + + + + + South + + + + + + + + + + East + + + + + + + + + + West + + + + + + + + + + + + + + + 0 + 0 + + + + Center Lat + + + + + + + + + + Center Lon + + + + + + + + + + + 0 + 0 + + + + Radius (miles) + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + Download File + + + + + + + + 0 + 0 + + + + Cancel + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Orientation::Vertical + + QSizePolicy::Policy::Expanding + 20 @@ -3992,223 +3955,403 @@ li.checked::marker { content: "\2612"; } - - + + - - - - 0 - 0 - - - - Elevation Input Type - - - - - - - - - 0 - 0 - - - - - Bounding Box + + + + + + 225 + 0 + + + + + 225 + 16777215 + + + + 1 + + + + + 0 + 0 + + + + + 0 + 150 + + + + + + + + 0 + 0 + - - - - Point Radius + + + 0 + 80 + - - - - - - - - 0 - 0 - - - - - WORLD SRTM (30m) + + + 16777215 + 80 + - - - - WORLD GMTED (250m) + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download the most recent weather data for a single time step simulation</p></body></html> - - - - Landscape File + + + + + + Qt::Orientation::Vertical - - - - - - - Draw - - - true - - - false - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - 0 - 0 - + + + 20 + 40 + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Start Time + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + End Time + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + + 0 + 0 + + + + + 200 + 16777215 + + + + PointingHandCursor + + + + Download from DEM + + + + + Download by Station ID - - 0 + + + + + + + + 250 + 16777215 + + + + PointingHandCursor + + + + Download Most Recent Data - - - - - - North + + + + Download Between Two Dates + + + + + + + + + 225 + 0 + + + + + 225 + 16777215 + + + + 0 + + + 0 + + + + + + + + 0 + 52 + + + + Buffer Around DEM + + + + 0 - - - - - - - - - South + + 0 - - - - - - - - - East + + 0 - - - - - - - - - West + + 0 - - - - - - - - - - - - - - 0 - 0 - + + + + PointingHandCursor + + + + + + + PointingHandCursor + + + + mi + + + + + km + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 50 + + + + + 16777215 + 50 + + + + Input Station IDs + + + + 0 - - Center Lat + + 0 - - - - - - - - - Center Lon + + 0 - - - - - - - - - - 0 - 0 - + + 0 - - Radius (miles) + + 0 - - - - - - - + + + + KMSO, PNTM8 + + + false + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + - - - + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + - + - - - - 0 - 0 - + + + + 120 + 16777215 + - Download File + Download Data - - - - 0 - 0 - + + + + 80 + 16777215 + Cancel @@ -4216,7 +4359,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Horizontal @@ -4231,13 +4374,10 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical - - QSizePolicy::Policy::Expanding - 20 diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp new file mode 100644 index 000000000..3c1278acf --- /dev/null +++ b/src/gui/pointinitializationinput.cpp @@ -0,0 +1,3 @@ +#include "pointinitializationinput.h" + +PointInitializationInput::PointInitializationInput() {} diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h new file mode 100644 index 000000000..1936dcf1c --- /dev/null +++ b/src/gui/pointinitializationinput.h @@ -0,0 +1,10 @@ +#ifndef POINTINITIALIZATIONINPUT_H +#define POINTINITIALIZATIONINPUT_H + +class PointInitializationInput +{ +public: + PointInitializationInput(); +}; + +#endif // POINTINITIALIZATIONINPUT_H From f142671251e872c0cd1730267e3e5d64f71c6c4f Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 29 Jul 2025 15:56:28 -0600 Subject: [PATCH 140/435] Fixed #include statements, added slots to point initialization inputs class, and adjusted GUI for station data downloading --- src/gui/domainaverageinput.h | 1 + src/gui/mainwindow.cpp | 21 +- src/gui/mainwindow.h | 7 +- src/gui/mainwindow.ui | 586 +++++++++++---------------- src/gui/menubar.cpp | 1 - src/gui/menubar.h | 1 + src/gui/pointinitializationinput.cpp | 79 +++- src/gui/pointinitializationinput.h | 56 ++- src/gui/surfaceinput.cpp | 1 - src/gui/surfaceinput.h | 1 + 10 files changed, 382 insertions(+), 372 deletions(-) diff --git a/src/gui/domainaverageinput.h b/src/gui/domainaverageinput.h index cfab393f7..9bea9bdf4 100644 --- a/src/gui/domainaverageinput.h +++ b/src/gui/domainaverageinput.h @@ -32,6 +32,7 @@ #define DOMAINAVERAGEINPUT_H #include "appstate.h" +#include "ui_mainwindow.h" #include #include #include diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 16fefe0d4..8b45a0912 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -364,6 +364,7 @@ MainWindow::MainWindow(QWidget *parent) surfaceInput = new SurfaceInput(ui, webView, this); surfaceInput->timeZoneAllZonesCheckBoxClicked(); domainAverageInput = new DomainAverageInput(ui, this); + pointInitializationInput = new PointInitializationInput(ui, this); QVBoxLayout *layout = new QVBoxLayout(); layout->setContentsMargins(0, 0, 0, 0); @@ -461,6 +462,8 @@ MainWindow::~MainWindow() delete mapBridge; delete surfaceInput; delete menuBar; + delete domainAverageInput; + delete pointInitializationInput; delete ui; } @@ -472,13 +475,13 @@ void MainWindow::connectSignals() connect(ui->diurnalCheckBox, &QCheckBox::clicked, this, &MainWindow::diurnalCheckBoxClicked); connect(ui->stabilityCheckBox, &QCheckBox::clicked, this, &MainWindow::stabilityCheckBoxClicked); connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, this, &MainWindow::treeWidgetItemDoubleClicked); - //connect(ui->pointInitializationCheckBox, &QCheckBox::clicked, this, &MainWindow::pointInitializationCheckBoxClicked); connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); connect(surfaceInput, &SurfaceInput::requestRefresh, this, &MainWindow::refreshUI); connect(domainAverageInput, &DomainAverageInput::requestRefresh, this, &MainWindow::refreshUI); + connect(pointInitializationInput, &PointInitializationInput::requestRefresh, this, &MainWindow::refreshUI); connect(ui->googleEarthGroupBox, &QGroupBox::toggled, this, &MainWindow::googleEarthGroupBoxToggled); connect(ui->fireBehaviorGroupBox, &QGroupBox::toggled, this, &MainWindow::fireBehaviorGroupBoxToggled); connect(ui->shapeFilesGroupBox, &QGroupBox::toggled, this, &MainWindow::shapeFilesGroupBoxToggled); @@ -609,22 +612,6 @@ void MainWindow::stabilityCheckBoxClicked() refreshUI(); } - -void MainWindow::pointInitializationCheckBoxClicked() -{ - AppState& state = AppState::instance(); - state.isPointInitializationToggled = ui->pointInitializationGroupBox->isChecked(); - - if (state.isPointInitializationToggled) { - ui->domainAverageCheckBox->setChecked(false); - ui->weatherModelCheckBox->setChecked(false); - state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); - state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); - } - - refreshUI(); -} - void MainWindow::useWeatherModelInitClicked() { AppState& state = AppState::instance(); diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index e9d4992c7..77a9d3a87 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -33,6 +33,7 @@ #include "surfaceinput.h" #include "menubar.h" #include "domainaverageinput.h" +#include "pointinitializationinput.h" #include "mapbridge.h" #include "serverbridge.h" #include "ui_mainwindow.h" @@ -69,8 +70,6 @@ #include #include - - QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; @@ -95,7 +94,6 @@ private slots: void diurnalCheckBoxClicked(); void stabilityCheckBoxClicked(); void treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column); - void pointInitializationCheckBoxClicked(); void useWeatherModelInitClicked(); void solveButtonClicked(); void outputDirectoryButtonClicked(); @@ -109,8 +107,6 @@ private slots: void fireBehaviorMeshResolutionGroupBoxToggled(bool checked); void shapeFilesMeshResolutionGroupBoxToggled(bool checked); void geospatialPDFFilesMeshResolutionGroupBoxToggled(bool checked); - - void refreshUI(); private: @@ -122,6 +118,7 @@ private slots: MenuBar *menuBar; ServerBridge *serverBridge; DomainAverageInput *domainAverageInput; + PointInitializationInput *pointInitializationInput; void connectSignals(); void treeItemClicked(QTreeWidgetItem *item, int column); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 370d578b1..6ff371a94 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -557,7 +557,7 @@ QFrame::Shadow::Sunken - 10 + 20 @@ -3956,29 +3956,46 @@ li.checked::marker { content: "\2612"; } - + - - - - - - 225 - 0 - - - - - 225 - 16777215 - - - - 1 - - + + + Fetch Station Data + + + + - + + 0 + 0 + + + + + 200 + 16777215 + + + + PointingHandCursor + + + + Download from DEM + + + + + Download by Station ID + + + + + + + + 0 0 @@ -3986,349 +4003,228 @@ li.checked::marker { content: "\2612"; } 0 - 150 + 50 - - - - - - 0 - 0 - - - - - 0 - 80 - - - - - 16777215 - 80 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download the most recent weather data for a single time step simulation</p></body></html> - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Start Time - - + + + 16777215 + 50 + + + + 0 + + + 1 + + + + + + + Buffer Around DEM + + + + + + + PointingHandCursor + + + + + + + PointingHandCursor + - + + mi + - - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - End Time - - - + + km + - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Input Station IDs + + + + + + + KMSO, PNTM8 + + + false + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + - - - - - - - 0 - 0 - - - - - 200 - 16777215 - - - - PointingHandCursor - - - - Download from DEM + + + + + + 250 + 16777215 + - - - - Download by Station ID + + PointingHandCursor - - - - - - - - 250 - 16777215 - - - - PointingHandCursor - - - - Download Most Recent Data + + + Download Most Recent Data + + + + + Download Between Two Dates + + + + + + + + + 0 + 0 + - - - - Download Between Two Dates + + + 0 + 48 + - - - - - - - - 225 - 0 - - - - - 225 - 16777215 - - - - 0 - - - 0 - - - - - - - - 0 - 52 - - - - Buffer Around DEM - - - - 0 - - - 0 + + + 16777215 + 48 + + + + 0 + + + + + + + + 0 + 0 + - - 0 + + + 0 + 30 + - - 0 + + + 16777215 + 30 + - - - - PointingHandCursor - - - - - - - PointingHandCursor - - - - mi - - - - - km - - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - - - - 0 - 0 - - - - - 0 - 50 - - - - - 16777215 - 50 - - - - Input Station IDs - - - - 0 + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download the most recent weather data for a single time step simulation</p></body></html> - - 0 + + + + + + + + + + Start Time: - - 0 + + + + + + + + + End Time: - - 0 + + + + + + + + + Qt::Orientation::Horizontal - - 0 + + + 51 + 20 + - - - - KMSO, PNTM8 - - - false - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - + + + + - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - + + + diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp index 5bf83bceb..eb6895fef 100644 --- a/src/gui/menubar.cpp +++ b/src/gui/menubar.cpp @@ -28,7 +28,6 @@ *****************************************************************************/ #include "menubar.h" -#include "ui_mainwindow.h" MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) : QObject(parent), ui(ui) diff --git a/src/gui/menubar.h b/src/gui/menubar.h index 0d7970404..5976128c6 100644 --- a/src/gui/menubar.h +++ b/src/gui/menubar.h @@ -30,6 +30,7 @@ #ifndef MENUBAR_H #define MENUBAR_H +#include "ui_mainwindow.h" #include namespace Ui { diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 3c1278acf..67d267376 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -1,3 +1,80 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Handles GUI related logic for Point Initialization Page + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + #include "pointinitializationinput.h" -PointInitializationInput::PointInitializationInput() {} +PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* parent) + : QObject(parent), + ui(ui) +{ + ui->weatherStationDataSourceStackedWidget->setCurrentIndex(0); + ui->pointInitializationDataTimeStackedWidget->setCurrentIndex(0); + ui->weatherStationDataTimeStackedWidget->setCurrentIndex(0); + + connect(ui->pointInitializationGroupBox, &QGroupBox::toggled, this, &PointInitializationInput::pointInitializationGroupBoxToggled); + connect(ui->pointInitializationDownloadDataButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitializationDownloadDataButtonClicked); + connect(ui->weatherStationDataDownloadCancelButton, &QPushButton::clicked, this, &PointInitializationInput::weatherStationDataDownloadCancelButtonClicked); + connect(ui->weatherStationDataSourceComboBox, &QComboBox::currentIndexChanged, this, &PointInitializationInput::weatherStationDataSourceComboBoxCurrentIndexChanged); + connect(ui->weatherStationDataTimeComboBox, &QComboBox::currentIndexChanged, this, &PointInitializationInput::weatherStationDataTimeComboBoxCurrentIndexChanged); +} + +void PointInitializationInput::pointInitializationGroupBoxToggled(bool checked) +{ + AppState& state = AppState::instance(); + state.isPointInitializationToggled = ui->pointInitializationGroupBox->isChecked(); + + if (state.isPointInitializationToggled) { + ui->domainAverageCheckBox->setChecked(false); + ui->weatherModelCheckBox->setChecked(false); + state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); + state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); + } + + emit requestRefresh(); +} + +void PointInitializationInput::pointInitializationDownloadDataButtonClicked() +{ + ui->inputsStackedWidget->setCurrentIndex(20); +} + +void PointInitializationInput::weatherStationDataDownloadCancelButtonClicked() +{ + ui->inputsStackedWidget->setCurrentIndex(10); +} + +void PointInitializationInput::weatherStationDataSourceComboBoxCurrentIndexChanged(int index) +{ + ui->weatherStationDataSourceStackedWidget->setCurrentIndex(index); +} + +void PointInitializationInput::weatherStationDataTimeComboBoxCurrentIndexChanged(int index) +{ + ui->weatherStationDataTimeStackedWidget->setCurrentIndex(index); +} diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index 1936dcf1c..61d0d122e 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -1,10 +1,62 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Handles GUI related logic for Point Initialization Page + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + #ifndef POINTINITIALIZATIONINPUT_H #define POINTINITIALIZATIONINPUT_H -class PointInitializationInput +#include "appstate.h" +#include "ui_mainwindow.h" +#include + + +namespace Ui { +class MainWindow; +} + +class PointInitializationInput : public QObject { + Q_OBJECT public: - PointInitializationInput(); + PointInitializationInput(Ui::MainWindow* ui, QObject* parent = nullptr); + +signals: + void requestRefresh(); + +private slots: + void pointInitializationGroupBoxToggled(bool checked); + void pointInitializationDownloadDataButtonClicked(); + void weatherStationDataDownloadCancelButtonClicked(); + void weatherStationDataSourceComboBoxCurrentIndexChanged(int index); + void weatherStationDataTimeComboBoxCurrentIndexChanged(int index); + +private: + Ui::MainWindow *ui; }; #endif // POINTINITIALIZATIONINPUT_H diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 8705a199a..fb0e25a44 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -28,7 +28,6 @@ *****************************************************************************/ #include "surfaceinput.h" -#include "ui_mainwindow.h" SurfaceInput::SurfaceInput(Ui::MainWindow *ui, QWebEngineView *webView, diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index 40ef6934b..8dfb51990 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -31,6 +31,7 @@ #define SURFACEINPUT_H #include "appstate.h" +#include "ui_mainwindow.h" #include "../ninja/windninja.h" #include "../ninja/gdal_util.h" #include From ca61c2874d482d11e9d78415c0ad76e525b59c78 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 31 Jul 2025 14:37:39 -0600 Subject: [PATCH 141/435] Adjusted GUI page to match old one and implemented weather model inputs class for future functionality, for #637 --- src/gui/CMakeLists.txt | 1 + src/gui/domainaverageinput.cpp | 4 +- src/gui/mainwindow.cpp | 9 +- src/gui/mainwindow.h | 2 + src/gui/mainwindow.ui | 268 ++++++++++++++++++++------------- src/gui/surfaceinput.h | 2 +- src/gui/weathermodelinput.cpp | 37 +++++ src/gui/weathermodelinput.h | 51 +++++++ 8 files changed, 266 insertions(+), 108 deletions(-) create mode 100644 src/gui/weathermodelinput.cpp create mode 100644 src/gui/weathermodelinput.h diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 5afc9738d..22ebc2286 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -37,6 +37,7 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) surfaceinput.cpp serverbridge.h serverbridge.cpp domainaverageinput.h domainaverageinput.cpp + weathermodelinput.h weathermodelinput.cpp ) # Define target properties for Android with Qt 6 as: diff --git a/src/gui/domainaverageinput.cpp b/src/gui/domainaverageinput.cpp index 6a154cb01..b59d572df 100644 --- a/src/gui/domainaverageinput.cpp +++ b/src/gui/domainaverageinput.cpp @@ -163,9 +163,9 @@ void DomainAverageInput::domainAverageCheckBoxClicked() if (state.isDomainAverageInitializationToggled) { ui->pointInitializationCheckBox->setChecked(false); - ui->weatherModelCheckBox->setChecked(false); + ui->weatherModelGroupBox->setChecked(false); state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); - state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); + state.isWeatherModelInitializationToggled = ui->weatherModelGroupBox->isChecked(); } emit requestRefresh(); diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index c20c921f6..d61a790b2 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -364,6 +364,7 @@ MainWindow::MainWindow(QWidget *parent) surfaceInput = new SurfaceInput(ui, webView, this); surfaceInput->timeZoneAllZonesCheckBoxClicked(); domainAverageInput = new DomainAverageInput(ui, this); + weatherModelInput = new WeatherModelInput(ui, this); QVBoxLayout *layout = new QVBoxLayout(); layout->setContentsMargins(0, 0, 0, 0); @@ -617,9 +618,9 @@ void MainWindow::pointInitializationCheckBoxClicked() if (state.isPointInitializationToggled) { ui->domainAverageCheckBox->setChecked(false); - ui->weatherModelCheckBox->setChecked(false); + ui->weatherModelGroupBox->setChecked(false); state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); - state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); + state.isWeatherModelInitializationToggled = ui->weatherModelGroupBox->isChecked(); } refreshUI(); @@ -629,7 +630,7 @@ void MainWindow::useWeatherModelInitClicked() { AppState& state = AppState::instance(); - state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); + state.isWeatherModelInitializationToggled = ui->weatherModelGroupBox->isChecked(); if (state.isWeatherModelInitializationToggled) { ui->domainAverageCheckBox->setChecked(false); @@ -756,7 +757,7 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) ui->pointInitializationCheckBox->click(); } else if (item->text(0) == "Weather Model") { - ui->weatherModelCheckBox->click(); + //ui->weatherModelGroupBox->click(); } else if (item->text(0) == "Surface Input") { surfaceInput->elevationInputFileOpenButtonClicked(); diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index e9d4992c7..ad206e308 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -35,6 +35,7 @@ #include "domainaverageinput.h" #include "mapbridge.h" #include "serverbridge.h" +#include "weathermodelinput.h" #include "ui_mainwindow.h" #include "appstate.h" #include "../ninja/windninja.h" @@ -122,6 +123,7 @@ private slots: MenuBar *menuBar; ServerBridge *serverBridge; DomainAverageInput *domainAverageInput; + WeatherModelInput *weatherModelInput; void connectSignals(); void treeItemClicked(QTreeWidgetItem *item, int column); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 200476865..e2589448f 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -557,7 +557,7 @@ QFrame::Shadow::Sunken - 12 + 11 @@ -2345,7 +2345,7 @@ li.checked::marker { content: "\2612"; } - + 5 @@ -2359,113 +2359,94 @@ li.checked::marker { content: "\2612"; } 5 - - - - 0 - 0 - - - - - 0 - 20 - - - - - 16777215 - 20 - - - - PointingHandCursor - - - Weather Model Initialization - - - - - + - Download Weather Data + Weather Model Initialization + true + + false - - - 0 - - - 0 - - - 0 - - - 0 - + - - - - - PointingHandCursor - - - - - - - PointingHandCursor - - - - - - hour(s) - - - 1 - - - - - - - PointingHandCursor - - - Download Data - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - + + + + 0 + 0 + + + + Download Weather Data + + + + + + + + PointingHandCursor + + + + + + + PointingHandCursor + + + + + + hours + + + 1 + + + 1 + + + + + + + PointingHandCursor + + + Download Data + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + Downloaded Forecasts - - - 5 - + + false + + 0 @@ -2480,15 +2461,24 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + true - - - PointingHandCursor + + + + 0 + 0 + Select Specific Time Steps @@ -2499,8 +2489,84 @@ li.checked::marker { content: "\2612"; } false + + + + + + 0 + 0 + + + + true + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + Select All + + + + + + + Select None + + + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Refresh Forecast List + + + + + @@ -2508,7 +2574,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Vertical diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index 40ef6934b..fef2c19a5 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -52,7 +52,7 @@ class MainWindow; class SurfaceInput : public QObject { - Q_OBJECT + Q_OBJECT public: explicit SurfaceInput(Ui::MainWindow* ui, QWebEngineView* webView, diff --git a/src/gui/weathermodelinput.cpp b/src/gui/weathermodelinput.cpp new file mode 100644 index 000000000..bc303fd00 --- /dev/null +++ b/src/gui/weathermodelinput.cpp @@ -0,0 +1,37 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Hands GUI related logic for the Weather Model Page + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + +#include "weathermodelinput.h" + +WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) + : QObject(parent), + ui(ui) +{ + +} diff --git a/src/gui/weathermodelinput.h b/src/gui/weathermodelinput.h new file mode 100644 index 000000000..a86054c44 --- /dev/null +++ b/src/gui/weathermodelinput.h @@ -0,0 +1,51 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Hands GUI related logic for the Weather Model Page + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + +#ifndef WEATHERMODELINPUT_H +#define WEATHERMODELINPUT_H + +#include "ui_mainwindow.h" +#include + +namespace Ui { +class MainWindow; +} + +class WeatherModelInput : public QObject +{ + Q_OBJECT +public: + explicit WeatherModelInput(Ui::MainWindow* ui, QObject* parent = nullptr); + +private: + Ui::MainWindow *ui; + +}; + +#endif // WEATHERMODELINPUT_H From 7a72fa55b0fad7cb5c13ce4be6687ae74306983e Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 1 Aug 2025 09:56:51 -0600 Subject: [PATCH 142/435] Changed domain average to be a group box rather than a check box to match old gui --- src/gui/domainaverageinput.cpp | 6 +- src/gui/domainaverageinput.h | 2 +- src/gui/mainwindow.cpp | 16 +- src/gui/mainwindow.ui | 748 +++++++++++++++++---------------- 4 files changed, 395 insertions(+), 377 deletions(-) diff --git a/src/gui/domainaverageinput.cpp b/src/gui/domainaverageinput.cpp index 6a154cb01..77941331d 100644 --- a/src/gui/domainaverageinput.cpp +++ b/src/gui/domainaverageinput.cpp @@ -37,7 +37,7 @@ DomainAverageInput::DomainAverageInput(Ui::MainWindow* ui, QObject* parent) connect(ui->inputWindHeightComboBox, &QComboBox::currentIndexChanged, this, &DomainAverageInput::windHeightComboBoxCurrentIndexChanged); connect(ui->clearTableButton, &QPushButton::clicked, this, &DomainAverageInput::clearTableButtonClicked); connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &DomainAverageInput::domainAverageTableCellChanged); - connect(ui->domainAverageCheckBox, &QCheckBox::clicked, this, &DomainAverageInput::domainAverageCheckBoxClicked); + connect(ui->domainAverageGroupBox, &QGroupBox::toggled, this, &DomainAverageInput::domainAverageGroupBoxToggled); } void DomainAverageInput::domainAverageTableCellChanged(int row, int column) @@ -156,10 +156,10 @@ void DomainAverageInput::windHeightComboBoxCurrentIndexChanged(int index) } } -void DomainAverageInput::domainAverageCheckBoxClicked() +void DomainAverageInput::domainAverageGroupBoxToggled() { AppState& state = AppState::instance(); - state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); + state.isDomainAverageInitializationToggled = ui->domainAverageGroupBox->isChecked(); if (state.isDomainAverageInitializationToggled) { ui->pointInitializationCheckBox->setChecked(false); diff --git a/src/gui/domainaverageinput.h b/src/gui/domainaverageinput.h index cfab393f7..001bf3050 100644 --- a/src/gui/domainaverageinput.h +++ b/src/gui/domainaverageinput.h @@ -52,7 +52,7 @@ class DomainAverageInput: public QObject { private slots: void domainAverageTableCellChanged(int row, int column); void clearTableButtonClicked(); - void domainAverageCheckBoxClicked(); + void domainAverageGroupBoxToggled(); void windHeightComboBoxCurrentIndexChanged(int index); private: diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index c20c921f6..f25732498 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -616,9 +616,9 @@ void MainWindow::pointInitializationCheckBoxClicked() state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); if (state.isPointInitializationToggled) { - ui->domainAverageCheckBox->setChecked(false); + ui->domainAverageGroupBox->setChecked(false); ui->weatherModelCheckBox->setChecked(false); - state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); + state.isDomainAverageInitializationToggled = ui->domainAverageGroupBox->isChecked(); state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); } @@ -632,9 +632,9 @@ void MainWindow::useWeatherModelInitClicked() state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); if (state.isWeatherModelInitializationToggled) { - ui->domainAverageCheckBox->setChecked(false); + ui->domainAverageGroupBox->setChecked(false); ui->pointInitializationCheckBox->setChecked(false); - state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); + state.isDomainAverageInitializationToggled = ui->domainAverageGroupBox->isChecked(); state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); } @@ -750,7 +750,13 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) ui->stabilityCheckBox->click(); } else if (item->text(0) == "Domain Average Wind") { - ui->domainAverageCheckBox->click(); + if(!ui->domainAverageGroupBox->isChecked()) + { + ui->domainAverageGroupBox->setChecked(true); + }else + { + ui->domainAverageGroupBox->setChecked(false); + } } else if (item->text(0) == "Point Initialization") { ui->pointInitializationCheckBox->click(); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 200476865..3165c9158 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -557,7 +557,7 @@ QFrame::Shadow::Sunken - 12 + 9 @@ -1359,7 +1359,7 @@ li.checked::marker { content: "\2612"; } - + 6 @@ -1376,112 +1376,421 @@ li.checked::marker { content: "\2612"; } 5 - + - + 0 0 - - - 0 - 5 - - - - PointingHandCursor - - + Domain Average Wind - - - - - - - 0 - 100 - + + true - - Input Wind Height + + false - + - - - PointingHandCursor + + + + 0 + 100 + + + Input Wind Height + + + + + + PointingHandCursor + + + + 20ft-US + + + + + 10m-SI + + + + + Custom + + + + + + + + false + + + PointingHandCursor + + + 0.010000000000000 + + + 20.000000000000000 + + + + + + + false + + + + 0 + 0 + + + + false + + + + Feet + + + + + Meters + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + - - 20ft-US - + + + Table Unites: + + - - 10m-SI - + + + + 0 + 0 + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + PointingHandCursor + + + + mph + + + + + m/s + + + + + kph + + + + + kts + + + - - Custom - + + + + 0 + 0 + + + + + 40 + 0 + + + + + 40 + 16777215 + + + + PointingHandCursor + + + Qt::LayoutDirection::LeftToRight + + + + °F + + + + + °C + + + - + + + + + 0 + 0 + + + + PointingHandCursor + + + Clear Table + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + - - - false + + + + 1 + 0 + - - PointingHandCursor + + + 0 + 490 + - - 0.010000000000000 + + true - - 20.000000000000000 + + QAbstractItemView::DragDropMode::DragDrop - - - - - - false + + Qt::DropAction::MoveAction - - - 0 - 0 - + + true - - false + + 50 - + + false + + + 20 + + + 80 + + + true + + + false + + + 20 + + + 20 + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - Feet + Speed +(Select) - - + + + 10 + + + + - Meters + Direction +(degrees) - + + + + + + 10 + + + + + + Time +(hh:mm) + + + + 10 + + + + + + Date +(mm/dd/yyyy) + + + + 10 + + + + + + Cloud Cover +(%) + + + + 10 + + + + + + Air Temp +(Select) + + + + 10 + + + - + - Qt::Orientation::Horizontal + Qt::Orientation::Vertical - 40 - 20 + 20 + 40 @@ -1489,303 +1798,6 @@ li.checked::marker { content: "\2612"; } - - - - - - Table Unites: - - - - - - - - 0 - 0 - - - - - 60 - 0 - - - - - 60 - 16777215 - - - - PointingHandCursor - - - - mph - - - - - m/s - - - - - kph - - - - - kts - - - - - - - - - 0 - 0 - - - - - 40 - 0 - - - - - 40 - 16777215 - - - - PointingHandCursor - - - Qt::LayoutDirection::LeftToRight - - - - °F - - - - - °C - - - - - - - - - 0 - 0 - - - - PointingHandCursor - - - Clear Table - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - 1 - 0 - - - - - 100 - 0 - - - - true - - - QAbstractItemView::DragDropMode::DragDrop - - - Qt::DropAction::MoveAction - - - true - - - 50 - - - false - - - 20 - - - 80 - - - true - - - false - - - 20 - - - 20 - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Speed -(Select) - - - - 10 - - - - - - Direction -(degrees) - - - - - - - 10 - - - - - - Time -(hh:mm) - - - - 10 - - - - - - Date -(mm/dd/yyyy) - - - - 10 - - - - - - Cloud Cover -(%) - - - - 10 - - - - - - Air Temp -(Select) - - - - 10 - - - - - From 1c1ca599472579ad7ed007c79cb5c6cb1a60a49c Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 1 Aug 2025 11:18:02 -0600 Subject: [PATCH 143/435] Exposed more API functions for simulation outputs and implemented them into the GUI code --- src/gui/mainwindow.cpp | 28 +++++++++++++- src/gui/mainwindow.h | 2 +- src/gui/mainwindow.ui | 2 +- src/ninja/windninja.cpp | 86 +++++++++++++++++++++++++++++++++++++++-- src/ninja/windninja.h | 26 +++++++++---- 5 files changed, 129 insertions(+), 15 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index f25732498..14860008a 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -448,6 +448,15 @@ MainWindow::MainWindow(QWidget *parent) ui->geospatialPDFFilesMeshResolutionComboBox->setItemData(0, "m"); ui->geospatialPDFFilesMeshResolutionComboBox->setItemData(1, "ft"); + ui->alternativeColorSchemeComboBox->setItemData(0, "default"); + ui->alternativeColorSchemeComboBox->setItemData(1, "ROPGW"); + ui->alternativeColorSchemeComboBox->setItemData(2, "oranges"); + ui->alternativeColorSchemeComboBox->setItemData(3, "blues"); + ui->alternativeColorSchemeComboBox->setItemData(4, "pinks"); + ui->alternativeColorSchemeComboBox->setItemData(5, "greens"); + ui->alternativeColorSchemeComboBox->setItemData(6, "magic_beans"); + ui->alternativeColorSchemeComboBox->setItemData(7, "pink_to_green"); + ui->legendComboBox->setItemData(0, "equal_interval"); ui->legendComboBox->setItemData(0, "equal_color"); @@ -883,6 +892,9 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i { char **papszOptions = nullptr; int err; + + err = NinjaSetAsciiAtmFile(ninjaArmy, ui->fireBehaviorResolutionCheckBox->isChecked(), papszOptions); + for(unsigned int i=0; i - 9 + 13 diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index efdb7814a..754dfa636 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -30,7 +30,6 @@ #include "windninja.h" #include "ninjaArmy.h" #include "ninjaException.h" -#include #ifdef _OPENMP omp_lock_t netCDF_lock; @@ -1640,7 +1639,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetGoogSpeedScaling * * \param army An opaque handle to a valid ninjaArmy. * \param nIndex The run to apply the setting to. - * \param scaling The line width at which to write the Google Earth output. + * \param width The line width at which to write the Google Earth output. * * \return NINJA_SUCCESS on success, non-zero otherwise. */ @@ -1657,6 +1656,56 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetGoogLineWidth } } +/** + * \brief Set the Color Scheme of the Google Earth output for a simulation. + * + * \note Only valid if NinjaSetGoogOutFlag is set to 1. + * + * \param army An opaque handle to a valid ninjaArmy. + * \param nIndex The run to apply the setting to. + * \param colorScheme A string that specifies the color scheme ("default", "ROPGW", "oranges", "blues", "pinks", "greens", "magic_beans", "pink_to_greens"). + * \param scaling The flag which determines if vector scaling will be used. + * + * \return NINJA_SUCCESS on success, non-zero otherwise. + */ +WINDNINJADLL_EXPORT NinjaErr NinjaSetGoogColor + ( NinjaArmyH * army, const int nIndex, std::string colorScheme, bool scaling, char ** papszOptions ) +{ + if( NULL != army ) + { + return reinterpret_cast( army )->setGoogColor(nIndex, colorScheme, scaling); + } + else + { + return NINJA_E_NULL_PTR; + } +} + +/** + * \brief Set the flag to use a Consistent Color Scheme for all Google Earth Outputs of a simulation. + * + * \note Only valid if NinjaSetGoogOutFlag is set to 1. + * + * \param army An opaque handle to a valid ninjaArmy. + * \param nIndex The run to apply the setting to. + * \param flag The flag that determines whether consistent color scaling will be used. + * \param numRuns The number of runs that will be simulated + * + * \return NINJA_SUCCESS on success, non-zero otherwise. + */ +WINDNINJADLL_EXPORT NinjaErr NinjaSetGoogConsistentColorScale + ( NinjaArmyH * army, const int nIndex, bool flag, int numRuns, char ** papszOptions ) +{ + if( NULL != army ) + { + return reinterpret_cast( army )->setGoogConsistentColorScale(nIndex, flag, numRuns); + } + else + { + return NINJA_E_NULL_PTR; + } +} + /** * \brief Set the flag to write shapefile output for a simulation. * @@ -1759,6 +1808,37 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetAsciiResolution } } +/** + * \brief Set the resolution of the raster output for a simulation. + * + * \note Only valid if NinjaSetAsciiOutFlag is set to 1. + * + * \param army An opaque handle to a valid ninjaArmy. + * \param flag That flag that determines whether to write the .atm file. + * + * \return NINJA_SUCCESS on success, non-zero otherwise. + */ +WINDNINJADLL_EXPORT NinjaErr NinjaSetAsciiAtmFile + ( NinjaArmyH * army, bool flag, char ** papszOptions) +{ + if( NULL != army) + { + try + { + reinterpret_cast(army)->set_writeFarsiteAtmFile(flag); + return NINJA_SUCCESS; + } + catch (const std::exception& e) + { + return NINJA_E_OTHER; + } + } + else + { + return 1; + } +} + /** * \brief Set the flag to write VTK output for a simulation. * @@ -1817,7 +1897,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetTxtOutFlag * \return NINJA_SUCCESS on success, non-zero otherwise. */ WINDNINJADLL_EXPORT NinjaErr NinjaSetPDFOutFlag - ( NinjaArmyH* army, const int nIndex, const bool flag, char ** options ) + ( NinjaArmyH* army, const int nIndex, const bool flag, char ** papszOptions ) { if( NULL != army ) { diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 92c8c9c9e..218918e17 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -66,9 +66,10 @@ #define FALSE 0 #endif -WN_C_START - #include +#include + +WN_C_START //Use structs instead of void * for type checking by C compilier struct NinjaArmyH; @@ -285,31 +286,40 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaSetGoogSpeedScaling ( NinjaArmyH * ninjaArmy, const int nIndex, const char * scaling, char ** options ); + WINDNINJADLL_EXPORT NinjaErr NinjaSetGoogColor + ( NinjaArmyH * army, const int nIndex, std::string colorScheme, bool scaling, char ** papszOptions ); + WINDNINJADLL_EXPORT NinjaErr NinjaSetGoogLineWidth - ( NinjaArmyH * ninjaArmy, const int nIndex, const double width, char ** options ); + ( NinjaArmyH * ninjaArmy, const int nIndex, const double width, char ** papszOptions ); + + WINDNINJADLL_EXPORT NinjaErr NinjaSetGoogConsistentColorScale + ( NinjaArmyH * army, const int nIndex, bool flag, int numRuns, char ** papszOptions); WINDNINJADLL_EXPORT NinjaErr NinjaSetShpOutFlag - ( NinjaArmyH * ninjaArmy, const int nIndex, const bool flag, char ** options ); + ( NinjaArmyH * ninjaArmy, const int nIndex, const bool flag, char ** papszOptions ); WINDNINJADLL_EXPORT NinjaErr NinjaSetShpResolution ( NinjaArmyH * ninjaArmy, const int nIndex, const double resolution, const char * units, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaSetAsciiOutFlag - ( NinjaArmyH * ninjaArmy, const int nIndex, const bool flag, char ** options ); + ( NinjaArmyH * ninjaArmy, const int nIndex, const bool flag, char ** papszOptions ); WINDNINJADLL_EXPORT NinjaErr NinjaSetAsciiResolution ( NinjaArmyH * ninjaArmy, const int nIndex, const double resolution, const char * units, char ** options ); + WINDNINJADLL_EXPORT NinjaErr NinjaSetAsciiAtmFile + ( NinjaArmyH * army, bool flag, char ** papszOptions); + WINDNINJADLL_EXPORT NinjaErr NinjaSetVtkOutFlag - ( NinjaArmyH * ninjaArmy, const int nIndex, const bool flag, char ** options ); + ( NinjaArmyH * ninjaArmy, const int nIndex, const bool flag, char ** papszOptions ); WINDNINJADLL_EXPORT NinjaErr NinjaSetTxtOutFlag - ( NinjaArmyH * ninjaArmy, const int nIndex, const bool flag, char ** options ); + ( NinjaArmyH * ninjaArmy, const int nIndex, const bool flag, char ** papszOptions ); WINDNINJADLL_EXPORT NinjaErr NinjaSetPDFOutFlag - ( NinjaArmyH* ninjaArmy, const int nIndex, const bool flag, char ** options ); + ( NinjaArmyH* ninjaArmy, const int nIndex, const bool flag, char ** papszOptions ); WINDNINJADLL_EXPORT NinjaErr NinjaSetPDFResolution ( NinjaArmyH* ninjaArmy, const int nIndex, const double resolution, const char * units, char ** papszOptions ); From 5c46891d0da8398e4c2160f1b7fad0c845960744 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 1 Aug 2025 11:45:13 -0600 Subject: [PATCH 144/435] Cleaning up the code, starting with mainwindow's constructor --- src/gui/CMakeLists.txt | 3 - src/gui/domainaverageinput.cpp | 6 ++ src/gui/mainwindow.cpp | 117 +++++++-------------------------- src/gui/surfaceinput.cpp | 7 ++ src/gui/surfaceinput.h | 3 +- 5 files changed, 38 insertions(+), 98 deletions(-) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 5afc9738d..aeb6ca887 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -61,9 +61,6 @@ target_include_directories(WindNinja PRIVATE /usr/local/include) add_dependencies(WindNinja ninja) -add_definitions(-DMAP_PATH="${CMAKE_SOURCE_DIR}/data/map.html") - - target_link_libraries(WindNinja PRIVATE Qt${QT_VERSION_MAJOR}::Widgets PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets PRIVATE ninja) # Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. diff --git a/src/gui/domainaverageinput.cpp b/src/gui/domainaverageinput.cpp index 77941331d..d0c996612 100644 --- a/src/gui/domainaverageinput.cpp +++ b/src/gui/domainaverageinput.cpp @@ -34,6 +34,12 @@ DomainAverageInput::DomainAverageInput(Ui::MainWindow* ui, QObject* parent) : QObject(parent), ui(ui) { + ui->domainAverageTable->hideColumn(2); + ui->domainAverageTable->hideColumn(3); + ui->domainAverageTable->hideColumn(4); + ui->domainAverageTable->hideColumn(5); + ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + connect(ui->inputWindHeightComboBox, &QComboBox::currentIndexChanged, this, &DomainAverageInput::windHeightComboBoxCurrentIndexChanged); connect(ui->clearTableButton, &QPushButton::clicked, this, &DomainAverageInput::clearTableButtonClicked); connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &DomainAverageInput::domainAverageTableCellChanged); diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 14860008a..bd9757a30 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -301,117 +301,55 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { - ui->setupUi(this); serverBridge = new ServerBridge(); serverBridge->checkMessages(); + + ui->setupUi(this); resize(1200, 700); refreshUI(); ui->treeWidget->expandAll(); - - /* - * Create file handler window for point init screen - */ - QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - // Enable QFileSystemModel to process directories and files - QFileSystemModel *model = new QFileSystemModel(this); - model->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs | QDir::AllEntries); // Ensure files appear - model->setRootPath(downloadsPath); - - // Enable file watching so contents refresh properly - model->setReadOnly(false); - model->setResolveSymlinks(true); - - // Set the correct root index inside Downloads - QModelIndex rootIndex = model->index(downloadsPath); - ui->treeFileExplorer->setModel(model); - ui->treeFileExplorer->setRootIndex(rootIndex); - - // Ensure folders expand and collapse correctly - ui->treeFileExplorer->setExpandsOnDoubleClick(true); - ui->treeFileExplorer->setAnimated(true); - ui->treeFileExplorer->setIndentation(15); - ui->treeFileExplorer->setSortingEnabled(true); - ui->treeFileExplorer->setItemsExpandable(true); - ui->treeFileExplorer->setUniformRowHeights(true); - - // Show only "Name" and "Date Modified" columns - ui->treeFileExplorer->hideColumn(1); // Hide Size column - ui->treeFileExplorer->hideColumn(2); // Hide Type column - - // Optional: Set column headers - QHeaderView *header = ui->treeFileExplorer->header(); - header->setSectionResizeMode(0, QHeaderView::Interactive); - header->setSectionResizeMode(3, QHeaderView::Stretch); - model->setHeaderData(0, Qt::Horizontal, "Name"); - model->setHeaderData(3, Qt::Horizontal, "Date Modified"); - ui->treeFileExplorer->expandAll(); + menuBar = new MenuBar(ui, this); + surfaceInput = new SurfaceInput(ui, webView, this); + domainAverageInput = new DomainAverageInput(ui, this); QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true); QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); - - QString filePath = QString(MAP_PATH); + QString dataPath = QString::fromUtf8(CPLGetConfigOption("WINDNINJA_DATA", "")); + QString mapPath = QDir(dataPath).filePath("map.html"); channel = new QWebChannel(this); mapBridge = new MapBridge(this); webView = new QWebEngineView(ui->mapPanelWidget); channel->registerObject(QStringLiteral("bridge"), mapBridge); webView->page()->setWebChannel(channel); - QUrl url = QUrl::fromLocalFile(filePath); + QUrl url = QUrl::fromLocalFile(mapPath); webView->setUrl(url); - - menuBar = new MenuBar(ui, this); - - surfaceInput = new SurfaceInput(ui, webView, this); - surfaceInput->timeZoneAllZonesCheckBoxClicked(); - domainAverageInput = new DomainAverageInput(ui, this); - QVBoxLayout *layout = new QVBoxLayout(); layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(webView); - ui->mapPanelWidget->setLayout(layout); - /* - * Connect tree items to stacked tab window - */ - // Top-level items ui->inputsStackedWidget->setCurrentIndex(0); ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); - // Sub-items for Solver Methodology - ui->treeWidget->topLevelItem(0)->child(0)->setData(0, Qt::UserRole, 2); // Conservation of Mass (Page 1) - ui->treeWidget->topLevelItem(0)->child(1)->setData(0, Qt::UserRole, 3); // Conservation of Mass and Momentum (Page 2) - + ui->treeWidget->topLevelItem(0)->child(0)->setData(0, Qt::UserRole, 2); + ui->treeWidget->topLevelItem(0)->child(1)->setData(0, Qt::UserRole, 3); ui->treeWidget->topLevelItem(1)->setData(0, Qt::UserRole, 4); - // Sub-items for Inputs - ui->treeWidget->topLevelItem(1)->child(0)->setData(0, Qt::UserRole, 5); // Surface Input (Page 6) - ui->treeWidget->topLevelItem(1)->child(1)->setData(0, Qt::UserRole, 6); // Dirunal Input (Page 7) - - ui->treeWidget->topLevelItem(1)->child(2)->setData(0, Qt::UserRole, 7); // Stability Input (Page 8) - ui->treeWidget->topLevelItem(1)->child(3)->setData(0, Qt::UserRole, 8); // Wind Input (Page 9) - // Sub-sub-items for Wind Input + ui->treeWidget->topLevelItem(1)->child(0)->setData(0, Qt::UserRole, 5); + ui->treeWidget->topLevelItem(1)->child(1)->setData(0, Qt::UserRole, 6); + ui->treeWidget->topLevelItem(1)->child(2)->setData(0, Qt::UserRole, 7); + ui->treeWidget->topLevelItem(1)->child(3)->setData(0, Qt::UserRole, 8); QTreeWidgetItem *windInputItem = ui->treeWidget->topLevelItem(1)->child(3); - windInputItem->child(0)->setData(0, Qt::UserRole, 9); // Domain Average Wind (Page 9) - windInputItem->child(1)->setData(0, Qt::UserRole, 10); // Point Init (Page 10) - windInputItem->child(2)->setData(0, Qt::UserRole, 11); // Weather Model (Page 11) - + windInputItem->child(0)->setData(0, Qt::UserRole, 9); + windInputItem->child(1)->setData(0, Qt::UserRole, 10); + windInputItem->child(2)->setData(0, Qt::UserRole, 11); ui->treeWidget->topLevelItem(2)->setData(0, Qt::UserRole, 12); - // Sub-items for Outputs - ui->treeWidget->topLevelItem(2)->child(0)->setData(0, Qt::UserRole, 13); // Surface Input (Page 6) - ui->treeWidget->topLevelItem(2)->child(1)->setData(0, Qt::UserRole, 14); // Dirunal Input (Page 7) - ui->treeWidget->topLevelItem(2)->child(2)->setData(0, Qt::UserRole, 15); // Stability Input (Page 8) - ui->treeWidget->topLevelItem(2)->child(3)->setData(0, Qt::UserRole, 16); // Wind Input (Page 9) - ui->treeWidget->topLevelItem(2)->child(4)->setData(0, Qt::UserRole, 17); // Wind Input (Page 9) - + ui->treeWidget->topLevelItem(2)->child(0)->setData(0, Qt::UserRole, 13); + ui->treeWidget->topLevelItem(2)->child(1)->setData(0, Qt::UserRole, 14); + ui->treeWidget->topLevelItem(2)->child(2)->setData(0, Qt::UserRole, 15); + ui->treeWidget->topLevelItem(2)->child(3)->setData(0, Qt::UserRole, 16); + ui->treeWidget->topLevelItem(2)->child(4)->setData(0, Qt::UserRole, 17); ui->treeWidget->topLevelItem(3)->setData(0, Qt::UserRole, 18); - /* - * Basic initial setup steps - */ - // Surface Input window - ui->elevationInputFileOpenButton->setIcon(QIcon(":/folder.png")); - ui->elevationInputFileDownloadButton->setIcon(QIcon(":/server_go.png")); - ui->elevationInputTypePushButton->setIcon(QIcon(":/swoop_final.png")); - // Solver window int nCPUs = QThread::idealThreadCount(); ui->availableProcessorsTextEdit->setPlainText("Available Processors: " + QString::number(nCPUs)); @@ -422,19 +360,10 @@ MainWindow::MainWindow(QWidget *parent) ui->downloadPointInitData->setIcon(QIcon(":/application_get")); // Populate default location for output location + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); ui->outputDirectoryLineEdit->setText(downloadsPath); ui->outputDirectoryButton->setIcon(QIcon(":/folder.png")); - // Set initial visibility of time zone details - ui->timeZoneDetailsTextEdit->setVisible(false); - - // Set initial formatting of domain average input table - ui->domainAverageTable->hideColumn(2); - ui->domainAverageTable->hideColumn(3); - ui->domainAverageTable->hideColumn(4); - ui->domainAverageTable->hideColumn(5); - ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); - ui->outputWindHeightUnitsComboBox->setItemData(0, "ft"); ui->outputWindHeightUnitsComboBox->setItemData(1, "m"); ui->meshResolutionUnitsComboBox->setItemData(0, "m"); diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 8705a199a..67df2161c 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -37,6 +37,13 @@ SurfaceInput::SurfaceInput(Ui::MainWindow *ui, ui(ui), webView(webView) { + ui->elevationInputFileOpenButton->setIcon(QIcon(":/folder.png")); + ui->elevationInputFileDownloadButton->setIcon(QIcon(":/server_go.png")); + ui->elevationInputTypePushButton->setIcon(QIcon(":/swoop_final.png")); + ui->timeZoneDetailsTextEdit->setVisible(false); + + timeZoneAllZonesCheckBoxClicked(); + connect(ui->boundingBoxNorthLineEdit, &QLineEdit::textChanged, this, &SurfaceInput::boundingBoxLineEditsTextChanged); connect(ui->boundingBoxSouthLineEdit, &QLineEdit::textChanged, this, &SurfaceInput::boundingBoxLineEditsTextChanged); connect(ui->boundingBoxEastLineEdit, &QLineEdit::textChanged, this, &SurfaceInput::boundingBoxLineEditsTextChanged); diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index 40ef6934b..10f5a55ff 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -66,7 +66,6 @@ class SurfaceInput : public QObject public slots: void boundingBoxReceived(double north, double south, double east, double west); void elevationInputFileOpenButtonClicked(); - void timeZoneAllZonesCheckBoxClicked(); private slots: void surfaceInputDownloadCancelButtonClicked(); @@ -81,6 +80,8 @@ private slots: void fetchDEMFinished(); void timeZoneDetailsCheckBoxClicked(); void timeZoneComboBoxCurrentIndexChanged(int index); + void timeZoneAllZonesCheckBoxClicked(); + private: Ui::MainWindow *ui; From ccec62bd892daa6c91e5878081df6fe7045654b3 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 1 Aug 2025 13:00:00 -0600 Subject: [PATCH 145/435] Went through and standardized code format among all classes, fixed bug where mesh resolution was being calculated before DEM was selected --- src/gui/appstate.h | 3 +- src/gui/domainaverageinput.cpp | 37 ++++-- src/gui/domainaverageinput.h | 11 +- src/gui/main.cpp | 20 ++-- src/gui/mainwindow.cpp | 199 ++++++++++++++------------------- src/gui/mainwindow.h | 14 +-- src/gui/mapbridge.cpp | 6 +- src/gui/mapbridge.h | 6 +- src/gui/menubar.h | 3 +- src/gui/serverbridge.cpp | 43 ++++--- src/gui/splashscreen.h | 3 +- src/gui/surfaceinput.cpp | 113 ++++++++++++------- src/gui/surfaceinput.h | 16 +-- 13 files changed, 254 insertions(+), 220 deletions(-) diff --git a/src/gui/appstate.h b/src/gui/appstate.h index be8fdf8ab..eaa734954 100644 --- a/src/gui/appstate.h +++ b/src/gui/appstate.h @@ -33,7 +33,8 @@ class AppState { public: - static AppState& instance() { + static AppState& instance() + { static AppState s; return s; } diff --git a/src/gui/domainaverageinput.cpp b/src/gui/domainaverageinput.cpp index d0c996612..cd650114b 100644 --- a/src/gui/domainaverageinput.cpp +++ b/src/gui/domainaverageinput.cpp @@ -64,43 +64,52 @@ void DomainAverageInput::domainAverageTableCellChanged(int row, int column) { switch (column) { - case 0: { + case 0: + { double d = value.toDouble(&valid); - if (!valid || d <= 0) { + if (!valid || d <= 0) + { valid = false; errorMessage = "Must be a positive number"; } break; } - case 1: { + case 1: + { int i = value.toDouble(&valid); - if (!valid || i < 0 || i > 359.9) { + if (!valid || i < 0 || i > 359.9) + { valid = false; errorMessage = "Must be a number between 0 and 359"; } break; } - case 2: { + case 2: + { QTime t = QTime::fromString(value, "hh:mm"); valid = t.isValid(); if (!valid) errorMessage = "Must be a valid 24h time (hh:mm)"; break; } - case 3: { + case 3: + { QDate d = QDate::fromString(value, "MM/dd/yyyy"); valid = d.isValid(); if (!valid) errorMessage = "Must be a valid date (MM/DD/YYYY)"; break; } - case 4: { + case 4: + { int i = value.toDouble(&valid); - if (!valid || i < 0 || i > 100) { + if (!valid || i < 0 || i > 100) + { valid = false; errorMessage = "Must be a number between 0 and 100"; } break; } - case 5: { + case 5: + { value.toInt(&valid); if (!valid) errorMessage = "Must be an integer"; break; @@ -111,11 +120,14 @@ void DomainAverageInput::domainAverageTableCellChanged(int row, int column) } QPair cell(row, column); - if (!valid) { + if (!valid) + { invalidDAWCells.insert(cell); item->setBackground(Qt::red); item->setToolTip(errorMessage); - } else { + } + else + { invalidDAWCells.remove(cell); item->setBackground(QBrush()); // Reset to default item->setToolTip(""); @@ -167,7 +179,8 @@ void DomainAverageInput::domainAverageGroupBoxToggled() AppState& state = AppState::instance(); state.isDomainAverageInitializationToggled = ui->domainAverageGroupBox->isChecked(); - if (state.isDomainAverageInitializationToggled) { + if (state.isDomainAverageInitializationToggled) + { ui->pointInitializationCheckBox->setChecked(false); ui->weatherModelCheckBox->setChecked(false); state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); diff --git a/src/gui/domainaverageinput.h b/src/gui/domainaverageinput.h index 001bf3050..9a36e5211 100644 --- a/src/gui/domainaverageinput.h +++ b/src/gui/domainaverageinput.h @@ -27,7 +27,6 @@ * *****************************************************************************/ - #ifndef DOMAINAVERAGEINPUT_H #define DOMAINAVERAGEINPUT_H @@ -36,18 +35,20 @@ #include #include -namespace Ui { -class MainWindow; +namespace Ui +{ + class MainWindow; } -class DomainAverageInput: public QObject { +class DomainAverageInput: public QObject +{ Q_OBJECT signals: void requestRefresh(); public: - explicit DomainAverageInput(Ui::MainWindow* ui, QObject* parent = nullptr); + DomainAverageInput(Ui::MainWindow* ui, QObject* parent = nullptr); private slots: void domainAverageTableCellChanged(int row, int column); diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 910ddd0b6..8de842578 100755 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include "splashscreen.h" @@ -51,7 +52,7 @@ int main(int argc, char *argv[]) err = NinjaInit(papszOptions); //TODO: NEED TO ADD NINJA INITIALIZE FOR GUI THROUGH API if(err != NINJA_SUCCESS) { - printf("NinjaInit: err = %d\n", err); + qDebug() << "NinjaInit: err =" << err; } QApplication a(argc, argv); @@ -62,13 +63,16 @@ int main(int argc, char *argv[]) a.setApplicationVersion(ver); MainWindow* w = nullptr; - try { - w = new MainWindow; - } catch (...) { - QMessageBox::critical(nullptr, "Initialization Error", - "WindNinja failed to initialize. Most likely cause is failure to find data " - "dependencies. Try setting the environment variable WINDNINJA_DATA"); - return 1; + try + { + w = new MainWindow; + } + catch (...) + { + QMessageBox::critical(nullptr, "Initialization Error", + "WindNinja failed to initialize. Most likely cause is failure to find data " + "dependencies. Try setting the environment variable WINDNINJA_DATA"); + return 1; } QPixmap bigSplashPixmap(":wn-splash.png"); diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index bd9757a30..ef7c550d9 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -310,24 +310,24 @@ MainWindow::MainWindow(QWidget *parent) ui->treeWidget->expandAll(); ui->treeFileExplorer->expandAll(); - menuBar = new MenuBar(ui, this); - surfaceInput = new SurfaceInput(ui, webView, this); - domainAverageInput = new DomainAverageInput(ui, this); QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true); QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); QString dataPath = QString::fromUtf8(CPLGetConfigOption("WINDNINJA_DATA", "")); QString mapPath = QDir(dataPath).filePath("map.html"); - channel = new QWebChannel(this); + webChannel = new QWebChannel(this); mapBridge = new MapBridge(this); - webView = new QWebEngineView(ui->mapPanelWidget); - channel->registerObject(QStringLiteral("bridge"), mapBridge); - webView->page()->setWebChannel(channel); + webEngineView = new QWebEngineView(ui->mapPanelWidget); + webChannel->registerObject(QStringLiteral("bridge"), mapBridge); + webEngineView->page()->setWebChannel(webChannel); QUrl url = QUrl::fromLocalFile(mapPath); - webView->setUrl(url); + webEngineView->setUrl(url); QVBoxLayout *layout = new QVBoxLayout(); layout->setContentsMargins(0, 0, 0, 0); - layout->addWidget(webView); + layout->addWidget(webEngineView); ui->mapPanelWidget->setLayout(layout); + menuBar = new MenuBar(ui, this); + surfaceInput = new SurfaceInput(ui, webEngineView, this); + domainAverageInput = new DomainAverageInput(ui, this); ui->inputsStackedWidget->setCurrentIndex(0); ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); @@ -350,16 +350,12 @@ MainWindow::MainWindow(QWidget *parent) ui->treeWidget->topLevelItem(2)->child(4)->setData(0, Qt::UserRole, 17); ui->treeWidget->topLevelItem(3)->setData(0, Qt::UserRole, 18); - // Solver window int nCPUs = QThread::idealThreadCount(); ui->availableProcessorsTextEdit->setPlainText("Available Processors: " + QString::number(nCPUs)); ui->numberOfProcessorsSpinBox->setMaximum(nCPUs); ui->numberOfProcessorsSpinBox->setValue(nCPUs); - - // Wind Input -> Point Init window ui->downloadPointInitData->setIcon(QIcon(":/application_get")); - // Populate default location for output location QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); ui->outputDirectoryLineEdit->setText(downloadsPath); ui->outputDirectoryButton->setIcon(QIcon(":/folder.png")); @@ -376,7 +372,6 @@ MainWindow::MainWindow(QWidget *parent) ui->shapeFilesMeshResolutionComboBox->setItemData(1, "ft"); ui->geospatialPDFFilesMeshResolutionComboBox->setItemData(0, "m"); ui->geospatialPDFFilesMeshResolutionComboBox->setItemData(1, "ft"); - ui->alternativeColorSchemeComboBox->setItemData(0, "default"); ui->alternativeColorSchemeComboBox->setItemData(1, "ROPGW"); ui->alternativeColorSchemeComboBox->setItemData(2, "oranges"); @@ -385,21 +380,20 @@ MainWindow::MainWindow(QWidget *parent) ui->alternativeColorSchemeComboBox->setItemData(5, "greens"); ui->alternativeColorSchemeComboBox->setItemData(6, "magic_beans"); ui->alternativeColorSchemeComboBox->setItemData(7, "pink_to_green"); - ui->legendComboBox->setItemData(0, "equal_interval"); - ui->legendComboBox->setItemData(0, "equal_color"); + ui->legendComboBox->setItemData(1, "equal_color"); connectSignals(); } MainWindow::~MainWindow() { - delete webView; - delete channel; - delete mapBridge; - delete surfaceInput; - delete menuBar; - delete ui; + delete webEngineView; + delete webChannel; + delete mapBridge; + delete surfaceInput; + delete menuBar; + delete ui; } void MainWindow::connectSignals() @@ -430,75 +424,27 @@ void MainWindow::connectSignals() connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); } -void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { +void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) +{ int pageIndex = item->data(column, Qt::UserRole).toInt(); - if (pageIndex >= 0) { - if(pageIndex >= 6) { - ui->inputsStackedWidget->setCurrentIndex(pageIndex); - } - else { - ui->inputsStackedWidget->setCurrentIndex(pageIndex); - } - } -} - -// Recursive function to add files and directories correctly with Name and Date columns -void addFilesRecursively(QStandardItem *parentItem, const QString &dirPath) { - QDir dir(dirPath); - QFileInfoList entries = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); - for (const QFileInfo &entry : entries) { - QStandardItem *nameItem = new QStandardItem(entry.fileName()); - QStandardItem *dateItem = new QStandardItem(entry.lastModified().toString("yyyy-MM-dd HH:mm:ss")); - nameItem->setEditable(false); - dateItem->setEditable(false); - parentItem->appendRow({nameItem, dateItem}); - if (entry.isDir()) { - addFilesRecursively(nameItem, entry.absoluteFilePath()); - } - } + ui->inputsStackedWidget->setCurrentIndex(pageIndex); } -// Function to populate weatherModelDataTreeView with .tif parent directories and all nested contents -void MainWindow::populateForecastDownloads() { - QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - QDir downloadsDir(downloadsPath); - - if (!downloadsDir.exists()) return; - - QStandardItemModel *model = new QStandardItemModel(this); - model->setHorizontalHeaderLabels({"Name", "Date Modified"}); - - QDirIterator it(downloadsPath, QDir::Dirs | QDir::NoDotAndDotDot); - while (it.hasNext()) { - QString dirPath = it.next(); - if (dirPath.endsWith(".tif", Qt::CaseInsensitive)) { - QStandardItem *parentItem = new QStandardItem(QFileInfo(dirPath).fileName()); - parentItem->setEditable(false); - addFilesRecursively(parentItem, dirPath); - model->appendRow(parentItem); - } - } - - ui->weatherModelDataTreeView->setModel(model); - ui->weatherModelDataTreeView->header()->setSectionResizeMode(QHeaderView::Stretch); - - // Disable editing and enable double-click expansion - ui->weatherModelDataTreeView->setEditTriggers(QAbstractItemView::NoEditTriggers); - ui->weatherModelDataTreeView->setExpandsOnDoubleClick(true); -} - - void MainWindow::massSolverCheckBoxClicked() { AppState& state = AppState::instance(); - if (state.isMomentumSolverToggled) { + if (state.isMomentumSolverToggled) + { ui->momentumSolverCheckBox->setChecked(false); state.isMomentumSolverToggled = ui->momentumSolverCheckBox->isChecked(); } state.isMassSolverToggled = ui->massSolverCheckBox->isChecked(); - ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + if(!ui->elevationInputFileLineEdit->text().isEmpty()) + { + ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + } refreshUI(); } @@ -506,13 +452,17 @@ void MainWindow::momentumSolverCheckBoxClicked() { AppState& state = AppState::instance(); - if (state.isMassSolverToggled) { + if (state.isMassSolverToggled) + { ui->massSolverCheckBox->setChecked(false); state.isMassSolverToggled = ui->massSolverCheckBox->isChecked(); } state.isMomentumSolverToggled = ui->momentumSolverCheckBox->isChecked(); - ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + if(!ui->elevationInputFileLineEdit->text().isEmpty()) + { + ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + } refreshUI(); } @@ -522,13 +472,16 @@ void MainWindow::diurnalCheckBoxClicked() state.isDiurnalInputToggled = ui->diurnalCheckBox->isChecked(); QTableWidget* table = ui->domainAverageTable; - if(!ui->diurnalCheckBox->isChecked()) { + if(!ui->diurnalCheckBox->isChecked()) + { table->hideColumn(2); table->hideColumn(3); table->hideColumn(4); table->hideColumn(5); ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); - } else { + } + else + { table->showColumn(2); table->showColumn(3); table->showColumn(4); @@ -553,7 +506,8 @@ void MainWindow::pointInitializationCheckBoxClicked() AppState& state = AppState::instance(); state.isPointInitializationToggled = ui->pointInitializationCheckBox->isChecked(); - if (state.isPointInitializationToggled) { + if (state.isPointInitializationToggled) + { ui->domainAverageGroupBox->setChecked(false); ui->weatherModelCheckBox->setChecked(false); state.isDomainAverageInitializationToggled = ui->domainAverageGroupBox->isChecked(); @@ -569,7 +523,8 @@ void MainWindow::useWeatherModelInitClicked() state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); - if (state.isWeatherModelInitializationToggled) { + if (state.isWeatherModelInitializationToggled) + { ui->domainAverageGroupBox->setChecked(false); ui->pointInitializationCheckBox->setChecked(false); state.isDomainAverageInitializationToggled = ui->domainAverageGroupBox->isChecked(); @@ -616,7 +571,8 @@ void MainWindow::solveButtonClicked() initializationMethod = "domain_average"; int rowCount = ui->domainAverageTable->rowCount(); - for (int row = 0; row < rowCount; ++row) { + for (int row = 0; row < rowCount; ++row) + { QTableWidgetItem* speedItem = ui->domainAverageTable->item(row, 0); QTableWidgetItem* directionItem = ui->domainAverageTable->item(row, 1); @@ -651,7 +607,8 @@ void MainWindow::solveButtonClicked() int meshInt = static_cast(std::round(ui->meshResolutionSpinBox->value())); QString meshSize = QString::number(meshInt) + "m"; - for (int i = 0; i < numNinjas; i++) { + for (int i = 0; i < numNinjas; i++) + { QString filePath = outDir.filePath(QString("%1_%2_%3_%4.kmz") .arg(demName) .arg(directions[i]) @@ -660,7 +617,8 @@ void MainWindow::solveButtonClicked() outputFiles.push_back(filePath.toStdString()); } - for (const auto& dir : outputFiles) { + for (const auto& dir : outputFiles) + { QString qDir = QString::fromStdString(dir); QFile f(qDir); @@ -668,7 +626,7 @@ void MainWindow::solveButtonClicked() QByteArray data = f.readAll(); QString base64 = data.toBase64(); - webView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); } } @@ -677,82 +635,87 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) if (item->text(0) == "Conservation of Mass") { ui->massSolverCheckBox->click(); - } else if (item->text(0) == "Conservation of Mass and Momentum") + } + else if (item->text(0) == "Conservation of Mass and Momentum") { ui->momentumSolverCheckBox->click(); - } else if (item->text(0) == "Diurnal Input") + } + else if (item->text(0) == "Diurnal Input") { ui->diurnalCheckBox->click(); - } else if (item->text(0) == "Stability Input") + } + else if (item->text(0) == "Stability Input") { ui->stabilityCheckBox->click(); - } else if (item->text(0) == "Domain Average Wind") + } + else if (item->text(0) == "Domain Average Wind") { if(!ui->domainAverageGroupBox->isChecked()) { ui->domainAverageGroupBox->setChecked(true); - }else + } + else { ui->domainAverageGroupBox->setChecked(false); } - } else if (item->text(0) == "Point Initialization") + } + else if (item->text(0) == "Point Initialization") { ui->pointInitializationCheckBox->click(); - } else if (item->text(0) == "Weather Model") + } + else if (item->text(0) == "Weather Model") { ui->weatherModelCheckBox->click(); - } else if (item->text(0) == "Surface Input") + } + else if (item->text(0) == "Surface Input") { - surfaceInput->elevationInputFileOpenButtonClicked(); - } else if (item->text(0) == "Google Earth") + ui->elevationInputFileOpenButton->click(); + } + else if (item->text(0) == "Google Earth") { if(!ui->googleEarthGroupBox->isChecked()) { ui->googleEarthGroupBox->setChecked(true); - }else - { - ui->googleEarthGroupBox->setChecked(false); } - } else if (item->text(0) == "Surface Input") - { - surfaceInput->elevationInputFileOpenButtonClicked(); - } else if (item->text(0) == "Google Earth") - { - if(!ui->googleEarthGroupBox->isChecked()) - { - ui->googleEarthGroupBox->setChecked(true); - }else + else { ui->googleEarthGroupBox->setChecked(false); } - } else if (item->text(0) == "Fire Behavior") + } + else if (item->text(0) == "Fire Behavior") { if(!ui->fireBehaviorGroupBox->isChecked()) { ui->fireBehaviorGroupBox->setChecked(true); - }else + } + else { ui->fireBehaviorGroupBox->setChecked(false); } - } else if (item->text(0) == "Shape Files") + } + else if (item->text(0) == "Shape Files") { if(!ui->shapeFilesGroupBox->isChecked()) { ui->shapeFilesGroupBox->setChecked(true); - }else + } + else { ui->shapeFilesGroupBox->setChecked(false); } - } else if (item->text(0) == "Geospatial PDF Files") + } + else if (item->text(0) == "Geospatial PDF Files") { if(!ui->geospatialPDFFilesGroupBox->isChecked()) { ui->geospatialPDFFilesGroupBox->setChecked(true); - }else + } + else { ui->geospatialPDFFilesGroupBox->setChecked(false); } - } else if (item->text(0) == "VTK Files") + } + else if (item->text(0) == "VTK Files") { ui->VTKFilesCheckBox->click(); } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index da67971a9..d84f2ee28 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -69,11 +69,10 @@ #include #include - - QT_BEGIN_NAMESPACE -namespace Ui { -class MainWindow; +namespace Ui +{ + class MainWindow; } QT_END_NAMESPACE @@ -82,7 +81,6 @@ class MainWindow : public QMainWindow Q_OBJECT public: - void populateForecastDownloads(); void toggleExpandCollapse(const QModelIndex &index); void loadMapKMZ(const std::vector& input); @@ -109,14 +107,12 @@ private slots: void fireBehaviorMeshResolutionGroupBoxToggled(bool checked); void shapeFilesMeshResolutionGroupBoxToggled(bool checked); void geospatialPDFFilesMeshResolutionGroupBoxToggled(bool checked); - - void refreshUI(); private: Ui::MainWindow *ui; - QWebEngineView *webView; - QWebChannel *channel; + QWebEngineView *webEngineView; + QWebChannel *webChannel; MapBridge *mapBridge; SurfaceInput *surfaceInput; MenuBar *menuBar; diff --git a/src/gui/mapbridge.cpp b/src/gui/mapbridge.cpp index b4ebe862c..ed9e6d55e 100644 --- a/src/gui/mapbridge.cpp +++ b/src/gui/mapbridge.cpp @@ -29,9 +29,11 @@ #include "mapbridge.h" -void MapBridge::receiveBoundingBox(const QString &jsonCoords) { +void MapBridge::receiveBoundingBox(const QString &jsonCoords) + { QJsonDocument doc = QJsonDocument::fromJson(jsonCoords.toUtf8()); - if (!doc.isObject()) { + if (!doc.isObject()) + { qWarning() << "Invalid bounding box JSON"; return; } diff --git a/src/gui/mapbridge.h b/src/gui/mapbridge.h index 4737e557a..653dec425 100644 --- a/src/gui/mapbridge.h +++ b/src/gui/mapbridge.h @@ -35,10 +35,12 @@ #include #include -class MapBridge : public QObject { +class MapBridge : public QObject +{ Q_OBJECT + public: - explicit MapBridge(QObject *parent = nullptr) : QObject(parent) {} + MapBridge(QObject *parent = nullptr) : QObject(parent) {} signals: void boundingBoxReceived(double north, double south, double east, double west); diff --git a/src/gui/menubar.h b/src/gui/menubar.h index 0d7970404..a566df357 100644 --- a/src/gui/menubar.h +++ b/src/gui/menubar.h @@ -39,8 +39,9 @@ class MainWindow; class MenuBar : public QObject { Q_OBJECT + public: - explicit MenuBar(Ui::MainWindow* ui, QObject* parent = nullptr); + MenuBar(Ui::MainWindow* ui, QObject* parent = nullptr); private slots: // functions for Menu actions diff --git a/src/gui/serverbridge.cpp b/src/gui/serverbridge.cpp index 6966b73de..725f49f76 100644 --- a/src/gui/serverbridge.cpp +++ b/src/gui/serverbridge.cpp @@ -34,20 +34,23 @@ ServerBridge::ServerBridge() {} /* ** Check for version updates, or messages from the server. */ -void ServerBridge::checkMessages(void) { +void ServerBridge::checkMessages(void) +{ QMessageBox mbox; char *papszMsg = NinjaQueryServerMessages(true); if (papszMsg != NULL) { - if (strcmp(papszMsg, "TRUE\n") == 0) { + if (strcmp(papszMsg, "TRUE\n") == 0) + { mbox.setText("There is a fatal flaw in Windninja, it must close."); mbox.exec(); delete[] papszMsg; abort(); } - - else { + else + { char *papszMsg = NinjaQueryServerMessages(false); - if (papszMsg != NULL) { + if (papszMsg != NULL) + { mbox.setText(papszMsg); mbox.exec(); @@ -66,7 +69,8 @@ void ServerBridge::checkMessages(void) { ** ABORT -> There is a fundamental problem with windninja, and it should call ** abort() after displaying a message. */ -bool ServerBridge::NinjaCheckVersions(char * mostrecentversion, char * localversion) { +bool ServerBridge::NinjaCheckVersions(char * mostrecentversion, char * localversion) +{ char comparemostrecentversion[256]; char comparelocalversion[256]; int mostrecentversionIndex = 0; @@ -109,28 +113,37 @@ char * ServerBridge::NinjaQueryServerMessages(bool checkAbort) std::string message; // Read all lines into the vector - while (std::getline(iss, message)) { + while (std::getline(iss, message)) + { messages.push_back(message); } // Process all lines except the last two std::ostringstream oss; - if (checkAbort) { - for (size_t i = 0; i < messages.size(); ++i) { - if (i == messages.size()-1) { // check final line + if (checkAbort) + { + for (size_t i = 0; i < messages.size(); ++i) + { + if (i == messages.size()-1) + { oss << messages[i] << "\n"; } } } - else { + else + { bool versionisuptodate = NinjaCheckVersions(const_cast(messages[1].c_str()), const_cast(NINJA_VERSION_STRING)); - if (!versionisuptodate) { + if (!versionisuptodate) + { oss << messages[0] << "\n"; oss << "You are using an outdated WindNinja version, please update to version: " << messages[1] << "\n" << "\n"; } - if (messages[4].empty() == false) { - for (size_t i = 3; i < messages.size() - 2; ++i) { - if (!messages[i].empty()) { + if (messages[4].empty() == false) + { + for (size_t i = 3; i < messages.size() - 2; ++i) + { + if (!messages[i].empty()) + { oss << messages[i] << "\n"; } } diff --git a/src/gui/splashscreen.h b/src/gui/splashscreen.h index de5e91eda..d4889a300 100644 --- a/src/gui/splashscreen.h +++ b/src/gui/splashscreen.h @@ -33,7 +33,8 @@ #include #include -class SplashScreen : public QSplashScreen { +class SplashScreen : public QSplashScreen +{ Q_OBJECT public: diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 67df2161c..905be699c 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -31,11 +31,11 @@ #include "ui_mainwindow.h" SurfaceInput::SurfaceInput(Ui::MainWindow *ui, - QWebEngineView *webView, + QWebEngineView *webEngineView, QObject* parent) : QObject(parent), ui(ui), - webView(webView) + webEngineView(webEngineView) { ui->elevationInputFileOpenButton->setIcon(QIcon(":/folder.png")); ui->elevationInputFileDownloadButton->setIcon(QIcon(":/server_go.png")); @@ -84,11 +84,11 @@ void SurfaceInput::elevationInputTypePushButtonClicked() { if(ui->elevationInputTypePushButton->isChecked()) { - webView->page()->runJavaScript("startRectangleDrawing();"); + webEngineView->page()->runJavaScript("startRectangleDrawing();"); } else { - webView->page()->runJavaScript("stopRectangleDrawing();"); + webEngineView->page()->runJavaScript("stopRectangleDrawing();"); } } @@ -134,7 +134,7 @@ void SurfaceInput::boundingBoxLineEditsTextChanged() .arg(south, 0, 'f', 10) .arg(east, 0, 'f', 10) .arg(west, 0, 'f', 10); - webView->page()->runJavaScript(js); + webEngineView->page()->runJavaScript(js); } } @@ -174,14 +174,14 @@ void SurfaceInput::surfaceInputDownloadCancelButtonClicked() ui->pointRadiusLonLineEdit->clear(); ui->pointRadiusRadiusLineEdit->clear(); - webView->page()->runJavaScript("stopRectangleDrawing();"); + webEngineView->page()->runJavaScript("stopRectangleDrawing();"); if(!currentDEMFilePath.isEmpty()) { QStringList cornerStrs; for (int i = 0; i < 8; ++i) cornerStrs << QString::number(DEMCorners[i], 'f', 8); QString js = QString("drawDEM([%1]);").arg(cornerStrs.join(", ")); - webView->page()->runJavaScript(js); + webEngineView->page()->runJavaScript(js); } } @@ -234,9 +234,12 @@ void SurfaceInput::elevationInputFileDownloadButtonClicked() void SurfaceInput::meshResolutionComboBoxCurrentIndexChanged(int index) { - if (index == 3) { + if (index == 3) + { ui->meshResolutionSpinBox->setEnabled(true); - } else { + } + else + { ui->meshResolutionSpinBox->setEnabled(false); } ui->meshResolutionSpinBox->setValue(computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); @@ -254,7 +257,7 @@ void SurfaceInput::elevationInputFileLineEditTextChanged(const QString &arg1) for (int i = 0; i < 8; ++i) cornerStrs << QString::number(DEMCorners[i], 'f', 8); QString js = QString("drawDEM([%1]);").arg(cornerStrs.join(", ")); - webView->page()->runJavaScript(js); + webEngineView->page()->runJavaScript(js); emit requestRefresh(); } @@ -266,16 +269,20 @@ void SurfaceInput::elevationInputFileOpenButtonClicked() { directoryPath = currentDEMFilePath; } - else { + else + { directoryPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); } QString demFilePath = QFileDialog::getOpenFileName(ui->centralwidget, "Select a file", directoryPath, "(*.tif);;All Files (*)"); - if (demFilePath.isEmpty()) { - if (!currentDEMFilePath.isEmpty()) { - ui->elevationInputFileLineEdit->setText(QFileInfo(currentDEMFilePath).fileName()); - ui->elevationInputFileLineEdit->setToolTip(currentDEMFilePath); - } + if (demFilePath.isEmpty()) + { + if (!currentDEMFilePath.isEmpty()) + { + + ui->elevationInputFileLineEdit->setText(QFileInfo(currentDEMFilePath).fileName()); + ui->elevationInputFileLineEdit->setToolTip(currentDEMFilePath); + } return; } @@ -302,13 +309,15 @@ void SurfaceInput::startFetchDEM(QVector boundingBox, std::string demFil void SurfaceInput::fetchDEMFinished() { - if (progress) { + if (progress) + { progress->close(); progress->deleteLater(); progress = nullptr; } - if (futureWatcher) { + if (futureWatcher) + { futureWatcher->deleteLater(); futureWatcher = nullptr; } @@ -334,8 +343,10 @@ void SurfaceInput::timeZoneAllZonesCheckBoxClicked() QVector> displayData = fetchAllTimeZones(isShowAllTimeZonesSelected); ui->timeZoneComboBox->clear(); - for (const QVector& zone : displayData) { - if (!zone.isEmpty()) { + for (const QVector& zone : displayData) + { + if (!zone.isEmpty()) + { ui->timeZoneComboBox->addItem(zone[0]); } } @@ -351,11 +362,13 @@ void SurfaceInput::timeZoneDetailsCheckBoxClicked() ui->timeZoneDetailsTextEdit->setVisible(state.isDisplayTimeZoneDetailsSelected); } -QString SurfaceInput::fetchTimeZoneDetails(QString currentTimeZone) { +QString SurfaceInput::fetchTimeZoneDetails(QString currentTimeZone) +{ QVector matchedRow; QFile file(":/date_time_zonespec.csv"); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + { qWarning() << "Failed to open date_time_zonespec.csv"; qDebug() << "No data found"; } @@ -363,10 +376,12 @@ QString SurfaceInput::fetchTimeZoneDetails(QString currentTimeZone) { QTextStream in(&file); bool firstLine = true; - while (!in.atEnd()) { + while (!in.atEnd()) + { QString line = in.readLine(); - if (firstLine) { + if (firstLine) + { firstLine = false; continue; // skip header } @@ -379,7 +394,8 @@ QString SurfaceInput::fetchTimeZoneDetails(QString currentTimeZone) { QString fullZone = row.mid(0, 1).join("/"); - if (fullZone == currentTimeZone) { + if (fullZone == currentTimeZone) + { matchedRow = row; break; } @@ -387,7 +403,8 @@ QString SurfaceInput::fetchTimeZoneDetails(QString currentTimeZone) { file.close(); - if (matchedRow.isEmpty()) { + if (matchedRow.isEmpty()) + { qDebug() << "No matching time zone found."; } @@ -396,7 +413,8 @@ QString SurfaceInput::fetchTimeZoneDetails(QString currentTimeZone) { QString stdOffsetStr = matchedRow.value(5); QString dstAdjustStr = matchedRow.value(6); - auto timeToSeconds = [](const QString& t) -> int { + auto timeToSeconds = [](const QString& t) -> int + { QString s = t.trimmed(); bool negative = s.startsWith('-'); s = s.remove(QChar('+')).remove(QChar('-')); @@ -413,7 +431,8 @@ QString SurfaceInput::fetchTimeZoneDetails(QString currentTimeZone) { }; // Convert total seconds back to HH:MM:SS with sign - auto secondsToTime = [](int totalSec) -> QString { + auto secondsToTime = [](int totalSec) -> QString + { QChar sign = totalSec < 0 ? '-' : '+'; totalSec = std::abs(totalSec); @@ -450,7 +469,8 @@ QVector> SurfaceInput::fetchAllTimeZones(bool isShowAllTimeZone QFile file(":/date_time_zonespec.csv"); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + { qDebug() << "Failed to open CSV file."; return fullData; } @@ -458,10 +478,12 @@ QVector> SurfaceInput::fetchAllTimeZones(bool isShowAllTimeZone QTextStream in(&file); bool firstLine = true; - while (!in.atEnd()) { + while (!in.atEnd()) + { QString line = in.readLine(); - if (firstLine) { + if (firstLine) + { firstLine = false; continue; } @@ -469,14 +491,20 @@ QVector> SurfaceInput::fetchAllTimeZones(bool isShowAllTimeZone QStringList tokens = line.split(",", Qt::KeepEmptyParts); QVector row; for (const QString& token : tokens) + { row.append(token.trimmed().remove('"')); + } if (!row.isEmpty()) + { fullData.append(row); + } - if (!row.isEmpty()) { + if (!row.isEmpty()) + { QStringList parts = row[0].split("/", Qt::KeepEmptyParts); - if (!parts.isEmpty() && parts[0] == "America" || row[0] == "Pacific/Honolulu") { + if (!parts.isEmpty() && parts[0] == "America" || row[0] == "Pacific/Honolulu") + { americaData.append(row); } } @@ -484,9 +512,12 @@ QVector> SurfaceInput::fetchAllTimeZones(bool isShowAllTimeZone file.close(); - if (isShowAllTimeZonesSelected) { + if (isShowAllTimeZonesSelected) + { return fullData; - } else { + } + else + { return americaData; } } @@ -498,7 +529,8 @@ int SurfaceInput::fetchDEMFile(QVector boundingBox, std::string demFile, NinjaErr err = 0; err = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); - if (err != NINJA_SUCCESS){ + if (err != NINJA_SUCCESS) + { qDebug() << "NinjaFetchDEMBBox: err =" << err; return err; } @@ -567,7 +599,8 @@ double SurfaceInput::computeMeshResolution(int index, bool isMomemtumChecked) #endif //NINJAFOAM int targetNumHorizCells = fine; - switch (index) { + switch (index) + { case 0: targetNumHorizCells = coarse; break; @@ -594,7 +627,8 @@ double SurfaceInput::computeMeshResolution(int index, bool isMomemtumChecked) meshResolution = (XCellSize + YCellSize) / 2; #ifdef NINJAFOAM - if (isMomemtumChecked) { + if (isMomemtumChecked) + { XLength = GDALXSize * GDALCellSize; YLength = GDALYSize * GDALCellSize; @@ -618,7 +652,8 @@ double SurfaceInput::computeMeshResolution(int index, bool isMomemtumChecked) int refinedCellCount = 0; int nCellsInLowestLayer = int(XLength/side) * int(YLength/side); int nRoundsRefinement = 0; - while(refinedCellCount < (0.5 * targetNumHorizCells)){ + while(refinedCellCount < (0.5 * targetNumHorizCells)) + { nCellsToAdd = nCellsInLowestLayer * 8; //each cell is divided into 8 cells refinedCellCount += nCellsToAdd - nCellsInLowestLayer; //subtract the parent cells nCellsInLowestLayer = nCellsToAdd/2; //only half of the added cells are in the lowest layer diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index 10f5a55ff..4204cc570 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -46,17 +46,19 @@ #include #include -namespace Ui { -class MainWindow; +namespace Ui +{ + class MainWindow; } class SurfaceInput : public QObject { Q_OBJECT + public: - explicit SurfaceInput(Ui::MainWindow* ui, - QWebEngineView* webView, - QObject* parent = nullptr); + SurfaceInput(Ui::MainWindow* ui, + QWebEngineView* webEngineView, + QObject* parent = nullptr); double computeMeshResolution(int index, bool isMomemtumChecked); QString getDEMFilePath(); @@ -65,7 +67,6 @@ class SurfaceInput : public QObject public slots: void boundingBoxReceived(double north, double south, double east, double west); - void elevationInputFileOpenButtonClicked(); private slots: void surfaceInputDownloadCancelButtonClicked(); @@ -81,11 +82,12 @@ private slots: void timeZoneDetailsCheckBoxClicked(); void timeZoneComboBoxCurrentIndexChanged(int index); void timeZoneAllZonesCheckBoxClicked(); + void elevationInputFileOpenButtonClicked(); private: Ui::MainWindow *ui; - QWebEngineView *webView; + QWebEngineView *webEngineView; SurfaceInput *surfaceInput; QProgressDialog *progress; From 7d86a1222b1ce564b64401036b4d6620afffa43f Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 1 Aug 2025 14:22:30 -0600 Subject: [PATCH 146/435] Created a helper function and struct to help get the mesh resolution for each output --- src/gui/mainwindow.cpp | 193 ++++++++++++++++++++--------------------- src/gui/mainwindow.h | 19 +++- 2 files changed, 113 insertions(+), 99 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index ef7c550d9..f79240b5b 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -601,32 +601,35 @@ void MainWindow::solveButtonClicked() printf("NinjaDestroyRuns: err = %d\n", err); } - vector outputFiles; - QDir outDir(ui->outputDirectoryLineEdit->text()); - QString demName = QFileInfo(ui->elevationInputFileLineEdit->text()).baseName(); - int meshInt = static_cast(std::round(ui->meshResolutionSpinBox->value())); - QString meshSize = QString::number(meshInt) + "m"; - - for (int i = 0; i < numNinjas; i++) + if(ui->googleEarthGroupBox->isChecked()) { - QString filePath = outDir.filePath(QString("%1_%2_%3_%4.kmz") - .arg(demName) - .arg(directions[i]) - .arg(speeds[i]) - .arg(meshSize)); - outputFiles.push_back(filePath.toStdString()); - } + vector outputFiles; + QDir outDir(ui->outputDirectoryLineEdit->text()); + QString demName = QFileInfo(ui->elevationInputFileLineEdit->text()).baseName(); + int meshInt = static_cast(std::round(ui->meshResolutionSpinBox->value())); + QString meshSize = QString::number(meshInt) + "m"; - for (const auto& dir : outputFiles) - { - QString qDir = QString::fromStdString(dir); + for (int i = 0; i < numNinjas; i++) + { + QString filePath = outDir.filePath(QString("%1_%2_%3_%4.kmz") + .arg(demName) + .arg(directions[i]) + .arg(speeds[i]) + .arg(meshSize)); + outputFiles.push_back(filePath.toStdString()); + } - QFile f(qDir); - f.open(QIODevice::ReadOnly); - QByteArray data = f.readAll(); - QString base64 = data.toBase64(); + for (const auto& dir : outputFiles) + { + QString qDir = QString::fromStdString(dir); - webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + QFile f(qDir); + f.open(QIODevice::ReadOnly); + QByteArray data = f.readAll(); + QString base64 = data.toBase64(); + + webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + } } } @@ -782,9 +785,40 @@ void MainWindow::geospatialPDFFilesMeshResolutionGroupBoxToggled(bool checked) void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* initializationMethod) { + OutputMeshResolution googleEarth = getMeshResolution( + ui->googleEarthMeshResolutionGroupBox->isChecked(), + ui->googleEarthMeshResolutionSpinBox, + ui->googleEarthMeshResolutionComboBox, + ui->meshResolutionSpinBox, + ui->meshResolutionUnitsComboBox + ); + + OutputMeshResolution fireBehavior = getMeshResolution( + ui->fireBehaviorMeshResolutionGroupBox->isChecked(), + ui->fireBehaviorMeshResolutionSpinBox, + ui->fireBehaviorMeshResolutionComboBox, + ui->meshResolutionSpinBox, + ui->meshResolutionUnitsComboBox + ); + + OutputMeshResolution shapeFiles = getMeshResolution( + ui->shapeFilesMeshResolutionGroupBox->isChecked(), + ui->shapeFilesMeshResolutionSpinBox, + ui->shapeFilesMeshResolutionComboBox, + ui->meshResolutionSpinBox, + ui->meshResolutionUnitsComboBox + ); + + OutputMeshResolution geospatialPDFs = getMeshResolution( + ui->geospatialPDFFilesGroupBox->isChecked(), + ui->geospatialPDFFilesMeshResolutionSpinBox, + ui->geospatialPDFFilesMeshResolutionComboBox, + ui->meshResolutionSpinBox, + ui->meshResolutionUnitsComboBox + ); + char **papszOptions = nullptr; int err; - err = NinjaSetAsciiAtmFile(ninjaArmy, ui->fireBehaviorResolutionCheckBox->isChecked(), papszOptions); for(unsigned int i=0; igoogleEarthMeshResolutionGroupBox->isChecked()) - { - googleEarthMeshResolution = ui->googleEarthMeshResolutionSpinBox->value(); - googleEarthMeshResolutionUnits = ui->googleEarthMeshResolutionComboBox - ->itemData(ui->googleEarthMeshResolutionComboBox->currentIndex()) - .toString().toUtf8(); - } - else - { - googleEarthMeshResolution = ui->meshResolutionSpinBox->value(); - googleEarthMeshResolutionUnits = ui->meshResolutionUnitsComboBox - ->itemData(ui->meshResolutionUnitsComboBox->currentIndex()) - .toString().toUtf8(); - } - - double fireBehaviorMeshResolution; - QByteArray fireBehaviorMeshResolutionUnits; - if (!ui->fireBehaviorMeshResolutionGroupBox->isChecked()) - { - fireBehaviorMeshResolution = ui->fireBehaviorMeshResolutionSpinBox->value(); - fireBehaviorMeshResolutionUnits = ui->fireBehaviorMeshResolutionComboBox - ->itemData(ui->fireBehaviorMeshResolutionComboBox->currentIndex()) - .toString().toUtf8(); - } - else - { - fireBehaviorMeshResolution = ui->meshResolutionSpinBox->value(); - fireBehaviorMeshResolutionUnits = ui->meshResolutionUnitsComboBox - ->itemData(ui->meshResolutionUnitsComboBox->currentIndex()) - .toString().toUtf8(); - } - - double shapeFilesMeshResolution; - QByteArray shapeFilesMeshResolutionUnits; - if (!ui->shapeFilesMeshResolutionGroupBox->isChecked()) - { - shapeFilesMeshResolution = ui->shapeFilesMeshResolutionSpinBox->value(); - shapeFilesMeshResolutionUnits = ui->shapeFilesMeshResolutionComboBox - ->itemData(ui->shapeFilesMeshResolutionComboBox->currentIndex()) - .toString().toUtf8(); - } - else - { - shapeFilesMeshResolution = ui->meshResolutionSpinBox->value(); - shapeFilesMeshResolutionUnits = ui->meshResolutionUnitsComboBox - ->itemData(ui->meshResolutionUnitsComboBox->currentIndex()) - .toString().toUtf8(); - } - - double geospatialPDFFilesMeshResolution; - QByteArray geospatialPDFFilesMeshResolutionUnits; - if (!ui->geospatialPDFFilesGroupBox->isChecked()) - { - geospatialPDFFilesMeshResolution = ui->geospatialPDFFilesMeshResolutionSpinBox->value(); - geospatialPDFFilesMeshResolutionUnits = ui->geospatialPDFFilesMeshResolutionComboBox - ->itemData(ui->geospatialPDFFilesMeshResolutionComboBox->currentIndex()) - .toString().toUtf8(); - } - else - { - geospatialPDFFilesMeshResolution = ui->meshResolutionSpinBox->value(); - geospatialPDFFilesMeshResolutionUnits = ui->meshResolutionUnitsComboBox - ->itemData(ui->meshResolutionUnitsComboBox->currentIndex()) - .toString().toUtf8(); - } - double PDFHeight, PDFWidth, PDFDpi; switch(ui->sizeDimensionsComboBox->currentIndex()) { @@ -978,7 +950,7 @@ void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i, int numNinjas) qDebug() << "NinjaSetGoogOutFlag: err =" << err; } - err = NinjaSetGoogResolution(ninjaArmy, i, googleEarthMeshResolution, googleEarthMeshResolutionUnits.constData(), papszOptions); + err = NinjaSetGoogResolution(ninjaArmy, i, googleEarth.resolution, googleEarth.units.constData(), papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetGoogResolution: err =" << err; @@ -1014,7 +986,7 @@ void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i, int numNinjas) qDebug() << "NinjaSetAsciiOutFlag: err =" << err; } - err = NinjaSetAsciiResolution(ninjaArmy, i, fireBehaviorMeshResolution, fireBehaviorMeshResolutionUnits.constData(), papszOptions); + err = NinjaSetAsciiResolution(ninjaArmy, i, fireBehavior.resolution, fireBehavior.units.constData(), papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetAsciiResolution: err =" << err; @@ -1026,7 +998,7 @@ void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i, int numNinjas) qDebug() << "NinjaSetShpOutFlag: err =" << err; } - err = NinjaSetShpResolution(ninjaArmy, i, shapeFilesMeshResolution, shapeFilesMeshResolutionUnits.constData(), papszOptions); + err = NinjaSetShpResolution(ninjaArmy, i, shapeFiles.resolution, shapeFiles.units.constData(), papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetShpResolution: err =" << err; @@ -1062,7 +1034,7 @@ void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i, int numNinjas) qDebug() << "NinjaSetPDFSize: err =" << err; } - err = NinjaSetPDFResolution(ninjaArmy, i, geospatialPDFFilesMeshResolution, geospatialPDFFilesMeshResolutionUnits.constData(), papszOptions); + err = NinjaSetPDFResolution(ninjaArmy, i, geospatialPDFs.resolution, geospatialPDFs.units.constData(), papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetPDFResolution: err =" << err; @@ -1075,4 +1047,31 @@ void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i, int numNinjas) } } +OutputMeshResolution getMeshResolution( + bool useOutputMeshResolution, + QDoubleSpinBox* outputMeshResolutionSpinBox, + QComboBox* outputMeshResolutionComboBox, + QDoubleSpinBox* surfaceInputMeshResolutionSpinBox, + QComboBox* surfaceInputMeshResolutionComboBox) +{ + OutputMeshResolution result; + + if (!useOutputMeshResolution) + { + result.resolution = outputMeshResolutionSpinBox->value(); + result.units = outputMeshResolutionComboBox + ->itemData(outputMeshResolutionComboBox->currentIndex()) + .toString().toUtf8(); + } + else + { + result.resolution = surfaceInputMeshResolutionSpinBox->value(); + result.units = surfaceInputMeshResolutionComboBox + ->itemData(surfaceInputMeshResolutionComboBox->currentIndex()) + .toString().toUtf8(); + } + + return result; +} + diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index d84f2ee28..7b7ecb2ef 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -76,6 +76,11 @@ namespace Ui } QT_END_NAMESPACE +struct OutputMeshResolution { + double resolution; + QByteArray units; +}; + class MainWindow : public QMainWindow { Q_OBJECT @@ -122,7 +127,17 @@ private slots: void connectSignals(); void treeItemClicked(QTreeWidgetItem *item, int column); void prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* initializationMethod); - void setOutputFlags(NinjaArmyH *ninjaArmy, int i, int numNinjas); - + void setOutputFlags(NinjaArmyH* ninjaArmy, + int i, + int numNinjas, + OutputMeshResolution googleEarth, + OutputMeshResolution fireBehavior, + OutputMeshResolution shapeFiles, + OutputMeshResolution geospatialPDFs); + OutputMeshResolution getMeshResolution(bool useOutputMeshResolution, + QDoubleSpinBox* outputMeshResolutionSpinBox, + QComboBox* outputMeshResolutionComboBox, + QDoubleSpinBox* surfaceInputMeshResolutionSpinBox, + QComboBox* surfaceInputMeshResolutionComboBox); }; #endif // MAINWINDOW_H From 87287f4510dcc5b91a0165d95229e208e06901de Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 1 Aug 2025 14:33:55 -0600 Subject: [PATCH 147/435] Simplified helper function for mesh resolution outputs --- src/gui/mainwindow.cpp | 51 ++++++++++++++---------------------------- src/gui/mainwindow.h | 4 +--- 2 files changed, 18 insertions(+), 37 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index f79240b5b..2b6d9a68d 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -788,34 +788,22 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i OutputMeshResolution googleEarth = getMeshResolution( ui->googleEarthMeshResolutionGroupBox->isChecked(), ui->googleEarthMeshResolutionSpinBox, - ui->googleEarthMeshResolutionComboBox, - ui->meshResolutionSpinBox, - ui->meshResolutionUnitsComboBox - ); + ui->googleEarthMeshResolutionComboBox); OutputMeshResolution fireBehavior = getMeshResolution( ui->fireBehaviorMeshResolutionGroupBox->isChecked(), ui->fireBehaviorMeshResolutionSpinBox, - ui->fireBehaviorMeshResolutionComboBox, - ui->meshResolutionSpinBox, - ui->meshResolutionUnitsComboBox - ); + ui->fireBehaviorMeshResolutionComboBox); OutputMeshResolution shapeFiles = getMeshResolution( ui->shapeFilesMeshResolutionGroupBox->isChecked(), ui->shapeFilesMeshResolutionSpinBox, - ui->shapeFilesMeshResolutionComboBox, - ui->meshResolutionSpinBox, - ui->meshResolutionUnitsComboBox - ); + ui->shapeFilesMeshResolutionComboBox); OutputMeshResolution geospatialPDFs = getMeshResolution( - ui->geospatialPDFFilesGroupBox->isChecked(), + ui->geospatialPDFFilesMeshResolutionGroupBox->isChecked(), ui->geospatialPDFFilesMeshResolutionSpinBox, - ui->geospatialPDFFilesMeshResolutionComboBox, - ui->meshResolutionSpinBox, - ui->meshResolutionUnitsComboBox - ); + ui->geospatialPDFFilesMeshResolutionComboBox); char **papszOptions = nullptr; int err; @@ -891,12 +879,12 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i } void MainWindow::setOutputFlags(NinjaArmyH* ninjaArmy, - int i, - int numNinjas, - OutputMeshResolution googleEarth, - OutputMeshResolution fireBehavior, - OutputMeshResolution shapeFiles, - OutputMeshResolution geospatialPDFs) + int i, + int numNinjas, + OutputMeshResolution googleEarth, + OutputMeshResolution fireBehavior, + OutputMeshResolution shapeFiles, + OutputMeshResolution geospatialPDFs) { char **papszOptions = nullptr; int err; @@ -1047,31 +1035,26 @@ void MainWindow::setOutputFlags(NinjaArmyH* ninjaArmy, } } -OutputMeshResolution getMeshResolution( +OutputMeshResolution MainWindow::getMeshResolution( bool useOutputMeshResolution, QDoubleSpinBox* outputMeshResolutionSpinBox, - QComboBox* outputMeshResolutionComboBox, - QDoubleSpinBox* surfaceInputMeshResolutionSpinBox, - QComboBox* surfaceInputMeshResolutionComboBox) + QComboBox* outputMeshResolutionComboBox) { OutputMeshResolution result; if (!useOutputMeshResolution) { result.resolution = outputMeshResolutionSpinBox->value(); - result.units = outputMeshResolutionComboBox - ->itemData(outputMeshResolutionComboBox->currentIndex()) - .toString().toUtf8(); + result.units = outputMeshResolutionComboBox->itemData(outputMeshResolutionComboBox->currentIndex()).toString().toUtf8(); } else { - result.resolution = surfaceInputMeshResolutionSpinBox->value(); - result.units = surfaceInputMeshResolutionComboBox - ->itemData(surfaceInputMeshResolutionComboBox->currentIndex()) - .toString().toUtf8(); + result.resolution = ui->meshResolutionSpinBox->value(); + result.units = ui->meshResolutionUnitsComboBox->itemData(ui->meshResolutionComboBox->currentIndex()).toString().toUtf8(); } return result; } + diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 7b7ecb2ef..80de197a4 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -136,8 +136,6 @@ private slots: OutputMeshResolution geospatialPDFs); OutputMeshResolution getMeshResolution(bool useOutputMeshResolution, QDoubleSpinBox* outputMeshResolutionSpinBox, - QComboBox* outputMeshResolutionComboBox, - QDoubleSpinBox* surfaceInputMeshResolutionSpinBox, - QComboBox* surfaceInputMeshResolutionComboBox); + QComboBox* outputMeshResolutionComboBox); }; #endif // MAINWINDOW_H From d63b68338852962fabaa2259f7f1ab4418edcf88 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 1 Aug 2025 15:10:04 -0600 Subject: [PATCH 148/435] Added struct for pdf size and moved check to outside ninja army for loop --- src/gui/mainwindow.cpp | 83 +++++++++++++++++++++--------------------- src/gui/mainwindow.h | 9 ++++- 2 files changed, 50 insertions(+), 42 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 2b6d9a68d..044c13d4a 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -805,76 +805,101 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i ui->geospatialPDFFilesMeshResolutionSpinBox, ui->geospatialPDFFilesMeshResolutionComboBox); + OutputPDFSize PDFSize; + switch(ui->sizeDimensionsComboBox->currentIndex()) + { + case 0: + PDFSize.PDFHeight = 11.0; + PDFSize.PDFWidth = 8.5; + PDFSize.PDFDpi = 150; + break; + case 1: + PDFSize.PDFHeight = 14.0; + PDFSize.PDFWidth = 8.5; + PDFSize.PDFDpi = 150; + break; + case 2: + PDFSize.PDFHeight = 17.0; + PDFSize.PDFWidth = 11.0; + PDFSize.PDFDpi = 150; + break; + } + if (ui->sizeOrientationComboBox->currentIndex() == 1) + { + std::swap(PDFSize.PDFHeight, PDFSize.PDFWidth); + } + char **papszOptions = nullptr; int err; err = NinjaSetAsciiAtmFile(ninjaArmy, ui->fireBehaviorResolutionCheckBox->isChecked(), papszOptions); + if(err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetAsciiAtmFile: err =" << err; + } for(unsigned int i=0; i
"; + + oss << "Windows: Download the new " << messages[1] + << " installer here

"; + + oss << "Linux: See the " << messages[1] << " tag in our GitHub repo
"; + } if (messages[4].empty() == false) { From c84a07dc2d35e5fa1cf55af44e2226e4c1c4a2d8 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 6 Aug 2025 11:17:59 -0600 Subject: [PATCH 150/435] Fixed format issue with version pop up --- src/gui/serverbridge.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gui/serverbridge.cpp b/src/gui/serverbridge.cpp index e2947ab51..1a26ab038 100644 --- a/src/gui/serverbridge.cpp +++ b/src/gui/serverbridge.cpp @@ -138,7 +138,6 @@ char * ServerBridge::NinjaQueryServerMessages(bool checkAbort) bool versionisuptodate = NinjaCheckVersions(const_cast(messages[1].c_str()), const_cast(NINJA_VERSION_STRING)); if (!versionisuptodate) { - oss << messages[0] << "\n"; oss << "You are using an outdated WindNinja version, please update to version: " << messages[1] << "

"; oss << "Windows: Download the new " << messages[1] From eb47296b76756da1ff197732824aa902895eaad7 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 6 Aug 2025 16:07:34 -0600 Subject: [PATCH 151/435] Fixed some issues with the point initialization page and resizing, added old icons to buttons --- src/gui/mainwindow.cpp | 74 ------------------ src/gui/mainwindow.ui | 110 +++++++++++++-------------- src/gui/pointinitializationinput.cpp | 5 ++ 3 files changed, 57 insertions(+), 132 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 8b45a0912..1e2719441 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -321,32 +321,6 @@ MainWindow::MainWindow(QWidget *parent) model->setReadOnly(false); model->setResolveSymlinks(true); - // Set the correct root index inside Downloads - QModelIndex rootIndex = model->index(downloadsPath); - ui->pointInitializationTreeView->setModel(model); - ui->pointInitializationTreeView->setRootIndex(rootIndex); - - // Ensure folders expand and collapse correctly - ui->pointInitializationTreeView->setExpandsOnDoubleClick(true); - ui->pointInitializationTreeView->setAnimated(true); - ui->pointInitializationTreeView->setIndentation(15); - ui->pointInitializationTreeView->setSortingEnabled(true); - ui->pointInitializationTreeView->setItemsExpandable(true); - ui->pointInitializationTreeView->setUniformRowHeights(true); - - // Show only "Name" and "Date Modified" columns - ui->pointInitializationTreeView->hideColumn(1); // Hide Size column - ui->pointInitializationTreeView->hideColumn(2); // Hide Type column - - // Optional: Set column headers - QHeaderView *header = ui->pointInitializationTreeView->header(); - header->setSectionResizeMode(0, QHeaderView::Interactive); - header->setSectionResizeMode(3, QHeaderView::Stretch); - model->setHeaderData(0, Qt::Horizontal, "Name"); - model->setHeaderData(3, Qt::Horizontal, "Date Modified"); - - ui->pointInitializationTreeView->expandAll(); - QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true); QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); @@ -419,9 +393,6 @@ MainWindow::MainWindow(QWidget *parent) ui->numberOfProcessorsSpinBox->setMaximum(nCPUs); ui->numberOfProcessorsSpinBox->setValue(nCPUs); - // Wind Input -> Point Init window - ui->pointInitializationDownloadDataButton->setIcon(QIcon(":/application_get")); - // Populate default location for output location ui->outputDirectoryLineEdit->setText(downloadsPath); ui->outputDirectoryButton->setIcon(QIcon(":/folder.png")); @@ -507,51 +478,6 @@ void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { } } -// Recursive function to add files and directories correctly with Name and Date columns -void addFilesRecursively(QStandardItem *parentItem, const QString &dirPath) { - QDir dir(dirPath); - QFileInfoList entries = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); - for (const QFileInfo &entry : entries) { - QStandardItem *nameItem = new QStandardItem(entry.fileName()); - QStandardItem *dateItem = new QStandardItem(entry.lastModified().toString("yyyy-MM-dd HH:mm:ss")); - nameItem->setEditable(false); - dateItem->setEditable(false); - parentItem->appendRow({nameItem, dateItem}); - if (entry.isDir()) { - addFilesRecursively(nameItem, entry.absoluteFilePath()); - } - } -} - -// Function to populate weatherModelDataTreeView with .tif parent directories and all nested contents -void MainWindow::populateForecastDownloads() { - QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - QDir downloadsDir(downloadsPath); - - if (!downloadsDir.exists()) return; - - QStandardItemModel *model = new QStandardItemModel(this); - model->setHorizontalHeaderLabels({"Name", "Date Modified"}); - - QDirIterator it(downloadsPath, QDir::Dirs | QDir::NoDotAndDotDot); - while (it.hasNext()) { - QString dirPath = it.next(); - if (dirPath.endsWith(".tif", Qt::CaseInsensitive)) { - QStandardItem *parentItem = new QStandardItem(QFileInfo(dirPath).fileName()); - parentItem->setEditable(false); - addFilesRecursively(parentItem, dirPath); - model->appendRow(parentItem); - } - } - - ui->weatherModelDataTreeView->setModel(model); - ui->weatherModelDataTreeView->header()->setSectionResizeMode(QHeaderView::Stretch); - - // Disable editing and enable double-click expansion - ui->weatherModelDataTreeView->setEditTriggers(QAbstractItemView::NoEditTriggers); - ui->weatherModelDataTreeView->setExpandsOnDoubleClick(true); -} - void MainWindow::massSolverCheckBoxClicked() { diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 6ff371a94..d9e42ff15 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -1801,7 +1801,7 @@ li.checked::marker { content: "\2612"; } 16777215 - + 5 @@ -1816,6 +1816,18 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 0 + 416 + + Point Initialization @@ -1825,7 +1837,7 @@ li.checked::marker { content: "\2612"; } false - + @@ -1909,13 +1921,6 @@ li.checked::marker { content: "\2612"; } - - - - Qt::Orientation::Horizontal - - - @@ -1927,17 +1932,11 @@ li.checked::marker { content: "\2612"; } 0 - 81 - - - - - 16777215 - 81 + 80 - 0 + 1 @@ -1948,21 +1947,21 @@ li.checked::marker { content: "\2612"; } - + Stop Time - + Number of Time Steps - + PointingHandCursor @@ -1972,14 +1971,14 @@ li.checked::marker { content: "\2612"; } - + true - + @@ -1987,7 +1986,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -2000,42 +1999,12 @@ li.checked::marker { content: "\2612"; } 30 - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Sample Text</p></body></html> - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - Qt::Orientation::Horizontal - - - @@ -2049,6 +2018,19 @@ li.checked::marker { content: "\2612"; }
+ + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + +
@@ -4128,7 +4110,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -4136,13 +4118,13 @@ li.checked::marker { content: "\2612"; } 0 - 48 + 0 16777215 - 48 + 16777215 @@ -4161,7 +4143,7 @@ li.checked::marker { content: "\2612"; } 0 - 30 + 0 @@ -4230,9 +4212,15 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + - 120 + 16777215 16777215 @@ -4243,6 +4231,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + 80 diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 67d267376..c726bee80 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -36,6 +36,11 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* ui->weatherStationDataSourceStackedWidget->setCurrentIndex(0); ui->pointInitializationDataTimeStackedWidget->setCurrentIndex(0); ui->weatherStationDataTimeStackedWidget->setCurrentIndex(0); + ui->pointInitializationDownloadDataButton->setIcon(QIcon(":/server_go.png")); + ui->pointInitializationRefreshButton->setIcon(QIcon(":/arrow_rotate_clockwise.png")); + ui->pointInitializationWriteStationKMLCheckBox->setIcon(QIcon(":/weather_cloudy.png")); + ui->weatherStationDataDownloadButton->setIcon(QIcon(":/server_go.png")); + ui->weatherStationDataDownloadCancelButton->setIcon(QIcon(":/cancel.png")); connect(ui->pointInitializationGroupBox, &QGroupBox::toggled, this, &PointInitializationInput::pointInitializationGroupBoxToggled); connect(ui->pointInitializationDownloadDataButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitializationDownloadDataButtonClicked); From 8995b4551fa394fc5f5b1f45497aae6c821c5df0 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 6 Aug 2025 16:16:12 -0600 Subject: [PATCH 152/435] fixed issue where once a dem was downloaded, you would not be taken to the surface input page --- src/gui/surfaceinput.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 905be699c..ef0055fa8 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -323,8 +323,7 @@ void SurfaceInput::fetchDEMFinished() } ui->elevationInputFileLineEdit->setText(QFileInfo(currentDEMFilePath).fileName()); - int currentIndex = ui->inputsStackedWidget->currentIndex(); - ui->inputsStackedWidget->setCurrentIndex(currentIndex-1); + ui->inputsStackedWidget->setCurrentIndex(5); } void SurfaceInput::timeZoneComboBoxCurrentIndexChanged(int index) From 2356ddc396200cbe7ca7882991c04c9788f89172 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 6 Aug 2025 16:36:18 -0600 Subject: [PATCH 153/435] Added scroll areas to finished pages that need them --- src/gui/mainwindow.ui | 3705 +++++++++++++++++++++-------------------- 1 file changed, 1875 insertions(+), 1830 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 1d2c9255b..bbbb740d0 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -557,7 +557,7 @@ QFrame::Shadow::Sunken - 13 + 5 @@ -832,9 +832,443 @@ li.checked::marker { content: "\2612"; } 0 - + + + + + true + + + + + 0 + 0 + 550 + 646 + + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Elevation Input File + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 0 + 0 + + + + true + + + *.tif + + + + + + + PointingHandCursor + + + Open File + + + + + + + PointingHandCursor + + + Download File + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Mesh Resolution + + + + + + + 0 + 0 + + + + PointingHandCursor + + + + Coarse + + + + + Medium + + + + + Fine + + + + + Custom + + + + + + + + false + + + + 0 + 0 + + + + PointingHandCursor + + + false + + + 0.010000000000000 + + + 10000.000000000000000 + + + 200.000000000000000 + + + + + + + + Meters + + + + + Feet + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Vegetation + + + + + + + 0 + 0 + + + + PointingHandCursor + + + + Grass + + + + + Brush + + + + + Trees + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + Time Zone + + + + + + + 0 + 0 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Name: Mountain Standard Time</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Name: Mountain Daylight Time</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Offset from UTC: -07:00:00</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Offset from UTC: -06:00:00</p></body></html> + + + Qt::TextInteractionFlag::NoTextInteraction + + + + + + + + + + 0 + 0 + + + + + 150 + 0 + + + + + 150 + 16777215 + + + + PointingHandCursor + + + + + + -1 + + + 10 + + + QComboBox::SizeAdjustPolicy::AdjustToContentsOnFirstShow + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Show All Zones + + + true + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Display Time Zone Details + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + 0 + 0 + + + + + 0 + - QLayout::SizeConstraint::SetMinAndMaxSize + QLayout::SizeConstraint::SetNoConstraint 5 @@ -849,953 +1283,526 @@ li.checked::marker { content: "\2612"; } 5 - - - - 0 - 0 - + + + PointingHandCursor - - - 0 - 70 - + + Use Diurnal Wind - - Elevation Input File + + + + + + Qt::Orientation::Vertical - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 0 - 0 - - - - true - - - *.tif - - - - - - - PointingHandCursor - - - Open File - - - - - - - PointingHandCursor - - - Download File - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - 0 - 0 - + + QSizePolicy::Policy::Expanding - + - 0 - 70 + 20 + 40 - - Mesh Resolution - - - - - - - 0 - 0 - - - - PointingHandCursor - - - - Coarse - - - - - Medium - - - - - Fine - - - - - Custom - - - - - - - - false - - - - 0 - 0 - - - - PointingHandCursor - - - false - - - 0.010000000000000 - - - 10000.000000000000000 - - - 200.000000000000000 - - - - - - - - Meters - - - - - Feet - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - + +
+
+ + + + 0 + + + 5 + + + 5 + + + 5 + + + 5 + - + - + 0 0 - - - 0 - 70 - + + PointingHandCursor - - Vegetation + + Use Stability - - - - - - 0 - 0 - - - - PointingHandCursor - - - - Grass - - - - - Brush - - - - - Trees - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - + + + Qt::Orientation::Vertical - + - 0 - 0 + 20 + 40 - - Time Zone + + + + + + + + + 6 + + + 5 + + + 5 + + + 5 + + + 5 + + + + + true - - - - - - 0 - 0 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Name: Mountain Standard Time</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Name: Mountain Daylight Time</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Offset from UTC: -07:00:00</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Offset from UTC: -06:00:00</p></body></html> - - - Qt::TextInteractionFlag::NoTextInteraction - - - - - - - - - - 0 - 0 - - - - - 150 - 0 - - - - - 150 - 16777215 - - - - PointingHandCursor - - - - - - -1 - - - 10 - - - QComboBox::SizeAdjustPolicy::AdjustToContentsOnFirstShow - - - - - - - - 0 - 0 - - - - PointingHandCursor - - - Show All Zones - - - true - - - - - - - - 0 - 0 - - - - PointingHandCursor - - - Display Time Zone Details - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Expanding - - - - 20 - 40 - - - - - - - - - - 0 - 0 - - - - - 0 - - - QLayout::SizeConstraint::SetNoConstraint - - - 5 - - - 5 - - - 5 - - - 5 - - - - - PointingHandCursor - - - Use Diurnal Wind - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Expanding - - - - 20 - 40 - - - - - - - - - - 0 - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 0 - 0 - - - - PointingHandCursor - - - Use Stability - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - - 6 - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 0 - 0 - - - - Domain Average Wind - - - true - - - false - - - - - - - 0 - 100 - - - - Input Wind Height - - - - - - PointingHandCursor - - - - 20ft-US - - - - - 10m-SI - - - - - Custom - - - - - - - - false - - - PointingHandCursor - - - 0.010000000000000 - - - 20.000000000000000 - - - - - - - false - - - - 0 - 0 - - - - false - - - - Feet - - - - - Meters - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - Table Unites: - - - - - - - - 0 - 0 - - - - - 60 - 0 - - - - - 60 - 16777215 - - - - PointingHandCursor - - - - mph - - - - - m/s - - - - - kph - - - - - kts - - - - - - - - - 0 - 0 - - - - - 40 - 0 - - - - - 40 - 16777215 - - - - PointingHandCursor - - - Qt::LayoutDirection::LeftToRight - - - - °F - - - - - °C - - - - - - - - - 0 - 0 - - - - PointingHandCursor - - - Clear Table - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - 1 - 0 - - - - - 0 - 490 - - - - true - - - QAbstractItemView::DragDropMode::DragDrop - - - Qt::DropAction::MoveAction - - - true - - - 50 - - - false - - - 20 - - - 80 - - - true - - - false - - - 20 - - - 20 - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Speed -(Select) - - - - 10 - - - - - - Direction -(degrees) - - - - - - - 10 - - - - - - Time -(hh:mm) - - - - 10 - - - - - - Date -(mm/dd/yyyy) - - - - 10 - - - - - - Cloud Cover -(%) + + + + 0 + -7 + 544 + 661 + + + + + + + + 0 + 0 + - - - 10 - + + Domain Average Wind - - - - Air Temp -(Select) + + true - - - 10 - + + false - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - + + + + + + 0 + 100 + + + + Input Wind Height + + + + + + PointingHandCursor + + + + 20ft-US + + + + + 10m-SI + + + + + Custom + + + + + + + + false + + + PointingHandCursor + + + 0.010000000000000 + + + 20.000000000000000 + + + + + + + false + + + + 0 + 0 + + + + false + + + + Feet + + + + + Meters + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + Table Unites: + + + + + + + + 0 + 0 + + + + + 60 + 0 + + + + + 60 + 16777215 + + + + PointingHandCursor + + + + mph + + + + + m/s + + + + + kph + + + + + kts + + + + + + + + + 0 + 0 + + + + + 40 + 0 + + + + + 40 + 16777215 + + + + PointingHandCursor + + + Qt::LayoutDirection::LeftToRight + + + + °F + + + + + °C + + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Clear Table + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + 1 + 0 + + + + + 0 + 490 + + + + true + + + QAbstractItemView::DragDropMode::DragDrop + + + Qt::DropAction::MoveAction + + + true + + + 50 + + + false + + + 20 + + + 80 + + + true + + + false + + + 20 + + + 20 + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Speed +(Select) + + + + 10 + + + + + + Direction +(degrees) + + + + + + + 10 + + + + + + Time +(hh:mm) + + + + 10 + + + + + + Date +(mm/dd/yyyy) + + + + 10 + + + + + + Cloud Cover +(%) + + + + 10 + + + + + + Air Temp +(Select) + + + + 10 + + + + + + + + + +
@@ -2565,543 +2572,172 @@ li.checked::marker { content: "\2612"; }
- - 10m-SI - - - - - Custom - - -
-
- - - - false - - - PointingHandCursor - - - 0.000000000000000 - - - 10000.000000000000000 - - - 20.000000000000000 - - - - - - - false - - - - 0 - 0 - - - - false - - - - Feet - - - - - Meters - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - -
-
-
- - - - - - Output Speed Units: - - - - - - - - mph - - - - - mps - - - - - kph - - - - - kts - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Clip output by: - - - - - - - % - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - false - - - Write Raw Weather Model Output - - - true - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - -
-
- - - - - - - 0 - 0 - - - - - 0 - 384 - - - - Create Google Earth Files (*.kmz) - - - true - - - false - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Vectors - - - - QLayout::SizeConstraint::SetNoConstraint - - - - - Line Width: - - - - - - - 1 - - - 10.000000000000000 - - - 1.000000000000000 - - - - - - - Apply Vector Scaling - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - + + 10m-SI + + + + + Custom + + - - - - 0 - 0 - + + + false - - - 0 - 69 - + + PointingHandCursor - - Legend + + 0.000000000000000 + + + 10000.000000000000000 + + + 20.000000000000000 - - - - - - 0 - 0 - - - - - 131 - 0 - - - - - Uniform Range - - - - - Equal Count - - - - - - - - Use Consistent Color Scale - - - - - - - Qt::Orientation::Horizontal - - - - 153 - 20 - - - - - - + + + false + - + 0 0 - - - 0 - 114 - - - - Resolution + + false - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Use Mesh Resolution - - - true - - - - - - false - - - 5000.000000000000000 - - - 200.000000000000000 - - - - - - - false - - - - 0 - 0 - - - - - 80 - 0 - - - - - 80 - 16777215 - - - - - Meters - - - - - Feet - - - - - - - - Qt::Orientation::Horizontal - - - - 302 - 20 - - - - - - - - + + + Feet + + + + + Meters + + - - - - 0 - 0 - + + + Qt::Orientation::Horizontal - + - 0 - 69 + 40 + 20 - - Alternative Color Schemes + + + + +
+ + + + + + Output Speed Units: + + + + + + + + mph - - true + + + + mps - - false + + + + kph - - - - - - 0 - 0 - - - - - Default - - - - - ROPGW (Red Orange Pink Green White) - - - - - Oranges - - - - - Blues - - - - - Pinks - - - - - Greens - - - - - Magic Beans - - - - - Pink to Green - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - + + + + kts + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Clip output by: + + + + + + + % + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + false + + + Write Raw Weather Model Output + + + true + - + Qt::Orientation::Vertical @@ -3115,150 +2751,383 @@ li.checked::marker { content: "\2612"; } - - + + - - - - 0 - 0 - - - - - 0 - 186 - - - - Create Fire Behavior Files (*.asc) - - + + true - - false - - - - - - - 0 - 0 - - - - - 0 - 114 - - - - Resolution - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Use Mesh Resolution - - - true - - - - - - false - - - 5000.000000000000000 - - - 200.000000000000000 - - - - - - - false - - - - 0 - 0 - - - - - 80 - 0 - - - - - 80 - 16777215 - - - + + + + 0 + 0 + 536 + 402 + + + + + + + + 0 + 0 + + + + + 0 + 384 + + + + Create Google Earth Files (*.kmz) + + + true + + + false + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Vectors + + + + QLayout::SizeConstraint::SetNoConstraint + + + - Meters + Line Width: + + + + + + + 1 + + + 10.000000000000000 + + + 1.000000000000000 + + + + + + + Apply Vector Scaling + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 69 + + + + Legend + + + + + + + 0 + 0 + + + + + 131 + 0 + + + + + Uniform Range + + + + + Equal Count + + + + + + + + Use Consistent Color Scale + + + + + + + Qt::Orientation::Horizontal + + + + 153 + 20 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 114 + + + + Resolution + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Use Mesh Resolution + + + true + + + + + + false + + + 5000.000000000000000 + + + 200.000000000000000 + + + + + + + false + + + + 0 + 0 + + + + + 80 + 0 + + + + + 80 + 16777215 + + + + + Meters + + + + + Feet + + + + + + + + Qt::Orientation::Horizontal + + + + 302 + 20 + + + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 69 + + + + Alternative Color Schemes + + + true + + + false + + + + + + + 0 + 0 + + + + + Default + + + + + ROPGW (Red Orange Pink Green White) + + + + + Oranges + + + + + Blues + + + + + Pinks + + + + + Greens + + + + + Magic Beans + + + + + Pink to Green + + + + + + + + Qt::Orientation::Horizontal - - - - Feet + + + 40 + 20 + - - - - - - - Qt::Orientation::Horizontal - - - - 302 - 20 - - - - - - - - - - - Create *.atm file(s) - - - - - - - + + + + + + + + + + - + Qt::Orientation::Vertical @@ -3272,10 +3141,10 @@ li.checked::marker { content: "\2612"; } - - + + - + 0 @@ -3285,11 +3154,11 @@ li.checked::marker { content: "\2612"; } 0 - 158 + 186 - Create Shape Files (*.sph) + Create Fire Behavior Files (*.asc) true @@ -3297,9 +3166,9 @@ li.checked::marker { content: "\2612"; } false - + - + 0 @@ -3315,9 +3184,9 @@ li.checked::marker { content: "\2612"; } Resolution - + - + 0 @@ -3336,9 +3205,9 @@ li.checked::marker { content: "\2612"; } true - + - + false @@ -3351,7 +3220,7 @@ li.checked::marker { content: "\2612"; } - + false @@ -3386,256 +3255,77 @@ li.checked::marker { content: "\2612"; } - - - Qt::Orientation::Horizontal - - - - 302 - 20 - - - - - - - - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - - - - 0 - 0 - - - - - 0 - 300 - - - - Create Geospatial PDF Files (*.pdf) - - - true - - - false - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Vectors - - - - - - Line Width: - - - - - - - 1 - - - 10.000000000000000 - - - 1.000000000000000 - - - - - - - Apply Vector Scaling - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - Basemap: - - - - - - - - 0 - 0 - - - - - 86 - 0 - - - - - 170 - 16777215 - - - - - TopoFire topo maps - - - - - Hillshade - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Size: - - - - - - - - 0 - 0 - - - - - 160 - 16777215 - - - - - Letter-8 1/2 x 11 - - - - - Legal-8 1/2 x 14 - - - - - Tabloid-7 11 x 17 - - - - - - - - - Portrait - - - + + + Qt::Orientation::Horizontal + + + + 302 + 20 + + + + + + + + + - Landscape + Create *.atm file(s) - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 158 + + + + Create Shape Files (*.sph) + + + true + + + false + + - + 0 @@ -3651,9 +3341,9 @@ li.checked::marker { content: "\2612"; } Resolution - + - + 0 @@ -3672,9 +3362,9 @@ li.checked::marker { content: "\2612"; } true - + - + false @@ -3687,7 +3377,7 @@ li.checked::marker { content: "\2612"; } - + false @@ -3722,7 +3412,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Horizontal @@ -3743,6 +3433,361 @@ li.checked::marker { content: "\2612"; } + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + true + + + + + 0 + 0 + 536 + 318 + + + + + + + + 0 + 0 + + + + + 0 + 300 + + + + Create Geospatial PDF Files (*.pdf) + + + true + + + false + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Vectors + + + + + + Line Width: + + + + + + + 1 + + + 10.000000000000000 + + + 1.000000000000000 + + + + + + + Apply Vector Scaling + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + Basemap: + + + + + + + + 0 + 0 + + + + + 86 + 0 + + + + + 170 + 16777215 + + + + + TopoFire topo maps + + + + + Hillshade + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Size: + + + + + + + + 0 + 0 + + + + + 160 + 16777215 + + + + + Letter-8 1/2 x 11 + + + + + Legal-8 1/2 x 14 + + + + + Tabloid-7 11 x 17 + + + + + + + + + Portrait + + + + + Landscape + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + 0 + 0 + + + + + 0 + 114 + + + + Resolution + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Use Mesh Resolution + + + true + + + + + + false + + + 5000.000000000000000 + + + 200.000000000000000 + + + + + + + false + + + + 0 + 0 + + + + + 80 + 0 + + + + + 80 + 16777215 + + + + + Meters + + + + + Feet + + + + + + + + Qt::Orientation::Horizontal + + + + 302 + 20 + + + + + + + + + + + + + + + + + From 0d280322ff7365bf0c9a8ba13c86f443c81f4de7 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 7 Aug 2025 14:01:58 -0600 Subject: [PATCH 154/435] Added the ability to fetch weather station data, had to change how the current DEM file path was being stored --- src/gui/mainwindow.cpp | 4 +- src/gui/mainwindow.h | 1 + src/gui/mainwindow.ui | 4 +- src/gui/pointinitializationinput.cpp | 84 ++++++++++++++++++++++++++++ src/gui/pointinitializationinput.h | 27 +++++++++ src/gui/surfaceinput.cpp | 8 +-- src/gui/surfaceinput.h | 3 +- 7 files changed, 119 insertions(+), 12 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 1e2719441..55f333637 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -813,7 +813,7 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i printf("NinjaSetInitializationMethod: err = %d\n", err); } - err = NinjaSetDem(ninjaArmy, i, surfaceInput->getDEMFilePath().toUtf8().constData(), papszOptions); + err = NinjaSetDem(ninjaArmy, i, ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8().constData(), papszOptions); if(err != NINJA_SUCCESS) { printf("NinjaSetDem: err = %d\n", err); @@ -1041,7 +1041,7 @@ void MainWindow::setOutputFlags(NinjaArmyH *ninjaArmy, int i) qDebug() << "NinjaSetPDFBaseMap: err =" << err; } - err = NinjaSetPDFDEM(ninjaArmy, i, surfaceInput->getDEMFilePath().toUtf8().constData(), papszOptions); + err = NinjaSetPDFDEM(ninjaArmy, i, ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8().constData(), papszOptions); if (err != NINJA_SUCCESS) { qDebug() << "NinjaSetPDFDEM: err =" << err; diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 77a9d3a87..63b695aa4 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -119,6 +119,7 @@ private slots: ServerBridge *serverBridge; DomainAverageInput *domainAverageInput; PointInitializationInput *pointInitializationInput; + QString currentDEMFilePath; void connectSignals(); void treeItemClicked(QTreeWidgetItem *item, int column); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index d9e42ff15..86ca53d12 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -3998,7 +3998,7 @@ li.checked::marker { content: "\2612"; } 0 - 1 + 0 @@ -4128,7 +4128,7 @@ li.checked::marker { content: "\2612"; } - 0 + 1 diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index c726bee80..53838aa75 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -41,12 +41,15 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* ui->pointInitializationWriteStationKMLCheckBox->setIcon(QIcon(":/weather_cloudy.png")); ui->weatherStationDataDownloadButton->setIcon(QIcon(":/server_go.png")); ui->weatherStationDataDownloadCancelButton->setIcon(QIcon(":/cancel.png")); + ui->downloadBetweenDatesStartTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime()); + ui->downloadBetweenDatesEndTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime()); connect(ui->pointInitializationGroupBox, &QGroupBox::toggled, this, &PointInitializationInput::pointInitializationGroupBoxToggled); connect(ui->pointInitializationDownloadDataButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitializationDownloadDataButtonClicked); connect(ui->weatherStationDataDownloadCancelButton, &QPushButton::clicked, this, &PointInitializationInput::weatherStationDataDownloadCancelButtonClicked); connect(ui->weatherStationDataSourceComboBox, &QComboBox::currentIndexChanged, this, &PointInitializationInput::weatherStationDataSourceComboBoxCurrentIndexChanged); connect(ui->weatherStationDataTimeComboBox, &QComboBox::currentIndexChanged, this, &PointInitializationInput::weatherStationDataTimeComboBoxCurrentIndexChanged); + connect(ui->weatherStationDataDownloadButton, &QPushButton::clicked, this, &PointInitializationInput::weatherStationDataDownloadButtonClicked); } void PointInitializationInput::pointInitializationGroupBoxToggled(bool checked) @@ -74,6 +77,87 @@ void PointInitializationInput::weatherStationDataDownloadCancelButtonClicked() ui->inputsStackedWidget->setCurrentIndex(10); } +void PointInitializationInput::weatherStationDataDownloadButtonClicked() +{ + QDateTime start = ui->downloadBetweenDatesStartTimeDateTimeEdit->dateTime(); + QDateTime end = ui->downloadBetweenDatesEndTimeDateTimeEdit->dateTime(); + + QVector year = {start.date().year(), end.date().year()}; + QVector month = {start.date().month(), end.date().month()}; + QVector day = {start.date().day(), end.date().day()}; + QVector hour = {start.time().hour(), end.time().hour()}; + QVector minute = {start.time().minute(), end.time().minute()}; + bool fetchLatestFlag = true; // or based on combo box if needed + + QString outputPath = ui->outputDirectoryLineEdit->text(); + QString units = ui->downloadFromDEMComboBox->currentText(); + QString elevationFile = ui->elevationInputFileLineEdit->property("fullpath").toString(); + QString osTimeZone = "UTC"; + + double buffer = ui->downloadFromDEMSpinBox->value(); + + progress = new QProgressDialog("Fetching DEM file...", QString(), 0, 0, ui->centralwidget); + progress->setWindowModality(Qt::WindowModal); + progress->setCancelButton(nullptr); + progress->setMinimumDuration(0); + progress->setAutoClose(true); + progress->show(); + + futureWatcher = new QFutureWatcher(this); + QFuture future = QtConcurrent::run([=]() { + return fetchStationData(year, month, day, hour, minute, + elevationFile, buffer, units, + osTimeZone, fetchLatestFlag, outputPath); + }); + futureWatcher->setFuture(future); + + connect(futureWatcher, &QFutureWatcher::finished, + this, &PointInitializationInput::fetchStationDataFinished); +} + +int PointInitializationInput::fetchStationData(QVector year, + QVector month, + QVector day, + QVector hour, + QVector minute, + QString elevationFile, + double buffer, + QString units, + QString osTimeZone, + bool fetchLatestFlag, + QString outputPath) +{ + NinjaArmyH* ninjaArmy = NULL; + char ** papszOptions = NULL; + NinjaErr err = 0; + + err = NinjaFetchStation(year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), buffer, units.toUtf8().constData(), osTimeZone.toUtf8().constData(), fetchLatestFlag, outputPath.toUtf8().constData(), papszOptions); + if (err != NINJA_SUCCESS){ + qDebug() << "NinjaFetchDEMBBox: err =" << err; + return err; + } + else + { + return NINJA_SUCCESS; + } +} + +void PointInitializationInput::fetchStationDataFinished() +{ + if (progress) { + progress->close(); + progress->deleteLater(); + progress = nullptr; + } + + if (futureWatcher) { + futureWatcher->deleteLater(); + futureWatcher = nullptr; + } + + ui->inputsStackedWidget->setCurrentIndex(10); +} + void PointInitializationInput::weatherStationDataSourceComboBoxCurrentIndexChanged(int index) { ui->weatherStationDataSourceStackedWidget->setCurrentIndex(index); diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index 61d0d122e..c6135e6f1 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -31,8 +31,14 @@ #define POINTINITIALIZATIONINPUT_H #include "appstate.h" +#include "../ninja/windninja.h" #include "ui_mainwindow.h" #include +#include +#include +#include +#include +#include namespace Ui { @@ -54,9 +60,30 @@ private slots: void weatherStationDataDownloadCancelButtonClicked(); void weatherStationDataSourceComboBoxCurrentIndexChanged(int index); void weatherStationDataTimeComboBoxCurrentIndexChanged(int index); + void weatherStationDataDownloadButtonClicked(); private: Ui::MainWindow *ui; + PointInitializationInput *pointInitializationInput; + + QProgressDialog *progress; + QFutureWatcher *futureWatcher; + + QString currentDEMFilePath; + + int fetchStationData(QVector year, + QVector month, + QVector day, + QVector hour, + QVector minute, + QString elevationFile, + double buffer, + QString units, + QString osTimeZone, + bool fetchLatestFlag, + QString outputPath); + void fetchStationDataFinished(); + }; #endif // POINTINITIALIZATIONINPUT_H diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index fb0e25a44..9693e5ee8 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -200,6 +200,7 @@ void SurfaceInput::surfaceInputDownloadButtonClicked() demFilePath += ".tif"; } currentDEMFilePath = demFilePath; + ui->elevationInputFileLineEdit->setProperty("fullpath", demFilePath); std::string demFile = demFilePath.toStdString(); std::string fetchType; @@ -272,6 +273,7 @@ void SurfaceInput::elevationInputFileOpenButtonClicked() } currentDEMFilePath = demFilePath; + ui->elevationInputFileLineEdit->setProperty("fullpath", demFilePath); ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); ui->elevationInputFileLineEdit->setToolTip(demFilePath); } @@ -663,9 +665,3 @@ void SurfaceInput::computePointRadius(double north, double east, double south, d pointRadius[2] = radius; } -QString SurfaceInput::getDEMFilePath() -{ - return currentDEMFilePath; -} - - diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index 8dfb51990..27b826177 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -59,7 +59,6 @@ class SurfaceInput : public QObject QWebEngineView* webView, QObject* parent = nullptr); double computeMeshResolution(int index, bool isMomemtumChecked); - QString getDEMFilePath(); signals: void requestRefresh(); @@ -90,8 +89,8 @@ private slots: QProgressDialog *progress; QFutureWatcher *futureWatcher; - QString currentDEMFilePath; + QString currentDEMFilePath; QString GDALDriverName; int GDALXSize, GDALYSize; double GDALCellSize, GDALMaxValue, GDALMinValue; From 04e4217f24ac8557492df18df2c32bced415d81b Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 7 Aug 2025 14:23:46 -0600 Subject: [PATCH 155/435] Added functionality for refresh button, data now displays on treeview (need to add filtering) --- src/gui/mainwindow.ui | 2 +- src/gui/pointinitializationinput.cpp | 16 ++++++++++++++-- src/gui/pointinitializationinput.h | 2 ++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 86ca53d12..ba8dfb09a 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -557,7 +557,7 @@ QFrame::Shadow::Sunken - 20 + 10 diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 53838aa75..b20fef033 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -50,6 +50,7 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* connect(ui->weatherStationDataSourceComboBox, &QComboBox::currentIndexChanged, this, &PointInitializationInput::weatherStationDataSourceComboBoxCurrentIndexChanged); connect(ui->weatherStationDataTimeComboBox, &QComboBox::currentIndexChanged, this, &PointInitializationInput::weatherStationDataTimeComboBoxCurrentIndexChanged); connect(ui->weatherStationDataDownloadButton, &QPushButton::clicked, this, &PointInitializationInput::weatherStationDataDownloadButtonClicked); + connect(ui->pointInitializationRefreshButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitialziationRefreshButtonClicked); } void PointInitializationInput::pointInitializationGroupBoxToggled(bool checked) @@ -87,7 +88,7 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() QVector day = {start.date().day(), end.date().day()}; QVector hour = {start.time().hour(), end.time().hour()}; QVector minute = {start.time().minute(), end.time().minute()}; - bool fetchLatestFlag = true; // or based on combo box if needed + bool fetchLatestFlag = true; QString outputPath = ui->outputDirectoryLineEdit->text(); QString units = ui->downloadFromDEMComboBox->currentText(); @@ -96,7 +97,7 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() double buffer = ui->downloadFromDEMSpinBox->value(); - progress = new QProgressDialog("Fetching DEM file...", QString(), 0, 0, ui->centralwidget); + progress = new QProgressDialog("Fetching Station Data...", QString(), 0, 0, ui->centralwidget); progress->setWindowModality(Qt::WindowModal); progress->setCancelButton(nullptr); progress->setMinimumDuration(0); @@ -167,3 +168,14 @@ void PointInitializationInput::weatherStationDataTimeComboBoxCurrentIndexChanged { ui->weatherStationDataTimeStackedWidget->setCurrentIndex(index); } + +void PointInitializationInput::pointInitialziationRefreshButtonClicked() +{ + QFileSystemModel *model = new QFileSystemModel; + QString path = ui->elevationInputFileLineEdit->property("fullpath").toString(); + QFileInfo fileInfo(path); + model->setRootPath(fileInfo.absolutePath()); + + ui->pointInitializationTreeView->setModel(model); + ui->pointInitializationTreeView->setRootIndex(model->index(fileInfo.absolutePath())); +} diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index c6135e6f1..adc523be9 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -39,6 +39,7 @@ #include #include #include +#include namespace Ui { @@ -61,6 +62,7 @@ private slots: void weatherStationDataSourceComboBoxCurrentIndexChanged(int index); void weatherStationDataTimeComboBoxCurrentIndexChanged(int index); void weatherStationDataDownloadButtonClicked(); + void pointInitialziationRefreshButtonClicked(); private: Ui::MainWindow *ui; From 151a1211f6201591e8cf04663c5ec72b17677657 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 7 Aug 2025 14:47:49 -0600 Subject: [PATCH 156/435] rearranging the menuBar actions in mainwindow.ui, to better match their order in the gui. For issue #638 --- src/gui/mainwindow.ui | 67 ++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 36 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index bbbb740d0..0c67529d3 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -4436,11 +4436,11 @@ QMenu::item:selected { File - + @@ -4499,6 +4499,36 @@ QMenu::item:selected { + + + New Project + + + + + Open Project + + + + + Export Solution + + + + + Close Project + + + + + Open Elevation Input File + + + + + Exit WindNinja + + Enable Console Output @@ -4524,11 +4554,6 @@ QMenu::item:selected { Set configuration option - - - Displaying Shapefiles - - How to Display Shapefiles in ArcGIS Pro @@ -4594,36 +4619,6 @@ QMenu::item:selected { About Qt - - - Open Elevation Input File - - - - - New Project - - - - - Open Project - - - - - Export Solution - - - - - Close Project - - - - - Exit WindNinja - - From 1258d3bca5277d8b63ab0aca8b51997d21db3ed2 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 7 Aug 2025 14:52:02 -0600 Subject: [PATCH 157/435] moved menuBar exitWindNinjaAction connection to from mainwindow.cpp to menubar.cpp, for issue #638 --- src/gui/mainwindow.cpp | 1 - src/gui/menubar.cpp | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 044c13d4a..05bb9cc4f 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -407,7 +407,6 @@ void MainWindow::connectSignals() connect(ui->pointInitializationCheckBox, &QCheckBox::clicked, this, &MainWindow::pointInitializationCheckBoxClicked); connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); - connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QMainWindow::close); connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); connect(surfaceInput, &SurfaceInput::requestRefresh, this, &MainWindow::refreshUI); connect(domainAverageInput, &DomainAverageInput::requestRefresh, this, &MainWindow::refreshUI); diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp index 5bf83bceb..5c06c9383 100644 --- a/src/gui/menubar.cpp +++ b/src/gui/menubar.cpp @@ -38,7 +38,8 @@ MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) connect(ui->openProjectAction, &QAction::triggered, this, &MenuBar::openProject); connect(ui->exportSolutionAction, &QAction::triggered, this, &MenuBar::exportSolution); connect(ui->closeProjectAction, &QAction::triggered, this, &MenuBar::closeProject); - //connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QCoreApplication::quit); // exit the entire app + connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QCoreApplication::quit); // exit the entire app + // QMenu optionsMenu "Options" actions connect(ui->enableConsoleOutputAction, &QAction::triggered, this, &MenuBar::enableConsoleOutput); connect(ui->writeConsoleOutputAction, &QAction::triggered, this, &MenuBar::writeConsoleOutput); From 02c7516c61ccfc4d717b773f3c08e694452bc2d9 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 7 Aug 2025 14:56:16 -0600 Subject: [PATCH 158/435] moved menuBar openElevationInputFileMenuAction connection from surfaceinput.cpp to menubar.cpp, for issue #638 --- src/gui/mainwindow.cpp | 1 + src/gui/menubar.cpp | 1 + src/gui/menubar.h | 3 +++ src/gui/surfaceinput.cpp | 1 - src/gui/surfaceinput.h | 3 +-- 5 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 05bb9cc4f..4f7d1dc25 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -407,6 +407,7 @@ void MainWindow::connectSignals() connect(ui->pointInitializationCheckBox, &QCheckBox::clicked, this, &MainWindow::pointInitializationCheckBoxClicked); connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); + connect(menuBar, &MenuBar::openElevationInputFileMenuActionTriggered, surfaceInput, &SurfaceInput::elevationInputFileOpenButtonClicked); connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); connect(surfaceInput, &SurfaceInput::requestRefresh, this, &MainWindow::refreshUI); connect(domainAverageInput, &DomainAverageInput::requestRefresh, this, &MainWindow::refreshUI); diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp index 5c06c9383..addab1736 100644 --- a/src/gui/menubar.cpp +++ b/src/gui/menubar.cpp @@ -38,6 +38,7 @@ MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) connect(ui->openProjectAction, &QAction::triggered, this, &MenuBar::openProject); connect(ui->exportSolutionAction, &QAction::triggered, this, &MenuBar::exportSolution); connect(ui->closeProjectAction, &QAction::triggered, this, &MenuBar::closeProject); + connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &MenuBar::openElevationInputFileMenuActionTriggered); connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QCoreApplication::quit); // exit the entire app // QMenu optionsMenu "Options" actions diff --git a/src/gui/menubar.h b/src/gui/menubar.h index a566df357..9612584e3 100644 --- a/src/gui/menubar.h +++ b/src/gui/menubar.h @@ -43,6 +43,9 @@ class MenuBar : public QObject public: MenuBar(Ui::MainWindow* ui, QObject* parent = nullptr); +signals: + void openElevationInputFileMenuActionTriggered(); + private slots: // functions for Menu actions // functions for QMenu fileMenu "File" actions diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index ef0055fa8..a20b37929 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -58,7 +58,6 @@ SurfaceInput::SurfaceInput(Ui::MainWindow *ui, connect(ui->meshResolutionUnitsComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInput::meshResolutionUnitsComboBoxCurrentIndexChanged); connect(ui->surfaceInputDownloadCancelButton, &QPushButton::clicked, this, &SurfaceInput::surfaceInputDownloadCancelButtonClicked); connect(ui->surfaceInputDownloadButton, &QPushButton::clicked, this, &SurfaceInput::surfaceInputDownloadButtonClicked); - connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &SurfaceInput::elevationInputFileOpenButtonClicked); connect(ui->elevationInputTypePushButton, &QPushButton::clicked, this, &SurfaceInput::elevationInputTypePushButtonClicked); connect(ui->timeZoneAllZonesCheckBox, &QCheckBox::clicked, this, &SurfaceInput::timeZoneAllZonesCheckBoxClicked); connect(ui->timeZoneDetailsCheckBox, &QCheckBox::clicked, this, &SurfaceInput::timeZoneDetailsCheckBoxClicked); diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index 4204cc570..a70d1a13c 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -67,6 +67,7 @@ class SurfaceInput : public QObject public slots: void boundingBoxReceived(double north, double south, double east, double west); + void elevationInputFileOpenButtonClicked(); private slots: void surfaceInputDownloadCancelButtonClicked(); @@ -82,8 +83,6 @@ private slots: void timeZoneDetailsCheckBoxClicked(); void timeZoneComboBoxCurrentIndexChanged(int index); void timeZoneAllZonesCheckBoxClicked(); - void elevationInputFileOpenButtonClicked(); - private: Ui::MainWindow *ui; From 7b8943f4d7c23b8b62aafc32c89d0e2f33e5f254 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 7 Aug 2025 16:41:23 -0600 Subject: [PATCH 159/435] Added filtering and column stretching for WXSTATION directories --- src/gui/mainwindow.ui | 8 ++++---- src/gui/pointinitializationinput.cpp | 12 ++++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index ba8dfb09a..9a9af9d7f 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -557,7 +557,7 @@ QFrame::Shadow::Sunken - 10 + 20 @@ -3998,7 +3998,7 @@ li.checked::marker { content: "\2612"; } 0 - 0 + 1 @@ -4128,7 +4128,7 @@ li.checked::marker { content: "\2612"; } - 1 + 0 @@ -4296,7 +4296,7 @@ li.checked::marker { content: "\2612"; } - + false diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index b20fef033..5ea748f5f 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -176,6 +176,18 @@ void PointInitializationInput::pointInitialziationRefreshButtonClicked() QFileInfo fileInfo(path); model->setRootPath(fileInfo.absolutePath()); + QStringList filters; + filters<<"*.csv"; //Only show CSV + filters<<"WXSTATIONS-*"; //Add downloadable directories to filters + model->setNameFilters(filters); + model->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); //QDir::Dir specifies to add filters to directories + model->setNameFilterDisables(false); + ui->pointInitializationTreeView->setModel(model); ui->pointInitializationTreeView->setRootIndex(model->index(fileInfo.absolutePath())); + ui->pointInitializationTreeView->header()->setSectionResizeMode(QHeaderView::Stretch); + ui->pointInitializationTreeView->header()->setSectionResizeMode(0, QHeaderView::Stretch); // Name column + ui->pointInitializationTreeView->header()->setSectionResizeMode(3, QHeaderView::ResizeToContents); // Date Modified column + ui->pointInitializationTreeView->hideColumn(1); + ui->pointInitializationTreeView->hideColumn(2); } From d7f30f5372616d15167ac5f723177c7c7073e5f0 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 8 Aug 2025 09:29:36 -0600 Subject: [PATCH 160/435] Added emit signals to ensure poin tree view is updated properly, working on scroll area for page --- src/gui/mainwindow.ui | 376 +++++++++++++++------------ src/gui/pointinitializationinput.cpp | 11 +- src/gui/surfaceinput.cpp | 1 + 3 files changed, 212 insertions(+), 176 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 9a9af9d7f..15ea384ee 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -557,7 +557,7 @@ QFrame::Shadow::Sunken - 20 + 10 @@ -1815,207 +1815,241 @@ li.checked::marker { content: "\2612"; } 5 - + - + 0 0 - - - 0 - 416 - - - - Point Initialization + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff - + true - - false - - - - - - - - Select Weather Stations - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - 140 - 16777215 - - - - PointingHandCursor - - - Download Data - - - - - - - - - true - - - 10 - - - 300 - - - true - - - false - - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - Refresh Weather Stations - - - - - - - - - - 0 - 0 - - - - - 0 - 80 - - - - 1 - - - - - - - Start Time - - - - - - - Stop Time - - - - - - - Number of Time Steps - - + + + + 0 + -28 + 565 + 434 + + + + + + + + 0 + 0 + + + + + 0 + 416 + + + + Point Initialization + + + true + + + false + + + + + + + + Select Weather Stations + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + 140 + 16777215 + + + + PointingHandCursor + + + Download Data + + + + - - - - PointingHandCursor - - + + + true - - - - - + + 10 + + + 300 + + true - + + + false + - - + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + Refresh Weather Stations + + + + - - - - - + 0 0 + + + 0 + 80 + + 16777215 - 30 + 16777215 + + 1 + + + + + + + Start Time + + + + + + + Stop Time + + + + + + + Number of Time Steps + + + + + + + PointingHandCursor + + + true + + + + + + + true + + + + + + + + + + + + + + + 0 + 0 + + + + + 16777215 + 30 + + + + + + + + + + + + PointingHandCursor + + + Write Station KML + - - - - - - PointingHandCursor - - - Write Station KML - - - - + + + diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 5ea748f5f..2001c03b0 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -157,6 +157,7 @@ void PointInitializationInput::fetchStationDataFinished() } ui->inputsStackedWidget->setCurrentIndex(10); + ui->pointInitializationRefreshButton->click(); } void PointInitializationInput::weatherStationDataSourceComboBoxCurrentIndexChanged(int index) @@ -177,17 +178,17 @@ void PointInitializationInput::pointInitialziationRefreshButtonClicked() model->setRootPath(fileInfo.absolutePath()); QStringList filters; - filters<<"*.csv"; //Only show CSV - filters<<"WXSTATIONS-*"; //Add downloadable directories to filters + filters<<"*.csv"; + filters<<"WXSTATIONS-*"; model->setNameFilters(filters); - model->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); //QDir::Dir specifies to add filters to directories + model->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); model->setNameFilterDisables(false); ui->pointInitializationTreeView->setModel(model); ui->pointInitializationTreeView->setRootIndex(model->index(fileInfo.absolutePath())); ui->pointInitializationTreeView->header()->setSectionResizeMode(QHeaderView::Stretch); - ui->pointInitializationTreeView->header()->setSectionResizeMode(0, QHeaderView::Stretch); // Name column - ui->pointInitializationTreeView->header()->setSectionResizeMode(3, QHeaderView::ResizeToContents); // Date Modified column + ui->pointInitializationTreeView->header()->setSectionResizeMode(0, QHeaderView::Stretch); + ui->pointInitializationTreeView->header()->setSectionResizeMode(3, QHeaderView::ResizeToContents); ui->pointInitializationTreeView->hideColumn(1); ui->pointInitializationTreeView->hideColumn(2); } diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 9693e5ee8..3d14cd3ad 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -250,6 +250,7 @@ void SurfaceInput::elevationInputFileLineEditTextChanged(const QString &arg1) webView->page()->runJavaScript(js); emit requestRefresh(); + emit ui->pointInitializationRefreshButton->clicked(); } void SurfaceInput::elevationInputFileOpenButtonClicked() From 40479fca8f53eed40ebca18de046ab9900c207ba Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 11 Aug 2025 11:35:26 -0600 Subject: [PATCH 161/435] Added station fetching for station ID in GUI, included exposing an additional C API function, for #636 --- src/gui/CMakeLists.txt.autosave | 133 +++++++++++++++++++++++++++ src/gui/mainwindow.ui | 10 +- src/gui/pointinitializationinput.cpp | 94 ++++++++++++++----- src/gui/pointinitializationinput.h | 34 ++++--- src/ninja/windninja.cpp | 24 ++++- src/ninja/windninja.h | 5 +- 6 files changed, 259 insertions(+), 41 deletions(-) create mode 100644 src/gui/CMakeLists.txt.autosave diff --git a/src/gui/CMakeLists.txt.autosave b/src/gui/CMakeLists.txt.autosave new file mode 100644 index 000000000..2de868992 --- /dev/null +++ b/src/gui/CMakeLists.txt.autosave @@ -0,0 +1,133 @@ +# THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) +# MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT +# IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 +# OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT +# PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES +# LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER +# PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, +# RELIABILITY, OR ANY OTHER CHARACTERISTIC. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +cmake_minimum_required(VERSION 2.6) + +QT4_WRAP_UI(QTUI_H_SRCS WidgetDownloadDEM.ui + setconfigdialog.ui + stationFetchWidget.ui) + +set(NINJA_GUI_INCLUDES consoleDockWidget.h + diurnalInput.h + stabilityInput.h + fbOutput.h + googleOutput.h + latLonWidget.h + mainWindow.h + metaWindWidget.h + nativeSolverInput.h + ninjafoamInput.h + outputHeightWidget.h + outputMetaData.h + pdfOutput.h + pointInput.h + shapeOutput.h + solvePage.h + solveThread.h + splash.h + surfaceInput.h + timeZoneWidget.h + #vec3f.h + vtkOutput.h + weatherModel.h + WidgetDownloadDEM.h + stationFetchWidget.h + windInput.h + windInputTable.h + WindNinjaTree.h + GoogleMapsInterface.h + setconfigdialog.h + ${QTUI_H_SRCS}) + +include_directories(${QT_INCLUDES} + ${Boost_INCLUDE_DIRS} + ${NETCDF_INCLUDES} + ${GDAL_SYSTEM_INCLUDE} ${GDAL_INCLUDE_DIR} + ${CURL_INCLUDE_DIR} + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_SOUclearRCE_DIR}/src/ninja + ${CMAKE_CURRENT_BINARY_DIR}) + +QT4_WRAP_CPP(NINJA_GUI_INCLUDES_MOC ${NINJA_GUI_INCLUDES}) +QT4_ADD_RESOURCES(NINJA_GUI_RESOURCES ${PROJECT_SOURCE_DIR}/wn-resources.qrc) + +set(NINJA_GUI_SOURCES cmake_gui.cpp + ${PROJECT_SOURCE_DIR}/src/ninja/cli.cpp + consoleDockWidget.cpp + diurnalInput.cpp + stabilityInput.cpp + fbOutput.cpp + googleOutput.cpp + latLonWidget.cpp + mainWindow.cpp + metaWindWidget.cpp + outputHeightWidget.cpp + outputMetaData.cpp + nativeSolverInput.cpp + ninjafoamInput.cpp + pdfOutput.cpp + pointInput.cpp + shapeOutput.cpp + solvePage.cpp + solveThread.cpp + splash.cpp + surfaceInput.cpp + timeZoneWidget.cpp + vec3f.cpp + vtkOutput.cpp + weatherModel.cpp + windInput.cpp + windInputTable.cpp + WindNinjaTree.cpp + WidgetDownloadDEM.cpp + stationFetchWidget.cpp + GoogleMapsInterface.cpp + setconfigdialog.cpp + ${QTUI_H_SRCS}) +if(WIN32) + set(NINJA_GUI_SOURCES ${NINJA_GUI_SOURCES} + ${PROJECT_SOURCE_DIR}/wn-ms-resource.rc) + add_definitions(-DQT_NO_DEBUG_OUTPUT) +endif(WIN32) + +set(LINK_LIBS ${QT_LIBRARIES} + ${GDAL_LIBRARY} + ${Boost_LIBRARIES} + ${CURL_LIBRARIES} + ${NETCDF_LIBRARIES_C}) + +if(WIN32) + set(LINK_LIBS ${LINK_LIBS} ${PROJECT_BINARY_DIR}/src/ninja/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}ninja${CMAKE_STATIC_LIBRARY_SUFFIX}) + if(NOT ENABLE_CONSOLE) + set(LINK_LIBS ${LINK_LIBS} ${QT_QTMAIN_LIBRARY}) + set(GUI_TYPE WIN32) + else(NOT ENABLE_CONSOLE) + set(GUI_TYPE "") + endif(NOT ENABLE_CONSOLE) +else(WIN32) + set(LINK_LIBS ${LINK_LIBS} ${PROJECT_BINARY_DIR}/src/ninja/${CMAKE_SHARED_LIBRARY_PREFIX}ninja${CMAKE_SHARED_LIBRARY_SUFFIX}) +endif(WIN32) + +add_executable(WindNinja ${GUI_TYPE} + ${NINJA_GUI_INCLUDES_MOC} + ${NINJA_GUI_RESOURCES} + ${NINJA_GUI_SOURCES}) + +target_link_libraries(WindNinja ${LINK_LIBS}) +add_dependencies(WindNinja ninja) +install(TARGETS WindNinja DESTINATION bin COMPONENT apps) + diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 15ea384ee..e731b3846 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -1832,16 +1832,16 @@ li.checked::marker { content: "\2612"; } 0 - -28 - 565 - 434 + 0 + 579 + 406 - + 0 0 @@ -1849,7 +1849,7 @@ li.checked::marker { content: "\2612"; } 0 - 416 + 0 diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 2001c03b0..67c34f48b 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -51,6 +51,7 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* connect(ui->weatherStationDataTimeComboBox, &QComboBox::currentIndexChanged, this, &PointInitializationInput::weatherStationDataTimeComboBoxCurrentIndexChanged); connect(ui->weatherStationDataDownloadButton, &QPushButton::clicked, this, &PointInitializationInput::weatherStationDataDownloadButtonClicked); connect(ui->pointInitializationRefreshButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitialziationRefreshButtonClicked); + connect(ui->pointInitializationTreeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &PointInitializationInput::pointInitializationTreeViewItemSelectionChanged); } void PointInitializationInput::pointInitializationGroupBoxToggled(bool checked) @@ -88,14 +89,16 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() QVector day = {start.date().day(), end.date().day()}; QVector hour = {start.time().hour(), end.time().hour()}; QVector minute = {start.time().minute(), end.time().minute()}; - bool fetchLatestFlag = true; + bool fetchLatestFlag = false; + if(ui->weatherStationDataTimeComboBox->currentIndex() == 0) + { + fetchLatestFlag = true; + } QString outputPath = ui->outputDirectoryLineEdit->text(); - QString units = ui->downloadFromDEMComboBox->currentText(); QString elevationFile = ui->elevationInputFileLineEdit->property("fullpath").toString(); QString osTimeZone = "UTC"; - double buffer = ui->downloadFromDEMSpinBox->value(); progress = new QProgressDialog("Fetching Station Data...", QString(), 0, 0, ui->centralwidget); progress->setWindowModality(Qt::WindowModal); @@ -105,36 +108,73 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() progress->show(); futureWatcher = new QFutureWatcher(this); - QFuture future = QtConcurrent::run([=]() { - return fetchStationData(year, month, day, hour, minute, - elevationFile, buffer, units, - osTimeZone, fetchLatestFlag, outputPath); - }); + QFuture future; + if(ui->weatherStationDataSourceComboBox->currentIndex() == 0) + { + QString units = ui->downloadFromDEMComboBox->currentText(); + double buffer = ui->downloadFromDEMSpinBox->value(); + future = QtConcurrent::run(&PointInitializationInput::fetchStationFromBbox, + year, month, day, hour, minute, + elevationFile, buffer, units, + osTimeZone, fetchLatestFlag, outputPath); + } + else + { + QString stationList = ui->downloadFromStationIDLineEdit->text(); + future = QtConcurrent::run(&PointInitializationInput::fetchStationByName, + year, month, day, hour, minute, + elevationFile, stationList, + osTimeZone, fetchLatestFlag, outputPath); + } futureWatcher->setFuture(future); connect(futureWatcher, &QFutureWatcher::finished, this, &PointInitializationInput::fetchStationDataFinished); } -int PointInitializationInput::fetchStationData(QVector year, - QVector month, - QVector day, - QVector hour, - QVector minute, - QString elevationFile, - double buffer, - QString units, - QString osTimeZone, - bool fetchLatestFlag, - QString outputPath) +int PointInitializationInput::fetchStationFromBbox(QVector year, + QVector month, + QVector day, + QVector hour, + QVector minute, + QString elevationFile, + double buffer, + QString units, + QString osTimeZone, + bool fetchLatestFlag, + QString outputPath) +{ + char ** papszOptions = NULL; + NinjaErr err = 0; + + err = NinjaFetchStationFromBbox(year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), buffer, units.toUtf8().constData(), osTimeZone.toUtf8().constData(), fetchLatestFlag, outputPath.toUtf8().constData(), papszOptions); + if (err != NINJA_SUCCESS){ + qDebug() << "NinjaFetchStationFromBbox: err =" << err; + return err; + } + else + { + return NINJA_SUCCESS; + } +} + +int PointInitializationInput::fetchStationByName(QVector year, + QVector month, + QVector day, + QVector hour, + QVector minute, + QString elevationFile, + QString stationList, + QString osTimeZone, + bool fetchLatestFlag, + QString outputPath) { - NinjaArmyH* ninjaArmy = NULL; char ** papszOptions = NULL; NinjaErr err = 0; - err = NinjaFetchStation(year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), buffer, units.toUtf8().constData(), osTimeZone.toUtf8().constData(), fetchLatestFlag, outputPath.toUtf8().constData(), papszOptions); + err = NinjaFetchStationByName(year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), stationList.toUtf8().constData(), osTimeZone.toUtf8().constData(), fetchLatestFlag, outputPath.toUtf8().constData(), papszOptions); if (err != NINJA_SUCCESS){ - qDebug() << "NinjaFetchDEMBBox: err =" << err; + qDebug() << "NinjaFetchFetchStationByName: err =" << err; return err; } else @@ -174,6 +214,11 @@ void PointInitializationInput::pointInitialziationRefreshButtonClicked() { QFileSystemModel *model = new QFileSystemModel; QString path = ui->elevationInputFileLineEdit->property("fullpath").toString(); + if(path.isEmpty()) + { + delete model; + return; + } QFileInfo fileInfo(path); model->setRootPath(fileInfo.absolutePath()); @@ -192,3 +237,8 @@ void PointInitializationInput::pointInitialziationRefreshButtonClicked() ui->pointInitializationTreeView->hideColumn(1); ui->pointInitializationTreeView->hideColumn(2); } + +void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() +{ + +} diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index adc523be9..688d109bd 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -63,27 +63,37 @@ private slots: void weatherStationDataTimeComboBoxCurrentIndexChanged(int index); void weatherStationDataDownloadButtonClicked(); void pointInitialziationRefreshButtonClicked(); + void pointInitializationTreeViewItemSelectionChanged(); private: Ui::MainWindow *ui; - PointInitializationInput *pointInitializationInput; QProgressDialog *progress; QFutureWatcher *futureWatcher; QString currentDEMFilePath; - int fetchStationData(QVector year, - QVector month, - QVector day, - QVector hour, - QVector minute, - QString elevationFile, - double buffer, - QString units, - QString osTimeZone, - bool fetchLatestFlag, - QString outputPath); + static int fetchStationFromBbox(QVector year, + QVector month, + QVector day, + QVector hour, + QVector minute, + QString elevationFile, + double buffer, + QString units, + QString osTimeZone, + bool fetchLatestFlag, + QString outputPath); + static int fetchStationByName(QVector year, + QVector month, + QVector day, + QVector hour, + QVector minute, + QString elevationFile, + QString stationList, + QString osTimeZone, + bool fetchLatestFlag, + QString outputPath); void fetchStationDataFinished(); }; diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index efdb7814a..d711f3cd0 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -382,7 +382,7 @@ WINDNINJADLL_EXPORT const char* NinjaFetchForecast(NinjaArmyH * army, const char * to return the path to the file rather than a bool for success/failure. This might be the simplest for now. * */ -WINDNINJADLL_EXPORT NinjaErr NinjaFetchStation(const int* yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, +WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationFromBbox(const int* yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char* elevationFile, double buffer, const char* units, const char* timeZone, bool fetchLatestFlag, const char* outputPath, char ** options) { std::vector timeList; @@ -404,6 +404,28 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchStation(const int* yearList, const int * return NINJA_SUCCESS; } +WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationByName(const int* yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, + const char* elevationFile, const char* stationList, const char* timeZone, bool fetchLatestFlag, const char* outputPath, char ** options) +{ + std::vector timeList; + for(size_t i=0; i Date: Mon, 11 Aug 2025 13:12:53 -0600 Subject: [PATCH 162/435] Added a flag for station location file generation in API and implemented basic code to enable a point initialization solve, for #636 --- src/gui/mainwindow.cpp | 25 ++++++++++++-- src/gui/pointinitializationinput.cpp | 12 ++++--- src/ninja/windninja.cpp | 51 ++++++++++++++++++++++++---- src/ninja/windninja.h | 6 ++-- 4 files changed, 78 insertions(+), 16 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 55f333637..2a9321456 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -588,8 +588,6 @@ void MainWindow::solveButtonClicked() if (state.isDomainAverageInitializationValid) { - initializationMethod = "domain_average"; - int rowCount = ui->domainAverageTable->rowCount(); for (int row = 0; row < rowCount; ++row) { QTableWidgetItem* speedItem = ui->domainAverageTable->item(row, 0); @@ -605,6 +603,29 @@ void MainWindow::solveButtonClicked() QString speedUnits = ui->tableSpeedUnits->currentText(); ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), papszOptions); } + else if (state.isPointInitializationValid) + { + QDateTime start = ui->downloadBetweenDatesStartTimeDateTimeEdit->dateTime(); + QDateTime end = ui->downloadBetweenDatesEndTimeDateTimeEdit->dateTime(); + QVector year = {start.date().year(), end.date().year()}; + QVector month = {start.date().month(), end.date().month()}; + QVector day = {start.date().day(), end.date().day()}; + QVector hour = {start.time().hour(), end.time().hour()}; + QVector minute = {start.time().minute(), end.time().minute()}; + + QString osTimeZone = "UTC"; + + QModelIndex index = ui->pointInitializationTreeView->currentIndex(); + QFileSystemModel *model = qobject_cast(ui->pointInitializationTreeView->model()); + QString stationPath = model->filePath(index); + QString DEMPath = ui->elevationInputFileLineEdit->property("fullpath").toString(); + + initializationMethod = "point"; + numNinjas = 2; + int size = 2; + bool momentumFlag = ui->momentumSolverCheckBox->isChecked(); + ninjaArmy = NinjaMakePointArmy(year.data(), month.data(), day.data(), hour.data(), minute.data(), size, osTimeZone.toUtf8().data(), stationPath.toUtf8().data(), DEMPath.toUtf8().data(), true, momentumFlag, papszOptions); + } prepareArmy(ninjaArmy, numNinjas, initializationMethod); diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 67c34f48b..e71902d49 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -83,12 +83,12 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() { QDateTime start = ui->downloadBetweenDatesStartTimeDateTimeEdit->dateTime(); QDateTime end = ui->downloadBetweenDatesEndTimeDateTimeEdit->dateTime(); - QVector year = {start.date().year(), end.date().year()}; QVector month = {start.date().month(), end.date().month()}; QVector day = {start.date().day(), end.date().day()}; QVector hour = {start.time().hour(), end.time().hour()}; QVector minute = {start.time().minute(), end.time().minute()}; + bool fetchLatestFlag = false; if(ui->weatherStationDataTimeComboBox->currentIndex() == 0) { @@ -147,7 +147,7 @@ int PointInitializationInput::fetchStationFromBbox(QVector year, char ** papszOptions = NULL; NinjaErr err = 0; - err = NinjaFetchStationFromBbox(year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), buffer, units.toUtf8().constData(), osTimeZone.toUtf8().constData(), fetchLatestFlag, outputPath.toUtf8().constData(), papszOptions); + err = NinjaFetchStationFromBBox(year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), buffer, units.toUtf8().constData(), osTimeZone.toUtf8().constData(), fetchLatestFlag, outputPath.toUtf8().constData(), false, papszOptions); if (err != NINJA_SUCCESS){ qDebug() << "NinjaFetchStationFromBbox: err =" << err; return err; @@ -172,7 +172,7 @@ int PointInitializationInput::fetchStationByName(QVector year, char ** papszOptions = NULL; NinjaErr err = 0; - err = NinjaFetchStationByName(year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), stationList.toUtf8().constData(), osTimeZone.toUtf8().constData(), fetchLatestFlag, outputPath.toUtf8().constData(), papszOptions); + err = NinjaFetchStationByName(year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), stationList.toUtf8().constData(), osTimeZone.toUtf8().constData(), fetchLatestFlag, outputPath.toUtf8().constData(), false, papszOptions); if (err != NINJA_SUCCESS){ qDebug() << "NinjaFetchFetchStationByName: err =" << err; return err; @@ -185,13 +185,15 @@ int PointInitializationInput::fetchStationByName(QVector year, void PointInitializationInput::fetchStationDataFinished() { - if (progress) { + if (progress) + { progress->close(); progress->deleteLater(); progress = nullptr; } - if (futureWatcher) { + if (futureWatcher) + { futureWatcher->deleteLater(); futureWatcher = nullptr; } diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index d711f3cd0..3cee8f117 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -365,10 +365,14 @@ WINDNINJADLL_EXPORT const char* NinjaFetchForecast(NinjaArmyH * army, const char * \param dayList A pointer to an array of days. * \param hourList A pointer to an array of hours. * \param minuteList A pointer to an array of minutes. + * \param size The size of time arrays * \param elevation_file A valid path to an elevation file. + * \param buffer The buffer around the elevation file + * \param units The units of the buffer * \param osTimeZone A string representing a valid timezone. * \param fetchLatestFlag An integer representing whether to fetch the latest forecast. - * \param output_path An optional valid path to a custom output directory, can be NULL. + * \param outputPath An optional valid path to a custom output directory, can be NULL. + * \param locationFileFlag An integer representing whether to write location file for station data * \param options Key, value option pairs from the options listed above, can be NULL. * * \return Station file name on success, "exception" otherwise. @@ -382,8 +386,8 @@ WINDNINJADLL_EXPORT const char* NinjaFetchForecast(NinjaArmyH * army, const char * to return the path to the file rather than a bool for success/failure. This might be the simplest for now. * */ -WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationFromBbox(const int* yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, - const char* elevationFile, double buffer, const char* units, const char* timeZone, bool fetchLatestFlag, const char* outputPath, char ** options) +WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationFromBBox(const int* yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, + const char* elevationFile, double buffer, const char* units, const char* timeZone, bool fetchLatestFlag, const char* outputPath, bool locationFileFlag, char ** options) { std::vector timeList; for(size_t i=0; i timeList; for(size_t i=0; i Date: Mon, 11 Aug 2025 16:57:38 -0600 Subject: [PATCH 163/435] first pass, adding a console window to the redesigned gui, for issue #638 --- src/gui/mainwindow.ui | 48 ++++++++++++++++++++++++++++++++- src/gui/menubar.cpp | 63 ++++++++++++++++++++++++++++--------------- 2 files changed, 89 insertions(+), 22 deletions(-) mode change 100644 => 100755 src/gui/mainwindow.ui mode change 100644 => 100755 src/gui/menubar.cpp diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui old mode 100644 new mode 100755 index 0c67529d3..f468bba75 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -277,7 +277,7 @@ false - + 0 @@ -4359,6 +4359,52 @@ li.checked::marker { content: "\2612"; } + + + + Console Output + + + + + 0 + 0 + + + + + 600 + 100 + + + + + true + + + + 0 + 0 + 600 + 100 + + + + + 0 + 0 + + + + + 600 + 100 + + + + + + diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp old mode 100644 new mode 100755 index addab1736..36ccc80cc --- a/src/gui/menubar.cpp +++ b/src/gui/menubar.cpp @@ -75,105 +75,126 @@ MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) void MenuBar::newProject() { - qDebug() << "MenuBar: newProject() triggered"; + qDebug() << "MenuBar: newProject() triggered"; + ui->consoleTextEdit->append("MenuBar: newProject() triggered"); } void MenuBar::openProject() { - qDebug() << "MenuBar: openProject() triggered"; + qDebug() << "MenuBar: openProject() triggered"; + ui->consoleTextEdit->append("MenuBar: openProject() triggered"); } void MenuBar::exportSolution() { - qDebug() << "MenuBar: exportSolution() triggered"; + qDebug() << "MenuBar: exportSolution() triggered"; + ui->consoleTextEdit->append("MenuBar: exportSolution() triggered"); } void MenuBar::closeProject() { - qDebug() << "MenuBar: closeProject() triggered"; + qDebug() << "MenuBar: closeProject() triggered"; + ui->consoleTextEdit->append("MenuBar: closeProject() triggered"); } void MenuBar::enableConsoleOutput() { - qDebug() << "MenuBar: enableConsoleOutput() triggered"; + qDebug() << "MenuBar: enableConsoleOutput() triggered"; + ui->consoleTextEdit->append("MenuBar: enableConsoleOutput() triggered"); } void MenuBar::writeConsoleOutput() { - qDebug() << "MenuBar: writeConsoleOutput() triggered"; + qDebug() << "MenuBar: writeConsoleOutput() triggered"; + ui->consoleTextEdit->append("MenuBar: writeConsoleOutput() triggered"); } void MenuBar::resampleData() { - qDebug() << "MenuBar: resampleData() triggered"; + qDebug() << "MenuBar: resampleData() triggered"; + ui->consoleTextEdit->append("MenuBar: resampleData() triggered"); } void MenuBar::writeBlankStationFile() { - qDebug() << "MenuBar: writeBlankStationFile() triggered"; + qDebug() << "MenuBar: writeBlankStationFile() triggered"; + ui->consoleTextEdit->append("MenuBar: writeBlankStationFile() triggered"); } void MenuBar::setConfigurationOption() { - qDebug() << "MenuBar: setConfigurationOption() triggered"; + qDebug() << "MenuBar: setConfigurationOption() triggered"; + ui->consoleTextEdit->append("MenuBar: setConfigurationOption() triggered"); } void MenuBar::displayArcGISProGuide() { - qDebug() << "MenuBar: displayArcGISProGuide() triggered"; + qDebug() << "MenuBar: displayArcGISProGuide() triggered"; + ui->consoleTextEdit->append("MenuBar: displayArcGISProGuide() triggered"); } void MenuBar::displayTutorial1() { - qDebug() << "MenuBar: displayTutorial1() triggered"; + qDebug() << "MenuBar: displayTutorial1() triggered"; + ui->consoleTextEdit->append("MenuBar: displayTutorial1() triggered"); } void MenuBar::displayTutorial2() { - qDebug() << "MenuBar: displayTutorial2() triggered"; + qDebug() << "MenuBar: displayTutorial2() triggered"; + ui->consoleTextEdit->append("MenuBar: displayTutorial2() triggered"); } void MenuBar::displayTutorial3() { - qDebug() << "MenuBar: displayTutorial3() triggered"; + qDebug() << "MenuBar: displayTutorial3() triggered"; + ui->consoleTextEdit->append("MenuBar: displayTutorial3() triggered"); } void MenuBar::displayTutorial4() { - qDebug() << "MenuBar: displayTutorial4() triggered"; + qDebug() << "MenuBar: displayTutorial4() triggered"; + ui->consoleTextEdit->append("MenuBar: displayTutorial4() triggered"); } void MenuBar::displayDemDownloadInstructions() { - qDebug() << "MenuBar: displayDemDownloadInstructions() triggered"; + qDebug() << "MenuBar: displayDemDownloadInstructions() triggered"; + ui->consoleTextEdit->append("MenuBar: displayDemDownloadInstructions() triggered"); } void MenuBar::displayFetchDemInstructions() { - qDebug() << "MenuBar: displayFetchDemInstructions() triggered"; + qDebug() << "MenuBar: displayFetchDemInstructions() triggered"; + ui->consoleTextEdit->append("MenuBar: displayFetchDemInstructions() triggered"); } void MenuBar::displayCommandLineInterfaceInstructions() { - qDebug() << "MenuBar: displayCommandLineInterfaceInstructions() triggered"; + qDebug() << "MenuBar: displayCommandLineInterfaceInstructions() triggered"; + ui->consoleTextEdit->append("MenuBar: displayCommandLineInterfaceInstructions() triggered"); } void MenuBar::aboutWindNinja() { - qDebug() << "MenuBar: aboutWindNinja() triggered"; + qDebug() << "MenuBar: aboutWindNinja() triggered"; + ui->consoleTextEdit->append("MenuBar: aboutWindNinja() triggered"); } void MenuBar::citeWindNinja() { - qDebug() << "MenuBar: citeWindNinja() triggered"; + qDebug() << "MenuBar: citeWindNinja() triggered"; + ui->consoleTextEdit->append("MenuBar: citeWindNinja() triggered"); } void MenuBar::supportEmail() { - qDebug() << "MenuBar: supportEmail() triggered"; + qDebug() << "MenuBar: supportEmail() triggered"; + ui->consoleTextEdit->append("MenuBar: supportEmail() triggered"); } void MenuBar::submitBugReport() { - qDebug() << "MenuBar: submitBugReport() triggered"; + qDebug() << "MenuBar: submitBugReport() triggered"; + ui->consoleTextEdit->append("MenuBar: submitBugReport() triggered"); } From 5a992ed7d612f8bdf8b52123d03f4ef9b1b89748 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 12 Aug 2025 15:42:48 -0600 Subject: [PATCH 164/435] Able to read .csv and determine whether it is a time series or not, added and adjusted API calls as needed, for #636 --- src/gui/mainwindow.ui | 8 +-- src/gui/pointinitializationinput.cpp | 97 +++++++++++++++++++++++++++- src/gui/pointinitializationinput.h | 2 + src/ninja/windninja.cpp | 28 ++++++++ src/ninja/windninja.h | 5 ++ 5 files changed, 133 insertions(+), 7 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index e731b3846..8960644c7 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -557,7 +557,7 @@ QFrame::Shadow::Sunken - 10 + 20 @@ -4162,7 +4162,7 @@ li.checked::marker { content: "\2612"; } - 0 + 1 @@ -4210,7 +4210,7 @@ li.checked::marker { content: "\2612"; } - + @@ -4220,7 +4220,7 @@ li.checked::marker { content: "\2612"; } - + diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index e71902d49..1e775fbdb 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -41,8 +41,8 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* ui->pointInitializationWriteStationKMLCheckBox->setIcon(QIcon(":/weather_cloudy.png")); ui->weatherStationDataDownloadButton->setIcon(QIcon(":/server_go.png")); ui->weatherStationDataDownloadCancelButton->setIcon(QIcon(":/cancel.png")); - ui->downloadBetweenDatesStartTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime()); - ui->downloadBetweenDatesEndTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime()); + ui->downloadBetweenDatesStartTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); + ui->downloadBetweenDatesEndTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); connect(ui->pointInitializationGroupBox, &QGroupBox::toggled, this, &PointInitializationInput::pointInitializationGroupBoxToggled); connect(ui->pointInitializationDownloadDataButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitializationDownloadDataButtonClicked); @@ -51,7 +51,6 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* connect(ui->weatherStationDataTimeComboBox, &QComboBox::currentIndexChanged, this, &PointInitializationInput::weatherStationDataTimeComboBoxCurrentIndexChanged); connect(ui->weatherStationDataDownloadButton, &QPushButton::clicked, this, &PointInitializationInput::weatherStationDataDownloadButtonClicked); connect(ui->pointInitializationRefreshButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitialziationRefreshButtonClicked); - connect(ui->pointInitializationTreeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &PointInitializationInput::pointInitializationTreeViewItemSelectionChanged); } void PointInitializationInput::pointInitializationGroupBoxToggled(bool checked) @@ -238,9 +237,101 @@ void PointInitializationInput::pointInitialziationRefreshButtonClicked() ui->pointInitializationTreeView->header()->setSectionResizeMode(3, QHeaderView::ResizeToContents); ui->pointInitializationTreeView->hideColumn(1); ui->pointInitializationTreeView->hideColumn(2); + + connect(ui->pointInitializationTreeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &PointInitializationInput::pointInitializationTreeViewItemSelectionChanged); + } void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() { + const char* xFileName = "/home/mason/Downloads/testfolder/WXSTATIONS-2025-08-10-1537-2025-08-11-1537-test/CBFI1-2025-08-10_1537-2025-08-11_1537-1.csv"; + char** papszOptions = nullptr; + int stationHeader = NinjaGetHeaderVersion(xFileName, papszOptions); + int instant = 0; + qDebug() << "Station Header is: " << stationHeader; + std::string idx3; + stringstream ssidx; + + if(stationHeader != 1) + { + OGRDataSourceH hDS; + OGRLayer *poLayer; + OGRFeature *poFeature; + OGRFeatureDefn *poFeatureDefn; + OGRFieldDefn *poFieldDefn; + OGRLayerH hLayer; + + hDS = OGROpen( xFileName, FALSE, NULL ); + + poLayer = (OGRLayer*)OGR_DS_GetLayer( hDS, 0 ); + hLayer=OGR_DS_GetLayer(hDS,0); + OGR_L_ResetReading(hLayer); + poLayer->ResetReading(); + + GIntBig iBig = 1; + GIntBig idx0 = poLayer->GetFeatureCount(); + GIntBig idx1 = idx0-iBig; + GIntBig idx2; + + idx2 = poLayer->GetFeatureCount(); + + CPLDebug("STATION_FETCH","Number of Time Entries: %llu",idx2); //How many lines are on disk + QString qFileName = QFileInfo(xFileName).fileName(); + const char* emptyChair; //Muy Importante! + + poFeature = poLayer->GetFeature(iBig); + + // startTime = poFeature->GetFieldAsString(15); + std::string start_datetime(poFeature->GetFieldAsString(15)); + poFeature = poLayer->GetFeature(idx2); + std::string stop_datetime(poFeature->GetFieldAsString(15)); + + CPLDebug("STATION_FETCH","STATION START TIME: %s",start_datetime.c_str()); + CPLDebug("STATION_FETCH","STATION END TIME: %s",stop_datetime.c_str()); + + if (start_datetime.empty()==true && stop_datetime.empty()==true) + { + //Means that there is not a time series + CPLDebug("STATION_FETCH", "File cannot be used for Time Series"); + instant = 1; + } + if (start_datetime.empty()==false && stop_datetime.empty()==false) //Definately some sort of time series + { + CPLDebug("STATION_FETCH","File can be used for Times Series"); + CPLDebug("STATION_FETCH","Suggesting Potentially Reasonable Time Series Parameters..."); + + QString q_time_format = "yyyy-MM-ddTHH:mm:ssZ"; + QString start_utcX = QString::fromStdString(start_datetime); + QString end_utcX = QString::fromStdString(stop_datetime); + + QDateTime start_qat = QDateTime::fromString(start_utcX,q_time_format); + QDateTime end_qat = QDateTime::fromString(end_utcX,q_time_format); + + start_qat.setTimeSpec(Qt::UTC); + end_qat.setTimeSpec(Qt::UTC); + + //readStationTime(start_datetime,stop_datetime,idx2); //Turns the Start and Stop times into local timess...... + ssidx<pointInitializationDataTimeStackedWidget->setCurrentIndex(0); + ui->weatherStationDataStartDateTimeEdit->setDateTime(ui->downloadBetweenDatesStartTimeDateTimeEdit->dateTime()); + ui->weatherStationDataEndDateTimeEdit->setDateTime(ui->downloadBetweenDatesEndTimeDateTimeEdit->dateTime()); + } + + + if(stationHeader == 2 && instant == 1) + { + ui->pointInitializationDataTimeStackedWidget->setCurrentIndex(1); + QDateTime time = QFileInfo(xFileName).birthTime(); + //updateSingleTime() + QString text = "Simulation time set to: " + time.toString(); + ui->weatherStationDataTextEdit->setText(text); + + } } diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index 688d109bd..095e1e92d 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -33,6 +33,8 @@ #include "appstate.h" #include "../ninja/windninja.h" #include "ui_mainwindow.h" +#include "../ninja/gdal_util.h" +#include "cpl_config.h" #include #include #include diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 3cee8f117..7ba55affc 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -396,6 +396,16 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationFromBBox(const int* yearList, cons wxStation::SetStationFormat(wxStation::newFormat); + if(!fetchLatestFlag) + { + boost::local_time::time_zone_ptr tz(new boost::local_time::posix_time_zone(timeZone)); + + boost::local_time::local_date_time start(timeList[0], tz); + boost::local_time::local_date_time stop(timeList[1], tz); + + pointInitialization::setLocalStartAndStopTimes(start, stop); + } + //Generate a directory to store downloaded station data std::string stationPathName = pointInitialization::generatePointDirectory(std::string(elevationFile), std::string(outputPath), fetchLatestFlag); pointInitialization::SetRawStationFilename(stationPathName); @@ -451,6 +461,16 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationByName(const int* yearList, const wxStation::SetStationFormat(wxStation::newFormat); + if(!fetchLatestFlag) + { + boost::local_time::time_zone_ptr tz(new boost::local_time::posix_time_zone(timeZone)); + + boost::local_time::local_date_time start(timeList[0], tz); + boost::local_time::local_date_time stop(timeList[1], tz); + + pointInitialization::setLocalStartAndStopTimes(start, stop); + } + //Generate a directory to store downloaded station data std::string stationPathName = pointInitialization::generatePointDirectory(std::string(elevationFile), std::string(outputPath), fetchLatestFlag); pointInitialization::SetRawStationFilename(stationPathName); @@ -2106,4 +2126,12 @@ WINDNINJADLL_EXPORT NinjaErr NinjaCancelAndReset( NinjaArmyH * army, char ** pap } } +/*----------------------------------------------------------------------------- +* Helper Methods +*-----------------------------------------------------------------------------*/ +WINDNINJADLL_EXPORT int NinjaGetHeaderVersion(const char * filePath, char ** papszOptions) +{ + return wxStation::GetHeaderVersion(filePath); +} + } diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index f3f4c03e5..63d1e8d0b 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -341,4 +341,9 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaCancel( NinjaArmyH * ninjaArmy, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaCancelAndReset( NinjaArmyH * ninjaArmy, char ** options ); + /*----------------------------------------------------------------------------- + * Helper Methods + *-----------------------------------------------------------------------------*/ + WINDNINJADLL_EXPORT int NinjaGetHeaderVersion(const char * filePath, char ** papszOptions); + WN_C_END From 27b9de02bfb8b957f7e46a7c62b71360c167cbac Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 12 Aug 2025 16:33:40 -0600 Subject: [PATCH 165/435] added tutorial opening in the menuBar, for issue #638 --- src/gui/menubar.cpp | 107 +++++++++++++++++++++++++++++++++++++------- src/gui/menubar.h | 5 +++ 2 files changed, 96 insertions(+), 16 deletions(-) diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp index 36ccc80cc..b6b8759b9 100755 --- a/src/gui/menubar.cpp +++ b/src/gui/menubar.cpp @@ -33,6 +33,9 @@ MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) : QObject(parent), ui(ui) { + QString dataFolder = QString::fromUtf8(CPLGetConfigOption("WINDNINJA_DATA", "")); + dataPath = QDir(dataFolder); + // QMenu fileMenu "File" actions connect(ui->newProjectAction, &QAction::triggered, this, &MenuBar::newProject); connect(ui->openProjectAction, &QAction::triggered, this, &MenuBar::openProject); @@ -129,50 +132,122 @@ void MenuBar::setConfigurationOption() void MenuBar::displayArcGISProGuide() { - qDebug() << "MenuBar: displayArcGISProGuide() triggered"; - ui->consoleTextEdit->append("MenuBar: displayArcGISProGuide() triggered"); + QString displayFile = dataPath.absoluteFilePath("../doc/displaying_wind_vectors_in_ArcGIS_Pro.pdf"); + displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path + qDebug() << "Opening" << displayFile; + ui->consoleTextEdit->append("Opening " + displayFile); + + if(!QDesktopServices::openUrl(QUrl(displayFile))) + { + QMessageBox::warning(ui->centralwidget, tr("Broken Link."), + tr("The link to the tutorial is broken, you can get to it through the Start Menu."), + QMessageBox::Ok); + } } void MenuBar::displayTutorial1() { - qDebug() << "MenuBar: displayTutorial1() triggered"; - ui->consoleTextEdit->append("MenuBar: displayTutorial1() triggered"); + QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial1.pdf"); + displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path + qDebug() << "Opening" << displayFile; + ui->consoleTextEdit->append("Opening " + displayFile); + + if(!QDesktopServices::openUrl(QUrl(displayFile))) + { + QMessageBox::warning(ui->centralwidget, tr("Broken Link."), + tr("The link to the tutorial is broken, you can get to it through the Start Menu."), + QMessageBox::Ok); + } } void MenuBar::displayTutorial2() { - qDebug() << "MenuBar: displayTutorial2() triggered"; - ui->consoleTextEdit->append("MenuBar: displayTutorial2() triggered"); + QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial2.pdf"); + displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path + qDebug() << "Opening" << displayFile; + ui->consoleTextEdit->append("Opening " + displayFile); + + if(!QDesktopServices::openUrl(QUrl(displayFile))) + { + QMessageBox::warning(ui->centralwidget, tr("Broken Link."), + tr("The link to the tutorial is broken, you can get to it through the Start Menu."), + QMessageBox::Ok); + } } void MenuBar::displayTutorial3() { - qDebug() << "MenuBar: displayTutorial3() triggered"; - ui->consoleTextEdit->append("MenuBar: displayTutorial3() triggered"); + QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial3.pdf"); + displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path + qDebug() << "Opening" << displayFile; + ui->consoleTextEdit->append("Opening " + displayFile); + + if(!QDesktopServices::openUrl(QUrl(displayFile))) + { + QMessageBox::warning(ui->centralwidget, tr("Broken Link."), + tr("The link to the tutorial is broken, you can get to it through the Start Menu."), + QMessageBox::Ok); + } } void MenuBar::displayTutorial4() { - qDebug() << "MenuBar: displayTutorial4() triggered"; - ui->consoleTextEdit->append("MenuBar: displayTutorial4() triggered"); + QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial4.pdf"); + displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path + qDebug() << "Opening" << displayFile; + ui->consoleTextEdit->append("Opening " + displayFile); + + if(!QDesktopServices::openUrl(QUrl(displayFile))) + { + QMessageBox::warning(ui->centralwidget, tr("Broken Link."), + tr("The link to the tutorial is broken, you can get to it through the Start Menu."), + QMessageBox::Ok); + } } void MenuBar::displayDemDownloadInstructions() { - qDebug() << "MenuBar: displayDemDownloadInstructions() triggered"; - ui->consoleTextEdit->append("MenuBar: displayDemDownloadInstructions() triggered"); + QString displayFile = dataPath.absoluteFilePath("../doc/download_elevation_file.pdf"); + displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path + qDebug() << "Opening" << displayFile; + ui->consoleTextEdit->append("Opening " + displayFile); + + if(!QDesktopServices::openUrl(QUrl(displayFile))) + { + QMessageBox::warning(ui->centralwidget, tr("Broken Link."), + tr("The link to the tutorial is broken, you can get to it through the Start Menu."), + QMessageBox::Ok); + } } void MenuBar::displayFetchDemInstructions() { - qDebug() << "MenuBar: displayFetchDemInstructions() triggered"; - ui->consoleTextEdit->append("MenuBar: displayFetchDemInstructions() triggered"); + QString displayFile = dataPath.absoluteFilePath("../doc/fetch_dem_instructions.pdf"); + displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path + qDebug() << "Opening" << displayFile; + ui->consoleTextEdit->append("Opening " + displayFile); + + if(!QDesktopServices::openUrl(QUrl(displayFile))) + { + QMessageBox::warning(ui->centralwidget, tr("Broken Link."), + tr("The link to the tutorial is broken, you can get to it through the Start Menu."), + QMessageBox::Ok); + } } void MenuBar::displayCommandLineInterfaceInstructions() { - qDebug() << "MenuBar: displayCommandLineInterfaceInstructions() triggered"; - ui->consoleTextEdit->append("MenuBar: displayCommandLineInterfaceInstructions() triggered"); + QString displayFile = dataPath.absoluteFilePath("../doc/CLI_instructions.pdf"); + displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path + qDebug() << "Opening" << displayFile; + ui->consoleTextEdit->append("Opening " + displayFile); + + if(!QDesktopServices::openUrl(QUrl(displayFile))) + { + QMessageBox::warning(ui->centralwidget, tr("Broken Link."), + tr("The link to the tutorial is broken, you can get to it through the Start Menu."), + QMessageBox::Ok); + } } void MenuBar::aboutWindNinja() diff --git a/src/gui/menubar.h b/src/gui/menubar.h index 9612584e3..94ed34c50 100644 --- a/src/gui/menubar.h +++ b/src/gui/menubar.h @@ -30,7 +30,11 @@ #ifndef MENUBAR_H #define MENUBAR_H +#include "../ninja/gdal_util.h" #include +#include +#include +#include namespace Ui { class MainWindow; @@ -80,6 +84,7 @@ private slots: private: Ui::MainWindow* ui; + QDir dataPath; }; #endif // MENUBAR_H From 739987314d91d0c4d99d237724b7b88422970530 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 12 Aug 2025 17:30:20 -0600 Subject: [PATCH 166/435] setup the enableConsoleOutput action menuBar, for issue #638 --- src/gui/mainwindow.ui | 6 ++++++ src/gui/menubar.cpp | 9 ++------- src/gui/menubar.h | 1 - 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index f468bba75..8eb4130e2 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -4576,6 +4576,12 @@ QMenu::item:selected { + + true + + + true + Enable Console Output diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp index b6b8759b9..a601655ce 100755 --- a/src/gui/menubar.cpp +++ b/src/gui/menubar.cpp @@ -45,7 +45,8 @@ MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QCoreApplication::quit); // exit the entire app // QMenu optionsMenu "Options" actions - connect(ui->enableConsoleOutputAction, &QAction::triggered, this, &MenuBar::enableConsoleOutput); + connect(ui->enableConsoleOutputAction, &QAction::toggled, ui->consoleDockWidget, &QDockWidget::setVisible); + connect(ui->consoleDockWidget, &QDockWidget::visibilityChanged, ui->enableConsoleOutputAction, &QAction::setChecked); // if closed from the QDockWidget itself, unchecks the menuAction connect(ui->writeConsoleOutputAction, &QAction::triggered, this, &MenuBar::writeConsoleOutput); // QMenu toolsMenu "Tools" actions @@ -100,12 +101,6 @@ void MenuBar::closeProject() ui->consoleTextEdit->append("MenuBar: closeProject() triggered"); } -void MenuBar::enableConsoleOutput() -{ - qDebug() << "MenuBar: enableConsoleOutput() triggered"; - ui->consoleTextEdit->append("MenuBar: enableConsoleOutput() triggered"); -} - void MenuBar::writeConsoleOutput() { qDebug() << "MenuBar: writeConsoleOutput() triggered"; diff --git a/src/gui/menubar.h b/src/gui/menubar.h index 94ed34c50..53c356061 100644 --- a/src/gui/menubar.h +++ b/src/gui/menubar.h @@ -58,7 +58,6 @@ private slots: void exportSolution(); void closeProject(); // functions for QMenu optionsMenu "Options" actions - void enableConsoleOutput(); void writeConsoleOutput(); // functions for QMenu toolsMenu "Tools" actions void resampleData(); From 831871f1e2da414be95f8d5eb67efab391d374af Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 13 Aug 2025 11:32:40 -0600 Subject: [PATCH 167/435] Cleaned up implementation for reading station files and removed hard coded path for dynamic file paths based on selection, for #636 --- src/gui/pointinitializationinput.cpp | 123 +++++++++++---------------- src/gui/pointinitializationinput.h | 2 +- 2 files changed, 52 insertions(+), 73 deletions(-) diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 1e775fbdb..60e2abc24 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -213,25 +213,25 @@ void PointInitializationInput::weatherStationDataTimeComboBoxCurrentIndexChanged void PointInitializationInput::pointInitialziationRefreshButtonClicked() { - QFileSystemModel *model = new QFileSystemModel; + stationFileSystemModel = new QFileSystemModel; QString path = ui->elevationInputFileLineEdit->property("fullpath").toString(); if(path.isEmpty()) { - delete model; + delete stationFileSystemModel; return; } QFileInfo fileInfo(path); - model->setRootPath(fileInfo.absolutePath()); + stationFileSystemModel->setRootPath(fileInfo.absolutePath()); QStringList filters; filters<<"*.csv"; filters<<"WXSTATIONS-*"; - model->setNameFilters(filters); - model->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); - model->setNameFilterDisables(false); + stationFileSystemModel->setNameFilters(filters); + stationFileSystemModel->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); + stationFileSystemModel->setNameFilterDisables(false); - ui->pointInitializationTreeView->setModel(model); - ui->pointInitializationTreeView->setRootIndex(model->index(fileInfo.absolutePath())); + ui->pointInitializationTreeView->setModel(stationFileSystemModel); + ui->pointInitializationTreeView->setRootIndex(stationFileSystemModel->index(fileInfo.absolutePath())); ui->pointInitializationTreeView->header()->setSectionResizeMode(QHeaderView::Stretch); ui->pointInitializationTreeView->header()->setSectionResizeMode(0, QHeaderView::Stretch); ui->pointInitializationTreeView->header()->setSectionResizeMode(3, QHeaderView::ResizeToContents); @@ -244,79 +244,59 @@ void PointInitializationInput::pointInitialziationRefreshButtonClicked() void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() { - const char* xFileName = "/home/mason/Downloads/testfolder/WXSTATIONS-2025-08-10-1537-2025-08-11-1537-test/CBFI1-2025-08-10_1537-2025-08-11_1537-1.csv"; + QModelIndexList selectedIndexes = ui->pointInitializationTreeView->selectionModel()->selectedIndexes(); + QModelIndex index = selectedIndexes.first(); + if (index.column() != 0) + index = index.sibling(index.row(), 0); + + QString recentFileSelected = stationFileSystemModel->filePath(index); + qDebug() << "Selected file path:" << recentFileSelected; + + QByteArray filePathBytes = recentFileSelected.toUtf8(); + const char* filePath = filePathBytes.constData(); char** papszOptions = nullptr; - int stationHeader = NinjaGetHeaderVersion(xFileName, papszOptions); - int instant = 0; - qDebug() << "Station Header is: " << stationHeader; - std::string idx3; - stringstream ssidx; + int stationHeader = NinjaGetHeaderVersion(filePath, papszOptions); + qDebug() << "[STATION_FETCH] STATION HEADER: " << stationHeader; - if(stationHeader != 1) + bool timeSeriesFlag = true; + if (stationHeader != 1) { - OGRDataSourceH hDS; - OGRLayer *poLayer; - OGRFeature *poFeature; - OGRFeatureDefn *poFeatureDefn; - OGRFieldDefn *poFieldDefn; - OGRLayerH hLayer; - - hDS = OGROpen( xFileName, FALSE, NULL ); - - poLayer = (OGRLayer*)OGR_DS_GetLayer( hDS, 0 ); - hLayer=OGR_DS_GetLayer(hDS,0); - OGR_L_ResetReading(hLayer); + GDALDataset* hDS = (GDALDataset*) GDALOpenEx( + filePath, + GDAL_OF_VECTOR | GDAL_OF_READONLY, + NULL, + NULL, + NULL + ); + + OGRLayer* poLayer = hDS->GetLayer(0); poLayer->ResetReading(); + qint64 lastIndex = poLayer->GetFeatureCount(); + qDebug() << "[STATION_FETCH] Number of Time Entries:" << lastIndex; - GIntBig iBig = 1; - GIntBig idx0 = poLayer->GetFeatureCount(); - GIntBig idx1 = idx0-iBig; - GIntBig idx2; - - idx2 = poLayer->GetFeatureCount(); - - CPLDebug("STATION_FETCH","Number of Time Entries: %llu",idx2); //How many lines are on disk - QString qFileName = QFileInfo(xFileName).fileName(); - const char* emptyChair; //Muy Importante! - - poFeature = poLayer->GetFeature(iBig); - - // startTime = poFeature->GetFieldAsString(15); - std::string start_datetime(poFeature->GetFieldAsString(15)); - poFeature = poLayer->GetFeature(idx2); - std::string stop_datetime(poFeature->GetFieldAsString(15)); + OGRFeature* poFeature = poLayer->GetFeature(1); // Skip header, first time in series + QString startDateTime(poFeature->GetFieldAsString(15)); // Time should be in 15th column (0-15) + qDebug() << "[STATION_FETCH] STATION START TIME:" << startDateTime; - CPLDebug("STATION_FETCH","STATION START TIME: %s",start_datetime.c_str()); - CPLDebug("STATION_FETCH","STATION END TIME: %s",stop_datetime.c_str()); + poFeature = poLayer->GetFeature(lastIndex); // last time in series + QString stopDateTime(poFeature->GetFieldAsString(15)); + qDebug() << "[STATION_FETCH] STATION END TIME:" << stopDateTime; - if (start_datetime.empty()==true && stop_datetime.empty()==true) + if (startDateTime.isEmpty() && stopDateTime.isEmpty()) // No time series { - //Means that there is not a time series - CPLDebug("STATION_FETCH", "File cannot be used for Time Series"); - instant = 1; + qDebug() << "[STATION_FETCH] File cannot be used for Time Series"; + timeSeriesFlag = false; } - if (start_datetime.empty()==false && stop_datetime.empty()==false) //Definately some sort of time series + else if (!startDateTime.isEmpty() && !stopDateTime.isEmpty()) // Some type of time series { - CPLDebug("STATION_FETCH","File can be used for Times Series"); - CPLDebug("STATION_FETCH","Suggesting Potentially Reasonable Time Series Parameters..."); + qDebug() << "[STATION_FETCH] File can be used for Time Series, suggesting time series parameters..."; - QString q_time_format = "yyyy-MM-ddTHH:mm:ssZ"; - QString start_utcX = QString::fromStdString(start_datetime); - QString end_utcX = QString::fromStdString(stop_datetime); - - QDateTime start_qat = QDateTime::fromString(start_utcX,q_time_format); - QDateTime end_qat = QDateTime::fromString(end_utcX,q_time_format); - - start_qat.setTimeSpec(Qt::UTC); - end_qat.setTimeSpec(Qt::UTC); - - //readStationTime(start_datetime,stop_datetime,idx2); //Turns the Start and Stop times into local timess...... - ssidx<pointInitializationDataTimeStackedWidget->setCurrentIndex(0); ui->weatherStationDataStartDateTimeEdit->setDateTime(ui->downloadBetweenDatesStartTimeDateTimeEdit->dateTime()); @@ -324,14 +304,13 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() } - if(stationHeader == 2 && instant == 1) + if(stationHeader == 2 && !timeSeriesFlag) { ui->pointInitializationDataTimeStackedWidget->setCurrentIndex(1); - QDateTime time = QFileInfo(xFileName).birthTime(); + QDateTime dateModified = QFileInfo(recentFileSelected).birthTime(); //updateSingleTime() - QString text = "Simulation time set to: " + time.toString(); - ui->weatherStationDataTextEdit->setText(text); - + QString simulationTimeText = "Simulation time set to: " + dateModified.toString(); + ui->weatherStationDataTextEdit->setText(simulationTimeText); } } diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index 095e1e92d..b1558cbf0 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -72,7 +72,7 @@ private slots: QProgressDialog *progress; QFutureWatcher *futureWatcher; - + QFileSystemModel *stationFileSystemModel; QString currentDEMFilePath; static int fetchStationFromBbox(QVector year, From 4b82e2a03faa61fafcef202d000831a3d3ea703e Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 13 Aug 2025 12:00:22 -0600 Subject: [PATCH 168/435] Added functions to read the Station time and display as local time and a function to calculate the time steps of a time series file, for #636 --- src/gui/pointinitializationinput.cpp | 65 +++++++++++++++++++++++----- src/gui/pointinitializationinput.h | 3 +- 2 files changed, 55 insertions(+), 13 deletions(-) diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 60e2abc24..40e096c8b 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -250,13 +250,13 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() index = index.sibling(index.row(), 0); QString recentFileSelected = stationFileSystemModel->filePath(index); - qDebug() << "Selected file path:" << recentFileSelected; + qDebug() << "[STATION FETCH] Selected file path:" << recentFileSelected; QByteArray filePathBytes = recentFileSelected.toUtf8(); const char* filePath = filePathBytes.constData(); char** papszOptions = nullptr; int stationHeader = NinjaGetHeaderVersion(filePath, papszOptions); - qDebug() << "[STATION_FETCH] STATION HEADER: " << stationHeader; + qDebug() << "[STATION FETCH] Station Header: " << stationHeader; bool timeSeriesFlag = true; if (stationHeader != 1) @@ -272,26 +272,25 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() OGRLayer* poLayer = hDS->GetLayer(0); poLayer->ResetReading(); qint64 lastIndex = poLayer->GetFeatureCount(); - qDebug() << "[STATION_FETCH] Number of Time Entries:" << lastIndex; + qDebug() << "[STATION FETCH] Number of Time Entries:" << lastIndex; OGRFeature* poFeature = poLayer->GetFeature(1); // Skip header, first time in series - QString startDateTime(poFeature->GetFieldAsString(15)); // Time should be in 15th column (0-15) - qDebug() << "[STATION_FETCH] STATION START TIME:" << startDateTime; + QString startDateTime(poFeature->GetFieldAsString(15)); // Time should be in 15th column (0-14) + qDebug() << "[STATION FETCH] Station start time:" << startDateTime; poFeature = poLayer->GetFeature(lastIndex); // last time in series QString stopDateTime(poFeature->GetFieldAsString(15)); - qDebug() << "[STATION_FETCH] STATION END TIME:" << stopDateTime; + qDebug() << "[STATION FETCH] Station end Time:" << stopDateTime; if (startDateTime.isEmpty() && stopDateTime.isEmpty()) // No time series { - qDebug() << "[STATION_FETCH] File cannot be used for Time Series"; + qDebug() << "[STATION FETCH] File cannot be used for Time Series"; timeSeriesFlag = false; } else if (!startDateTime.isEmpty() && !stopDateTime.isEmpty()) // Some type of time series { - qDebug() << "[STATION_FETCH] File can be used for Time Series, suggesting time series parameters..."; - - // readStationTime(start_datetime, stop_datetime, idx2); + qDebug() << "[STATION FETCH] File can be used for Time Series, suggesting time series parameters..."; + readStationTime(startDateTime, stopDateTime); } } @@ -299,8 +298,6 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() if(stationHeader == 2 && timeSeriesFlag) { ui->pointInitializationDataTimeStackedWidget->setCurrentIndex(0); - ui->weatherStationDataStartDateTimeEdit->setDateTime(ui->downloadBetweenDatesStartTimeDateTimeEdit->dateTime()); - ui->weatherStationDataEndDateTimeEdit->setDateTime(ui->downloadBetweenDatesEndTimeDateTimeEdit->dateTime()); } @@ -312,5 +309,49 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() QString simulationTimeText = "Simulation time set to: " + dateModified.toString(); ui->weatherStationDataTextEdit->setText(simulationTimeText); } +} + +void PointInitializationInput::readStationTime(QString startDateTime, QString stopDateTime) +{ + QString stationTimeFormat = "yyyy-MM-ddTHH:mm:ssZ"; + + QDateTime startTimeUTC = QDateTime::fromString(startDateTime, stationTimeFormat); + QDateTime endTimeUTC = QDateTime::fromString(stopDateTime, stationTimeFormat); + startTimeUTC.setTimeSpec(Qt::UTC); + endTimeUTC.setTimeSpec(Qt::UTC); + + QDateTime startTimeLocal = startTimeUTC.toLocalTime(); + QDateTime endTimeLocal = endTimeUTC.toLocalTime(); + qDebug() << "[STATION FETCH] Start Time (local):" << startTimeLocal.toString(); + qDebug() << "[STATION FETCH] Stop Time (local):" << endTimeLocal.toString(); + + ui->weatherStationDataStartDateTimeEdit->setDateTime(startTimeLocal); + ui->weatherStationDataEndDateTimeEdit->setDateTime(endTimeLocal); + + updateTimeSteps(); +} + +void PointInitializationInput::updateTimeSteps() +{ + qDebug() << "[STATION FETCH] Updating Suggested Time steps..."; + + QDateTime start = ui->weatherStationDataStartDateTimeEdit->dateTime(); + QDateTime stop = ui->weatherStationDataEndDateTimeEdit->dateTime(); + + qint64 diffSecs = start.secsTo(stop); // difference in seconds + + int timesteps; + if (diffSecs <= 0) + { + timesteps = 1; + } + else + { + timesteps = static_cast(diffSecs / 3600); // convert seconds to hours + if (timesteps < 2) + timesteps = 2; + } + qDebug() << "[STATION FETCH] Suggested Timesteps:" << timesteps; + ui->weatherStationDataTimestepsSpinBox->setValue(timesteps); } diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index b1558cbf0..53f1e2728 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -34,7 +34,6 @@ #include "../ninja/windninja.h" #include "ui_mainwindow.h" #include "../ninja/gdal_util.h" -#include "cpl_config.h" #include #include #include @@ -97,6 +96,8 @@ private slots: bool fetchLatestFlag, QString outputPath); void fetchStationDataFinished(); + void readStationTime(QString startDateTime, QString stopDateTime); + void updateTimeSteps(); }; From 8d0fce1927d0121637fbc6cf4458ac0b9e7f0668 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 13 Aug 2025 14:21:56 -0600 Subject: [PATCH 169/435] Simplified function to update time steps and fixed time calculations to be based on time zone combobox, for #636 --- src/gui/pointinitializationinput.cpp | 70 ++++++++++++---------------- 1 file changed, 31 insertions(+), 39 deletions(-) diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 40e096c8b..58e453e75 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -294,64 +294,56 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() } } - - if(stationHeader == 2 && timeSeriesFlag) + if (stationHeader == 2) { - ui->pointInitializationDataTimeStackedWidget->setCurrentIndex(0); - } - + ui->pointInitializationDataTimeStackedWidget->setCurrentIndex(timeSeriesFlag ? 0 : 1); - if(stationHeader == 2 && !timeSeriesFlag) - { - ui->pointInitializationDataTimeStackedWidget->setCurrentIndex(1); - QDateTime dateModified = QFileInfo(recentFileSelected).birthTime(); - //updateSingleTime() - QString simulationTimeText = "Simulation time set to: " + dateModified.toString(); - ui->weatherStationDataTextEdit->setText(simulationTimeText); + if (!timeSeriesFlag) + { + QDateTime dateModified = QFileInfo(recentFileSelected).birthTime(); + //updateSingleTime() + ui->weatherStationDataTextEdit->setText("Simulation time set to: " + dateModified.toString()); + } } } void PointInitializationInput::readStationTime(QString startDateTime, QString stopDateTime) { QString stationTimeFormat = "yyyy-MM-ddTHH:mm:ssZ"; + QString DEMTimeZone = ui->timeZoneComboBox->currentText(); + + QTimeZone timeZone(DEMTimeZone.toUtf8()); + if (!timeZone.isValid()) { + qWarning() << "[STATION FETCH] Invalid time zone:" << DEMTimeZone; + timeZone = QTimeZone::systemTimeZone(); + } QDateTime startTimeUTC = QDateTime::fromString(startDateTime, stationTimeFormat); - QDateTime endTimeUTC = QDateTime::fromString(stopDateTime, stationTimeFormat); + QDateTime endTimeUTC = QDateTime::fromString(stopDateTime, stationTimeFormat); startTimeUTC.setTimeSpec(Qt::UTC); endTimeUTC.setTimeSpec(Qt::UTC); - QDateTime startTimeLocal = startTimeUTC.toLocalTime(); - QDateTime endTimeLocal = endTimeUTC.toLocalTime(); - qDebug() << "[STATION FETCH] Start Time (local):" << startTimeLocal.toString(); - qDebug() << "[STATION FETCH] Stop Time (local):" << endTimeLocal.toString(); + QDateTime startTimeDEMTimeZone = startTimeUTC.toTimeZone(timeZone); + QDateTime endTimeDEMTimeZone = endTimeUTC.toTimeZone(timeZone); - ui->weatherStationDataStartDateTimeEdit->setDateTime(startTimeLocal); - ui->weatherStationDataEndDateTimeEdit->setDateTime(endTimeLocal); + qDebug() << "[STATION FETCH] Start Time (" << DEMTimeZone << "):" << startTimeDEMTimeZone.toString(); + qDebug() << "[STATION FETCH] Stop Time (" << DEMTimeZone << "):" << endTimeDEMTimeZone.toString(); + + ui->weatherStationDataStartTimeLabel->setText("Start Time (" + DEMTimeZone + "):"); + ui->weatherStationDataEndTimeLabel->setText("End Time (" + DEMTimeZone + "):"); + ui->weatherStationDataStartDateTimeEdit->setDateTime(startTimeDEMTimeZone); + ui->weatherStationDataEndDateTimeEdit->setDateTime(endTimeDEMTimeZone); updateTimeSteps(); } void PointInitializationInput::updateTimeSteps() { - qDebug() << "[STATION FETCH] Updating Suggested Time steps..."; - - QDateTime start = ui->weatherStationDataStartDateTimeEdit->dateTime(); - QDateTime stop = ui->weatherStationDataEndDateTimeEdit->dateTime(); - - qint64 diffSecs = start.secsTo(stop); // difference in seconds - - int timesteps; - if (diffSecs <= 0) - { - timesteps = 1; - } - else - { - timesteps = static_cast(diffSecs / 3600); // convert seconds to hours - if (timesteps < 2) - timesteps = 2; - } - - qDebug() << "[STATION FETCH] Suggested Timesteps:" << timesteps; + int timesteps = qMax(2, static_cast( + ui->weatherStationDataStartDateTimeEdit->dateTime().secsTo( + ui->weatherStationDataEndDateTimeEdit->dateTime() + ) / 3600 + )); ui->weatherStationDataTimestepsSpinBox->setValue(timesteps); + qDebug() << "[STATION FETCH] Suggested Timesteps:" << timesteps; } From a77bc73791acc4da2a3aef2339c9e936efc5f56c Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 13 Aug 2025 17:24:48 -0600 Subject: [PATCH 170/435] added writeConsoleOutput, aboutWindNinja, citeWindNinja, supportEmail, and submitBugReport actions in the menuBar, for issue #638 --- src/gui/menubar.cpp | 73 ++++++++++++++++++++++++++++++++++++++------- src/gui/menubar.h | 2 ++ 2 files changed, 65 insertions(+), 10 deletions(-) diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp index a601655ce..3f59ad354 100755 --- a/src/gui/menubar.cpp +++ b/src/gui/menubar.cpp @@ -103,8 +103,22 @@ void MenuBar::closeProject() void MenuBar::writeConsoleOutput() { - qDebug() << "MenuBar: writeConsoleOutput() triggered"; - ui->consoleTextEdit->append("MenuBar: writeConsoleOutput() triggered"); + QString fileName = QFileDialog::getSaveFileName(ui->centralwidget, + tr("Save Console Output"), + "console-output.txt", + tr("Text Files (*.txt)")); + + if(!fileName.isEmpty()) + { + QDateTime currentTime(QDateTime::currentDateTime()); + ui->consoleTextEdit->append("writing WindNinja console output to " + fileName); + ui->consoleTextEdit->append("current time is " + currentTime.toString("MM/dd/yyyy hh:mm:ss t")); + + std::ofstream fout(fileName.toStdString().c_str(), std::ios::out); + QString text = ui->consoleTextEdit->toPlainText(); + fout << text.toStdString(); + fout.close(); + } } void MenuBar::resampleData() @@ -247,24 +261,63 @@ void MenuBar::displayCommandLineInterfaceInstructions() void MenuBar::aboutWindNinja() { - qDebug() << "MenuBar: aboutWindNinja() triggered"; - ui->consoleTextEdit->append("MenuBar: aboutWindNinja() triggered"); + QString aboutText = "

WindNinja

\n"; + + aboutText.append("

Version:

" + QString(NINJA_VERSION_STRING) + "

"); + + aboutText.append("

Git Commit:

" + QString(NINJA_SCM_VERSION) + "

"); + + aboutText.append("

Release Date:

" + QString(NINJA_RELEASE_DATE) + "

"); + + aboutText.append("

Developed by:

Jason Forthofer
" \ + "Natalie Wagenbrenner
" \ + "Kyle Shannon
" \ + "Loren Atwood
" \ + "Mason Willman"); \ + + aboutText.append("

Missoula Fire Sciences Laboratory
"); + aboutText.append("Rocky Mountain Research Station
"); + aboutText.append("USDA Forest Service
"); + aboutText.append("5775 Highway 10 W.
"); + aboutText.append("Missoula, MT 59808

"); + + aboutText.append("

Contributors

"); + aboutText.append("

Sponsored By:

"); + aboutText.append("USDA Forest Service
"); + aboutText.append("Center for Environmental Management of Military Lands at Colorado State University
"); + aboutText.append("Joint Fire Sciences Program
"); + aboutText.append("Washington State University

"); + aboutText.append("

Special Thanks

"); + aboutText.append("
"); + + QMessageBox::about(ui->centralwidget, tr("About WindNinja"), + aboutText); } void MenuBar::citeWindNinja() { - qDebug() << "MenuBar: citeWindNinja() triggered"; - ui->consoleTextEdit->append("MenuBar: citeWindNinja() triggered"); + QString citeText = "

To cite WindNinja in a publication use:

"; + + citeText.append("Forthofer, J.M., Butler, B.W., Wagenbrenner, N.S., 2014. A comparison "); + citeText.append("of three approaches for simulating fine-scale surface winds in "); + citeText.append("support of wildland fire management. Part I. Model formulation and "); + citeText.append("comparison against measurements. International Journal of Wildland "); + citeText.append("Fire, 23:969-931. doi: 10.1071/WF12089."); + + citeText.append("

For additional WindNinja publications visit:

"); + + citeText.append("

https://ninjastorm.firelab.org/windninja/publications

"); + + QMessageBox::about(ui->centralwidget, tr("Cite WindNinja"), + citeText); } void MenuBar::supportEmail() { - qDebug() << "MenuBar: supportEmail() triggered"; - ui->consoleTextEdit->append("MenuBar: supportEmail() triggered"); + QDesktopServices::openUrl(QUrl("mailto:wind.ninja.support@gmail.com?subject=[windninja-support]")); } void MenuBar::submitBugReport() { - qDebug() << "MenuBar: submitBugReport() triggered"; - ui->consoleTextEdit->append("MenuBar: submitBugReport() triggered"); + QDesktopServices::openUrl(QUrl("https://github.com/firelab/windninja/issues/new")); } diff --git a/src/gui/menubar.h b/src/gui/menubar.h index 53c356061..013a26991 100644 --- a/src/gui/menubar.h +++ b/src/gui/menubar.h @@ -31,9 +31,11 @@ #define MENUBAR_H #include "../ninja/gdal_util.h" +#include "ninja_version.h" #include #include #include +#include #include namespace Ui { From 5c2a0008301dd2975e6a53312681a340b51e3784 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 14 Aug 2025 12:32:54 -0600 Subject: [PATCH 171/435] added writeBlankStationFile action in the menuBar, which involved C-API calls, for issue #638 --- src/gui/menubar.cpp | 18 ++++++++++++++++-- src/gui/menubar.h | 1 + src/ninja/windninja.cpp | 27 +++++++++++++++++++++++++++ src/ninja/windninja.h | 6 ++++++ 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp index 3f59ad354..12c217032 100755 --- a/src/gui/menubar.cpp +++ b/src/gui/menubar.cpp @@ -129,8 +129,22 @@ void MenuBar::resampleData() void MenuBar::writeBlankStationFile() { - qDebug() << "MenuBar: writeBlankStationFile() triggered"; - ui->consoleTextEdit->append("MenuBar: writeBlankStationFile() triggered"); + QString fileName = QFileDialog::getSaveFileName(ui->centralwidget, + tr("Save Blank Station File"), + "stations.csv", + tr("Text Files (*.csv)")); + + if(!fileName.isEmpty()) + { + ui->consoleTextEdit->append("writing blank station file to " + fileName); + + char** papszOptions = nullptr; + int err = NinjaWriteBlankWxStationFile( fileName.toStdString().c_str(), papszOptions ); + if( err != NINJA_SUCCESS ) + { + ui->consoleTextEdit->append("failed to write blank station file!"); + } + } } void MenuBar::setConfigurationOption() diff --git a/src/gui/menubar.h b/src/gui/menubar.h index 013a26991..da42f6660 100644 --- a/src/gui/menubar.h +++ b/src/gui/menubar.h @@ -30,6 +30,7 @@ #ifndef MENUBAR_H #define MENUBAR_H +#include "windninja.h" #include "../ninja/gdal_util.h" #include "ninja_version.h" #include diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 754dfa636..fd11f20f5 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -2126,3 +2126,30 @@ WINDNINJADLL_EXPORT NinjaErr NinjaCancelAndReset( NinjaArmyH * army, char ** pap } } + +/*----------------------------------------------------------------------------- + * Helper Methods + *-----------------------------------------------------------------------------*/ + +/** + * \brief calls wxStation::writeBlankStationFile(), which writes a weather station csv file with no data, just a header. + * + * \param outputStationFilename A csv file to write a blank weather station file to. + * \param papszOptions options + * + * \return NINJA_SUCCESS on success, non-zero otherwise. + */ +WINDNINJADLL_EXPORT NinjaErr NinjaWriteBlankWxStationFile( const char * outputStationFilename, char ** papszOptions ) +{ + wxStation::writeBlankStationFile(outputStationFilename); + + bool doesOutputFileExist = CPLCheckForFile((char*)outputStationFilename, NULL); + if( doesOutputFileExist ) + { + return NINJA_SUCCESS; + } + else + { + return NINJA_E_NULL_PTR; + } +} diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 218918e17..da2bf301e 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -348,4 +348,10 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaCancel( NinjaArmyH * ninjaArmy, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaCancelAndReset( NinjaArmyH * ninjaArmy, char ** options ); + /*----------------------------------------------------------------------------- + * Helper Methods + *-----------------------------------------------------------------------------*/ + + WINDNINJADLL_EXPORT NinjaErr NinjaWriteBlankWxStationFile( const char * outputStationFilename, char ** papszOptions ); + WN_C_END From 80b50e09f3fbfaba898d10204810260df00810e2 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 14 Aug 2025 17:13:51 -0600 Subject: [PATCH 172/435] Added ability to selected multiple files and made default time edit state match old GUI, for #636 --- src/gui/mainwindow.ui | 32 ++++++- src/gui/pointinitializationinput.cpp | 119 +++++++++++++++------------ 2 files changed, 96 insertions(+), 55 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 8960644c7..d50536707 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -557,7 +557,7 @@ QFrame::Shadow::Sunken - 20 + 10 @@ -1966,7 +1966,7 @@ li.checked::marker { content: "\2612"; } - 1 + 0 @@ -1993,9 +1993,15 @@ li.checked::marker { content: "\2612"; }
+ + false + PointingHandCursor + + M/d/yy h:mm + true @@ -2003,13 +2009,33 @@ li.checked::marker { content: "\2612"; } + + false + + + + 0 + 0 + 0 + 2000 + 1 + 1 + + + + M/d/yy h:mm + true - + + + false + +
diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 58e453e75..3197dec27 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -43,6 +43,9 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* ui->weatherStationDataDownloadCancelButton->setIcon(QIcon(":/cancel.png")); ui->downloadBetweenDatesStartTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); ui->downloadBetweenDatesEndTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); + ui->weatherStationDataStartDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); + ui->weatherStationDataEndDateTimeEdit->setDateTime(QDateTime::currentDateTime()); + ui->weatherStationDataTimestepsSpinBox->setValue(24); connect(ui->pointInitializationGroupBox, &QGroupBox::toggled, this, &PointInitializationInput::pointInitializationGroupBoxToggled); connect(ui->pointInitializationDownloadDataButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitializationDownloadDataButtonClicked); @@ -232,6 +235,9 @@ void PointInitializationInput::pointInitialziationRefreshButtonClicked() ui->pointInitializationTreeView->setModel(stationFileSystemModel); ui->pointInitializationTreeView->setRootIndex(stationFileSystemModel->index(fileInfo.absolutePath())); + ui->pointInitializationTreeView->setSelectionMode(QAbstractItemView::MultiSelection); + ui->pointInitializationTreeView->setSelectionBehavior(QAbstractItemView::SelectRows); + ui->pointInitializationTreeView->setAnimated(true); ui->pointInitializationTreeView->header()->setSectionResizeMode(QHeaderView::Stretch); ui->pointInitializationTreeView->header()->setSectionResizeMode(0, QHeaderView::Stretch); ui->pointInitializationTreeView->header()->setSectionResizeMode(3, QHeaderView::ResizeToContents); @@ -244,65 +250,71 @@ void PointInitializationInput::pointInitialziationRefreshButtonClicked() void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() { - QModelIndexList selectedIndexes = ui->pointInitializationTreeView->selectionModel()->selectedIndexes(); - QModelIndex index = selectedIndexes.first(); - if (index.column() != 0) - index = index.sibling(index.row(), 0); - - QString recentFileSelected = stationFileSystemModel->filePath(index); - qDebug() << "[STATION FETCH] Selected file path:" << recentFileSelected; - - QByteArray filePathBytes = recentFileSelected.toUtf8(); - const char* filePath = filePathBytes.constData(); - char** papszOptions = nullptr; - int stationHeader = NinjaGetHeaderVersion(filePath, papszOptions); - qDebug() << "[STATION FETCH] Station Header: " << stationHeader; - - bool timeSeriesFlag = true; - if (stationHeader != 1) + QModelIndexList selectedRows = ui->pointInitializationTreeView->selectionModel()->selectedRows(); + + for(int i = 0; i < selectedRows.count(); i++) { - GDALDataset* hDS = (GDALDataset*) GDALOpenEx( - filePath, - GDAL_OF_VECTOR | GDAL_OF_READONLY, - NULL, - NULL, - NULL - ); - - OGRLayer* poLayer = hDS->GetLayer(0); - poLayer->ResetReading(); - qint64 lastIndex = poLayer->GetFeatureCount(); - qDebug() << "[STATION FETCH] Number of Time Entries:" << lastIndex; - - OGRFeature* poFeature = poLayer->GetFeature(1); // Skip header, first time in series - QString startDateTime(poFeature->GetFieldAsString(15)); // Time should be in 15th column (0-14) - qDebug() << "[STATION FETCH] Station start time:" << startDateTime; - - poFeature = poLayer->GetFeature(lastIndex); // last time in series - QString stopDateTime(poFeature->GetFieldAsString(15)); - qDebug() << "[STATION FETCH] Station end Time:" << stopDateTime; - - if (startDateTime.isEmpty() && stopDateTime.isEmpty()) // No time series + if(stationFileSystemModel->isDir(selectedRows[i])) { - qDebug() << "[STATION FETCH] File cannot be used for Time Series"; - timeSeriesFlag = false; + ui->pointInitializationTreeView->selectionModel()->select(selectedRows[i], QItemSelectionModel::Deselect | QItemSelectionModel::Rows); + return; } - else if (!startDateTime.isEmpty() && !stopDateTime.isEmpty()) // Some type of time series + + QString recentFileSelected = stationFileSystemModel->filePath(selectedRows[i]); + qDebug() << "[STATION FETCH] Selected file path:" << recentFileSelected; + + QByteArray filePathBytes = recentFileSelected.toUtf8(); + const char* filePath = filePathBytes.constData(); + char** papszOptions = nullptr; + int stationHeader = NinjaGetHeaderVersion(filePath, papszOptions); + qDebug() << "[STATION FETCH] Station Header: " << stationHeader; + + bool timeSeriesFlag = true; + if (stationHeader != 1) { - qDebug() << "[STATION FETCH] File can be used for Time Series, suggesting time series parameters..."; - readStationTime(startDateTime, stopDateTime); + GDALDataset* hDS = (GDALDataset*) GDALOpenEx( + filePath, + GDAL_OF_VECTOR | GDAL_OF_READONLY, + NULL, + NULL, + NULL + ); + + OGRLayer* poLayer = hDS->GetLayer(0); + poLayer->ResetReading(); + qint64 lastIndex = poLayer->GetFeatureCount(); + qDebug() << "[STATION FETCH] Number of Time Entries:" << lastIndex; + + OGRFeature* poFeature = poLayer->GetFeature(1); // Skip header, first time in series + QString startDateTime(poFeature->GetFieldAsString(15)); // Time should be in 15th column (0-14) + qDebug() << "[STATION FETCH] Station start time:" << startDateTime; + + poFeature = poLayer->GetFeature(lastIndex); // last time in series + QString stopDateTime(poFeature->GetFieldAsString(15)); + qDebug() << "[STATION FETCH] Station end Time:" << stopDateTime; + + if (startDateTime.isEmpty() && stopDateTime.isEmpty()) // No time series + { + qDebug() << "[STATION FETCH] File cannot be used for Time Series"; + timeSeriesFlag = false; + } + else if (!startDateTime.isEmpty() && !stopDateTime.isEmpty()) // Some type of time series + { + qDebug() << "[STATION FETCH] File can be used for Time Series, suggesting time series parameters..."; + readStationTime(startDateTime, stopDateTime); + } } - } - - if (stationHeader == 2) - { - ui->pointInitializationDataTimeStackedWidget->setCurrentIndex(timeSeriesFlag ? 0 : 1); - if (!timeSeriesFlag) + if (stationHeader == 2) { - QDateTime dateModified = QFileInfo(recentFileSelected).birthTime(); - //updateSingleTime() - ui->weatherStationDataTextEdit->setText("Simulation time set to: " + dateModified.toString()); + ui->pointInitializationDataTimeStackedWidget->setCurrentIndex(timeSeriesFlag ? 0 : 1); + + if (!timeSeriesFlag) + { + QDateTime dateModified = QFileInfo(recentFileSelected).birthTime(); + //updateSingleTime() + ui->weatherStationDataTextEdit->setText("Simulation time set to: " + dateModified.toString()); + } } } } @@ -333,6 +345,9 @@ void PointInitializationInput::readStationTime(QString startDateTime, QString st ui->weatherStationDataEndTimeLabel->setText("End Time (" + DEMTimeZone + "):"); ui->weatherStationDataStartDateTimeEdit->setDateTime(startTimeDEMTimeZone); ui->weatherStationDataEndDateTimeEdit->setDateTime(endTimeDEMTimeZone); + ui->weatherStationDataStartDateTimeEdit->setEnabled(true); + ui->weatherStationDataEndDateTimeEdit->setEnabled(true); + ui->weatherStationDataTimestepsSpinBox->setEnabled(true); updateTimeSteps(); } From 1bbb79e2499d3f87d366ce92aafbeda71556bb09 Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 15 Aug 2025 12:03:17 -0600 Subject: [PATCH 173/435] added setConfigurationOption action in the menuBar, which involved creating a new QDialog page. For issue #638 --- src/gui/CMakeLists.txt | 3 + src/gui/menubar.cpp | 31 ++++++- src/gui/menubar.h | 2 + src/gui/setconfigurationoptiondialog.cpp | 24 ++++++ src/gui/setconfigurationoptiondialog.h | 25 ++++++ src/gui/setconfigurationoptiondialog.ui | 103 +++++++++++++++++++++++ 6 files changed, 186 insertions(+), 2 deletions(-) create mode 100644 src/gui/setconfigurationoptiondialog.cpp create mode 100644 src/gui/setconfigurationoptiondialog.h create mode 100644 src/gui/setconfigurationoptiondialog.ui diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index aeb6ca887..eaa3d6c15 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -29,6 +29,9 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) splashscreen.cpp surfaceinput.h surfaceinput.cpp + setconfigurationoptiondialog.h + setconfigurationoptiondialog.cpp + setconfigurationoptiondialog.ui menubar.h menubar.cpp mapbridge.h diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp index 12c217032..c14bce81a 100755 --- a/src/gui/menubar.cpp +++ b/src/gui/menubar.cpp @@ -149,8 +149,35 @@ void MenuBar::writeBlankStationFile() void MenuBar::setConfigurationOption() { - qDebug() << "MenuBar: setConfigurationOption() triggered"; - ui->consoleTextEdit->append("MenuBar: setConfigurationOption() triggered"); + setConfigurationOptionDialog configDialog; + + int rc = configDialog.exec(); + if( rc == QDialog::Rejected ) + { + return; + } + + const char *pszKey, *pszVal; + QString key = configDialog.GetKey(); + QString val = configDialog.GetValue(); + if( key == "" ) + { + return; + } + if( val == "" ) + { + pszVal = NULL; + } + else + { + pszVal = CPLSPrintf( "%s", (char*)val.toLocal8Bit().data() ); + } + + qDebug() << "Setting configuration option " << key << "to" << val; + ui->consoleTextEdit->append("Setting configuration option " + key + " to " + val); + + pszKey = CPLSPrintf( "%s", (char*)key.toLocal8Bit().data() ); + CPLSetConfigOption( pszKey, pszVal ); } void MenuBar::displayArcGISProGuide() diff --git a/src/gui/menubar.h b/src/gui/menubar.h index da42f6660..305365800 100644 --- a/src/gui/menubar.h +++ b/src/gui/menubar.h @@ -30,6 +30,8 @@ #ifndef MENUBAR_H #define MENUBAR_H +#include "setconfigurationoptiondialog.h" + #include "windninja.h" #include "../ninja/gdal_util.h" #include "ninja_version.h" diff --git a/src/gui/setconfigurationoptiondialog.cpp b/src/gui/setconfigurationoptiondialog.cpp new file mode 100644 index 000000000..1cdea3d95 --- /dev/null +++ b/src/gui/setconfigurationoptiondialog.cpp @@ -0,0 +1,24 @@ +#include "setconfigurationoptiondialog.h" +#include "ui_setconfigurationoptiondialog.h" + +setConfigurationOptionDialog::setConfigurationOptionDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::setConfigurationOptionDialog) +{ + ui->setupUi(this); +} + +setConfigurationOptionDialog::~setConfigurationOptionDialog() +{ + delete ui; +} + +QString setConfigurationOptionDialog::GetKey() +{ + return ui->keyLineEdit->text(); +} + +QString setConfigurationOptionDialog::GetValue() +{ + return ui->valueLineEdit->text(); +} diff --git a/src/gui/setconfigurationoptiondialog.h b/src/gui/setconfigurationoptiondialog.h new file mode 100644 index 000000000..3579f71ec --- /dev/null +++ b/src/gui/setconfigurationoptiondialog.h @@ -0,0 +1,25 @@ +#ifndef SETCONFIGURATIONOPTIONDIALOG_H +#define SETCONFIGURATIONOPTIONDIALOG_H + +#include + +namespace Ui { +class setConfigurationOptionDialog; +} + +class setConfigurationOptionDialog : public QDialog +{ + Q_OBJECT + +public: + explicit setConfigurationOptionDialog(QWidget *parent = nullptr); + ~setConfigurationOptionDialog(); + + QString GetKey(); + QString GetValue(); + +private: + Ui::setConfigurationOptionDialog *ui; +}; + +#endif // SETCONFIGURATIONOPTIONDIALOG_H diff --git a/src/gui/setconfigurationoptiondialog.ui b/src/gui/setconfigurationoptiondialog.ui new file mode 100644 index 000000000..0dc884959 --- /dev/null +++ b/src/gui/setconfigurationoptiondialog.ui @@ -0,0 +1,103 @@ + + + setConfigurationOptionDialog + + + + 0 + 0 + 400 + 143 + + + + Set Configuration Option + + + true + + + + + 10 + 100 + 380 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 10 + 10 + 380 + 80 + + + + + + + Option + + + + + + + + + + Value + + + + + + + + + + + + + buttonBox + rejected() + setConfigurationOptionDialog + reject() + + + 262 + 116 + + + 219 + 63 + + + + + buttonBox + accepted() + setConfigurationOptionDialog + accept() + + + 352 + 117 + + + 336 + 63 + + + + + From 60768b921fb7aa5a1371d1d14ea288db2894cd92 Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 15 Aug 2025 14:12:45 -0600 Subject: [PATCH 174/435] added menu item underlined letter shortcuts, menu item icons and keyboard shortcuts, and menu item tooltips (though these aren't working) to the menuBar, all in QtDesigner to the .ui file. For issue #638 --- src/gui/mainwindow.ui | 234 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 205 insertions(+), 29 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 8eb4130e2..fbd4f4ad0 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -4480,7 +4480,7 @@ QMenu::item:selected { - File + &File @@ -4491,14 +4491,14 @@ QMenu::item:selected { - Options + &Options - Tools + &Tools @@ -4506,17 +4506,17 @@ QMenu::item:selected { - Help + &Help - Displaying Shapefiles + &Displaying Shapefiles - Tutorials + &Tutorials @@ -4525,7 +4525,7 @@ QMenu::item:selected { - Instructions + &Instructions @@ -4547,33 +4547,56 @@ QMenu::item:selected { - New Project + &New Project - Open Project + &Open Project - Export Solution + &Export Solution - Close Project + &Close Project + + + :/folder_page.png:/folder_page.png + - Open Elevation Input File + Open &Elevation Input File + + + Open Surface Input File + + + Open Surface Input File + + + Ctrl+D + + + :/cancel.png:/cancel.png + + E&xit WindNinja + + Exit WindNinja + + Alt+F4 + @@ -4583,95 +4606,248 @@ QMenu::item:selected { true - Enable Console Output + &Enable Console Output + + + :/disk.png:/disk.png + - Write console output to file... + &Write Console Output + + + Write the console text to disk + + + Ctrl+W + + + :/resample.png:/resample.png + + &Resample Data + + Resample Existing Data + + Ctrl+R + + + + :/disk.png:/disk.png + - Write blank station file + &Write Blank Station File + + + Write a blank station file for point initialization + + + Ctrl+Alt+W + + + :/cog_go.png:/cog_go.png + - Set configuration option + Set &Configuration Option + + + Set advanced runtime configuration options + + + Ctrl+Alt+O + + + :/page_white_acrobat.png:/page_white_acrobat.png + - How to Display Shapefiles in ArcGIS Pro + &How to Display Shapefiles in ArcGIS Pro + + + :/page_white_acrobat.png:/page_white_acrobat.png + - Tutorial 1: The Basics + Tutorial &1: The Basics + + + Get started using WindNinja + + + Ctrl+1 + + + :/page_white_acrobat.png:/page_white_acrobat.png + - Tutorial 2: Diurnal Winds and Non-Neutral Stability + Tutorial &2: Diurnal Winds and Non-Neutral Stability + + + Using Diurnal Winds in WindNinja + + + Ctrl+2 + + + :/page_white_acrobat.png:/page_white_acrobat.png + - Tutorial 3: Point Initialization + Tutorial &3: Point Initialization + + + Using Point Initialization in WindNinja + + + Ctrl+3 + + + :/page_white_acrobat.png:/page_white_acrobat.png + - Tutorial 4: Weather Model Initialization + Tutorial &4: Weather Model Initialization + + + Using Weather Model Initialization in WindNinja + + + Ctrl+4 + + + :/page_white_acrobat.png:/page_white_acrobat.png + - DEM Download Instructions + &DEM Download Instructions + + + How to download DEM data with WindNinja + + + :/page_white_acrobat.png:/page_white_acrobat.png + - fetch_dem Instructions + &fetch_dem Instructions + + + How to download DEM data with fetch_dem + + + :/page_white_acrobat.png:/page_white_acrobat.png + - Command Line Interface Instructions + &Command Line Interface Instructions + + + Using the Command Line Interface + + + Ctrl+L + + + :/help.png:/help.png + + &About WindNinja + + About WindNinja + + Ctrl+A + + + + :/citation.png:/citation.png + - Citation + &Citation + + + How to cite WindNinja + + + Ctrl+T + + + :/email.png:/email.png + - Email Us + &Email Us + + + Email bugs/comments/questions to the WindNinja team + + + Ctrl+E + + + :/bug_link.png:/bug_link.png + - Submit Bug Report + Submit &Bug Report + + + Submit a bug report via GitHub (requires GitHub ID) + + + Ctrl+B - About Qt + About &Qt + + + Show the Qt library's About box - + + + From 642e779c037b5492b15f854a6127fe9541dfbc8a Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 15 Aug 2025 14:21:34 -0600 Subject: [PATCH 175/435] Added double clicking for toggling point init and added state checking for selecting stations files, for #636 --- src/gui/appstate.h | 2 ++ src/gui/mainwindow.cpp | 14 ++++++++++++-- src/gui/pointinitializationinput.cpp | 23 ++++++++++++++++++++++- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/gui/appstate.h b/src/gui/appstate.h index be8fdf8ab..dd8945628 100644 --- a/src/gui/appstate.h +++ b/src/gui/appstate.h @@ -55,6 +55,8 @@ class AppState bool isDomainAverageWindInputTableValid = true; bool isDomainAverageInitializationValid = false; bool isPointInitializationToggled = false; + bool isStationFileSelected = false; + bool isStationFileSelectionValid = false; bool isPointInitializationValid = false; bool isWeatherModelInitializationToggled = false; bool isWeatherModelInitializationValid = false; diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 2a9321456..c3bba4bfa 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -111,11 +111,21 @@ void MainWindow::refreshUI() } // Update point initialization - if (state.isPointInitializationToggled) { + if (state.isPointInitializationToggled && state.isStationFileSelectionValid && state.isStationFileSelected) { ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, ""); state.isPointInitializationValid = true; + } else if(state.isPointInitializationToggled && !state.isStationFileSelected) { + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, "No station file selected."); + state.isPointInitializationValid = false; + } else if(state.isPointInitializationToggled && !state.isStationFileSelectionValid){ + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, "Conflicting files selected."); + state.isPointInitializationValid = false; } else { ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, ""); state.isPointInitializationValid = false; } @@ -687,7 +697,7 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) ui->domainAverageCheckBox->click(); } else if (item->text(0) == "Point Initialization") { - //ui->pointInitializationCheckBox->click(); + ui->pointInitializationGroupBox->setChecked(!ui->pointInitializationGroupBox->isChecked()); } else if (item->text(0) == "Weather Model") { ui->weatherModelCheckBox->click(); diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 3197dec27..ec7f1b4b2 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -250,8 +250,18 @@ void PointInitializationInput::pointInitialziationRefreshButtonClicked() void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() { + AppState& state = AppState::instance(); QModelIndexList selectedRows = ui->pointInitializationTreeView->selectionModel()->selectedRows(); + vector stationFiles; + vector stationFileTypes; + + state.isStationFileSelected = false; + if (selectedRows.count() > 0) + { + state.isStationFileSelected = true; + } + for(int i = 0; i < selectedRows.count(); i++) { if(stationFileSystemModel->isDir(selectedRows[i])) @@ -261,6 +271,7 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() } QString recentFileSelected = stationFileSystemModel->filePath(selectedRows[i]); + stationFiles.push_back(recentFileSelected); qDebug() << "[STATION FETCH] Selected file path:" << recentFileSelected; QByteArray filePathBytes = recentFileSelected.toUtf8(); @@ -278,7 +289,7 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() NULL, NULL, NULL - ); + ); OGRLayer* poLayer = hDS->GetLayer(0); poLayer->ResetReading(); @@ -297,11 +308,13 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() { qDebug() << "[STATION FETCH] File cannot be used for Time Series"; timeSeriesFlag = false; + stationFileTypes.push_back(0); } else if (!startDateTime.isEmpty() && !stopDateTime.isEmpty()) // Some type of time series { qDebug() << "[STATION FETCH] File can be used for Time Series, suggesting time series parameters..."; readStationTime(startDateTime, stopDateTime); + stationFileTypes.push_back(1); } } @@ -317,6 +330,14 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() } } } + state.isStationFileSelectionValid = true; + for (int type : stationFileTypes) { + if (type != stationFileTypes[0]) { + state.isStationFileSelectionValid = false; + break; + } + } + emit requestRefresh(); } void PointInitializationInput::readStationTime(QString startDateTime, QString stopDateTime) From 0ec83ed10f9b12347a359d22baf1234b9c183075 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 15 Aug 2025 14:33:25 -0600 Subject: [PATCH 176/435] Added max and min date time for all station files selected, for #636 --- src/gui/pointinitializationinput.cpp | 21 +++++++++++++++++---- src/gui/pointinitializationinput.h | 1 + 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index ec7f1b4b2..1fa8125cf 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -256,6 +256,9 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() vector stationFiles; vector stationFileTypes; + maxStationTime = QDateTime(); + minStationTime = QDateTime(); + state.isStationFileSelected = false; if (selectedRows.count() > 0) { @@ -359,13 +362,23 @@ void PointInitializationInput::readStationTime(QString startDateTime, QString st QDateTime startTimeDEMTimeZone = startTimeUTC.toTimeZone(timeZone); QDateTime endTimeDEMTimeZone = endTimeUTC.toTimeZone(timeZone); - qDebug() << "[STATION FETCH] Start Time (" << DEMTimeZone << "):" << startTimeDEMTimeZone.toString(); - qDebug() << "[STATION FETCH] Stop Time (" << DEMTimeZone << "):" << endTimeDEMTimeZone.toString(); + if(startTimeDEMTimeZone > minStationTime) + { + minStationTime = startTimeDEMTimeZone; + } + + if(endTimeDEMTimeZone > maxStationTime) + { + maxStationTime = endTimeDEMTimeZone; + } + + qDebug() << "[STATION FETCH] Start Time (" << DEMTimeZone << "):" << minStationTime.toString(); + qDebug() << "[STATION FETCH] Stop Time (" << DEMTimeZone << "):" << maxStationTime.toString(); ui->weatherStationDataStartTimeLabel->setText("Start Time (" + DEMTimeZone + "):"); ui->weatherStationDataEndTimeLabel->setText("End Time (" + DEMTimeZone + "):"); - ui->weatherStationDataStartDateTimeEdit->setDateTime(startTimeDEMTimeZone); - ui->weatherStationDataEndDateTimeEdit->setDateTime(endTimeDEMTimeZone); + ui->weatherStationDataStartDateTimeEdit->setDateTime(minStationTime); + ui->weatherStationDataEndDateTimeEdit->setDateTime(maxStationTime); ui->weatherStationDataStartDateTimeEdit->setEnabled(true); ui->weatherStationDataEndDateTimeEdit->setEnabled(true); ui->weatherStationDataTimestepsSpinBox->setEnabled(true); diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index 53f1e2728..3b1c312f0 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -73,6 +73,7 @@ private slots: QFutureWatcher *futureWatcher; QFileSystemModel *stationFileSystemModel; QString currentDEMFilePath; + QDateTime maxStationTime, minStationTime; static int fetchStationFromBbox(QVector year, QVector month, From 38be49ee399a71a18247e2a2ad413952ba343d2d Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 15 Aug 2025 17:26:21 -0600 Subject: [PATCH 177/435] Added helper functions to get time info for point init, needs testing, for #636 --- src/ninja/windninja.cpp | 57 +++++++++++++++++++++++++++++++++++++++++ src/ninja/windninja.h | 9 +++++++ 2 files changed, 66 insertions(+) diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 7ba55affc..817794ead 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -2134,4 +2134,61 @@ WINDNINJADLL_EXPORT int NinjaGetHeaderVersion(const char * filePath, char ** pap return wxStation::GetHeaderVersion(filePath); } +WINDNINJADLL_EXPORT NinjaErr NinjaGetTimeList( + const int* inputYearList, const int* inputMonthList, const int* inputDayList, + const int* inputHourList, const int* inputMinuteList, + int* outputYearList, int* outputMonthList, int* outputDayList, + int* outputHourList, int* outputMinuteList, + int nTimeSteps, const char* timeZone) +{ + std::vector timeList = + pointInitialization::getTimeList( + inputYearList[0], inputMonthList[0], inputDayList[0], + inputHourList[0], inputMinuteList[0], + inputYearList[1], inputMonthList[1], inputDayList[1], + inputHourList[1], inputMinuteList[1], + nTimeSteps, std::string(timeZone) + ); + + for (int i = 0; i < nTimeSteps; ++i) + { + const boost::posix_time::ptime& time = timeList[i]; + boost::gregorian::date date = time.date(); + boost::posix_time::time_duration timeDuration = time.time_of_day(); + + outputYearList[i] = static_cast(date.year()); + outputMonthList[i] = static_cast(date.month()); + outputDayList[i] = static_cast(date.day()); + outputHourList[i] = timeDuration.hours(); + outputMinuteList[i] = timeDuration.minutes(); + } + + return NINJA_SUCCESS; +} + +WINDNINJADLL_EXPORT NinjaErr NinjaGenerateSingleTimeObject( + int inputYear, int inputMonth, int inputDay, int inputHour, int inputMinute, const char* timeZone, + int* outYear, int* outMonth, int* outDay, int* outHour, int* outMinute) +{ + if (!outYear || !outMonth || !outDay || !outHour || !outMinute) + return NINJA_ERR_INVALID_ARGUMENT; // or appropriate error + + boost::posix_time::ptime timeObject = + pointInitialization::generateSingleTimeObject(inputYear, inputMonth, inputDay, inputHour, inputMinute, std::string(timeZone)); + + const boost::gregorian::date& date = timeObject.date(); + const boost::posix_time::time_duration& td = timeObject.time_of_day(); + + *outYear = static_cast(date.year()); + *outMonth = static_cast(date.month()); + *outDay = static_cast(date.day()); + *outHour = td.hours(); + *outMinute = td.minutes(); + + return NINJA_SUCCESS; +} + + + + } diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 63d1e8d0b..300322b67 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -345,5 +345,14 @@ typedef int NinjaErr; * Helper Methods *-----------------------------------------------------------------------------*/ WINDNINJADLL_EXPORT int NinjaGetHeaderVersion(const char * filePath, char ** papszOptions); + WINDNINJADLL_EXPORT NinjaErr NinjaGetTimeList( + const int* inputYearList, const int* inputMonthList, const int* inputDayList, + const int* inputHourList, const int* inputMinuteList, + int* outputYearList, int* outputMonthList, int* outputDayList, + int* outputHourList, int* outputMinuteList, + int nTimeSteps, const char* timeZone); + WINDNINJADLL_EXPORT NinjaErr NinjaGenerateSingleTimeObject( + int inputYear, int inputMonth, int inputDay, int inputHour, int inputMinute, const char* timeZone, + int* outYear, int* outMonth, int* outDay, int* outHour, int* outMinute); WN_C_END From 2bff029fd04c20638839e00c0a4ffa61bb4ddf11 Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 15 Aug 2025 19:01:26 -0600 Subject: [PATCH 178/435] fixed menu statusTips failing to display, by turning them into toolTips, and setting toolTipsVisible=true for each QMenu in QMenuBar. For issue #638 Apparently statusTips only show up if the QMainWindow has a QStatusBar, which we are purposefully not doing, not enough control with its location and style. An added QStatusBar just puts it at the bottom of the page without easy ways to edit it, which is NO LONGER displaying statusTips over the menu items anymore. Note, even if toolTipsVisible is set to true, and QActions supposedly default the toolTip value to the text of the QAction, you have to explicitly set the toolTip values for each given QAction or they won't show up. --- src/gui/mainwindow.ui | 80 +++++++++++++++++++++++++++++++------------ 1 file changed, 58 insertions(+), 22 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index fbd4f4ad0..07350b45b 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -4482,6 +4482,9 @@ QMenu::item:selected { &File + + true + @@ -4493,6 +4496,9 @@ QMenu::item:selected { &Options + + true +
@@ -4500,6 +4506,9 @@ QMenu::item:selected { &Tools + + true + @@ -4508,16 +4517,25 @@ QMenu::item:selected { &Help + + true + &Displaying Shapefiles + + true + &Tutorials + + true + @@ -4527,6 +4545,9 @@ QMenu::item:selected { &Instructions + + true + @@ -4549,21 +4570,33 @@ QMenu::item:selected { &New Project + + Open New Project + &Open Project + + Open Existing Project + &Export Solution + + Save Output From Current Project + &Close Project + + Close Current Project + @@ -4574,10 +4607,7 @@ QMenu::item:selected { Open &Elevation Input File - Open Surface Input File - - - Open Surface Input File + Open Surface Input File Ctrl+D @@ -4591,7 +4621,7 @@ QMenu::item:selected { E&xit WindNinja - + Exit WindNinja @@ -4608,6 +4638,9 @@ QMenu::item:selected { &Enable Console Output + + Show or Hide the Console Output Window + @@ -4617,7 +4650,7 @@ QMenu::item:selected { &Write Console Output - + Write the console text to disk @@ -4632,7 +4665,7 @@ QMenu::item:selected { &Resample Data - + Resample Existing Data @@ -4647,7 +4680,7 @@ QMenu::item:selected { &Write Blank Station File - + Write a blank station file for point initialization @@ -4662,7 +4695,7 @@ QMenu::item:selected { Set &Configuration Option - + Set advanced runtime configuration options @@ -4677,6 +4710,9 @@ QMenu::item:selected { &How to Display Shapefiles in ArcGIS Pro + + Open ArcGIS Pro Tutorial + @@ -4686,7 +4722,7 @@ QMenu::item:selected { Tutorial &1: The Basics - + Get started using WindNinja @@ -4701,7 +4737,7 @@ QMenu::item:selected { Tutorial &2: Diurnal Winds and Non-Neutral Stability - + Using Diurnal Winds in WindNinja @@ -4716,7 +4752,7 @@ QMenu::item:selected { Tutorial &3: Point Initialization - + Using Point Initialization in WindNinja @@ -4731,7 +4767,7 @@ QMenu::item:selected { Tutorial &4: Weather Model Initialization - + Using Weather Model Initialization in WindNinja @@ -4746,7 +4782,7 @@ QMenu::item:selected { &DEM Download Instructions - + How to download DEM data with WindNinja @@ -4758,7 +4794,7 @@ QMenu::item:selected { &fetch_dem Instructions - + How to download DEM data with fetch_dem @@ -4770,7 +4806,7 @@ QMenu::item:selected { &Command Line Interface Instructions - + Using the Command Line Interface @@ -4785,8 +4821,8 @@ QMenu::item:selected { &About WindNinja - - About WindNinja + + Show About WindNinja Info Ctrl+A @@ -4800,7 +4836,7 @@ QMenu::item:selected { &Citation - + How to cite WindNinja @@ -4815,7 +4851,7 @@ QMenu::item:selected { &Email Us - + Email bugs/comments/questions to the WindNinja team @@ -4830,7 +4866,7 @@ QMenu::item:selected { Submit &Bug Report - + Submit a bug report via GitHub (requires GitHub ID) @@ -4841,7 +4877,7 @@ QMenu::item:selected { About &Qt - + Show the Qt library's About box From 79a4c68e7e38755ee008acdf13a4f9868d717791 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 18 Aug 2025 12:18:50 -0600 Subject: [PATCH 179/435] Initial work to properly scrap and run point initialization with multiple stations files, for #636 --- src/gui/mainwindow.cpp | 75 ++++++++++++++++------------ src/gui/pointinitializationinput.cpp | 13 +++-- src/gui/pointinitializationinput.h | 4 +- src/ninja/windninja.cpp | 38 ++++++++------ src/ninja/windninja.h | 2 +- 5 files changed, 78 insertions(+), 54 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index c3bba4bfa..97fc20067 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -590,7 +590,7 @@ void MainWindow::solveButtonClicked() AppState& state = AppState::instance(); int numNinjas; - NinjaArmyH *ninjaArmy; + NinjaArmyH *ninjaArmy = nullptr; char **papszOptions; const char *initializationMethod; QList speeds; @@ -598,6 +598,7 @@ void MainWindow::solveButtonClicked() if (state.isDomainAverageInitializationValid) { + initializationMethod = "domain_average"; int rowCount = ui->domainAverageTable->rowCount(); for (int row = 0; row < rowCount; ++row) { QTableWidgetItem* speedItem = ui->domainAverageTable->item(row, 0); @@ -615,26 +616,36 @@ void MainWindow::solveButtonClicked() } else if (state.isPointInitializationValid) { - QDateTime start = ui->downloadBetweenDatesStartTimeDateTimeEdit->dateTime(); - QDateTime end = ui->downloadBetweenDatesEndTimeDateTimeEdit->dateTime(); + initializationMethod = "point"; + + QDateTime start = ui->weatherStationDataStartDateTimeEdit->dateTime(); + QDateTime end = ui->weatherStationDataEndDateTimeEdit->dateTime(); QVector year = {start.date().year(), end.date().year()}; QVector month = {start.date().month(), end.date().month()}; QVector day = {start.date().day(), end.date().day()}; QVector hour = {start.time().hour(), end.time().hour()}; QVector minute = {start.time().minute(), end.time().minute()}; - QString osTimeZone = "UTC"; + QString DEMTimeZone = ui->timeZoneComboBox->currentText(); + + std::vector stationFiles = pointInitializationInput->getStationFiles(); + + std::vector stationFilesBytes; + stationFilesBytes.reserve(stationFiles.size()); + std::vector stationFileNames; + stationFileNames.reserve(stationFiles.size()); + for (const auto& file : stationFiles) { + stationFilesBytes.push_back(file.toUtf8()); + stationFileNames.push_back(stationFilesBytes.back().constData()); + } - QModelIndex index = ui->pointInitializationTreeView->currentIndex(); - QFileSystemModel *model = qobject_cast(ui->pointInitializationTreeView->model()); - QString stationPath = model->filePath(index); QString DEMPath = ui->elevationInputFileLineEdit->property("fullpath").toString(); - initializationMethod = "point"; - numNinjas = 2; - int size = 2; + numNinjas = 25; + int timeListSize = 2; bool momentumFlag = ui->momentumSolverCheckBox->isChecked(); - ninjaArmy = NinjaMakePointArmy(year.data(), month.data(), day.data(), hour.data(), minute.data(), size, osTimeZone.toUtf8().data(), stationPath.toUtf8().data(), DEMPath.toUtf8().data(), true, momentumFlag, papszOptions); + ninjaArmy = NinjaMakePointArmy + (year.data(), month.data(), day.data(), hour.data(), minute.data(), timeListSize, DEMTimeZone.toUtf8().data(), stationFileNames.data(), stationFileNames.size(), DEMPath.toUtf8().data(), true, momentumFlag, papszOptions); } prepareArmy(ninjaArmy, numNinjas, initializationMethod); @@ -651,31 +662,31 @@ void MainWindow::solveButtonClicked() printf("NinjaDestroyRuns: err = %d\n", err); } - vector outputFiles; - QDir outDir(ui->outputDirectoryLineEdit->text()); - QString demName = QFileInfo(ui->elevationInputFileLineEdit->text()).baseName(); - int meshInt = static_cast(std::round(ui->meshResolutionSpinBox->value())); - QString meshSize = QString::number(meshInt) + "m"; + // vector outputFiles; + // QDir outDir(ui->outputDirectoryLineEdit->text()); + // QString demName = QFileInfo(ui->elevationInputFileLineEdit->text()).baseName(); + // int meshInt = static_cast(std::round(ui->meshResolutionSpinBox->value())); + // QString meshSize = QString::number(meshInt) + "m"; - for (int i = 0; i < numNinjas; i++) { - QString filePath = outDir.filePath(QString("%1_%2_%3_%4.kmz") - .arg(demName) - .arg(directions[i]) - .arg(speeds[i]) - .arg(meshSize)); - outputFiles.push_back(filePath.toStdString()); - } + // for (int i = 0; i < numNinjas; i++) { + // QString filePath = outDir.filePath(QString("%1_%2_%3_%4.kmz") + // .arg(demName) + // .arg(directions[i]) + // .arg(speeds[i]) + // .arg(meshSize)); + // outputFiles.push_back(filePath.toStdString()); + // } - for (const auto& dir : outputFiles) { - QString qDir = QString::fromStdString(dir); + // for (const auto& dir : outputFiles) { + // QString qDir = QString::fromStdString(dir); - QFile f(qDir); - f.open(QIODevice::ReadOnly); - QByteArray data = f.readAll(); - QString base64 = data.toBase64(); + // QFile f(qDir); + // f.open(QIODevice::ReadOnly); + // QByteArray data = f.readAll(); + // QString base64 = data.toBase64(); - webView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); - } + // webView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + // } } void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 1fa8125cf..2e57820aa 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -253,7 +253,7 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() AppState& state = AppState::instance(); QModelIndexList selectedRows = ui->pointInitializationTreeView->selectionModel()->selectedRows(); - vector stationFiles; + stationFiles.clear(); vector stationFileTypes; maxStationTime = QDateTime(); @@ -362,12 +362,11 @@ void PointInitializationInput::readStationTime(QString startDateTime, QString st QDateTime startTimeDEMTimeZone = startTimeUTC.toTimeZone(timeZone); QDateTime endTimeDEMTimeZone = endTimeUTC.toTimeZone(timeZone); - if(startTimeDEMTimeZone > minStationTime) + if (minStationTime.isNull() || startTimeDEMTimeZone < minStationTime) { minStationTime = startTimeDEMTimeZone; } - - if(endTimeDEMTimeZone > maxStationTime) + if(maxStationTime.isNull() || endTimeDEMTimeZone > maxStationTime) { maxStationTime = endTimeDEMTimeZone; } @@ -396,3 +395,9 @@ void PointInitializationInput::updateTimeSteps() ui->weatherStationDataTimestepsSpinBox->setValue(timesteps); qDebug() << "[STATION FETCH] Suggested Timesteps:" << timesteps; } + +vector PointInitializationInput::getStationFiles() +{ + return stationFiles; +} + diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index 3b1c312f0..63c4f88e5 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -52,6 +52,8 @@ class PointInitializationInput : public QObject Q_OBJECT public: PointInitializationInput(Ui::MainWindow* ui, QObject* parent = nullptr); + vector getStationFiles(); + signals: void requestRefresh(); @@ -74,6 +76,7 @@ private slots: QFileSystemModel *stationFileSystemModel; QString currentDEMFilePath; QDateTime maxStationTime, minStationTime; + vector stationFiles; static int fetchStationFromBbox(QVector year, QVector month, @@ -99,7 +102,6 @@ private slots: void fetchStationDataFinished(); void readStationTime(QString startDateTime, QString stopDateTime); void updateTimeSteps(); - }; #endif // POINTINITIALIZATIONINPUT_H diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 817794ead..c49a54886 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -184,43 +184,49 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakeDomainAverageArmy * \return An opaque handle to a ninjaArmy on success, NULL otherwise. */ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakePointArmy - ( int * yearList, int * monthList, int * dayList, int * hourList, int * minuteList, int size, char * timeZone, char * stationFileName, char * elevationFile, bool matchPointsFlag, bool momentumFlag, char ** options) + ( int * yearList, int * monthList, int * dayList, int * hourList, int * minuteList, int timeListSize, char * timeZone, const char ** stationFileNames, int numStationFiles, char * elevationFile, bool matchPointsFlag, bool momentumFlag, char ** options) { + wxStation::SetStationFormat(wxStation::newFormat); if(momentumFlag == true) { throw std::runtime_error("The momentum solver is not available for use with Point Initialization runs."); } - //Get the number of elements in the arrays - NinjaArmyH* army; - try{ - std::vector timeList; - for(size_t i=0; i timeList = pointInitialization::getTimeList( + yearList[0], monthList[0], dayList[0], + hourList[0], minuteList[0], + yearList[1], monthList[1], dayList[1], + hourList[1], minuteList[1], + 25, std::string(timeZone) + ); - pointInitialization::SetRawStationFilename(stationFileName); + // for(size_t i=0; i < timeListSize; i++){ + // timeList.push_back(boost::posix_time::ptime(boost::gregorian::date(yearList[i], monthList[i], dayList[i]), boost::posix_time::time_duration(hourList[i],minuteList[i],0,0))); + // } std::vector sFiles; - sFiles.push_back(stationFileName); + for (int i = 0; i < numStationFiles; i++) + { + sFiles.emplace_back(stationFileNames[i]); + } pointInitialization::storeFileNames(sFiles); - // TODO: Include check for using multiple .csv files - //sFiles=pointInitialization::openCSVList(vm["wx_station_filename"].as()); - //pointInitialization::storeFileNames(sFiles); army = reinterpret_cast( new ninjaArmy() ); reinterpret_cast( army )->makePointArmy ( timeList, std::string(timeZone), - std::string(stationFileName), + sFiles[0], std::string(elevationFile), matchPointsFlag, momentumFlag); return army; } - catch( armyException & e ){ + catch( armyException & e ) + { return NULL; } return NULL; @@ -2171,7 +2177,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaGenerateSingleTimeObject( int* outYear, int* outMonth, int* outDay, int* outHour, int* outMinute) { if (!outYear || !outMonth || !outDay || !outHour || !outMinute) - return NINJA_ERR_INVALID_ARGUMENT; // or appropriate error + return NINJA_E_OTHER; // or appropriate error boost::posix_time::ptime timeObject = pointInitialization::generateSingleTimeObject(inputYear, inputMonth, inputDay, inputHour, inputMinute, std::string(timeZone)); diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 300322b67..764aac148 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -85,7 +85,7 @@ typedef int NinjaErr; //TODO: add helper function to generate arrays of years, months, days, hours, and minutes from a station file WINDNINJADLL_EXPORT NinjaArmyH * NinjaMakePointArmy - ( int * yearList, int * monthList, int * dayList, int * hourList, int * minuteList, int size, char * timeZone, char * stationFileName, char * elevationFile, bool matchPointsFlag, bool momentumFlag, char ** options ); + ( int * yearList, int * monthList, int * dayList, int * hourList, int * minuteList, int timeListSize, char * timeZone, const char ** stationFileNames, int numStationFiles, char * elevationFile, bool matchPointsFlag, bool momentumFlag, char ** options); //TODO: add helper function to get first and last timesteps in a forecast file //TODO: add helper function to get list of times in a forecast file From 96400dbc435841ceb5a6192cc9de663847bbdd67 Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 18 Aug 2025 12:27:33 -0600 Subject: [PATCH 180/435] added console output wrapper function, to add line and color to the console output. It behaves as a slot function, where to use it outside mainwindow.cpp you just have to add a signal function, then connect the slot function to the signal function in MainWindow::connectSignals(). For issue #638 --- src/gui/mainwindow.cpp | 25 +++++++++++++++++++++ src/gui/mainwindow.h | 4 ++++ src/gui/menubar.cpp | 49 ++++++++++++++++-------------------------- src/gui/menubar.h | 1 + 4 files changed, 48 insertions(+), 31 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 4f7d1dc25..ceccea2bd 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -297,10 +297,24 @@ void MainWindow::refreshUI() } } +void MainWindow::writeToConsole(QString message, QColor color) +{ + if( ui->consoleDockWidget->isFloating() && color == Qt::white ) + { + color = Qt::black; + } + + ui->consoleTextEdit->setTextColor(color); + ui->consoleTextEdit->append(QString::number(lineNumber) + ": " + message); + lineNumber++; +} + MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { + lineNumber = 1; + serverBridge = new ServerBridge(); serverBridge->checkMessages(); @@ -384,6 +398,14 @@ MainWindow::MainWindow(QWidget *parent) ui->legendComboBox->setItemData(1, "equal_color"); connectSignals(); + + + QString version(NINJA_VERSION_STRING); + version = "Welcome to WindNinja " + version; + + writeToConsole(version, Qt::blue); + + writeToConsole("WINDNINJA_DATA=" + dataPath); } MainWindow::~MainWindow() @@ -422,6 +444,9 @@ void MainWindow::connectSignals() connect(ui->geospatialPDFFilesMeshResolutionGroupBox, &QGroupBox::toggled, this, &MainWindow::geospatialPDFFilesMeshResolutionGroupBoxToggled); connect(ui->outputDirectoryButton, &QPushButton::clicked, this, &MainWindow::outputDirectoryButtonClicked); connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); + + //connect other writeToConsoles to the main writeToConsole + connect(menuBar, &MenuBar::writeToConsole, this, &MainWindow::writeToConsole); } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 504b231c7..119f90e85 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -119,6 +119,7 @@ private slots: void shapeFilesMeshResolutionGroupBoxToggled(bool checked); void geospatialPDFFilesMeshResolutionGroupBoxToggled(bool checked); void refreshUI(); + void writeToConsole(QString message, QColor color = Qt::white); private: Ui::MainWindow *ui; @@ -144,5 +145,8 @@ private slots: OutputMeshResolution getMeshResolution(bool useOutputMeshResolution, QDoubleSpinBox* outputMeshResolutionSpinBox, QComboBox* outputMeshResolutionComboBox); + + int lineNumber; + }; #endif // MAINWINDOW_H diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp index c14bce81a..ff69c5ffc 100755 --- a/src/gui/menubar.cpp +++ b/src/gui/menubar.cpp @@ -79,26 +79,22 @@ MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) void MenuBar::newProject() { - qDebug() << "MenuBar: newProject() triggered"; - ui->consoleTextEdit->append("MenuBar: newProject() triggered"); + writeToConsole("MenuBar: newProject() triggered"); } void MenuBar::openProject() { - qDebug() << "MenuBar: openProject() triggered"; - ui->consoleTextEdit->append("MenuBar: openProject() triggered"); + writeToConsole("MenuBar: openProject() triggered"); } void MenuBar::exportSolution() { - qDebug() << "MenuBar: exportSolution() triggered"; - ui->consoleTextEdit->append("MenuBar: exportSolution() triggered"); + writeToConsole("MenuBar: exportSolution() triggered"); } void MenuBar::closeProject() { - qDebug() << "MenuBar: closeProject() triggered"; - ui->consoleTextEdit->append("MenuBar: closeProject() triggered"); + writeToConsole("MenuBar: closeProject() triggered"); } void MenuBar::writeConsoleOutput() @@ -111,8 +107,8 @@ void MenuBar::writeConsoleOutput() if(!fileName.isEmpty()) { QDateTime currentTime(QDateTime::currentDateTime()); - ui->consoleTextEdit->append("writing WindNinja console output to " + fileName); - ui->consoleTextEdit->append("current time is " + currentTime.toString("MM/dd/yyyy hh:mm:ss t")); + writeToConsole("writing console output to " + fileName, Qt::darkGreen); + writeToConsole("current time is " + currentTime.toString("MM/dd/yyyy hh:mm:ss t"), Qt::darkGreen); std::ofstream fout(fileName.toStdString().c_str(), std::ios::out); QString text = ui->consoleTextEdit->toPlainText(); @@ -123,8 +119,7 @@ void MenuBar::writeConsoleOutput() void MenuBar::resampleData() { - qDebug() << "MenuBar: resampleData() triggered"; - ui->consoleTextEdit->append("MenuBar: resampleData() triggered"); + writeToConsole("MenuBar: resampleData() triggered"); } void MenuBar::writeBlankStationFile() @@ -136,13 +131,13 @@ void MenuBar::writeBlankStationFile() if(!fileName.isEmpty()) { - ui->consoleTextEdit->append("writing blank station file to " + fileName); + writeToConsole("writing blank station file to " + fileName, Qt::darkGreen); char** papszOptions = nullptr; int err = NinjaWriteBlankWxStationFile( fileName.toStdString().c_str(), papszOptions ); if( err != NINJA_SUCCESS ) { - ui->consoleTextEdit->append("failed to write blank station file!"); + writeToConsole("failed to write blank station file!", Qt::red); } } } @@ -174,7 +169,7 @@ void MenuBar::setConfigurationOption() } qDebug() << "Setting configuration option " << key << "to" << val; - ui->consoleTextEdit->append("Setting configuration option " + key + " to " + val); + writeToConsole("Setting configuration option " + key + " to " + val); pszKey = CPLSPrintf( "%s", (char*)key.toLocal8Bit().data() ); CPLSetConfigOption( pszKey, pszVal ); @@ -184,8 +179,7 @@ void MenuBar::displayArcGISProGuide() { QString displayFile = dataPath.absoluteFilePath("../doc/displaying_wind_vectors_in_ArcGIS_Pro.pdf"); displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path - qDebug() << "Opening" << displayFile; - ui->consoleTextEdit->append("Opening " + displayFile); + writeToConsole("Opening " + displayFile); if(!QDesktopServices::openUrl(QUrl(displayFile))) { @@ -199,8 +193,7 @@ void MenuBar::displayTutorial1() { QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial1.pdf"); displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path - qDebug() << "Opening" << displayFile; - ui->consoleTextEdit->append("Opening " + displayFile); + writeToConsole("Opening " + displayFile); if(!QDesktopServices::openUrl(QUrl(displayFile))) { @@ -214,8 +207,7 @@ void MenuBar::displayTutorial2() { QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial2.pdf"); displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path - qDebug() << "Opening" << displayFile; - ui->consoleTextEdit->append("Opening " + displayFile); + writeToConsole("Opening " + displayFile); if(!QDesktopServices::openUrl(QUrl(displayFile))) { @@ -229,8 +221,7 @@ void MenuBar::displayTutorial3() { QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial3.pdf"); displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path - qDebug() << "Opening" << displayFile; - ui->consoleTextEdit->append("Opening " + displayFile); + writeToConsole("Opening " + displayFile); if(!QDesktopServices::openUrl(QUrl(displayFile))) { @@ -244,8 +235,7 @@ void MenuBar::displayTutorial4() { QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial4.pdf"); displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path - qDebug() << "Opening" << displayFile; - ui->consoleTextEdit->append("Opening " + displayFile); + writeToConsole("Opening " + displayFile); if(!QDesktopServices::openUrl(QUrl(displayFile))) { @@ -259,8 +249,7 @@ void MenuBar::displayDemDownloadInstructions() { QString displayFile = dataPath.absoluteFilePath("../doc/download_elevation_file.pdf"); displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path - qDebug() << "Opening" << displayFile; - ui->consoleTextEdit->append("Opening " + displayFile); + writeToConsole("Opening " + displayFile); if(!QDesktopServices::openUrl(QUrl(displayFile))) { @@ -274,8 +263,7 @@ void MenuBar::displayFetchDemInstructions() { QString displayFile = dataPath.absoluteFilePath("../doc/fetch_dem_instructions.pdf"); displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path - qDebug() << "Opening" << displayFile; - ui->consoleTextEdit->append("Opening " + displayFile); + writeToConsole("Opening " + displayFile); if(!QDesktopServices::openUrl(QUrl(displayFile))) { @@ -289,8 +277,7 @@ void MenuBar::displayCommandLineInterfaceInstructions() { QString displayFile = dataPath.absoluteFilePath("../doc/CLI_instructions.pdf"); displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path - qDebug() << "Opening" << displayFile; - ui->consoleTextEdit->append("Opening " + displayFile); + writeToConsole("Opening " + displayFile); if(!QDesktopServices::openUrl(QUrl(displayFile))) { diff --git a/src/gui/menubar.h b/src/gui/menubar.h index 305365800..76fabc4d6 100644 --- a/src/gui/menubar.h +++ b/src/gui/menubar.h @@ -53,6 +53,7 @@ class MenuBar : public QObject MenuBar(Ui::MainWindow* ui, QObject* parent = nullptr); signals: + void writeToConsole(QString message, QColor color = Qt::white); void openElevationInputFileMenuActionTriggered(); private slots: From cea614813495a788dbc4d6313b76796cacb7bf2a Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 18 Aug 2025 12:54:34 -0600 Subject: [PATCH 181/435] updated menuBar writeConsoleOutput() function, to write the output line/paragraph by line/paragraph rather than stuffing it all into one intermediate huge QString, should improve writing console output for very long console logs. For issue #638 --- src/gui/menubar.cpp | 15 +++++++++++++-- src/gui/menubar.h | 2 ++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp index ff69c5ffc..1aca7f9e9 100755 --- a/src/gui/menubar.cpp +++ b/src/gui/menubar.cpp @@ -111,8 +111,19 @@ void MenuBar::writeConsoleOutput() writeToConsole("current time is " + currentTime.toString("MM/dd/yyyy hh:mm:ss t"), Qt::darkGreen); std::ofstream fout(fileName.toStdString().c_str(), std::ios::out); - QString text = ui->consoleTextEdit->toPlainText(); - fout << text.toStdString(); + if(!fout) + { + writeToConsole("Cannot open " + fileName + " for writing.", Qt::red); + return; + } + + QTextDocument *doc = ui->consoleTextEdit->document(); + QTextBlock block = doc->begin(); + while( block.isValid() ) + { + fout << block.text().toStdString() << "\n"; + block = block.next(); + } fout.close(); } } diff --git a/src/gui/menubar.h b/src/gui/menubar.h index 76fabc4d6..839b1b426 100644 --- a/src/gui/menubar.h +++ b/src/gui/menubar.h @@ -39,6 +39,8 @@ #include #include #include +#include +#include #include namespace Ui { From 7a7f45c88081e9de2980dc8384d01552ebe5732d Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 18 Aug 2025 15:31:09 -0600 Subject: [PATCH 182/435] added remaining writeToConsole() calls that I could with what code I have in this branch. In the process, discovered that calls to QTextEdit.append() were being batched, I effectively added qApp->processEvents() to the writeToConsole() function to force just the consoleWindow to update. for issue #638 --- src/gui/mainwindow.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index ceccea2bd..12a5784c5 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -306,6 +306,7 @@ void MainWindow::writeToConsole(QString message, QColor color) ui->consoleTextEdit->setTextColor(color); ui->consoleTextEdit->append(QString::number(lineNumber) + ": " + message); + ui->consoleTextEdit->repaint(); lineNumber++; } @@ -611,9 +612,11 @@ void MainWindow::solveButtonClicked() QString speedUnits = ui->tableSpeedUnits->currentText(); ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), papszOptions); } + writeToConsole(QString::number( numNinjas ) + " runs initialized. Starting solver..."); prepareArmy(ninjaArmy, numNinjas, initializationMethod); + writeToConsole( "Initializing runs..." ); int err = NinjaStartRuns(ninjaArmy, ui->numberOfProcessorsSpinBox->value(), papszOptions); if(err != 1) //NinjaStartRuns returns 1 on success { @@ -625,9 +628,11 @@ void MainWindow::solveButtonClicked() { printf("NinjaDestroyRuns: err = %d\n", err); } + writeToConsole("Finished with simulations", Qt::darkGreen); if(ui->googleEarthGroupBox->isChecked()) { + writeToConsole( "Loading kmz output onto map..." ); vector outputFiles; QDir outDir(ui->outputDirectoryLineEdit->text()); QString demName = QFileInfo(ui->elevationInputFileLineEdit->text()).baseName(); From 5f8868bd9c6b1dbc0871f1bcd8e8370eacd5315e Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 18 Aug 2025 16:03:13 -0600 Subject: [PATCH 183/435] renamed menuAction functions to the more standard onXXXXObjectSignal style (similar to the on_XXXXObject_signal() style, but for manual connect() calls rather than the automated QMetaObject::connectSlotsByName() calls via setupUi(). We also drop the "on" for our connect() style). For issue #638 --- src/gui/mainwindow.cpp | 2 +- src/gui/mainwindow.ui | 4 +-- src/gui/menubar.cpp | 82 +++++++++++++++++++++--------------------- src/gui/menubar.h | 42 +++++++++++----------- 4 files changed, 65 insertions(+), 65 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 12a5784c5..df3f1963f 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -430,7 +430,7 @@ void MainWindow::connectSignals() connect(ui->pointInitializationCheckBox, &QCheckBox::clicked, this, &MainWindow::pointInitializationCheckBoxClicked); connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); - connect(menuBar, &MenuBar::openElevationInputFileMenuActionTriggered, surfaceInput, &SurfaceInput::elevationInputFileOpenButtonClicked); + connect(menuBar, &MenuBar::openElevationInputFileActionTriggered, surfaceInput, &SurfaceInput::elevationInputFileOpenButtonClicked); connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); connect(surfaceInput, &SurfaceInput::requestRefresh, this, &MainWindow::refreshUI); connect(domainAverageInput, &DomainAverageInput::requestRefresh, this, &MainWindow::refreshUI); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 07350b45b..4713838ae 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -4489,7 +4489,7 @@ QMenu::item:selected { - + @@ -4598,7 +4598,7 @@ QMenu::item:selected { Close Current Project - + :/folder_page.png:/folder_page.png diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp index 1aca7f9e9..0d288798e 100755 --- a/src/gui/menubar.cpp +++ b/src/gui/menubar.cpp @@ -37,67 +37,67 @@ MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) dataPath = QDir(dataFolder); // QMenu fileMenu "File" actions - connect(ui->newProjectAction, &QAction::triggered, this, &MenuBar::newProject); - connect(ui->openProjectAction, &QAction::triggered, this, &MenuBar::openProject); - connect(ui->exportSolutionAction, &QAction::triggered, this, &MenuBar::exportSolution); - connect(ui->closeProjectAction, &QAction::triggered, this, &MenuBar::closeProject); - connect(ui->openElevationInputFileMenuAction, &QAction::triggered, this, &MenuBar::openElevationInputFileMenuActionTriggered); + connect(ui->newProjectAction, &QAction::triggered, this, &MenuBar::newProjectActionTriggered); + connect(ui->openProjectAction, &QAction::triggered, this, &MenuBar::openProjectActionTriggered); + connect(ui->exportSolutionAction, &QAction::triggered, this, &MenuBar::exportSolutionActionTriggered); + connect(ui->closeProjectAction, &QAction::triggered, this, &MenuBar::closeProjectActionTriggered); + connect(ui->openElevationInputFileAction, &QAction::triggered, this, &MenuBar::openElevationInputFileActionTriggered); connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QCoreApplication::quit); // exit the entire app // QMenu optionsMenu "Options" actions connect(ui->enableConsoleOutputAction, &QAction::toggled, ui->consoleDockWidget, &QDockWidget::setVisible); connect(ui->consoleDockWidget, &QDockWidget::visibilityChanged, ui->enableConsoleOutputAction, &QAction::setChecked); // if closed from the QDockWidget itself, unchecks the menuAction - connect(ui->writeConsoleOutputAction, &QAction::triggered, this, &MenuBar::writeConsoleOutput); + connect(ui->writeConsoleOutputAction, &QAction::triggered, this, &MenuBar::writeConsoleOutputActionTriggered); // QMenu toolsMenu "Tools" actions - connect(ui->resampleDataAction, &QAction::triggered, this, &MenuBar::resampleData); - connect(ui->writeBlankStationFileAction, &QAction::triggered, this, &MenuBar::writeBlankStationFile); - connect(ui->setConfigurationOptionAction, &QAction::triggered, this, &MenuBar::setConfigurationOption); + connect(ui->resampleDataAction, &QAction::triggered, this, &MenuBar::resampleDataActionTriggered); + connect(ui->writeBlankStationFileAction, &QAction::triggered, this, &MenuBar::writeBlankStationFileActionTriggered); + connect(ui->setConfigurationOptionAction, &QAction::triggered, this, &MenuBar::setConfigurationOptionActionTriggered); // QMenu helpMenu "Help" actions // sub QMenu displayingShapeFilesMenu "Displaying Shapefiles" actions - connect(ui->displayArcGISProGuideAction, &QAction::triggered, this, &MenuBar::displayArcGISProGuide); + connect(ui->displayArcGISProGuideAction, &QAction::triggered, this, &MenuBar::displayArcGISProGuideActionTriggered); // sub QMenu tutorialsMenu "Tutorials" actions - connect(ui->displayTutorial1Action, &QAction::triggered, this, &MenuBar::displayTutorial1); - connect(ui->displayTutorial2Action, &QAction::triggered, this, &MenuBar::displayTutorial2); - connect(ui->displayTutorial3Action, &QAction::triggered, this, &MenuBar::displayTutorial3); - connect(ui->displayTutorial4Action, &QAction::triggered, this, &MenuBar::displayTutorial4); + connect(ui->displayTutorial1Action, &QAction::triggered, this, &MenuBar::displayTutorial1ActionTriggered); + connect(ui->displayTutorial2Action, &QAction::triggered, this, &MenuBar::displayTutorial2ActionTriggered); + connect(ui->displayTutorial3Action, &QAction::triggered, this, &MenuBar::displayTutorial3ActionTriggered); + connect(ui->displayTutorial4Action, &QAction::triggered, this, &MenuBar::displayTutorial4ActionTriggered); // sub QMenu instructionsMenu "Instructions" actions - connect(ui->displayDemDownloadInstructionsAction, &QAction::triggered, this, &MenuBar::displayDemDownloadInstructions); - connect(ui->displayFetchDemInstructionsAction, &QAction::triggered, this, &MenuBar::displayFetchDemInstructions); - connect(ui->displayCommandLineInterfaceInstructionsAction, &QAction::triggered, this, &MenuBar::displayCommandLineInterfaceInstructions); + connect(ui->displayDemDownloadInstructionsAction, &QAction::triggered, this, &MenuBar::displayDemDownloadInstructionsActionTriggered); + connect(ui->displayFetchDemInstructionsAction, &QAction::triggered, this, &MenuBar::displayFetchDemInstructionsActionTriggered); + connect(ui->displayCommandLineInterfaceInstructionsAction, &QAction::triggered, this, &MenuBar::displayCommandLineInterfaceInstructionsActionTriggered); // remaining non-sub QMenu actions - connect(ui->aboutWindNinjaAction, &QAction::triggered, this, &MenuBar::aboutWindNinja); - connect(ui->citeWindNinjaAction, &QAction::triggered, this, &MenuBar::citeWindNinja); - connect(ui->supportEmailAction, &QAction::triggered, this, &MenuBar::supportEmail); - connect(ui->submitBugReportAction, &QAction::triggered, this, &MenuBar::submitBugReport); + connect(ui->aboutWindNinjaAction, &QAction::triggered, this, &MenuBar::aboutWindNinjaActionTriggered); + connect(ui->citeWindNinjaAction, &QAction::triggered, this, &MenuBar::citeWindNinjaActionTriggered); + connect(ui->supportEmailAction, &QAction::triggered, this, &MenuBar::supportEmailActionTriggered); + connect(ui->submitBugReportAction, &QAction::triggered, this, &MenuBar::submitBugReportActionTriggered); connect(ui->aboutQtAction, &QAction::triggered, this, &QApplication::aboutQt); } -void MenuBar::newProject() +void MenuBar::newProjectActionTriggered() { writeToConsole("MenuBar: newProject() triggered"); } -void MenuBar::openProject() +void MenuBar::openProjectActionTriggered() { writeToConsole("MenuBar: openProject() triggered"); } -void MenuBar::exportSolution() +void MenuBar::exportSolutionActionTriggered() { writeToConsole("MenuBar: exportSolution() triggered"); } -void MenuBar::closeProject() +void MenuBar::closeProjectActionTriggered() { writeToConsole("MenuBar: closeProject() triggered"); } -void MenuBar::writeConsoleOutput() +void MenuBar::writeConsoleOutputActionTriggered() { QString fileName = QFileDialog::getSaveFileName(ui->centralwidget, tr("Save Console Output"), @@ -128,12 +128,12 @@ void MenuBar::writeConsoleOutput() } } -void MenuBar::resampleData() +void MenuBar::resampleDataActionTriggered() { writeToConsole("MenuBar: resampleData() triggered"); } -void MenuBar::writeBlankStationFile() +void MenuBar::writeBlankStationFileActionTriggered() { QString fileName = QFileDialog::getSaveFileName(ui->centralwidget, tr("Save Blank Station File"), @@ -153,7 +153,7 @@ void MenuBar::writeBlankStationFile() } } -void MenuBar::setConfigurationOption() +void MenuBar::setConfigurationOptionActionTriggered() { setConfigurationOptionDialog configDialog; @@ -186,7 +186,7 @@ void MenuBar::setConfigurationOption() CPLSetConfigOption( pszKey, pszVal ); } -void MenuBar::displayArcGISProGuide() +void MenuBar::displayArcGISProGuideActionTriggered() { QString displayFile = dataPath.absoluteFilePath("../doc/displaying_wind_vectors_in_ArcGIS_Pro.pdf"); displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path @@ -200,7 +200,7 @@ void MenuBar::displayArcGISProGuide() } } -void MenuBar::displayTutorial1() +void MenuBar::displayTutorial1ActionTriggered() { QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial1.pdf"); displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path @@ -214,7 +214,7 @@ void MenuBar::displayTutorial1() } } -void MenuBar::displayTutorial2() +void MenuBar::displayTutorial2ActionTriggered() { QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial2.pdf"); displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path @@ -228,7 +228,7 @@ void MenuBar::displayTutorial2() } } -void MenuBar::displayTutorial3() +void MenuBar::displayTutorial3ActionTriggered() { QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial3.pdf"); displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path @@ -242,7 +242,7 @@ void MenuBar::displayTutorial3() } } -void MenuBar::displayTutorial4() +void MenuBar::displayTutorial4ActionTriggered() { QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial4.pdf"); displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path @@ -256,7 +256,7 @@ void MenuBar::displayTutorial4() } } -void MenuBar::displayDemDownloadInstructions() +void MenuBar::displayDemDownloadInstructionsActionTriggered() { QString displayFile = dataPath.absoluteFilePath("../doc/download_elevation_file.pdf"); displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path @@ -270,7 +270,7 @@ void MenuBar::displayDemDownloadInstructions() } } -void MenuBar::displayFetchDemInstructions() +void MenuBar::displayFetchDemInstructionsActionTriggered() { QString displayFile = dataPath.absoluteFilePath("../doc/fetch_dem_instructions.pdf"); displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path @@ -284,7 +284,7 @@ void MenuBar::displayFetchDemInstructions() } } -void MenuBar::displayCommandLineInterfaceInstructions() +void MenuBar::displayCommandLineInterfaceInstructionsActionTriggered() { QString displayFile = dataPath.absoluteFilePath("../doc/CLI_instructions.pdf"); displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path @@ -298,7 +298,7 @@ void MenuBar::displayCommandLineInterfaceInstructions() } } -void MenuBar::aboutWindNinja() +void MenuBar::aboutWindNinjaActionTriggered() { QString aboutText = "

WindNinja

\n"; @@ -333,7 +333,7 @@ void MenuBar::aboutWindNinja() aboutText); } -void MenuBar::citeWindNinja() +void MenuBar::citeWindNinjaActionTriggered() { QString citeText = "

To cite WindNinja in a publication use:

"; @@ -351,12 +351,12 @@ void MenuBar::citeWindNinja() citeText); } -void MenuBar::supportEmail() +void MenuBar::supportEmailActionTriggered() { QDesktopServices::openUrl(QUrl("mailto:wind.ninja.support@gmail.com?subject=[windninja-support]")); } -void MenuBar::submitBugReport() +void MenuBar::submitBugReportActionTriggered() { QDesktopServices::openUrl(QUrl("https://github.com/firelab/windninja/issues/new")); } diff --git a/src/gui/menubar.h b/src/gui/menubar.h index 839b1b426..49ee83dc7 100644 --- a/src/gui/menubar.h +++ b/src/gui/menubar.h @@ -56,38 +56,38 @@ class MenuBar : public QObject signals: void writeToConsole(QString message, QColor color = Qt::white); - void openElevationInputFileMenuActionTriggered(); + void openElevationInputFileActionTriggered(); private slots: // functions for Menu actions // functions for QMenu fileMenu "File" actions - void newProject(); - void openProject(); - void exportSolution(); - void closeProject(); + void newProjectActionTriggered(); + void openProjectActionTriggered(); + void exportSolutionActionTriggered(); + void closeProjectActionTriggered(); // functions for QMenu optionsMenu "Options" actions - void writeConsoleOutput(); + void writeConsoleOutputActionTriggered(); // functions for QMenu toolsMenu "Tools" actions - void resampleData(); - void writeBlankStationFile(); - void setConfigurationOption(); + void resampleDataActionTriggered(); + void writeBlankStationFileActionTriggered(); + void setConfigurationOptionActionTriggered(); // functions for QMenu helpMenu "Help" actions // functions for sub QMenu displayingShapeFilesMenu "Displaying Shapefiles" actions - void displayArcGISProGuide(); + void displayArcGISProGuideActionTriggered(); // functions for sub QMenu tutorialsMenu "Tutorials" actions - void displayTutorial1(); - void displayTutorial2(); - void displayTutorial3(); - void displayTutorial4(); + void displayTutorial1ActionTriggered(); + void displayTutorial2ActionTriggered(); + void displayTutorial3ActionTriggered(); + void displayTutorial4ActionTriggered(); // functions for sub QMenu instructionsMenu "Instructions" actions - void displayDemDownloadInstructions(); - void displayFetchDemInstructions(); - void displayCommandLineInterfaceInstructions(); + void displayDemDownloadInstructionsActionTriggered(); + void displayFetchDemInstructionsActionTriggered(); + void displayCommandLineInterfaceInstructionsActionTriggered(); // functions for remaining non-sub QMenu actions - void aboutWindNinja(); - void citeWindNinja(); - void supportEmail(); - void submitBugReport(); + void aboutWindNinjaActionTriggered(); + void citeWindNinjaActionTriggered(); + void supportEmailActionTriggered(); + void submitBugReportActionTriggered(); private: Ui::MainWindow* ui; From cafa45a9fea009466bf625f1ff2c4547a5cea27f Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 18 Aug 2025 16:17:12 -0600 Subject: [PATCH 184/435] removed no longer needed openElevationInputFile menuBar action, commented out not yet filled resampleDem menuBar action. For issue #638 --- src/gui/mainwindow.cpp | 1 - src/gui/mainwindow.ui | 22 +++------------------- src/gui/menubar.cpp | 11 +++++------ src/gui/menubar.h | 3 +-- 4 files changed, 9 insertions(+), 28 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index df3f1963f..e8ebf6985 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -430,7 +430,6 @@ void MainWindow::connectSignals() connect(ui->pointInitializationCheckBox, &QCheckBox::clicked, this, &MainWindow::pointInitializationCheckBoxClicked); connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); - connect(menuBar, &MenuBar::openElevationInputFileActionTriggered, surfaceInput, &SurfaceInput::elevationInputFileOpenButtonClicked); connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); connect(surfaceInput, &SurfaceInput::requestRefresh, this, &MainWindow::refreshUI); connect(domainAverageInput, &DomainAverageInput::requestRefresh, this, &MainWindow::refreshUI); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 4713838ae..e7e2a55dd 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -4489,7 +4489,6 @@ QMenu::item:selected { -
@@ -4509,7 +4508,7 @@ QMenu::item:selected { true - + @@ -4598,21 +4597,6 @@ QMenu::item:selected { Close Current Project - - - - :/folder_page.png:/folder_page.png - - - Open &Elevation Input File - - - Open Surface Input File - - - Ctrl+D - - @@ -4657,7 +4641,7 @@ QMenu::item:selected { Ctrl+W - + diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp index 0d288798e..7ee8c868f 100755 --- a/src/gui/menubar.cpp +++ b/src/gui/menubar.cpp @@ -41,7 +41,6 @@ MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) connect(ui->openProjectAction, &QAction::triggered, this, &MenuBar::openProjectActionTriggered); connect(ui->exportSolutionAction, &QAction::triggered, this, &MenuBar::exportSolutionActionTriggered); connect(ui->closeProjectAction, &QAction::triggered, this, &MenuBar::closeProjectActionTriggered); - connect(ui->openElevationInputFileAction, &QAction::triggered, this, &MenuBar::openElevationInputFileActionTriggered); connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QCoreApplication::quit); // exit the entire app // QMenu optionsMenu "Options" actions @@ -50,7 +49,7 @@ MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) connect(ui->writeConsoleOutputAction, &QAction::triggered, this, &MenuBar::writeConsoleOutputActionTriggered); // QMenu toolsMenu "Tools" actions - connect(ui->resampleDataAction, &QAction::triggered, this, &MenuBar::resampleDataActionTriggered); + //connect(ui->resampleDataAction, &QAction::triggered, this, &MenuBar::resampleDataActionTriggered); connect(ui->writeBlankStationFileAction, &QAction::triggered, this, &MenuBar::writeBlankStationFileActionTriggered); connect(ui->setConfigurationOptionAction, &QAction::triggered, this, &MenuBar::setConfigurationOptionActionTriggered); @@ -128,10 +127,10 @@ void MenuBar::writeConsoleOutputActionTriggered() } } -void MenuBar::resampleDataActionTriggered() -{ - writeToConsole("MenuBar: resampleData() triggered"); -} +//void MenuBar::resampleDataActionTriggered() +//{ +// writeToConsole("MenuBar: resampleData() triggered"); +//} void MenuBar::writeBlankStationFileActionTriggered() { diff --git a/src/gui/menubar.h b/src/gui/menubar.h index 49ee83dc7..f55687add 100644 --- a/src/gui/menubar.h +++ b/src/gui/menubar.h @@ -56,7 +56,6 @@ class MenuBar : public QObject signals: void writeToConsole(QString message, QColor color = Qt::white); - void openElevationInputFileActionTriggered(); private slots: // functions for Menu actions @@ -68,7 +67,7 @@ private slots: // functions for QMenu optionsMenu "Options" actions void writeConsoleOutputActionTriggered(); // functions for QMenu toolsMenu "Tools" actions - void resampleDataActionTriggered(); + //void resampleDataActionTriggered(); void writeBlankStationFileActionTriggered(); void setConfigurationOptionActionTriggered(); // functions for QMenu helpMenu "Help" actions From 86a4333f8c9a5def77fdb2836590e8ac08f33656 Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 18 Aug 2025 16:30:31 -0600 Subject: [PATCH 185/435] set qtAbout menuBar icon using standard qtCreator icon, updated setconfigurationoptiondialog.ui with the few changes that were found when generating it again from scratch using the newly up to date qtCreator/Designer, and let mainwindow.ui adjust as it wants to now with my newly up to date qtCreator/Designer (slightly smaller window sizes for the gui). For issue #638 --- src/gui/mainwindow.ui | 21 ++++++++++++--------- src/gui/setconfigurationoptiondialog.ui | 4 ++-- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index e7e2a55dd..4517d4ea8 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -843,8 +843,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 550 - 646 + 578 + 503 @@ -1385,8 +1385,8 @@ li.checked::marker { content: "\2612"; } 0 - -7 - 544 + 0 + 346 661 @@ -2763,7 +2763,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 536 + 414 402 @@ -3460,7 +3460,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 536 + 381 318 @@ -4378,9 +4378,6 @@ li.checked::marker { content: "\2612"; } - - true - 0 @@ -4401,6 +4398,9 @@ li.checked::marker { content: "\2612"; } 100 + + true +
@@ -4858,6 +4858,9 @@ QMenu::item:selected { + + + About &Qt diff --git a/src/gui/setconfigurationoptiondialog.ui b/src/gui/setconfigurationoptiondialog.ui index 0dc884959..515baee0b 100644 --- a/src/gui/setconfigurationoptiondialog.ui +++ b/src/gui/setconfigurationoptiondialog.ui @@ -26,10 +26,10 @@ - Qt::Horizontal + Qt::Orientation::Horizontal - QDialogButtonBox::Cancel|QDialogButtonBox::Ok + QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok From 9961f50e236f2e06570f850b535f5d6c68b739f0 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 19 Aug 2025 10:08:18 -0600 Subject: [PATCH 186/435] Finished enabling point initilization by properly generating time lists based on time series, for #636 --- src/gui/mainwindow.cpp | 94 +++++++++++++++++++++++----- src/gui/pointinitializationinput.cpp | 4 +- src/ninja/CMakeLists.txt | 3 +- src/ninja/windninja.cpp | 16 ++--- 4 files changed, 88 insertions(+), 29 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 97fc20067..fd0f7ea09 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -589,9 +589,9 @@ void MainWindow::solveButtonClicked() { AppState& state = AppState::instance(); - int numNinjas; + int numNinjas = 0; NinjaArmyH *ninjaArmy = nullptr; - char **papszOptions; + char **papszOptions = nullptr; const char *initializationMethod; QList speeds; QList directions; @@ -618,17 +618,9 @@ void MainWindow::solveButtonClicked() { initializationMethod = "point"; - QDateTime start = ui->weatherStationDataStartDateTimeEdit->dateTime(); - QDateTime end = ui->weatherStationDataEndDateTimeEdit->dateTime(); - QVector year = {start.date().year(), end.date().year()}; - QVector month = {start.date().month(), end.date().month()}; - QVector day = {start.date().day(), end.date().day()}; - QVector hour = {start.time().hour(), end.time().hour()}; - QVector minute = {start.time().minute(), end.time().minute()}; - - QString DEMTimeZone = ui->timeZoneComboBox->currentText(); - std::vector stationFiles = pointInitializationInput->getStationFiles(); + QString DEMTimeZone = ui->timeZoneComboBox->currentText(); + QByteArray timeZoneBytes = ui->timeZoneComboBox->currentText().toUtf8(); std::vector stationFilesBytes; stationFilesBytes.reserve(stationFiles.size()); @@ -642,10 +634,82 @@ void MainWindow::solveButtonClicked() QString DEMPath = ui->elevationInputFileLineEdit->property("fullpath").toString(); numNinjas = 25; - int timeListSize = 2; bool momentumFlag = ui->momentumSolverCheckBox->isChecked(); - ninjaArmy = NinjaMakePointArmy - (year.data(), month.data(), day.data(), hour.data(), minute.data(), timeListSize, DEMTimeZone.toUtf8().data(), stationFileNames.data(), stationFileNames.size(), DEMPath.toUtf8().data(), true, momentumFlag, papszOptions); + + if(ui->pointInitializationTreeView->property("timeSeriesFlag").toBool()) + { + QDateTime start = ui->weatherStationDataStartDateTimeEdit->dateTime(); + QDateTime end = ui->weatherStationDataEndDateTimeEdit->dateTime(); + + QVector year = { start.date().year(), end.date().year() }; + QVector month = { start.date().month(), end.date().month() }; + QVector day = { start.date().day(), end.date().day() }; + QVector hour = { start.time().hour(), end.time().hour() }; + QVector minute = { start.time().minute(), end.time().minute() }; + + int nTimeSteps = ui->weatherStationDataTimestepsSpinBox->value(); + + QVector outYear(nTimeSteps); + QVector outMonth(nTimeSteps); + QVector outDay(nTimeSteps); + QVector outHour(nTimeSteps); + QVector outMinute(nTimeSteps); + + NinjaErr err = NinjaGetTimeList( + year.data(), month.data(), day.data(), + hour.data(), minute.data(), + outYear.data(), outMonth.data(), outDay.data(), + outHour.data(), outMinute.data(), + nTimeSteps, timeZoneBytes.data() + ); + if(err != NINJA_SUCCESS) + { + printf("NinjaGetTimeList: err = %d\n", err); + } + ninjaArmy = NinjaMakePointArmy + (outYear.data(), outMonth.data(), outDay.data(), outHour.data(), outMinute.data(), nTimeSteps, DEMTimeZone.toUtf8().data(), stationFileNames.data(), stationFileNames.size(), DEMPath.toUtf8().data(), true, momentumFlag, papszOptions); + } + else + { + int year, month, day, hour, minute; + QDateTime date = ui->weatherStationDataTextEdit->property("simulationTime").toDateTime(); + year = date.date().year(); + month = date.date().month(); + day = date.date().day(); + hour = date.time().hour(); + minute = date.time().minute(); + + int outYear, outMonth, outDay, outHour, outMinute; + + NinjaErr err = NinjaGenerateSingleTimeObject( + year, month, day, hour, minute, + timeZoneBytes.constData(), + &outYear, &outMonth, &outDay, &outHour, &outMinute + ); + if (err != NINJA_SUCCESS) + { + printf("NinjaGenerateSingleTimeObject: err = %d\n", err); + } + + QVector yearVec = { outYear }; + QVector monthVec = { outMonth }; + QVector dayVec = { outDay }; + QVector hourVec = { outHour }; + QVector minuteVec = { outMinute }; + + ninjaArmy = NinjaMakePointArmy( + yearVec.data(), monthVec.data(), dayVec.data(), + hourVec.data(), minuteVec.data(), + 1, + DEMTimeZone.toUtf8().data(), + stationFileNames.data(), + static_cast(stationFileNames.size()), + DEMPath.toUtf8().data(), + true, + momentumFlag, + papszOptions + ); + } } prepareArmy(ninjaArmy, numNinjas, initializationMethod); diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 2e57820aa..7c83c2c16 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -328,11 +328,13 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() if (!timeSeriesFlag) { QDateTime dateModified = QFileInfo(recentFileSelected).birthTime(); - //updateSingleTime() ui->weatherStationDataTextEdit->setText("Simulation time set to: " + dateModified.toString()); + ui->weatherStationDataTextEdit->setProperty("simulationTime", dateModified); } } + ui->pointInitializationTreeView->setProperty("timeSeriesFlag", timeSeriesFlag); } + state.isStationFileSelectionValid = true; for (int type : stationFileTypes) { if (type != stationFileTypes[0]) { diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt index 0e0c00d71..22487b2cc 100644 --- a/src/ninja/CMakeLists.txt +++ b/src/ninja/CMakeLists.txt @@ -105,7 +105,8 @@ set(NINJA_SOURCES air.cpp wxStation.cpp windninja.cpp gcp_wx_init.cpp - ninjaArmy.h) + ninjaArmy.h + windninja.h) if(NINJAFOAM) set(NINJA_SOURCES ${NINJA_SOURCES} ninjafoam.cpp diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index c49a54886..42179d2e3 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -195,17 +195,10 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakePointArmy NinjaArmyH* army; try { - std::vector timeList = pointInitialization::getTimeList( - yearList[0], monthList[0], dayList[0], - hourList[0], minuteList[0], - yearList[1], monthList[1], dayList[1], - hourList[1], minuteList[1], - 25, std::string(timeZone) - ); - - // for(size_t i=0; i < timeListSize; i++){ - // timeList.push_back(boost::posix_time::ptime(boost::gregorian::date(yearList[i], monthList[i], dayList[i]), boost::posix_time::time_duration(hourList[i],minuteList[i],0,0))); - // } + std::vector timeList; + for(size_t i=0; i < timeListSize; i++){ + timeList.push_back(boost::posix_time::ptime(boost::gregorian::date(yearList[i], monthList[i], dayList[i]), boost::posix_time::time_duration(hourList[i],minuteList[i],0,0))); + } std::vector sFiles; for (int i = 0; i < numStationFiles; i++) @@ -214,7 +207,6 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakePointArmy } pointInitialization::storeFileNames(sFiles); - army = reinterpret_cast( new ninjaArmy() ); reinterpret_cast( army )->makePointArmy ( timeList, From 356ee71c4f8e7ce3c7ac22501a9075f016c43cac Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 19 Aug 2025 10:42:55 -0600 Subject: [PATCH 187/435] Removed refresh button and adjusted signal and slots accordingly, added select all and none buttons in .ui, for #636 --- src/gui/mainwindow.cpp | 1 + src/gui/mainwindow.ui | 11 +++++++++-- src/gui/pointinitializationinput.cpp | 5 +---- src/gui/pointinitializationinput.h | 2 +- src/gui/surfaceinput.cpp | 2 +- src/gui/surfaceinput.h | 1 + src/ninja/CMakeLists.txt | 4 +--- 7 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index fd0f7ea09..e082f0414 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -474,6 +474,7 @@ void MainWindow::connectSignals() connect(ui->geospatialPDFFilesMeshResolutionGroupBox, &QGroupBox::toggled, this, &MainWindow::geospatialPDFFilesMeshResolutionGroupBoxToggled); connect(ui->outputDirectoryButton, &QPushButton::clicked, this, &MainWindow::outputDirectoryButtonClicked); connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); + connect(surfaceInput, SIGNAL(setupTreeView()), pointInitializationInput, SLOT(setupTreeView())); } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index d50536707..ce4f2ae96 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -1937,9 +1937,16 @@ li.checked::marker { content: "\2612"; } - + - Refresh Weather Stations + Select All + + + + + + + Select None diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 7c83c2c16..4fcaa2aa8 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -37,7 +37,6 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* ui->pointInitializationDataTimeStackedWidget->setCurrentIndex(0); ui->weatherStationDataTimeStackedWidget->setCurrentIndex(0); ui->pointInitializationDownloadDataButton->setIcon(QIcon(":/server_go.png")); - ui->pointInitializationRefreshButton->setIcon(QIcon(":/arrow_rotate_clockwise.png")); ui->pointInitializationWriteStationKMLCheckBox->setIcon(QIcon(":/weather_cloudy.png")); ui->weatherStationDataDownloadButton->setIcon(QIcon(":/server_go.png")); ui->weatherStationDataDownloadCancelButton->setIcon(QIcon(":/cancel.png")); @@ -53,7 +52,6 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* connect(ui->weatherStationDataSourceComboBox, &QComboBox::currentIndexChanged, this, &PointInitializationInput::weatherStationDataSourceComboBoxCurrentIndexChanged); connect(ui->weatherStationDataTimeComboBox, &QComboBox::currentIndexChanged, this, &PointInitializationInput::weatherStationDataTimeComboBoxCurrentIndexChanged); connect(ui->weatherStationDataDownloadButton, &QPushButton::clicked, this, &PointInitializationInput::weatherStationDataDownloadButtonClicked); - connect(ui->pointInitializationRefreshButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitialziationRefreshButtonClicked); } void PointInitializationInput::pointInitializationGroupBoxToggled(bool checked) @@ -201,7 +199,6 @@ void PointInitializationInput::fetchStationDataFinished() } ui->inputsStackedWidget->setCurrentIndex(10); - ui->pointInitializationRefreshButton->click(); } void PointInitializationInput::weatherStationDataSourceComboBoxCurrentIndexChanged(int index) @@ -214,7 +211,7 @@ void PointInitializationInput::weatherStationDataTimeComboBoxCurrentIndexChanged ui->weatherStationDataTimeStackedWidget->setCurrentIndex(index); } -void PointInitializationInput::pointInitialziationRefreshButtonClicked() +void PointInitializationInput::setupTreeView() { stationFileSystemModel = new QFileSystemModel; QString path = ui->elevationInputFileLineEdit->property("fullpath").toString(); diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index 63c4f88e5..cd10e5bcf 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -65,7 +65,7 @@ private slots: void weatherStationDataSourceComboBoxCurrentIndexChanged(int index); void weatherStationDataTimeComboBoxCurrentIndexChanged(int index); void weatherStationDataDownloadButtonClicked(); - void pointInitialziationRefreshButtonClicked(); + void setupTreeView(); void pointInitializationTreeViewItemSelectionChanged(); private: diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 3d14cd3ad..38c2a0599 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -250,7 +250,7 @@ void SurfaceInput::elevationInputFileLineEditTextChanged(const QString &arg1) webView->page()->runJavaScript(js); emit requestRefresh(); - emit ui->pointInitializationRefreshButton->clicked(); + emit setupTreeView(); } void SurfaceInput::elevationInputFileOpenButtonClicked() diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index 27b826177..6c1a0b6b8 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -62,6 +62,7 @@ class SurfaceInput : public QObject signals: void requestRefresh(); + void setupTreeView(); public slots: void boundingBoxReceived(double north, double south, double east, double west); diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt index 22487b2cc..9f13004ff 100644 --- a/src/ninja/CMakeLists.txt +++ b/src/ninja/CMakeLists.txt @@ -104,9 +104,7 @@ set(NINJA_SOURCES air.cpp wxModelInitializationFactory.cpp wxStation.cpp windninja.cpp - gcp_wx_init.cpp - ninjaArmy.h - windninja.h) + gcp_wx_init.cpp) if(NINJAFOAM) set(NINJA_SOURCES ${NINJA_SOURCES} ninjafoam.cpp From d9c6833ceb7de47f6fa34acccbc4fde12879be58 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 19 Aug 2025 11:45:10 -0600 Subject: [PATCH 188/435] Added functionality for select all and select none button, proper logic needs work, for #636 --- src/gui/CMakeLists.txt.autosave | 133 --------------------------- src/gui/mainwindow.cpp | 2 +- src/gui/mainwindow.ui | 4 +- src/gui/pointinitializationinput.cpp | 53 ++++++++++- src/gui/pointinitializationinput.h | 12 ++- 5 files changed, 63 insertions(+), 141 deletions(-) delete mode 100644 src/gui/CMakeLists.txt.autosave diff --git a/src/gui/CMakeLists.txt.autosave b/src/gui/CMakeLists.txt.autosave deleted file mode 100644 index 2de868992..000000000 --- a/src/gui/CMakeLists.txt.autosave +++ /dev/null @@ -1,133 +0,0 @@ -# THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) -# MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT -# IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 -# OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT -# PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES -# LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER -# PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, -# RELIABILITY, OR ANY OTHER CHARACTERISTIC. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -# DEALINGS IN THE SOFTWARE. - -cmake_minimum_required(VERSION 2.6) - -QT4_WRAP_UI(QTUI_H_SRCS WidgetDownloadDEM.ui - setconfigdialog.ui - stationFetchWidget.ui) - -set(NINJA_GUI_INCLUDES consoleDockWidget.h - diurnalInput.h - stabilityInput.h - fbOutput.h - googleOutput.h - latLonWidget.h - mainWindow.h - metaWindWidget.h - nativeSolverInput.h - ninjafoamInput.h - outputHeightWidget.h - outputMetaData.h - pdfOutput.h - pointInput.h - shapeOutput.h - solvePage.h - solveThread.h - splash.h - surfaceInput.h - timeZoneWidget.h - #vec3f.h - vtkOutput.h - weatherModel.h - WidgetDownloadDEM.h - stationFetchWidget.h - windInput.h - windInputTable.h - WindNinjaTree.h - GoogleMapsInterface.h - setconfigdialog.h - ${QTUI_H_SRCS}) - -include_directories(${QT_INCLUDES} - ${Boost_INCLUDE_DIRS} - ${NETCDF_INCLUDES} - ${GDAL_SYSTEM_INCLUDE} ${GDAL_INCLUDE_DIR} - ${CURL_INCLUDE_DIR} - ${PROJECT_SOURCE_DIR}/src - ${PROJECT_SOUclearRCE_DIR}/src/ninja - ${CMAKE_CURRENT_BINARY_DIR}) - -QT4_WRAP_CPP(NINJA_GUI_INCLUDES_MOC ${NINJA_GUI_INCLUDES}) -QT4_ADD_RESOURCES(NINJA_GUI_RESOURCES ${PROJECT_SOURCE_DIR}/wn-resources.qrc) - -set(NINJA_GUI_SOURCES cmake_gui.cpp - ${PROJECT_SOURCE_DIR}/src/ninja/cli.cpp - consoleDockWidget.cpp - diurnalInput.cpp - stabilityInput.cpp - fbOutput.cpp - googleOutput.cpp - latLonWidget.cpp - mainWindow.cpp - metaWindWidget.cpp - outputHeightWidget.cpp - outputMetaData.cpp - nativeSolverInput.cpp - ninjafoamInput.cpp - pdfOutput.cpp - pointInput.cpp - shapeOutput.cpp - solvePage.cpp - solveThread.cpp - splash.cpp - surfaceInput.cpp - timeZoneWidget.cpp - vec3f.cpp - vtkOutput.cpp - weatherModel.cpp - windInput.cpp - windInputTable.cpp - WindNinjaTree.cpp - WidgetDownloadDEM.cpp - stationFetchWidget.cpp - GoogleMapsInterface.cpp - setconfigdialog.cpp - ${QTUI_H_SRCS}) -if(WIN32) - set(NINJA_GUI_SOURCES ${NINJA_GUI_SOURCES} - ${PROJECT_SOURCE_DIR}/wn-ms-resource.rc) - add_definitions(-DQT_NO_DEBUG_OUTPUT) -endif(WIN32) - -set(LINK_LIBS ${QT_LIBRARIES} - ${GDAL_LIBRARY} - ${Boost_LIBRARIES} - ${CURL_LIBRARIES} - ${NETCDF_LIBRARIES_C}) - -if(WIN32) - set(LINK_LIBS ${LINK_LIBS} ${PROJECT_BINARY_DIR}/src/ninja/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}ninja${CMAKE_STATIC_LIBRARY_SUFFIX}) - if(NOT ENABLE_CONSOLE) - set(LINK_LIBS ${LINK_LIBS} ${QT_QTMAIN_LIBRARY}) - set(GUI_TYPE WIN32) - else(NOT ENABLE_CONSOLE) - set(GUI_TYPE "") - endif(NOT ENABLE_CONSOLE) -else(WIN32) - set(LINK_LIBS ${LINK_LIBS} ${PROJECT_BINARY_DIR}/src/ninja/${CMAKE_SHARED_LIBRARY_PREFIX}ninja${CMAKE_SHARED_LIBRARY_SUFFIX}) -endif(WIN32) - -add_executable(WindNinja ${GUI_TYPE} - ${NINJA_GUI_INCLUDES_MOC} - ${NINJA_GUI_RESOURCES} - ${NINJA_GUI_SOURCES}) - -target_link_libraries(WindNinja ${LINK_LIBS}) -add_dependencies(WindNinja ninja) -install(TARGETS WindNinja DESTINATION bin COMPONENT apps) - diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index e082f0414..d3c772bb9 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -619,7 +619,7 @@ void MainWindow::solveButtonClicked() { initializationMethod = "point"; - std::vector stationFiles = pointInitializationInput->getStationFiles(); + QVector stationFiles = pointInitializationInput->getStationFiles(); QString DEMTimeZone = ui->timeZoneComboBox->currentText(); QByteArray timeZoneBytes = ui->timeZoneComboBox->currentText().toUtf8(); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index ce4f2ae96..204839733 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -1937,14 +1937,14 @@ li.checked::marker { content: "\2612"; } - + Select All - + Select None diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 4fcaa2aa8..4309abce3 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -52,6 +52,10 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* connect(ui->weatherStationDataSourceComboBox, &QComboBox::currentIndexChanged, this, &PointInitializationInput::weatherStationDataSourceComboBoxCurrentIndexChanged); connect(ui->weatherStationDataTimeComboBox, &QComboBox::currentIndexChanged, this, &PointInitializationInput::weatherStationDataTimeComboBoxCurrentIndexChanged); connect(ui->weatherStationDataDownloadButton, &QPushButton::clicked, this, &PointInitializationInput::weatherStationDataDownloadButtonClicked); + connect(ui->pointInitializationSelectAllButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitializationSelectAllButtonClicked); + connect(ui->pointInitializationSelectNoneButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitializationSelectNoneButtonClicked); + connect(ui->pointInitializationTreeView, &QTreeView::expanded, this, &PointInitializationInput::folderExpanded); + } void PointInitializationInput::pointInitializationGroupBoxToggled(bool checked) @@ -342,6 +346,52 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() emit requestRefresh(); } +void PointInitializationInput::pointInitializationSelectAllButtonClicked() +{ + QItemSelectionModel *selectionModel = ui->pointInitializationTreeView->selectionModel(); + + QModelIndex folderIndex; + if (openStationFolders.isEmpty()) + { + QFileInfo fileInfo(ui->elevationInputFileLineEdit->property("fullpath").toString()); + folderIndex = stationFileSystemModel->index(fileInfo.absolutePath()); + } + else + { + folderIndex = stationFileSystemModel->index(openStationFolders.back()); + } + + int rowCount = stationFileSystemModel->rowCount(folderIndex); + QItemSelection selection; + for (int i = 0; i < rowCount; i++) { + QModelIndex stationFile = stationFileSystemModel->index(i, 0, folderIndex); + + if (stationFileSystemModel->isDir(stationFile)) + continue; + + selection.select(stationFile, stationFile); + } + + selectionModel->select(selection, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); +} + +void PointInitializationInput::pointInitializationSelectNoneButtonClicked() +{ + ui->pointInitializationTreeView->selectionModel()->clearSelection(); +} + +void PointInitializationInput::folderExpanded(const QModelIndex &index) +{ + openStationFolders.push_back(stationFileSystemModel->filePath(index)); +} + +void PointInitializationInput::folderCollapsed(const QModelIndex &index) +{ + openStationFolders.pop_back(); +} + + + void PointInitializationInput::readStationTime(QString startDateTime, QString stopDateTime) { QString stationTimeFormat = "yyyy-MM-ddTHH:mm:ssZ"; @@ -395,7 +445,8 @@ void PointInitializationInput::updateTimeSteps() qDebug() << "[STATION FETCH] Suggested Timesteps:" << timesteps; } -vector PointInitializationInput::getStationFiles() + +QVector PointInitializationInput::getStationFiles() { return stationFiles; } diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index cd10e5bcf..1656f80b9 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -52,7 +52,7 @@ class PointInitializationInput : public QObject Q_OBJECT public: PointInitializationInput(Ui::MainWindow* ui, QObject* parent = nullptr); - vector getStationFiles(); + QVector getStationFiles(); signals: @@ -65,8 +65,12 @@ private slots: void weatherStationDataSourceComboBoxCurrentIndexChanged(int index); void weatherStationDataTimeComboBoxCurrentIndexChanged(int index); void weatherStationDataDownloadButtonClicked(); - void setupTreeView(); void pointInitializationTreeViewItemSelectionChanged(); + void pointInitializationSelectAllButtonClicked(); + void pointInitializationSelectNoneButtonClicked(); + void setupTreeView(); + void folderExpanded(const QModelIndex &index); + void folderCollapsed(const QModelIndex &index); private: Ui::MainWindow *ui; @@ -74,9 +78,9 @@ private slots: QProgressDialog *progress; QFutureWatcher *futureWatcher; QFileSystemModel *stationFileSystemModel; - QString currentDEMFilePath; QDateTime maxStationTime, minStationTime; - vector stationFiles; + QVector stationFiles; + QVector openStationFolders; static int fetchStationFromBbox(QVector year, QVector month, From ae32e6f242a77b130cca79c88602743ada24777d Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 19 Aug 2025 11:53:36 -0600 Subject: [PATCH 189/435] Fixed a missing connect statement for collapsed folders, for #636 --- src/gui/pointinitializationinput.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 4309abce3..99163e74d 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -55,7 +55,7 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* connect(ui->pointInitializationSelectAllButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitializationSelectAllButtonClicked); connect(ui->pointInitializationSelectNoneButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitializationSelectNoneButtonClicked); connect(ui->pointInitializationTreeView, &QTreeView::expanded, this, &PointInitializationInput::folderExpanded); - + connect(ui->pointInitializationTreeView, &QTreeView::collapsed, this, &PointInitializationInput::folderCollapsed); } void PointInitializationInput::pointInitializationGroupBoxToggled(bool checked) @@ -387,7 +387,8 @@ void PointInitializationInput::folderExpanded(const QModelIndex &index) void PointInitializationInput::folderCollapsed(const QModelIndex &index) { - openStationFolders.pop_back(); + QString path = stationFileSystemModel->filePath(index); + openStationFolders.removeOne(path); } From cf692e5756619e63d81699b6707f2082fb60833d Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 19 Aug 2025 12:21:53 -0600 Subject: [PATCH 190/435] Added station kml function to C API and exposed in through the GUI, for #636 --- src/gui/mainwindow.cpp | 8 ++++++++ src/ninja/windninja.cpp | 30 +++++++++++++++++++++++++++--- src/ninja/windninja.h | 5 +++++ 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index d3c772bb9..86696e2e7 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -902,6 +902,14 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i /* * Sets Simulation Variables */ + if(ui->pointInitializationGroupBox->isChecked()) + { + err = NinjaSetStationKML(ninjaArmy, i, ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8().constData(), ui->outputDirectoryLineEdit->text().toUtf8().constData(), ui->outputSpeedUnitsComboBox->currentText().toUtf8().constData(), papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetStationKML: err = %d\n", err); + } + } err = NinjaSetCommunication(ninjaArmy, i, "cli", papszOptions); if(err != NINJA_SUCCESS) { diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 42179d2e3..fb49e2ecb 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -1550,6 +1550,33 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetOutputBufferClipping } } +/** + * \brief Set station kml output for a point initialization simulation. + * + * \param army An opaque handle to a valid ninjaArmy. + * \param nIndex The run to apply the setting to. + * \param demFileName The filepath of the simulation DEM. + * \param outputDirectory The outputDirectory location for this file. + * \param outputSpeedUnits The output speed units ("mph", "mps", "kph", "kts") + * + * \return NINJA_SUCCESS on success, non-zero otherwise. + */ +WINDNINJADLL_EXPORT NinjaErr NinjaSetStationKML + ( NinjaArmyH * army, const int nIndex, const char * demFileName, const char * outputDirectory, const char * outputSpeedUnits, char ** papszOptions) +{ + + if( NULL != army ) + { + wxStation::writeKmlFile( reinterpret_cast( army )->getWxStations(nIndex), demFileName, outputDirectory, velocityUnits::getUnit(outputSpeedUnits)); + return NINJA_SUCCESS; + } + else + { + return NINJA_E_NULL_PTR; + } +} + + /** * \brief Set the flag to write the weather model winds used for initialzation as * a Google Earth file. @@ -2186,7 +2213,4 @@ WINDNINJADLL_EXPORT NinjaErr NinjaGenerateSingleTimeObject( return NINJA_SUCCESS; } - - - } diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 764aac148..1b64b4684 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -192,6 +192,8 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT const char * NinjaGetInitializationMethod ( NinjaArmyH * ninjaArmy, const int nIndex, char ** options ); + + /*----------------------------------------------------------------------------- * Dust Methods *-----------------------------------------------------------------------------*/ @@ -269,6 +271,9 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaSetOutputBufferClipping ( NinjaArmyH * ninjaArmy, const int nIndex, const double percent, char ** options ); + WINDNINJADLL_EXPORT NinjaErr NinjaSetStationKML + ( NinjaArmyH * ninjaArmy, const int nIndex, const char * demFileName, const char * outputDirectory, const char * outputSpeedUnits, char ** papszOptions); + WINDNINJADLL_EXPORT NinjaErr NinjaSetWxModelGoogOutFlag ( NinjaArmyH * ninjaArmy, const int nIndex, const bool flag, char ** options ); From bfb296740dd01e7b81f57ad7fc5aaf5168d674d2 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 19 Aug 2025 14:51:38 -0600 Subject: [PATCH 191/435] Cleaned up point initialization input class and change how the tree view expansion work in GUI, for #636 --- src/gui/mainwindow.cpp | 9 ++-- src/gui/mainwindow.h | 1 - src/gui/mainwindow.ui | 78 +++++++++++++++++++++------- src/gui/pointinitializationinput.cpp | 75 ++++++++++---------------- 4 files changed, 89 insertions(+), 74 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 86696e2e7..e23cd5e29 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -593,13 +593,14 @@ void MainWindow::solveButtonClicked() int numNinjas = 0; NinjaArmyH *ninjaArmy = nullptr; char **papszOptions = nullptr; - const char *initializationMethod; - QList speeds; - QList directions; + const char *initializationMethod = nullptr; if (state.isDomainAverageInitializationValid) { initializationMethod = "domain_average"; + QList speeds; + QList directions; + int rowCount = ui->domainAverageTable->rowCount(); for (int row = 0; row < rowCount; ++row) { QTableWidgetItem* speedItem = ui->domainAverageTable->item(row, 0); @@ -634,7 +635,7 @@ void MainWindow::solveButtonClicked() QString DEMPath = ui->elevationInputFileLineEdit->property("fullpath").toString(); - numNinjas = 25; + numNinjas = ui->weatherStationDataTimestepsSpinBox->value(); bool momentumFlag = ui->momentumSolverCheckBox->isChecked(); if(ui->pointInitializationTreeView->property("timeSeriesFlag").toBool()) diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 63b695aa4..127adeca9 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -125,6 +125,5 @@ private slots: void treeItemClicked(QTreeWidgetItem *item, int column); void prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* initializationMethod); void setOutputFlags(NinjaArmyH *ninjaArmy, int i); - }; #endif // MAINWINDOW_H diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 204839733..7a432e496 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -1801,7 +1801,7 @@ li.checked::marker { content: "\2612"; } 16777215 - + 5 @@ -1817,7 +1817,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -1834,16 +1834,22 @@ li.checked::marker { content: "\2612"; } 0 0 579 - 406 + 654 - + + + 0 + 0 + + + 0 - 0 + 1 @@ -1852,6 +1858,12 @@ li.checked::marker { content: "\2612"; } 0 + + + 16777215 + 16777215 + + Point Initialization @@ -1904,6 +1916,33 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + + 0 + 0 + + + + QFrame::Shadow::Sunken + true @@ -1922,9 +1961,9 @@ li.checked::marker { content: "\2612"; } - + - + Qt::Orientation::Horizontal @@ -2042,6 +2081,18 @@ li.checked::marker { content: "\2612"; } false + + 1 + + + 99999 + + + 1 + + + 24 + @@ -2085,19 +2136,6 @@ li.checked::marker { content: "\2612"; } - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 99163e74d..3c734ea63 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -36,15 +36,16 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* ui->weatherStationDataSourceStackedWidget->setCurrentIndex(0); ui->pointInitializationDataTimeStackedWidget->setCurrentIndex(0); ui->weatherStationDataTimeStackedWidget->setCurrentIndex(0); + ui->pointInitializationDownloadDataButton->setIcon(QIcon(":/server_go.png")); ui->pointInitializationWriteStationKMLCheckBox->setIcon(QIcon(":/weather_cloudy.png")); ui->weatherStationDataDownloadButton->setIcon(QIcon(":/server_go.png")); ui->weatherStationDataDownloadCancelButton->setIcon(QIcon(":/cancel.png")); + ui->downloadBetweenDatesStartTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); ui->downloadBetweenDatesEndTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); ui->weatherStationDataStartDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); ui->weatherStationDataEndDateTimeEdit->setDateTime(QDateTime::currentDateTime()); - ui->weatherStationDataTimestepsSpinBox->setValue(24); connect(ui->pointInitializationGroupBox, &QGroupBox::toggled, this, &PointInitializationInput::pointInitializationGroupBoxToggled); connect(ui->pointInitializationDownloadDataButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitializationDownloadDataButtonClicked); @@ -56,6 +57,7 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* connect(ui->pointInitializationSelectNoneButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitializationSelectNoneButtonClicked); connect(ui->pointInitializationTreeView, &QTreeView::expanded, this, &PointInitializationInput::folderExpanded); connect(ui->pointInitializationTreeView, &QTreeView::collapsed, this, &PointInitializationInput::folderCollapsed); + connect(ui->pointInitializationTreeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &PointInitializationInput::pointInitializationTreeViewItemSelectionChanged); } void PointInitializationInput::pointInitializationGroupBoxToggled(bool checked) @@ -93,16 +95,11 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() QVector hour = {start.time().hour(), end.time().hour()}; QVector minute = {start.time().minute(), end.time().minute()}; - bool fetchLatestFlag = false; - if(ui->weatherStationDataTimeComboBox->currentIndex() == 0) - { - fetchLatestFlag = true; - } + bool fetchLatestFlag = ui->weatherStationDataTimeComboBox->currentIndex() ? 0 : 1; QString outputPath = ui->outputDirectoryLineEdit->text(); QString elevationFile = ui->elevationInputFileLineEdit->property("fullpath").toString(); - QString osTimeZone = "UTC"; - + QString DEMTimeZone = ui->timeZoneComboBox->currentText(); progress = new QProgressDialog("Fetching Station Data...", QString(), 0, 0, ui->centralwidget); progress->setWindowModality(Qt::WindowModal); @@ -120,7 +117,7 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() future = QtConcurrent::run(&PointInitializationInput::fetchStationFromBbox, year, month, day, hour, minute, elevationFile, buffer, units, - osTimeZone, fetchLatestFlag, outputPath); + DEMTimeZone, fetchLatestFlag, outputPath); } else { @@ -128,7 +125,7 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() future = QtConcurrent::run(&PointInitializationInput::fetchStationByName, year, month, day, hour, minute, elevationFile, stationList, - osTimeZone, fetchLatestFlag, outputPath); + DEMTimeZone, fetchLatestFlag, outputPath); } futureWatcher->setFuture(future); @@ -203,6 +200,8 @@ void PointInitializationInput::fetchStationDataFinished() } ui->inputsStackedWidget->setCurrentIndex(10); + disconnect(futureWatcher, &QFutureWatcher::finished, + this, &PointInitializationInput::fetchStationDataFinished); } void PointInitializationInput::weatherStationDataSourceComboBoxCurrentIndexChanged(int index) @@ -217,20 +216,12 @@ void PointInitializationInput::weatherStationDataTimeComboBoxCurrentIndexChanged void PointInitializationInput::setupTreeView() { - stationFileSystemModel = new QFileSystemModel; + stationFileSystemModel = new QFileSystemModel(this); QString path = ui->elevationInputFileLineEdit->property("fullpath").toString(); - if(path.isEmpty()) - { - delete stationFileSystemModel; - return; - } QFileInfo fileInfo(path); - stationFileSystemModel->setRootPath(fileInfo.absolutePath()); - QStringList filters; - filters<<"*.csv"; - filters<<"WXSTATIONS-*"; - stationFileSystemModel->setNameFilters(filters); + stationFileSystemModel->setRootPath(fileInfo.absolutePath()); + stationFileSystemModel->setNameFilters({"*.csv", "WXSTATIONS-*"}); stationFileSystemModel->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); stationFileSystemModel->setNameFilterDisables(false); @@ -242,11 +233,9 @@ void PointInitializationInput::setupTreeView() ui->pointInitializationTreeView->header()->setSectionResizeMode(QHeaderView::Stretch); ui->pointInitializationTreeView->header()->setSectionResizeMode(0, QHeaderView::Stretch); ui->pointInitializationTreeView->header()->setSectionResizeMode(3, QHeaderView::ResizeToContents); + ui->pointInitializationTreeView->setUniformRowHeights(true); ui->pointInitializationTreeView->hideColumn(1); ui->pointInitializationTreeView->hideColumn(2); - - connect(ui->pointInitializationTreeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &PointInitializationInput::pointInitializationTreeViewItemSelectionChanged); - } void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() @@ -255,7 +244,7 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() QModelIndexList selectedRows = ui->pointInitializationTreeView->selectionModel()->selectedRows(); stationFiles.clear(); - vector stationFileTypes; + QVector stationFileTypes; maxStationTime = QDateTime(); minStationTime = QDateTime(); @@ -276,13 +265,13 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() QString recentFileSelected = stationFileSystemModel->filePath(selectedRows[i]); stationFiles.push_back(recentFileSelected); - qDebug() << "[STATION FETCH] Selected file path:" << recentFileSelected; + qDebug() << "[GUI-Point] Selected file path:" << recentFileSelected; QByteArray filePathBytes = recentFileSelected.toUtf8(); const char* filePath = filePathBytes.constData(); char** papszOptions = nullptr; int stationHeader = NinjaGetHeaderVersion(filePath, papszOptions); - qDebug() << "[STATION FETCH] Station Header: " << stationHeader; + qDebug() << "[GUI-Point] Station Header: " << stationHeader; bool timeSeriesFlag = true; if (stationHeader != 1) @@ -298,25 +287,25 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() OGRLayer* poLayer = hDS->GetLayer(0); poLayer->ResetReading(); qint64 lastIndex = poLayer->GetFeatureCount(); - qDebug() << "[STATION FETCH] Number of Time Entries:" << lastIndex; + qDebug() << "[GUI-Point] Number of Time Entries:" << lastIndex; OGRFeature* poFeature = poLayer->GetFeature(1); // Skip header, first time in series QString startDateTime(poFeature->GetFieldAsString(15)); // Time should be in 15th column (0-14) - qDebug() << "[STATION FETCH] Station start time:" << startDateTime; + qDebug() << "[GUI-Point] Station start time:" << startDateTime; poFeature = poLayer->GetFeature(lastIndex); // last time in series QString stopDateTime(poFeature->GetFieldAsString(15)); - qDebug() << "[STATION FETCH] Station end Time:" << stopDateTime; + qDebug() << "[GUI-Point] Station end Time:" << stopDateTime; if (startDateTime.isEmpty() && stopDateTime.isEmpty()) // No time series { - qDebug() << "[STATION FETCH] File cannot be used for Time Series"; + qDebug() << "[GUI-Point] File cannot be used for Time Series"; timeSeriesFlag = false; stationFileTypes.push_back(0); } else if (!startDateTime.isEmpty() && !stopDateTime.isEmpty()) // Some type of time series { - qDebug() << "[STATION FETCH] File can be used for Time Series, suggesting time series parameters..."; + qDebug() << "[GUI-Point] File can be used for Time Series, suggesting time series parameters..."; readStationTime(startDateTime, stopDateTime); stationFileTypes.push_back(1); } @@ -391,8 +380,6 @@ void PointInitializationInput::folderCollapsed(const QModelIndex &index) openStationFolders.removeOne(path); } - - void PointInitializationInput::readStationTime(QString startDateTime, QString stopDateTime) { QString stationTimeFormat = "yyyy-MM-ddTHH:mm:ssZ"; @@ -400,7 +387,7 @@ void PointInitializationInput::readStationTime(QString startDateTime, QString st QTimeZone timeZone(DEMTimeZone.toUtf8()); if (!timeZone.isValid()) { - qWarning() << "[STATION FETCH] Invalid time zone:" << DEMTimeZone; + qWarning() << "[GUI-Point] Invalid time zone:" << DEMTimeZone; timeZone = QTimeZone::systemTimeZone(); } @@ -421,8 +408,8 @@ void PointInitializationInput::readStationTime(QString startDateTime, QString st maxStationTime = endTimeDEMTimeZone; } - qDebug() << "[STATION FETCH] Start Time (" << DEMTimeZone << "):" << minStationTime.toString(); - qDebug() << "[STATION FETCH] Stop Time (" << DEMTimeZone << "):" << maxStationTime.toString(); + qDebug() << "[GUI-Point] Start Time (" << DEMTimeZone << "):" << minStationTime.toString(); + qDebug() << "[GUI-Point] Stop Time (" << DEMTimeZone << "):" << maxStationTime.toString(); ui->weatherStationDataStartTimeLabel->setText("Start Time (" + DEMTimeZone + "):"); ui->weatherStationDataEndTimeLabel->setText("End Time (" + DEMTimeZone + "):"); @@ -432,21 +419,11 @@ void PointInitializationInput::readStationTime(QString startDateTime, QString st ui->weatherStationDataEndDateTimeEdit->setEnabled(true); ui->weatherStationDataTimestepsSpinBox->setEnabled(true); - updateTimeSteps(); -} - -void PointInitializationInput::updateTimeSteps() -{ - int timesteps = qMax(2, static_cast( - ui->weatherStationDataStartDateTimeEdit->dateTime().secsTo( - ui->weatherStationDataEndDateTimeEdit->dateTime() - ) / 3600 - )); + int timesteps = qMax(2, static_cast(minStationTime.secsTo(maxStationTime) / 3600)); ui->weatherStationDataTimestepsSpinBox->setValue(timesteps); - qDebug() << "[STATION FETCH] Suggested Timesteps:" << timesteps; + qDebug() << "[GUI-Point] Suggested Timesteps:" << timesteps; } - QVector PointInitializationInput::getStationFiles() { return stationFiles; From 5b1f33b9d987863576ca47a059441b7737e506a5 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 19 Aug 2025 16:35:14 -0600 Subject: [PATCH 192/435] Added file path for windninja.h --- src/gui/menubar.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/menubar.h b/src/gui/menubar.h index f55687add..b578b4cc7 100644 --- a/src/gui/menubar.h +++ b/src/gui/menubar.h @@ -32,7 +32,7 @@ #include "setconfigurationoptiondialog.h" -#include "windninja.h" +#include "../ninja/windninja.h" #include "../ninja/gdal_util.h" #include "ninja_version.h" #include From 41e94bf96f3532989ed3e0453bf035ee64c6b36a Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 20 Aug 2025 10:23:00 -0600 Subject: [PATCH 193/435] Refactored code to match style in GUI, simplified some functions, added emit keyword to signal calls, for #638 --- src/gui/menubar.cpp | 260 +++++++++++++---------- src/gui/menubar.h | 2 +- src/gui/setconfigurationoptiondialog.cpp | 4 +- src/gui/setconfigurationoptiondialog.h | 4 +- src/gui/setconfigurationoptiondialog.ui | 8 +- 5 files changed, 152 insertions(+), 126 deletions(-) diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp index 7ee8c868f..d241ad12c 100755 --- a/src/gui/menubar.cpp +++ b/src/gui/menubar.cpp @@ -28,13 +28,11 @@ *****************************************************************************/ #include "menubar.h" -#include "ui_mainwindow.h" MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) : QObject(parent), ui(ui) { - QString dataFolder = QString::fromUtf8(CPLGetConfigOption("WINDNINJA_DATA", "")); - dataPath = QDir(dataFolder); + dataPath = QDir(QString::fromUtf8(CPLGetConfigOption("WINDNINJA_DATA", ""))); // QMenu fileMenu "File" actions connect(ui->newProjectAction, &QAction::triggered, this, &MenuBar::newProjectActionTriggered); @@ -78,76 +76,70 @@ MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) void MenuBar::newProjectActionTriggered() { - writeToConsole("MenuBar: newProject() triggered"); + emit writeToConsole("MenuBar: newProject() triggered"); } void MenuBar::openProjectActionTriggered() { - writeToConsole("MenuBar: openProject() triggered"); + emit writeToConsole("MenuBar: openProject() triggered"); } void MenuBar::exportSolutionActionTriggered() { - writeToConsole("MenuBar: exportSolution() triggered"); + emit writeToConsole("MenuBar: exportSolution() triggered"); } void MenuBar::closeProjectActionTriggered() { - writeToConsole("MenuBar: closeProject() triggered"); + emit writeToConsole("MenuBar: closeProject() triggered"); } void MenuBar::writeConsoleOutputActionTriggered() { - QString fileName = QFileDialog::getSaveFileName(ui->centralwidget, - tr("Save Console Output"), - "console-output.txt", - tr("Text Files (*.txt)")); - - if(!fileName.isEmpty()) + QString fileName = QFileDialog::getSaveFileName( + ui->centralwidget, + tr("Save Console Output"), + "console-output.txt", + tr("Text Files (*.txt)") + ); + + if (!fileName.isEmpty()) { - QDateTime currentTime(QDateTime::currentDateTime()); - writeToConsole("writing console output to " + fileName, Qt::darkGreen); - writeToConsole("current time is " + currentTime.toString("MM/dd/yyyy hh:mm:ss t"), Qt::darkGreen); + QDateTime currentTime = QDateTime::currentDateTime(); + emit writeToConsole("writing console output to " + fileName, Qt::darkGreen); + emit writeToConsole("current time is " + currentTime.toString("MM/dd/yyyy hh:mm:ss t"), Qt::darkGreen); - std::ofstream fout(fileName.toStdString().c_str(), std::ios::out); - if(!fout) + QFile file(fileName); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { - writeToConsole("Cannot open " + fileName + " for writing.", Qt::red); + emit writeToConsole("Cannot open " + fileName + " for writing.", Qt::red); return; } - QTextDocument *doc = ui->consoleTextEdit->document(); - QTextBlock block = doc->begin(); - while( block.isValid() ) - { - fout << block.text().toStdString() << "\n"; - block = block.next(); - } - fout.close(); + QTextStream out(&file); + out << ui->consoleTextEdit->toPlainText(); } } -//void MenuBar::resampleDataActionTriggered() -//{ -// writeToConsole("MenuBar: resampleData() triggered"); -//} - void MenuBar::writeBlankStationFileActionTriggered() { - QString fileName = QFileDialog::getSaveFileName(ui->centralwidget, - tr("Save Blank Station File"), - "stations.csv", - tr("Text Files (*.csv)")); + QString fileName = QFileDialog::getSaveFileName( + ui->centralwidget, + tr("Save Blank Station File"), + "stations.csv", + tr("Text Files (*.csv)") + ); if(!fileName.isEmpty()) { - writeToConsole("writing blank station file to " + fileName, Qt::darkGreen); + emit writeToConsole("writing blank station file to " + fileName, Qt::darkGreen); char** papszOptions = nullptr; - int err = NinjaWriteBlankWxStationFile( fileName.toStdString().c_str(), papszOptions ); - if( err != NINJA_SUCCESS ) + int err = NinjaWriteBlankWxStationFile(fileName.toStdString().c_str(), papszOptions); + if(err != NINJA_SUCCESS) { - writeToConsole("failed to write blank station file!", Qt::red); + qDebug() << "NinjaWriteBlankWxStationFile: err=" << err; + emit writeToConsole("failed to write blank station file!", Qt::red); } } } @@ -156,144 +148,156 @@ void MenuBar::setConfigurationOptionActionTriggered() { setConfigurationOptionDialog configDialog; - int rc = configDialog.exec(); - if( rc == QDialog::Rejected ) - { + if (configDialog.exec() == QDialog::Rejected) return; - } - const char *pszKey, *pszVal; - QString key = configDialog.GetKey(); - QString val = configDialog.GetValue(); - if( key == "" ) - { + QString key = configDialog.getKey(); + QString val = configDialog.getValue(); + + if (key.isEmpty()) return; - } - if( val == "" ) - { - pszVal = NULL; - } - else - { - pszVal = CPLSPrintf( "%s", (char*)val.toLocal8Bit().data() ); - } - qDebug() << "Setting configuration option " << key << "to" << val; - writeToConsole("Setting configuration option " + key + " to " + val); + qDebug() << "Setting configuration option" << key << "to" << val; + emit writeToConsole("Setting configuration option " + key + " to " + val); - pszKey = CPLSPrintf( "%s", (char*)key.toLocal8Bit().data() ); - CPLSetConfigOption( pszKey, pszVal ); + CPLSetConfigOption( + key.toUtf8().constData(), + val.isEmpty() ? nullptr : val.toUtf8().constData() + ); } void MenuBar::displayArcGISProGuideActionTriggered() { QString displayFile = dataPath.absoluteFilePath("../doc/displaying_wind_vectors_in_ArcGIS_Pro.pdf"); - displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path - writeToConsole("Opening " + displayFile); + displayFile = QDir::cleanPath(displayFile); + emit writeToConsole("Opening " + displayFile); if(!QDesktopServices::openUrl(QUrl(displayFile))) { - QMessageBox::warning(ui->centralwidget, tr("Broken Link."), - tr("The link to the tutorial is broken, you can get to it through the Start Menu."), - QMessageBox::Ok); + QMessageBox::warning( + ui->centralwidget, + tr("Broken Link."), + tr("The link to the tutorial is broken, you can get to it through the Start Menu."), + QMessageBox::Ok + ); } } - void MenuBar::displayTutorial1ActionTriggered() { QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial1.pdf"); - displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path - writeToConsole("Opening " + displayFile); + displayFile = QDir::cleanPath(displayFile); - if(!QDesktopServices::openUrl(QUrl(displayFile))) + emit writeToConsole("Opening " + displayFile); + if (!QDesktopServices::openUrl(QUrl::fromLocalFile(displayFile))) { - QMessageBox::warning(ui->centralwidget, tr("Broken Link."), - tr("The link to the tutorial is broken, you can get to it through the Start Menu."), - QMessageBox::Ok); + QMessageBox::warning( + ui->centralwidget, + tr("Broken Link"), + tr("The link to the tutorial is broken. You can access it through the Start Menu."), + QMessageBox::Ok + ); } } void MenuBar::displayTutorial2ActionTriggered() { QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial2.pdf"); - displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path - writeToConsole("Opening " + displayFile); + displayFile = QDir::cleanPath(displayFile); - if(!QDesktopServices::openUrl(QUrl(displayFile))) + emit writeToConsole("Opening " + displayFile); + if (!QDesktopServices::openUrl(QUrl::fromLocalFile(displayFile))) { - QMessageBox::warning(ui->centralwidget, tr("Broken Link."), - tr("The link to the tutorial is broken, you can get to it through the Start Menu."), - QMessageBox::Ok); + QMessageBox::warning( + ui->centralwidget, + tr("Broken Link"), + tr("The link to the tutorial is broken. You can access it through the Start Menu."), + QMessageBox::Ok + ); } } void MenuBar::displayTutorial3ActionTriggered() { QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial3.pdf"); - displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path - writeToConsole("Opening " + displayFile); + displayFile = QDir::cleanPath(displayFile); - if(!QDesktopServices::openUrl(QUrl(displayFile))) + emit writeToConsole("Opening " + displayFile); + if (!QDesktopServices::openUrl(QUrl::fromLocalFile(displayFile))) { - QMessageBox::warning(ui->centralwidget, tr("Broken Link."), - tr("The link to the tutorial is broken, you can get to it through the Start Menu."), - QMessageBox::Ok); + QMessageBox::warning( + ui->centralwidget, + tr("Broken Link"), + tr("The link to the tutorial is broken. You can access it through the Start Menu."), + QMessageBox::Ok + ); } } void MenuBar::displayTutorial4ActionTriggered() { QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial4.pdf"); - displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path - writeToConsole("Opening " + displayFile); + displayFile = QDir::cleanPath(displayFile); - if(!QDesktopServices::openUrl(QUrl(displayFile))) + emit writeToConsole("Opening " + displayFile); + if (!QDesktopServices::openUrl(QUrl::fromLocalFile(displayFile))) { - QMessageBox::warning(ui->centralwidget, tr("Broken Link."), - tr("The link to the tutorial is broken, you can get to it through the Start Menu."), - QMessageBox::Ok); + QMessageBox::warning( + ui->centralwidget, + tr("Broken Link"), + tr("The link to the tutorial is broken. You can access it through the Start Menu."), + QMessageBox::Ok + ); } } void MenuBar::displayDemDownloadInstructionsActionTriggered() { QString displayFile = dataPath.absoluteFilePath("../doc/download_elevation_file.pdf"); - displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path - writeToConsole("Opening " + displayFile); + displayFile = QDir::cleanPath(displayFile); - if(!QDesktopServices::openUrl(QUrl(displayFile))) + emit writeToConsole("Opening " + displayFile); + if (!QDesktopServices::openUrl(QUrl::fromLocalFile(displayFile))) { - QMessageBox::warning(ui->centralwidget, tr("Broken Link."), - tr("The link to the tutorial is broken, you can get to it through the Start Menu."), - QMessageBox::Ok); + QMessageBox::warning( + ui->centralwidget, + tr("Broken Link"), + tr("The link to the tutorial is broken. You can access it through the Start Menu."), + QMessageBox::Ok + ); } } void MenuBar::displayFetchDemInstructionsActionTriggered() { QString displayFile = dataPath.absoluteFilePath("../doc/fetch_dem_instructions.pdf"); - displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path - writeToConsole("Opening " + displayFile); + displayFile = QDir::cleanPath(displayFile); - if(!QDesktopServices::openUrl(QUrl(displayFile))) + emit writeToConsole("Opening " + displayFile); + if (!QDesktopServices::openUrl(QUrl::fromLocalFile(displayFile))) { - QMessageBox::warning(ui->centralwidget, tr("Broken Link."), - tr("The link to the tutorial is broken, you can get to it through the Start Menu."), - QMessageBox::Ok); + QMessageBox::warning( + ui->centralwidget, + tr("Broken Link"), + tr("The link to the tutorial is broken. You can access it through the Start Menu."), + QMessageBox::Ok + ); } } void MenuBar::displayCommandLineInterfaceInstructionsActionTriggered() { QString displayFile = dataPath.absoluteFilePath("../doc/CLI_instructions.pdf"); - displayFile = QDir().cleanPath(displayFile); // cleanup the file path, make it a truly absolute path - writeToConsole("Opening " + displayFile); + displayFile = QDir::cleanPath(displayFile); - if(!QDesktopServices::openUrl(QUrl(displayFile))) + emit writeToConsole("Opening " + displayFile); + if (!QDesktopServices::openUrl(QUrl::fromLocalFile(displayFile))) { - QMessageBox::warning(ui->centralwidget, tr("Broken Link."), - tr("The link to the tutorial is broken, you can get to it through the Start Menu."), - QMessageBox::Ok); + QMessageBox::warning( + ui->centralwidget, + tr("Broken Link"), + tr("The link to the tutorial is broken. You can access it through the Start Menu."), + QMessageBox::Ok + ); } } @@ -328,8 +332,11 @@ void MenuBar::aboutWindNinjaActionTriggered() aboutText.append("

Special Thanks

"); aboutText.append("
"); - QMessageBox::about(ui->centralwidget, tr("About WindNinja"), - aboutText); + QMessageBox::about( + ui->centralwidget, + tr("About WindNinja"), + aboutText + ); } void MenuBar::citeWindNinjaActionTriggered() @@ -346,16 +353,35 @@ void MenuBar::citeWindNinjaActionTriggered() citeText.append("

https://ninjastorm.firelab.org/windninja/publications

"); - QMessageBox::about(ui->centralwidget, tr("Cite WindNinja"), - citeText); + QMessageBox::about( + ui->centralwidget, + tr("Cite WindNinja"), + citeText + ); } void MenuBar::supportEmailActionTriggered() { - QDesktopServices::openUrl(QUrl("mailto:wind.ninja.support@gmail.com?subject=[windninja-support]")); -} + QUrl mailto("mailto:wind.ninja.support@gmail.com?subject=[windninja-support]"); + if (!QDesktopServices::openUrl(mailto)) { + QMessageBox::warning( + ui->centralwidget, + tr("Email Error"), + tr("Unable to open your default email client."), + QMessageBox::Ok + ); + }} void MenuBar::submitBugReportActionTriggered() { - QDesktopServices::openUrl(QUrl("https://github.com/firelab/windninja/issues/new")); + QUrl bugUrl("https://github.com/firelab/windninja/issues/new"); + if (!QDesktopServices::openUrl(bugUrl)) + { + QMessageBox::warning( + ui->centralwidget, + tr("Network Error"), + tr("Unable to open the bug report page. Please check your internet connection."), + QMessageBox::Ok + ); + } } diff --git a/src/gui/menubar.h b/src/gui/menubar.h index b578b4cc7..6c7d81dcb 100644 --- a/src/gui/menubar.h +++ b/src/gui/menubar.h @@ -31,10 +31,10 @@ #define MENUBAR_H #include "setconfigurationoptiondialog.h" - #include "../ninja/windninja.h" #include "../ninja/gdal_util.h" #include "ninja_version.h" +#include "ui_mainwindow.h" #include #include #include diff --git a/src/gui/setconfigurationoptiondialog.cpp b/src/gui/setconfigurationoptiondialog.cpp index 1cdea3d95..be0f11523 100644 --- a/src/gui/setconfigurationoptiondialog.cpp +++ b/src/gui/setconfigurationoptiondialog.cpp @@ -13,12 +13,12 @@ setConfigurationOptionDialog::~setConfigurationOptionDialog() delete ui; } -QString setConfigurationOptionDialog::GetKey() +QString setConfigurationOptionDialog::getKey() { return ui->keyLineEdit->text(); } -QString setConfigurationOptionDialog::GetValue() +QString setConfigurationOptionDialog::getValue() { return ui->valueLineEdit->text(); } diff --git a/src/gui/setconfigurationoptiondialog.h b/src/gui/setconfigurationoptiondialog.h index 3579f71ec..406800676 100644 --- a/src/gui/setconfigurationoptiondialog.h +++ b/src/gui/setconfigurationoptiondialog.h @@ -15,8 +15,8 @@ class setConfigurationOptionDialog : public QDialog explicit setConfigurationOptionDialog(QWidget *parent = nullptr); ~setConfigurationOptionDialog(); - QString GetKey(); - QString GetValue(); + QString getKey(); + QString getValue(); private: Ui::setConfigurationOptionDialog *ui; diff --git a/src/gui/setconfigurationoptiondialog.ui b/src/gui/setconfigurationoptiondialog.ui index 515baee0b..51c5fc125 100644 --- a/src/gui/setconfigurationoptiondialog.ui +++ b/src/gui/setconfigurationoptiondialog.ui @@ -16,7 +16,7 @@ true - + 10 @@ -41,7 +41,7 @@ 80 - + @@ -68,7 +68,7 @@ - buttonBox + setConfigurationButtonBox rejected() setConfigurationOptionDialog reject() @@ -84,7 +84,7 @@ - buttonBox + setConfigurationButtonBox accepted() setConfigurationOptionDialog accept() From 886effbb5630f89c6b7e5b5719300b530ecf2bd1 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 20 Aug 2025 13:04:35 -0600 Subject: [PATCH 194/435] Removed QDockWidget to only use QTextEdit for console window, for #638 --- src/gui/mainwindow.cpp | 8 ++--- src/gui/mainwindow.ui | 75 +++++++++--------------------------------- src/gui/menubar.cpp | 4 +-- 3 files changed, 22 insertions(+), 65 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index e8ebf6985..2fb0e4f6e 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -299,10 +299,10 @@ void MainWindow::refreshUI() void MainWindow::writeToConsole(QString message, QColor color) { - if( ui->consoleDockWidget->isFloating() && color == Qt::white ) - { - color = Qt::black; - } + // if( ui->consoleDockWidget->isFloating() && color == Qt::white ) + // { + // color = Qt::black; + // } ui->consoleTextEdit->setTextColor(color); ui->consoleTextEdit->append(QString::number(lineNumber) + ": " + message); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 4517d4ea8..0de507362 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -844,7 +844,7 @@ li.checked::marker { content: "\2612"; } 0 0 578 - 503 + 478 @@ -4360,49 +4360,22 @@ li.checked::marker { content: "\2612"; } - - - Console Output + + + + 0 + 0 + + + + + 600 + 100 + + + + true - - - - 0 - 0 - - - - - 600 - 100 - - - - - - 0 - 0 - 600 - 100 - - - - - 0 - 0 - - - - - 600 - 100 - - - - true - - - @@ -4508,7 +4481,6 @@ QMenu::item:selected { true - @@ -4641,21 +4613,6 @@ QMenu::item:selected { Ctrl+W
- diff --git a/src/gui/menubar.cpp b/src/gui/menubar.cpp index d241ad12c..6a135a8a0 100755 --- a/src/gui/menubar.cpp +++ b/src/gui/menubar.cpp @@ -42,8 +42,8 @@ MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) connect(ui->exitWindNinjaAction, &QAction::triggered, this, &QCoreApplication::quit); // exit the entire app // QMenu optionsMenu "Options" actions - connect(ui->enableConsoleOutputAction, &QAction::toggled, ui->consoleDockWidget, &QDockWidget::setVisible); - connect(ui->consoleDockWidget, &QDockWidget::visibilityChanged, ui->enableConsoleOutputAction, &QAction::setChecked); // if closed from the QDockWidget itself, unchecks the menuAction + //connect(ui->enableConsoleOutputAction, &QAction::toggled, ui->consoleDockWidget, &QDockWidget::setVisible); + //connect(ui->consoleDockWidget, &QDockWidget::visibilityChanged, ui->enableConsoleOutputAction, &QAction::setChecked); // if closed from the QDockWidget itself, unchecks the menuAction connect(ui->writeConsoleOutputAction, &QAction::triggered, this, &MenuBar::writeConsoleOutputActionTriggered); // QMenu toolsMenu "Tools" actions From 30107a69154f3361af673ed45f6401e520150031 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 20 Aug 2025 15:58:03 -0600 Subject: [PATCH 195/435] Moved connect statement back to setupTreeView, for #636 --- src/gui/pointinitializationinput.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 3c734ea63..3e004417e 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -57,7 +57,6 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* connect(ui->pointInitializationSelectNoneButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitializationSelectNoneButtonClicked); connect(ui->pointInitializationTreeView, &QTreeView::expanded, this, &PointInitializationInput::folderExpanded); connect(ui->pointInitializationTreeView, &QTreeView::collapsed, this, &PointInitializationInput::folderCollapsed); - connect(ui->pointInitializationTreeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &PointInitializationInput::pointInitializationTreeViewItemSelectionChanged); } void PointInitializationInput::pointInitializationGroupBoxToggled(bool checked) @@ -236,6 +235,8 @@ void PointInitializationInput::setupTreeView() ui->pointInitializationTreeView->setUniformRowHeights(true); ui->pointInitializationTreeView->hideColumn(1); ui->pointInitializationTreeView->hideColumn(2); + + connect(ui->pointInitializationTreeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &PointInitializationInput::pointInitializationTreeViewItemSelectionChanged); } void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() From dcde1dda82be41e1341cdb64ac5ffe8f9ebb34ab Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 20 Aug 2025 17:02:55 -0600 Subject: [PATCH 196/435] Fixed numNinja value setting for point init time series and non time series data, for #636 --- src/gui/mainwindow.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index e23cd5e29..41be7e399 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -635,7 +635,6 @@ void MainWindow::solveButtonClicked() QString DEMPath = ui->elevationInputFileLineEdit->property("fullpath").toString(); - numNinjas = ui->weatherStationDataTimestepsSpinBox->value(); bool momentumFlag = ui->momentumSolverCheckBox->isChecked(); if(ui->pointInitializationTreeView->property("timeSeriesFlag").toBool()) @@ -668,6 +667,9 @@ void MainWindow::solveButtonClicked() { printf("NinjaGetTimeList: err = %d\n", err); } + + numNinjas = ui->weatherStationDataTimestepsSpinBox->value(); + ninjaArmy = NinjaMakePointArmy (outYear.data(), outMonth.data(), outDay.data(), outHour.data(), outMinute.data(), nTimeSteps, DEMTimeZone.toUtf8().data(), stationFileNames.data(), stationFileNames.size(), DEMPath.toUtf8().data(), true, momentumFlag, papszOptions); } @@ -699,6 +701,8 @@ void MainWindow::solveButtonClicked() QVector hourVec = { outHour }; QVector minuteVec = { outMinute }; + numNinjas = 1; + ninjaArmy = NinjaMakePointArmy( yearVec.data(), monthVec.data(), dayVec.data(), hourVec.data(), minuteVec.data(), @@ -905,10 +909,13 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i */ if(ui->pointInitializationGroupBox->isChecked()) { - err = NinjaSetStationKML(ninjaArmy, i, ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8().constData(), ui->outputDirectoryLineEdit->text().toUtf8().constData(), ui->outputSpeedUnitsComboBox->currentText().toUtf8().constData(), papszOptions); - if(err != NINJA_SUCCESS) + if(ui->pointInitializationWriteStationKMLCheckBox->isChecked()) { - printf("NinjaSetStationKML: err = %d\n", err); + err = NinjaSetStationKML(ninjaArmy, i, ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8().constData(), ui->outputDirectoryLineEdit->text().toUtf8().constData(), ui->outputSpeedUnitsComboBox->currentText().toUtf8().constData(), papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetStationKML: err = %d\n", err); + } } } err = NinjaSetCommunication(ninjaArmy, i, "cli", papszOptions); From fa3917e5bc2852b6998e1bbf7b79cccc6b66a8ad Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 20 Aug 2025 17:29:52 -0600 Subject: [PATCH 197/435] Fixed timezone reading in API to to use date_time_zonespec.csv, for #636 --- src/gui/pointinitializationinput.cpp | 2 -- src/ninja/windninja.cpp | 18 ++++++++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 3e004417e..85747af0b 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -199,8 +199,6 @@ void PointInitializationInput::fetchStationDataFinished() } ui->inputsStackedWidget->setCurrentIndex(10); - disconnect(futureWatcher, &QFutureWatcher::finished, - this, &PointInitializationInput::fetchStationDataFinished); } void PointInitializationInput::weatherStationDataSourceComboBoxCurrentIndexChanged(int index) diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index fb49e2ecb..238101b77 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -396,10 +396,13 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationFromBBox(const int* yearList, cons if(!fetchLatestFlag) { - boost::local_time::time_zone_ptr tz(new boost::local_time::posix_time_zone(timeZone)); + boost::local_time::tz_database tz_db; + tz_db.load_from_file( FindDataPath("date_time_zonespec.csv") ); + boost::local_time::time_zone_ptr timeZonePtr; + timeZonePtr = tz_db.time_zone_from_region(timeZone); - boost::local_time::local_date_time start(timeList[0], tz); - boost::local_time::local_date_time stop(timeList[1], tz); + boost::local_time::local_date_time start(timeList[0], timeZonePtr); + boost::local_time::local_date_time stop(timeList[1], timeZonePtr); pointInitialization::setLocalStartAndStopTimes(start, stop); } @@ -461,10 +464,13 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationByName(const int* yearList, const if(!fetchLatestFlag) { - boost::local_time::time_zone_ptr tz(new boost::local_time::posix_time_zone(timeZone)); + boost::local_time::tz_database tz_db; + tz_db.load_from_file( FindDataPath("date_time_zonespec.csv") ); + boost::local_time::time_zone_ptr timeZonePtr; + timeZonePtr = tz_db.time_zone_from_region(timeZone); - boost::local_time::local_date_time start(timeList[0], tz); - boost::local_time::local_date_time stop(timeList[1], tz); + boost::local_time::local_date_time start(timeList[0], timeZonePtr); + boost::local_time::local_date_time stop(timeList[1], timeZonePtr); pointInitialization::setLocalStartAndStopTimes(start, stop); } From b65ff63a0bd885b7bdaa3379102bd2681c75279d Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 21 Aug 2025 11:28:03 -0600 Subject: [PATCH 198/435] Quick fix to fetch using UTC time and not local DEM time, for #636 --- src/gui/mainwindow.ui | 14 +++++++++++--- src/gui/pointinitializationinput.cpp | 25 ++++++++++++++----------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 7a432e496..a048e6e38 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -557,7 +557,7 @@ QFrame::Shadow::Sunken - 10 + 20 @@ -4281,7 +4281,11 @@ li.checked::marker { content: "\2612"; } - + + + M/d/yy h:mm  + + @@ -4291,7 +4295,11 @@ li.checked::marker { content: "\2612"; } - + + + M/d/yy h:mm  + + diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 85747af0b..7a9e5b9af 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -88,11 +88,14 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() { QDateTime start = ui->downloadBetweenDatesStartTimeDateTimeEdit->dateTime(); QDateTime end = ui->downloadBetweenDatesEndTimeDateTimeEdit->dateTime(); - QVector year = {start.date().year(), end.date().year()}; - QVector month = {start.date().month(), end.date().month()}; - QVector day = {start.date().day(), end.date().day()}; - QVector hour = {start.time().hour(), end.time().hour()}; - QVector minute = {start.time().minute(), end.time().minute()}; + QDateTime startUtc = start.toUTC(); + QDateTime endUtc = end.toUTC(); + + QVector year = {startUtc.date().year(), endUtc.date().year()}; + QVector month = {startUtc.date().month(), endUtc.date().month()}; + QVector day = {startUtc.date().day(), endUtc.date().day()}; + QVector hour = {startUtc.time().hour(), endUtc.time().hour()}; + QVector minute = {startUtc.time().minute(), endUtc.time().minute()}; bool fetchLatestFlag = ui->weatherStationDataTimeComboBox->currentIndex() ? 0 : 1; @@ -395,16 +398,16 @@ void PointInitializationInput::readStationTime(QString startDateTime, QString st startTimeUTC.setTimeSpec(Qt::UTC); endTimeUTC.setTimeSpec(Qt::UTC); - QDateTime startTimeDEMTimeZone = startTimeUTC.toTimeZone(timeZone); - QDateTime endTimeDEMTimeZone = endTimeUTC.toTimeZone(timeZone); + QDateTime DEMStartTime = startTimeUTC.toTimeZone(timeZone); + QDateTime DEMEndTime = endTimeUTC.toTimeZone(timeZone); - if (minStationTime.isNull() || startTimeDEMTimeZone < minStationTime) + if (minStationTime.isNull() || DEMStartTime < minStationTime) { - minStationTime = startTimeDEMTimeZone; + minStationTime = DEMStartTime; } - if(maxStationTime.isNull() || endTimeDEMTimeZone > maxStationTime) + if(maxStationTime.isNull() || DEMEndTime > maxStationTime) { - maxStationTime = endTimeDEMTimeZone; + maxStationTime = DEMEndTime; } qDebug() << "[GUI-Point] Start Time (" << DEMTimeZone << "):" << minStationTime.toString(); From 8c4bdcb8a342d862194c12f9887f4107d25aaa72 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 21 Aug 2025 11:55:16 -0600 Subject: [PATCH 199/435] Initial work for a time duration check when fetching data (should not be able to fetch more than a year's worth), for #636 --- src/gui/pointinitializationinput.cpp | 13 +++++++++-- src/ninja/windninja.cpp | 34 +++++++++++++++++++++++----- src/ninja/windninja.h | 2 ++ 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 7a9e5b9af..653346118 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -97,6 +97,16 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() QVector hour = {startUtc.time().hour(), endUtc.time().hour()}; QVector minute = {startUtc.time().minute(), endUtc.time().minute()}; + if(ui->weatherStationDataTimeComboBox->currentIndex() == 1) + { + char ** options = nullptr; + int err = NinjaCheckTimeDuration(year.data(), month.data(), day.data(), hour.data(), minute.data(), 2, options); + if(err != NINJA_SUCCESS) + { + qDebug() << "NinjaCheckTimeDuration err=" << err; + } + } + bool fetchLatestFlag = ui->weatherStationDataTimeComboBox->currentIndex() ? 0 : 1; QString outputPath = ui->outputDirectoryLineEdit->text(); @@ -124,8 +134,7 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() else { QString stationList = ui->downloadFromStationIDLineEdit->text(); - future = QtConcurrent::run(&PointInitializationInput::fetchStationByName, - year, month, day, hour, minute, + future = QtConcurrent::run(&PointInitializationInput::fetchStationByName,year, month, day, hour, minute, elevationFile, stationList, DEMTimeZone, fetchLatestFlag, outputPath); } diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 238101b77..e10bf8852 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -2166,10 +2166,10 @@ WINDNINJADLL_EXPORT int NinjaGetHeaderVersion(const char * filePath, char ** pap } WINDNINJADLL_EXPORT NinjaErr NinjaGetTimeList( - const int* inputYearList, const int* inputMonthList, const int* inputDayList, - const int* inputHourList, const int* inputMinuteList, - int* outputYearList, int* outputMonthList, int* outputDayList, - int* outputHourList, int* outputMinuteList, + const int * inputYearList, const int * inputMonthList, const int * inputDayList, + const int * inputHourList, const int * inputMinuteList, + int * outputYearList, int* outputMonthList, int * outputDayList, + int * outputHourList, int* outputMinuteList, int nTimeSteps, const char* timeZone) { std::vector timeList = @@ -2198,8 +2198,8 @@ WINDNINJADLL_EXPORT NinjaErr NinjaGetTimeList( } WINDNINJADLL_EXPORT NinjaErr NinjaGenerateSingleTimeObject( - int inputYear, int inputMonth, int inputDay, int inputHour, int inputMinute, const char* timeZone, - int* outYear, int* outMonth, int* outDay, int* outHour, int* outMinute) + int inputYear, int inputMonth, int inputDay, int inputHour, int inputMinute, const char * timeZone, + int * outYear, int * outMonth, int* outDay, int * outHour, int * outMinute) { if (!outYear || !outMonth || !outDay || !outHour || !outMinute) return NINJA_E_OTHER; // or appropriate error @@ -2219,4 +2219,26 @@ WINDNINJADLL_EXPORT NinjaErr NinjaGenerateSingleTimeObject( return NINJA_SUCCESS; } +WINDNINJADLL_EXPORT NinjaErr NinjaCheckTimeDuration + (int* yearList, int* monthList, int * dayList, int * minuteList, int *hourList, int listSize, char ** papszOptions) +{ + std::vector timeList; + for(size_t i=0; i < listSize; i++) + { + timeList.push_back(boost::posix_time::ptime(boost::gregorian::date(yearList[i], monthList[i], dayList[i]), boost::posix_time::time_duration(hourList[i],minuteList[i],0,0))); + } + + int isValid = pointInitialization::checkFetchTimeDuration(timeList); + + if(isValid == -2) + { + return NINJA_E_OTHER; + } + else + { + return NINJA_SUCCESS; + } +} + + } diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 1b64b4684..adf9eb83e 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -359,5 +359,7 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaGenerateSingleTimeObject( int inputYear, int inputMonth, int inputDay, int inputHour, int inputMinute, const char* timeZone, int* outYear, int* outMonth, int* outDay, int* outHour, int* outMinute); + WINDNINJADLL_EXPORT NinjaErr NinjaCheckTimeDuration + (int* yearList, int* monthList, int * dayList, int * minuteList, int *hourList, int listSize, char ** papszOptions); WN_C_END From ee74cd9271277e78f4bf825ce738d0d565f349f6 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 21 Aug 2025 16:28:47 -0600 Subject: [PATCH 200/435] Set matchedpoints in setinitialization method for getting point initialization working, for #636 --- src/ninja/windninja.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index e10bf8852..376780342 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -568,7 +568,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetInitializationMethod if( NULL != army && NULL != initializationMethod ) { return reinterpret_cast( army )->setInitializationMethod - ( nIndex, std::string( initializationMethod ) ); + ( nIndex, std::string( initializationMethod ), true); } else { From ef33fee4b33652b01519143ea555167ef7b81d80 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 21 Aug 2025 18:18:38 -0600 Subject: [PATCH 201/435] replaced all instances of NINJA_QTGUI with NINJA_GUI, to be more correct when building the qt6 gui. Related to issue #654, but more especially to commits 394ca5f2936e9cfac2c1885fc813721fc51fccac and d58ade11281b8ee161ad4c5bcdb911edcd17a585 --- .builds/clang.yml | 2 +- .builds/fedora.yml | 2 +- CMakeLists.txt | 4 ++-- autotest/CMakeLists.txt | 4 ++-- scripts/build_deps_rhel7.sh | 2 +- scripts/firelab_build.bat | 2 +- src/CMakeLists.txt | 4 ++-- src/cli/CMakeLists.txt | 4 ++-- src/ninja/CMakeLists.txt | 12 ++++++------ 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.builds/clang.yml b/.builds/clang.yml index 5a387c8d8..48db6096e 100644 --- a/.builds/clang.yml +++ b/.builds/clang.yml @@ -33,7 +33,7 @@ tasks: -D CMAKE_C_COMPILER=clang \ -D CMAKE_CXX_COMPILER=clang++ \ -D OPENMP_SUPPORT=OFF \ - -D NINJA_QTGUI=OFF \ + -D NINJA_GUI=OFF \ .. make -j 3 diff --git a/.builds/fedora.yml b/.builds/fedora.yml index a6b6f2a66..8fde14d7b 100644 --- a/.builds/fedora.yml +++ b/.builds/fedora.yml @@ -27,7 +27,7 @@ tasks: -D DISABLE_THREDDS_UPDATE=ON \ -D RUN_CFG_TESTS=ON \ -D STABILITY=ON \ - -D NINJA_QTGUI=OFF \ + -D NINJA_GUI=OFF \ -D CMAKE_BUILD_TYPE=debug \ .. make -j 3 diff --git a/CMakeLists.txt b/CMakeLists.txt index 056d9dab5..3df24954a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,7 +30,7 @@ option(FIRELAB_PACKAGE "Build a windows installer with dlls from the firelab mac mark_as_advanced(FIRELAB_PACKAGE) if(FIRELAB_PACKAGE) - set(NINJA_QTGUI ON) + set(NINJA_GUI ON) set(NINJA_CLI ON) endif(FIRELAB_PACKAGE) @@ -151,7 +151,7 @@ ELSE(USE_VCPKG) ENDIF(USE_VCPKG) # Ninja executables -option(NINJA_QTGUI "Build Qt GUI" ON) +option(NINJA_GUI "Build Qt GUI" ON) option(NINJA_CLI "Build Command Line Interface" ON) diff --git a/autotest/CMakeLists.txt b/autotest/CMakeLists.txt index 744292886..871981d9d 100644 --- a/autotest/CMakeLists.txt +++ b/autotest/CMakeLists.txt @@ -129,11 +129,11 @@ if(WITH_LCP_CLIENT) endif(WITH_LCP_CLIENT) # input_points Test Suite -if(NOT NINJA_QTGUI) +if(NOT NINJA_GUI) # This test doesn't work #add_test(test_input_points_mackay # ${EXECUTABLE_OUTPUT_PATH}/test_main --run_test=input_points/mackay ) -endif(NOT NINJA_QTGUI) +endif(NOT NINJA_GUI) if(NINJA_GDAL_OUTPUT) add_test(test_gdal_output_shapefile diff --git a/scripts/build_deps_rhel7.sh b/scripts/build_deps_rhel7.sh index d2c415a91..e946ee24e 100644 --- a/scripts/build_deps_rhel7.sh +++ b/scripts/build_deps_rhel7.sh @@ -90,7 +90,7 @@ export CXXFLAGS=-std=c++11 ccmake -DCMAKE_LIBRARY_PATH=$PREFIX/lib \ -DCMAKE_INCLUDE_DIR=$PREFIX/include \ -DCMAKE_INSTALL_PREFIX=$PREFIX \ - -DNINJA_QTGUI=OFF \ + -DNINJA_GUI=OFF \ -DNINJAFOAM=OFF \ -DGDAL_CONFIG=$PREFIX/bin/gdal-config \ -DGDAL_INCLUDE_DIR=$PREFIX/include \ diff --git a/scripts/firelab_build.bat b/scripts/firelab_build.bat index 57132c71e..420bd7253 100644 --- a/scripts/firelab_build.bat +++ b/scripts/firelab_build.bat @@ -35,7 +35,7 @@ REM -DGDAL_LIBRARY=c:/src/gdal/gdal-1.10.0/lib/gdal_i.lib ^ cmake c:/src/windninja/trunk ^ -G "NMake Makefiles JOM" ^ -DFIRELAB_PACKAGE=ON ^ - -DNINJA_QTGUI=ON ^ + -DNINJA_GUI=ON ^ -DNINJA_CLI=ON ^ -DENABLE_CONSOLE=FALSE ^ -DOPENMP_SUPPORT=ON ^ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 233d1b8db..c82371fea 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -19,9 +19,9 @@ add_subdirectory(ninja) -if(NINJA_QTGUI) +if(NINJA_GUI) add_subdirectory(gui) -endif(NINJA_QTGUI) +endif(NINJA_GUI) if(NINJA_CLI) add_subdirectory(cli) endif(NINJA_CLI) diff --git a/src/cli/CMakeLists.txt b/src/cli/CMakeLists.txt index a62970180..0cf2c458e 100644 --- a/src/cli/CMakeLists.txt +++ b/src/cli/CMakeLists.txt @@ -29,13 +29,13 @@ set(LINK_LIBS ${Boost_LIBRARIES} ${NETCDF_LIBRARIES_C} ${CURL_LIBRARIES}) -if(NINJA_QTGUI AND NINJA_CLI) +if(NINJA_GUI AND NINJA_CLI) set(LINK_LIBS ${LINK_LIBS} ${QT_LIBRARIES}) if(PACKAGE_DEBUG) message("CLI Linking to Qt Libraries") endif(PACKAGE_DEBUG) -endif(NINJA_QTGUI AND NINJA_CLI) +endif(NINJA_GUI AND NINJA_CLI) if(WIN32 OR APPLE) set(LINK_LIBS ${LINK_LIBS} ${PROJECT_BINARY_DIR}/src/ninja/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}ninja${CMAKE_STATIC_LIBRARY_SUFFIX}) diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt index 0e0c00d71..d8a80cae0 100644 --- a/src/ninja/CMakeLists.txt +++ b/src/ninja/CMakeLists.txt @@ -15,7 +15,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -#cmake_minimum_required(VERSION 2.6) +#cmake_minimum_required(VERSION 3.16) if (APPLE) set(CMAKE_MACOSX_RPATH OFF) @@ -131,13 +131,13 @@ set(LINK_LIBS ${NETCDF_LIBRARIES_C} ${Boost_LIBRARIES}) -if(NINJA_QTGUI) +if(NINJA_GUI) include_directories(${NINJA_INCLUDES} ${QT_INCLUDES}) set(NINJA_SOURCES ${NINJA_SOURCES} ${NINJA_LIB_INCLUDES_MOC}) set(LINK_LIBS ${LINK_LIBS} ${QT_LIBRARIES}) -else(NINJA_QTGUI) +else(NINJA_GUI) include_directories(${NINJA_INCLUDES}) -endif(NINJA_QTGUI) +endif(NINJA_GUI) if(WIN32) add_library(ninja STATIC ${NINJA_SOURCES}) @@ -146,8 +146,8 @@ if(WIN32) else() if(APPLE) add_library(ninja STATIC ${NINJA_SOURCES}) - else() - add_library(ninja SHARED ${NINJA_SOURCES}) # Linux + else() # Linux + add_library(ninja SHARED ${NINJA_SOURCES}) endif() endif() From badc48dfe96953309e7578998e3d748c6dd924d3 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 21 Aug 2025 19:15:33 -0600 Subject: [PATCH 202/435] fixed CMakeLists.txt to allow proper separation of local "make" builds vs /usr/local/ "sudo make install" builds, which meant dropping the "../ninja" from "#include" statements and CMakeLists.txt files. Related to issue #654 --- src/gui/CMakeLists.txt | 4 +--- src/gui/main.cpp | 2 +- src/gui/mainwindow.h | 2 +- src/gui/menubar.h | 4 ++-- src/gui/surfaceinput.h | 4 ++-- src/ninja/CMakeLists.txt | 4 +++- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index eaa3d6c15..52fd35ade 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -60,12 +60,10 @@ else() endif() endif() -target_include_directories(WindNinja PRIVATE /usr/local/include) - -add_dependencies(WindNinja ninja) target_link_libraries(WindNinja PRIVATE Qt${QT_VERSION_MAJOR}::Widgets PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets PRIVATE ninja) + # Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. # If you are developing for iOS or macOS you should consider setting an # explicit, fixed bundle identifier manually though. diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 8de842578..b10279f39 100755 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -28,7 +28,7 @@ *****************************************************************************/ #include "mainwindow.h" -#include "../ninja/windninja.h" +#include "windninja.h" #include #include #include diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 119f90e85..634d04f3d 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -37,7 +37,7 @@ #include "serverbridge.h" #include "ui_mainwindow.h" #include "appstate.h" -#include "../ninja/windninja.h" +#include "windninja.h" #include #include #include diff --git a/src/gui/menubar.h b/src/gui/menubar.h index 6c7d81dcb..c9d058488 100644 --- a/src/gui/menubar.h +++ b/src/gui/menubar.h @@ -31,8 +31,8 @@ #define MENUBAR_H #include "setconfigurationoptiondialog.h" -#include "../ninja/windninja.h" -#include "../ninja/gdal_util.h" +#include "windninja.h" +#include "gdal_util.h" #include "ninja_version.h" #include "ui_mainwindow.h" #include diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index a70d1a13c..e23d4d70e 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -31,8 +31,8 @@ #define SURFACEINPUT_H #include "appstate.h" -#include "../ninja/windninja.h" -#include "../ninja/gdal_util.h" +#include "windninja.h" +#include "gdal_util.h" #include #include #include diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt index d8a80cae0..48d7a6400 100644 --- a/src/ninja/CMakeLists.txt +++ b/src/ninja/CMakeLists.txt @@ -153,9 +153,11 @@ endif() target_link_libraries(ninja ${LINK_LIBS}) +target_include_directories(ninja PUBLIC $ $) + install(TARGETS ninja DESTINATION lib COMPONENT libs) if(WIN32) install(TARGETS WindNinjadll DESTINATION ${lib_dest}) endif(WIN32) -install(FILES WindNinjaInputs.h ninja.h windninja.h ninja_errors.h DESTINATION include COMPONENT includes) +install(FILES WindNinjaInputs.h ninja.h gdal_util.h windninja.h ninja_errors.h DESTINATION include COMPONENT includes) From 05eb920641f424b47e73b7a5db10f24eadcd3551 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 21 Aug 2025 20:02:08 -0600 Subject: [PATCH 203/435] added basic ninjaCom to the qt6 gui, meaning without the "#ifdef NINJA_GUI" parts of ninjaCom.h and .cpp, calls to basic ninjaCom print info functions work but not any of the GUI signal functions. For issue #654. Note that to get this to work, I had to alter a few "#ifdef NINJA_GUI" sections in the code. Looks like "#ifdef NINJA_GUI" was technically not even triggering, so calls to functions wrapped by "#ifdef NINJA_GUI" caused weird undefined/missing header function linker errors. I got this to work by commenting out "#ifdef NINJA_GUI" around functions that I required to get working. Note that I left the "#ifdef NINJA_GUI" stuff uncommented in ninjaCom.h/.cpp despite it containing QT stuff that would have broken, because it wasn't getting triggered anyways. This is because the "#ifdef NINJA_GUI" came out to be FALSE, so the compiler skipped those ninjaCom GUI sections of code. This weird "#ifdef NINJA_GUI" coming out as FALSE instead of TRUE within the code base, is related to commits 394ca5f2936e9cfac2c1885fc813721fc51fccac and d58ade11281b8ee161ad4c5bcdb911edcd17a585 --- src/gui/mainwindow.cpp | 10 ++++++++++ src/gui/mainwindow.h | 1 + src/ninja/CMakeLists.txt | 2 +- src/ninja/ninjaArmy.cpp | 4 ++-- src/ninja/ninjaArmy.h | 3 ++- src/ninja/ninjaCom.cpp | 2 +- src/ninja/ninjaCom.h | 2 +- src/ninja/windninja.cpp | 24 ++++++++++++++++++++++++ src/ninja/windninja.h | 6 ++++++ 9 files changed, 48 insertions(+), 6 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 2fb0e4f6e..19453be8e 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -874,6 +874,16 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i qDebug() << "NinjaSetCommunication: err =" << err; } + int comRunNumber = *NinjaGetCommunication( ninjaArmy, i, papszOptions )->runNumber; // * dereferences the pointer to get the raw value, what a weird thing to store, an int*. + qDebug() << QString::number( comRunNumber ); + qDebug() << comRunNumber; + NinjaGetCommunication( ninjaArmy, i, papszOptions )->ninjaCom(ninjaComClass::ninjaNone, "testing..."); + ninjaComClass * comPtr = NinjaGetCommunication( ninjaArmy, i, papszOptions ); + comPtr->ninjaCom(ninjaComClass::ninjaNone, "testing1..."); + + NinjaGetCommunication( ninjaArmy, i, papszOptions )->ninjaComHandler(ninjaComClass::ninjaNone, "fudge"); // woo hoo!! compiles and RUNS, printed the message + NinjaGetCommunication( ninjaArmy, i, papszOptions )->ninjaCom(ninjaComClass::ninjaNone, "fudge1"); // more correct form, I guess it picks the ninjaComHandler by virtual type + err = NinjaSetNumberCPUs(ninjaArmy, i, ui->numberOfProcessorsSpinBox->value(), papszOptions); if(err != NINJA_SUCCESS) { diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 634d04f3d..cf11ba6af 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -37,6 +37,7 @@ #include "serverbridge.h" #include "ui_mainwindow.h" #include "appstate.h" +//#include "ninjaCom.h" #include "windninja.h" #include #include diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt index 48d7a6400..d50f4ae66 100644 --- a/src/ninja/CMakeLists.txt +++ b/src/ninja/CMakeLists.txt @@ -159,5 +159,5 @@ install(TARGETS ninja DESTINATION lib COMPONENT libs) if(WIN32) install(TARGETS WindNinjadll DESTINATION ${lib_dest}) endif(WIN32) -install(FILES WindNinjaInputs.h ninja.h gdal_util.h windninja.h ninja_errors.h DESTINATION include COMPONENT includes) +install(FILES WindNinjaInputs.h ninja.h gdal_util.h ninjaCom.h windninja.h ninja_errors.h DESTINATION include COMPONENT includes) diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index a4dc0cf5d..cfae4d428 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -1349,7 +1349,7 @@ int ninjaArmy::setNinjaComNumRuns( const int nIndex, const int RunNumber, IF_VALID_INDEX_TRY( nIndex, ninjas, ninjas[ nIndex ]->set_ComNumRuns( RunNumber ) ); } - +#endif //NINJA-GUI ninjaComClass * ninjaArmy::getNinjaCom( const int nIndex, char ** papszOptions ) { IF_VALID_INDEX( nIndex, ninjas ) @@ -1358,7 +1358,7 @@ ninjaComClass * ninjaArmy::getNinjaCom( const int nIndex, char ** papszOptions ) } return NULL; //if not valid index } -#endif //NINJA-GUI +//#endif //NINJA-GUI /*----------------------------------------------------------------------------- * Ninja Speed Testing Methods diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 7f3a65e69..7f2e642ca 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -185,6 +185,7 @@ class ninjaArmy */ int setNinjaComNumRuns( const int nIndex, const int RunNumber, char ** papszOptions=NULL ); +#endif //NINJA_GUI /** * \brief Returns the ninjaCom for a ninja * @@ -192,7 +193,7 @@ class ninjaArmy * \return com the ninjaComClass of a ninja */ ninjaComClass * getNinjaCom( const int nIndex, char ** papszOptions=NULL ); -#endif //NINJA_GUI +//#endif //NINJA_GUI /*----------------------------------------------------------------------------- * Ninja speed testing Methods diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index 05110e75a..b06852e8d 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -392,7 +392,7 @@ void ninjaGUIComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) //QMetaObject::invokeMethod((QObject*)this, "sendMessage", // Qt::QueuedConnection, // Q_ARG(QString*, &s), - // Q_ARG(QColor, Qt::black)); + // Q_ARG(QColor, Qt::white)); emit sendMessage(s); } else if(eMsg == ninjaDebug) diff --git a/src/ninja/ninjaCom.h b/src/ninja/ninjaCom.h index 7707e5c28..66f514d61 100644 --- a/src/ninja/ninjaCom.h +++ b/src/ninja/ninjaCom.h @@ -150,7 +150,7 @@ class ninjaGUIComHandler : public ninjaComClass //concrete class signals: void sendProgress(int run, int progress); - void sendMessage(QString message, QColor color = Qt::black); + void sendMessage(QString message, QColor color = Qt::white); }; #endif // NINJA_GUI diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index fd11f20f5..7e56ec5db 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -547,6 +547,30 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetCommunication } } +/** + * \brief Get the set communication handler for a given simulation. + * only useable with the GUI + * + * \param army An opaque handle to a valid ninjaArmy. + * \param nIndex The run to get the communication handler from, that has already been created by a call to NinjaSetCommunication. + * + * \return a pointer to the ninjaComClass of the given ninja on success, a NULL pointer otherwise. + */ +//#ifdef NINJA_GUI +WINDNINJADLL_EXPORT ninjaComClass * NinjaGetCommunication + ( NinjaArmyH * army, const int nIndex, char ** papszOptions ) +{ + if( NULL != army ) + { + return reinterpret_cast( army )->getNinjaCom( nIndex ); + } + else + { + return NINJA_E_NULL_PTR; + } +} +//#endif //NINJA_GUI + /** * \brief Set the DEM to use for the simulations. * diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index da2bf301e..09da217af 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -27,6 +27,7 @@ * *****************************************************************************/ #include "ninja_errors.h" +#include "ninjaCom.h" /*----------------------------------------------------------------------------- * Macros for Compilation Compatibility with gcc and g++ *-----------------------------------------------------------------------------*/ @@ -141,6 +142,11 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaSetCommunication ( NinjaArmyH * ninjaArmy, const int nIndex, const char * comType, char ** options ); +//#ifdef NINJA_GUI + WINDNINJADLL_EXPORT ninjaComClass * NinjaGetCommunication + ( NinjaArmyH * ninjaArmy, const int nIndex, char ** options ); +//#endif //NINJA_GUI + /* Input Parameters */ WINDNINJADLL_EXPORT NinjaErr NinjaSetInputSpeed ( NinjaArmyH * ninjaArmy, const int nIndex, const double speed, const char * units, char ** options ); From 8ba4e4ede684e64d05cb3ff8a82618af7f363d71 Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 22 Aug 2025 10:26:36 -0600 Subject: [PATCH 204/435] made "#ifdef NINJA_GUI" work properly again, turns out a past "add_definitions(-DNINJA_GUI)" was accidentally dropped from /windninja/CMakeLists.txt during the migration from qt4 to qt6. It's an older method, but it still works. Anyhow, I am purposefully not using the actual QT stuff in ninjaCom yet, just wanted to at least be able to compile and run with the "#ifdef NINJA_GUI" wrappers, while still calling the basic ninjaCom print info functions in the qt6 gui code. To do this, I purposefully and strategically changed specific instances of "#ifdef NINJA_GUI" statements into "#ifdef NINJA_QTGUI" in ninjaCom, to purposefully exclude the QT functions in there. This was because the actual QT functionality hasn't been linked up in /windninja/src/ninja/CMakeLists.txt yet, that's the next step. For issue #654, related to commits 394ca5f2936e9cfac2c1885fc813721fc51fccac and d58ade11281b8ee161ad4c5bcdb911edcd17a585 --- CMakeLists.txt | 3 +++ src/ninja/ninjaArmy.cpp | 4 ++-- src/ninja/ninjaArmy.h | 4 ++-- src/ninja/ninjaCom.cpp | 4 ++-- src/ninja/ninjaCom.h | 8 ++++---- src/ninja/windninja.cpp | 4 ++-- src/ninja/windninja.h | 4 ++-- 7 files changed, 17 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3df24954a..586858989 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -152,6 +152,9 @@ ENDIF(USE_VCPKG) # Ninja executables option(NINJA_GUI "Build Qt GUI" ON) +if(NINJA_GUI) + add_definitions(-DNINJA_GUI) +endif() option(NINJA_CLI "Build Command Line Interface" ON) diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index cfae4d428..a4dc0cf5d 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -1349,7 +1349,7 @@ int ninjaArmy::setNinjaComNumRuns( const int nIndex, const int RunNumber, IF_VALID_INDEX_TRY( nIndex, ninjas, ninjas[ nIndex ]->set_ComNumRuns( RunNumber ) ); } -#endif //NINJA-GUI + ninjaComClass * ninjaArmy::getNinjaCom( const int nIndex, char ** papszOptions ) { IF_VALID_INDEX( nIndex, ninjas ) @@ -1358,7 +1358,7 @@ ninjaComClass * ninjaArmy::getNinjaCom( const int nIndex, char ** papszOptions ) } return NULL; //if not valid index } -//#endif //NINJA-GUI +#endif //NINJA-GUI /*----------------------------------------------------------------------------- * Ninja Speed Testing Methods diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 7f2e642ca..5653a46f4 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -185,7 +185,7 @@ class ninjaArmy */ int setNinjaComNumRuns( const int nIndex, const int RunNumber, char ** papszOptions=NULL ); -#endif //NINJA_GUI + /** * \brief Returns the ninjaCom for a ninja * @@ -193,7 +193,7 @@ class ninjaArmy * \return com the ninjaComClass of a ninja */ ninjaComClass * getNinjaCom( const int nIndex, char ** papszOptions=NULL ); -//#endif //NINJA_GUI +#endif //NINJA_GUI /*----------------------------------------------------------------------------- * Ninja speed testing Methods diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index b06852e8d..bd9be7634 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -276,7 +276,7 @@ void ninjaLoggingComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComM fprintf(fpLog, "\nERROR: %s\n", ninjaComMsg); } -#ifdef NINJA_GUI +#ifdef NINJA_QTGUI //********************************************************************** // ninjaGUIComHandler() //********************************************************************** @@ -445,7 +445,7 @@ void ninjaGUIComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { } -#endif // NINJA_GUI +#endif // NINJA_QTGUI //********************************************************************** // ninjaWFDSSComHandler() diff --git a/src/ninja/ninjaCom.h b/src/ninja/ninjaCom.h index 66f514d61..4545ccaac 100644 --- a/src/ninja/ninjaCom.h +++ b/src/ninja/ninjaCom.h @@ -42,7 +42,7 @@ #include "omp.h" #endif -#ifdef NINJA_GUI +#ifdef NINJA_QTGUI #include #include #include @@ -52,7 +52,7 @@ #define NINJA_MSG_SIZE 1000 class ninjaComClass //virtual base class -#ifdef NINJA_GUI +#ifdef NINJA_QTGUI : public QObject #endif { @@ -132,7 +132,7 @@ class ninjaLoggingComHandler : public ninjaComClass //concrete class virtual void ninjaComHandler(msgType eMsg, const char *ninjaComMsg); }; -#ifndef NINJA_GUI +#ifndef NINJA_QTGUI class ninjaGUIComHandler : public ninjaComClass //concrete class { public: @@ -153,7 +153,7 @@ class ninjaGUIComHandler : public ninjaComClass //concrete class void sendMessage(QString message, QColor color = Qt::white); }; -#endif // NINJA_GUI +#endif // NINJA_QTGUI class ninjaWFDSSComHandler : public ninjaComClass //concrete class { diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 7e56ec5db..4c81d8758 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -556,7 +556,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetCommunication * * \return a pointer to the ninjaComClass of the given ninja on success, a NULL pointer otherwise. */ -//#ifdef NINJA_GUI +#ifdef NINJA_GUI WINDNINJADLL_EXPORT ninjaComClass * NinjaGetCommunication ( NinjaArmyH * army, const int nIndex, char ** papszOptions ) { @@ -569,7 +569,7 @@ WINDNINJADLL_EXPORT ninjaComClass * NinjaGetCommunication return NINJA_E_NULL_PTR; } } -//#endif //NINJA_GUI +#endif //NINJA_GUI /** * \brief Set the DEM to use for the simulations. diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 09da217af..2d3bfec5a 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -142,10 +142,10 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaSetCommunication ( NinjaArmyH * ninjaArmy, const int nIndex, const char * comType, char ** options ); -//#ifdef NINJA_GUI +#ifdef NINJA_GUI WINDNINJADLL_EXPORT ninjaComClass * NinjaGetCommunication ( NinjaArmyH * ninjaArmy, const int nIndex, char ** options ); -//#endif //NINJA_GUI +#endif //NINJA_GUI /* Input Parameters */ WINDNINJADLL_EXPORT NinjaErr NinjaSetInputSpeed From 662cb92268fbb09414f692afc7487d0370cf612b Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 22 Aug 2025 12:30:55 -0600 Subject: [PATCH 205/435] Added header comments to API functions and made small code adjusted in point init inputs, for #636 --- src/gui/pointinitializationinput.cpp | 24 +++++------ src/gui/pointinitializationinput.h | 2 + src/ninja/windninja.cpp | 64 ++++++++++++++++++++++++++-- src/ninja/windninja.h | 2 +- 4 files changed, 73 insertions(+), 19 deletions(-) diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 653346118..278be97f0 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -42,8 +42,6 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* ui->weatherStationDataDownloadButton->setIcon(QIcon(":/server_go.png")); ui->weatherStationDataDownloadCancelButton->setIcon(QIcon(":/cancel.png")); - ui->downloadBetweenDatesStartTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); - ui->downloadBetweenDatesEndTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); ui->weatherStationDataStartDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); ui->weatherStationDataEndDateTimeEdit->setDateTime(QDateTime::currentDateTime()); @@ -76,6 +74,7 @@ void PointInitializationInput::pointInitializationGroupBoxToggled(bool checked) void PointInitializationInput::pointInitializationDownloadDataButtonClicked() { + ui->inputsStackedWidget->setCurrentIndex(20); } @@ -255,7 +254,7 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() QModelIndexList selectedRows = ui->pointInitializationTreeView->selectionModel()->selectedRows(); stationFiles.clear(); - QVector stationFileTypes; + stationFileTypes.clear(); maxStationTime = QDateTime(); minStationTime = QDateTime(); @@ -280,8 +279,8 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() QByteArray filePathBytes = recentFileSelected.toUtf8(); const char* filePath = filePathBytes.constData(); - char** papszOptions = nullptr; - int stationHeader = NinjaGetHeaderVersion(filePath, papszOptions); + char** options = nullptr; + int stationHeader = NinjaGetWxStationHeaderVersion(filePath, options); qDebug() << "[GUI-Point] Station Header: " << stationHeader; bool timeSeriesFlag = true; @@ -322,16 +321,13 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() } } - if (stationHeader == 2) - { - ui->pointInitializationDataTimeStackedWidget->setCurrentIndex(timeSeriesFlag ? 0 : 1); + ui->pointInitializationDataTimeStackedWidget->setCurrentIndex(timeSeriesFlag ? 0 : 1); - if (!timeSeriesFlag) - { - QDateTime dateModified = QFileInfo(recentFileSelected).birthTime(); - ui->weatherStationDataTextEdit->setText("Simulation time set to: " + dateModified.toString()); - ui->weatherStationDataTextEdit->setProperty("simulationTime", dateModified); - } + if (!timeSeriesFlag) + { + QDateTime dateModified = QFileInfo(recentFileSelected).birthTime(); + ui->weatherStationDataTextEdit->setText("Simulation time set to: " + dateModified.toString()); + ui->weatherStationDataTextEdit->setProperty("simulationTime", dateModified); } ui->pointInitializationTreeView->setProperty("timeSeriesFlag", timeSeriesFlag); } diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index 1656f80b9..1fb1ac9fd 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -80,6 +80,7 @@ private slots: QFileSystemModel *stationFileSystemModel; QDateTime maxStationTime, minStationTime; QVector stationFiles; + QVector stationFileTypes; QVector openStationFolders; static int fetchStationFromBbox(QVector year, @@ -104,6 +105,7 @@ private slots: bool fetchLatestFlag, QString outputPath); void fetchStationDataFinished(); + bool readTimeSeries(QModelIndex row); void readStationTime(QString startDateTime, QString stopDateTime); void updateTimeSteps(); }; diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 376780342..db8f964a7 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -2159,12 +2159,37 @@ WINDNINJADLL_EXPORT NinjaErr NinjaCancelAndReset( NinjaArmyH * army, char ** pap /*----------------------------------------------------------------------------- * Helper Methods -*-----------------------------------------------------------------------------*/ -WINDNINJADLL_EXPORT int NinjaGetHeaderVersion(const char * filePath, char ** papszOptions) +*-----------------------------------------------------------------------------*/ +/** + * \brief Get the header version for a weather station file. + * + * \param stationPath The file path for the weather station file. + * + * \return Header version number (1 = Old Format, 2 = New Format, 3 = csv list for time series, 4 = csv list for non time series) + */ +WINDNINJADLL_EXPORT int NinjaGetWxStationHeaderVersion(const char * stationPath, char ** options) { - return wxStation::GetHeaderVersion(filePath); + return wxStation::GetHeaderVersion(stationPath); } +/** + * \brief Get a time series in UTC with a specific number time steps between the inputted start and stop times. + * + * \param inputYearList A pointer to an array of input years. + * \param inputMonthList A pointer to an array of input months. + * \param inputDayList A pointer to an array of input days. + * \param inputHourList A pointer to an array of input hours. + * \param inputMinuteList A pointer to an array of input minutes. + * \param outputYearList A pointer to an array of output years in UTC. + * \param outputMonthList A pointer to an array of output months in UTC. + * \param outputDayList A pointer to an array of output days. + * \param outputHourList A pointer to an array of output hours. + * \param outputMinuteList A pointer to an array of output minutes. + * \param nTimeSteps Number of time steps wanted between output date times. + * \param timeZone The time zone of input date times. + * + * \return NINJA_SUCCESS on success, non-zero otherwise. + */ WINDNINJADLL_EXPORT NinjaErr NinjaGetTimeList( const int * inputYearList, const int * inputMonthList, const int * inputDayList, const int * inputHourList, const int * inputMinuteList, @@ -2197,12 +2222,31 @@ WINDNINJADLL_EXPORT NinjaErr NinjaGetTimeList( return NINJA_SUCCESS; } +/** + * \brief Get a date time in UTC from an inpute date time in a specified timezone. + * + * \param inputYear An input year. + * \param inputMonth An input month. + * \param inputDay An input day. + * \param inputHour An hour. + * \param inputMinute An input minute. + * \param timeZone The time zone of input date times. + * \param outputYear A pointer to an output year in UTC. + * \param outputMonth A pointer to an output month in UTC. + * \param outputDay A pointer to an output day in UTC. + * \param outputHour A pointer to an output hour in UTC. + * \param outputMinute A pointer to an output minute in UTC. + * + * \return NINJA_SUCCESS on success, non-zero otherwise. + */ WINDNINJADLL_EXPORT NinjaErr NinjaGenerateSingleTimeObject( int inputYear, int inputMonth, int inputDay, int inputHour, int inputMinute, const char * timeZone, int * outYear, int * outMonth, int* outDay, int * outHour, int * outMinute) { if (!outYear || !outMonth || !outDay || !outHour || !outMinute) - return NINJA_E_OTHER; // or appropriate error + { + return NINJA_E_OTHER; + } boost::posix_time::ptime timeObject = pointInitialization::generateSingleTimeObject(inputYear, inputMonth, inputDay, inputHour, inputMinute, std::string(timeZone)); @@ -2219,6 +2263,18 @@ WINDNINJADLL_EXPORT NinjaErr NinjaGenerateSingleTimeObject( return NINJA_SUCCESS; } +/** + * \brief Get a time series in UTC with a specific number of time steps between the inputted start and stop times. + * + * \param yearList A pointer to an array of years. + * \param monthList A pointer to an array of months. + * \param dayList A pointer to an array of days. + * \param hourList A pointer to an array of hours. + * \param minuteList A pointer to an array of minutes. + * \param listSize The number of elements in the input arrays. + * + * \return NINJA_SUCCESS on success, non-zero otherwise. + */ WINDNINJADLL_EXPORT NinjaErr NinjaCheckTimeDuration (int* yearList, int* monthList, int * dayList, int * minuteList, int *hourList, int listSize, char ** papszOptions) { diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index adf9eb83e..175d325d9 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -349,7 +349,7 @@ typedef int NinjaErr; /*----------------------------------------------------------------------------- * Helper Methods *-----------------------------------------------------------------------------*/ - WINDNINJADLL_EXPORT int NinjaGetHeaderVersion(const char * filePath, char ** papszOptions); + WINDNINJADLL_EXPORT int NinjaGetWxStationHeaderVersion(const char * filePath, char ** papszOptions); WINDNINJADLL_EXPORT NinjaErr NinjaGetTimeList( const int* inputYearList, const int* inputMonthList, const int* inputDayList, const int* inputHourList, const int* inputMinuteList, From 8a01834162905f5b9890373f2c65391d4798fc9d Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 22 Aug 2025 14:27:54 -0600 Subject: [PATCH 206/435] can now compile ninjaCom with "#ifdef NINJA_GUI" in it, not yet trying to connect to the emited ninjaGUIComHandler signals. Note that I swapped from the older "add_definitions(-DNINJA_GUI)" method in /windninja/CMakeLists.txt, to a newer "target_compile_definitions(ninja PUBLIC NINJA_GUI)" method in /windninja/src/ninja/CMakeLists.txt. The gui was building fine with the older method, but the cli, which now has the "#ifdef NINJA_GUI" wrappers in ninjaCom.h/.cpp when built alongside the gui, had troubles compiling with the older method. I did some cleanup of /windninja/src/cli/CMakeLists.txt to try to help, but no luck, had to switch to the newer method now instead of in a later step. But it was a good thing to discover, because it turns out that when I had tested before, the cli was accidentally building using qt5 libraries, the current cleanup of /windninja/src/cli/CMakeLists.txt fixes the cli ninjaCom libraries to build with qt6 instead of native qt5. For issue #654, related to commits 394ca5f2936e9cfac2c1885fc813721fc51fccac and d58ade11281b8ee161ad4c5bcdb911edcd17a585. --- CMakeLists.txt | 3 --- src/cli/CMakeLists.txt | 16 +++++++++++----- src/cli/cmake_cli.cpp | 2 +- src/ninja/CMakeLists.txt | 19 ++++++++++++++++++- src/ninja/ninjaCom.cpp | 4 ++-- src/ninja/ninjaCom.h | 8 ++++---- 6 files changed, 36 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 586858989..3df24954a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -152,9 +152,6 @@ ENDIF(USE_VCPKG) # Ninja executables option(NINJA_GUI "Build Qt GUI" ON) -if(NINJA_GUI) - add_definitions(-DNINJA_GUI) -endif() option(NINJA_CLI "Build Command Line Interface" ON) diff --git a/src/cli/CMakeLists.txt b/src/cli/CMakeLists.txt index 0cf2c458e..e4b8a1d90 100644 --- a/src/cli/CMakeLists.txt +++ b/src/cli/CMakeLists.txt @@ -15,7 +15,12 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -#cmake_minimum_required(VERSION 2.6) +#cmake_minimum_required(VERSION 3.16) + +if(NINJA_GUI) + find_package(QT NAMES Qt6 REQUIRED COMPONENTS Widgets) + find_package(Qt6 REQUIRED COMPONENTS Widgets) +endif(NINJA_GUI) include_directories(${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}/src/ninja @@ -29,13 +34,13 @@ set(LINK_LIBS ${Boost_LIBRARIES} ${NETCDF_LIBRARIES_C} ${CURL_LIBRARIES}) -if(NINJA_GUI AND NINJA_CLI) +if(NINJA_GUI) set(LINK_LIBS ${LINK_LIBS} - ${QT_LIBRARIES}) + Qt${QT_VERSION_MAJOR}::Widgets) if(PACKAGE_DEBUG) message("CLI Linking to Qt Libraries") endif(PACKAGE_DEBUG) -endif(NINJA_GUI AND NINJA_CLI) +endif(NINJA_GUI) if(WIN32 OR APPLE) set(LINK_LIBS ${LINK_LIBS} ${PROJECT_BINARY_DIR}/src/ninja/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}ninja${CMAKE_STATIC_LIBRARY_SUFFIX}) @@ -49,8 +54,9 @@ endif() add_executable(WindNinja_cli cmake_cli.cpp) -target_link_libraries(WindNinja_cli ${LINK_LIBS}) add_dependencies(WindNinja_cli ninja) +target_link_libraries(WindNinja_cli ${LINK_LIBS}) + install(TARGETS WindNinja_cli DESTINATION bin COMPONENT apps) diff --git a/src/cli/cmake_cli.cpp b/src/cli/cmake_cli.cpp index d9e39b8ec..4150005cf 100644 --- a/src/cli/cmake_cli.cpp +++ b/src/cli/cmake_cli.cpp @@ -2,7 +2,7 @@ * * $Id:$ * - * Project: WindNinja Qt GUI + * Project: WindNinja cli * Purpose: main() function to initiate cli * Author: Kyle Shannon * diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt index d50f4ae66..d2303014c 100644 --- a/src/ninja/CMakeLists.txt +++ b/src/ninja/CMakeLists.txt @@ -17,6 +17,11 @@ #cmake_minimum_required(VERSION 3.16) +if(NINJA_GUI) + find_package(QT NAMES Qt6 REQUIRED COMPONENTS Widgets) + find_package(Qt6 REQUIRED COMPONENTS Widgets) +endif(NINJA_GUI) + if (APPLE) set(CMAKE_MACOSX_RPATH OFF) endif (APPLE) @@ -132,6 +137,9 @@ set(LINK_LIBS ${NETCDF_LIBRARIES_C} if(NINJA_GUI) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTORCC ON) include_directories(${NINJA_INCLUDES} ${QT_INCLUDES}) set(NINJA_SOURCES ${NINJA_SOURCES} ${NINJA_LIB_INCLUDES_MOC}) set(LINK_LIBS ${LINK_LIBS} ${QT_LIBRARIES}) @@ -151,10 +159,19 @@ else() endif() endif() -target_link_libraries(ninja ${LINK_LIBS}) +message(STATUS "The value of NINJA_GUI in /windninja/src/ninja/CMakeLists.txt is: ${NINJA_GUI}") +if(NINJA_GUI) + target_link_libraries(ninja PUBLIC ${LINK_LIBS} PUBLIC Qt${QT_VERSION_MAJOR}::Widgets) ## needs to be PUBLIC for the gui to properly find these +else(NINJA_GUI) + target_link_libraries(ninja ${LINK_LIBS}) ## auto picks PUBLIC or PRIVATE depending on the need +endif(NINJA_GUI) + + +target_compile_definitions(ninja PUBLIC NINJA_GUI) ## needs to be PUBLIC for the cli and the gui to properly find it, for their #ifdef GUI sections target_include_directories(ninja PUBLIC $ $) + install(TARGETS ninja DESTINATION lib COMPONENT libs) if(WIN32) install(TARGETS WindNinjadll DESTINATION ${lib_dest}) diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index bd9be7634..b06852e8d 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -276,7 +276,7 @@ void ninjaLoggingComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComM fprintf(fpLog, "\nERROR: %s\n", ninjaComMsg); } -#ifdef NINJA_QTGUI +#ifdef NINJA_GUI //********************************************************************** // ninjaGUIComHandler() //********************************************************************** @@ -445,7 +445,7 @@ void ninjaGUIComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { } -#endif // NINJA_QTGUI +#endif // NINJA_GUI //********************************************************************** // ninjaWFDSSComHandler() diff --git a/src/ninja/ninjaCom.h b/src/ninja/ninjaCom.h index 4545ccaac..66f514d61 100644 --- a/src/ninja/ninjaCom.h +++ b/src/ninja/ninjaCom.h @@ -42,7 +42,7 @@ #include "omp.h" #endif -#ifdef NINJA_QTGUI +#ifdef NINJA_GUI #include #include #include @@ -52,7 +52,7 @@ #define NINJA_MSG_SIZE 1000 class ninjaComClass //virtual base class -#ifdef NINJA_QTGUI +#ifdef NINJA_GUI : public QObject #endif { @@ -132,7 +132,7 @@ class ninjaLoggingComHandler : public ninjaComClass //concrete class virtual void ninjaComHandler(msgType eMsg, const char *ninjaComMsg); }; -#ifndef NINJA_QTGUI +#ifndef NINJA_GUI class ninjaGUIComHandler : public ninjaComClass //concrete class { public: @@ -153,7 +153,7 @@ class ninjaGUIComHandler : public ninjaComClass //concrete class void sendMessage(QString message, QColor color = Qt::white); }; -#endif // NINJA_QTGUI +#endif // NINJA_GUI class ninjaWFDSSComHandler : public ninjaComClass //concrete class { From 371f2589504f3c6046eb91a282d2d39c7f64d2e2 Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 22 Aug 2025 14:55:02 -0600 Subject: [PATCH 207/435] finally connecting ninjaCom fully to the gui. IT WORKS! Though I had to add functionality to ninjaArmy::setNinjaCommunication() to allow gui ninjaCom type to get it to work. Without that change, the connect() statements would throw weird disconnect errors. Turns out this was because ninjaCom was of the wrong type, and the other ninjaCom types don't have the sendMessage() function, the connect() was trying to connect to a non-existing function definition. For issue #654. --- src/gui/mainwindow.cpp | 9 ++++++++- src/ninja/ninjaArmy.cpp | 6 ++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 19453be8e..f0df345d1 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -447,6 +447,7 @@ void MainWindow::connectSignals() //connect other writeToConsoles to the main writeToConsole connect(menuBar, &MenuBar::writeToConsole, this, &MainWindow::writeToConsole); +// connect(menuBar, SIGNAL( writeToConsole(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) )); // other way to do it } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) @@ -868,7 +869,7 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i for(unsigned int i=0; ininjaCom(ninjaComClass::ninjaNone, "fudge1"); // more correct form, I guess it picks the ninjaComHandler by virtual type +// connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::writeToConsole ); // more exact way of doing it +//// connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ) ); // other way of doing it + +//// connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ) ); // another way of doing it, kind of weird to cast to its own class though + connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ) ); // other way of doing it + err = NinjaSetNumberCPUs(ninjaArmy, i, ui->numberOfProcessorsSpinBox->value(), papszOptions); if(err != NINJA_SUCCESS) { diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index a4dc0cf5d..7a5b85f6a 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -1328,6 +1328,12 @@ int ninjaArmy::setNinjaCommunication( const int nIndex, std::string comType, ( nIndex, ninjaComClass::ninjaCLICom ); retval = NINJA_SUCCESS; } + else if( comType == "ninjaGUICom" || comType == "gui" ) + { + ninjas[ nIndex ]->set_ninjaCommunication + ( nIndex, ninjaComClass::ninjaGUICom ); + retval = NINJA_SUCCESS; + } else if( comType == "ninjaQuietCom" || comType == "quiet" ) { ninjas[ nIndex ]->set_ninjaCommunication From 69cb7dfe76fd446eda43035d8e7c4341041cf9a7 Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 22 Aug 2025 15:01:08 -0600 Subject: [PATCH 208/435] cleaned up ninjaCom qt6 gui print and connect statements, pairing down to just the two best methods to do the connect(). For issue #654 --- src/gui/mainwindow.cpp | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index f0df345d1..3b572e155 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -875,20 +875,7 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i qDebug() << "NinjaSetCommunication: err =" << err; } - int comRunNumber = *NinjaGetCommunication( ninjaArmy, i, papszOptions )->runNumber; // * dereferences the pointer to get the raw value, what a weird thing to store, an int*. - qDebug() << QString::number( comRunNumber ); - qDebug() << comRunNumber; - NinjaGetCommunication( ninjaArmy, i, papszOptions )->ninjaCom(ninjaComClass::ninjaNone, "testing..."); - ninjaComClass * comPtr = NinjaGetCommunication( ninjaArmy, i, papszOptions ); - comPtr->ninjaCom(ninjaComClass::ninjaNone, "testing1..."); - - NinjaGetCommunication( ninjaArmy, i, papszOptions )->ninjaComHandler(ninjaComClass::ninjaNone, "fudge"); // woo hoo!! compiles and RUNS, printed the message - NinjaGetCommunication( ninjaArmy, i, papszOptions )->ninjaCom(ninjaComClass::ninjaNone, "fudge1"); // more correct form, I guess it picks the ninjaComHandler by virtual type - -// connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::writeToConsole ); // more exact way of doing it -//// connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ) ); // other way of doing it - -//// connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ) ); // another way of doing it, kind of weird to cast to its own class though + //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::writeToConsole ); // more exact way of doing it connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ) ); // other way of doing it err = NinjaSetNumberCPUs(ninjaArmy, i, ui->numberOfProcessorsSpinBox->value(), papszOptions); From 6faffa6bcb2b7d6265e5b805699ec8bc2f20f16b Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 22 Aug 2025 15:16:01 -0600 Subject: [PATCH 209/435] Time dates are displaying the proper time after being read from station files, for #636 --- src/gui/mainwindow.cpp | 1 + src/gui/mainwindow.ui | 4 +-- src/gui/pointinitializationinput.cpp | 46 ++++++++++++++++++++-------- 3 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 41be7e399..cbb197e09 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -621,6 +621,7 @@ void MainWindow::solveButtonClicked() initializationMethod = "point"; QVector stationFiles = pointInitializationInput->getStationFiles(); + QString DEMTimeZone = ui->timeZoneComboBox->currentText(); QByteArray timeZoneBytes = ui->timeZoneComboBox->currentText().toUtf8(); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index a048e6e38..dae32da15 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -557,7 +557,7 @@ QFrame::Shadow::Sunken - 20 + 10 @@ -1833,7 +1833,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 579 + 558 654 diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 278be97f0..e77016d21 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -42,9 +42,12 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* ui->weatherStationDataDownloadButton->setIcon(QIcon(":/server_go.png")); ui->weatherStationDataDownloadCancelButton->setIcon(QIcon(":/cancel.png")); + ui->downloadBetweenDatesStartTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); + ui->downloadBetweenDatesEndTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime()); ui->weatherStationDataStartDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); ui->weatherStationDataEndDateTimeEdit->setDateTime(QDateTime::currentDateTime()); + connect(ui->pointInitializationGroupBox, &QGroupBox::toggled, this, &PointInitializationInput::pointInitializationGroupBoxToggled); connect(ui->pointInitializationDownloadDataButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitializationDownloadDataButtonClicked); connect(ui->weatherStationDataDownloadCancelButton, &QPushButton::clicked, this, &PointInitializationInput::weatherStationDataDownloadCancelButtonClicked); @@ -85,21 +88,39 @@ void PointInitializationInput::weatherStationDataDownloadCancelButtonClicked() void PointInitializationInput::weatherStationDataDownloadButtonClicked() { + QString DEMTimeZone = ui->timeZoneComboBox->currentText(); + QByteArray timeZoneBytes = ui->timeZoneComboBox->currentText().toUtf8(); QDateTime start = ui->downloadBetweenDatesStartTimeDateTimeEdit->dateTime(); QDateTime end = ui->downloadBetweenDatesEndTimeDateTimeEdit->dateTime(); - QDateTime startUtc = start.toUTC(); - QDateTime endUtc = end.toUTC(); - QVector year = {startUtc.date().year(), endUtc.date().year()}; - QVector month = {startUtc.date().month(), endUtc.date().month()}; - QVector day = {startUtc.date().day(), endUtc.date().day()}; - QVector hour = {startUtc.time().hour(), endUtc.time().hour()}; - QVector minute = {startUtc.time().minute(), endUtc.time().minute()}; + QVector year = {start.date().year(), end.date().year()}; + QVector month = {start.date().month(), end.date().month()}; + QVector day = {start.date().day(), end.date().day()}; + QVector hour = {start.time().hour(), end.time().hour()}; + QVector minute = {start.time().minute(), end.time().minute()}; + + QVector outYear(2); + QVector outMonth(2); + QVector outDay(2); + QVector outHour(2); + QVector outMinute(2); + + NinjaErr err = NinjaGetTimeList( + year.data(), month.data(), day.data(), + hour.data(), minute.data(), + outYear.data(), outMonth.data(), outDay.data(), + outHour.data(), outMinute.data(), + 2, timeZoneBytes.data() + ); + if(err != NINJA_SUCCESS) + { + printf("NinjaGetTimeList: err = %d\n", err); + } if(ui->weatherStationDataTimeComboBox->currentIndex() == 1) { char ** options = nullptr; - int err = NinjaCheckTimeDuration(year.data(), month.data(), day.data(), hour.data(), minute.data(), 2, options); + int err = NinjaCheckTimeDuration(outYear.data(), outMonth.data(), outDay.data(), outHour.data(), outMinute.data(), 2, options); if(err != NINJA_SUCCESS) { qDebug() << "NinjaCheckTimeDuration err=" << err; @@ -110,7 +131,6 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() QString outputPath = ui->outputDirectoryLineEdit->text(); QString elevationFile = ui->elevationInputFileLineEdit->property("fullpath").toString(); - QString DEMTimeZone = ui->timeZoneComboBox->currentText(); progress = new QProgressDialog("Fetching Station Data...", QString(), 0, 0, ui->centralwidget); progress->setWindowModality(Qt::WindowModal); @@ -126,14 +146,14 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() QString units = ui->downloadFromDEMComboBox->currentText(); double buffer = ui->downloadFromDEMSpinBox->value(); future = QtConcurrent::run(&PointInitializationInput::fetchStationFromBbox, - year, month, day, hour, minute, + outYear, outMonth, outDay, outHour, outMinute, elevationFile, buffer, units, DEMTimeZone, fetchLatestFlag, outputPath); } else { QString stationList = ui->downloadFromStationIDLineEdit->text(); - future = QtConcurrent::run(&PointInitializationInput::fetchStationByName,year, month, day, hour, minute, + future = QtConcurrent::run(&PointInitializationInput::fetchStationByName,outYear, outMonth, outDay, outHour, outMinute, elevationFile, stationList, DEMTimeZone, fetchLatestFlag, outputPath); } @@ -420,8 +440,8 @@ void PointInitializationInput::readStationTime(QString startDateTime, QString st ui->weatherStationDataStartTimeLabel->setText("Start Time (" + DEMTimeZone + "):"); ui->weatherStationDataEndTimeLabel->setText("End Time (" + DEMTimeZone + "):"); - ui->weatherStationDataStartDateTimeEdit->setDateTime(minStationTime); - ui->weatherStationDataEndDateTimeEdit->setDateTime(maxStationTime); + ui->weatherStationDataStartDateTimeEdit->setDateTime(QDateTime(minStationTime.date(), minStationTime.time(), Qt::LocalTime)); + ui->weatherStationDataEndDateTimeEdit->setDateTime(QDateTime(maxStationTime.date(), maxStationTime.time(), Qt::LocalTime)); ui->weatherStationDataStartDateTimeEdit->setEnabled(true); ui->weatherStationDataEndDateTimeEdit->setEnabled(true); ui->weatherStationDataTimestepsSpinBox->setEnabled(true); From 5d189e151127f8fe8dd939f2c643e83acb2b86b0 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 22 Aug 2025 15:55:23 -0600 Subject: [PATCH 210/435] Added labels for station min and max date time and current time zone when reading station files, for #636 --- src/gui/mainwindow.ui | 103 ++++++++++++++++----------- src/gui/pointinitializationinput.cpp | 36 +++++----- src/gui/surfaceinput.cpp | 1 + 3 files changed, 81 insertions(+), 59 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index dae32da15..c011a3765 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -1873,7 +1873,7 @@ li.checked::marker { content: "\2612"; } false - + @@ -2016,44 +2016,26 @@ li.checked::marker { content: "\2612"; } - - - - Start Time - - - - - - - Stop Time - - - - - - - Number of Time Steps - - - - - + + false - - PointingHandCursor + + 1 - - M/d/yy h:mm + + 99999 - - true + + 1 + + + 24 - + false @@ -2076,22 +2058,40 @@ li.checked::marker { content: "\2612"; } + + + + Stop Time + + + + + + + Start Time + + + - + + + Number of Time Steps + + + + + false - - 1 - - - 99999 + + PointingHandCursor - - 1 + + M/d/yy h:mm - - 24 + + true @@ -2119,6 +2119,27 @@ li.checked::marker { content: "\2612"; } + + + + Current Time Zone: + + + + + + + Current Min Time: + + + + + + + Current Max Time: + + + diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index e77016d21..043755af2 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -391,22 +391,6 @@ void PointInitializationInput::pointInitializationSelectAllButtonClicked() selectionModel->select(selection, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); } -void PointInitializationInput::pointInitializationSelectNoneButtonClicked() -{ - ui->pointInitializationTreeView->selectionModel()->clearSelection(); -} - -void PointInitializationInput::folderExpanded(const QModelIndex &index) -{ - openStationFolders.push_back(stationFileSystemModel->filePath(index)); -} - -void PointInitializationInput::folderCollapsed(const QModelIndex &index) -{ - QString path = stationFileSystemModel->filePath(index); - openStationFolders.removeOne(path); -} - void PointInitializationInput::readStationTime(QString startDateTime, QString stopDateTime) { QString stationTimeFormat = "yyyy-MM-ddTHH:mm:ssZ"; @@ -438,8 +422,8 @@ void PointInitializationInput::readStationTime(QString startDateTime, QString st qDebug() << "[GUI-Point] Start Time (" << DEMTimeZone << "):" << minStationTime.toString(); qDebug() << "[GUI-Point] Stop Time (" << DEMTimeZone << "):" << maxStationTime.toString(); - ui->weatherStationDataStartTimeLabel->setText("Start Time (" + DEMTimeZone + "):"); - ui->weatherStationDataEndTimeLabel->setText("End Time (" + DEMTimeZone + "):"); + ui->weatherStationMinTimeLabel->setText("Current Min Time: " + minStationTime.toString()); + ui->weatherStationMaxTimeLabel->setText("Current Min Time: " + maxStationTime.toString()); ui->weatherStationDataStartDateTimeEdit->setDateTime(QDateTime(minStationTime.date(), minStationTime.time(), Qt::LocalTime)); ui->weatherStationDataEndDateTimeEdit->setDateTime(QDateTime(maxStationTime.date(), maxStationTime.time(), Qt::LocalTime)); ui->weatherStationDataStartDateTimeEdit->setEnabled(true); @@ -451,6 +435,22 @@ void PointInitializationInput::readStationTime(QString startDateTime, QString st qDebug() << "[GUI-Point] Suggested Timesteps:" << timesteps; } +void PointInitializationInput::pointInitializationSelectNoneButtonClicked() +{ + ui->pointInitializationTreeView->selectionModel()->clearSelection(); +} + +void PointInitializationInput::folderExpanded(const QModelIndex &index) +{ + openStationFolders.push_back(stationFileSystemModel->filePath(index)); +} + +void PointInitializationInput::folderCollapsed(const QModelIndex &index) +{ + QString path = stationFileSystemModel->filePath(index); + openStationFolders.removeOne(path); +} + QVector PointInitializationInput::getStationFiles() { return stationFiles; diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 38c2a0599..0cac2d902 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -318,6 +318,7 @@ void SurfaceInput::timeZoneComboBoxCurrentIndexChanged(int index) QString currentTimeZone = ui->timeZoneComboBox->currentText(); QString timeZoneDetails = fetchTimeZoneDetails(currentTimeZone); ui->timeZoneDetailsTextEdit->setText(timeZoneDetails); + ui->weatherStationTimeZoneLabel->setText("Current Time Zone: " + currentTimeZone); } void SurfaceInput::timeZoneAllZonesCheckBoxClicked() From c581ac9c130e227245a8d4cba99854ad671f623e Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 22 Aug 2025 16:01:43 -0600 Subject: [PATCH 211/435] Added matched points parameter to setInitializationMethod API function, for #636 --- src/gui/mainwindow.cpp | 2 +- src/ninja/windninja.cpp | 4 ++-- src/ninja/windninja.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index cbb197e09..047b55783 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -931,7 +931,7 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i printf("NinjaSetNumberCPUs: err = %d\n", err); } - err = NinjaSetInitializationMethod(ninjaArmy, i, initializationMethod, papszOptions); + err = NinjaSetInitializationMethod(ninjaArmy, i, initializationMethod, ui->pointInitializationGroupBox->isChecked(), papszOptions); if(err != NINJA_SUCCESS) { printf("NinjaSetInitializationMethod: err = %d\n", err); diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index db8f964a7..dba683056 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -563,12 +563,12 @@ WINDNINJADLL_EXPORT NinjaErr NinjaStartRuns * \return NINJA_SUCCESS on success, non-zero otherwise. */ WINDNINJADLL_EXPORT NinjaErr NinjaSetInitializationMethod - (NinjaArmyH * army, const int nIndex, const char * initializationMethod, char ** papszOptions ) + (NinjaArmyH * army, const int nIndex, const char * initializationMethod, bool matchedPoints, char ** papszOptions ) { if( NULL != army && NULL != initializationMethod ) { return reinterpret_cast( army )->setInitializationMethod - ( nIndex, std::string( initializationMethod ), true); + ( nIndex, std::string( initializationMethod ), matchedPoints); } else { diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 175d325d9..d64a1477d 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -134,7 +134,7 @@ typedef int NinjaErr; ( NinjaArmyH * ninjaArmy, const int nIndex, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaSetInitializationMethod - ( NinjaArmyH * ninjaArmy, const int nIndex, const char * initializationMethod, char ** options ); + ( NinjaArmyH * ninjaArmy, const int nIndex, const char * initializationMethod, bool matchedPoints, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaSetNumberCPUs ( NinjaArmyH * ninjaArmy, const int nIndex, const int nCPUs, char ** options ); From 6436842ef63452b179c1c50a5409994ade8cd7b8 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 22 Aug 2025 16:42:08 -0600 Subject: [PATCH 212/435] Ensured that the download page is reset to default values each time it is visited, for #636 --- src/gui/pointinitializationinput.cpp | 41 ++++++++++++---------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 043755af2..3694c7155 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -33,8 +33,8 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* : QObject(parent), ui(ui) { - ui->weatherStationDataSourceStackedWidget->setCurrentIndex(0); ui->pointInitializationDataTimeStackedWidget->setCurrentIndex(0); + ui->weatherStationDataSourceStackedWidget->setCurrentIndex(0); ui->weatherStationDataTimeStackedWidget->setCurrentIndex(0); ui->pointInitializationDownloadDataButton->setIcon(QIcon(":/server_go.png")); @@ -42,8 +42,6 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* ui->weatherStationDataDownloadButton->setIcon(QIcon(":/server_go.png")); ui->weatherStationDataDownloadCancelButton->setIcon(QIcon(":/cancel.png")); - ui->downloadBetweenDatesStartTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); - ui->downloadBetweenDatesEndTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime()); ui->weatherStationDataStartDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); ui->weatherStationDataEndDateTimeEdit->setDateTime(QDateTime::currentDateTime()); @@ -77,6 +75,14 @@ void PointInitializationInput::pointInitializationGroupBoxToggled(bool checked) void PointInitializationInput::pointInitializationDownloadDataButtonClicked() { + ui->weatherStationDataSourceComboBox->setCurrentIndex(0); + ui->weatherStationDataTimeComboBox->setCurrentIndex(0); + + ui->downloadFromStationIDLineEdit->clear(); + ui->downloadFromDEMSpinBox->setValue(0); + + ui->downloadBetweenDatesStartTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); + ui->downloadBetweenDatesEndTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime()); ui->inputsStackedWidget->setCurrentIndex(20); } @@ -89,7 +95,7 @@ void PointInitializationInput::weatherStationDataDownloadCancelButtonClicked() void PointInitializationInput::weatherStationDataDownloadButtonClicked() { QString DEMTimeZone = ui->timeZoneComboBox->currentText(); - QByteArray timeZoneBytes = ui->timeZoneComboBox->currentText().toUtf8(); + QByteArray DEMTimeZoneBytes = ui->timeZoneComboBox->currentText().toUtf8(); QDateTime start = ui->downloadBetweenDatesStartTimeDateTimeEdit->dateTime(); QDateTime end = ui->downloadBetweenDatesEndTimeDateTimeEdit->dateTime(); @@ -98,26 +104,21 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() QVector day = {start.date().day(), end.date().day()}; QVector hour = {start.time().hour(), end.time().hour()}; QVector minute = {start.time().minute(), end.time().minute()}; - - QVector outYear(2); - QVector outMonth(2); - QVector outDay(2); - QVector outHour(2); - QVector outMinute(2); + QVector outYear(2), outMonth(2), outDay(2), outHour(2), outMinute(2); NinjaErr err = NinjaGetTimeList( year.data(), month.data(), day.data(), hour.data(), minute.data(), outYear.data(), outMonth.data(), outDay.data(), outHour.data(), outMinute.data(), - 2, timeZoneBytes.data() + 2, DEMTimeZoneBytes.data() ); if(err != NINJA_SUCCESS) { printf("NinjaGetTimeList: err = %d\n", err); } - if(ui->weatherStationDataTimeComboBox->currentIndex() == 1) + if(ui->weatherStationDataTimeComboBox->currentIndex() == 1) // TODO: Add proper error handling for a bad time duration { char ** options = nullptr; int err = NinjaCheckTimeDuration(outYear.data(), outMonth.data(), outDay.data(), outHour.data(), outMinute.data(), 2, options); @@ -128,7 +129,6 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() } bool fetchLatestFlag = ui->weatherStationDataTimeComboBox->currentIndex() ? 0 : 1; - QString outputPath = ui->outputDirectoryLineEdit->text(); QString elevationFile = ui->elevationInputFileLineEdit->property("fullpath").toString(); @@ -159,8 +159,7 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() } futureWatcher->setFuture(future); - connect(futureWatcher, &QFutureWatcher::finished, - this, &PointInitializationInput::fetchStationDataFinished); + connect(futureWatcher, &QFutureWatcher::finished,this, &PointInitializationInput::fetchStationDataFinished); } int PointInitializationInput::fetchStationFromBbox(QVector year, @@ -175,10 +174,8 @@ int PointInitializationInput::fetchStationFromBbox(QVector year, bool fetchLatestFlag, QString outputPath) { - char ** papszOptions = NULL; - NinjaErr err = 0; - - err = NinjaFetchStationFromBBox(year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), buffer, units.toUtf8().constData(), osTimeZone.toUtf8().constData(), fetchLatestFlag, outputPath.toUtf8().constData(), false, papszOptions); + char ** options = NULL; + NinjaErr err = NinjaFetchStationFromBBox(year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), buffer, units.toUtf8().constData(), osTimeZone.toUtf8().constData(), fetchLatestFlag, outputPath.toUtf8().constData(), false, options); if (err != NINJA_SUCCESS){ qDebug() << "NinjaFetchStationFromBbox: err =" << err; return err; @@ -200,10 +197,8 @@ int PointInitializationInput::fetchStationByName(QVector year, bool fetchLatestFlag, QString outputPath) { - char ** papszOptions = NULL; - NinjaErr err = 0; - - err = NinjaFetchStationByName(year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), stationList.toUtf8().constData(), osTimeZone.toUtf8().constData(), fetchLatestFlag, outputPath.toUtf8().constData(), false, papszOptions); + char ** options = NULL; + NinjaErr err = NinjaFetchStationByName(year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), stationList.toUtf8().constData(), osTimeZone.toUtf8().constData(), fetchLatestFlag, outputPath.toUtf8().constData(), false, options); if (err != NINJA_SUCCESS){ qDebug() << "NinjaFetchFetchStationByName: err =" << err; return err; From c789ee49d196abd481e5e40142d72b94dead9e03 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 25 Aug 2025 10:24:51 -0600 Subject: [PATCH 213/435] Adjusted behavior for changing start, stop times and time steps, for #636 --- src/gui/mainwindow.cpp | 42 ++++++++++++++++++++++------ src/gui/pointinitializationinput.cpp | 14 +++++++++- src/gui/pointinitializationinput.h | 3 +- 3 files changed, 48 insertions(+), 11 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 047b55783..57e6585ff 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -657,16 +657,40 @@ void MainWindow::solveButtonClicked() QVector outHour(nTimeSteps); QVector outMinute(nTimeSteps); - NinjaErr err = NinjaGetTimeList( - year.data(), month.data(), day.data(), - hour.data(), minute.data(), - outYear.data(), outMonth.data(), outDay.data(), - outHour.data(), outMinute.data(), - nTimeSteps, timeZoneBytes.data() - ); - if(err != NINJA_SUCCESS) + if(nTimeSteps == 1) { - printf("NinjaGetTimeList: err = %d\n", err); + int startYear = year[0]; + int startMonth = month[0]; + int startDay = day[0]; + int startHour = hour[0]; + int startMinute = minute[0]; + + int endYear, endMonth, endDay, endHour, endMinute; + + NinjaErr err = NinjaGenerateSingleTimeObject( + startYear, startMonth, startDay, startHour, startMinute, + timeZoneBytes.constData(), + &endYear, &endMonth, &endDay, &endHour, &endMinute + ); + + outYear[0] = endYear; + outMonth[0] = endMonth; + outDay[0] = endDay; + outHour[0] = endHour; + outMinute[0] = endMinute; + } + else { + NinjaErr err = NinjaGetTimeList( + year.data(), month.data(), day.data(), + hour.data(), minute.data(), + outYear.data(), outMonth.data(), outDay.data(), + outHour.data(), outMinute.data(), + nTimeSteps, timeZoneBytes.data() + ); + if(err != NINJA_SUCCESS) + { + printf("NinjaGetTimeList: err = %d\n", err); + } } numNinjas = ui->weatherStationDataTimestepsSpinBox->value(); diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 3694c7155..dda93b921 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -45,7 +45,6 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* ui->weatherStationDataStartDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); ui->weatherStationDataEndDateTimeEdit->setDateTime(QDateTime::currentDateTime()); - connect(ui->pointInitializationGroupBox, &QGroupBox::toggled, this, &PointInitializationInput::pointInitializationGroupBoxToggled); connect(ui->pointInitializationDownloadDataButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitializationDownloadDataButtonClicked); connect(ui->weatherStationDataDownloadCancelButton, &QPushButton::clicked, this, &PointInitializationInput::weatherStationDataDownloadCancelButtonClicked); @@ -56,6 +55,7 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* connect(ui->pointInitializationSelectNoneButton, &QPushButton::clicked, this, &PointInitializationInput::pointInitializationSelectNoneButtonClicked); connect(ui->pointInitializationTreeView, &QTreeView::expanded, this, &PointInitializationInput::folderExpanded); connect(ui->pointInitializationTreeView, &QTreeView::collapsed, this, &PointInitializationInput::folderCollapsed); + connect(ui->weatherStationDataTimestepsSpinBox, &QSpinBox::valueChanged, this, &PointInitializationInput::weatherStationDataTimestepsSpinBoxValueChanged); } void PointInitializationInput::pointInitializationGroupBoxToggled(bool checked) @@ -421,6 +421,10 @@ void PointInitializationInput::readStationTime(QString startDateTime, QString st ui->weatherStationMaxTimeLabel->setText("Current Min Time: " + maxStationTime.toString()); ui->weatherStationDataStartDateTimeEdit->setDateTime(QDateTime(minStationTime.date(), minStationTime.time(), Qt::LocalTime)); ui->weatherStationDataEndDateTimeEdit->setDateTime(QDateTime(maxStationTime.date(), maxStationTime.time(), Qt::LocalTime)); + ui->weatherStationDataStartDateTimeEdit->setDateTimeRange(minStationTime, maxStationTime); + ui->weatherStationDataEndDateTimeEdit->setDateTimeRange(minStationTime, maxStationTime); + ui->weatherStationDataStartDateTimeEdit->setCalendarPopup(false); + ui->weatherStationDataEndDateTimeEdit->setCalendarPopup(false); ui->weatherStationDataStartDateTimeEdit->setEnabled(true); ui->weatherStationDataEndDateTimeEdit->setEnabled(true); ui->weatherStationDataTimestepsSpinBox->setEnabled(true); @@ -446,8 +450,16 @@ void PointInitializationInput::folderCollapsed(const QModelIndex &index) openStationFolders.removeOne(path); } +void PointInitializationInput::weatherStationDataTimestepsSpinBoxValueChanged(int value) +{ + ui->weatherStationDataEndDateTimeEdit->setDisabled(value == 1); +} + QVector PointInitializationInput::getStationFiles() { return stationFiles; } + + + diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index 1fb1ac9fd..163be85e1 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -68,9 +68,10 @@ private slots: void pointInitializationTreeViewItemSelectionChanged(); void pointInitializationSelectAllButtonClicked(); void pointInitializationSelectNoneButtonClicked(); - void setupTreeView(); void folderExpanded(const QModelIndex &index); void folderCollapsed(const QModelIndex &index); + void weatherStationDataTimestepsSpinBoxValueChanged(int value); + void setupTreeView(); private: Ui::MainWindow *ui; From 10e00644fc6fe9c8bbf849d9c3803f2d20cbebcb Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 25 Aug 2025 11:45:00 -0600 Subject: [PATCH 214/435] Small code clean up and refactoring, for #636 --- src/gui/mainwindow.cpp | 5 +- src/gui/mainwindow.ui | 82 +++++++++++++++++++--------- src/gui/pointinitializationinput.cpp | 72 ++++++++++++------------ src/gui/pointinitializationinput.h | 2 +- 4 files changed, 99 insertions(+), 62 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 57e6585ff..71bfd9880 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -629,8 +629,9 @@ void MainWindow::solveButtonClicked() stationFilesBytes.reserve(stationFiles.size()); std::vector stationFileNames; stationFileNames.reserve(stationFiles.size()); - for (const auto& file : stationFiles) { - stationFilesBytes.push_back(file.toUtf8()); + for (int i; i < stationFiles.size(); i++) + { + stationFilesBytes.push_back(stationFiles[i].toUtf8()); stationFileNames.push_back(stationFilesBytes.back().constData()); } diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index c011a3765..c66659a0c 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -1873,7 +1873,7 @@ li.checked::marker { content: "\2612"; } false - + @@ -1910,6 +1910,10 @@ li.checked::marker { content: "\2612"; } Download Data + + + :/server_go.png:/server_go.png + @@ -1991,6 +1995,13 @@ li.checked::marker { content: "\2612"; } + + + + Qt::Orientation::Horizontal + + + @@ -2016,22 +2027,10 @@ li.checked::marker { content: "\2612"; } - - - - false - - - 1 - - - 99999 - - - 1 - - - 24 + + + + Stop Time @@ -2058,10 +2057,10 @@ li.checked::marker { content: "\2612"; } - - + + - Stop Time + Number of Time Steps @@ -2072,10 +2071,22 @@ li.checked::marker { content: "\2612"; } - - - - Number of Time Steps + + + + false + + + 1 + + + 99999 + + + 1 + + + 24 @@ -2140,6 +2151,13 @@ li.checked::marker { content: "\2612"; } + + + + Qt::Orientation::Horizontal + + + @@ -2148,6 +2166,10 @@ li.checked::marker { content: "\2612"; } Write Station KML + + + :/weather_cloudy.png:/weather_cloudy.png + @@ -4361,6 +4383,10 @@ li.checked::marker { content: "\2612"; } Download Data + + + :/server_go.png:/server_go.png + @@ -4380,6 +4406,10 @@ li.checked::marker { content: "\2612"; } Cancel + + + :/cancel.png:/cancel.png + @@ -4732,6 +4762,8 @@ QMenu::item:selected { - + + + diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index dda93b921..4f1eeba17 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -36,12 +36,6 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* ui->pointInitializationDataTimeStackedWidget->setCurrentIndex(0); ui->weatherStationDataSourceStackedWidget->setCurrentIndex(0); ui->weatherStationDataTimeStackedWidget->setCurrentIndex(0); - - ui->pointInitializationDownloadDataButton->setIcon(QIcon(":/server_go.png")); - ui->pointInitializationWriteStationKMLCheckBox->setIcon(QIcon(":/weather_cloudy.png")); - ui->weatherStationDataDownloadButton->setIcon(QIcon(":/server_go.png")); - ui->weatherStationDataDownloadCancelButton->setIcon(QIcon(":/cancel.png")); - ui->weatherStationDataStartDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); ui->weatherStationDataEndDateTimeEdit->setDateTime(QDateTime::currentDateTime()); @@ -58,18 +52,20 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* connect(ui->weatherStationDataTimestepsSpinBox, &QSpinBox::valueChanged, this, &PointInitializationInput::weatherStationDataTimestepsSpinBoxValueChanged); } -void PointInitializationInput::pointInitializationGroupBoxToggled(bool checked) +void PointInitializationInput::pointInitializationGroupBoxToggled(bool toggled) { AppState& state = AppState::instance(); - state.isPointInitializationToggled = ui->pointInitializationGroupBox->isChecked(); - if (state.isPointInitializationToggled) { + state.isPointInitializationToggled = toggled; + if (toggled) + { ui->domainAverageCheckBox->setChecked(false); ui->weatherModelCheckBox->setChecked(false); - state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); - state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); } + state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); + state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); + emit requestRefresh(); } @@ -89,6 +85,7 @@ void PointInitializationInput::pointInitializationDownloadDataButtonClicked() void PointInitializationInput::weatherStationDataDownloadCancelButtonClicked() { + ui->pointInitializationTreeView->collapseAll(); ui->inputsStackedWidget->setCurrentIndex(10); } @@ -118,7 +115,7 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() printf("NinjaGetTimeList: err = %d\n", err); } - if(ui->weatherStationDataTimeComboBox->currentIndex() == 1) // TODO: Add proper error handling for a bad time duration + if(ui->weatherStationDataTimeComboBox->currentIndex() == 1) // TODO: Add proper error handling for a bad time duration (someone downloads too much data) { char ** options = nullptr; int err = NinjaCheckTimeDuration(outYear.data(), outMonth.data(), outDay.data(), outHour.data(), outMinute.data(), 2, options); @@ -175,15 +172,19 @@ int PointInitializationInput::fetchStationFromBbox(QVector year, QString outputPath) { char ** options = NULL; - NinjaErr err = NinjaFetchStationFromBBox(year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), buffer, units.toUtf8().constData(), osTimeZone.toUtf8().constData(), fetchLatestFlag, outputPath.toUtf8().constData(), false, options); - if (err != NINJA_SUCCESS){ + NinjaErr err = NinjaFetchStationFromBBox( + year.data(), month.data(), day.data(), + hour.data(), minute.data(), year.size(), + elevationFile.toUtf8().constData(), buffer, + units.toUtf8().constData(), osTimeZone.toUtf8().constData(), + fetchLatestFlag, outputPath.toUtf8().constData(), + false, options + ); + + if (err != NINJA_SUCCESS) qDebug() << "NinjaFetchStationFromBbox: err =" << err; - return err; - } - else - { - return NINJA_SUCCESS; - } + + return err; } int PointInitializationInput::fetchStationByName(QVector year, @@ -198,15 +199,18 @@ int PointInitializationInput::fetchStationByName(QVector year, QString outputPath) { char ** options = NULL; - NinjaErr err = NinjaFetchStationByName(year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), stationList.toUtf8().constData(), osTimeZone.toUtf8().constData(), fetchLatestFlag, outputPath.toUtf8().constData(), false, options); - if (err != NINJA_SUCCESS){ - qDebug() << "NinjaFetchFetchStationByName: err =" << err; - return err; - } - else - { - return NINJA_SUCCESS; - } + NinjaErr err = NinjaFetchStationByName( + year.data(), month.data(), day.data(), + hour.data(), minute.data(), year.size(), + elevationFile.toUtf8().constData(), stationList.toUtf8().constData(), + osTimeZone.toUtf8().constData(), fetchLatestFlag, + outputPath.toUtf8().constData(), false, options + ); + + if (err != NINJA_SUCCESS) + qDebug() << "NinjaFetchStationFromBbox: err =" << err; + + return err; } void PointInitializationInput::fetchStationDataFinished() @@ -217,7 +221,6 @@ void PointInitializationInput::fetchStationDataFinished() progress->deleteLater(); progress = nullptr; } - if (futureWatcher) { futureWatcher->deleteLater(); @@ -314,8 +317,8 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() qint64 lastIndex = poLayer->GetFeatureCount(); qDebug() << "[GUI-Point] Number of Time Entries:" << lastIndex; - OGRFeature* poFeature = poLayer->GetFeature(1); // Skip header, first time in series - QString startDateTime(poFeature->GetFieldAsString(15)); // Time should be in 15th column (0-14) + OGRFeature* poFeature = poLayer->GetFeature(1); // Skip header, row 1 is first time in series + QString startDateTime(poFeature->GetFieldAsString(15)); // Time should be in 15th (last) column (0-14) qDebug() << "[GUI-Point] Station start time:" << startDateTime; poFeature = poLayer->GetFeature(lastIndex); // last time in series @@ -348,8 +351,9 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() } state.isStationFileSelectionValid = true; - for (int type : stationFileTypes) { - if (type != stationFileTypes[0]) { + for (int i; i < stationFileTypes.size(); i++) + { + if (stationFileTypes[i] != stationFileTypes[0]) { state.isStationFileSelectionValid = false; break; } diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index 163be85e1..89fe394be 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -59,7 +59,7 @@ class PointInitializationInput : public QObject void requestRefresh(); private slots: - void pointInitializationGroupBoxToggled(bool checked); + void pointInitializationGroupBoxToggled(bool toggled); void pointInitializationDownloadDataButtonClicked(); void weatherStationDataDownloadCancelButtonClicked(); void weatherStationDataSourceComboBoxCurrentIndexChanged(int index); From 72a4c6d6f6fa5bb72e2096b8acdaa0f6db4a85ff Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 25 Aug 2025 15:24:01 -0600 Subject: [PATCH 215/435] Made adjustments to .ui and fixed some small bugs, for #636 --- src/gui/mainwindow.cpp | 29 +++++---- src/gui/mainwindow.ui | 93 ++++++++++++++++------------ src/gui/pointinitializationinput.cpp | 4 +- src/gui/pointinitializationinput.h | 2 +- src/gui/surfaceinput.cpp | 1 + 5 files changed, 73 insertions(+), 56 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 71bfd9880..dffd1299c 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -621,7 +621,6 @@ void MainWindow::solveButtonClicked() initializationMethod = "point"; QVector stationFiles = pointInitializationInput->getStationFiles(); - QString DEMTimeZone = ui->timeZoneComboBox->currentText(); QByteArray timeZoneBytes = ui->timeZoneComboBox->currentText().toUtf8(); @@ -629,14 +628,13 @@ void MainWindow::solveButtonClicked() stationFilesBytes.reserve(stationFiles.size()); std::vector stationFileNames; stationFileNames.reserve(stationFiles.size()); - for (int i; i < stationFiles.size(); i++) + for (int i = 0; i < stationFiles.size(); i++) { stationFilesBytes.push_back(stationFiles[i].toUtf8()); stationFileNames.push_back(stationFilesBytes.back().constData()); } QString DEMPath = ui->elevationInputFileLineEdit->property("fullpath").toString(); - bool momentumFlag = ui->momentumSolverCheckBox->isChecked(); if(ui->pointInitializationTreeView->property("timeSeriesFlag").toBool()) @@ -673,6 +671,10 @@ void MainWindow::solveButtonClicked() timeZoneBytes.constData(), &endYear, &endMonth, &endDay, &endHour, &endMinute ); + if(err != NINJA_SUCCESS) + { + qDebug() << "NinjaGenerateSingleTimeObject: err = " << err; + } outYear[0] = endYear; outMonth[0] = endMonth; @@ -690,14 +692,19 @@ void MainWindow::solveButtonClicked() ); if(err != NINJA_SUCCESS) { - printf("NinjaGetTimeList: err = %d\n", err); + qDebug() << "NinjaGetTimeList: err = " << err; } } numNinjas = ui->weatherStationDataTimestepsSpinBox->value(); - ninjaArmy = NinjaMakePointArmy - (outYear.data(), outMonth.data(), outDay.data(), outHour.data(), outMinute.data(), nTimeSteps, DEMTimeZone.toUtf8().data(), stationFileNames.data(), stationFileNames.size(), DEMPath.toUtf8().data(), true, momentumFlag, papszOptions); + ninjaArmy = NinjaMakePointArmy( + outYear.data(), outMonth.data(), outDay.data(), + outHour.data(), outMinute.data(), nTimeSteps, + DEMTimeZone.toUtf8().data(), stationFileNames.data(), + stationFileNames.size(), DEMPath.toUtf8().data(), + true, momentumFlag, papszOptions + ); } else { @@ -718,7 +725,7 @@ void MainWindow::solveButtonClicked() ); if (err != NINJA_SUCCESS) { - printf("NinjaGenerateSingleTimeObject: err = %d\n", err); + qDebug() << "NinjaGenerateSingleTimeObject: err = " << err; } QVector yearVec = { outYear }; @@ -728,18 +735,16 @@ void MainWindow::solveButtonClicked() QVector minuteVec = { outMinute }; numNinjas = 1; + int nTimeSteps = 1; ninjaArmy = NinjaMakePointArmy( yearVec.data(), monthVec.data(), dayVec.data(), - hourVec.data(), minuteVec.data(), - 1, + hourVec.data(), minuteVec.data(), nTimeSteps, DEMTimeZone.toUtf8().data(), stationFileNames.data(), static_cast(stationFileNames.size()), DEMPath.toUtf8().data(), - true, - momentumFlag, - papszOptions + true, momentumFlag, papszOptions ); } } diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index c66659a0c..ead2bb210 100644 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -557,7 +557,7 @@ QFrame::Shadow::Sunken - 10 + 20 @@ -4258,7 +4258,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -4272,18 +4272,18 @@ li.checked::marker { content: "\2612"; } 16777215 - 16777215 + 80 1 - + - + 0 0 @@ -4297,7 +4297,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 30 + 16777215 @@ -4315,48 +4315,59 @@ li.checked::marker { content: "\2612"; } - + - - - Start Time: - - - - - - - M/d/yy h:mm  - - + + + + + Start Time: + + + + + + + M/d/yy h:mm  + + + + + + + End Time: + + + + + + + M/d/yy h:mm  + + + + + + + Qt::Orientation::Horizontal + + + + 51 + 20 + + + + + - + - End Time: - - - - - - - M/d/yy h:mm  + Current Time Zone: - - - - Qt::Orientation::Horizontal - - - - 51 - 20 - - - - diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 4f1eeba17..976c7dc7d 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -266,7 +266,7 @@ void PointInitializationInput::setupTreeView() connect(ui->pointInitializationTreeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &PointInitializationInput::pointInitializationTreeViewItemSelectionChanged); } -void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() +void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) { AppState& state = AppState::instance(); QModelIndexList selectedRows = ui->pointInitializationTreeView->selectionModel()->selectedRows(); @@ -351,7 +351,7 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged() } state.isStationFileSelectionValid = true; - for (int i; i < stationFileTypes.size(); i++) + for (int i = 0; i < stationFileTypes.size(); i++) { if (stationFileTypes[i] != stationFileTypes[0]) { state.isStationFileSelectionValid = false; diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index 89fe394be..6d45c7192 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -65,7 +65,7 @@ private slots: void weatherStationDataSourceComboBoxCurrentIndexChanged(int index); void weatherStationDataTimeComboBoxCurrentIndexChanged(int index); void weatherStationDataDownloadButtonClicked(); - void pointInitializationTreeViewItemSelectionChanged(); + void pointInitializationTreeViewItemSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); void pointInitializationSelectAllButtonClicked(); void pointInitializationSelectNoneButtonClicked(); void folderExpanded(const QModelIndex &index); diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 0cac2d902..a27757ccb 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -319,6 +319,7 @@ void SurfaceInput::timeZoneComboBoxCurrentIndexChanged(int index) QString timeZoneDetails = fetchTimeZoneDetails(currentTimeZone); ui->timeZoneDetailsTextEdit->setText(timeZoneDetails); ui->weatherStationTimeZoneLabel->setText("Current Time Zone: " + currentTimeZone); + ui->downloadBetweenDatesTimeZoneLabel->setText("Current Time Zone: " + currentTimeZone); } void SurfaceInput::timeZoneAllZonesCheckBoxClicked() From 81bb69fffdba9e5b42666917ae6cb3ffb94e089d Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 2 Sep 2025 12:27:07 -0600 Subject: [PATCH 216/435] Fixed missing library from merge conflict resolution --- src/gui/surfaceinput.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index 74a437310..dc8baecbf 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -30,6 +30,7 @@ #ifndef SURFACEINPUT_H #define SURFACEINPUT_H +#include "ui_mainwindow.h" #include "appstate.h" #include "windninja.h" #include "gdal_util.h" From 049a2a12a839e8fd2b350514c62198cb82a2abbb Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 2 Sep 2025 13:17:52 -0600 Subject: [PATCH 217/435] Fixed some spacing issues and added icons to buttons via .ui file --- src/gui/mainwindow.cpp | 2 + src/gui/mainwindow.ui | 611 +++++++++++++++++++++------------------ src/gui/surfaceinput.cpp | 3 - 3 files changed, 324 insertions(+), 292 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 35e1e158c..1000ce744 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -407,6 +407,8 @@ MainWindow::MainWindow(QWidget *parent) ui->legendComboBox->setItemData(0, "equal_interval"); ui->legendComboBox->setItemData(1, "equal_color"); + ui->googleEarthScrollArea->setAlignment(Qt::AlignTop); + connectSignals(); diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index b07727b42..622e04d2e 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -557,7 +557,7 @@ QFrame::Shadow::Sunken - 16 + 20 @@ -844,9 +844,15 @@ li.checked::marker { content: "\2612"; } 0 0 578 - 406 + 454 + + + 0 + 0 + + @@ -902,6 +908,10 @@ li.checked::marker { content: "\2612"; } Open File + + + :/folder_page.png:/folder_page.png + @@ -912,6 +922,10 @@ li.checked::marker { content: "\2612"; } Download File + + + :/server_go.png:/server_go.png + @@ -1118,33 +1132,7 @@ li.checked::marker { content: "\2612"; } Time Zone - - - - - - 0 - 0 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Name: Mountain Standard Time</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Name: Mountain Daylight Time</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Offset from UTC: -07:00:00</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Offset from UTC: -06:00:00</p></body></html> - - - Qt::TextInteractionFlag::NoTextInteraction - - - + @@ -1234,14 +1222,49 @@ li.checked::marker { content: "\2612"; } + + + + + 0 + 0 + + + + + 16777215 + 90 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Name: Mountain Standard Time</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Name: Mountain Daylight Time</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Offset from UTC: -07:00:00</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Offset from UTC: -06:00:00</p></body></html> + + + Qt::TextInteractionFlag::NoTextInteraction + + + - + Qt::Orientation::Vertical + + QSizePolicy::Policy::Expanding + 20 @@ -1254,22 +1277,6 @@ li.checked::marker { content: "\2612"; } - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Expanding - - - - 20 - 40 - - - - @@ -1873,7 +1880,7 @@ li.checked::marker { content: "\2612"; } 0 - 0 + -173 558 654 @@ -2037,7 +2044,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Horizontal @@ -2064,7 +2071,7 @@ li.checked::marker { content: "\2612"; } - 0 + 1 @@ -2193,7 +2200,7 @@ li.checked::marker { content: "\2612"; } - + Qt::Orientation::Horizontal @@ -2223,7 +2230,7 @@ li.checked::marker { content: "\2612"; } - + 5 @@ -2237,233 +2244,232 @@ li.checked::marker { content: "\2612"; } 5 - - - Weather Model Initialization - - + + true - - false - - - - - - - 0 - 0 - - - - Download Weather Data - - - - - - - - PointingHandCursor - - - - - - - PointingHandCursor - - - - - - hours - - - 1 - - - 1 - - - - - - - PointingHandCursor - - - Download Data - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - Downloaded Forecasts - - - false - - - - 0 - - - 0 + + + + 0 + 0 + 572 + 639 + + + + + + + Weather Model Initialization - - 0 + + true - - 0 + + false - - - - - 0 - 0 - - - - true - - - - - - - - 0 - 0 - - - - Select Specific Time Steps - - - true - - - false - - - - - - - 0 - 0 - - - - true - - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - Select All - - - - - - - Select None - - - - - - - - - - - - - - Qt::Orientation::Horizontal + + + + + + 0 + 0 + + + + Download Weather Data + + + + + + + + PointingHandCursor + + + + + + + PointingHandCursor + + + + + + hours + + + 1 + + + 1 + + + + + + + PointingHandCursor + + + Download Data + + + + :/server_go.png:/server_go.png + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + 0 + 0 + + + + Downloaded Forecasts + + + false + + + + 0 - - - 40 - 20 - + + 0 - - - - - - - 0 - 0 - + + 0 - - Refresh Forecast List + + 0 - - - - - - - - + + + + + 0 + 0 + + + + true + + + + + + + + 0 + 0 + + + + Select Specific Time Steps + + + true + + + false + + + + + + + 0 + 0 + + + + true + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + Select All + + + + + + + Select None + + + + + + + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - @@ -2677,9 +2683,15 @@ li.checked::marker { content: "\2612"; } - + + + + 0 + 0 + + true @@ -2689,10 +2701,19 @@ li.checked::marker { content: "\2612"; } 0 0 578 - 402 + 454 - + + + 0 + 0 + + + + Qt::LayoutDirection::LeftToRight + + @@ -2802,7 +2823,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -2906,7 +2927,7 @@ li.checked::marker { content: "\2612"; } false - + 0 0 @@ -3047,23 +3068,23 @@ li.checked::marker { content: "\2612"; } + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - @@ -4040,6 +4061,10 @@ li.checked::marker { content: "\2612"; } Draw + + + :/center_click_final.png:/center_click_final.png + true @@ -4182,6 +4207,10 @@ li.checked::marker { content: "\2612"; } Download File + + + :/server_go.png:/server_go.png + @@ -4195,6 +4224,10 @@ li.checked::marker { content: "\2612"; } Cancel + + + :/cancel.png:/cancel.png + @@ -4231,7 +4264,7 @@ li.checked::marker { content: "\2612"; } - + @@ -4276,7 +4309,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -4284,13 +4317,13 @@ li.checked::marker { content: "\2612"; } 0 - 50 + 0 16777215 - 50 + 16777215 diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 0f0108fb6..4ca4a26af 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -36,9 +36,6 @@ SurfaceInput::SurfaceInput(Ui::MainWindow *ui, ui(ui), webEngineView(webEngineView) { - ui->elevationInputFileOpenButton->setIcon(QIcon(":/folder.png")); - ui->elevationInputFileDownloadButton->setIcon(QIcon(":/server_go.png")); - ui->elevationInputTypePushButton->setIcon(QIcon(":/swoop_final.png")); ui->timeZoneDetailsTextEdit->setVisible(false); timeZoneAllZonesCheckBoxClicked(); From b73f2c9de8ed2ba62ab3f083d63804d0431ca7db Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 2 Sep 2025 14:00:00 -0600 Subject: [PATCH 218/435] Removed main window splitter and fixed resulting issues regarding expanding and shrinking mainwindow --- src/gui/mainwindow.ui | 7931 ++++++++++++++++++++--------------------- 1 file changed, 3911 insertions(+), 4020 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 622e04d2e..af14153f0 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -204,7 +204,7 @@ - + 0 @@ -218,374 +218,281 @@ 0 - - - - 0 - 0 - - - - - 200 - 0 - - - - - 225 - 0 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - QFrame::Shape::NoFrame - - - Qt::Orientation::Horizontal - - - 15 - - - false - - - - - 0 + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 250 + + + + + + + + + 60 + 60 + 60 + + + + + + + + + 60 + 60 + 60 + + + + + + - - QLayout::SizeConstraint::SetMinimumSize + + + 12 + - - 5 + + PointingHandCursor - - 10 + + - - 5 + + QFrame::Shape::StyledPanel - + 0 + + false + + + true + + + false + + + true + + + true + + + false + + + + Configuration + + - - - - 0 - 0 - - - - - 0 - 250 - - - - - 600 - 250 - + + Solver Methodology + + + ItemIsSelectable|ItemIsEnabled + + + + Conservation of Mass - - - - - - - 60 - 60 - 60 - - - - - - - - - 60 - 60 - 60 - - - - - - + + ItemIsSelectable|ItemIsEnabled - - - 12 - + + + + Conservation of Mass and Momentum - - PointingHandCursor + + ItemIsSelectable|ItemIsEnabled - - + + + + + Inputs + + + ItemIsSelectable|ItemIsEnabled + + + + Surface Input - - QFrame::Shape::StyledPanel + + ItemIsSelectable|ItemIsEnabled - - 0 + + + + Diurnal Input - - false + + ItemIsSelectable|ItemIsEnabled - - true + + + + Stability Input - - false + + ItemIsSelectable|ItemIsEnabled - - true + + + + Wind Input - - true + + ItemIsSelectable|ItemIsEnabled - - false - - - - Configuration - - - Solver Methodology + Domain Average Wind ItemIsSelectable|ItemIsEnabled - - - Conservation of Mass - - - ItemIsSelectable|ItemIsEnabled - - - - - Conservation of Mass and Momentum - - - ItemIsSelectable|ItemIsEnabled - - - Inputs + Point Initialization ItemIsSelectable|ItemIsEnabled - - - Surface Input - - - ItemIsSelectable|ItemIsEnabled - - - - - Diurnal Input - - - ItemIsSelectable|ItemIsEnabled - - - - - Stability Input - - - ItemIsSelectable|ItemIsEnabled - - - - - Wind Input - - - ItemIsSelectable|ItemIsEnabled - - - - Domain Average Wind - - - ItemIsSelectable|ItemIsEnabled - - - - - Point Initialization - - - ItemIsSelectable|ItemIsEnabled - - - - - Weather Model - - - ItemIsSelectable|ItemIsEnabled - - - - Outputs + Weather Model - - - Google Earth - - - - - Fire Behavior - - - - - Shape Files - - - - - Geospatial PDF Files - - - - - VTK Files - - - - - - Solver + + ItemIsSelectable|ItemIsEnabled - + - - - Qt::Orientation::Vertical + + Outputs + + + + Google Earth - - QSizePolicy::Policy::Fixed + + + + Fire Behavior - - - 20 - 10 - + + + + Shape Files - - - - - - - 0 - 0 - + + + + Geospatial PDF Files - - - 0 - 250 - + + + + VTK Files - - - 600 - 16777215 - + + + + + Solver + + + + + + + + + 0 + 0 + + + + + 0 + 250 + + + + + 16777215 + 16777215 + + + + + 300 + 0 + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Sunken + + + 20 + + + + + + 0 - - - 300 - 0 - + + 0 - - QFrame::Shape::StyledPanel + + 0 - - QFrame::Shadow::Sunken + + 0 - - 20 + + 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 + + + + + 10 + - - - - - 10 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> p, li { white-space: pre-wrap; } hr { height: 1px; border-width: 0; } @@ -598,69 +505,69 @@ li.checked::marker { content: "\2612"; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';"> 2. Conservation of Mass and Momentum (slower, more accurate)</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';">Select either option for more detail.</span></p></body></html> - - - Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - 0 - 0 - - - - - 5 - - 5 + + Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse - - 5 + + + + + + Qt::Orientation::Vertical - - 5 + + + 20 + 40 + - - - - PointingHandCursor - - - Use Conservation of Mass - - - false - - - - - - - - 8 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + + + + 0 + 0 + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + PointingHandCursor + + + Use Conservation of Mass + + + false + + + + + + + + 8 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> p, li { white-space: pre-wrap; } hr { height: 1px; border-width: 0; } @@ -668,69 +575,69 @@ li.unchecked::marker { content: "\2610"; } li.checked::marker { content: "\2612"; } </style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">This is the native WindNinja solver. It solves a conservation of mass equation, but not a conservation of momentum equation. This solver is fast-running, but may give less accurate wind predictions in regions where momentum effects are important, for example on the lee side of terrain obstacles.</span></p></body></html> - - - Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - 0 - 0 - - - - - 5 - - 5 + + Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse - - 5 + + + + + + Qt::Orientation::Vertical - - 5 + + + 20 + 40 + - - - - PointingHandCursor - - - Use Conservation of Mass and Momentum - - - - - - - - 8 - - - - QFrame::Shape::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + + + + 0 + 0 + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + PointingHandCursor + + + Use Conservation of Mass and Momentum + + + + + + + + 8 + + + + QFrame::Shape::NoFrame + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> p, li { white-space: pre-wrap; } hr { height: 1px; border-width: 0; } @@ -738,53 +645,53 @@ li.unchecked::marker { content: "\2610"; } li.checked::marker { content: "\2612"; } </style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">This solver conserves both mass and momentum. It is based on the OpenFOAM CFD toolbox. This solver should give more accurate wind predictions in regions where momentum effects are important, such as on the lee side of terrain obstacles. Because this solver is more computationally intensive than the conservation of mass solver, simulation times will be longer. Typical simulation times for this solver range from 10-30 minutes, but will depend on your domain, resolution, and computational resources. Note that some options (e.g., point initialization and non-neutral stability) are not available for this solver at this time. We plan to make these options available in future releases.</span></p></body></html> - - - Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - 5 - - 5 + + Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse - - 5 + + + + + + Qt::Orientation::Vertical - - 5 + + + 20 + 40 + - - - - - 8 - - - - QFrame::Shape::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 8 + + + + QFrame::Shape::NoFrame + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> p, li { white-space: pre-wrap; } hr { height: 1px; border-width: 0; } @@ -798,2621 +705,2498 @@ li.checked::marker { content: "\2612"; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:30px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:10pt;">- Optional diurnal and stability analysis</span> </p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> <span style=" font-family:'Sans Serif'; font-size:10pt;">2. Wind Input:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:30px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:10pt;">- Requires one (1) of the three (3) options available: Domain Average Wind, Point Initialization, or Weather Model</span></p></body></html> - - - Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - - - true - - - - - 0 - 0 - 578 - 454 - - - - - 0 - 0 - - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Elevation Input File - - - - 5 + + + Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + true + + + + + 0 + 0 + 538 + 419 + + + + + 0 + 0 + + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Elevation Input File + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 0 + 0 + + + + true + + + *.tif + + + + + + + PointingHandCursor + + + Open File + + + + :/folder_page.png:/folder_page.png + + + + + + + PointingHandCursor + + + Download File + + + + :/server_go.png:/server_go.png + + + + + + + Qt::Orientation::Horizontal - - 5 + + + 40 + 20 + - - 5 + + + + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Mesh Resolution + + + + + + + 0 + 0 + - - 5 + + PointingHandCursor - - - - 0 - 0 - - - - true - - - *.tif - - + + Coarse + - - - PointingHandCursor - - - Open File - - - - :/folder_page.png:/folder_page.png - - + + Medium + - - - PointingHandCursor - - - Download File - - - - :/server_go.png:/server_go.png - - + + Fine + - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - + + Custom + - - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Mesh Resolution - - + + + + + + false + + + + 0 + 0 + + + + PointingHandCursor + + + false + + + 0.010000000000000 + + + 10000.000000000000000 + + + 200.000000000000000 + + + + + - - - - 0 - 0 - - - - PointingHandCursor - - - - Coarse - - - - - Medium - - - - - Fine - - - - - Custom - - - + + Meters + - - - false - - - - 0 - 0 - - - - PointingHandCursor - - - false - - - 0.010000000000000 - - - 10000.000000000000000 - - - 200.000000000000000 - - + + Feet + - - - - - Meters - - - - - Feet - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Vegetation - - - - - - - 0 - 0 - - - - PointingHandCursor - - - - Grass - - - - - Brush - - - - - Trees - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - Time Zone - - - - - - - - - 0 - 0 - - - - - 150 - 0 - - - - - 150 - 16777215 - - - - PointingHandCursor - - - - - - -1 - - - 10 - - - QComboBox::SizeAdjustPolicy::AdjustToContentsOnFirstShow - - - - - - - - 0 - 0 - - - - PointingHandCursor - - - Show All Zones - - - true - - - - - - - - 0 - 0 - - - - PointingHandCursor - - - Display Time Zone Details - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - 0 - 0 - - - - - 16777215 - 90 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Name: Mountain Standard Time</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Name: Mountain Daylight Time</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Offset from UTC: -07:00:00</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Offset from UTC: -06:00:00</p></body></html> - - - Qt::TextInteractionFlag::NoTextInteraction - - - - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Expanding - - - - 20 - 40 - - - - - - - - - - - - - - 0 - 0 - - - - - 0 - - - QLayout::SizeConstraint::SetNoConstraint - - - 5 - - - 5 - - - 5 - - - 5 - - - - - PointingHandCursor - - - Use Diurnal Wind - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Expanding - - - - 20 - 40 - - - - - - - - - - 0 - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 0 - 0 - - - - PointingHandCursor - - - Use Stability - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - - 6 - - - 5 - - - 5 - - - 5 - - - 5 - - - - - true - - - - - 0 - 0 - 572 - 661 - - - - - - - - 0 - 0 - - - - Domain Average Wind - - - true - - - false - - - - - - - 0 - 100 - - - - Input Wind Height - - - - - - PointingHandCursor - - - - 20ft-US - - - - - 10m-SI - - - - - Custom - - - - - - - - false - - - PointingHandCursor - - - 0.010000000000000 - - - 20.000000000000000 - - - - - - - false - - - - 0 - 0 - - - - false - - - - Feet - - - - - Meters - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - Table Unites: - - - - - - - - 0 - 0 - - - - - 60 - 0 - - - - - 60 - 16777215 - - - - PointingHandCursor - - - - mph - - - - - m/s - - - - - kph - - - - - kts - - - - - - - - - 0 - 0 - - - - - 40 - 0 - - - - - 40 - 16777215 - - - - PointingHandCursor - - - Qt::LayoutDirection::LeftToRight - - - - °F - - - - - °C - - - - - - - - - 0 - 0 - - - - PointingHandCursor - - - Clear Table - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Vegetation + + + + + + + 0 + 0 + + + + PointingHandCursor + + + + Grass + + + + + Brush + + + + + Trees + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + Time Zone + + + + - + - - 1 + + 0 0 - 0 - 490 + 150 + 0 - - true + + + 150 + 16777215 + - - QAbstractItemView::DragDropMode::DragDrop + + PointingHandCursor - - Qt::DropAction::MoveAction + + - - true + + -1 - - 50 + + 10 - - false - - - 20 - - - 80 - - - true - - - false - - - 20 - - - 20 - - + + QComboBox::SizeAdjustPolicy::AdjustToContentsOnFirstShow + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Show All Zones + + true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Speed -(Select) - - - - 10 - - - - - - Direction -(degrees) - - - - - - - 10 - - - - - - Time -(hh:mm) - - - - 10 - - - - - - Date -(mm/dd/yyyy) - - - - 10 - - - - - - Cloud Cover -(%) - - - - 10 - - - - - - Air Temp -(Select) - - - - 10 - - - + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Display Time Zone Details + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + - - - - - - - - - - - - 0 - 0 - - - - - 1000 - 16777215 - - - - - 5 + + + + + + 0 + 0 + + + + + 16777215 + 90 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Name: Mountain Standard Time</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Name: Mountain Daylight Time</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Standard Offset from UTC: -07:00:00</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Daylight Offset from UTC: -06:00:00</p></body></html> + + + Qt::TextInteractionFlag::NoTextInteraction + + + + + + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Expanding + + + + 20 + 40 + + + + + + + + + + + + + + 0 + 0 + + + + + 0 + + + QLayout::SizeConstraint::SetNoConstraint + + + 5 + + + 5 + + + 5 + + + 5 + + + + + PointingHandCursor - - 5 + + Use Diurnal Wind - - 5 + + + + + + Qt::Orientation::Vertical - - 5 + + QSizePolicy::Policy::Expanding - - - - - 0 - 0 - - - - - 0 - 20 - - - - - 16777215 - 16777215 - - - - - - 0 - -173 - 558 - 654 - - - - - 0 - 0 - - - - - - - - 0 - 1 - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - Point Initialization - - - true - - - false - - - - - - + + + 20 + 40 + + + + + + + + + + 0 + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 0 + 0 + + + + PointingHandCursor + + + Use Stability + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + 6 + + + 5 + + + 5 + + + 5 + + + 5 + + + + + true + + + + + 0 + 0 + 346 + 661 + + + + + + + + 0 + 0 + + + + Domain Average Wind + + + true + + + false + + + + + + + 0 + 100 + + + + Input Wind Height + + + + + + PointingHandCursor + + - Select Weather Stations - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - + 20ft-US - - - - - - - 140 - 16777215 - + + + + 10m-SI - - PointingHandCursor + + + + Custom + + + + + + + false + + + PointingHandCursor + + + 0.010000000000000 + + + 20.000000000000000 + + + + + + + false + + + + 0 + 0 + + + + false + + - Download Data + Feet - - - :/server_go.png:/server_go.png + + + + Meters - - - + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + Table Unites: + + - + - + 0 0 - 0 + 60 0 - 16777215 + 60 16777215 - - - 0 - 0 - - - - QFrame::Shadow::Sunken - - - true + + PointingHandCursor - - 10 - - - 300 - - - true - - - false - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - + + mph + - - - Select All - - + + m/s + - - - Select None - - + + kph + + + + + kts + - - - - - - Qt::Orientation::Horizontal - - + - + 0 0 - 0 - 80 + 40 + 0 - 16777215 + 40 16777215 - - 1 + + PointingHandCursor - - - - - - Stop Time - - - - - - - false - - - - 0 - 0 - 0 - 2000 - 1 - 1 - - - - M/d/yy h:mm - - - true - - - - - - - Number of Time Steps - - - - - - - Start Time - - - - - - - false - - - 1 - - - 99999 - - - 1 - - - 24 - - - - - - - false - - - PointingHandCursor - - - M/d/yy h:mm - - - true - - - - - - - - - - - - 0 - 0 - - - - - 16777215 - 30 - - - - - - + + Qt::LayoutDirection::LeftToRight + + + + °F + + + + + °C + + - + + + + 0 + 0 + + + + PointingHandCursor + - Current Time Zone: + Clear Table - - - Current Min Time: + + + Qt::Orientation::Horizontal - + + + 40 + 20 + + + + + + + + + + 1 + 0 + + + + + 0 + 490 + + + + true + + + QAbstractItemView::DragDropMode::DragDrop + + + Qt::DropAction::MoveAction + + + true + + + 50 + + + false + + + 20 + + + 80 + + + true + + + false + + + 20 + + + 20 + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Speed +(Select) + + + + 10 + + + + + + Direction +(degrees) + + + + + + + 10 + + + + + + Time +(hh:mm) + + + + 10 + + + + + + Date +(mm/dd/yyyy) + + + + 10 + + + + + + Cloud Cover +(%) + + + + 10 + + + + + + Air Temp +(Select) + + + + 10 + + + + + + + + + + + + + + + + + + 0 + 0 + + + + + 1000 + 16777215 + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 0 + 0 + + + + + 0 + 20 + + + + + 16777215 + 16777215 + + + + + + 0 + 0 + 558 + 654 + + + + + 0 + 0 + + + + + + + + 0 + 1 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Point Initialization + + + true + + + false + + + + - + - Current Max Time: + Select Weather Stations - + Qt::Orientation::Horizontal - + + + 40 + 20 + + + - + + + + 140 + 16777215 + + PointingHandCursor - Write Station KML + Download Data - :/weather_cloudy.png:/weather_cloudy.png + :/server_go.png:/server_go.png - - - - - - - - - - - - 5 - - - 5 - - - 5 - - - 5 - - - - - true - - - - - 0 - 0 - 572 - 639 - - - - - - - Weather Model Initialization - - - true - - - false - - + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + + 0 + 0 + + + + QFrame::Shadow::Sunken + + + true + + + 10 + + + 300 + + + true + + + false + + + + + - - - - 0 - 0 - + + + Qt::Orientation::Horizontal - - Download Weather Data + + + 40 + 20 + - - - - - - - PointingHandCursor - - - - - - - PointingHandCursor - - - - - - hours - - - 1 - - - 1 - - - - - - - PointingHandCursor - - - Download Data - - - - :/server_go.png:/server_go.png - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - + - - - - 0 - 0 - - - - Downloaded Forecasts + + + Select All - - false + + + + + + Select None - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - true - - - - - - - - 0 - 0 - - - - Select Specific Time Steps - - - true - - - false - - - - - - - 0 - 0 - - - - true - - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - Select All - - - - - - - Select None - - - - - - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - - - - - - - - 0 - 100 - - - - - 0 - 70 - - - - Output Wind Height - - - - - - PointingHandCursor - + + + + + Qt::Orientation::Horizontal + + + + + + + + 0 + 0 + + + + + 0 + 80 + + + + + 16777215 + 16777215 + + + + 1 + + + + + + + Stop Time + + + + + + + false + + + + 0 + 0 + 0 + 2000 + 1 + 1 + + + + M/d/yy h:mm + + + true + + + + + + + Number of Time Steps + + + + + + + Start Time + + + + + + + false + + + 1 + + + 99999 + + + 1 + + + 24 + + + + + + + false + + + PointingHandCursor + + + M/d/yy h:mm + + + true + + + + + + + + + + + + 0 + 0 + + + + + 16777215 + 30 + + + + + + + + - - 20ft-US - + + + Current Time Zone: + + - - 10m-SI - + + + Current Min Time: + + - - Custom - + + + Current Max Time: + + - - - - - - false - - - PointingHandCursor - - - 0.000000000000000 - - - 10000.000000000000000 - - - 20.000000000000000 - - - - - - - false - - - - 0 - 0 - - - - false - - - Feet - + + + Qt::Orientation::Horizontal + + - - Meters - + + + PointingHandCursor + + + Write Station KML + + + + :/weather_cloudy.png:/weather_cloudy.png + + - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - Output Speed Units: - - - - - - - - mph - - - - - mps - - - - - kph - - - - - kts - - + - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - Clip output by: - - - + + + + + + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + true + + + + + 0 + 0 + 398 + 639 + + + - - - % + + + Weather Model Initialization - - - - - - Qt::Orientation::Horizontal + + true - - - 40 - 20 - + + false - - - - - - - - false - - - Write Raw Weather Model Output - - - true - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - - - - 0 - 0 - - - - true - - - - - 0 - 0 - 578 - 454 - - - - - 0 - 0 - - - - Qt::LayoutDirection::LeftToRight - - - - - - - 0 - 0 - - - - - 0 - 384 - - - - Create Google Earth Files (*.kmz) - - - true - - - false - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Vectors - - - - QLayout::SizeConstraint::SetNoConstraint - - - - - Line Width: - - - - - - - 1 - - - 10.000000000000000 - - - 1.000000000000000 - - - - - - - Apply Vector Scaling - - - + + + + + + 0 + 0 + + + + Download Weather Data + + + + - - - Qt::Orientation::Horizontal - - - - 40 - 20 - + + + PointingHandCursor - + - - - - - - - - 0 - 0 - - - - - 0 - 69 - - - - Legend - - - - - - 0 - 0 - + + + PointingHandCursor - - - 131 - 0 - + + + + + hours + + + 1 + + + 1 - - - Uniform Range - - - - - Equal Count - - - + + + PointingHandCursor + - Use Consistent Color Scale + Download Data + + + + :/server_go.png:/server_go.png - + Qt::Orientation::Horizontal - 153 + 40 20 - - - - - - - 0 - 0 - - - - - 0 - 114 - - - - Resolution - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Use Mesh Resolution - - - true - - - - - - false - - - 5000.000000000000000 - - - 200.000000000000000 - - - - - - - false - - - - 0 - 0 - - - - - 80 - 0 - - - - - 80 - 16777215 - - - - - Meters - - - - - Feet - - - - + + + + + + + + + 0 + 0 + + + + Downloaded Forecasts + + + false + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + true + + + + + + + + 0 + 0 + + + + Select Specific Time Steps + + + true + + + false + + + + + + + 0 + 0 + + + + true + + + + + - + Qt::Orientation::Horizontal - 302 + 40 20 + + + + Select All + + + + + + + Select None + + + - - - - - - - - - - 0 - 0 - - - - - 0 - 69 - - - - Alternative Color Schemes - - - true - - - false - - - - - - - 0 - 0 - - - - - Default - - - - - ROPGW (Red Orange Pink Green White) - - - - - Oranges - - - - - Blues - - - - - Pinks - - - - - Greens - - - - - Magic Beans - - - - - Pink to Green - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - + + + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + + + 0 + 100 + + + + + 0 + 70 + + + + Output Wind Height + + + + + + PointingHandCursor + + + + 20ft-US + + + + + 10m-SI + + + + + Custom + + + + + + + + false + + + PointingHandCursor + + + 0.000000000000000 + + + 10000.000000000000000 + + + 20.000000000000000 + + + + + + + false + + + + 0 + 0 + + + + false + + + + Feet + + + + + Meters + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + Output Speed Units: + + + + + + + + mph + + + + + mps + + + + + kph + + + + + kts + + - - - - - - - - 0 - 0 - + + + Qt::Orientation::Horizontal - + - 0 - 186 + 40 + 20 - - Create Fire Behavior Files (*.asc) - - - true + + + + + + + + + + Clip output by: - - false + + + + + + % - - - - - - 0 - 0 - - - - - 0 - 114 - - - - Resolution - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Use Mesh Resolution - - - true - - - - - - false - - - 5000.000000000000000 - - - 200.000000000000000 - - - - - - - false - - - - 0 - 0 - - - - - 80 - 0 - - - - - 80 - 16777215 - - - - - Meters - - - - - Feet - - - - - - - - Qt::Orientation::Horizontal - - - - 302 - 20 - - - - - - - - - - - Create *.atm file(s) - - - - - - - - + - Qt::Orientation::Vertical + Qt::Orientation::Horizontal - 20 - 40 + 40 + 20 - - - - - - - - 0 - 0 - - - - - 0 - 158 - - - - Create Shape Files (*.sph) - - - true - - - false - - - - - - - 0 - 0 - - - - - 0 - 114 - - - - Resolution - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Use Mesh Resolution - - - true + + + + + false + + + Write Raw Weather Model Output + + + true + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + + 0 + 0 + + + + true + + + + + 0 + 0 + 414 + 408 + + + + + 0 + 0 + + + + Qt::LayoutDirection::LeftToRight + + + + + + + 0 + 0 + + + + + 0 + 384 + + + + Create Google Earth Files (*.kmz) + + + true + + + false + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Vectors + + + + QLayout::SizeConstraint::SetNoConstraint - - - - - false + + + + Line Width: + + + + + + + 1 + + + 10.000000000000000 + + + 1.000000000000000 + + + + + + + Apply Vector Scaling + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 69 + + + + Legend + + + + + + + 0 + 0 + + + + + 131 + 0 + + + + + Uniform Range + + + + + Equal Count + + + + + + + + Use Consistent Color Scale + + + + + + + Qt::Orientation::Horizontal + + + + 153 + 20 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 114 + + + + Resolution + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Use Mesh Resolution + + + true + + + + + + false + + + 5000.000000000000000 + + + 200.000000000000000 + + + + + + + false + + + + 0 + 0 + + + + + 80 + 0 + + + + + 80 + 16777215 + + + + + Meters + + + + + Feet + + + + + + + + Qt::Orientation::Horizontal + + + + 302 + 20 + + + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 69 + + + + Alternative Color Schemes + + + true + + + false + + + + + + + 0 + 0 + + + + + Default - - 5000.000000000000000 + + + + ROPGW (Red Orange Pink Green White) - - 200.000000000000000 + + + + Oranges - - - - - - false + + + + Blues - - - 0 - 0 - + + + + Pinks - - - 80 - 0 - + + + + Greens - - - 80 - 16777215 - + + + + Magic Beans - - - Meters - - - - - Feet - - - + + + + Pink to Green + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 186 + + + + Create Fire Behavior Files (*.asc) + + + true + + + false + + + + + + + 0 + 0 + + + + + 0 + 114 + + + + Resolution + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Use Mesh Resolution + + + true + + + + + + false + + + 5000.000000000000000 + + + 200.000000000000000 + + + + + + + false + + + + 0 + 0 + + + + + 80 + 0 + + + + + 80 + 16777215 + + + + + Meters + - - - Qt::Orientation::Horizontal - - - - 302 - 20 - - - + + Feet + - - - - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - - - true - - - - - 0 - 0 - 578 - 318 - + + + + + + Qt::Orientation::Horizontal + + + + 302 + 20 + + + + + + + + + + + Create *.atm file(s) + + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 158 + + + + Create Shape Files (*.sph) + + + true + + + false + + + + + + + 0 + 0 + + + + + 0 + 114 + - + + Resolution + + - + 0 @@ -3422,21 +3206,214 @@ li.checked::marker { content: "\2612"; } 0 - 300 + 70 - Create Geospatial PDF Files (*.pdf) + Use Mesh Resolution true - - false - - + + + + + false + + + 5000.000000000000000 + + + 200.000000000000000 + + + + + + + false + + + + 0 + 0 + + + + + 80 + 0 + + + + + 80 + 16777215 + + + + + Meters + + + + + Feet + + + + + + + + Qt::Orientation::Horizontal + + + + 302 + 20 + + + + + + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + true + + + + + 0 + 0 + 381 + 318 + + + + + + + + 0 + 0 + + + + + 0 + 300 + + + + Create Geospatial PDF Files (*.pdf) + + + true + + + false + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Vectors + + + + + + Line Width: + + + + + + + 1 + + + 10.000000000000000 + + + 1.000000000000000 + + + + + + + Apply Vector Scaling + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + Basemap: + + + - + 0 @@ -3445,335 +3422,265 @@ li.checked::marker { content: "\2612"; } - 0 - 70 + 86 + 0 - - Vectors + + + 170 + 16777215 + + + + + TopoFire topo maps + + + + + Hillshade + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Size: - - - - - Line Width: - - - - - - - 1 - - - 10.000000000000000 - - - 1.000000000000000 - - - - - - - Apply Vector Scaling - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - + + + + 0 + 0 + + + + + 160 + 16777215 + + - - - Basemap: - - + + Letter-8 1/2 x 11 + - - - - 0 - 0 - - - - - 86 - 0 - - - - - 170 - 16777215 - - - - - TopoFire topo maps - - - - - Hillshade - - - + + Legal-8 1/2 x 14 + - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - + + Tabloid-7 11 x 17 + - + - - - - - Size: - - - - - - - - 0 - 0 - - - - - 160 - 16777215 - - - - - Letter-8 1/2 x 11 - - - - - Legal-8 1/2 x 14 - - - - - Tabloid-7 11 x 17 - - - - + - - - - Portrait - - - - - Landscape - - - + + Portrait + - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - + + Landscape + - + - - - - 0 - 0 - + + + Qt::Orientation::Horizontal - + - 0 - 114 + 40 + 20 - - Resolution - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Use Mesh Resolution - - - true - - - - - - false - - - 5000.000000000000000 - - - 200.000000000000000 - - - + + + + + + + + + 0 + 0 + + + + + 0 + 114 + + + + Resolution + + + + + + + 0 + 0 + + + + + 0 + 70 + + + + Use Mesh Resolution + + + true + + + + + + false + + + 5000.000000000000000 + + + 200.000000000000000 + + + + + + + false + + + + 0 + 0 + + + + + 80 + 0 + + + + + 80 + 16777215 + + - - - false - - - - 0 - 0 - - - - - 80 - 0 - - - - - 80 - 16777215 - - - - - Meters - - - - - Feet - - - + + Meters + - - - Qt::Orientation::Horizontal - - - - 302 - 20 - - - + + Feet + - - - - - - - - - - - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - - - - 0 - 0 - - - - Create VTK Files (*.vtk) - - - - - - - - 0 - 0 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + + Qt::Orientation::Horizontal + + + + 302 + 20 + + + + + + + + + + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + + 0 + 0 + + + + Create VTK Files (*.vtk) + + + + + + + + 0 + 0 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> p, li { white-space: pre-wrap; } hr { height: 1px; border-width: 0; } @@ -3783,189 +3690,298 @@ li.checked::marker { content: "\2612"; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Write VTK surface and volume files</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Note that *vtk files are for advanced users and are rarely used by fire managers/modelers</span></p></body></html> - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - - - - - QLayout::SizeConstraint::SetDefaultConstraint - - 5 - - - 5 - - - 5 + + + + + + Qt::Orientation::Vertical - - 5 + + + 20 + 40 + - - - - - 0 - 0 - - - - - 16777215 - 25 - - - - - 0 - 0 - - - - QFrame::Shape::NoFrame - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - true - - - - - - - - - - 0 - 0 - - - - - 175 - 25 - - - - - 0 - 0 - - - - QFrame::Shape::NoFrame - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - true - - - Number of Processors: - - - - - - - PointingHandCursor - - - 1 - - - - - - - false - - - - 0 - 0 - - - - PointingHandCursor - - - Solve - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - + + + + + + + + QLayout::SizeConstraint::SetDefaultConstraint + + + 5 + + + 5 + + + 5 + + + 5 + + + + + + 0 + 0 + + + + + 16777215 + 25 + + + + + 0 + 0 + + + + QFrame::Shape::NoFrame + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + true + + + + + + + + + + 0 + 0 + + + + + 175 + 25 + + + + + 0 + 0 + + + + QFrame::Shape::NoFrame + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + true + + + Number of Processors: + + + + + + + PointingHandCursor + + + 1 + + - + + + false + - + 0 0 - - Output Directory + + PointingHandCursor + + + Solve + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + - + + + + + + + + + 0 + 0 + + + + Output Directory + + + + + + true + + + + + + + PointingHandCursor + + + Output Location + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + + 0 + 0 + + + + Elevation Input Type + + + + - - - true + + + + 0 + 0 + + + + Bounding Box + + + + + Point Radius + + - - - PointingHandCursor + + + + 0 + 0 + + + + WORLD SRTM (30m) + + + + + WORLD GMTED (250m) + + + + + Landscape File + + + + + + - Output Location + Draw + + + + :/center_click_final.png:/center_click_final.png + + + true + + + false - + Qt::Orientation::Horizontal @@ -3978,103 +3994,320 @@ li.checked::marker { content: "\2612"; } + + + + + + 0 + 0 + + + + 0 + + + + + + + North + + + + + + + + + + South + + + + + + + + + + East + + + + + + + + + + West + + + + + + + + + + + + + + + 0 + 0 + + + + Center Lat + + + + + + + + + + Center Lon + + + + + + + + + + + 0 + 0 + + + + Radius (miles) + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + Download File + + + + :/server_go.png:/server_go.png + + + + + + + + 0 + 0 + + + + Cancel + + + + :/cancel.png:/cancel.png + - + - Qt::Orientation::Vertical + Qt::Orientation::Horizontal - 20 - 40 + 40 + 20 - - - - - - - - 0 - 0 - - - - Elevation Input Type - - - - + + + + + Qt::Orientation::Vertical + + + QSizePolicy::Policy::Expanding + + + + 20 + 40 + + + + + + + + + + + + + 0 + 0 + + + + Fetch Station Data + + + + + + + 0 + 0 + + + + + 200 + 16777215 + + + + PointingHandCursor + + + + Download from DEM + + + + + Download by Station ID + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + 0 + + + 0 + + + - - - - 0 - 0 - + + + Buffer Around DEM + + + + + + + PointingHandCursor - - - Bounding Box - - - - - Point Radius - - - - - - 0 - 0 - + + + PointingHandCursor - WORLD SRTM (30m) + mi - WORLD GMTED (250m) - - - - - Landscape File + km - - - Draw + + + Qt::Orientation::Horizontal - - - :/center_click_final.png:/center_click_final.png + + + 40 + 20 + - - true + + + + + + + + + + Input Station IDs - + + + + + + KMSO, PNTM8 + + false - + Qt::Orientation::Horizontal @@ -4087,681 +4320,339 @@ li.checked::marker { content: "\2612"; } - - - - - - 0 - 0 - - - - 0 - - - - - - - North - - - - - - - - - - South - - - - - - - - - - East - - - - - - - - - - West - - - - - - - - - - - - - - - 0 - 0 - - - - Center Lat - - - - - - - - - - Center Lon - - - - - - - - - - - 0 - 0 - - - - Radius (miles) - - - - - - - - - - - - - - - - - - - - 0 - 0 - - - - Download File - - - - :/server_go.png:/server_go.png - - - - - - - 0 - 0 - - + + + + + + + 250 + 16777215 + + + + PointingHandCursor + + - Cancel - - - - :/cancel.png:/cancel.png + Download Most Recent Data - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Expanding - - - - 20 - 40 - - - - - - - - - - - - - 0 - 0 - - - - Fetch Station Data - - + - - - - 0 - 0 - - - - - 200 - 16777215 - - - - PointingHandCursor - + + Download Between Two Dates + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 80 + + + + 1 + + + - - Download from DEM - + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download the most recent weather data for a single time step simulation</p></body></html> + + + + + + - - Download by Station ID - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - 0 - - - 0 - - - + - + - Buffer Around DEM - - - - - - - PointingHandCursor + Start Time: - - - PointingHandCursor + + + M/d/yy h:mm  - - - mi - - - - - km - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - + - + - Input Station IDs + End Time: - - - KMSO, PNTM8 - - - false + + + M/d/yy h:mm  - + Qt::Orientation::Horizontal - 40 + 51 20 - - - - - - - - 250 - 16777215 - - - - PointingHandCursor - - - - Download Most Recent Data - - - Download Between Two Dates - + + + Current Time Zone: + + - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 16777215 - 80 - - - - 1 - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download the most recent weather data for a single time step simulation</p></body></html> - - - - - - - - - - - - - Start Time: - - - - - - - M/d/yy h:mm  - - - - - - - End Time: - - - - - - - M/d/yy h:mm  - - - - - - - Qt::Orientation::Horizontal - - - - 51 - 20 - - - - - - - - - - Current Time Zone: - - - - - - - - + + + + + + + + + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Download Data + + + + :/server_go.png:/server_go.png + - - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - Download Data - - - - :/server_go.png:/server_go.png - - - - - - - - 0 - 0 - - - - - 80 - 16777215 - - - - Cancel - - - - :/cancel.png:/cancel.png - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - + + + + 0 + 0 + + + + + 80 + 16777215 + + + + Cancel + + + + :/cancel.png:/cancel.png + + - + - Qt::Orientation::Vertical + Qt::Orientation::Horizontal - 20 - 40 + 40 + 20 - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - false - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - PointingHandCursor - - - Qt::LayoutDirection::LeftToRight - - - #solveButton { + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + + + 0 + 0 + + + + + 600 + 100 + + + + true + + + + + + + false + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + PointingHandCursor + + + Qt::LayoutDirection::LeftToRight + + + #solveButton { padding: 0; width: 100px; text-align: center; padding: 5px; } - - - Solve - - - - - - - - 0 - 0 - - - - - 600 - 100 - - - - true - - - - - - - - - 1 - 0 - - - - - 100 - 0 - - - - - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - - - + + + Solve + + + + + + + + + + 1 + 0 + + + + + 100 + 0 + + + + + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + + From 33407632cae74bb894c2ca757500e92ef699c4b8 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 2 Sep 2025 15:32:33 -0600 Subject: [PATCH 219/435] Adjusted minimum mainwindow size to better match old GUI --- src/gui/mainwindow.ui | 100 ++++++++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 42 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index af14153f0..9cbebb306 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -21,8 +21,8 @@ - 490 - 500 + 1000 + 800 @@ -750,8 +750,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 538 - 419 + 578 + 521 @@ -1316,7 +1316,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 346 + 572 661 @@ -2160,7 +2160,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 398 + 572 639 @@ -2607,8 +2607,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 414 - 408 + 578 + 521 @@ -3313,7 +3313,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 381 + 578 318 @@ -4171,15 +4171,21 @@ li.checked::marker { content: "\2612"; } - + - + 0 0 + + + 0 + 250 + + Fetch Station Data @@ -4549,15 +4555,21 @@ li.checked::marker { content: "\2612"; } - + 0 0 + + 0 + 0 + + + 600 - 100 + 125 @@ -4566,40 +4578,44 @@ li.checked::marker { content: "\2612"; } - - - false - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - PointingHandCursor - - - Qt::LayoutDirection::LeftToRight - - - #solveButton { + + + + + false + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + PointingHandCursor + + + Qt::LayoutDirection::LeftToRight + + + #solveButton { padding: 0; width: 100px; text-align: center; padding: 5px; } - - - Solve - - + + + Solve + + + + From 09e1edad06d692fb90199f8f30e698987c596261 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 2 Sep 2025 15:47:58 -0600 Subject: [PATCH 220/435] Code cleanup and refactoring based on recent work with point initialization --- src/gui/mainwindow.cpp | 79 +++++------------------------- src/gui/mainwindow.h | 1 - src/gui/pointinitializationinput.h | 4 +- src/gui/surfaceinput.cpp | 2 +- src/gui/surfaceinput.h | 3 +- 5 files changed, 17 insertions(+), 72 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 1000ce744..4d4461011 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -407,8 +407,6 @@ MainWindow::MainWindow(QWidget *parent) ui->legendComboBox->setItemData(0, "equal_interval"); ui->legendComboBox->setItemData(1, "equal_color"); - ui->googleEarthScrollArea->setAlignment(Qt::AlignTop); - connectSignals(); @@ -442,10 +440,6 @@ void MainWindow::connectSignals() connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, this, &MainWindow::treeWidgetItemDoubleClicked); connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); - connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); - connect(surfaceInput, &SurfaceInput::requestRefresh, this, &MainWindow::refreshUI); - connect(domainAverageInput, &DomainAverageInput::requestRefresh, this, &MainWindow::refreshUI); - connect(pointInitializationInput, &PointInitializationInput::requestRefresh, this, &MainWindow::refreshUI); connect(ui->googleEarthGroupBox, &QGroupBox::toggled, this, &MainWindow::googleEarthGroupBoxToggled); connect(ui->fireBehaviorGroupBox, &QGroupBox::toggled, this, &MainWindow::fireBehaviorGroupBoxToggled); connect(ui->shapeFilesGroupBox, &QGroupBox::toggled, this, &MainWindow::shapeFilesGroupBoxToggled); @@ -457,11 +451,13 @@ void MainWindow::connectSignals() connect(ui->geospatialPDFFilesMeshResolutionGroupBox, &QGroupBox::toggled, this, &MainWindow::geospatialPDFFilesMeshResolutionGroupBoxToggled); connect(ui->outputDirectoryButton, &QPushButton::clicked, this, &MainWindow::outputDirectoryButtonClicked); connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); - connect(surfaceInput, SIGNAL(setupTreeView()), pointInitializationInput, SLOT(setupTreeView())); - //connect other writeToConsoles to the main writeToConsole - connect(menuBar, &MenuBar::writeToConsole, this, &MainWindow::writeToConsole); -// connect(menuBar, SIGNAL( writeToConsole(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) )); // other way to do it + connect(menuBar, &MenuBar::writeToConsole, this, &MainWindow::writeToConsole); // connect(menuBar, SIGNAL( writeToConsole(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) )); // other way to do it + connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); + connect(surfaceInput, &SurfaceInput::requestRefresh, this, &MainWindow::refreshUI); + connect(surfaceInput, &SurfaceInput::setupTreeView, pointInitializationInput, &PointInitializationInput::setupTreeView); + connect(domainAverageInput, &DomainAverageInput::requestRefresh, this, &MainWindow::refreshUI); + connect(pointInitializationInput, &PointInitializationInput::requestRefresh, this, &MainWindow::refreshUI); } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) @@ -540,22 +536,6 @@ void MainWindow::stabilityCheckBoxClicked() refreshUI(); } -void MainWindow::useWeatherModelInitClicked() -{ - // AppState& state = AppState::instance(); - // state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); - - - // if (state.isWeatherModelInitializationToggled) { - // ui->domainAverageCheckBox->setChecked(false); - // ui->pointInitializationGroupBox->setChecked(false); - // state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); - // state.isPointInitializationToggled = ui->pointInitializationGroupBox->isChecked(); - // } - - // refreshUI(); -} - void MainWindow::outputDirectoryButtonClicked() { QString currentPath = ui->outputDirectoryLineEdit->text(); @@ -806,14 +786,7 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) } else if (item->text(0) == "Domain Average Wind") { - if(!ui->domainAverageGroupBox->isChecked()) - { - ui->domainAverageGroupBox->setChecked(true); - } - else - { - ui->domainAverageGroupBox->setChecked(false); - } + ui->domainAverageGroupBox->setChecked(!ui->domainAverageGroupBox->isChecked()); } else if (item->text(0) == "Point Initialization") { @@ -821,7 +794,7 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) } else if (item->text(0) == "Weather Model") { - ui->weatherModelGroupBox->setChecked(!ui->pointInitializationGroupBox); + ui->weatherModelGroupBox->setChecked(!ui->weatherModelGroupBox->isChecked()); } else if (item->text(0) == "Surface Input") { @@ -829,47 +802,19 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) } else if (item->text(0) == "Google Earth") { - if(!ui->googleEarthGroupBox->isChecked()) - { - ui->googleEarthGroupBox->setChecked(true); - } - else - { - ui->googleEarthGroupBox->setChecked(false); - } + ui->googleEarthGroupBox->setChecked(!ui->googleEarthGroupBox->isChecked()); } else if (item->text(0) == "Fire Behavior") { - if(!ui->fireBehaviorGroupBox->isChecked()) - { - ui->fireBehaviorGroupBox->setChecked(true); - } - else - { - ui->fireBehaviorGroupBox->setChecked(false); - } + ui->fireBehaviorGroupBox->setChecked(!ui->fireBehaviorGroupBox->isChecked()); } else if (item->text(0) == "Shape Files") { - if(!ui->shapeFilesGroupBox->isChecked()) - { - ui->shapeFilesGroupBox->setChecked(true); - } - else - { - ui->shapeFilesGroupBox->setChecked(false); - } + ui->shapeFilesGroupBox->setChecked(!ui->shapeFilesGroupBox->isChecked()); } else if (item->text(0) == "Geospatial PDF Files") { - if(!ui->geospatialPDFFilesGroupBox->isChecked()) - { - ui->geospatialPDFFilesGroupBox->setChecked(true); - } - else - { - ui->geospatialPDFFilesGroupBox->setChecked(false); - } + ui->geospatialPDFFilesGroupBox->setChecked(!ui->geospatialPDFFilesGroupBox->isChecked()); } else if (item->text(0) == "VTK Files") { diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 40bc60dbd..fceaf6721 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -107,7 +107,6 @@ private slots: void diurnalCheckBoxClicked(); void stabilityCheckBoxClicked(); void treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column); - void useWeatherModelInitClicked(); void solveButtonClicked(); void outputDirectoryButtonClicked(); void numberOfProcessorsSolveButtonClicked(); diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index 6d45c7192..5949c8a9c 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -58,6 +58,9 @@ class PointInitializationInput : public QObject signals: void requestRefresh(); +public slots: + void setupTreeView(); + private slots: void pointInitializationGroupBoxToggled(bool toggled); void pointInitializationDownloadDataButtonClicked(); @@ -71,7 +74,6 @@ private slots: void folderExpanded(const QModelIndex &index); void folderCollapsed(const QModelIndex &index); void weatherStationDataTimestepsSpinBoxValueChanged(int value); - void setupTreeView(); private: Ui::MainWindow *ui; diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 4ca4a26af..430803920 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -299,7 +299,7 @@ void SurfaceInput::startFetchDEM(QVector boundingBox, std::string demFil progress->show(); futureWatcher = new QFutureWatcher(this); - QFuture future = QtConcurrent::run(&SurfaceInput::fetchDEMFile, surfaceInput, boundingBox, demFile, resolution, fetchType); + QFuture future = QtConcurrent::run(&SurfaceInput::fetchDEMFile, boundingBox, demFile, resolution, fetchType); futureWatcher->setFuture(future); connect(futureWatcher, &QFutureWatcher::finished, this, &SurfaceInput::fetchDEMFinished); diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index dc8baecbf..5f05956da 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -88,7 +88,6 @@ private slots: private: Ui::MainWindow *ui; QWebEngineView *webEngineView; - SurfaceInput *surfaceInput; QProgressDialog *progress; QFutureWatcher *futureWatcher; @@ -101,7 +100,7 @@ private slots: QString fetchTimeZoneDetails(QString currentTimeZone); QVector> fetchAllTimeZones(bool isShowAllTimeZonesSelected); - int fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); + static int fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); void computeDEMFile(QString filePath); void computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]); void computePointRadius(double north, double east, double south, double west, double pointRadius[3]); From 1e3493f713942ef036e4d73dd6862309bae654ac Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 2 Sep 2025 15:54:18 -0600 Subject: [PATCH 221/435] Removed horizontal scroll bar from point initialization --- src/gui/mainwindow.ui | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 9cbebb306..f794e21ca 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -464,7 +464,7 @@ QFrame::Shadow::Sunken - 20 + 10 @@ -1783,6 +1783,9 @@ li.checked::marker { content: "\2612"; } 16777215 + + Qt::ScrollBarPolicy::ScrollBarAlwaysOff + @@ -2608,7 +2611,7 @@ li.checked::marker { content: "\2612"; } 0 0 578 - 521 + 588 From 15d566a7145280e27d3ec6e23db6944dba7dc4f3 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 3 Sep 2025 13:33:01 -0600 Subject: [PATCH 222/435] getting rid of mainwindow.ui duplicate qtActions and layouts make warnings. seems the duplicate "aboutQtAction" and "exportSolutionAction" were introduced in commit/merge 787ef5e13f78e0f1a010d46b44c41fa7d171f0bb, one of the extra "verticalLayout_26" was added in commit/merge 5f5cc8e1363c05e448b7afd729301bd79f9d9787, and the additional "verticalLayout_" "_26", "_29", and "_31" were added in commit/merge 006911fa236526f802bac31ff5e6fe2fe74db828. It is confusing though, because some of the later commits/merges make it look like these same changes were added then as well, but I double checked and these commits seem to be the earliest that such additions were found in the raw files of the mainwindow.ui file code. Not detecting any differences in code behavior, so I think that these should be the only quirky changes accidentally introduced during the last few merges. --- src/gui/mainwindow.ui | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index f794e21ca..0476bf2b4 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -1831,7 +1831,7 @@ li.checked::marker { content: "\2612"; } false - + @@ -2179,7 +2179,7 @@ li.checked::marker { content: "\2612"; } false - + @@ -2191,7 +2191,7 @@ li.checked::marker { content: "\2612"; } Download Weather Data - + @@ -2309,7 +2309,7 @@ li.checked::marker { content: "\2612"; } false - + @@ -5046,8 +5046,6 @@ QMenu::item:selected { :/bug_link.png:/bug_link.png - - Submit &Bug Report @@ -5062,8 +5060,6 @@ QMenu::item:selected { - - About &Qt From 7fb36e552beb62c8dd9d52b5c6986c62a2b68623 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 4 Sep 2025 11:14:43 -0600 Subject: [PATCH 223/435] Updated all references of minimum required cmake version to 3.16, for #660 --- CMakeLists.txt | 2 +- autotest/CMakeLists.txt | 2 +- cmake/Modules/GetDate.cmake | 2 +- src/CMakeLists.txt | 2 +- src/cli/CMakeLists.txt | 2 +- src/surface_input_nodata_filler/CMakeLists.txt | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3df24954a..d89d457c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -cmake_minimum_required (VERSION 3.0) +cmake_minimum_required (VERSION 3.16) project(WindNinja) diff --git a/autotest/CMakeLists.txt b/autotest/CMakeLists.txt index 871981d9d..2694b6f37 100644 --- a/autotest/CMakeLists.txt +++ b/autotest/CMakeLists.txt @@ -15,7 +15,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -#cmake_minimum_required(VERSION 2.6) +#cmake_minimum_required(VERSION 3.16) include_directories(${PROJECT_SOURCE_DIR}/src/ninja ${NETCDF_INCLUDES} diff --git a/cmake/Modules/GetDate.cmake b/cmake/Modules/GetDate.cmake index 3808bd403..40f9d9362 100644 --- a/cmake/Modules/GetDate.cmake +++ b/cmake/Modules/GetDate.cmake @@ -1,4 +1,4 @@ -#cmake_minimum_required(VERSION 2.8) +#cmake_minimum_required(VERSION 3.16) macro(GET_DATE) # diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c82371fea..3797c367c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -15,7 +15,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -#cmake_minimum_required(VERSION 2.6) +#cmake_minimum_required(VERSION 3.16) add_subdirectory(ninja) diff --git a/src/cli/CMakeLists.txt b/src/cli/CMakeLists.txt index e4b8a1d90..4be4176cf 100644 --- a/src/cli/CMakeLists.txt +++ b/src/cli/CMakeLists.txt @@ -15,7 +15,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -#cmake_minimum_required(VERSION 3.16) +#cmake_minimum_required(VERSION 3.10) if(NINJA_GUI) find_package(QT NAMES Qt6 REQUIRED COMPONENTS Widgets) diff --git a/src/surface_input_nodata_filler/CMakeLists.txt b/src/surface_input_nodata_filler/CMakeLists.txt index 0635666b5..5b6168ab3 100644 --- a/src/surface_input_nodata_filler/CMakeLists.txt +++ b/src/surface_input_nodata_filler/CMakeLists.txt @@ -15,7 +15,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.16) include_directories(${PROJECT_SOURCE_DIR}/src/ninja ${GDAL_SYSTEM_INCLUDE} From d7050844ed0a4cbd342f5a011401dec20e48f485 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 4 Sep 2025 11:23:48 -0600 Subject: [PATCH 224/435] Changed c++ version to be 17 or greater and cleaned up GUI CMakeLists.txt file, for #660 --- CMakeLists.txt | 2 +- src/gui/CMakeLists.txt | 55 ++++++++++-------------------------------- 2 files changed, 14 insertions(+), 43 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d89d457c0..b70462361 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,7 @@ cmake_minimum_required (VERSION 3.16) project(WindNinja) # let cmake figure out how to set the C++ level -set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED on) # Needed for FindNetCDF and GET_DATE() diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 4ec68bd47..b80f99d5d 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -1,22 +1,17 @@ cmake_minimum_required(VERSION 3.16) -project(WindNinja VERSION 0.1 LANGUAGES CXX) - set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - find_package(QT NAMES Qt6 REQUIRED COMPONENTS Widgets) -find_package(Qt6 REQUIRED COMPONENTS Widgets WebEngineWidgets) +find_package(Qt6 REQUIRED COMPONENTS Widgets WebEngineWidgets WebChannel) set(PROJECT_SOURCES - main.cpp - mainwindow.cpp - mainwindow.h - mainwindow.ui + main.cpp + mainwindow.cpp + mainwindow.h + mainwindow.ui ) if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) @@ -43,45 +38,21 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) weathermodelinput.h weathermodelinput.cpp pointinitializationinput.h pointinitializationinput.cpp ) -# Define target properties for Android with Qt 6 as: -# set_property(TARGET WindNinja APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR -# ${CMAKE_CURRENT_SOURCE_DIR}/android) -# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation else() - if(ANDROID) - add_library(WindNinja SHARED - ${PROJECT_SOURCES} - ) -# Define properties for Android with Qt 5 after find_package() calls as: -# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") - else() - add_executable(WindNinja - ${PROJECT_SOURCES} - ) - endif() + add_executable(WindNinja + ${PROJECT_SOURCES} + ) endif() - -target_link_libraries(WindNinja PRIVATE Qt${QT_VERSION_MAJOR}::Widgets PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets PRIVATE ninja) - - -# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. -# If you are developing for iOS or macOS you should consider setting an -# explicit, fixed bundle identifier manually though. -if(${QT_VERSION} VERSION_LESS 6.1.0) - set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.WindNinja) -endif() -set_target_properties(WindNinja PROPERTIES - ${BUNDLE_ID_OPTION} - MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} - MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} - MACOSX_BUNDLE TRUE - WIN32_EXECUTABLE TRUE +target_link_libraries(WindNinja + PRIVATE Qt${QT_VERSION_MAJOR}::Widgets + PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets + PRIVATE Qt${QT_VERSION_MAJOR}::WebChannel + PRIVATE ninja ) include(GNUInstallDirs) install(TARGETS WindNinja - BUNDLE DESTINATION . LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) From 00ac17d7ce0778f3b3a8daee8655fe5e5ea594c1 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 4 Sep 2025 11:25:33 -0600 Subject: [PATCH 225/435] Changed NinjaGetCommunication failed return value from int to null, for #660 --- src/ninja/windninja.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 920b98589..4940d3fd8 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -651,7 +651,7 @@ WINDNINJADLL_EXPORT ninjaComClass * NinjaGetCommunication } else { - return NINJA_E_NULL_PTR; + return NULL; } } #endif //NINJA_GUI From 996cce3ad99eae3b510bd36205f8a0ea4d0db474 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 4 Sep 2025 11:33:14 -0600 Subject: [PATCH 226/435] Added shaplib package when using vcpkg, for #660 --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b70462361..46921f2ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -107,6 +107,7 @@ endif(WIN32) option(USE_VCPKG "Use VCPKG for boost and GDAL" ) if(USE_VCPKG) message("Using VCPKG") + find_package(shaplib CONFIG REQUIRED) find_package(GDAL CONFIG REQUIRED) find_package(NETCDF CONFIG REQUIRED) # target_link_libraries(main PRIVATE GDAL::GDAL) @@ -530,7 +531,7 @@ CreateDirectory \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Documents\\\" CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Tutorials\\\\Tutorial 1.lnk\\\" \\\"$INSTDIR\\\\share\\\\windninja\\\\doc\\\\tutorials\\\\WindNinja_Tutorial1.pdf\\\" CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Tutorials\\\\Tutorial 2.lnk\\\" \\\"$INSTDIR\\\\share\\\\windninja\\\\doc\\\\tutorials\\\\WindNinja_Tutorial2.pdf\\\" CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Tutorials\\\\Tutorial 3.lnk\\\" \\\"$INSTDIR\\\\share\\\\windninja\\\\doc\\\\tutorials\\\\WindNinja_Tutorial3.pdf\\\" -CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Tutorials\\\\Tutorial 4.lnk\\\" \\\"$INSTDIR\\\\share\\\\windninja\\\\doc\\\\tutorials\\\\WindNinja_Tutorial4.pdf\\\" +CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Tutorials\\\\Tutorial 4.lnk\\\" \\\"$INSTDIR\\\\share\\\\windninja\\\\doc\\\\tutorials\\\\WindNinja_Tutorial4.pdf\\\" CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Documents\\\\CLI Instructions.lnk\\\" \\\"$INSTDIR\\\\share\\\\windninja\\\\doc\\\\CLI_instructions.pdf\\\" CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Documents\\\\ArcMap Instructions.lnk\\\" \\\"$INSTDIR\\\\share\\\\windninja\\\\doc\\\\Displaying_wind_vectors_in_ArcMap.pdf\\\" CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Documents\\\\DEM Download Instructions.lnk\\\" \\\"$INSTDIR\\\\share\\\\windninja\\\\doc\\\\download_elevation_file.pdf\\\" From 92fe97687f55cfbe69e379a29c6359ab723f018f Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 4 Sep 2025 11:34:52 -0600 Subject: [PATCH 227/435] Changed void* to CPLJoinableThread for archive HRRR downloads, for #660 --- src/ninja/gcp_wx_init.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ninja/gcp_wx_init.cpp b/src/ninja/gcp_wx_init.cpp index 661d0f7ea..c75173598 100644 --- a/src/ninja/gcp_wx_init.cpp +++ b/src/ninja/gcp_wx_init.cpp @@ -282,7 +282,7 @@ std::string GCPWxModel::fetchForecast(std::string demFile, int nhours) // try multi threaded download const int MAX_CONCURRENT = 4; - std::vector threadHandles; + std::vector threadHandles; int i = 0; for (size_t dt = 0; dt < validTimes.size(); ++dt) @@ -299,7 +299,7 @@ std::string GCPWxModel::fetchForecast(std::string demFile, int nhours) params->options = options; params->i = i; - void* handle = CPLCreateJoinableThread(ThreadFunc, params); + CPLJoinableThread* handle = CPLCreateJoinableThread(ThreadFunc, params); if (!handle) { CPLDebug("GCP", "Failed to create thread"); delete params; From f8f35aa07cf0d49741d3122139f88e7ca300cfa6 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 4 Sep 2025 11:36:33 -0600 Subject: [PATCH 228/435] Changed deprecated OGR_DS_Destroy with GDALClose, for #660 --- src/ninja/OutputWriter.cpp | 2 +- src/ninja/cli.cpp | 2 +- src/ninja/dust.cpp | 2 +- src/ninja/gdal_util.cpp | 4 ++-- src/ninja/ninjafoam.cpp | 4 ++-- src/ninja/pointInitialization.cpp | 8 ++++---- src/ninja/wxStation.cpp | 6 +++--- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/ninja/OutputWriter.cpp b/src/ninja/OutputWriter.cpp index 20dabbf3b..90b64c074 100644 --- a/src/ninja/OutputWriter.cpp +++ b/src/ninja/OutputWriter.cpp @@ -297,7 +297,7 @@ void OutputWriter::_closeOGRFile() { if( NULL != hDataSource ) { - OGR_DS_Destroy( hDataSource ); + GDALClose( hDataSource ); hDataSource = NULL; } } diff --git a/src/ninja/cli.cpp b/src/ninja/cli.cpp index 0b457538d..4d387c23d 100644 --- a/src/ninja/cli.cpp +++ b/src/ninja/cli.cpp @@ -648,7 +648,7 @@ int windNinjaCLI(int argc, char* argv[]) OGRPointToLatLon(bbox[1], bbox[0], hDS, "WGS84"); OGRPointToLatLon(bbox[3], bbox[2], hDS, "WGS84"); - OGR_DS_Destroy(hDS); + GDALClose(hDS); //add a buffer bbox[0] += 0.009; //north diff --git a/src/ninja/dust.cpp b/src/ninja/dust.cpp index b42496b87..0dd81c6b4 100644 --- a/src/ninja/dust.cpp +++ b/src/ninja/dust.cpp @@ -158,7 +158,7 @@ void Dust::MakeGrid(WindNinjaInputs &input, AsciiGrid &grid) hMemDS = NULL; } - OGR_DS_Destroy(hOGRDS); + GDALClose(hOGRDS); } #endif diff --git a/src/ninja/gdal_util.cpp b/src/ninja/gdal_util.cpp index 524d2b817..8db765898 100644 --- a/src/ninja/gdal_util.cpp +++ b/src/ninja/gdal_util.cpp @@ -747,7 +747,7 @@ std::string FetchTimeZone( double dfX, double dfY, const char *pszWkt ) } OGR_F_Destroy( hFeature ); OGR_G_DestroyGeometry( hGeometry ); - OGR_DS_Destroy( hDS ); + GDALClose( hDS ); return oTimeZone; } /** @@ -818,7 +818,7 @@ int NinjaOGRContain(const char *pszWkt, const char *pszFile, } } OGR_G_DestroyGeometry( hTestGeometry ); - OGR_DS_Destroy( hDS ); + GDALClose( hDS ); return bContains; } diff --git a/src/ninja/ninjafoam.cpp b/src/ninja/ninjafoam.cpp index 125226364..c07e73467 100644 --- a/src/ninja/ninjafoam.cpp +++ b/src/ninja/ninjafoam.cpp @@ -2247,7 +2247,7 @@ int NinjaFoam::SampleCloud() } OGR_G_DestroyGeometry( hGeometry ); OGR_F_Destroy( hFeature ); - OGR_DS_Destroy( hDS ); + GDALClose( hDS ); GDALClose( hGriddedDS ); return 0; @@ -2401,7 +2401,7 @@ int NinjaFoam::SampleCloudGrid() CPLFree( (void*)padfData ); OGR_G_DestroyGeometry( hGeometry ); OGR_F_Destroy( hFeature ); - OGR_DS_Destroy( hDS ); + GDALClose( hDS ); GDALClose( hGriddedDS ); return 0; diff --git a/src/ninja/pointInitialization.cpp b/src/ninja/pointInitialization.cpp index 022688cb8..e4cdf59d4 100644 --- a/src/ninja/pointInitialization.cpp +++ b/src/ninja/pointInitialization.cpp @@ -777,7 +777,7 @@ vector pointInitialization::readDiskLine(st if( dfTempValue > 90.0 || dfTempValue < -90.0 ) { OGRFeature::DestroyFeature( poFeature ); - OGR_DS_Destroy( hDS ); + GDALClose( hDS ); oErrorString = "Bad latitude in weather station csv file"; oErrorString += " at station: "; @@ -792,7 +792,7 @@ vector pointInitialization::readDiskLine(st if( dfTempValue < -180.0 || dfTempValue > 360.0 ) { OGRFeature::DestroyFeature( poFeature ); - OGR_DS_Destroy( hDS ); + GDALClose( hDS ); oErrorString = "Bad longitude in weather station csv file"; oErrorString += " at station: "; @@ -1045,7 +1045,7 @@ vector pointInitialization::readDiskLine(st OGRFeature::DestroyFeature( poFeature ); } - OGR_DS_Destroy( hDS ); + GDALClose( hDS ); return oStations; } @@ -1641,7 +1641,7 @@ void pointInitialization::fetchMetaData(std::string fileName, std::string demFil OGR_F_Destroy( hFeature ); } - OGR_DS_Destroy(poDS); + GDALClose(poDS); GDALClose(hDS); } /** diff --git a/src/ninja/wxStation.cpp b/src/ninja/wxStation.cpp index 0d6184505..f51d1224b 100644 --- a/src/ninja/wxStation.cpp +++ b/src/ninja/wxStation.cpp @@ -678,7 +678,7 @@ int wxStation::GetHeaderVersion(const char *pszFilename) } // If we failed to open or get metadata, bail if (rc == -1) { - OGR_DS_Destroy(hDS); + GDALClose(hDS); return -1; } @@ -731,7 +731,7 @@ int wxStation::GetHeaderVersion(const char *pszFilename) } // If we failed to get version 1 columns, bail if (rc == -1) { - OGR_DS_Destroy(hDS); + GDALClose(hDS); return -1; } /* @@ -748,7 +748,7 @@ int wxStation::GetHeaderVersion(const char *pszFilename) } rc = 2; } - OGR_DS_Destroy(hDS); + GDALClose(hDS); return rc; } From 9d743f1f8eb1a9b9bc86b261f49cc5eff40f4eea Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 4 Sep 2025 11:41:57 -0600 Subject: [PATCH 229/435] Added vcpkg.json for easier dependency installation, for #660 --- vcpkg.json | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 vcpkg.json diff --git a/vcpkg.json b/vcpkg.json new file mode 100644 index 000000000..614814600 --- /dev/null +++ b/vcpkg.json @@ -0,0 +1,43 @@ +{ + "name": "windninja-deps", + "version": "1.0.0", + "dependencies": [ + { + "name": "boost-date-time" + }, + { + "name": "boost-program-options" + }, + { + "name": "boost-test" + }, + { + "name": "gdal" + }, + { + "name": "shapelib" + }, + { + "name": "qtbase", + "features": ["widgets", "network" ] + }, + { + "name": "qttools" + }, + { + "name": "qtdeclarative" + }, + { + "name": "qtquickcontrols2" + }, + { + "name": "qtpositioning" + }, + { + "name": "qtwebchannel" + }, + { + "name": "qtwebengine" + } + ] +} From 396501fe97686ebed9d7ae3e864eeca5d7043f67 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 4 Sep 2025 15:22:15 -0600 Subject: [PATCH 230/435] Time zone is now read from dem file and display via the combo box, for #648 --- src/gui/surfaceinput.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 430803920..0aef7124e 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -550,6 +550,15 @@ void SurfaceInput::computeDEMFile(QString filePath) GDALYSize = poInputDS->GetRasterYSize(); GDALGetCorners(poInputDS, DEMCorners); + double latitude, longitude; + GDALGetCenter(poInputDS, &longitude, &latitude); + std::string timeZone = FetchTimeZone(longitude, latitude, NULL); + int index = ui->timeZoneComboBox->findText(QString::fromStdString(timeZone)); + if (index >= 0) + { + ui->timeZoneComboBox->setCurrentIndex(index); + } + if (poInputDS->GetGeoTransform(adfGeoTransform) == CE_None) { double c1, c2; @@ -574,7 +583,6 @@ void SurfaceInput::computeDEMFile(QString filePath) GDALMaxValue = maxVal; GDALClose((GDALDatasetH)poInputDS); - } double SurfaceInput::computeMeshResolution(int index, bool isMomemtumChecked) From cf8bf501d9be0f018ea34a8d424dad98d37d784f Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 5 Sep 2025 11:42:14 -0600 Subject: [PATCH 231/435] Ensured that coordinates are recieved from all bounding boxes drawn and point radius should update alongside bounding box coordinates, for #648 --- data/map.html | 2 ++ src/gui/surfaceinput.cpp | 44 +++++++++++++++++++++++++--------------- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/data/map.html b/data/map.html index b770721ca..cf9052f00 100755 --- a/data/map.html +++ b/data/map.html @@ -144,6 +144,8 @@ const bounds = [[south, west], [north, east]]; const rectangle = L.rectangle(bounds).addTo(mapRectangleLayer); rectangle.editing.enable(); + sendBoundingBox(rectangle); + rectangle.on('edit', () => sendBoundingBox(rectangle)); } function drawDEM(DEMCorners) { diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index 0aef7124e..badbb42d4 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -106,13 +106,23 @@ void SurfaceInput::boundingBoxReceived(double north, double south, double east, double pointRadius[3]; computePointRadius(north, east, south, west, pointRadius); + + ui->pointRadiusLatLineEdit->blockSignals(true); + ui->pointRadiusLonLineEdit->blockSignals(true); + ui->pointRadiusRadiusLineEdit->blockSignals(true); + ui->pointRadiusLatLineEdit->setText(QString::number(pointRadius[0])); ui->pointRadiusLonLineEdit->setText(QString::number(pointRadius[1])); ui->pointRadiusRadiusLineEdit->setText(QString::number(pointRadius[2])); + ui->pointRadiusLatLineEdit->blockSignals(false); + ui->pointRadiusLonLineEdit->blockSignals(false); + ui->pointRadiusRadiusLineEdit->blockSignals(false); + ui->elevationInputTypePushButton->setChecked(false); } + void SurfaceInput::boundingBoxLineEditsTextChanged() { bool isNorthValid, isEastValid, isSouthValid, isWestValid; @@ -122,7 +132,7 @@ void SurfaceInput::boundingBoxLineEditsTextChanged() double south = ui->boundingBoxSouthLineEdit->text().toDouble(&isSouthValid); double west = ui->boundingBoxWestLineEdit->text().toDouble(&isWestValid); - if (isNorthValid && isEastValid && isSouthValid && isWestValid) + if (isNorthValid && isEastValid && isSouthValid && isWestValid && ui->elevationInputTypeComboBox->currentIndex() == 0) { QString js = QString("drawBoundingBox(%1, %2, %3, %4);") .arg(north, 0, 'f', 10) @@ -135,21 +145,23 @@ void SurfaceInput::boundingBoxLineEditsTextChanged() void SurfaceInput::pointRadiusLineEditsTextChanged() { - // bool isLatValid, isLonValid, isRadiusValid; - - // double lat = ui->pointRadiusLatLineEdit->text().toDouble(&isLatValid); - // double lon = ui->pointRadiusLonLineEdit->text().toDouble(&isLonValid); - // double radius = ui->pointRadiusRadiusLineEdit->text().toDouble(&isRadiusValid); - // double boundingBox[4]; - - // if(isLatValid && isLonValid && isRadiusValid) - // { - // surfaceInput->computeBoundingBox(lat, lon, radius, boundingBox); - // ui->boundingBoxNorthLineEdit->setText(QString::number(boundingBox[0])); - // ui->boundingBoxEastLineEdit->setText(QString::number(boundingBox[1])); - // ui->boundingBoxSouthLineEdit->setText(QString::number(boundingBox[2])); - // ui->boundingBoxWestLineEdit->setText(QString::number(boundingBox[3])); - // } + bool isLatValid, isLonValid, isRadiusValid; + + double lat = ui->pointRadiusLatLineEdit->text().toDouble(&isLatValid); + double lon = ui->pointRadiusLonLineEdit->text().toDouble(&isLonValid); + double radius = ui->pointRadiusRadiusLineEdit->text().toDouble(&isRadiusValid); + double boundingBox[4]; + + if(isLatValid && isLonValid && isRadiusValid && ui->elevationInputTypeComboBox->currentIndex() == 1) + { + computeBoundingBox(lat, lon, radius, boundingBox); + QString js = QString("drawBoundingBox(%1, %2, %3, %4);") + .arg(boundingBox[0], 0, 'f', 10) + .arg(boundingBox[2], 0, 'f', 10) + .arg(boundingBox[1], 0, 'f', 10) + .arg(boundingBox[3], 0, 'f', 10); + webEngineView->page()->runJavaScript(js); + } } void SurfaceInput::surfaceInputDownloadCancelButtonClicked() From 4d74ec54c86872b89fcc59049b4070f4b4b4c905 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 5 Sep 2025 15:50:11 -0600 Subject: [PATCH 232/435] Small refactoring of some functions and statements, for #648 --- src/gui/surfaceinput.cpp | 79 ++++++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 36 deletions(-) diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceinput.cpp index badbb42d4..b2025ad13 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceinput.cpp @@ -50,6 +50,7 @@ SurfaceInput::SurfaceInput(Ui::MainWindow *ui, connect(ui->elevationInputFileDownloadButton, &QPushButton::clicked, this, &SurfaceInput::elevationInputFileDownloadButtonClicked); connect(ui->elevationInputFileOpenButton, &QPushButton::clicked, this, &SurfaceInput::elevationInputFileOpenButtonClicked); connect(ui->elevationInputFileLineEdit, &QLineEdit::textChanged, this, &SurfaceInput::elevationInputFileLineEditTextChanged); + connect(ui->elevationInputTypeComboBox, &QComboBox::currentIndexChanged, ui->elevationInputTypeStackedWidget, &QStackedWidget::setCurrentIndex); connect(ui->meshResolutionComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInput::meshResolutionComboBoxCurrentIndexChanged); connect(ui->meshResolutionUnitsComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInput::meshResolutionUnitsComboBoxCurrentIndexChanged); connect(ui->surfaceInputDownloadCancelButton, &QPushButton::clicked, this, &SurfaceInput::surfaceInputDownloadCancelButtonClicked); @@ -63,15 +64,13 @@ SurfaceInput::SurfaceInput(Ui::MainWindow *ui, void SurfaceInput::meshResolutionUnitsComboBoxCurrentIndexChanged(int index) { - switch(index) + if(index == 0) { - case 0: ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 0.3048); - break; - - case 1: + } + else + { ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 3.28084); - break; } } @@ -125,42 +124,46 @@ void SurfaceInput::boundingBoxReceived(double north, double south, double east, void SurfaceInput::boundingBoxLineEditsTextChanged() { - bool isNorthValid, isEastValid, isSouthValid, isWestValid; - - double north = ui->boundingBoxNorthLineEdit->text().toDouble(&isNorthValid); - double east = ui->boundingBoxEastLineEdit->text().toDouble(&isEastValid); - double south = ui->boundingBoxSouthLineEdit->text().toDouble(&isSouthValid); - double west = ui->boundingBoxWestLineEdit->text().toDouble(&isWestValid); - - if (isNorthValid && isEastValid && isSouthValid && isWestValid && ui->elevationInputTypeComboBox->currentIndex() == 0) + if(ui->elevationInputTypeComboBox->currentIndex() == 0) { - QString js = QString("drawBoundingBox(%1, %2, %3, %4);") - .arg(north, 0, 'f', 10) - .arg(south, 0, 'f', 10) - .arg(east, 0, 'f', 10) - .arg(west, 0, 'f', 10); - webEngineView->page()->runJavaScript(js); + bool isNorthValid, isEastValid, isSouthValid, isWestValid; + double north = ui->boundingBoxNorthLineEdit->text().toDouble(&isNorthValid); + double east = ui->boundingBoxEastLineEdit->text().toDouble(&isEastValid); + double south = ui->boundingBoxSouthLineEdit->text().toDouble(&isSouthValid); + double west = ui->boundingBoxWestLineEdit->text().toDouble(&isWestValid); + + if (isNorthValid && isEastValid && isSouthValid && isWestValid) + { + QString js = QString("drawBoundingBox(%1, %2, %3, %4);") + .arg(north, 0, 'f', 10) + .arg(south, 0, 'f', 10) + .arg(east, 0, 'f', 10) + .arg(west, 0, 'f', 10); + webEngineView->page()->runJavaScript(js); + } } } void SurfaceInput::pointRadiusLineEditsTextChanged() { - bool isLatValid, isLonValid, isRadiusValid; - - double lat = ui->pointRadiusLatLineEdit->text().toDouble(&isLatValid); - double lon = ui->pointRadiusLonLineEdit->text().toDouble(&isLonValid); - double radius = ui->pointRadiusRadiusLineEdit->text().toDouble(&isRadiusValid); - double boundingBox[4]; - - if(isLatValid && isLonValid && isRadiusValid && ui->elevationInputTypeComboBox->currentIndex() == 1) + if (ui->elevationInputTypeComboBox->currentIndex() == 1) { - computeBoundingBox(lat, lon, radius, boundingBox); - QString js = QString("drawBoundingBox(%1, %2, %3, %4);") - .arg(boundingBox[0], 0, 'f', 10) - .arg(boundingBox[2], 0, 'f', 10) - .arg(boundingBox[1], 0, 'f', 10) - .arg(boundingBox[3], 0, 'f', 10); - webEngineView->page()->runJavaScript(js); + bool isLatValid, isLonValid, isRadiusValid; + double lat = ui->pointRadiusLatLineEdit->text().toDouble(&isLatValid); + double lon = ui->pointRadiusLonLineEdit->text().toDouble(&isLonValid); + double radius = ui->pointRadiusRadiusLineEdit->text().toDouble(&isRadiusValid); + double boundingBox[4]; + + if(isLatValid && isLonValid && isRadiusValid) + { + computeBoundingBox(lat, lon, radius, boundingBox); + QString js = QString("drawBoundingBox(%1, %2, %3, %4);") + .arg(boundingBox[0], 0, 'f', 10) + .arg(boundingBox[2], 0, 'f', 10) + .arg(boundingBox[1], 0, 'f', 10) + .arg(boundingBox[3], 0, 'f', 10); + webEngineView->page()->runJavaScript(js); + } } } @@ -182,11 +185,14 @@ void SurfaceInput::surfaceInputDownloadCancelButtonClicked() ui->pointRadiusRadiusLineEdit->clear(); webEngineView->page()->runJavaScript("stopRectangleDrawing();"); + if(!currentDEMFilePath.isEmpty()) { QStringList cornerStrs; for (int i = 0; i < 8; ++i) - cornerStrs << QString::number(DEMCorners[i], 'f', 8); + { + cornerStrs << QString::number(DEMCorners[i], 'f', 8); + } QString js = QString("drawDEM([%1]);").arg(cornerStrs.join(", ")); webEngineView->page()->runJavaScript(js); } @@ -250,6 +256,7 @@ void SurfaceInput::meshResolutionComboBoxCurrentIndexChanged(int index) { ui->meshResolutionSpinBox->setEnabled(false); } + ui->meshResolutionSpinBox->setValue(computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); } From 824c80146291e182f2f5600f86c5b33d3164a53f Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 8 Sep 2025 14:38:16 -0600 Subject: [PATCH 233/435] Added ability to download 1 weather model and set up the tree view, for #637 --- src/gui/mainwindow.cpp | 22 +++------- src/gui/mainwindow.h | 1 - src/gui/pointinitializationinput.h | 2 +- src/gui/weathermodelinput.cpp | 69 ++++++++++++++++++++++++++++++ src/gui/weathermodelinput.h | 16 ++++++- src/ninja/windninja.cpp | 17 ++++++-- src/ninja/windninja.h | 4 +- 7 files changed, 106 insertions(+), 25 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index a69916005..5e7ca27b7 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -353,6 +353,7 @@ MainWindow::MainWindow(QWidget *parent) surfaceInput = new SurfaceInput(ui, webEngineView, this); domainAverageInput = new DomainAverageInput(ui, this); pointInitializationInput = new PointInitializationInput(ui, this); + weatherModelInput = new WeatherModelInput(ui, this); ui->inputsStackedWidget->setCurrentIndex(0); ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); @@ -455,7 +456,10 @@ void MainWindow::connectSignals() connect(ui->geospatialPDFFilesMeshResolutionGroupBox, &QGroupBox::toggled, this, &MainWindow::geospatialPDFFilesMeshResolutionGroupBoxToggled); connect(ui->outputDirectoryButton, &QPushButton::clicked, this, &MainWindow::outputDirectoryButtonClicked); connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); - connect(surfaceInput, SIGNAL(setupTreeView()), pointInitializationInput, SLOT(setupTreeView())); + connect(surfaceInput, &SurfaceInput::setupTreeView, pointInitializationInput, &PointInitializationInput::setupTreeView); + connect(surfaceInput, &SurfaceInput::setupTreeView, weatherModelInput, &WeatherModelInput::setUpTreeView); + + connect(weatherModelInput, &WeatherModelInput::requestRefresh, this, &MainWindow::refreshUI); //connect other writeToConsoles to the main writeToConsole connect(menuBar, &MenuBar::writeToConsole, this, &MainWindow::writeToConsole); @@ -537,22 +541,6 @@ void MainWindow::stabilityCheckBoxClicked() refreshUI(); } -void MainWindow::useWeatherModelInitClicked() -{ - // AppState& state = AppState::instance(); - // state.isWeatherModelInitializationToggled = ui->weatherModelCheckBox->isChecked(); - - - // if (state.isWeatherModelInitializationToggled) { - // ui->domainAverageCheckBox->setChecked(false); - // ui->pointInitializationGroupBox->setChecked(false); - // state.isDomainAverageInitializationToggled = ui->domainAverageCheckBox->isChecked(); - // state.isPointInitializationToggled = ui->pointInitializationGroupBox->isChecked(); - // } - - // refreshUI(); -} - void MainWindow::outputDirectoryButtonClicked() { QString currentPath = ui->outputDirectoryLineEdit->text(); diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index c0b13e0b3..a3a619f51 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -106,7 +106,6 @@ private slots: void diurnalCheckBoxClicked(); void stabilityCheckBoxClicked(); void treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column); - void useWeatherModelInitClicked(); void solveButtonClicked(); void outputDirectoryButtonClicked(); void numberOfProcessorsSolveButtonClicked(); diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index 6d45c7192..4d2e8c51c 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -53,6 +53,7 @@ class PointInitializationInput : public QObject public: PointInitializationInput(Ui::MainWindow* ui, QObject* parent = nullptr); QVector getStationFiles(); + void setupTreeView(); signals: @@ -71,7 +72,6 @@ private slots: void folderExpanded(const QModelIndex &index); void folderCollapsed(const QModelIndex &index); void weatherStationDataTimestepsSpinBoxValueChanged(int value); - void setupTreeView(); private: Ui::MainWindow *ui; diff --git a/src/gui/weathermodelinput.cpp b/src/gui/weathermodelinput.cpp index bc303fd00..b1613b9aa 100644 --- a/src/gui/weathermodelinput.cpp +++ b/src/gui/weathermodelinput.cpp @@ -33,5 +33,74 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) : QObject(parent), ui(ui) { + connect(ui->weatherModelDataDownloadButton, &QPushButton::clicked, this, &WeatherModelInput::weatherModelDataDownloadButtonClicked); +} + +void WeatherModelInput::weatherModelDataDownloadButtonClicked() +{ + const char*wx_model_type = "NOMADS-HRRR-CONUS-3-KM"; + QString DEMFile = ui->elevationInputFileLineEdit->property("fullpath").toString(); + int nHours = ui->weatherModelDataSpinBox->value(); + NinjaArmyH *ninjaArmy = nullptr; + char ** options = nullptr; + NinjaErr err = NinjaFetchForecast(ninjaArmy, wx_model_type, nHours, DEMFile.toUtf8().constData(), options); + if(err != NINJA_SUCCESS) + { + qDebug() << "NinjaFetchForecast: err =" << err; + } + + setUpTreeView(); +} + +void WeatherModelInput::setUpTreeView() +{ + weatherModelFileSystemModel = new QFileSystemModel(this); + QString path = ui->elevationInputFileLineEdit->property("fullpath").toString(); + QFileInfo fileInfo(path); + + weatherModelFileSystemModel->setRootPath(fileInfo.absolutePath()); + weatherModelFileSystemModel->setNameFilters({"*.zip", "NOMADS-*", "20*"}); + weatherModelFileSystemModel->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); + weatherModelFileSystemModel->setNameFilterDisables(false); + + ui->weatherModelDataTreeView->setModel(weatherModelFileSystemModel); + ui->weatherModelDataTreeView->setRootIndex(weatherModelFileSystemModel->index(fileInfo.absolutePath())); + ui->weatherModelDataTreeView->setSelectionMode(QAbstractItemView::MultiSelection); + ui->weatherModelDataTreeView->setSelectionBehavior(QAbstractItemView::SelectRows); + ui->weatherModelDataTreeView->setAnimated(true); + ui->weatherModelDataTreeView->setUniformRowHeights(true); + + QHeaderView *header = ui->weatherModelDataTreeView->header(); + header->setStretchLastSection(false); + header->setSectionResizeMode(0, QHeaderView::Stretch); + header->resizeSection(0, 400); + header->setSectionResizeMode(3, QHeaderView::ResizeToContents); + header->setSectionResizeMode(1, QHeaderView::ResizeToContents); + + ui->weatherModelDataTreeView->hideColumn(1); + ui->weatherModelDataTreeView->hideColumn(2); + connect(ui->weatherModelDataTreeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &WeatherModelInput::weatherModelDataTreeViewItemSelectionChanged); } + +void WeatherModelInput::weatherModelDataTreeViewItemSelectionChanged() +{ + +} + +void WeatherModelInput::weatherModelGroupBoxToggled(bool checked) +{ + AppState& state = AppState::instance(); + state.isWeatherModelInitializationToggled = checked; + + if (state.isWeatherModelInitializationToggled) + { + ui->domainAverageGroupBox->setChecked(false); + ui->pointInitializationGroupBox->setChecked(false); + state.isDomainAverageInitializationToggled = ui->domainAverageGroupBox->isChecked(); + state.isPointInitializationToggled = ui->pointInitializationGroupBox->isChecked(); + } + + emit requestRefresh(); +} + diff --git a/src/gui/weathermodelinput.h b/src/gui/weathermodelinput.h index a86054c44..4f53e8366 100644 --- a/src/gui/weathermodelinput.h +++ b/src/gui/weathermodelinput.h @@ -31,6 +31,9 @@ #define WEATHERMODELINPUT_H #include "ui_mainwindow.h" +#include "../ninja/windninja.h" +#include "appstate.h" +#include "QFileSystemModel" #include namespace Ui { @@ -42,9 +45,20 @@ class WeatherModelInput : public QObject Q_OBJECT public: explicit WeatherModelInput(Ui::MainWindow* ui, QObject* parent = nullptr); + void setUpTreeView(); + +signals: + void requestRefresh(); + +private slots: + void weatherModelDataDownloadButtonClicked(); + void weatherModelDataTreeViewItemSelectionChanged(); + void weatherModelGroupBoxToggled(bool checked); private: - Ui::MainWindow *ui; + Ui::MainWindow *ui; + QFileSystemModel *weatherModelFileSystemModel; + }; diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 072b7721f..9b5151ce8 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -344,10 +344,21 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMBBox(NinjaArmyH * army, double *bounds * \return Forecast file name on success, "exception" otherwise. */ -WINDNINJADLL_EXPORT const char* NinjaFetchForecast(NinjaArmyH * army, const char*wx_model_type, unsigned int numNinjas, const char * elevation_file, char ** papszOptions) +WINDNINJADLL_EXPORT NinjaErr NinjaFetchForecast(NinjaArmyH * army, const char* wxModelType, unsigned int nHours, const char * elevationFile, char ** options) { - return reinterpret_cast( army )->fetchForecast(wx_model_type, numNinjas, elevation_file); - + wxModelInitialization *model; + try + { + model = wxModelInitializationFactory::makeWxInitializationFromId(wxModelType); + model->fetchForecast(elevationFile, nHours); + return NINJA_SUCCESS; + } + catch(armyException &e) + { + return NINJA_E_INVALID; + } + + //return reinterpret_cast( army )->fetchForecast(wx_model_type, numNinjas, elevation_file); } /** diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 156421823..f715433f7 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -106,8 +106,8 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMBBox (NinjaArmyH * ninjaArmy, double * boundsBox, const char * fileName, double resolution, char * fetchType, char ** options ); - WINDNINJADLL_EXPORT const char * NinjaFetchForecast - (NinjaArmyH * ninjaArmy, const char * wx_model_type, unsigned int numNinjas, const char * elevation_file, char ** options ); + WINDNINJADLL_EXPORT NinjaErr NinjaFetchForecast + (NinjaArmyH * ninjaArmy, const char * wx_model_type, unsigned int nHours, const char * elevation_file, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaDestroyArmy ( NinjaArmyH * ninjaArmy, char ** options ); From 49a9cb324cd1f347ec1b4e4d64cc151d71047cbf Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 8 Sep 2025 14:47:59 -0600 Subject: [PATCH 234/435] Fixed small errors with initial weather model work, for #637 --- src/gui/mainwindow.ui | 19 ++++++++++++------- src/gui/pointinitializationinput.h | 1 - src/gui/weathermodelinput.cpp | 4 ++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 0476bf2b4..8342136fc 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -464,7 +464,7 @@ QFrame::Shadow::Sunken - 10 + 11 @@ -750,8 +750,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 578 - 521 + 538 + 419 @@ -1316,7 +1316,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 572 + 346 661 @@ -2199,6 +2199,11 @@ li.checked::marker { content: "\2612"; } PointingHandCursor + + + NOMADS-HRRR-CONUS-3-KM + + @@ -2610,8 +2615,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 578 - 588 + 414 + 408 @@ -3316,7 +3321,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 578 + 381 318 diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index 67fa5e232..5949c8a9c 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -53,7 +53,6 @@ class PointInitializationInput : public QObject public: PointInitializationInput(Ui::MainWindow* ui, QObject* parent = nullptr); QVector getStationFiles(); - void setupTreeView(); signals: diff --git a/src/gui/weathermodelinput.cpp b/src/gui/weathermodelinput.cpp index b1613b9aa..388d6ff3e 100644 --- a/src/gui/weathermodelinput.cpp +++ b/src/gui/weathermodelinput.cpp @@ -38,12 +38,12 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) void WeatherModelInput::weatherModelDataDownloadButtonClicked() { - const char*wx_model_type = "NOMADS-HRRR-CONUS-3-KM"; + QString wxModelType = ui->weatherModelDataComboBox->currentText(); QString DEMFile = ui->elevationInputFileLineEdit->property("fullpath").toString(); int nHours = ui->weatherModelDataSpinBox->value(); NinjaArmyH *ninjaArmy = nullptr; char ** options = nullptr; - NinjaErr err = NinjaFetchForecast(ninjaArmy, wx_model_type, nHours, DEMFile.toUtf8().constData(), options); + NinjaErr err = NinjaFetchForecast(ninjaArmy, wxModelType.toUtf8().constData(), nHours, DEMFile.toUtf8().constData(), options); if(err != NINJA_SUCCESS) { qDebug() << "NinjaFetchForecast: err =" << err; From 66395cc18de3a5bff94f8ae6fe6ada38c9beb740 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 9 Sep 2025 12:48:34 -0600 Subject: [PATCH 235/435] dropping the "../ninja" from "#include" statements from the newer files, to wrap up pull request 79f16b6ba1b5270e4d4ab530be20ef011a10e0cd, as part of the old commit badc48dfe96953309e7578998e3d748c6dd924d3. --- src/gui/pointinitializationinput.h | 4 ++-- src/gui/weathermodelinput.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index 5949c8a9c..ff146c7fb 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -31,9 +31,9 @@ #define POINTINITIALIZATIONINPUT_H #include "appstate.h" -#include "../ninja/windninja.h" +#include "windninja.h" +#include "gdal_util.h" #include "ui_mainwindow.h" -#include "../ninja/gdal_util.h" #include #include #include diff --git a/src/gui/weathermodelinput.h b/src/gui/weathermodelinput.h index 4f53e8366..322ef178a 100644 --- a/src/gui/weathermodelinput.h +++ b/src/gui/weathermodelinput.h @@ -31,7 +31,7 @@ #define WEATHERMODELINPUT_H #include "ui_mainwindow.h" -#include "../ninja/windninja.h" +#include "windninja.h" #include "appstate.h" #include "QFileSystemModel" #include From 0100a2cf4b0ab8eec8b99388bff2c89f645bf9be Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 9 Sep 2025 15:03:43 -0600 Subject: [PATCH 236/435] 1st attempt at adding the progress bar, for issue #654 it technically works, but there's some weird final extra flush-like emit that is occurring after the process is done, leading to the final message and close being replaced with another message --- src/gui/mainwindow.cpp | 149 ++++++++++++++++++++++++++++++++++++++++- src/gui/mainwindow.h | 9 +++ src/gui/surfaceinput.h | 1 - 3 files changed, 155 insertions(+), 4 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index ffe30271a..282e9a604 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -320,6 +320,57 @@ void MainWindow::writeToConsole(QString message, QColor color) lineNumber++; } +void MainWindow::updateProgress(const QString message) +{ + progressDialog->setLabelText(message); +} + +void MainWindow::updateProgress(int run, int progress) +{ + // update the stored progress value for the current run + if( runProgress[run] > progress ) + { + // if the stored progress is bigger than what we are seeing in the currently emitted progress + // ignore it. This happens for pointInitialization, when the match points is iterating, + // sometimes its next solution is worse and then it would make the progress bar go backwards + // by ignoring it, the progress bar just stays where it is + runProgress[run] = runProgress[run]; + } + else + { + // otherwise, store the progress for the current run + runProgress[run] = progress; + } + + // update the total progress value + // calculate the total progress from scratch each time, summing up the progress from each run + totalProgress = 0; // Initialize the progress bar each time + for(unsigned int i = 0; i < runProgress.size(); i++) + { + totalProgress = totalProgress + runProgress[i]; + } + + // update the progress bar + progressDialog->setValue(totalProgress); +} + +void MainWindow::cancelSolve() +{ + progressDialog->setLabelText("Canceling..."); +// progressDialog->setAutoClose(true); // doesn't seem to matter where this gets placed, within this function, or outside this function, it doesn't seem to be helping. hrm. +// QCoreApplication::processEvents(); // doesn't seem to matter where this gets placed, within this function, or outside this function, it doesn't seem to be helping. hrm. + + char **papszOptions = nullptr; + int err = NinjaCancel(ninjaArmy, papszOptions); + if( err != NINJA_SUCCESS ) + { + qDebug() << "NinjaCancel: err =" << err; + } + +// QCoreApplication::processEvents(); +// progressDialog->setAutoClose(true); +} + MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) @@ -453,7 +504,8 @@ void MainWindow::connectSignals() connect(ui->outputDirectoryButton, &QPushButton::clicked, this, &MainWindow::outputDirectoryButtonClicked); connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); - connect(menuBar, &MenuBar::writeToConsole, this, &MainWindow::writeToConsole); // connect(menuBar, SIGNAL( writeToConsole(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) )); // other way to do it + connect(menuBar, &MenuBar::writeToConsole, this, &MainWindow::writeToConsole); +// connect(menuBar, SIGNAL( writeToConsole(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) )); // other way to do it connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); connect(surfaceInput, &SurfaceInput::requestRefresh, this, &MainWindow::refreshUI); connect(surfaceInput, &SurfaceInput::setupTreeView, pointInitializationInput, &PointInitializationInput::setupTreeView); @@ -565,7 +617,8 @@ void MainWindow::solveButtonClicked() AppState& state = AppState::instance(); int numNinjas = 0; - NinjaArmyH *ninjaArmy = nullptr; +// NinjaArmyH *ninjaArmy = nullptr; + ninjaArmy = nullptr; char **papszOptions = nullptr; const char *initializationMethod = nullptr; @@ -725,15 +778,86 @@ void MainWindow::solveButtonClicked() } writeToConsole(QString::number( numNinjas ) + " runs initialized. Starting solver..."); + //progressDialog = new QProgressDialog("Solving...", "Cancel", 0, numNinjas*100, ui->centralwidget); + progressDialog = new QProgressDialog(this); + progressDialog->setWindowModality(Qt::WindowModal); +// progressDialog->setCancelButton(nullptr); + progressDialog->setMinimumDuration(0); +// progressDialog->setMinimumDuration(1); + progressDialog->setAutoClose(false); +// progressDialog->setAutoReset(false); + + progressDialog->setRange(0, numNinjas*100); + progressDialog->setValue(0); + progressDialog->setLabelText("Solving..."); + + progressDialog->setCancelButtonText("Cancel"); + connect( progressDialog, SIGNAL( canceled() ), this, SLOT( cancelSolve() ) ); + + // initialize the progress values for the current set of runs + totalProgress = 0; + for(unsigned int i = 0; i < numNinjas; i++) + { + runProgress.push_back(0); + } + + progressDialog->show(); + prepareArmy(ninjaArmy, numNinjas, initializationMethod); + // set progress dialog initial value and initial text for the set of runs + progressDialog->setValue(0); + progressDialog->setLabelText("Running..."); + writeToConsole( "Initializing runs..." ); int err = NinjaStartRuns(ninjaArmy, ui->numberOfProcessorsSpinBox->value(), papszOptions); if(err != 1) //NinjaStartRuns returns 1 on success { - printf("NinjaStartRuns: err = %d\n", err); + if( err == NINJA_E_CANCELLED ) + { +// progressDialog->cancel(); // sometimes delays it enough to cause it to seem to truly cancel, but it really doesn't, heck this signal was already emitted up to this point anyways + disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); // moving this to after the ninjaArmy destructor does its final extra flush-like emit, seems to neither hurt nor help. chatgpt seems to think we shouldn't even be doing disconnect() in the first place. // have to have this uncommented out somewhere in here, or the code seg faults + progressDialog->setAutoClose(true); // leaving this here or not in this spot, or in cancelSolve(), doesn't seem to be having much effect + + runProgress.clear(); // trying to move this to after the destructor, when it is no longer needed, doesn't seem to hurt or help. But shouldn't this be after the disconnect, since signals still seem to be getting emitted till at least after the disconnect()? Hrm. + + // calls delete on the solve class instance inner parts, normally done outside of canceled(), + // but because doing a return here to try to skip the final message, need to do it now + err = NinjaDestroyArmy(ninjaArmy, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaDestroyRuns: err = %d\n", err); + } + +// runProgress.clear(); +// +//// progressDialog->cancel(); +// disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); +// progressDialog->setAutoClose(true); + + // why is there another message and info from the threads that occurs after this one most if not at least half the time? Somehow the threads are still finishing up, or the ninjaArmy destructor is behaving as a late extra final flush-like emit and overwrites this result with a new one that is actually an old one immediately after. So annoying. + writeToConsole( "Simulation cancelled by user" ); + qDebug() << "Simulation cancelled by user"; + return; + } + else + { + printf("NinjaStartRuns: err = %d\n", err); + } } + // moving this to after the ninjaArmy destructor does its final flush-like emit, seems to neither hurt nor help. + // chatgpt seems to think we shouldn't even be doing disconnect() in the first place, but have to have this uncommented out somewhere in here, or the code seg faults + disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); + + // why does this sometimes not become the final message and info? Somehow the threads are still finishing up, or the ninjaArmy destructor is behaving as a late extra final flush-like emit and overwrites this result with a new one that is actually an old one immediately after. So annoying. + int maxProgress = numNinjas*100; + progressDialog->setValue(maxProgress); + progressDialog->setLabelText("Simulations finished"); + progressDialog->setCancelButtonText("Close"); // is this really wise? "close" now runs "cancelSolve" again! So maybe the disconnect SHOULD occur before this step. Hrm. + // clear the progress values for the next set of runs + runProgress.clear(); // is this wise to do before the ninjaArmy destructor, if it has that final extra flush-like emit still using this information? + err = NinjaDestroyArmy(ninjaArmy, papszOptions); if(err != NINJA_SUCCESS) { @@ -741,6 +865,9 @@ void MainWindow::solveButtonClicked() } writeToConsole("Finished with simulations", Qt::darkGreen); +// disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); +// runProgress.clear(); + // vector outputFiles; // QDir outDir(ui->outputDirectoryLineEdit->text()); // QString demName = QFileInfo(ui->elevationInputFileLineEdit->text()).baseName(); @@ -963,6 +1090,22 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::writeToConsole ); // more exact way of doing it connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ) ); // other way of doing it + //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::updateProgress ); + connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgress( QString ) ) ); + + //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::updateProgress ); + connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgress( int, int ) ) ); + +// // old code style method (see this in the old qt4 gui code) +// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ), Qt::AutoConnection ); +// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgress( QString ) ), Qt::AutoConnection ); +// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgress( int, int ) ), Qt::AutoConnection ); + +// // new code style method, chatgpt seems to prefer this one, though the AutoConnection seems to have slightly better results, well maybe +// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ), Qt::QueuedConnection ); +// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgress( QString ) ), Qt::QueuedConnection ); +// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgress( int, int ) ), Qt::QueuedConnection ); + err = NinjaSetNumberCPUs(ninjaArmy, i, ui->numberOfProcessorsSpinBox->value(), papszOptions); if(err != NINJA_SUCCESS) { diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index fceaf6721..92be1fb69 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -121,6 +121,9 @@ private slots: void geospatialPDFFilesMeshResolutionGroupBoxToggled(bool checked); void refreshUI(); void writeToConsole(QString message, QColor color = Qt::white); + void updateProgress(int run, int progress); + void updateProgress(const QString message); + void cancelSolve(); private: Ui::MainWindow *ui; @@ -133,6 +136,12 @@ private slots: DomainAverageInput *domainAverageInput; WeatherModelInput *weatherModelInput; PointInitializationInput *pointInitializationInput; + + QProgressDialog *progressDialog; + int totalProgress; + std::vector runProgress; + NinjaArmyH *ninjaArmy; + QString currentDEMFilePath; void connectSignals(); diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index 5f05956da..a4a3bfcdb 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -41,7 +41,6 @@ #include #include #include -#include #include #include #include From 9a0caa3f43098bf9f4d2cce803733fe810fb2c51 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 9 Sep 2025 15:07:23 -0600 Subject: [PATCH 237/435] 1st attempt at adding the progress bar, other form. For issue #654 --- src/gui/mainwindow.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 282e9a604..47c7751c4 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -815,11 +815,11 @@ void MainWindow::solveButtonClicked() { if( err == NINJA_E_CANCELLED ) { -// progressDialog->cancel(); // sometimes delays it enough to cause it to seem to truly cancel, but it really doesn't, heck this signal was already emitted up to this point anyways - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); // moving this to after the ninjaArmy destructor does its final extra flush-like emit, seems to neither hurt nor help. chatgpt seems to think we shouldn't even be doing disconnect() in the first place. // have to have this uncommented out somewhere in here, or the code seg faults - progressDialog->setAutoClose(true); // leaving this here or not in this spot, or in cancelSolve(), doesn't seem to be having much effect +//// progressDialog->cancel(); // sometimes delays it enough to cause it to seem to truly cancel, but it really doesn't, heck this signal was already emitted up to this point anyways +// disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); // moving this to after the ninjaArmy destructor does its final extra flush-like emit, seems to neither hurt nor help. chatgpt seems to think we shouldn't even be doing disconnect() in the first place. // have to have this uncommented out somewhere in here, or the code seg faults +// progressDialog->setAutoClose(true); // leaving this here or not in this spot, or in cancelSolve(), doesn't seem to be having much effect - runProgress.clear(); // trying to move this to after the destructor, when it is no longer needed, doesn't seem to hurt or help. But shouldn't this be after the disconnect, since signals still seem to be getting emitted till at least after the disconnect()? Hrm. +// runProgress.clear(); // trying to move this to after the destructor, when it is no longer needed, doesn't seem to hurt or help. But shouldn't this be after the disconnect, since signals still seem to be getting emitted till at least after the disconnect()? Hrm. // calls delete on the solve class instance inner parts, normally done outside of canceled(), // but because doing a return here to try to skip the final message, need to do it now @@ -829,11 +829,11 @@ void MainWindow::solveButtonClicked() printf("NinjaDestroyRuns: err = %d\n", err); } -// runProgress.clear(); -// -//// progressDialog->cancel(); -// disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); -// progressDialog->setAutoClose(true); + runProgress.clear(); + +// progressDialog->cancel(); + disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); + progressDialog->setAutoClose(true); // why is there another message and info from the threads that occurs after this one most if not at least half the time? Somehow the threads are still finishing up, or the ninjaArmy destructor is behaving as a late extra final flush-like emit and overwrites this result with a new one that is actually an old one immediately after. So annoying. writeToConsole( "Simulation cancelled by user" ); @@ -848,7 +848,7 @@ void MainWindow::solveButtonClicked() // moving this to after the ninjaArmy destructor does its final flush-like emit, seems to neither hurt nor help. // chatgpt seems to think we shouldn't even be doing disconnect() in the first place, but have to have this uncommented out somewhere in here, or the code seg faults - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); +// disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); // why does this sometimes not become the final message and info? Somehow the threads are still finishing up, or the ninjaArmy destructor is behaving as a late extra final flush-like emit and overwrites this result with a new one that is actually an old one immediately after. So annoying. int maxProgress = numNinjas*100; @@ -856,7 +856,7 @@ void MainWindow::solveButtonClicked() progressDialog->setLabelText("Simulations finished"); progressDialog->setCancelButtonText("Close"); // is this really wise? "close" now runs "cancelSolve" again! So maybe the disconnect SHOULD occur before this step. Hrm. // clear the progress values for the next set of runs - runProgress.clear(); // is this wise to do before the ninjaArmy destructor, if it has that final extra flush-like emit still using this information? +// runProgress.clear(); // is this wise to do before the ninjaArmy destructor, if it has that final extra flush-like emit still using this information? err = NinjaDestroyArmy(ninjaArmy, papszOptions); if(err != NINJA_SUCCESS) @@ -865,8 +865,8 @@ void MainWindow::solveButtonClicked() } writeToConsole("Finished with simulations", Qt::darkGreen); -// disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); -// runProgress.clear(); + disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); + runProgress.clear(); // vector outputFiles; // QDir outDir(ui->outputDirectoryLineEdit->text()); From f1d41f138e4f38ca2c4b6a458696b2051d166edf Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 9 Sep 2025 16:06:20 -0600 Subject: [PATCH 238/435] 2nd attempt at adding the progress bar, for issue #654 I managed to accidentally get rid of the weird final extra flush-like emit signals, that were leading to the final message and close being replaced with another message. But, I am still unsure whether the method is behaving as a code guard, ignoring the still emitted problem signals, or, if the method is indirectly forcing the event loop to FINALLY properly wrap up the signals BEFORE the next set. It's really hard to tell, it's possible the problem comes back when scaling up to more threads. Regardless, the method is working. The specific ordering of the code was VERY important. For a canceling solve(), needed to destroy the ninjaArmy first to try to force the emitted signals to wrap up before doing anything else. For both a canceling solve() and a regularly finishing solve(), the next step is to clean up the QMessageBox, by first running disconnect() of cancelSolve() to convert the "cancel" button into a "close" button, avoiding cancelSolve() being activated again when clicking the "close" button, then second updating the final QMessageBox text, message, and values. Then, because all these uses of the stored runProgress are finally wrapped up, the stored progress for each run is finally cleared, and the rest of the code can finally continue. --- src/gui/mainwindow.cpp | 70 +++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 47c7751c4..6f5e07de5 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -357,8 +357,6 @@ void MainWindow::updateProgress(int run, int progress) void MainWindow::cancelSolve() { progressDialog->setLabelText("Canceling..."); -// progressDialog->setAutoClose(true); // doesn't seem to matter where this gets placed, within this function, or outside this function, it doesn't seem to be helping. hrm. -// QCoreApplication::processEvents(); // doesn't seem to matter where this gets placed, within this function, or outside this function, it doesn't seem to be helping. hrm. char **papszOptions = nullptr; int err = NinjaCancel(ninjaArmy, papszOptions); @@ -366,9 +364,6 @@ void MainWindow::cancelSolve() { qDebug() << "NinjaCancel: err =" << err; } - -// QCoreApplication::processEvents(); -// progressDialog->setAutoClose(true); } MainWindow::MainWindow(QWidget *parent) @@ -617,7 +612,6 @@ void MainWindow::solveButtonClicked() AppState& state = AppState::instance(); int numNinjas = 0; -// NinjaArmyH *ninjaArmy = nullptr; ninjaArmy = nullptr; char **papszOptions = nullptr; const char *initializationMethod = nullptr; @@ -778,19 +772,13 @@ void MainWindow::solveButtonClicked() } writeToConsole(QString::number( numNinjas ) + " runs initialized. Starting solver..."); - //progressDialog = new QProgressDialog("Solving...", "Cancel", 0, numNinjas*100, ui->centralwidget); - progressDialog = new QProgressDialog(this); + int maxProgress = numNinjas*100; + progressDialog = new QProgressDialog("Solving...", "Cancel", 0, maxProgress, ui->centralwidget); progressDialog->setWindowModality(Qt::WindowModal); -// progressDialog->setCancelButton(nullptr); progressDialog->setMinimumDuration(0); -// progressDialog->setMinimumDuration(1); progressDialog->setAutoClose(false); // progressDialog->setAutoReset(false); - progressDialog->setRange(0, numNinjas*100); - progressDialog->setValue(0); - progressDialog->setLabelText("Solving..."); - progressDialog->setCancelButtonText("Cancel"); connect( progressDialog, SIGNAL( canceled() ), this, SLOT( cancelSolve() ) ); @@ -815,12 +803,6 @@ void MainWindow::solveButtonClicked() { if( err == NINJA_E_CANCELLED ) { -//// progressDialog->cancel(); // sometimes delays it enough to cause it to seem to truly cancel, but it really doesn't, heck this signal was already emitted up to this point anyways -// disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); // moving this to after the ninjaArmy destructor does its final extra flush-like emit, seems to neither hurt nor help. chatgpt seems to think we shouldn't even be doing disconnect() in the first place. // have to have this uncommented out somewhere in here, or the code seg faults -// progressDialog->setAutoClose(true); // leaving this here or not in this spot, or in cancelSolve(), doesn't seem to be having much effect - -// runProgress.clear(); // trying to move this to after the destructor, when it is no longer needed, doesn't seem to hurt or help. But shouldn't this be after the disconnect, since signals still seem to be getting emitted till at least after the disconnect()? Hrm. - // calls delete on the solve class instance inner parts, normally done outside of canceled(), // but because doing a return here to try to skip the final message, need to do it now err = NinjaDestroyArmy(ninjaArmy, papszOptions); @@ -829,13 +811,26 @@ void MainWindow::solveButtonClicked() printf("NinjaDestroyRuns: err = %d\n", err); } - runProgress.clear(); - -// progressDialog->cancel(); + // aparently this disconnect() followed by a final message box, is potentially acting as a code guard + // the final extra flush-like emitted signal is still being emitted, but it is being ignored, + // or, it somehow indirectly forced a better event handling order, causing the leftover emitted signals + // to FINALLY wrap up at the appropriate time BEFORE the next set of code is called. + // it is hard to tell which it is, the method might break down for increasing numbers of threads. + // commenting out the disconnect() statements causes seg faults, implying that they are VITAL + // to dealing with these extra emitted signals, but it is hard to determine the exact reason they are fixing the problem + // + // normally it is not desired to use a disconnect() call to flush the last few unrelated signals, + // the disconnect() call is supposed to be for making the "cancel" button become a "close" button, + // but because disconnect() needs called for the cancelSolve() button anyways, using it to suppress/flush out + // all those final extra flush-like emitted signals happens to be super helpful I guess. disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - progressDialog->setAutoClose(true); + progressDialog->setValue(maxProgress); + progressDialog->setLabelText("Simulation cancelled"); + progressDialog->setCancelButtonText("Close"); + //progressDialog->close(); + + runProgress.clear(); - // why is there another message and info from the threads that occurs after this one most if not at least half the time? Somehow the threads are still finishing up, or the ninjaArmy destructor is behaving as a late extra final flush-like emit and overwrites this result with a new one that is actually an old one immediately after. So annoying. writeToConsole( "Simulation cancelled by user" ); qDebug() << "Simulation cancelled by user"; return; @@ -846,17 +841,22 @@ void MainWindow::solveButtonClicked() } } - // moving this to after the ninjaArmy destructor does its final flush-like emit, seems to neither hurt nor help. - // chatgpt seems to think we shouldn't even be doing disconnect() in the first place, but have to have this uncommented out somewhere in here, or the code seg faults -// disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - - // why does this sometimes not become the final message and info? Somehow the threads are still finishing up, or the ninjaArmy destructor is behaving as a late extra final flush-like emit and overwrites this result with a new one that is actually an old one immediately after. So annoying. - int maxProgress = numNinjas*100; + // aparently this disconnect() followed by a final message box, is potentially acting as a code guard + // the final extra flush-like emitted signal is still being emitted, but it is being ignored, + // or, it somehow indirectly forced a better event handling order, causing the leftover emitted signals + // to FINALLY wrap up at the appropriate time BEFORE the next set of code is called. + // it is hard to tell which it is, the method might break down for increasing numbers of threads. + // commenting out the disconnect() statements causes seg faults, implying that they are VITAL + // to dealing with these extra emitted signals, but it is hard to determine the exact reason they are fixing the problem + // + // normally it is not desired to use a disconnect() call to flush the last few unrelated signals, + // the disconnect() call is supposed to be for making the "cancel" button become a "close" button, + // but because disconnect() needs called for the cancelSolve() button anyways, using it to suppress/flush out + // all those final extra flush-like emitted signals happens to be super helpful I guess. + disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); progressDialog->setValue(maxProgress); progressDialog->setLabelText("Simulations finished"); - progressDialog->setCancelButtonText("Close"); // is this really wise? "close" now runs "cancelSolve" again! So maybe the disconnect SHOULD occur before this step. Hrm. - // clear the progress values for the next set of runs -// runProgress.clear(); // is this wise to do before the ninjaArmy destructor, if it has that final extra flush-like emit still using this information? + progressDialog->setCancelButtonText("Close"); err = NinjaDestroyArmy(ninjaArmy, papszOptions); if(err != NINJA_SUCCESS) @@ -865,7 +865,7 @@ void MainWindow::solveButtonClicked() } writeToConsole("Finished with simulations", Qt::darkGreen); - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); + // clear the progress values for the next set of runs runProgress.clear(); // vector outputFiles; From 096771f4b905e65eedbe6f64a3bc0ae401cb1d20 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 9 Sep 2025 16:14:13 -0600 Subject: [PATCH 239/435] finally figured out how to get the progress bar 100% to properly display as 100%, as a full bar with 100% instead of as an empty bar with no number, including for the final set of messages and for the cancelled solve message. For issue #654 turned out to be as simple as "progressDialog->setAutoReset(false);". Apparently upon reaching 100%, the progress bar would restart/reset, where the restart value is pre- 0%, leading to an empty white bar with no % finished message. This forces the progress bar to stay at the final value instead of resetting the progress bar. --- src/gui/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 6f5e07de5..7f55c81c1 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -777,7 +777,7 @@ void MainWindow::solveButtonClicked() progressDialog->setWindowModality(Qt::WindowModal); progressDialog->setMinimumDuration(0); progressDialog->setAutoClose(false); -// progressDialog->setAutoReset(false); + progressDialog->setAutoReset(false); progressDialog->setCancelButtonText("Cancel"); connect( progressDialog, SIGNAL( canceled() ), this, SLOT( cancelSolve() ) ); From 5e73e5cd7c512f8ba2db4f701c5583d990b14a6f Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 15 Sep 2025 12:47:50 -0600 Subject: [PATCH 240/435] 1st attempt at using QFutureWatcher for the progress bar, instead of direct calls. For issue #654 Also 1st time successfully propagating an error through the C-API to the qt6 gui. --- src/gui/mainwindow.cpp | 92 ++++++++++++++++++++--------------------- src/gui/mainwindow.h | 2 + src/ninja/ninja.cpp | 4 +- src/ninja/windninja.cpp | 9 +++- 4 files changed, 57 insertions(+), 50 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 7f55c81c1..e3f301065 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -789,6 +789,8 @@ void MainWindow::solveButtonClicked() runProgress.push_back(0); } + futureWatcher = new QFutureWatcher(this); + progressDialog->show(); prepareArmy(ninjaArmy, numNinjas, initializationMethod); @@ -798,31 +800,18 @@ void MainWindow::solveButtonClicked() progressDialog->setLabelText("Running..."); writeToConsole( "Initializing runs..." ); - int err = NinjaStartRuns(ninjaArmy, ui->numberOfProcessorsSpinBox->value(), papszOptions); - if(err != 1) //NinjaStartRuns returns 1 on success - { - if( err == NINJA_E_CANCELLED ) + + + connect(futureWatcher, &QFutureWatcher::finished, [=]() { + int err; + if (futureWatcher->isCanceled()) { - // calls delete on the solve class instance inner parts, normally done outside of canceled(), - // but because doing a return here to try to skip the final message, need to do it now err = NinjaDestroyArmy(ninjaArmy, papszOptions); if(err != NINJA_SUCCESS) { printf("NinjaDestroyRuns: err = %d\n", err); } - // aparently this disconnect() followed by a final message box, is potentially acting as a code guard - // the final extra flush-like emitted signal is still being emitted, but it is being ignored, - // or, it somehow indirectly forced a better event handling order, causing the leftover emitted signals - // to FINALLY wrap up at the appropriate time BEFORE the next set of code is called. - // it is hard to tell which it is, the method might break down for increasing numbers of threads. - // commenting out the disconnect() statements causes seg faults, implying that they are VITAL - // to dealing with these extra emitted signals, but it is hard to determine the exact reason they are fixing the problem - // - // normally it is not desired to use a disconnect() call to flush the last few unrelated signals, - // the disconnect() call is supposed to be for making the "cancel" button become a "close" button, - // but because disconnect() needs called for the cancelSolve() button anyways, using it to suppress/flush out - // all those final extra flush-like emitted signals happens to be super helpful I guess. disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); progressDialog->setValue(maxProgress); progressDialog->setLabelText("Simulation cancelled"); @@ -833,40 +822,47 @@ void MainWindow::solveButtonClicked() writeToConsole( "Simulation cancelled by user" ); qDebug() << "Simulation cancelled by user"; - return; } else { - printf("NinjaStartRuns: err = %d\n", err); - } - } + disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); + progressDialog->setValue(maxProgress); + progressDialog->setLabelText("Simulations finished"); + progressDialog->setCancelButtonText("Close"); - // aparently this disconnect() followed by a final message box, is potentially acting as a code guard - // the final extra flush-like emitted signal is still being emitted, but it is being ignored, - // or, it somehow indirectly forced a better event handling order, causing the leftover emitted signals - // to FINALLY wrap up at the appropriate time BEFORE the next set of code is called. - // it is hard to tell which it is, the method might break down for increasing numbers of threads. - // commenting out the disconnect() statements causes seg faults, implying that they are VITAL - // to dealing with these extra emitted signals, but it is hard to determine the exact reason they are fixing the problem - // - // normally it is not desired to use a disconnect() call to flush the last few unrelated signals, - // the disconnect() call is supposed to be for making the "cancel" button become a "close" button, - // but because disconnect() needs called for the cancelSolve() button anyways, using it to suppress/flush out - // all those final extra flush-like emitted signals happens to be super helpful I guess. - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - progressDialog->setValue(maxProgress); - progressDialog->setLabelText("Simulations finished"); - progressDialog->setCancelButtonText("Close"); - - err = NinjaDestroyArmy(ninjaArmy, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaDestroyRuns: err = %d\n", err); - } - writeToConsole("Finished with simulations", Qt::darkGreen); + err = NinjaDestroyArmy(ninjaArmy, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaDestroyRuns: err = %d\n", err); + } + writeToConsole("Finished with simulations", Qt::darkGreen); - // clear the progress values for the next set of runs - runProgress.clear(); + // clear the progress values for the next set of runs + runProgress.clear(); + } + }); + + QFuture future = QtConcurrent::run([=]() { + try { + int err = NinjaStartRuns(ninjaArmy, ui->numberOfProcessorsSpinBox->value(), papszOptions); + if(err != 1) //StartRuns returns 1 on success + { + if( err == NINJA_E_CANCELLED ) + { + writeToConsole( "Simulation cancelled by user" ); + qDebug() << "Simulation cancelled by user"; + } + else + { + printf("NinjaStartRuns: err = %d\n", err); + } + } + } catch (const std::exception &e) { // Store error message somewhere (thread-safe) + qWarning() << "Solver error:" << e.what(); + throw; // will propagate to the future + } + }); + futureWatcher->setFuture(future); // vector outputFiles; // QDir outDir(ui->outputDirectoryLineEdit->text()); @@ -1093,7 +1089,7 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::updateProgress ); connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgress( QString ) ) ); - //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::updateProgress ); + //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendProgress, this, &MainWindow::updateProgress ); connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgress( int, int ) ) ); // // old code style method (see this in the old qt4 gui code) diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 92be1fb69..4c0ac0a1e 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -42,6 +42,7 @@ //#include "ninjaCom.h" #include "windninja.h" #include +#include #include #include #include @@ -138,6 +139,7 @@ private slots: PointInitializationInput *pointInitializationInput; QProgressDialog *progressDialog; + QFutureWatcher *futureWatcher; int totalProgress; std::vector runProgress; NinjaArmyH *ninjaArmy; diff --git a/src/ninja/ninja.cpp b/src/ninja/ninja.cpp index d319f3616..1efa785be 100644 --- a/src/ninja/ninja.cpp +++ b/src/ninja/ninja.cpp @@ -261,7 +261,9 @@ bool ninja::simulate_wind() checkCancel(); input.Com->ninjaCom(ninjaComClass::ninjaNone, "Reading elevation file..."); - + +//throw std::runtime_error("I WANT CHOCOLATE!!! Yum."); + readInputFile(); set_position(); diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index e77c3e318..ac91e9731 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -519,9 +519,16 @@ WINDNINJADLL_EXPORT NinjaErr NinjaStartRuns { return reinterpret_cast( army )->startRuns( nprocessors ); } + catch (exception& e) + { + std::cout << "Exception caught: " << e.what() << endl; + throw; + } catch( ... ) { - return handleException(); + std::cout << "Exception caught: Cannot determine exception type." << endl; +// return handleException(); + throw; } } else From ffd9a8b1d8e9084735945aefe2d861beb2ad160c Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 15 Sep 2025 12:55:40 -0600 Subject: [PATCH 241/435] found the "more exact" way of doing ninjaCom connect() statements, was no longer working, since adding in the progress bar. It somehow stopped being able to disambiguate between mainWindow::updateProgress( QString ) and mainWindow::updateProgress( int, int ), stopped properly operator overloading. The method has been updated to tell the compiler exactly which updateProgress() function to use. for issue #654 --- src/gui/mainwindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index e3f301065..93f855da0 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -1086,10 +1086,10 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::writeToConsole ); // more exact way of doing it connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ) ); // other way of doing it - //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::updateProgress ); + //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, static_cast(&MainWindow::updateProgress) ); connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgress( QString ) ) ); - //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendProgress, this, &MainWindow::updateProgress ); + //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendProgress, this, static_cast(&MainWindow::updateProgress) ); connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgress( int, int ) ) ); // // old code style method (see this in the old qt4 gui code) From 4bb1c7d8e4f8a4040867aeed2eea28d71df5543c Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 15 Sep 2025 13:08:41 -0600 Subject: [PATCH 242/435] better disambiguation fix, for the mainWindow::updateProgress() functions, just rename them better. For issue #654 --- src/gui/mainwindow.cpp | 20 ++++++++++---------- src/gui/mainwindow.h | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 93f855da0..05ffb746d 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -320,12 +320,12 @@ void MainWindow::writeToConsole(QString message, QColor color) lineNumber++; } -void MainWindow::updateProgress(const QString message) +void MainWindow::updateProgressMessage(const QString message) { progressDialog->setLabelText(message); } -void MainWindow::updateProgress(int run, int progress) +void MainWindow::updateProgressValue(int run, int progress) { // update the stored progress value for the current run if( runProgress[run] > progress ) @@ -1086,21 +1086,21 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::writeToConsole ); // more exact way of doing it connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ) ); // other way of doing it - //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, static_cast(&MainWindow::updateProgress) ); - connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgress( QString ) ) ); + //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::updateProgressMessage ); + connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgressMessage( QString ) ) ); - //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendProgress, this, static_cast(&MainWindow::updateProgress) ); - connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgress( int, int ) ) ); + //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendProgress, this, &MainWindow::updateProgressValue ); + connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgressValue( int, int ) ) ); // // old code style method (see this in the old qt4 gui code) // connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ), Qt::AutoConnection ); -// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgress( QString ) ), Qt::AutoConnection ); -// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgress( int, int ) ), Qt::AutoConnection ); +// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgressMessage( QString ) ), Qt::AutoConnection ); +// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgressValue( int, int ) ), Qt::AutoConnection ); // // new code style method, chatgpt seems to prefer this one, though the AutoConnection seems to have slightly better results, well maybe // connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ), Qt::QueuedConnection ); -// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgress( QString ) ), Qt::QueuedConnection ); -// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgress( int, int ) ), Qt::QueuedConnection ); +// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgressMessage( QString ) ), Qt::QueuedConnection ); +// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgressValue( int, int ) ), Qt::QueuedConnection ); err = NinjaSetNumberCPUs(ninjaArmy, i, ui->numberOfProcessorsSpinBox->value(), papszOptions); if(err != NINJA_SUCCESS) diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 4c0ac0a1e..1f0e507b2 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -122,8 +122,8 @@ private slots: void geospatialPDFFilesMeshResolutionGroupBoxToggled(bool checked); void refreshUI(); void writeToConsole(QString message, QColor color = Qt::white); - void updateProgress(int run, int progress); - void updateProgress(const QString message); + void updateProgressValue(int run, int progress); + void updateProgressMessage(const QString message); void cancelSolve(); private: From 8176ce89de87f24dc61166e730d8844428292666 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 16 Sep 2025 14:26:23 -0600 Subject: [PATCH 243/435] cleanup of 1st QFutureWatcher for progress bar attempt, for issue #654 --- src/gui/mainwindow.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 05ffb746d..6f4cf2c0c 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -803,10 +803,10 @@ void MainWindow::solveButtonClicked() connect(futureWatcher, &QFutureWatcher::finished, [=]() { - int err; - if (futureWatcher->isCanceled()) + ////if( futureWatcher->isCanceled() ) // this doesn't get triggered as reliably as the QProgressDialog cancel button + if( progressDialog->wasCanceled() ) { - err = NinjaDestroyArmy(ninjaArmy, papszOptions); + int err = NinjaDestroyArmy(ninjaArmy, papszOptions); if(err != NINJA_SUCCESS) { printf("NinjaDestroyRuns: err = %d\n", err); @@ -820,8 +820,10 @@ void MainWindow::solveButtonClicked() runProgress.clear(); - writeToConsole( "Simulation cancelled by user" ); qDebug() << "Simulation cancelled by user"; + //writeToConsole( "Simulation cancelled by user", Qt::orange); // orange isn't a predefined QColor + //writeToConsole( "Simulation cancelled by user", Qt::QColor::fromRgb(255, 165, 0) ); // orange + writeToConsole( "Simulation cancelled by user", Qt::yellow); } else { @@ -830,11 +832,13 @@ void MainWindow::solveButtonClicked() progressDialog->setLabelText("Simulations finished"); progressDialog->setCancelButtonText("Close"); - err = NinjaDestroyArmy(ninjaArmy, papszOptions); + int err = NinjaDestroyArmy(ninjaArmy, papszOptions); if(err != NINJA_SUCCESS) { printf("NinjaDestroyRuns: err = %d\n", err); } + + qDebug() << "Finished with simulations"; writeToConsole("Finished with simulations", Qt::darkGreen); // clear the progress values for the next set of runs @@ -858,7 +862,13 @@ void MainWindow::solveButtonClicked() } } } catch (const std::exception &e) { // Store error message somewhere (thread-safe) + qWarning() << "Solver error:" << e.what(); + + progressDialog->setValue(maxProgress); + progressDialog->setLabelText("Simulation ended in error\n"+QString(e.what())); + progressDialog->setCancelButtonText("Close"); + throw; // will propagate to the future } }); From 09914730f46d58fe94f10d7df554f3c3aeea90ee Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 16 Sep 2025 15:14:40 -0600 Subject: [PATCH 244/435] 2nd attempt of QFutureWatcher for progress bar, changing QFutureWatcher from type void to type int, also an attempt at improving the try/catch methods/statements. For issue #654 technically I was attempting to move the try/catch statements from the QtConcurrent::run() function, to the finished() function, but the error message information gets dropped/sliced when transferring between the two, so I ended up leaving the try/catch statements in both functions. There is also some message duplication/overwriting going on that I am having troubles working out. --- src/gui/mainwindow.cpp | 160 ++++++++++++++++++++++++++++++++--------- src/gui/mainwindow.h | 2 +- 2 files changed, 127 insertions(+), 35 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 6f4cf2c0c..7aa4ff8f4 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -789,7 +789,7 @@ void MainWindow::solveButtonClicked() runProgress.push_back(0); } - futureWatcher = new QFutureWatcher(this); + futureWatcher = new QFutureWatcher(this); progressDialog->show(); @@ -803,33 +803,101 @@ void MainWindow::solveButtonClicked() connect(futureWatcher, &QFutureWatcher::finished, [=]() { - ////if( futureWatcher->isCanceled() ) // this doesn't get triggered as reliably as the QProgressDialog cancel button - if( progressDialog->wasCanceled() ) - { - int err = NinjaDestroyArmy(ninjaArmy, papszOptions); - if(err != NINJA_SUCCESS) + try { + + int result = futureWatcher->future().result(); // gets return of the QtConcurrent::run() function, unless an error was thrown in which case it throws. But the thrown error comes out truncated, it loses the details of the error message + + if( result == 1 ) // simulation properly finished { - printf("NinjaDestroyRuns: err = %d\n", err); + disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); + progressDialog->setValue(maxProgress); + progressDialog->setLabelText("Simulations finished"); + progressDialog->setCancelButtonText("Close"); + + int err = NinjaDestroyArmy(ninjaArmy, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaDestroyRuns: err = %d\n", err); + } + + // clear the progress values for the next set of runs + runProgress.clear(); + + qDebug() << "Finished with simulations"; + writeToConsole("Finished with simulations", Qt::darkGreen); + } + ////else if( futureWatcher->isCanceled() ) // this doesn't get triggered as reliably as the QProgressDialog cancel button + //else if( result == NINJA_E_CANCELLED ) // this is probably the proper way to do this, but checking progressDialog->wasCanceled() seems way safer + else if( progressDialog->wasCanceled() ) // simulation was cancelled + { + int err = NinjaDestroyArmy(ninjaArmy, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaDestroyRuns: err = %d\n", err); + } + + disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); + progressDialog->setValue(maxProgress); + progressDialog->setLabelText("Simulation cancelled"); + progressDialog->setCancelButtonText("Close"); + //progressDialog->close(); + + // clear the progress values for the next set of runs + runProgress.clear(); + + qDebug() << "Simulation cancelled by user"; + //writeToConsole( "Simulation cancelled by user", Qt::orange); // orange isn't a predefined QColor + //writeToConsole( "Simulation cancelled by user", Qt::QColor::fromRgb(255, 165, 0) ); // orange + writeToConsole( "Simulation cancelled by user", Qt::yellow); + } + else // simulation ended in some known error + { + disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); + progressDialog->setValue(maxProgress); + progressDialog->setLabelText("Simulation ended in error\n"+QString::number(result)); + progressDialog->setCancelButtonText("Close"); + + int err = NinjaDestroyArmy(ninjaArmy, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaDestroyRuns: err = %d\n", err); + } + + // clear the progress values for the next set of runs + runProgress.clear(); + + qWarning() << "Solver error:" << result; + writeToConsole("Solver error: "+QString::number(result), Qt::red); } + } catch (const std::exception &e) { + disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); + // message got truncated, use the QtConcurrent::run() messaging + // except that stuff there doesn't seem to propagate well either, hrm progressDialog->setValue(maxProgress); - progressDialog->setLabelText("Simulation cancelled"); + progressDialog->setLabelText("Simulation ended in error\n"+QString(e.what())); progressDialog->setCancelButtonText("Close"); - //progressDialog->close(); + int err = NinjaDestroyArmy(ninjaArmy, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaDestroyRuns: err = %d\n", err); + } + + // clear the progress values for the next set of runs runProgress.clear(); - qDebug() << "Simulation cancelled by user"; - //writeToConsole( "Simulation cancelled by user", Qt::orange); // orange isn't a predefined QColor - //writeToConsole( "Simulation cancelled by user", Qt::QColor::fromRgb(255, 165, 0) ); // orange - writeToConsole( "Simulation cancelled by user", Qt::yellow); - } - else - { + // message got truncated, use the QtConcurrent::run() messaging + // except that stuff there doesn't seem to propagate well either, hrm + qWarning() << "Solver error:" << e.what(); + writeToConsole("Solver error: "+QString(e.what()), Qt::red); + + } catch (...) { + disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); progressDialog->setValue(maxProgress); - progressDialog->setLabelText("Simulations finished"); + progressDialog->setLabelText("Simulation ended with unknown error"); progressDialog->setCancelButtonText("Close"); int err = NinjaDestroyArmy(ninjaArmy, papszOptions); @@ -838,29 +906,42 @@ void MainWindow::solveButtonClicked() printf("NinjaDestroyRuns: err = %d\n", err); } - qDebug() << "Finished with simulations"; - writeToConsole("Finished with simulations", Qt::darkGreen); - // clear the progress values for the next set of runs runProgress.clear(); + + qWarning() << "unknown solver error"; + writeToConsole("unknown solver error", Qt::red); + } + + futureWatcher->deleteLater(); }); - QFuture future = QtConcurrent::run([=]() { + QFuture future = QtConcurrent::run([=]() { try { - int err = NinjaStartRuns(ninjaArmy, ui->numberOfProcessorsSpinBox->value(), papszOptions); - if(err != 1) //StartRuns returns 1 on success - { - if( err == NINJA_E_CANCELLED ) - { - writeToConsole( "Simulation cancelled by user" ); - qDebug() << "Simulation cancelled by user"; - } - else - { - printf("NinjaStartRuns: err = %d\n", err); - } - } + + //// calling prepareArmy here is causing all kinds of troubles. Local variables aren't properly being passed on, + //// or aren't properly copied ([=] type thing), or aren't properly in scope. The other values are .h variables, + //// so they would at least be in the proper scope. But the out of scope variables leads to all kinds + //// of "QObject::connect: Cannot connect" and "err = 2" type messages. It is still somehow continuing to run though. + //// + //// seems the only way to put prepareArmy into a QFutureWatcher function, if it would even work, + //// would be to have two separate QFutureWatcher functions + ////prepareArmy(ninjaArmy, ui->numberOfProcessorsSpinBox->value(), initializationMethod); + + return NinjaStartRuns(ninjaArmy, ui->numberOfProcessorsSpinBox->value(), papszOptions); + + } catch (cancelledByUser& e) { // I forgot that the cancelSolve() works by doing a throw, I'm surprised that this throw is propagating out of the solver though + + qWarning() << "Solver error:" << e.what(); + + progressDialog->setValue(maxProgress); + progressDialog->setLabelText("Simulation cancelled by user"); + progressDialog->setCancelButtonText("Close"); + + ////throw; // will propagate to the future. We purposefully want to skip passing it on for this case, use the QFutureWatcher->future()->result() value instead. However, the return/result value was 0, not the NINJA_E_CANCELLED value of 7. Hrm. + return NINJA_E_CANCELLED; // turns out NinjaStartRuns() simply didn't return a value because cancelSolve() runs by triggering a throw before a return value can be given. So just have to return the appropriate value here. + } catch (const std::exception &e) { // Store error message somewhere (thread-safe) qWarning() << "Solver error:" << e.what(); @@ -870,6 +951,17 @@ void MainWindow::solveButtonClicked() progressDialog->setCancelButtonText("Close"); throw; // will propagate to the future + + } catch (...) { + + qWarning() << "unknown solver error"; + + progressDialog->setValue(maxProgress); + progressDialog->setLabelText("Simulation ended with unknown error"); + progressDialog->setCancelButtonText("Close"); + + throw; // will propagate to the future + } }); futureWatcher->setFuture(future); diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 1f0e507b2..31fa1c334 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -139,7 +139,7 @@ private slots: PointInitializationInput *pointInitializationInput; QProgressDialog *progressDialog; - QFutureWatcher *futureWatcher; + QFutureWatcher *futureWatcher; int totalProgress; std::vector runProgress; NinjaArmyH *ninjaArmy; From bab3747e134acdd424042858dfcfb42b82b7662e Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 16 Sep 2025 15:55:57 -0600 Subject: [PATCH 245/435] fix to 2nd QFutureWatcher progress bar attempt, for issue #654 needed to use a QMetaObject::invokeMethod() lambda function to be thread safe, when editing the QProgressDialog and other GUI widgets within QtConcurrent::run(). The past commit was technically working, but it would seg fault with a "Trace/breakpoint trap (core dumped)" error every once in a while also got rid of the message duplication/overwriting problem that was causing me troubles from the past commit. Making the QProgressDialog and writeToConsole function calls thread safe seems to allow edited messages, from the QtConcurrent::run() function, to now properly propagate through to the rest of the code --- src/gui/mainwindow.cpp | 58 ++++++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 7aa4ff8f4..268635116 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -854,7 +854,7 @@ void MainWindow::solveButtonClicked() { disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); progressDialog->setValue(maxProgress); - progressDialog->setLabelText("Simulation ended in error\n"+QString::number(result)); + progressDialog->setLabelText("Simulation ended in error\nerror: "+QString::number(result)); progressDialog->setCancelButtonText("Close"); int err = NinjaDestroyArmy(ninjaArmy, papszOptions); @@ -874,10 +874,10 @@ void MainWindow::solveButtonClicked() disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); // message got truncated, use the QtConcurrent::run() messaging - // except that stuff there doesn't seem to propagate well either, hrm - progressDialog->setValue(maxProgress); - progressDialog->setLabelText("Simulation ended in error\n"+QString(e.what())); - progressDialog->setCancelButtonText("Close"); + // ooh, with the thread safe method, things are now updating appropriately + //progressDialog->setValue(maxProgress); + //progressDialog->setLabelText("Simulation ended in error\n"+QString(e.what())); + //progressDialog->setCancelButtonText("Close"); int err = NinjaDestroyArmy(ninjaArmy, papszOptions); if(err != NINJA_SUCCESS) @@ -889,16 +889,17 @@ void MainWindow::solveButtonClicked() runProgress.clear(); // message got truncated, use the QtConcurrent::run() messaging - // except that stuff there doesn't seem to propagate well either, hrm - qWarning() << "Solver error:" << e.what(); - writeToConsole("Solver error: "+QString(e.what()), Qt::red); + // ooh, with the thread safe method, things are now updating appropriately + //qWarning() << "Solver error:" << e.what(); + //writeToConsole("Solver error: "+QString(e.what()), Qt::red); } catch (...) { disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - progressDialog->setValue(maxProgress); - progressDialog->setLabelText("Simulation ended with unknown error"); - progressDialog->setCancelButtonText("Close"); + // message got truncated, use the QtConcurrent::run() messaging + //progressDialog->setValue(maxProgress); + //progressDialog->setLabelText("Simulation ended with unknown error"); + //progressDialog->setCancelButtonText("Close"); int err = NinjaDestroyArmy(ninjaArmy, papszOptions); if(err != NINJA_SUCCESS) @@ -909,8 +910,9 @@ void MainWindow::solveButtonClicked() // clear the progress values for the next set of runs runProgress.clear(); - qWarning() << "unknown solver error"; - writeToConsole("unknown solver error", Qt::red); + // message got truncated, use the QtConcurrent::run() messaging + //qWarning() << "unknown solver error"; + //writeToConsole("unknown solver error", Qt::red); } @@ -935,9 +937,14 @@ void MainWindow::solveButtonClicked() qWarning() << "Solver error:" << e.what(); - progressDialog->setValue(maxProgress); - progressDialog->setLabelText("Simulation cancelled by user"); - progressDialog->setCancelButtonText("Close"); + // no message with this error, and it is a known error, + // so probably better to update the message in the finished() function, than in QtConcurrent::run() + //QMetaObject::invokeMethod(this, [this, maxProgress]() { + // progressDialog->setLabelText("Simulation cancelled by user"); + // progressDialog->setCancelButtonText("Close"); + // progressDialog->setValue(maxProgress); + // writeToConsole( "Simulation cancelled by user", Qt::yellow); + //}, Qt::QueuedConnection); ////throw; // will propagate to the future. We purposefully want to skip passing it on for this case, use the QFutureWatcher->future()->result() value instead. However, the return/result value was 0, not the NINJA_E_CANCELLED value of 7. Hrm. return NINJA_E_CANCELLED; // turns out NinjaStartRuns() simply didn't return a value because cancelSolve() runs by triggering a throw before a return value can be given. So just have to return the appropriate value here. @@ -946,9 +953,13 @@ void MainWindow::solveButtonClicked() qWarning() << "Solver error:" << e.what(); - progressDialog->setValue(maxProgress); - progressDialog->setLabelText("Simulation ended in error\n"+QString(e.what())); - progressDialog->setCancelButtonText("Close"); + QString errorMsg = QString::fromStdString(e.what()); // copy out of 'e' before creating the invokeMethod lambda function + QMetaObject::invokeMethod(this, [this, maxProgress, errorMsg]() { + progressDialog->setLabelText("Simulation ended in error\n"+errorMsg); + progressDialog->setCancelButtonText("Close"); + progressDialog->setValue(maxProgress); + writeToConsole("Solver error: "+errorMsg, Qt::red); + }, Qt::QueuedConnection); throw; // will propagate to the future @@ -956,9 +967,12 @@ void MainWindow::solveButtonClicked() qWarning() << "unknown solver error"; - progressDialog->setValue(maxProgress); - progressDialog->setLabelText("Simulation ended with unknown error"); - progressDialog->setCancelButtonText("Close"); + QMetaObject::invokeMethod(this, [this, maxProgress]() { + progressDialog->setLabelText("Simulation ended with unknown error"); + progressDialog->setCancelButtonText("Close"); + progressDialog->setValue(maxProgress); + writeToConsole("unknown solver error", Qt::red); + }, Qt::QueuedConnection); throw; // will propagate to the future From 265cb628480f600343ae05831a62ff64043db210 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 16 Sep 2025 16:32:46 -0600 Subject: [PATCH 246/435] simplified the destructor/final cleanup statements for the progress bar QFutureWatcher, which would not have worked if that final extra flush-like emit signal was still going on. So seems like the QFutureWatcher solved that final extra flush-like emitted signals problem after all. That or some of the other fixes along the way to make it more thread safe was the fix, regardless, this makes it much cleaner. For issue #654 I was testing the final extra flush-like emit signal problem, by checking for seg faults when commenting out the disconnect() of cancelSolve(), as well as commenting out all updates to the QProgressDialog in the QtConcurrent::run() and finished() functions. --- src/gui/mainwindow.cpp | 63 +++++++----------------------------------- 1 file changed, 10 insertions(+), 53 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 268635116..8477ce3ae 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -809,20 +809,10 @@ void MainWindow::solveButtonClicked() if( result == 1 ) // simulation properly finished { - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); progressDialog->setValue(maxProgress); progressDialog->setLabelText("Simulations finished"); progressDialog->setCancelButtonText("Close"); - int err = NinjaDestroyArmy(ninjaArmy, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaDestroyRuns: err = %d\n", err); - } - - // clear the progress values for the next set of runs - runProgress.clear(); - qDebug() << "Finished with simulations"; writeToConsole("Finished with simulations", Qt::darkGreen); } @@ -830,21 +820,11 @@ void MainWindow::solveButtonClicked() //else if( result == NINJA_E_CANCELLED ) // this is probably the proper way to do this, but checking progressDialog->wasCanceled() seems way safer else if( progressDialog->wasCanceled() ) // simulation was cancelled { - int err = NinjaDestroyArmy(ninjaArmy, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaDestroyRuns: err = %d\n", err); - } - - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); progressDialog->setValue(maxProgress); progressDialog->setLabelText("Simulation cancelled"); progressDialog->setCancelButtonText("Close"); //progressDialog->close(); - // clear the progress values for the next set of runs - runProgress.clear(); - qDebug() << "Simulation cancelled by user"; //writeToConsole( "Simulation cancelled by user", Qt::orange); // orange isn't a predefined QColor //writeToConsole( "Simulation cancelled by user", Qt::QColor::fromRgb(255, 165, 0) ); // orange @@ -852,70 +832,47 @@ void MainWindow::solveButtonClicked() } else // simulation ended in some known error { - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); progressDialog->setValue(maxProgress); progressDialog->setLabelText("Simulation ended in error\nerror: "+QString::number(result)); progressDialog->setCancelButtonText("Close"); - int err = NinjaDestroyArmy(ninjaArmy, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaDestroyRuns: err = %d\n", err); - } - - // clear the progress values for the next set of runs - runProgress.clear(); - qWarning() << "Solver error:" << result; writeToConsole("Solver error: "+QString::number(result), Qt::red); } } catch (const std::exception &e) { - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); // message got truncated, use the QtConcurrent::run() messaging // ooh, with the thread safe method, things are now updating appropriately //progressDialog->setValue(maxProgress); //progressDialog->setLabelText("Simulation ended in error\n"+QString(e.what())); //progressDialog->setCancelButtonText("Close"); - int err = NinjaDestroyArmy(ninjaArmy, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaDestroyRuns: err = %d\n", err); - } - - // clear the progress values for the next set of runs - runProgress.clear(); - - // message got truncated, use the QtConcurrent::run() messaging - // ooh, with the thread safe method, things are now updating appropriately //qWarning() << "Solver error:" << e.what(); //writeToConsole("Solver error: "+QString(e.what()), Qt::red); } catch (...) { - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); // message got truncated, use the QtConcurrent::run() messaging //progressDialog->setValue(maxProgress); //progressDialog->setLabelText("Simulation ended with unknown error"); //progressDialog->setCancelButtonText("Close"); - int err = NinjaDestroyArmy(ninjaArmy, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaDestroyRuns: err = %d\n", err); - } - - // clear the progress values for the next set of runs - runProgress.clear(); - - // message got truncated, use the QtConcurrent::run() messaging //qWarning() << "unknown solver error"; //writeToConsole("unknown solver error", Qt::red); + } + + disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); + int err = NinjaDestroyArmy(ninjaArmy, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaDestroyRuns: err = %d\n", err); } + // clear the progress values for the next set of runs + runProgress.clear(); + futureWatcher->deleteLater(); }); From 3bf484a202a1e07c053d7d73cc28d1bb602bd16e Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 17 Sep 2025 12:36:18 -0600 Subject: [PATCH 247/435] final wrap-up work to the 2nd QFutureWatcher progress bar attempt, for issue #654 changed the QtConcurrent::run() and finished() functions, from being lambda functions, to being regularly called functions, as is done in the surfaceinput.h/.cpp and pointinitializationinput.h/.cpp qt6 gui code. In the process, learned that "this" can actually be passed in to QtConcurrent::run() functions, but only if the function to be ran is of non-static type, static seems to chop off or lose the member function-ness of the code. Normally, it is very much not desired to pass in "this" to a QtConcurrent::run() function, but in this case, the function needed access to QProgressDialog and writeToConsole() GUI functions, within the QtConcurrent::run() worker threads. Passing in "this" also led to interesting access of other useful MainWindow stuff, like "ui" and MainWindow.h variables like maxProgress though. the QMetaObject::invokeMethod() instances within QtConcurrent::run() are still lambda functions, but I had to use them to be able to safely run calls to QProgressDialog and writeToConsole() GUI functions, QMetaObject::invokeMethod() appears to be the method to make such GUI calls thread safe. --- src/gui/mainwindow.cpp | 279 +++++++++++++++++++++-------------------- src/gui/mainwindow.h | 12 +- 2 files changed, 154 insertions(+), 137 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 8477ce3ae..4d0a2364d 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -772,7 +772,7 @@ void MainWindow::solveButtonClicked() } writeToConsole(QString::number( numNinjas ) + " runs initialized. Starting solver..."); - int maxProgress = numNinjas*100; + maxProgress = numNinjas*100; progressDialog = new QProgressDialog("Solving...", "Cancel", 0, maxProgress, ui->centralwidget); progressDialog->setWindowModality(Qt::WindowModal); progressDialog->setMinimumDuration(0); @@ -801,140 +801,9 @@ void MainWindow::solveButtonClicked() writeToConsole( "Initializing runs..." ); + connect(futureWatcher, &QFutureWatcher::finished, this, &MainWindow::finishedSolve); - connect(futureWatcher, &QFutureWatcher::finished, [=]() { - try { - - int result = futureWatcher->future().result(); // gets return of the QtConcurrent::run() function, unless an error was thrown in which case it throws. But the thrown error comes out truncated, it loses the details of the error message - - if( result == 1 ) // simulation properly finished - { - progressDialog->setValue(maxProgress); - progressDialog->setLabelText("Simulations finished"); - progressDialog->setCancelButtonText("Close"); - - qDebug() << "Finished with simulations"; - writeToConsole("Finished with simulations", Qt::darkGreen); - } - ////else if( futureWatcher->isCanceled() ) // this doesn't get triggered as reliably as the QProgressDialog cancel button - //else if( result == NINJA_E_CANCELLED ) // this is probably the proper way to do this, but checking progressDialog->wasCanceled() seems way safer - else if( progressDialog->wasCanceled() ) // simulation was cancelled - { - progressDialog->setValue(maxProgress); - progressDialog->setLabelText("Simulation cancelled"); - progressDialog->setCancelButtonText("Close"); - //progressDialog->close(); - - qDebug() << "Simulation cancelled by user"; - //writeToConsole( "Simulation cancelled by user", Qt::orange); // orange isn't a predefined QColor - //writeToConsole( "Simulation cancelled by user", Qt::QColor::fromRgb(255, 165, 0) ); // orange - writeToConsole( "Simulation cancelled by user", Qt::yellow); - } - else // simulation ended in some known error - { - progressDialog->setValue(maxProgress); - progressDialog->setLabelText("Simulation ended in error\nerror: "+QString::number(result)); - progressDialog->setCancelButtonText("Close"); - - qWarning() << "Solver error:" << result; - writeToConsole("Solver error: "+QString::number(result), Qt::red); - } - - } catch (const std::exception &e) { - - // message got truncated, use the QtConcurrent::run() messaging - // ooh, with the thread safe method, things are now updating appropriately - //progressDialog->setValue(maxProgress); - //progressDialog->setLabelText("Simulation ended in error\n"+QString(e.what())); - //progressDialog->setCancelButtonText("Close"); - - //qWarning() << "Solver error:" << e.what(); - //writeToConsole("Solver error: "+QString(e.what()), Qt::red); - - } catch (...) { - - // message got truncated, use the QtConcurrent::run() messaging - //progressDialog->setValue(maxProgress); - //progressDialog->setLabelText("Simulation ended with unknown error"); - //progressDialog->setCancelButtonText("Close"); - - //qWarning() << "unknown solver error"; - //writeToConsole("unknown solver error", Qt::red); - } - - disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - - int err = NinjaDestroyArmy(ninjaArmy, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaDestroyRuns: err = %d\n", err); - } - - // clear the progress values for the next set of runs - runProgress.clear(); - - futureWatcher->deleteLater(); - }); - - QFuture future = QtConcurrent::run([=]() { - try { - - //// calling prepareArmy here is causing all kinds of troubles. Local variables aren't properly being passed on, - //// or aren't properly copied ([=] type thing), or aren't properly in scope. The other values are .h variables, - //// so they would at least be in the proper scope. But the out of scope variables leads to all kinds - //// of "QObject::connect: Cannot connect" and "err = 2" type messages. It is still somehow continuing to run though. - //// - //// seems the only way to put prepareArmy into a QFutureWatcher function, if it would even work, - //// would be to have two separate QFutureWatcher functions - ////prepareArmy(ninjaArmy, ui->numberOfProcessorsSpinBox->value(), initializationMethod); - - return NinjaStartRuns(ninjaArmy, ui->numberOfProcessorsSpinBox->value(), papszOptions); - - } catch (cancelledByUser& e) { // I forgot that the cancelSolve() works by doing a throw, I'm surprised that this throw is propagating out of the solver though - - qWarning() << "Solver error:" << e.what(); - - // no message with this error, and it is a known error, - // so probably better to update the message in the finished() function, than in QtConcurrent::run() - //QMetaObject::invokeMethod(this, [this, maxProgress]() { - // progressDialog->setLabelText("Simulation cancelled by user"); - // progressDialog->setCancelButtonText("Close"); - // progressDialog->setValue(maxProgress); - // writeToConsole( "Simulation cancelled by user", Qt::yellow); - //}, Qt::QueuedConnection); - - ////throw; // will propagate to the future. We purposefully want to skip passing it on for this case, use the QFutureWatcher->future()->result() value instead. However, the return/result value was 0, not the NINJA_E_CANCELLED value of 7. Hrm. - return NINJA_E_CANCELLED; // turns out NinjaStartRuns() simply didn't return a value because cancelSolve() runs by triggering a throw before a return value can be given. So just have to return the appropriate value here. - - } catch (const std::exception &e) { // Store error message somewhere (thread-safe) - - qWarning() << "Solver error:" << e.what(); - - QString errorMsg = QString::fromStdString(e.what()); // copy out of 'e' before creating the invokeMethod lambda function - QMetaObject::invokeMethod(this, [this, maxProgress, errorMsg]() { - progressDialog->setLabelText("Simulation ended in error\n"+errorMsg); - progressDialog->setCancelButtonText("Close"); - progressDialog->setValue(maxProgress); - writeToConsole("Solver error: "+errorMsg, Qt::red); - }, Qt::QueuedConnection); - - throw; // will propagate to the future - - } catch (...) { - - qWarning() << "unknown solver error"; - - QMetaObject::invokeMethod(this, [this, maxProgress]() { - progressDialog->setLabelText("Simulation ended with unknown error"); - progressDialog->setCancelButtonText("Close"); - progressDialog->setValue(maxProgress); - writeToConsole("unknown solver error", Qt::red); - }, Qt::QueuedConnection); - - throw; // will propagate to the future - - } - }); + QFuture future = QtConcurrent::run(&MainWindow::startSolve, this, ui->numberOfProcessorsSpinBox->value()); futureWatcher->setFuture(future); // vector outputFiles; @@ -1387,5 +1256,147 @@ OutputMeshResolution MainWindow::getMeshResolution( return result; } +int MainWindow::startSolve(int numProcessors) +{ + try { + + char **papszOptions = nullptr; // found that I could pass this in as an argument after all, but makes more sense to just define it here + + //// calling prepareArmy here is causing all kinds of troubles. Local variables aren't properly being passed on, + //// or aren't properly copied ([=] type thing), or aren't properly in scope. The other values are .h variables, + //// so they would at least be in the proper scope. But the out of scope variables leads to all kinds + //// of "QObject::connect: Cannot connect" and "err = 2" type messages. It is still somehow continuing to run though. + //// + //// seems the only way to put prepareArmy into a QFutureWatcher function, if it would even work, + //// would be to have two separate QFutureWatcher functions, needs to be separated out from NinjaStartRuns() + ////prepareArmy(ninjaArmy, ui->numberOfProcessorsSpinBox->value(), initializationMethod); + + return NinjaStartRuns(ninjaArmy, ui->numberOfProcessorsSpinBox->value(), papszOptions); // huh? I guess because "this" was used, it still has access to numNinjas this way + //return NinjaStartRuns(ninjaArmy, numProcessors, papszOptions); + + } catch (cancelledByUser& e) { // I forgot that the cancelSolve() works by doing a throw, I'm surprised that this throw is propagating out of the solver though + + qWarning() << "Solver error:" << e.what(); + + // no message with this error, and it is a known error, + // so probably better to update the message in the finished() function, than in QtConcurrent::run() + //QMetaObject::invokeMethod(this, [this]() { + // progressDialog->setLabelText("Simulation cancelled by user"); + // progressDialog->setCancelButtonText("Close"); + // progressDialog->setValue(this->maxProgress); + // writeToConsole( "Simulation cancelled by user", Qt::yellow); + //}, Qt::QueuedConnection); + + ////throw; // will propagate to the future. We purposefully want to skip passing it on for this case, use the QFutureWatcher->future()->result() value instead. However, the return/result value was 0, not the NINJA_E_CANCELLED value of 7. Hrm. + return NINJA_E_CANCELLED; // turns out NinjaStartRuns() simply didn't return a value because cancelSolve() runs by triggering a throw before a return value can be given. So just have to return the appropriate value here. + + } catch (const std::exception &e) { // Store error message somewhere (thread-safe) + + qWarning() << "Solver error:" << e.what(); + + QString errorMsg = QString::fromStdString(e.what()); // copy out of 'e' before creating the thread safe invokeMethod lambda function + QMetaObject::invokeMethod(this, [this, errorMsg]() { + progressDialog->setLabelText("Simulation ended in error\n"+errorMsg); + progressDialog->setCancelButtonText("Close"); + progressDialog->setValue(this->maxProgress); + writeToConsole("Solver error: "+errorMsg, Qt::red); + }, Qt::QueuedConnection); + + throw; // will propagate to the future + + } catch (...) { + + qWarning() << "unknown solver error"; + + QMetaObject::invokeMethod(this, [this]() { + progressDialog->setLabelText("Simulation ended with unknown error"); + progressDialog->setCancelButtonText("Close"); + progressDialog->setValue(this->maxProgress); + writeToConsole("unknown solver error", Qt::red); + }, Qt::QueuedConnection); + + throw; // will propagate to the future + + } +} + +void MainWindow::finishedSolve() +{ + try { + + // get the return value of the QtConcurrent::run() function + // Note that if an error was thrown during QtConcurrent::run(), this throws instead + // but the thrown error comes out truncated, it loses the details of the original error message + int result = futureWatcher->future().result(); + + if( result == 1 ) // simulation properly finished + { + progressDialog->setValue(maxProgress); + progressDialog->setLabelText("Simulations finished"); + progressDialog->setCancelButtonText("Close"); + + qDebug() << "Finished with simulations"; + writeToConsole("Finished with simulations", Qt::darkGreen); + } + ////else if( futureWatcher->isCanceled() ) // this doesn't get triggered as reliably as the QProgressDialog cancel button + //else if( result == NINJA_E_CANCELLED ) // this is probably the proper way to do this, but checking progressDialog->wasCanceled() seems way safer + else if( progressDialog->wasCanceled() ) // simulation was cancelled + { + progressDialog->setValue(maxProgress); + progressDialog->setLabelText("Simulation cancelled"); + progressDialog->setCancelButtonText("Close"); + //progressDialog->close(); + + qDebug() << "Simulation cancelled by user"; + //writeToConsole( "Simulation cancelled by user", Qt::orange); // orange isn't a predefined QColor + //writeToConsole( "Simulation cancelled by user", Qt::QColor::fromRgb(255, 165, 0) ); // orange + writeToConsole( "Simulation cancelled by user", Qt::yellow); + } + else // simulation ended in some known error + { + progressDialog->setValue(maxProgress); + progressDialog->setLabelText("Simulation ended in error\nerror: "+QString::number(result)); + progressDialog->setCancelButtonText("Close"); + + qWarning() << "Solver error:" << result; + writeToConsole("Solver error: "+QString::number(result), Qt::red); + } + + } catch (const std::exception &e) { + + // message got truncated, use the QtConcurrent::run() messaging + // ooh, with the thread safe method, things are now updating appropriately + //progressDialog->setValue(maxProgress); + //progressDialog->setLabelText("Simulation ended in error\n"+QString(e.what())); + //progressDialog->setCancelButtonText("Close"); + + //qWarning() << "Solver error:" << e.what(); + //writeToConsole("Solver error: "+QString(e.what()), Qt::red); + + } catch (...) { + + // message got truncated, use the QtConcurrent::run() messaging + //progressDialog->setValue(maxProgress); + //progressDialog->setLabelText("Simulation ended with unknown error"); + //progressDialog->setCancelButtonText("Close"); + + //qWarning() << "unknown solver error"; + //writeToConsole("unknown solver error", Qt::red); + } + + disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); + + char **papszOptions = nullptr; + int err = NinjaDestroyArmy(ninjaArmy, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaDestroyRuns: err = %d\n", err); + } + + // clear the progress values for the next set of runs + runProgress.clear(); + + futureWatcher->deleteLater(); +} diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 31fa1c334..a5ace7064 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -138,11 +138,17 @@ private slots: WeatherModelInput *weatherModelInput; PointInitializationInput *pointInitializationInput; + NinjaArmyH *ninjaArmy; + + std::vector runProgress; + int totalProgress; + int maxProgress; + QProgressDialog *progressDialog; QFutureWatcher *futureWatcher; - int totalProgress; - std::vector runProgress; - NinjaArmyH *ninjaArmy; + + int startSolve(int numProcessors); + void finishedSolve(); QString currentDEMFilePath; From 58f3a63f576d59816731e321bcd163c0013e4377 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 17 Sep 2025 14:17:27 -0600 Subject: [PATCH 248/435] Formatting updates and removal of more references to GIS_INTERNALS and Boost, for #660 --- CMakeLists.txt | 100 ++++++++++++++----------------------------------- 1 file changed, 28 insertions(+), 72 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 46921f2ec..790ea9895 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,78 +82,23 @@ set(WINDNINJA_VERSION_NAME WindNinja-${VER_STR}) message(STATUS "VERSION: ${VER_STR}") message(STATUS "PKG VERSION: ${WINDNINJA_VERSION_NAME}") -# Locate third party libs -include(FindBoost) -set(Boost_DEBUG OFF) -if(WIN32) - set(Boost_USE_STATIC_LIBS ON) -else(WIN32) - set(Boost_USE_STATIC_LIBS OFF) -endif(WIN32) -set(Boost_USE_MULTITHREAD OFF) -find_package(Boost 1.41.1 COMPONENTS date_time program_options - unit_test_framework REQUIRED) - -# All GIS related libs. Windows uses GIS_INTERNALS_HOME -if(WIN32) - option(USE_GIS_INTERNALS "Use dependencies (as many as possible) from gisinternals.com" OFF) - if(USE_GIS_INTERNALS) - find_path(GIS_INTERNALS_HOME gdal CACHE PATH) - file(TO_NATIVE_PATH ${GIS_INTERNALS_HOME} GIS_INTERNALS_HOME) - string(REGEX REPLACE "\\\\" "/" GIS_INTERNALS_HOME "${GIS_INTERNALS_HOME}") - endif(USE_GIS_INTERNALS) -endif(WIN32) - -option(USE_VCPKG "Use VCPKG for boost and GDAL" ) +option(USE_VCPKG "Use VCPKG for Windows dependencies" OFF) if(USE_VCPKG) - message("Using VCPKG") - find_package(shaplib CONFIG REQUIRED) - find_package(GDAL CONFIG REQUIRED) - find_package(NETCDF CONFIG REQUIRED) -# target_link_libraries(main PRIVATE GDAL::GDAL) -ELSE(USE_VCPKG) - include(FindNetCDF) - include(FindGDAL) if(WIN32) - if(NOT GIS_INTERNALS_HOME) - find_package(NetCDF REQUIRED) - find_package(GDAL REQUIRED) - else(NOT GIS_INTERNALS_HOME) - find_package(NetCDF) - find_package(GDAL) - endif(NOT GIS_INTERNALS_HOME) - else(WIN32) - find_package(NetCDF REQUIRED) - find_package(GDAL REQUIRED) - endif(WIN32) -endif(USE_VCPKG) - -if(USE_VCPKG) - set(GDAL_LIBRARY GDAL::GDAL) - set(NETCDF_LIBRARIES_C netCDF::netcdf) -ELSE(USE_VCPKG) - if(WIN32) - if(NOT NETCDF_INCLUDES-NOTFOUND AND GIS_INTERNALS_HOME) - set(NETCDF_INCLUDES ${GIS_INTERNALS_HOME}/include CACHE TYPE PATH FORCE) - set(NETCDF_LIBRARIES NOT_USED CACHE TYPE PATH FORCE) - set(NETCDF_LIBRARIES_C ${GIS_INTERNALS_HOME}/lib/netcdf.lib CACHE TYPE NAME FORCE) - set(NETCDF_INCLUDES-FOUND TRUE) - set(NETCDF_LIBRARIES_C-FOUND TRUE) - endif(NOT NETCDF_INCLUDES-NOTFOUND AND GIS_INTERNALS_HOME) - endif(WIN32) - if(WIN32) - if(NOT GDAL_INCLUDE_DIR-NOTFOUND AND GIS_INTERNALS_HOME) - set(GDAL_INCLUDE_DIR ${GIS_INTERNALS_HOME}/include CACHE TYPE PATH FORCE) - set(GDAL_LIBRARY ${GIS_INTERNALS_HOME}/lib/gdal_i.lib CACHE TYPE NAME FORCE) - set(GDAL_INCLUDE_DIR-FOUND TRUE) - set(GDAL_LIBRARY-FOUND TRUE) - endif(NOT GDAL_INCLUDE_DIR-NOTFOUND AND GIS_INTERNALS_HOME) - endif(WIN32) -ENDIF(USE_VCPKG) + message(STATUS "Using VCPKG") + find_package(shapelib CONFIG REQUIRED) + find_package(GDAL CONFIG REQUIRED) + find_package(netCDF CONFIG REQUIRED) + + set(GDAL_LIBRARY GDAL::GDAL) + set(NETCDF_LIBRARIES_C netCDF::netcdf) + else() + message(FATAL_ERROR "USE_VCPKG is only supported on Windows.") + endif() +endif() # Ninja executables option(NINJA_GUI "Build Qt GUI" ON) - option(NINJA_CLI "Build Command Line Interface" ON) # Weather related options @@ -168,30 +113,37 @@ if(WITH_NOMADS_SUPPORT) if(NOT HAVE_TIMEGM) add_definitions(-DUSE_INTERNAL_TIME_GM) endif(NOT HAVE_TIMEGM) + option(NOMADS_USE_VSI_READ "Use VSI*L api instead of CPLHTTPFetch" OFF) if(NOMADS_USE_VSI_READ) add_definitions(-DNOMADS_USE_VSI_READ) endif(NOMADS_USE_VSI_READ) + option(NOMADS_RTMA "Enable the RTMA forecasts" OFF) if(NOMADS_RTMA) add_definitions(-DNOMADS_RTMA) endif(NOMADS_RTMA) + option(NOMADS_EXPER_FORECASTS "Enable NARRE and NEST forecasts." OFF) if(NOMADS_EXPER_FORECASTS) add_definitions(-DNOMADS_EXPER_FORECASTS) endif(NOMADS_EXPER_FORECASTS) + option(NOMADS_ENABLE_ASYNC "Enable multi-threading for NOMADS download" ON) if(NOMADS_ENABLE_ASYNC) add_definitions(-DNOMADS_ENABLE_ASYNC) endif(NOMADS_ENABLE_ASYNC) + option(NOMADS_USE_IP "Use the ip address for the nomads server, not a host" OFF) if(NOMADS_USE_IP) add_definitions(-DNOMADS_USE_IP) endif(NOMADS_USE_IP) + option(NOMADS_ENABLE_3D "Enable 3d initialization using NOMADS data." OFF) if(NOMADS_ENABLE_3D) add_definitions(-DNOMADS_ENABLE_3D) endif(NOMADS_ENABLE_3D) + option(NOMADS_INTERNAL_VRT "Use an internal copy of GDALAutoCreateVRT that allows for band subsetting" OFF) if(NOMADS_INTERNAL_VRT) add_definitions(-DNOMADS_INTERNAL_VRT) @@ -222,13 +174,9 @@ endif(C_API) # Enable phone home and message server startup option(PHONE_HOME_QUERIES "Enable Phone Home Queries" ON) - if (PHONE_HOME_QUERIES) add_definitions(-DPHONE_HOME_QUERIES_ENABLED) - message(STATUS "Phone Home Queries are enabled.") -else() - message(STATUS "Phone Home Queries are disabled.") -endif() +endif(PHONE_HOME_QUERIES) # OpenFOAM related options option(NINJAFOAM "Enable OpenFOAM solver" ON) @@ -318,18 +266,26 @@ endif(NOT WIN32) # Optional utilities option(BUILD_FETCH_DEM "Build a standalone command line interface DEM utility" OFF) + option(BUILD_STL_CONVERTER "Build a standalone command line interface for STL file conversions" OFF ) + option(BUILD_CONVERT_OUTPUT "Build a standalone command line interface for xyz file conversions" OFF ) + option(BUILD_WRF_TO_KMZ "Build a standalone command line interface for converting WRF output to kmz" OFF ) mark_as_advanced(BUILD_WRF_TO_KMZ) + option(BUILD_HRRR_TO_KMZ "Build a standalone command line interface for converting hrrr output runs to kmz, without running full WindNinja" OFF ) mark_as_advanced(BUILD_HRRR_TO_KMZ) + option(BUILD_SLOPE_ASPECT_GRID "Build an application for building slope and aspect grids from a dem" OFF) mark_as_advanced(BUILD_SLOPE_ASPECT_GRID) + option(BUILD_FLOW_SEPARATION_GRID "Build an application for building flow separation" OFF) mark_as_advanced(BUILD_FLOW_SEPARATION_GRID) + option(BUILD_SOLAR_GRID "Build a application for building solar grids" OFF) mark_as_advanced(BUILD_SOLAR_GRID) + option(BUILD_SURFACE_INPUT_NODATA_FILLER "Build an application for filling input surface no data values" ON) mark_as_advanced(BUILD_SURFACE_INPUT_NODATA_FILLER) From d38f8a2af556f13596890d309b1135333b7f56f9 Mon Sep 17 00:00:00 2001 From: masonwillman <117214223+masonwillman@users.noreply.github.com> Date: Wed, 17 Sep 2025 15:19:26 -0600 Subject: [PATCH 249/435] Update cmake minimum version to 3.16 for all CMakeLists.txt files, for #660 --- src/fetch_dem/CMakeLists.txt | 2 +- src/fetch_station/CMakeLists.txt | 2 +- src/flow_separation_grid/CMakeLists.txt | 2 +- src/hrrr_to_kmz/CMakeLists.txt | 2 +- src/output_converter/CMakeLists.txt | 2 +- src/slope_aspect_grid/CMakeLists.txt | 2 +- src/solar_grid/CMakeLists.txt | 2 +- src/stl_converter/CMakeLists.txt | 2 +- src/wrf_to_kmz/CMakeLists.txt | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/fetch_dem/CMakeLists.txt b/src/fetch_dem/CMakeLists.txt index bdbb01570..8f0b46726 100644 --- a/src/fetch_dem/CMakeLists.txt +++ b/src/fetch_dem/CMakeLists.txt @@ -15,7 +15,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.16) include_directories(${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}/src/ninja diff --git a/src/fetch_station/CMakeLists.txt b/src/fetch_station/CMakeLists.txt index f07a91df0..92c8144a6 100644 --- a/src/fetch_station/CMakeLists.txt +++ b/src/fetch_station/CMakeLists.txt @@ -15,7 +15,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.16) include_directories(${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}/src/ninja diff --git a/src/flow_separation_grid/CMakeLists.txt b/src/flow_separation_grid/CMakeLists.txt index bd2bc9563..a56acbc31 100644 --- a/src/flow_separation_grid/CMakeLists.txt +++ b/src/flow_separation_grid/CMakeLists.txt @@ -15,7 +15,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.16) include_directories(${PROJECT_SOURCE_DIR}/src/ninja ${GDAL_SYSTEM_INCLUDE} ${GDAL_INCLUDE_DIR}) diff --git a/src/hrrr_to_kmz/CMakeLists.txt b/src/hrrr_to_kmz/CMakeLists.txt index 495ebe959..e62ebb31b 100644 --- a/src/hrrr_to_kmz/CMakeLists.txt +++ b/src/hrrr_to_kmz/CMakeLists.txt @@ -15,7 +15,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.16) include_directories(${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}/src/ninja diff --git a/src/output_converter/CMakeLists.txt b/src/output_converter/CMakeLists.txt index 5d350d4c5..6cf18e3f9 100644 --- a/src/output_converter/CMakeLists.txt +++ b/src/output_converter/CMakeLists.txt @@ -15,7 +15,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.16) include_directories(${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}/src/ninja diff --git a/src/slope_aspect_grid/CMakeLists.txt b/src/slope_aspect_grid/CMakeLists.txt index 9b16364c8..89d547bb8 100644 --- a/src/slope_aspect_grid/CMakeLists.txt +++ b/src/slope_aspect_grid/CMakeLists.txt @@ -15,7 +15,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.16) include_directories(${PROJECT_SOURCE_DIR}/src/ninja ${GDAL_SYSTEM_INCLUDE} ${GDAL_INCLUDE_DIR}) diff --git a/src/solar_grid/CMakeLists.txt b/src/solar_grid/CMakeLists.txt index 28efb4cdd..3fe476d4d 100644 --- a/src/solar_grid/CMakeLists.txt +++ b/src/solar_grid/CMakeLists.txt @@ -15,7 +15,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.16) include_directories(${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}/src/ninja diff --git a/src/stl_converter/CMakeLists.txt b/src/stl_converter/CMakeLists.txt index 222796ef0..9b482f6a1 100644 --- a/src/stl_converter/CMakeLists.txt +++ b/src/stl_converter/CMakeLists.txt @@ -15,7 +15,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.16) include_directories(${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}/src/ninja diff --git a/src/wrf_to_kmz/CMakeLists.txt b/src/wrf_to_kmz/CMakeLists.txt index c68d69425..d1d6ba760 100644 --- a/src/wrf_to_kmz/CMakeLists.txt +++ b/src/wrf_to_kmz/CMakeLists.txt @@ -15,7 +15,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.16) include_directories(${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}/src/ninja From b29bf5fcf9deab4764d717bde79cc1c5342ae09e Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 22 Sep 2025 13:05:52 -0600 Subject: [PATCH 250/435] Initial proof of concept work of using a ninjaTools class for fetching weather model data, for #667 --- src/gui/weathermodelinput.cpp | 14 +++----------- src/ninja/CMakeLists.txt | 5 ++++- src/ninja/ninjaTools.cpp | 23 +++++++++++++++++++++++ src/ninja/ninjaTools.h | 21 +++++++++++++++++++++ src/ninja/windninja.cpp | 14 ++++++++++++++ src/ninja/windninja.h | 8 ++++++++ 6 files changed, 73 insertions(+), 12 deletions(-) create mode 100644 src/ninja/ninjaTools.cpp create mode 100644 src/ninja/ninjaTools.h diff --git a/src/gui/weathermodelinput.cpp b/src/gui/weathermodelinput.cpp index 388d6ff3e..771506f8d 100644 --- a/src/gui/weathermodelinput.cpp +++ b/src/gui/weathermodelinput.cpp @@ -38,17 +38,9 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) void WeatherModelInput::weatherModelDataDownloadButtonClicked() { - QString wxModelType = ui->weatherModelDataComboBox->currentText(); - QString DEMFile = ui->elevationInputFileLineEdit->property("fullpath").toString(); - int nHours = ui->weatherModelDataSpinBox->value(); - NinjaArmyH *ninjaArmy = nullptr; - char ** options = nullptr; - NinjaErr err = NinjaFetchForecast(ninjaArmy, wxModelType.toUtf8().constData(), nHours, DEMFile.toUtf8().constData(), options); - if(err != NINJA_SUCCESS) - { - qDebug() << "NinjaFetchForecast: err =" << err; - } - + NinjaToolsH* tools; + tools = NinjaMakeTools(); + int NinjaErr = NinjaFetchWeatherData(tools); setUpTreeView(); } diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt index fc591b7cb..d3173b654 100644 --- a/src/ninja/CMakeLists.txt +++ b/src/ninja/CMakeLists.txt @@ -109,7 +109,10 @@ set(NINJA_SOURCES air.cpp wxModelInitializationFactory.cpp wxStation.cpp windninja.cpp - gcp_wx_init.cpp) + gcp_wx_init.cpp + ninjaTools.h + ninjaTools.cpp + windninja.h) if(NINJAFOAM) set(NINJA_SOURCES ${NINJA_SOURCES} ninjafoam.cpp diff --git a/src/ninja/ninjaTools.cpp b/src/ninja/ninjaTools.cpp new file mode 100644 index 000000000..5738441ee --- /dev/null +++ b/src/ninja/ninjaTools.cpp @@ -0,0 +1,23 @@ +#include "ninjaTools.h" + +ninjaTools::ninjaTools() +{ + nNomadsCount = 0; + while( apszNomadsKeys[nNomadsCount][0] != NULL ) + nNomadsCount++; + papoNomads = new NomadsWxModel*[nNomadsCount]; + int i = 0; + while( apszNomadsKeys[i][0] != NULL ) + { + papoNomads[i] = new NomadsWxModel( apszNomadsKeys[i][0] ); + i++; + } + CPLDebug( "WINDNINJA", "Loaded %d NOMADS models", nNomadsCount ); +} + +void ninjaTools::fetchData() +{ + wxModelInitialization *model; + model = papoNomads[0]; + model->fetchForecast( "/home/mason/Downloads/testing/missoula_valley.tif", 36); +} diff --git a/src/ninja/ninjaTools.h b/src/ninja/ninjaTools.h new file mode 100644 index 000000000..93e01465e --- /dev/null +++ b/src/ninja/ninjaTools.h @@ -0,0 +1,21 @@ +#ifndef NINJATOOLS_H +#define NINJATOOLS_H + +#include "ninjaException.h" +#include "wxModelInitializationFactory.h" +#include "nomads_wx_init.h" +#include "gcp_wx_init.h" + +class ninjaTools +{ +public: + ninjaTools(); + void fetchData(); + +private: + int nNomadsCount; + NomadsWxModel **papoNomads; + +}; + +#endif // NINJATOOLS_H diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index ac91e9731..41ec3b539 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -29,6 +29,7 @@ #include "windninja.h" #include "ninjaArmy.h" +#include "ninjaTools.h" #include "ninjaException.h" #ifdef _OPENMP @@ -272,6 +273,19 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakeWeatherModelArmy return NULL; } +WINDNINJADLL_EXPORT NinjaToolsH* NinjaMakeTools() +{ + NinjaToolsH* army; + army = reinterpret_cast(new ninjaTools()); + return army; +} + +WINDNINJADLL_EXPORT NinjaErr NinjaFetchWeatherData(NinjaToolsH* tools) +{ + reinterpret_cast( tools )->fetchData(); + return NINJA_SUCCESS; +} + /** * \brief Destroy a suite of windninja runs. * diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 610de55ac..3c4cc3398 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -75,6 +75,10 @@ WN_C_START //Use structs instead of void * for type checking by C compilier struct NinjaArmyH; typedef struct NinjaArmyH NinjaArmyH; + +struct NinjaToolsH; +typedef struct NinjaToolsH NinjaToolsH; + typedef int NinjaErr; /*----------------------------------------------------------------------------- @@ -95,6 +99,10 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaArmyH * NinjaMakeWeatherModelArmy ( const char * forecastFilename, const char * timezone, bool momentumFlag, char ** options ); + WINDNINJADLL_EXPORT NinjaToolsH * NinjaMakeTools(); + + WINDNINJADLL_EXPORT NinjaErr NinjaFetchWeatherData(NinjaToolsH* tools); + WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationFromBBox (const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char * elevationFile, double buffer, const char* units, const char * timeZone, bool fetchLatestFlag, const char * outputPath, bool locationFileFlag, char ** options ); From e2411ff7907ffc42982801fc132d09914963e923 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 23 Sep 2025 11:57:24 -0600 Subject: [PATCH 251/435] 1st attempt at upgrading ninjaCom methods, to use QSocketNotifier instead of emit SIGNALS. For issue #666 --- src/gui/mainwindow.cpp | 74 +++++++++++++++++++++++++++++++++++++++-- src/gui/mainwindow.h | 6 ++++ src/ninja/ninja.cpp | 4 +++ src/ninja/ninja.h | 1 + src/ninja/ninjaArmy.cpp | 7 ++++ src/ninja/ninjaArmy.h | 10 ++++++ src/ninja/ninjaCom.cpp | 72 ++++++++++++++++++++++++++++----------- src/ninja/ninjaCom.h | 1 + src/ninja/windninja.cpp | 23 +++++++++++++ src/ninja/windninja.h | 3 ++ 10 files changed, 179 insertions(+), 22 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 4d0a2364d..85148c147 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -354,6 +354,47 @@ void MainWindow::updateProgressValue(int run, int progress) progressDialog->setValue(totalProgress); } +void MainWindow::writeComMessage() +{ + char buffer[1024]; + ssize_t n = read(pipeFd[0], buffer, sizeof(buffer) - 1); + if( n > 0 ) + { + buffer[n] = '\0'; + ////writeToConsole(buffer); + + // Break into lines in case multiple messages arrived at once + QString data = QString::fromUtf8(buffer); + QStringList lines = data.split('\n', Qt::SkipEmptyParts); + int runNumber; + int runProgress; + for( int i = 0; i < lines.size(); i++ ) + { + const QString &line = lines[i]; + if( sscanf(buffer, "Run %d (solver): %d%% complete", &runNumber, &runProgress) == 2 ) + { + emit updateProgressValue(runNumber, runProgress); + } + emit updateProgressMessage(line); + writeToConsole(line); + } + } + else if( n == 0 ) + { + // EOF + writeToConsole( "reached end of COM stream file." ); +// notifier->setEnabled(false); +// ::close(pipeFd[0]); + } + else + { + writeToConsole( "Error reading from COM stream file.", Qt::red ); +// notifier.setEnabled(false); +// ::fclose(ninjaComStream); + } +} + + void MainWindow::cancelSolve() { progressDialog->setLabelText("Canceling..."); @@ -789,6 +830,23 @@ void MainWindow::solveButtonClicked() runProgress.push_back(0); } + // Create a pipe for ninjaCom + if( pipe(pipeFd) == -1) + { + qDebug() << "Failed to create pipe for NinjaSetComStream"; + writeToConsole( "Failed to create pipe for NinjaSetComStream", Qt::red ); + } + + ninjaComStream = fdopen(pipeFd[1], "w"); + if (!ninjaComStream) + { + qDebug() << "Failed to open write side of pipe for NinjaSetComStream"; + writeToConsole( "Failed to open write side of pipe for NinjaSetComStream", Qt::red ); + } + + notifier = new QSocketNotifier(pipeFd[0], QSocketNotifier::Read, this); + QObject::connect(notifier, &QSocketNotifier::activated, this, &MainWindow::writeComMessage); + futureWatcher = new QFutureWatcher(this); progressDialog->show(); @@ -1010,6 +1068,13 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i { qDebug() << "NinjaSetCommunication: err =" << err; } + + int err = NinjaSetComStream(ninjaArmy, i, ninjaComStream, papszOptions); + if(err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetComStream: err =" << err; + } + /* * Sets Simulation Variables */ @@ -1026,13 +1091,13 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i } //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::writeToConsole ); // more exact way of doing it - connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ) ); // other way of doing it +// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ) ); // other way of doing it //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::updateProgressMessage ); - connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgressMessage( QString ) ) ); +// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgressMessage( QString ) ) ); //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendProgress, this, &MainWindow::updateProgressValue ); - connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgressValue( int, int ) ) ); +// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgressValue( int, int ) ) ); // // old code style method (see this in the old qt4 gui code) // connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ), Qt::AutoConnection ); @@ -1397,6 +1462,9 @@ void MainWindow::finishedSolve() runProgress.clear(); futureWatcher->deleteLater(); + + notifier->setEnabled(false); + ::close(pipeFd[0]); } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index a5ace7064..af4b00259 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -46,6 +46,7 @@ #include #include #include +#include #include #include #include @@ -124,6 +125,7 @@ private slots: void writeToConsole(QString message, QColor color = Qt::white); void updateProgressValue(int run, int progress); void updateProgressMessage(const QString message); + void writeComMessage(); void cancelSolve(); private: @@ -144,6 +146,10 @@ private slots: int totalProgress; int maxProgress; + int pipeFd[2]; // [0] = read end, [1] = write end + QSocketNotifier* notifier; + FILE* ninjaComStream; + QProgressDialog *progressDialog; QFutureWatcher *futureWatcher; diff --git a/src/ninja/ninja.cpp b/src/ninja/ninja.cpp index 1efa785be..0c8c42edc 100644 --- a/src/ninja/ninja.cpp +++ b/src/ninja/ninja.cpp @@ -3579,6 +3579,10 @@ void ninja::set_ComNumRuns( int nRuns ) input.Com->nRuns = nRuns; } +void ninja::set_ninjaComStream(FILE* stream) +{ + input.Com->ninjaComStream = stream; +} #endif //NINJA_GUI double ninja::get_progressWeight() diff --git a/src/ninja/ninja.h b/src/ninja/ninja.h index e7915731e..2943bfbe4 100644 --- a/src/ninja/ninja.h +++ b/src/ninja/ninja.h @@ -171,6 +171,7 @@ class ninja #ifdef NINJA_GUI int get_ComNumRuns() const; void set_ComNumRuns( int nRuns ); + void set_ninjaComStream(FILE* stream); #endif //NINJA-GUI void set_progressWeight(double progressWeight); //For foam+diurnal simulations double get_progressWeight(); diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 7a5b85f6a..96c21b7f9 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -1364,6 +1364,13 @@ ninjaComClass * ninjaArmy::getNinjaCom( const int nIndex, char ** papszOptions ) } return NULL; //if not valid index } + +int ninjaArmy::setNinjaComStream( const int nIndex, FILE* stream, + char ** papszOptions ) +{ + IF_VALID_INDEX_TRY( nIndex, ninjas, + ninjas[ nIndex ]->set_ninjaComStream( stream ) ); +} #endif //NINJA-GUI /*----------------------------------------------------------------------------- diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 5653a46f4..f999979d5 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -193,6 +193,16 @@ class ninjaArmy * \return com the ninjaComClass of a ninja */ ninjaComClass * getNinjaCom( const int nIndex, char ** papszOptions=NULL ); + + /** + * \brief Initialize the ninja communication FILE stream of a ninja + * + * \param nIndex index of a ninja + * \param stream communication FILE stream + * \return errval Returns NINJA_SUCCESS upon success + */ + int setNinjaComStream( const int nIndex, FILE* stream, + char ** papszOptions = NULL); #endif //NINJA_GUI /*----------------------------------------------------------------------------- diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index b06852e8d..c554744cb 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -350,13 +350,17 @@ void ninjaGUIComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) //Loop over all the runs and send out their progress //even if they aren't doing anything right now //or are finished - emit sendProgress(*runNumber,atoi(ninjaComMsg)); +// emit sendProgress(*runNumber,atoi(ninjaComMsg)); + //fprintf(ninjaComStream, "Run %d\n", *runNumber); + //fflush(ninjaComStream); + //fprintf(ninjaComStream, "(solver): %d%% complete\n", atoi(ninjaComMsg)); + //fflush(ninjaComStream); } } } if(eMsg == ninjaOuterIterProgress) { -// emit sendProgress(*runNumber, atoi(ninjaComMsg) * progressMultiplier[*runNumber]); +//// emit sendProgress(*runNumber, atoi(ninjaComMsg) * progressMultiplier[*runNumber]); //^ old way for(int ix=0;ixsearch for explicitly ~line 565 - emit sendProgress(*runNumber,atoi(ninjaComMsg)); +// emit sendProgress(*runNumber,atoi(ninjaComMsg)); + //fprintf(ninjaComStream, "Run %d\n", *runNumber); + //fflush(ninjaComStream); + //fprintf(ninjaComStream, "(solver): %d%% complete\n", atoi(ninjaComMsg)); + //fflush(ninjaComStream); } } } @@ -380,6 +388,10 @@ void ninjaGUIComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) fprintf(fpLog, "Run %d: More than %d errors have been reported. " "No more will be reported from now on.\n", *runNumber, nMaxErrors); + fprintf(ninjaComStream, "Run %d: More than %d errors have been reported. ", + "No more will be reported from now on.\n", + *runNumber, nMaxErrors); + fflush(ninjaComStream); } //return; } @@ -388,53 +400,75 @@ void ninjaGUIComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) if(eMsg == ninjaNone) //None { fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); - s = "Run " + QString::number(*runNumber) + ": " + ninjaComMsg; +// s = "Run " + QString::number(*runNumber) + ": " + ninjaComMsg; //QMetaObject::invokeMethod((QObject*)this, "sendMessage", // Qt::QueuedConnection, // Q_ARG(QString*, &s), // Q_ARG(QColor, Qt::white)); - emit sendMessage(s); +// emit sendMessage(s); + fprintf(ninjaComStream, "Run %d: %s\n", *runNumber, ninjaComMsg); + fflush(ninjaComStream); } else if(eMsg == ninjaDebug) { //Debug fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); - s = "Run " + QString::number(*runNumber) + ": " + ninjaComMsg; - emit sendMessage(s); +// s = "Run " + QString::number(*runNumber) + ": " + ninjaComMsg; +// emit sendMessage(s); + fprintf(ninjaComStream, "Run %d: %s\n", *runNumber, ninjaComMsg); + fflush(ninjaComStream); } else if(eMsg == ninjaSolverProgress) //Solver progress (%complete) { if(printSolverProgress) { fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); - s = "Run " + QString::number(*runNumber) + " (solver): " + ninjaComMsg + "% done."; - emit sendProgress(*runNumber,atoi(ninjaComMsg)); //Update the progress bar - emit sendMessage(s); +// s = "Run " + QString::number(*runNumber) + " (solver): " + ninjaComMsg + "% done."; +// emit sendProgress(*runNumber,atoi(ninjaComMsg)); //Update the progress bar +// emit sendMessage(s); + //fprintf(ninjaComStream, "Run %d\n", *runNumber); + //fflush(ninjaComStream); + //fprintf(ninjaComStream, "(solver): %d%% complete\n", atoi(ninjaComMsg)); + //fflush(ninjaComStream); + fprintf(ninjaComStream, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + fflush(ninjaComStream); } } else if(eMsg == ninjaOuterIterProgress) //Solver progress (%complete) { fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); - s = "Run " + QString::number(*runNumber) + " (solver): " + ninjaComMsg + "% done."; - emit sendProgress(*runNumber,atoi(ninjaComMsg)); //update the progress bar - emit sendMessage(s); +// s = "Run " + QString::number(*runNumber) + " (solver): " + ninjaComMsg + "% done."; +// emit sendProgress(*runNumber,atoi(ninjaComMsg)); //update the progress bar +// emit sendMessage(s); + //fprintf(ninjaComStream, "Run %d\n", *runNumber); + //fflush(ninjaComStream); + //fprintf(ninjaComStream, "(solver): %d%% complete\n", atoi(ninjaComMsg)); + //fflush(ninjaComStream); + fprintf(ninjaComStream, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + fflush(ninjaComStream); } else if(eMsg == ninjaWarning) //Warnings { fprintf(fpLog, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); - s = "Run " + QString::number(*runNumber) + "(warning): " + ninjaComMsg; - emit sendMessage(s); +// s = "Run " + QString::number(*runNumber) + "(warning): " + ninjaComMsg; +// emit sendMessage(s); + fprintf(ninjaComStream, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); + fflush(ninjaComStream); } else if(eMsg == ninjaFailure) { //Failures (ie errors) fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); - s = "Run " + QString::number(*runNumber) + "(ERROR): " + ninjaComMsg; - emit sendMessage(s); +// s = "Run " + QString::number(*runNumber) + "(ERROR): " + ninjaComMsg; +// emit sendMessage(s); + fprintf(ninjaComStream, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + fflush(ninjaComStream); } else if(eMsg == ninjaFatal) { //Failures (probably fatal) fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); - s = "Run " + QString::number(*runNumber) + "ERROR): " + ninjaComMsg; - emit sendMessage(s); +// s = "Run " + QString::number(*runNumber) + "ERROR): " + ninjaComMsg; +// emit sendMessage(s); + fprintf(ninjaComStream, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + fflush(ninjaComStream); } } #else diff --git a/src/ninja/ninjaCom.h b/src/ninja/ninjaCom.h index 66f514d61..88f34874a 100644 --- a/src/ninja/ninjaCom.h +++ b/src/ninja/ninjaCom.h @@ -65,6 +65,7 @@ class ninjaComClass //virtual base class int *runProgress; int nRuns; int *progressMultiplier; + FILE* ninjaComStream; #endif typedef enum diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index ac91e9731..e353379ab 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -672,6 +672,29 @@ WINDNINJADLL_EXPORT ninjaComClass * NinjaGetCommunication return NINJA_E_NULL_PTR; } } + +/** + * \brief Set the communication handler communication FILE for message communications during simulations. + * + * \param army An opaque handle to a valid ninjaArmy. + * \param nIndex The run to apply the setting to. + * \param ninjaComStream the message communication FILE stream to send messages to. + * + * \return NINJA_SUCCESS on success, non-zero otherwise. + */ +WINDNINJADLL_EXPORT NinjaErr NinjaSetComStream + ( NinjaArmyH * army, const int nIndex, FILE* stream, char ** papszOptions ) +{ + if( NULL != army ) + { + return reinterpret_cast( army )->setNinjaComStream + ( nIndex, stream ); + } + else + { + return NINJA_E_NULL_PTR; + } +} #endif //NINJA_GUI /** diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 610de55ac..2629a519b 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -148,6 +148,9 @@ typedef int NinjaErr; #ifdef NINJA_GUI WINDNINJADLL_EXPORT ninjaComClass * NinjaGetCommunication ( NinjaArmyH * ninjaArmy, const int nIndex, char ** options ); + + WINDNINJADLL_EXPORT NinjaErr NinjaSetComStream + ( NinjaArmyH * ninjaArmy, const int nIndex, FILE* stream, char ** options ); #endif //NINJA_GUI /* Input Parameters */ From e0073b318dcf7886f451cc534c95eabd89ee56a2 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 24 Sep 2025 12:48:39 -0600 Subject: [PATCH 252/435] removed all GUI references and uses from ninjaCom and the cli, for issue #666, related to commit 8a01834162905f5b9890373f2c65391d4798fc9d I was only able to do this because ninjaCom now uses QSocketNotifier methods instead of emit SIGNALS. I also dropped a few unused variables and functions from ninjaCom and ninja --- src/cli/CMakeLists.txt | 13 --- src/gui/mainwindow.cpp | 24 +---- src/gui/mainwindow.h | 1 - src/ninja/CMakeLists.txt | 29 +----- src/ninja/ninja.cpp | 32 ++----- src/ninja/ninja.h | 9 +- src/ninja/ninjaArmy.cpp | 24 +---- src/ninja/ninjaArmy.h | 27 +----- src/ninja/ninjaCom.cpp | 191 +++++++-------------------------------- src/ninja/ninjaCom.h | 39 +------- src/ninja/windninja.cpp | 37 ++------ src/ninja/windninja.h | 8 +- 12 files changed, 67 insertions(+), 367 deletions(-) diff --git a/src/cli/CMakeLists.txt b/src/cli/CMakeLists.txt index e4b8a1d90..2e88bf1d5 100644 --- a/src/cli/CMakeLists.txt +++ b/src/cli/CMakeLists.txt @@ -17,11 +17,6 @@ #cmake_minimum_required(VERSION 3.16) -if(NINJA_GUI) - find_package(QT NAMES Qt6 REQUIRED COMPONENTS Widgets) - find_package(Qt6 REQUIRED COMPONENTS Widgets) -endif(NINJA_GUI) - include_directories(${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}/src/ninja ${Boost_INCLUDE_DIRS} @@ -34,14 +29,6 @@ set(LINK_LIBS ${Boost_LIBRARIES} ${NETCDF_LIBRARIES_C} ${CURL_LIBRARIES}) -if(NINJA_GUI) - set(LINK_LIBS ${LINK_LIBS} - Qt${QT_VERSION_MAJOR}::Widgets) - if(PACKAGE_DEBUG) - message("CLI Linking to Qt Libraries") - endif(PACKAGE_DEBUG) -endif(NINJA_GUI) - if(WIN32 OR APPLE) set(LINK_LIBS ${LINK_LIBS} ${PROJECT_BINARY_DIR}/src/ninja/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}ninja${CMAKE_STATIC_LIBRARY_SUFFIX}) else(WIN32 OR APPLE) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 85148c147..c85ff1fdf 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -394,7 +394,6 @@ void MainWindow::writeComMessage() } } - void MainWindow::cancelSolve() { progressDialog->setLabelText("Canceling..."); @@ -1069,10 +1068,10 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i qDebug() << "NinjaSetCommunication: err =" << err; } - int err = NinjaSetComStream(ninjaArmy, i, ninjaComStream, papszOptions); + int err = NinjaSetMultiComStream(ninjaArmy, i, ninjaComStream, papszOptions); if(err != NINJA_SUCCESS) { - qDebug() << "NinjaSetComStream: err =" << err; + qDebug() << "NinjaSetMultiComStream: err =" << err; } /* @@ -1090,25 +1089,6 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i } } - //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::writeToConsole ); // more exact way of doing it -// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ) ); // other way of doing it - - //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::updateProgressMessage ); -// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgressMessage( QString ) ) ); - - //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendProgress, this, &MainWindow::updateProgressValue ); -// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgressValue( int, int ) ) ); - -// // old code style method (see this in the old qt4 gui code) -// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ), Qt::AutoConnection ); -// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgressMessage( QString ) ), Qt::AutoConnection ); -// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgressValue( int, int ) ), Qt::AutoConnection ); - -// // new code style method, chatgpt seems to prefer this one, though the AutoConnection seems to have slightly better results, well maybe -// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ), Qt::QueuedConnection ); -// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgressMessage( QString ) ), Qt::QueuedConnection ); -// connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgressValue( int, int ) ), Qt::QueuedConnection ); - err = NinjaSetNumberCPUs(ninjaArmy, i, ui->numberOfProcessorsSpinBox->value(), papszOptions); if(err != NINJA_SUCCESS) { diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index af4b00259..0fe13230b 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -39,7 +39,6 @@ #include "weathermodelinput.h" #include "ui_mainwindow.h" #include "appstate.h" -//#include "ninjaCom.h" #include "windninja.h" #include #include diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt index fc591b7cb..e40df01df 100644 --- a/src/ninja/CMakeLists.txt +++ b/src/ninja/CMakeLists.txt @@ -15,17 +15,14 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. -#cmake_minimum_required(VERSION 3.16) -if(NINJA_GUI) - find_package(QT NAMES Qt6 REQUIRED COMPONENTS Widgets) - find_package(Qt6 REQUIRED COMPONENTS Widgets) -endif(NINJA_GUI) +#cmake_minimum_required(VERSION 3.16) if (APPLE) set(CMAKE_MACOSX_RPATH OFF) endif (APPLE) + set(NINJA_INCLUDES ${NETCDF_INCLUDES} ${GDAL_SYSTEM_INCLUDE} ${GDAL_INCLUDE_DIR} ${CURL_INCLUDE_DIRS} @@ -135,16 +132,7 @@ set(LINK_LIBS ${NETCDF_LIBRARIES_C} ${Boost_LIBRARIES}) -if(NINJA_GUI) - set(CMAKE_AUTOUIC ON) - set(CMAKE_AUTOMOC ON) - set(CMAKE_AUTORCC ON) - include_directories(${NINJA_INCLUDES} ${QT_INCLUDES}) - set(NINJA_SOURCES ${NINJA_SOURCES} ${NINJA_LIB_INCLUDES_MOC}) - set(LINK_LIBS ${LINK_LIBS} ${QT_LIBRARIES}) -else(NINJA_GUI) - include_directories(${NINJA_INCLUDES}) -endif(NINJA_GUI) +include_directories(${NINJA_INCLUDES}) if(WIN32) add_library(ninja STATIC ${NINJA_SOURCES}) @@ -158,15 +146,8 @@ else() endif() endif() -message(STATUS "The value of NINJA_GUI in /windninja/src/ninja/CMakeLists.txt is: ${NINJA_GUI}") -if(NINJA_GUI) - target_link_libraries(ninja PUBLIC ${LINK_LIBS} PUBLIC Qt${QT_VERSION_MAJOR}::Widgets) ## needs to be PUBLIC for the gui to properly find these -else(NINJA_GUI) - target_link_libraries(ninja ${LINK_LIBS}) ## auto picks PUBLIC or PRIVATE depending on the need -endif(NINJA_GUI) - +target_link_libraries(ninja ${LINK_LIBS}) -target_compile_definitions(ninja PUBLIC NINJA_GUI) ## needs to be PUBLIC for the cli and the gui to properly find it, for their #ifdef GUI sections target_include_directories(ninja PUBLIC $ $) @@ -175,5 +156,5 @@ install(TARGETS ninja DESTINATION lib COMPONENT libs) if(WIN32) install(TARGETS WindNinjadll DESTINATION ${lib_dest}) endif(WIN32) -install(FILES WindNinjaInputs.h ninja.h gdal_util.h ninjaCom.h windninja.h ninja_errors.h DESTINATION include COMPONENT includes) +install(FILES WindNinjaInputs.h ninja.h gdal_util.h windninja.h ninja_errors.h DESTINATION include COMPONENT includes) diff --git a/src/ninja/ninja.cpp b/src/ninja/ninja.cpp index 0c8c42edc..ae89d58b6 100644 --- a/src/ninja/ninja.cpp +++ b/src/ninja/ninja.cpp @@ -127,6 +127,7 @@ ninja::ninja(const ninja &rhs) { input.Com = NULL; //must be set to null! set_ninjaCommunication(rhs.get_inputsRunNumber(), rhs.get_inputsComType()); +// set_ninjaMultiComStream(rhs.input.Com.multiStream); // is this even a valid way to deal with the FILE* pointer? Seems like there might be smarter ways to do this strcpy( input.lastComString, rhs.get_lastComString() ); input.Com->fpLog = rhs.get_ComLogFp(); @@ -3544,6 +3545,11 @@ void ninja::set_DEM(const double* dem, const int nXSize, const int nYSize, input.dem.readFromMemory(dem, nXSize, nYSize, geoRef, prj); } +void ninja::set_ninjaMultiComStream(FILE* stream) +{ + input.Com->multiStream = stream; +} + int ninja::get_inputsRunNumber() const { return input.inputsRunNumber; @@ -3563,32 +3569,6 @@ FILE * ninja::get_ComLogFp() const { return input.Com->fpLog; } -ninjaComClass * ninja::get_Com() const -{ - return input.Com; -} - -#ifdef NINJA_GUI -int ninja::get_ComNumRuns() const -{ - return input.Com->nRuns; -} - -void ninja::set_ComNumRuns( int nRuns ) -{ - input.Com->nRuns = nRuns; -} - -void ninja::set_ninjaComStream(FILE* stream) -{ - input.Com->ninjaComStream = stream; -} -#endif //NINJA_GUI - -double ninja::get_progressWeight() -{ - return input.Com->progressWeight; -} void ninja::set_progressWeight(double progressWeight) { diff --git a/src/ninja/ninja.h b/src/ninja/ninja.h index 2943bfbe4..04a8e5989 100644 --- a/src/ninja/ninja.h +++ b/src/ninja/ninja.h @@ -163,18 +163,13 @@ class ninja /*----------------------------------------------------------------------------- * ninjaCom section *-----------------------------------------------------------------------------*/ + void set_ninjaMultiComStream(FILE* stream); int get_inputsRunNumber() const; ninjaComClass::eNinjaCom get_inputsComType() const; char * get_lastComString() const; FILE * get_ComLogFp() const; //returns the Com Log file pointer - ninjaComClass * get_Com() const; //returns the Com object -#ifdef NINJA_GUI - int get_ComNumRuns() const; - void set_ComNumRuns( int nRuns ); - void set_ninjaComStream(FILE* stream); -#endif //NINJA-GUI void set_progressWeight(double progressWeight); //For foam+diurnal simulations - double get_progressWeight(); + /************************************************************* kyle's fx's for importing several file types through GDAL function lives in readInputFile.cpp for now. diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 96c21b7f9..0cae695df 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -1348,31 +1348,13 @@ int ninjaArmy::setNinjaCommunication( const int nIndex, std::string comType, return retval; } -#ifdef NINJA_GUI -int ninjaArmy::setNinjaComNumRuns( const int nIndex, const int RunNumber, - char ** papszOptions ) +int ninjaArmy::setNinjaMultiComStream( const int nIndex, FILE* stream, + char ** papszOptions ) { IF_VALID_INDEX_TRY( nIndex, ninjas, - ninjas[ nIndex ]->set_ComNumRuns( RunNumber ) ); + ninjas[ nIndex ]->set_ninjaMultiComStream( stream ) ); } -ninjaComClass * ninjaArmy::getNinjaCom( const int nIndex, char ** papszOptions ) -{ - IF_VALID_INDEX( nIndex, ninjas ) - { - return ninjas[ nIndex ]->get_Com(); - } - return NULL; //if not valid index -} - -int ninjaArmy::setNinjaComStream( const int nIndex, FILE* stream, - char ** papszOptions ) -{ - IF_VALID_INDEX_TRY( nIndex, ninjas, - ninjas[ nIndex ]->set_ninjaComStream( stream ) ); -} -#endif //NINJA-GUI - /*----------------------------------------------------------------------------- * Ninja Speed Testing Methods *-----------------------------------------------------------------------------*/ diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index f999979d5..3d69dec30 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -175,35 +175,16 @@ class ninjaArmy int setNinjaCommunication( const int nIndex, std::string comType, char ** papszOptions = NULL); -#ifdef NINJA_GUI - /** - * \brief Set the number of runs for a ninjaCom - * - * \param nIndex index of a ninja - * \param RunNumber number of runs - * \return errval Returns NINJA_SUCCESS upon success - */ - int setNinjaComNumRuns( const int nIndex, const int RunNumber, - char ** papszOptions=NULL ); - - /** - * \brief Returns the ninjaCom for a ninja - * - * \param nIndex index of a ninja - * \return com the ninjaComClass of a ninja - */ - ninjaComClass * getNinjaCom( const int nIndex, char ** papszOptions=NULL ); /** - * \brief Initialize the ninja communication FILE stream of a ninja + * \brief Initialize the message communication multi-stream FILE of a ninja * * \param nIndex index of a ninja - * \param stream communication FILE stream + * \param stream communication multi-stream FILE of a ninja * \return errval Returns NINJA_SUCCESS upon success */ - int setNinjaComStream( const int nIndex, FILE* stream, - char ** papszOptions = NULL); -#endif //NINJA_GUI + int setNinjaMultiComStream( const int nIndex, FILE* stream, + char ** papszOptions = NULL); /*----------------------------------------------------------------------------- * Ninja speed testing Methods diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index c554744cb..7afa8f84e 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -43,14 +43,6 @@ ninjaComClass::ninjaComClass() nMaxErrors = 10; printSolverProgress = true; progressWeight = 1.0; - -#ifdef NINJA_GUI - progressMultiplier = 0; - nRuns = 0; - runProgress = 0; -#endif - - } /** @@ -276,32 +268,9 @@ void ninjaLoggingComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComM fprintf(fpLog, "\nERROR: %s\n", ninjaComMsg); } -#ifdef NINJA_GUI //********************************************************************** // ninjaGUIComHandler() //********************************************************************** -/** -* Constructor for ninjaGUIComHandler. -* @return -*/ -ninjaGUIComHandler::ninjaGUIComHandler() : ninjaComClass() -{ - verbose = true; -} - -/** -* Destructor for ninjaGUIComHandler. -* @return -*/ -ninjaGUIComHandler::~ninjaGUIComHandler() -{ - if(progressMultiplier) - { - delete[] progressMultiplier; - progressMultiplier = 0; - } -} - /** * Communication handler for "GUI" WindNinja simulations. * @param eMsg Type of message to be passed. See msgType for available types. @@ -309,75 +278,14 @@ ninjaGUIComHandler::~ninjaGUIComHandler() */ void ninjaGUIComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { - QString s; //char* lastMsg; //pointer to last message, points to char in WindNinjaInputs class //int* runNumber; //pointer to run number, points to int in WindNinjaInputs class - int nThreads = 1; + /* Trouble */ if( runNumber == NULL ) return; -#ifdef _OPENMP - nThreads = omp_get_num_threads(); -#endif - QCoreApplication::processEvents(); - - if(progressMultiplier == 0) - { - progressMultiplier = new int[nRuns]; - int nFullChunks = nRuns / nThreads; - - for(int i = 0;i < nFullChunks;i++) - { - for(int j = 1;j <= nThreads;j++) - progressMultiplier[i * j] = nThreads; - } - - int nDone = nFullChunks * nThreads; - int nLeft = nRuns - nDone; - for(int i = 0;i < nLeft;i++) - progressMultiplier[nDone + i] = nLeft; - } - if(*runNumber % nThreads == 0 || nRuns == 1) - { - if(eMsg == ninjaSolverProgress) - { - if(printSolverProgress) - { - for(int ix=0;ixsearch for explicitly ~line 565 -// emit sendProgress(*runNumber,atoi(ninjaComMsg)); - //fprintf(ninjaComStream, "Run %d\n", *runNumber); - //fflush(ninjaComStream); - //fprintf(ninjaComStream, "(solver): %d%% complete\n", atoi(ninjaComMsg)); - //fflush(ninjaComStream); - } - } - } if (eMsg==ninjaFailure || eMsg==ninjaFatal) { errorCount++; @@ -388,98 +296,69 @@ void ninjaGUIComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) fprintf(fpLog, "Run %d: More than %d errors have been reported. " "No more will be reported from now on.\n", *runNumber, nMaxErrors); - fprintf(ninjaComStream, "Run %d: More than %d errors have been reported. ", + + fprintf(multiStream, "Run %d: More than %d errors have been reported. ", "No more will be reported from now on.\n", *runNumber, nMaxErrors); - fflush(ninjaComStream); + fflush(multiStream); } //return; } } - if(eMsg == ninjaNone) //None + if(eMsg == ninjaNone) //None { fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); -// s = "Run " + QString::number(*runNumber) + ": " + ninjaComMsg; - //QMetaObject::invokeMethod((QObject*)this, "sendMessage", - // Qt::QueuedConnection, - // Q_ARG(QString*, &s), - // Q_ARG(QColor, Qt::white)); -// emit sendMessage(s); - fprintf(ninjaComStream, "Run %d: %s\n", *runNumber, ninjaComMsg); - fflush(ninjaComStream); + + fprintf(multiStream, "Run %d: %s\n", *runNumber, ninjaComMsg); + fflush(multiStream); } - else if(eMsg == ninjaDebug) - { //Debug + else if(eMsg == ninjaDebug) //Debug + { fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); -// s = "Run " + QString::number(*runNumber) + ": " + ninjaComMsg; -// emit sendMessage(s); - fprintf(ninjaComStream, "Run %d: %s\n", *runNumber, ninjaComMsg); - fflush(ninjaComStream); + + fprintf(multiStream, "Run %d: %s\n", *runNumber, ninjaComMsg); + fflush(multiStream); } - else if(eMsg == ninjaSolverProgress) //Solver progress (%complete) + else if(eMsg == ninjaSolverProgress) //Solver progress (%complete) { if(printSolverProgress) { fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); -// s = "Run " + QString::number(*runNumber) + " (solver): " + ninjaComMsg + "% done."; -// emit sendProgress(*runNumber,atoi(ninjaComMsg)); //Update the progress bar -// emit sendMessage(s); - //fprintf(ninjaComStream, "Run %d\n", *runNumber); - //fflush(ninjaComStream); - //fprintf(ninjaComStream, "(solver): %d%% complete\n", atoi(ninjaComMsg)); - //fflush(ninjaComStream); - fprintf(ninjaComStream, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); - fflush(ninjaComStream); + + fprintf(multiStream, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + fflush(multiStream); } } - else if(eMsg == ninjaOuterIterProgress) //Solver progress (%complete) + else if(eMsg == ninjaOuterIterProgress) //Solver progress (%complete) { fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); -// s = "Run " + QString::number(*runNumber) + " (solver): " + ninjaComMsg + "% done."; -// emit sendProgress(*runNumber,atoi(ninjaComMsg)); //update the progress bar -// emit sendMessage(s); - //fprintf(ninjaComStream, "Run %d\n", *runNumber); - //fflush(ninjaComStream); - //fprintf(ninjaComStream, "(solver): %d%% complete\n", atoi(ninjaComMsg)); - //fflush(ninjaComStream); - fprintf(ninjaComStream, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); - fflush(ninjaComStream); + + fprintf(multiStream, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + fflush(multiStream); } - else if(eMsg == ninjaWarning) //Warnings + else if(eMsg == ninjaWarning) //Warnings { fprintf(fpLog, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); -// s = "Run " + QString::number(*runNumber) + "(warning): " + ninjaComMsg; -// emit sendMessage(s); - fprintf(ninjaComStream, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); - fflush(ninjaComStream); + + fprintf(multiStream, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); + fflush(multiStream); } - else if(eMsg == ninjaFailure) - { //Failures (ie errors) + else if(eMsg == ninjaFailure) //Failures (ie errors) + { fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); -// s = "Run " + QString::number(*runNumber) + "(ERROR): " + ninjaComMsg; -// emit sendMessage(s); - fprintf(ninjaComStream, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); - fflush(ninjaComStream); + + fprintf(multiStream, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + fflush(multiStream); } - else if(eMsg == ninjaFatal) - { //Failures (probably fatal) + else if(eMsg == ninjaFatal) //Failures (probably fatal) + { fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); -// s = "Run " + QString::number(*runNumber) + "ERROR): " + ninjaComMsg; -// emit sendMessage(s); - fprintf(ninjaComStream, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); - fflush(ninjaComStream); - } -} -#else -//********************************************************************** -// ninjaGUIComHandler() for jason -//********************************************************************** -void ninjaGUIComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) -{ + fprintf(multiStream, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + fflush(multiStream); + } } -#endif // NINJA_GUI //********************************************************************** // ninjaWFDSSComHandler() diff --git a/src/ninja/ninjaCom.h b/src/ninja/ninjaCom.h index 88f34874a..459e3a807 100644 --- a/src/ninja/ninjaCom.h +++ b/src/ninja/ninjaCom.h @@ -38,36 +38,15 @@ #include #include -#ifdef _OPENMP -#include "omp.h" -#endif - -#ifdef NINJA_GUI -#include -#include -#include -#include -#endif - #define NINJA_MSG_SIZE 1000 class ninjaComClass //virtual base class -#ifdef NINJA_GUI - : public QObject -#endif { public: ninjaComClass(); virtual ~ninjaComClass(); double progressWeight; -#ifdef NINJA_GUI - int *runProgress; - int nRuns; - int *progressMultiplier; - FILE* ninjaComStream; -#endif - typedef enum { ninjaNone, @@ -94,6 +73,7 @@ class ninjaComClass //virtual base class eNinjaCom* comType; //pointer to communication type, should point to eNinjaCom in WindNinjaInputs class FILE* fpLog; + FILE* multiStream; int errorCount; //running error count int nMaxErrors; //max number of errors to report @@ -133,28 +113,13 @@ class ninjaLoggingComHandler : public ninjaComClass //concrete class virtual void ninjaComHandler(msgType eMsg, const char *ninjaComMsg); }; -#ifndef NINJA_GUI + class ninjaGUIComHandler : public ninjaComClass //concrete class { public: virtual void ninjaComHandler(msgType eMsg, const char *ninjaComMsg); }; -#else -class ninjaGUIComHandler : public ninjaComClass //concrete class -{ - Q_OBJECT - public: - ninjaGUIComHandler(); - ~ninjaGUIComHandler(); - bool verbose; - virtual void ninjaComHandler(msgType eMsg, const char *ninjaComMsg); - - signals: - void sendProgress(int run, int progress); - void sendMessage(QString message, QColor color = Qt::white); -}; -#endif // NINJA_GUI class ninjaWFDSSComHandler : public ninjaComClass //concrete class { diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index e353379ab..e29a4b65d 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -651,43 +651,20 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetCommunication } /** - * \brief Get the set communication handler for a given simulation. - * only useable with the GUI - * - * \param army An opaque handle to a valid ninjaArmy. - * \param nIndex The run to get the communication handler from, that has already been created by a call to NinjaSetCommunication. - * - * \return a pointer to the ninjaComClass of the given ninja on success, a NULL pointer otherwise. - */ -#ifdef NINJA_GUI -WINDNINJADLL_EXPORT ninjaComClass * NinjaGetCommunication - ( NinjaArmyH * army, const int nIndex, char ** papszOptions ) -{ - if( NULL != army ) - { - return reinterpret_cast( army )->getNinjaCom( nIndex ); - } - else - { - return NINJA_E_NULL_PTR; - } -} - -/** - * \brief Set the communication handler communication FILE for message communications during simulations. + * \brief Set the multi-stream FILE, for message communications during simulations. * * \param army An opaque handle to a valid ninjaArmy. * \param nIndex The run to apply the setting to. - * \param ninjaComStream the message communication FILE stream to send messages to. + * \param stream The message communication FILE to send multi-stream messages to. * * \return NINJA_SUCCESS on success, non-zero otherwise. */ -WINDNINJADLL_EXPORT NinjaErr NinjaSetComStream +WINDNINJADLL_EXPORT NinjaErr NinjaSetMultiComStream ( NinjaArmyH * army, const int nIndex, FILE* stream, char ** papszOptions ) { if( NULL != army ) { - return reinterpret_cast( army )->setNinjaComStream + return reinterpret_cast( army )->setNinjaMultiComStream ( nIndex, stream ); } else @@ -695,7 +672,6 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetComStream return NINJA_E_NULL_PTR; } } -#endif //NINJA_GUI /** * \brief Set the DEM to use for the simulations. @@ -2442,8 +2418,6 @@ WINDNINJADLL_EXPORT NinjaErr NinjaCheckTimeDuration } -} - /*----------------------------------------------------------------------------- * Helper Methods *-----------------------------------------------------------------------------*/ @@ -2470,3 +2444,6 @@ WINDNINJADLL_EXPORT NinjaErr NinjaWriteBlankWxStationFile( const char * outputSt return NINJA_E_NULL_PTR; } } + + +} // extern "C" diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 2629a519b..68d24fcad 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -27,7 +27,6 @@ * *****************************************************************************/ #include "ninja_errors.h" -#include "ninjaCom.h" /*----------------------------------------------------------------------------- * Macros for Compilation Compatibility with gcc and g++ *-----------------------------------------------------------------------------*/ @@ -145,13 +144,8 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaSetCommunication ( NinjaArmyH * ninjaArmy, const int nIndex, const char * comType, char ** options ); -#ifdef NINJA_GUI - WINDNINJADLL_EXPORT ninjaComClass * NinjaGetCommunication - ( NinjaArmyH * ninjaArmy, const int nIndex, char ** options ); - - WINDNINJADLL_EXPORT NinjaErr NinjaSetComStream + WINDNINJADLL_EXPORT NinjaErr NinjaSetMultiComStream ( NinjaArmyH * ninjaArmy, const int nIndex, FILE* stream, char ** options ); -#endif //NINJA_GUI /* Input Parameters */ WINDNINJADLL_EXPORT NinjaErr NinjaSetInputSpeed From 55d9655aea05e7b7894eeb2f49da623b7bb67e7d Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 24 Sep 2025 12:54:41 -0600 Subject: [PATCH 253/435] improved ninjaCom function ordering in ninja, related to issue #666 --- src/ninja/ninja.cpp | 54 ++++++++++++++++++++++----------------------- src/ninja/ninja.h | 2 +- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/ninja/ninja.cpp b/src/ninja/ninja.cpp index ae89d58b6..3ae7fc93c 100644 --- a/src/ninja/ninja.cpp +++ b/src/ninja/ninja.cpp @@ -3545,6 +3545,33 @@ void ninja::set_DEM(const double* dem, const int nXSize, const int nYSize, input.dem.readFromMemory(dem, nXSize, nYSize, geoRef, prj); } +void ninja::set_ninjaCommunication(int RunNumber, ninjaComClass::eNinjaCom comType) +{ + input.inputsComType = comType; + + if(input.Com) + delete input.Com; + + if(comType == ninjaComClass::ninjaDefaultCom) + input.Com = new ninjaDefaultComHandler(); + else if(comType == ninjaComClass::ninjaQuietCom) + input.Com = new ninjaQuietComHandler(); + else if(comType == ninjaComClass::ninjaLoggingCom) + input.Com = new ninjaLoggingComHandler(); + else if(comType == ninjaComClass::ninjaGUICom) + input.Com = new ninjaGUIComHandler(); + else if(comType == ninjaComClass::WFDSSCom) + input.Com = new ninjaWFDSSComHandler(); + else if(comType == ninjaComClass::ninjaCLICom) + input.Com = new ninjaCLIComHandler(); + else + input.Com = new ninjaDefaultComHandler(); + + input.inputsRunNumber = RunNumber; + input.Com->runNumber = &input.inputsRunNumber; + input.Com->lastMsg = input.lastComString; +} + void ninja::set_ninjaMultiComStream(FILE* stream) { input.Com->multiStream = stream; @@ -5232,33 +5259,6 @@ double ninja::getFuelBedDepth(int fuelModel) return (depthInFeet * 0.3048); } -void ninja::set_ninjaCommunication(int RunNumber, ninjaComClass::eNinjaCom comType) -{ - input.inputsComType = comType; - - if(input.Com) - delete input.Com; - - if(comType == ninjaComClass::ninjaDefaultCom) - input.Com = new ninjaDefaultComHandler(); - else if(comType == ninjaComClass::ninjaQuietCom) - input.Com = new ninjaQuietComHandler(); - else if(comType == ninjaComClass::ninjaLoggingCom) - input.Com = new ninjaLoggingComHandler(); - else if(comType == ninjaComClass::ninjaGUICom) - input.Com = new ninjaGUIComHandler(); - else if(comType == ninjaComClass::WFDSSCom) - input.Com = new ninjaWFDSSComHandler(); - else if(comType == ninjaComClass::ninjaCLICom) - input.Com = new ninjaCLIComHandler(); - else - input.Com = new ninjaDefaultComHandler(); - - input.inputsRunNumber = RunNumber; - input.Com->runNumber = &input.inputsRunNumber; - input.Com->lastMsg = input.lastComString; -} - void ninja::checkInputs() { //check for invalid characters in DEM name diff --git a/src/ninja/ninja.h b/src/ninja/ninja.h index 04a8e5989..59fffee63 100644 --- a/src/ninja/ninja.h +++ b/src/ninja/ninja.h @@ -163,6 +163,7 @@ class ninja /*----------------------------------------------------------------------------- * ninjaCom section *-----------------------------------------------------------------------------*/ + void set_ninjaCommunication(int RunNumber, ninjaComClass::eNinjaCom comType); void set_ninjaMultiComStream(FILE* stream); int get_inputsRunNumber() const; ninjaComClass::eNinjaCom get_inputsComType() const; @@ -362,7 +363,6 @@ class ninja double getFuelBedDepth(int fuelModel); - void set_ninjaCommunication(int RunNumber, ninjaComClass::eNinjaCom comType); void checkInputs(); void dumpMemory(); From 28519d41333684d0acb7996254c3b4b23088f537 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 24 Sep 2025 12:56:24 -0600 Subject: [PATCH 254/435] Added API functions to get model identifiers, start and end hours, and fetch model data via GUI, for #637 and #667 --- src/gui/mainwindow.ui | 5 --- src/gui/weathermodelinput.cpp | 45 ++++++++++++++++++++-- src/gui/weathermodelinput.h | 6 +-- src/ninja/ninjaTools.cpp | 71 ++++++++++++++++++++++++++++++----- src/ninja/ninjaTools.h | 14 +++---- src/ninja/windninja.cpp | 56 ++++++++++++++++++++++++++- src/ninja/windninja.h | 10 ++++- 7 files changed, 176 insertions(+), 31 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 8342136fc..30c991b32 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -2199,11 +2199,6 @@ li.checked::marker { content: "\2612"; } PointingHandCursor - - - NOMADS-HRRR-CONUS-3-KM - - diff --git a/src/gui/weathermodelinput.cpp b/src/gui/weathermodelinput.cpp index 771506f8d..e23d975a0 100644 --- a/src/gui/weathermodelinput.cpp +++ b/src/gui/weathermodelinput.cpp @@ -33,17 +33,56 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) : QObject(parent), ui(ui) { + tools = NinjaMakeTools(); + int count = 0; + const char** identifiers = NinjaGetAllWeatherModelIdentifiers(tools, &count); + for (int i = 0; i < count; i++) + { + ui->weatherModelDataComboBox->addItem(identifiers[i]); + } + NinjaFreeAllWeatherModelIdentifiers(identifiers, count); + connect(ui->weatherModelDataDownloadButton, &QPushButton::clicked, this, &WeatherModelInput::weatherModelDataDownloadButtonClicked); + connect(ui->weatherModelDataComboBox, &QComboBox::currentIndexChanged, this, &WeatherModelInput::weatherModelDataComboBoxCurrentIndexChanged); + + weatherModelDataComboBoxCurrentIndexChanged(0); } void WeatherModelInput::weatherModelDataDownloadButtonClicked() { - NinjaToolsH* tools; - tools = NinjaMakeTools(); - int NinjaErr = NinjaFetchWeatherData(tools); + QByteArray modelNameByte = ui->weatherModelDataComboBox->currentText().toUtf8(); + QByteArray demFileByte = ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8(); + + const char* modelName = modelNameByte.constData(); + const char* demFile = demFileByte.constData(); + int hours = ui->weatherModelDataSpinBox->value(); + + int err = NinjaFetchWeatherData(tools, modelName, demFile, hours); + if (err != NINJA_SUCCESS) + { + qDebug() << "NinjaFetchWeatherData: " << err; + } + setUpTreeView(); } +void WeatherModelInput::weatherModelDataComboBoxCurrentIndexChanged(int index) +{ + int starHour, endHour; + + QByteArray modelNameByte = ui->weatherModelDataComboBox->currentText().toUtf8(); + const char* modelName = modelNameByte.constData(); + + int NinjaErr = NinjaGetWeatherModelHours(tools, modelName, &starHour, &endHour); + if (NinjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaGetWeatherModelHours: " << NinjaErr; + } + ui->weatherModelDataSpinBox->setMinimum(starHour); + ui->weatherModelDataSpinBox->setMaximum(endHour); + ui->weatherModelDataSpinBox->setValue(starHour); +} + void WeatherModelInput::setUpTreeView() { weatherModelFileSystemModel = new QFileSystemModel(this); diff --git a/src/gui/weathermodelinput.h b/src/gui/weathermodelinput.h index 322ef178a..7ef9f6dbd 100644 --- a/src/gui/weathermodelinput.h +++ b/src/gui/weathermodelinput.h @@ -54,12 +54,12 @@ private slots: void weatherModelDataDownloadButtonClicked(); void weatherModelDataTreeViewItemSelectionChanged(); void weatherModelGroupBoxToggled(bool checked); + void weatherModelDataComboBoxCurrentIndexChanged(int index); private: - Ui::MainWindow *ui; + Ui::MainWindow *ui; + NinjaToolsH* tools; QFileSystemModel *weatherModelFileSystemModel; - - }; #endif // WEATHERMODELINPUT_H diff --git a/src/ninja/ninjaTools.cpp b/src/ninja/ninjaTools.cpp index 5738441ee..9025c4fda 100644 --- a/src/ninja/ninjaTools.cpp +++ b/src/ninja/ninjaTools.cpp @@ -2,22 +2,73 @@ ninjaTools::ninjaTools() { - nNomadsCount = 0; - while( apszNomadsKeys[nNomadsCount][0] != NULL ) - nNomadsCount++; - papoNomads = new NomadsWxModel*[nNomadsCount]; + nomadsCount = 0; + while( apszNomadsKeys[nomadsCount][0] != NULL ) + { + nomadsCount++; + } + nomadsModels = new NomadsWxModel*[nomadsCount]; int i = 0; while( apszNomadsKeys[i][0] != NULL ) { - papoNomads[i] = new NomadsWxModel( apszNomadsKeys[i][0] ); + nomadsModels[i] = new NomadsWxModel( apszNomadsKeys[i][0] ); i++; } - CPLDebug( "WINDNINJA", "Loaded %d NOMADS models", nNomadsCount ); + CPLDebug( "WINDNINJA", "Loaded %d NOMADS models", nomadsCount ); +} + +void ninjaTools::fetchWeatherModelData(const char* modelName, const char* demFile, int hours) +{ + wxModelInitialization *model = NULL; + for(int i = 0; i < nomadsCount; i++) + { + if(nomadsModels[i]->getForecastIdentifier() == modelName) + { + model = nomadsModels[i]; + break; + } + } + + if (!model) { + throw std::runtime_error(std::string("Weather model not found: ") + modelName); + } + + model->fetchForecast(demFile, hours); +} + +std::vector ninjaTools::getForecastIdentifiers() +{ + for(int i = 0; i < nomadsCount; i++) + { + modelIdentifiers.push_back(nomadsModels[i]->getForecastIdentifier()); + } + return modelIdentifiers; } -void ninjaTools::fetchData() +int ninjaTools::getStartHour(const char* modelIdentifier) { - wxModelInitialization *model; - model = papoNomads[0]; - model->fetchForecast( "/home/mason/Downloads/testing/missoula_valley.tif", 36); + wxModelInitialization *model = NULL; + for(int i = 0; i < nomadsCount; i++) + { + if(nomadsModels[i]->getForecastIdentifier() == modelIdentifier) + { + model = nomadsModels[i]; + break; + } + } + return model->getStartHour(); +} + +int ninjaTools::getEndHour(const char* modelIdentifier) +{ + wxModelInitialization *model = NULL; + for(int i = 0; i < nomadsCount; i++) + { + if(nomadsModels[i]->getForecastIdentifier() == modelIdentifier) + { + model = nomadsModels[i]; + break; + } + } + return model->getEndHour(); } diff --git a/src/ninja/ninjaTools.h b/src/ninja/ninjaTools.h index 93e01465e..b98a97cca 100644 --- a/src/ninja/ninjaTools.h +++ b/src/ninja/ninjaTools.h @@ -1,21 +1,21 @@ #ifndef NINJATOOLS_H #define NINJATOOLS_H -#include "ninjaException.h" -#include "wxModelInitializationFactory.h" #include "nomads_wx_init.h" -#include "gcp_wx_init.h" class ninjaTools { public: ninjaTools(); - void fetchData(); + void fetchWeatherModelData(const char* modelName, const char* demFile, int hours); + std::vector getForecastIdentifiers(); + int getStartHour(const char*modelIdentifier); + int getEndHour(const char* modelIdentifer); private: - int nNomadsCount; - NomadsWxModel **papoNomads; - + int nomadsCount; + NomadsWxModel** nomadsModels; + std::vector modelIdentifiers; }; #endif // NINJATOOLS_H diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 41ec3b539..68b253f22 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -280,9 +280,61 @@ WINDNINJADLL_EXPORT NinjaToolsH* NinjaMakeTools() return army; } -WINDNINJADLL_EXPORT NinjaErr NinjaFetchWeatherData(NinjaToolsH* tools) +WINDNINJADLL_EXPORT NinjaErr NinjaFetchWeatherData(NinjaToolsH* tools, const char* modelName, const char* demFile, int hours) { - reinterpret_cast( tools )->fetchData(); + if(tools != NULL) + { + reinterpret_cast( tools )->fetchWeatherModelData(modelName, demFile, hours); + return NINJA_SUCCESS; + } + else + { + return NINJA_E_NULL_PTR; + } +} + +WINDNINJADLL_EXPORT const char** NinjaGetAllWeatherModelIdentifiers(NinjaToolsH* tools, int* count) +{ + if (!tools || !count) + return nullptr; + + std::vector temp = reinterpret_cast(tools)->getForecastIdentifiers(); + *count = static_cast(temp.size()); + + const char** identifiers = new const char*[*count]; + for (int i = 0; i < *count; i++) + { + char* identifier = new char[temp[i].size() + 1]; + std::strcpy(identifier, temp[i].c_str()); + identifiers[i] = identifier; + } + + return identifiers; +} + +WINDNINJADLL_EXPORT NinjaErr NinjaFreeAllWeatherModelIdentifiers(const char** identifiers, int count) +{ + if (!identifiers) + return NINJA_E_NULL_PTR; + + char** ids = (char**)identifiers; + for (int i = 0; i < count; ++i) { + delete[] ids[i]; + } + delete[] ids; + + return NINJA_SUCCESS; +} + +WINDNINJADLL_EXPORT NinjaErr NinjaGetWeatherModelHours + (NinjaToolsH* tools, const char* modelIdentifier, int* startHour, int* endHour) +{ + if (!tools || !startHour || !endHour) + return NINJA_E_NULL_PTR; + + *startHour = reinterpret_cast(tools)->getStartHour(modelIdentifier); + *endHour = reinterpret_cast(tools)->getEndHour(modelIdentifier); + return NINJA_SUCCESS; } diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 3c4cc3398..e1223f30a 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -101,7 +101,15 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaToolsH * NinjaMakeTools(); - WINDNINJADLL_EXPORT NinjaErr NinjaFetchWeatherData(NinjaToolsH* tools); + WINDNINJADLL_EXPORT NinjaErr NinjaFetchWeatherData + (NinjaToolsH* tools, const char* modelName, const char* demFile, int hours); + + WINDNINJADLL_EXPORT const char** NinjaGetAllWeatherModelIdentifiers(NinjaToolsH* tools, int* count); + + WINDNINJADLL_EXPORT NinjaErr NinjaGetWeatherModelHours + (NinjaToolsH* tools, const char* modelIdentifier, int* starHours, int* endHour); + + WINDNINJADLL_EXPORT NinjaErr NinjaFreeAllWeatherModelIdentifiers(const char** identifiers, int count); WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationFromBBox (const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char * elevationFile, double buffer, const char* units, const char * timeZone, bool fetchLatestFlag, const char * outputPath, bool locationFileFlag, char ** options ); From f1ed61e55c32941f4b94c2e2d9af4d89a62abb43 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 24 Sep 2025 13:52:25 -0600 Subject: [PATCH 255/435] Adjusted names of GUI widgets, for #637 --- src/gui/mainwindow.ui | 123 ++++++++++++++++------------------ src/gui/weathermodelinput.cpp | 45 ++++++------- src/gui/weathermodelinput.h | 6 +- 3 files changed, 84 insertions(+), 90 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 30c991b32..fd2980202 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -2164,7 +2164,7 @@ li.checked::marker { content: "\2612"; } 0 0 572 - 639 + 637 @@ -2191,69 +2191,64 @@ li.checked::marker { content: "\2612"; } Download Weather Data - + - - - - - PointingHandCursor - - - - - - - PointingHandCursor - - - - - - hours - - - 1 - - - 1 - - - - - - - PointingHandCursor - - - Download Data - - - - :/server_go.png:/server_go.png - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - + + + + 0 + 0 + + + + PointingHandCursor + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + + + + hours + + + 1 + + + 1 + + + + + + + PointingHandCursor + + + Download + + + + :/server_go.png:/server_go.png + + - + 0 @@ -2280,7 +2275,7 @@ li.checked::marker { content: "\2612"; } 0 - + 0 @@ -2293,7 +2288,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -2324,9 +2319,9 @@ li.checked::marker { content: "\2612"; } - + - + Qt::Orientation::Horizontal @@ -2610,8 +2605,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 414 - 408 + 578 + 588 diff --git a/src/gui/weathermodelinput.cpp b/src/gui/weathermodelinput.cpp index e23d975a0..66adab4fe 100644 --- a/src/gui/weathermodelinput.cpp +++ b/src/gui/weathermodelinput.cpp @@ -38,24 +38,24 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) const char** identifiers = NinjaGetAllWeatherModelIdentifiers(tools, &count); for (int i = 0; i < count; i++) { - ui->weatherModelDataComboBox->addItem(identifiers[i]); + ui->weatherModelComboBox->addItem(identifiers[i]); } NinjaFreeAllWeatherModelIdentifiers(identifiers, count); - connect(ui->weatherModelDataDownloadButton, &QPushButton::clicked, this, &WeatherModelInput::weatherModelDataDownloadButtonClicked); - connect(ui->weatherModelDataComboBox, &QComboBox::currentIndexChanged, this, &WeatherModelInput::weatherModelDataComboBoxCurrentIndexChanged); + connect(ui->weatherModelDownloadButton, &QPushButton::clicked, this, &WeatherModelInput::weatherModelDownloadButtonClicked); + connect(ui->weatherModelComboBox, &QComboBox::currentIndexChanged, this, &WeatherModelInput::weatherModelComboBoxCurrentIndexChanged); - weatherModelDataComboBoxCurrentIndexChanged(0); + weatherModelComboBoxCurrentIndexChanged(0); } -void WeatherModelInput::weatherModelDataDownloadButtonClicked() +void WeatherModelInput::weatherModelDownloadButtonClicked() { - QByteArray modelNameByte = ui->weatherModelDataComboBox->currentText().toUtf8(); + QByteArray modelNameByte = ui->weatherModelComboBox->currentText().toUtf8(); QByteArray demFileByte = ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8(); const char* modelName = modelNameByte.constData(); const char* demFile = demFileByte.constData(); - int hours = ui->weatherModelDataSpinBox->value(); + int hours = ui->weatherModelSpinBox->value(); int err = NinjaFetchWeatherData(tools, modelName, demFile, hours); if (err != NINJA_SUCCESS) @@ -66,11 +66,11 @@ void WeatherModelInput::weatherModelDataDownloadButtonClicked() setUpTreeView(); } -void WeatherModelInput::weatherModelDataComboBoxCurrentIndexChanged(int index) +void WeatherModelInput::weatherModelComboBoxCurrentIndexChanged(int index) { int starHour, endHour; - QByteArray modelNameByte = ui->weatherModelDataComboBox->currentText().toUtf8(); + QByteArray modelNameByte = ui->weatherModelComboBox->currentText().toUtf8(); const char* modelName = modelNameByte.constData(); int NinjaErr = NinjaGetWeatherModelHours(tools, modelName, &starHour, &endHour); @@ -78,9 +78,8 @@ void WeatherModelInput::weatherModelDataComboBoxCurrentIndexChanged(int index) { qDebug() << "NinjaGetWeatherModelHours: " << NinjaErr; } - ui->weatherModelDataSpinBox->setMinimum(starHour); - ui->weatherModelDataSpinBox->setMaximum(endHour); - ui->weatherModelDataSpinBox->setValue(starHour); + ui->weatherModelSpinBox->setMinimum(starHour); + ui->weatherModelSpinBox->setMaximum(endHour); } void WeatherModelInput::setUpTreeView() @@ -94,27 +93,27 @@ void WeatherModelInput::setUpTreeView() weatherModelFileSystemModel->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); weatherModelFileSystemModel->setNameFilterDisables(false); - ui->weatherModelDataTreeView->setModel(weatherModelFileSystemModel); - ui->weatherModelDataTreeView->setRootIndex(weatherModelFileSystemModel->index(fileInfo.absolutePath())); - ui->weatherModelDataTreeView->setSelectionMode(QAbstractItemView::MultiSelection); - ui->weatherModelDataTreeView->setSelectionBehavior(QAbstractItemView::SelectRows); - ui->weatherModelDataTreeView->setAnimated(true); - ui->weatherModelDataTreeView->setUniformRowHeights(true); + ui->weatherModelFileTreeView->setModel(weatherModelFileSystemModel); + ui->weatherModelFileTreeView->setRootIndex(weatherModelFileSystemModel->index(fileInfo.absolutePath())); + ui->weatherModelFileTreeView->setSelectionMode(QAbstractItemView::MultiSelection); + ui->weatherModelFileTreeView->setSelectionBehavior(QAbstractItemView::SelectRows); + ui->weatherModelFileTreeView->setAnimated(true); + ui->weatherModelFileTreeView->setUniformRowHeights(true); - QHeaderView *header = ui->weatherModelDataTreeView->header(); + QHeaderView *header = ui->weatherModelFileTreeView->header(); header->setStretchLastSection(false); header->setSectionResizeMode(0, QHeaderView::Stretch); header->resizeSection(0, 400); header->setSectionResizeMode(3, QHeaderView::ResizeToContents); header->setSectionResizeMode(1, QHeaderView::ResizeToContents); - ui->weatherModelDataTreeView->hideColumn(1); - ui->weatherModelDataTreeView->hideColumn(2); + ui->weatherModelFileTreeView->hideColumn(1); + ui->weatherModelFileTreeView->hideColumn(2); - connect(ui->weatherModelDataTreeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &WeatherModelInput::weatherModelDataTreeViewItemSelectionChanged); + connect(ui->weatherModelFileTreeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged); } -void WeatherModelInput::weatherModelDataTreeViewItemSelectionChanged() +void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged() { } diff --git a/src/gui/weathermodelinput.h b/src/gui/weathermodelinput.h index 7ef9f6dbd..dd6b5a926 100644 --- a/src/gui/weathermodelinput.h +++ b/src/gui/weathermodelinput.h @@ -51,10 +51,10 @@ class WeatherModelInput : public QObject void requestRefresh(); private slots: - void weatherModelDataDownloadButtonClicked(); - void weatherModelDataTreeViewItemSelectionChanged(); + void weatherModelDownloadButtonClicked(); + void weatherModelFileTreeViewItemSelectionChanged(); void weatherModelGroupBoxToggled(bool checked); - void weatherModelDataComboBoxCurrentIndexChanged(int index); + void weatherModelComboBoxCurrentIndexChanged(int index); private: Ui::MainWindow *ui; From 39fa909dbd2fd5bdff8f11721c3e91ca02e58ea1 Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 26 Sep 2025 14:33:35 -0600 Subject: [PATCH 256/435] an attempt at making the new QSocketNotifier ninjaCom method cross platform compatible, but no way to test it without being able to compile on windows. For issue #666 --- src/gui/mainwindow.cpp | 30 +++++++++++++++++++++++++++++- src/gui/mainwindow.h | 5 +++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index c85ff1fdf..2a822d51d 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -357,7 +357,11 @@ void MainWindow::updateProgressValue(int run, int progress) void MainWindow::writeComMessage() { char buffer[1024]; +#ifdef WIN32 + int n = _read(pipeFdWin[0], buffer, sizeof(buffer) - 1); +#else // WIN32 ssize_t n = read(pipeFd[0], buffer, sizeof(buffer) - 1); +#endif // WIN32 if( n > 0 ) { buffer[n] = '\0'; @@ -829,6 +833,27 @@ void MainWindow::solveButtonClicked() runProgress.push_back(0); } +#ifdef WIN32 + // Create a pipe for ninjaCom + if( _pipe(pipeFdWin, 4096, O_BINARY) == -1 ) + { + qDebug() << "Failed to create pipe for NinjaSetComStream"; + writeToConsole( "Failed to create pipe for NinjaSetComStream", Qt::red ); + } + + // Wrap write end in FILE* + ninjaComStream = _fdopen(_dup(pipeFdWin[1]), "w"); + if( !ninjaComStream ) + { + qDebug() << "Failed to open write side of pipe for NinjaSetComStream"; + writeToConsole( "Failed to open write side of pipe for NinjaSetComStream", Qt::red ); + } + + // Create notifier for read end + HANDLE hRead = (HANDLE)_get_osfhandle(pipeFdWin[0]); + notifier = new QWinEventNotifier(hRead, this); + connect(notifier, &QWinEventNotifier::activated, this, &MainWindow::writeComMessage); +#else // WIN32 // Create a pipe for ninjaCom if( pipe(pipeFd) == -1) { @@ -836,15 +861,18 @@ void MainWindow::solveButtonClicked() writeToConsole( "Failed to create pipe for NinjaSetComStream", Qt::red ); } + // Wrap write end in FILE* ninjaComStream = fdopen(pipeFd[1], "w"); - if (!ninjaComStream) + if( !ninjaComStream ) { qDebug() << "Failed to open write side of pipe for NinjaSetComStream"; writeToConsole( "Failed to open write side of pipe for NinjaSetComStream", Qt::red ); } + // Create notifier for read end notifier = new QSocketNotifier(pipeFd[0], QSocketNotifier::Read, this); QObject::connect(notifier, &QSocketNotifier::activated, this, &MainWindow::writeComMessage); +#endif // WIN32 futureWatcher = new QFutureWatcher(this); diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 0fe13230b..b3722447f 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -145,8 +145,13 @@ private slots: int totalProgress; int maxProgress; +#ifdef WIN32 + intptr_t pipeFdWin[2]; // [0] = read end, [1] = write end + QWinEventNotifier* notifier; +#else // WIN32 int pipeFd[2]; // [0] = read end, [1] = write end QSocketNotifier* notifier; +#endif // WIN32 FILE* ninjaComStream; QProgressDialog *progressDialog; From 5a35905040a7bd72b8718a6e70940697a70caeac Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 29 Sep 2025 11:47:00 -0600 Subject: [PATCH 257/435] 2nd attempt at upgrading ninjaCom methods, to use a callback function instead of QSocketNotifier or emit SIGNALS. For issue #666 note that this method is basically the same as using a GDALProgressFunction(), like is done for the wxModel progress bar, just I guess we are defining the methods ourselves. I disabled the use of the QSocketNotifier FILE* messages, and the stdout log printing in ninjaCom, for the testing of this method. --- src/gui/mainwindow.cpp | 40 ++++++++++++++++++++++++++++---- src/gui/mainwindow.h | 2 ++ src/ninja/ninja.cpp | 6 +++++ src/ninja/ninja.h | 3 +++ src/ninja/ninjaArmy.cpp | 7 ++++++ src/ninja/ninjaArmy.h | 5 ++++ src/ninja/ninjaCom.cpp | 51 ++++++++++++++++++++++++++++++++--------- src/ninja/ninjaCom.h | 5 ++++ src/ninja/windninja.cpp | 14 +++++++++++ src/ninja/windninja.h | 5 ++++ 10 files changed, 123 insertions(+), 15 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 2a822d51d..273e431c8 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -354,6 +354,32 @@ void MainWindow::updateProgressValue(int run, int progress) progressDialog->setValue(totalProgress); } +void MainWindow::updateProgressCallback(const char *pszMessage, void *pUser) +{ + MainWindow *self = static_cast(pUser); + + std::string msg = pszMessage; + if( msg.substr(msg.size()-1, 1) == "\n") + { + msg = msg.substr(0, msg.size()-1); + } + + qDebug() << msg.c_str(); + + int runNumber; + int runProgress; + if( sscanf(msg.c_str(), "Run %d (solver): %d%% complete", &runNumber, &runProgress) == 2 ) + { + QMetaObject::invokeMethod(self, [=]() { + self->updateProgressValue(runNumber, runProgress); + }, Qt::QueuedConnection); + } + QMetaObject::invokeMethod(self, [=]() { + self->updateProgressMessage(QString::fromStdString(msg)); + self->writeToConsole(QString::fromStdString(msg)); + }, Qt::QueuedConnection); +} + void MainWindow::writeComMessage() { char buffer[1024]; @@ -377,10 +403,10 @@ void MainWindow::writeComMessage() const QString &line = lines[i]; if( sscanf(buffer, "Run %d (solver): %d%% complete", &runNumber, &runProgress) == 2 ) { - emit updateProgressValue(runNumber, runProgress); +// emit updateProgressValue(runNumber, runProgress); } - emit updateProgressMessage(line); - writeToConsole(line); +// emit updateProgressMessage(line); +// writeToConsole(line); } } else if( n == 0 ) @@ -1096,7 +1122,13 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i qDebug() << "NinjaSetCommunication: err =" << err; } - int err = NinjaSetMultiComStream(ninjaArmy, i, ninjaComStream, papszOptions); + err = NinjaSetComProgressFunc(ninjaArmy, i, &MainWindow::updateProgressCallback, this, papszOptions); + if(err != NINJA_SUCCESS) + { + qDebug() << "NinjaSetProgressFunc: err =" << err; + } + + err = NinjaSetMultiComStream(ninjaArmy, i, ninjaComStream, papszOptions); if(err != NINJA_SUCCESS) { qDebug() << "NinjaSetMultiComStream: err =" << err; diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index b3722447f..ecb974872 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -145,6 +145,8 @@ private slots: int totalProgress; int maxProgress; + static void updateProgressCallback(const char *pszMessage, void *pUser); + #ifdef WIN32 intptr_t pipeFdWin[2]; // [0] = read end, [1] = write end QWinEventNotifier* notifier; diff --git a/src/ninja/ninja.cpp b/src/ninja/ninja.cpp index 3ae7fc93c..d6083ee09 100644 --- a/src/ninja/ninja.cpp +++ b/src/ninja/ninja.cpp @@ -3572,6 +3572,12 @@ void ninja::set_ninjaCommunication(int RunNumber, ninjaComClass::eNinjaCom comTy input.Com->lastMsg = input.lastComString; } +void ninja::set_ninjaComProgressFunc(ProgressFunc func, void *pUser) +{ + input.Com->pfnProgress = func; + input.Com->pProgressUser = pUser; +} + void ninja::set_ninjaMultiComStream(FILE* stream) { input.Com->multiStream = stream; diff --git a/src/ninja/ninja.h b/src/ninja/ninja.h index 59fffee63..2a3ab5bc3 100644 --- a/src/ninja/ninja.h +++ b/src/ninja/ninja.h @@ -119,6 +119,8 @@ //#define NINJA_DEBUG //#define NINJA_DEBUG_VERBOSE +typedef void (*ProgressFunc)(const char *pszMessage, void *pUser); + class ninja { public: @@ -164,6 +166,7 @@ class ninja * ninjaCom section *-----------------------------------------------------------------------------*/ void set_ninjaCommunication(int RunNumber, ninjaComClass::eNinjaCom comType); + void set_ninjaComProgressFunc(ProgressFunc func, void *pUser); void set_ninjaMultiComStream(FILE* stream); int get_inputsRunNumber() const; ninjaComClass::eNinjaCom get_inputsComType() const; diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 0cae695df..941ff0e52 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -1348,6 +1348,13 @@ int ninjaArmy::setNinjaCommunication( const int nIndex, std::string comType, return retval; } +int ninjaArmy::setNinjaComProgressFunc( const int nIndex, ProgressFunc func, void *pUser, + char ** papszOptions ) +{ + IF_VALID_INDEX_TRY( nIndex, ninjas, + ninjas[ nIndex ]->set_ninjaComProgressFunc( func, pUser ) ); +} + int ninjaArmy::setNinjaMultiComStream( const int nIndex, FILE* stream, char ** papszOptions ) { diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 3d69dec30..7810120a2 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -107,6 +107,8 @@ extern boost::local_time::tz_database globalTimeZoneDB; return NINJA_E_INVALID; #endif +typedef void (*ProgressFunc)(const char *pszMessage, void *pUser); + //#include "ninjaCom.h" /** * Class used for doing multiple WindNinja runs. @@ -173,6 +175,9 @@ class ninjaArmy const ninjaComClass::eNinjaCom comType, char ** papszOptions = NULL ); + int setNinjaComProgressFunc( const int nIndex, ProgressFunc func, void *pUser, + char ** papszOptions = NULL); + int setNinjaCommunication( const int nIndex, std::string comType, char ** papszOptions = NULL); diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index 7afa8f84e..6cb0ef69d 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -39,6 +39,8 @@ ninjaComClass::ninjaComClass() lastMsg = NULL; runNumber = NULL; comType = NULL; + pfnProgress = nullptr; + pProgressUser = nullptr; errorCount = 0; nMaxErrors = 10; printSolverProgress = true; @@ -281,11 +283,12 @@ void ninjaGUIComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) //char* lastMsg; //pointer to last message, points to char in WindNinjaInputs class //int* runNumber; //pointer to run number, points to int in WindNinjaInputs class + char msg[NINJA_MSG_SIZE]; // Declare a character array to store the result of sprintf, for printing + /* Trouble */ if( runNumber == NULL ) return; - if (eMsg==ninjaFailure || eMsg==ninjaFatal) { errorCount++; @@ -293,14 +296,19 @@ void ninjaGUIComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if(errorCount == nMaxErrors+1) { - fprintf(fpLog, "Run %d: More than %d errors have been reported. " - "No more will be reported from now on.\n", - *runNumber, nMaxErrors); + //fprintf(fpLog, "Run %d: More than %d errors have been reported. " + // "No more will be reported from now on.\n", + // *runNumber, nMaxErrors); fprintf(multiStream, "Run %d: More than %d errors have been reported. ", "No more will be reported from now on.\n", *runNumber, nMaxErrors); fflush(multiStream); + + sprintf( msg, "Run %d: More than %d errors have been reported. ", + "No more will be reported from now on.\n", + *runNumber, nMaxErrors ); + pfnProgress(msg, pProgressUser); } //return; } @@ -308,55 +316,76 @@ void ninjaGUIComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) if(eMsg == ninjaNone) //None { - fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); + //fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); fprintf(multiStream, "Run %d: %s\n", *runNumber, ninjaComMsg); fflush(multiStream); + + sprintf( msg, "Run %d: %s\n", *runNumber, ninjaComMsg ); + pfnProgress(msg, pProgressUser); } else if(eMsg == ninjaDebug) //Debug { - fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); + //fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); fprintf(multiStream, "Run %d: %s\n", *runNumber, ninjaComMsg); fflush(multiStream); + + sprintf( msg, "Run %d: %s\n", *runNumber, ninjaComMsg ); + pfnProgress(msg, pProgressUser); } else if(eMsg == ninjaSolverProgress) //Solver progress (%complete) { if(printSolverProgress) { - fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + //fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); fprintf(multiStream, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); fflush(multiStream); + + sprintf( msg, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg) ); + pfnProgress(msg, pProgressUser); } } else if(eMsg == ninjaOuterIterProgress) //Solver progress (%complete) { - fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + //fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); fprintf(multiStream, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); fflush(multiStream); + + sprintf( msg, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg) ); + pfnProgress(msg, pProgressUser); } else if(eMsg == ninjaWarning) //Warnings { - fprintf(fpLog, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); + //fprintf(fpLog, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); fprintf(multiStream, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); fflush(multiStream); + + sprintf( msg, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg ); + pfnProgress(msg, pProgressUser); } else if(eMsg == ninjaFailure) //Failures (ie errors) { - fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + //fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); fprintf(multiStream, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); fflush(multiStream); + + sprintf( msg, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg ); + pfnProgress(msg, pProgressUser); } else if(eMsg == ninjaFatal) //Failures (probably fatal) { - fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + //fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); fprintf(multiStream, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); fflush(multiStream); + + sprintf( msg, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg ); + pfnProgress(msg, pProgressUser); } } diff --git a/src/ninja/ninjaCom.h b/src/ninja/ninjaCom.h index 459e3a807..c44948ad8 100644 --- a/src/ninja/ninjaCom.h +++ b/src/ninja/ninjaCom.h @@ -40,6 +40,8 @@ #define NINJA_MSG_SIZE 1000 +typedef void (*ProgressFunc)(const char *pszMessage, void *pUser); + class ninjaComClass //virtual base class { public: @@ -72,6 +74,9 @@ class ninjaComClass //virtual base class int* runNumber; //pointer to run number, points to int in WindNinjaInputs class eNinjaCom* comType; //pointer to communication type, should point to eNinjaCom in WindNinjaInputs class + ProgressFunc pfnProgress; + void *pProgressUser; + FILE* fpLog; FILE* multiStream; diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index e29a4b65d..1570c619e 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -650,6 +650,20 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetCommunication } } +WINDNINJADLL_EXPORT NinjaErr NinjaSetComProgressFunc + ( NinjaArmyH * army, const int nIndex, ProgressFunc func, void *pUser, char ** papszOptions ) +{ + if( NULL != army ) + { + return reinterpret_cast( army )->setNinjaComProgressFunc + ( nIndex, func, pUser ); + } + else + { + return NINJA_E_NULL_PTR; + } +} + /** * \brief Set the multi-stream FILE, for message communications during simulations. * diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 68d24fcad..ce4a8339d 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -76,6 +76,8 @@ struct NinjaArmyH; typedef struct NinjaArmyH NinjaArmyH; typedef int NinjaErr; +typedef void (*ProgressFunc)(const char *pszMessage, void *pUser); + /*----------------------------------------------------------------------------- * Contructor/Destructors *-----------------------------------------------------------------------------*/ @@ -144,6 +146,9 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaSetCommunication ( NinjaArmyH * ninjaArmy, const int nIndex, const char * comType, char ** options ); + WINDNINJADLL_EXPORT NinjaErr NinjaSetComProgressFunc + ( NinjaArmyH * ninjaArmy, const int nIndex, ProgressFunc func, void *pUser, char ** options ); + WINDNINJADLL_EXPORT NinjaErr NinjaSetMultiComStream ( NinjaArmyH * ninjaArmy, const int nIndex, FILE* stream, char ** options ); From 81ebbe34c161f328b9b5e524c82613f085251a7d Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 29 Sep 2025 12:45:06 -0600 Subject: [PATCH 258/435] alternative working method for the ninjaCom callback function, use emit signals instead of QMetaObject::invokeMethod() lambda functions. Allows declaring the callback function without MainWindow:: definitions, though lose access to QMetaObject::invokeMethod() methods. For issue #666 --- src/gui/mainwindow.cpp | 19 ++++++++++--------- src/gui/mainwindow.h | 7 +++++-- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 273e431c8..471ff5e6a 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -354,7 +354,8 @@ void MainWindow::updateProgressValue(int run, int progress) progressDialog->setValue(totalProgress); } -void MainWindow::updateProgressCallback(const char *pszMessage, void *pUser) +//static void updateProgressCallback(const char *pszMessage, void *pUser) +void updateProgressCallback(const char *pszMessage, void *pUser) // this still worked?? huh. { MainWindow *self = static_cast(pUser); @@ -370,14 +371,10 @@ void MainWindow::updateProgressCallback(const char *pszMessage, void *pUser) int runProgress; if( sscanf(msg.c_str(), "Run %d (solver): %d%% complete", &runNumber, &runProgress) == 2 ) { - QMetaObject::invokeMethod(self, [=]() { - self->updateProgressValue(runNumber, runProgress); - }, Qt::QueuedConnection); + emit self->updateProgressValueSignal(runNumber, runProgress); } - QMetaObject::invokeMethod(self, [=]() { - self->updateProgressMessage(QString::fromStdString(msg)); - self->writeToConsole(QString::fromStdString(msg)); - }, Qt::QueuedConnection); + emit self->updateProgressMessageSignal(QString::fromStdString(msg)); + emit self->writeToConsoleSignal(QString::fromStdString(msg)); } void MainWindow::writeComMessage() @@ -578,6 +575,10 @@ void MainWindow::connectSignals() connect(domainAverageInput, &DomainAverageInput::requestRefresh, this, &MainWindow::refreshUI); connect(pointInitializationInput, &PointInitializationInput::requestRefresh, this, &MainWindow::refreshUI); connect(weatherModelInput, &WeatherModelInput::requestRefresh, this, &MainWindow::refreshUI); + + connect(this, &MainWindow::updateProgressValueSignal, this, &MainWindow::updateProgressValue, Qt::QueuedConnection); + connect(this, &MainWindow::updateProgressMessageSignal, this, &MainWindow::updateProgressMessage, Qt::QueuedConnection); + connect(this, &MainWindow::writeToConsoleSignal, this, &MainWindow::writeToConsole, Qt::QueuedConnection); } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) @@ -1122,7 +1123,7 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i qDebug() << "NinjaSetCommunication: err =" << err; } - err = NinjaSetComProgressFunc(ninjaArmy, i, &MainWindow::updateProgressCallback, this, papszOptions); + err = NinjaSetComProgressFunc(ninjaArmy, i, &updateProgressCallback, this, papszOptions); if(err != NINJA_SUCCESS) { qDebug() << "NinjaSetProgressFunc: err =" << err; diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index ecb974872..3900e7608 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -102,6 +102,11 @@ class MainWindow : public QMainWindow MainWindow(QWidget *parent = nullptr); ~MainWindow(); +signals: + void updateProgressValueSignal(int run, int progress); + void updateProgressMessageSignal(const QString &msg); + void writeToConsoleSignal(const QString &msg, QColor color = Qt::white); + private slots: void massSolverCheckBoxClicked(); void momentumSolverCheckBoxClicked(); @@ -145,8 +150,6 @@ private slots: int totalProgress; int maxProgress; - static void updateProgressCallback(const char *pszMessage, void *pUser); - #ifdef WIN32 intptr_t pipeFdWin[2]; // [0] = read end, [1] = write end QWinEventNotifier* notifier; From fd3a21e1f6c8acb9b179f3b3dcc3421a304f0f43 Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 29 Sep 2025 12:46:15 -0600 Subject: [PATCH 259/435] moved ninjaCom callback function typedef(), to a single shared header file, avoid code duplication at least a little bit. For issue #666 --- src/ninja/CMakeLists.txt | 1 + src/ninja/callbackFunctions.h | 6 ++++++ src/ninja/ninja.h | 2 +- src/ninja/ninjaArmy.h | 2 +- src/ninja/ninjaCom.h | 2 +- src/ninja/windninja.h | 2 +- 6 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 src/ninja/callbackFunctions.h diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt index e40df01df..6ca9aab92 100644 --- a/src/ninja/CMakeLists.txt +++ b/src/ninja/CMakeLists.txt @@ -33,6 +33,7 @@ set(NINJA_SOURCES air.cpp ascii_grid.cpp Array2D.cpp Aspect.cpp + callbackFunctions.h cellDiurnal.cpp cli.cpp domainAverageInitialization.cpp diff --git a/src/ninja/callbackFunctions.h b/src/ninja/callbackFunctions.h new file mode 100644 index 000000000..bea31814c --- /dev/null +++ b/src/ninja/callbackFunctions.h @@ -0,0 +1,6 @@ +#ifndef CALLBACKFUNCTIONS_H +#define CALLBACKFUNCTIONS_H + +typedef void (*ProgressFunc)(const char *pszMessage, void *pUser); + +#endif // CALLBACKFUNCTIONS diff --git a/src/ninja/ninja.h b/src/ninja/ninja.h index 2a3ab5bc3..040a13d32 100644 --- a/src/ninja/ninja.h +++ b/src/ninja/ninja.h @@ -119,7 +119,7 @@ //#define NINJA_DEBUG //#define NINJA_DEBUG_VERBOSE -typedef void (*ProgressFunc)(const char *pszMessage, void *pUser); +#include "callbackFunctions.h" class ninja { diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 7810120a2..026cd4e56 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -107,7 +107,7 @@ extern boost::local_time::tz_database globalTimeZoneDB; return NINJA_E_INVALID; #endif -typedef void (*ProgressFunc)(const char *pszMessage, void *pUser); +#include "callbackFunctions.h" //#include "ninjaCom.h" /** diff --git a/src/ninja/ninjaCom.h b/src/ninja/ninjaCom.h index c44948ad8..b72368921 100644 --- a/src/ninja/ninjaCom.h +++ b/src/ninja/ninjaCom.h @@ -40,7 +40,7 @@ #define NINJA_MSG_SIZE 1000 -typedef void (*ProgressFunc)(const char *pszMessage, void *pUser); +#include "callbackFunctions.h" class ninjaComClass //virtual base class { diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index ce4a8339d..a9cb28153 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -76,7 +76,7 @@ struct NinjaArmyH; typedef struct NinjaArmyH NinjaArmyH; typedef int NinjaErr; -typedef void (*ProgressFunc)(const char *pszMessage, void *pUser); +#include "callbackFunctions.h" /*----------------------------------------------------------------------------- * Contructor/Destructors From 734feddbbd34474096a0e001d2440f3618819cc0 Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 29 Sep 2025 19:34:48 -0600 Subject: [PATCH 260/435] 1st attempt at refactoring ninjaCom, to remove the need for the various ninjaComHandler() classes, for issue #666 succeeded in dropping the various ninjaComHandler() classes from ninjaCom, though every bit of the logic differences between the various ninjaComHandler() classes was also dropped. I also did my best to refactor as little as possible, in such a way that git diff wouldn't get confused when showing the changes, so there is still cleanup to do even with this commit. But, while the cli stdout is accidentally commented out, the gui is running fine for this commit. --- src/ninja/ninja.cpp | 20 +-- src/ninja/ninjaCom.cpp | 361 +++++++---------------------------------- src/ninja/ninjaCom.h | 47 +----- 3 files changed, 68 insertions(+), 360 deletions(-) diff --git a/src/ninja/ninja.cpp b/src/ninja/ninja.cpp index d6083ee09..b99bb86f5 100644 --- a/src/ninja/ninja.cpp +++ b/src/ninja/ninja.cpp @@ -81,8 +81,8 @@ ninja::ninja() input.lastComString[0] = '\0'; input.inputsRunNumber = 0; input.inputsComType = ninjaComClass::ninjaDefaultCom; - input.Com = new ninjaDefaultComHandler(); - + input.Com = new ninjaComClass(); + input.Com->comType = &input.inputsComType; } /**Ninja destructor @@ -3552,20 +3552,8 @@ void ninja::set_ninjaCommunication(int RunNumber, ninjaComClass::eNinjaCom comTy if(input.Com) delete input.Com; - if(comType == ninjaComClass::ninjaDefaultCom) - input.Com = new ninjaDefaultComHandler(); - else if(comType == ninjaComClass::ninjaQuietCom) - input.Com = new ninjaQuietComHandler(); - else if(comType == ninjaComClass::ninjaLoggingCom) - input.Com = new ninjaLoggingComHandler(); - else if(comType == ninjaComClass::ninjaGUICom) - input.Com = new ninjaGUIComHandler(); - else if(comType == ninjaComClass::WFDSSCom) - input.Com = new ninjaWFDSSComHandler(); - else if(comType == ninjaComClass::ninjaCLICom) - input.Com = new ninjaCLIComHandler(); - else - input.Com = new ninjaDefaultComHandler(); + input.Com = new ninjaComClass(); + input.Com->comType = &input.inputsComType; input.inputsRunNumber = RunNumber; input.Com->runNumber = &input.inputsRunNumber; diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index 6cb0ef69d..c6016a1a2 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -103,182 +103,15 @@ void ninjaComClass::ninjaComV(msgType eMsg, const char *fmt, va_list args) //} -//********************************************************************** -// ninjaDefaultComHandler() -//********************************************************************** /** -* Communication handler for "Default" WindNinja simulations. Prints everything to stdout. Normally used for command line type runs. -* @param eMsg Type of message to be passed. See msgType for available types. -* @param ninjaComMsg Message to be printed. Comes from ninjaComV and ninjaCom. -*/ -void ninjaDefaultComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) -{ - fpLog = stdout; //print to standard out - bool printRunNum = true; //flag to determine if thread number should be printed at beginning of message - - if(printRunNum == true) //if run number should be printed at beginning of message - { - if (eMsg==ninjaFailure || eMsg==ninjaFatal) - { - errorCount++; - if (errorCount > nMaxErrors && nMaxErrors > 0) - { - if(errorCount == nMaxErrors+1) - { - fprintf(fpLog, "Run %d: More than %d errors have been reported. " - "No more will be reported from now on.\n", - *runNumber, nMaxErrors); - } - return; - } - } - - if(eMsg == ninjaNone) //None - fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); -#ifdef NINJA_DEBUG - else if(eMsg == ninjaDebug) //Debug - fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); -#endif //NINJA_DEBUG - else if(eMsg == ninjaSolverProgress) //Solver progress (%complete) - { if(printSolverProgress){ - if(atoi(ninjaComMsg) > 99){ - fprintf(fpLog, "Run %d (solver): 99%% complete\n", *runNumber); - } - else - fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); - } - } - else if(eMsg == ninjaOuterIterProgress) //Solver progress for outer matching iterations (%complete) - fprintf(fpLog, "Run %d (matching): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); - else if(eMsg == ninjaWarning) //Warnings - fprintf(fpLog, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); - else if(eMsg == ninjaFailure) //Failures (ie errors) - fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); - else if(eMsg == ninjaFatal) //Failures (probably fatal) - fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); - - }else{ //if run number should NOT be printed at beginning of message - - if (eMsg==ninjaFailure || eMsg==ninjaFatal) - { - errorCount++; - if (errorCount > nMaxErrors && nMaxErrors > 0) - { - if(errorCount == nMaxErrors+1) - { - fprintf(fpLog, "More than %d errors have been reported. " - "No more will be reported from now on.\n", - nMaxErrors); - } - return; - } - } - - if(eMsg == ninjaNone) //None - fprintf(fpLog, "%s\n", ninjaComMsg); -#ifdef NINJA_DEBUG - else if(eMsg == ninjaDebug) //Debug - fprintf(fpLog, "%s\n", ninjaComMsg); -#endif //NINJA_DEBUG - else if(eMsg == ninjaSolverProgress) //Solver progress (%complete) - { - if(printSolverProgress) - fprintf(fpLog, "Solver: %d%% complete\n", atoi(ninjaComMsg)); - } - else if(eMsg == ninjaOuterIterProgress) //Solver progress for outer matching iterations (%complete) - fprintf(fpLog, "Solver (matching): %d%% complete\n", atoi(ninjaComMsg)); - else if(eMsg == ninjaWarning) //Warnings - fprintf(fpLog, "\nWarning: %s\n", ninjaComMsg); - else if(eMsg == ninjaFailure) //Failures (ie errors) - fprintf(fpLog, "\nERROR: %s\n", ninjaComMsg); - else if(eMsg == ninjaFatal) //Failures (probably fatal) - fprintf(fpLog, "\nERROR: %s\n", ninjaComMsg); - } -} - - -//********************************************************************** -// ninjaQuietComHandler() -//********************************************************************** -/** -* Communication handler for "Quiet" WindNinja simulations. Only prints ninjaFailure and ninjaFatal messages. Prints everything to stdout. -* @param eMsg Type of message to be passed. See msgType for available types. -* @param ninjaComMsg Message to be printed. Comes from ninjaComV and ninjaCom. -*/ -void ninjaQuietComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) -{ - if(eMsg==ninjaFailure || eMsg==ninjaFatal) - { - fpLog = stdout; //print to standard out - - if (eMsg==ninjaFailure || eMsg==ninjaFatal) - { - errorCount++; - if (errorCount > nMaxErrors && nMaxErrors > 0) - { - if(errorCount == nMaxErrors+1) - { - fprintf(fpLog, "More than %d errors have been reported. " - "No more will be reported from now on.\n", - nMaxErrors); - } - return; - } - } - - if(eMsg == ninjaFailure) //Failures (ie errors) - fprintf(fpLog, "\nERROR: %s\n", ninjaComMsg); - else if(eMsg == ninjaFatal) //Failures (probably fatal) - fprintf(fpLog, "\nERROR: %s\n", ninjaComMsg); - } -} - - -//********************************************************************** -// ninjaLoggingComHandler() -//********************************************************************** -/** -* Communication handler that prints everything out to a file called ninja.log. -* @param eMsg Type of message to be passed. See msgType for available types. -* @param ninjaComMsg Message to be printed. Comes from ninjaComV and ninjaCom. -*/ -void ninjaLoggingComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) -{ - - fpLog = fopen("ninja.log", "w+"); - if(fpLog==NULL) - return; - - if(eMsg == ninjaNone) //None - fprintf(fpLog, "%s\n", ninjaComMsg); -#ifdef NINJA_DEBUG - else if(eMsg == ninjaDebug) //Debug - fprintf(fpLog, "%s\n", ninjaComMsg); -#endif //NINJA_DEBUG - else if(eMsg == ninjaSolverProgress) //Solver progress (%complete) - { - if(printSolverProgress) - fprintf(fpLog, "Solver: %d%% complete\n", atoi(ninjaComMsg)); - } - else if(eMsg == ninjaOuterIterProgress) //Solver progress for outer matching iterations (%complete) - fprintf(fpLog, "Solver (matching): %d%% complete\n", atoi(ninjaComMsg)); - else if(eMsg == ninjaWarning) //Warnings - fprintf(fpLog, "\nWarning: %s\n", ninjaComMsg); - else if(eMsg == ninjaFailure) //Failures (ie errors) - fprintf(fpLog, "\nERROR: %s\n", ninjaComMsg); - else if(eMsg == ninjaFatal) //Failures (probably fatal) - fprintf(fpLog, "\nERROR: %s\n", ninjaComMsg); -} - -//********************************************************************** -// ninjaGUIComHandler() -//********************************************************************** -/** -* Communication handler for "GUI" WindNinja simulations. +* Communication handler for WindNinja simulations. Takes an input message and prints/passes it. +* The place the message is printed or passed to (or if the message is ignored) depends on +* the input message type, the pre-set ninjaComHandler type, and other pre-set ninjaCom settings +* * @param eMsg Type of message to be passed. See msgType for available types. * @param ninjaComMsg Message to be printed. Comes from ninjaComV and ninjaCom. */ -void ninjaGUIComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) +void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { //char* lastMsg; //pointer to last message, points to char in WindNinjaInputs class //int* runNumber; //pointer to run number, points to int in WindNinjaInputs class @@ -300,15 +133,18 @@ void ninjaGUIComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) // "No more will be reported from now on.\n", // *runNumber, nMaxErrors); - fprintf(multiStream, "Run %d: More than %d errors have been reported. ", - "No more will be reported from now on.\n", - *runNumber, nMaxErrors); - fflush(multiStream); + if( *comType == eNinjaCom::ninjaGUICom ) + { + fprintf(multiStream, "Run %d: More than %d errors have been reported. ", + "No more will be reported from now on.\n", + *runNumber, nMaxErrors); + fflush(multiStream); - sprintf( msg, "Run %d: More than %d errors have been reported. ", - "No more will be reported from now on.\n", - *runNumber, nMaxErrors ); - pfnProgress(msg, pProgressUser); + sprintf( msg, "Run %d: More than %d errors have been reported. ", + "No more will be reported from now on.\n", + *runNumber, nMaxErrors ); + pfnProgress(msg, pProgressUser); + } } //return; } @@ -318,21 +154,27 @@ void ninjaGUIComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { //fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); - fprintf(multiStream, "Run %d: %s\n", *runNumber, ninjaComMsg); - fflush(multiStream); + if( *comType == eNinjaCom::ninjaGUICom ) + { + fprintf(multiStream, "Run %d: %s\n", *runNumber, ninjaComMsg); + fflush(multiStream); - sprintf( msg, "Run %d: %s\n", *runNumber, ninjaComMsg ); - pfnProgress(msg, pProgressUser); + sprintf( msg, "Run %d: %s\n", *runNumber, ninjaComMsg ); + pfnProgress(msg, pProgressUser); + } } else if(eMsg == ninjaDebug) //Debug { //fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); - fprintf(multiStream, "Run %d: %s\n", *runNumber, ninjaComMsg); - fflush(multiStream); + if( *comType == eNinjaCom::ninjaGUICom ) + { + fprintf(multiStream, "Run %d: %s\n", *runNumber, ninjaComMsg); + fflush(multiStream); - sprintf( msg, "Run %d: %s\n", *runNumber, ninjaComMsg ); - pfnProgress(msg, pProgressUser); + sprintf( msg, "Run %d: %s\n", *runNumber, ninjaComMsg ); + pfnProgress(msg, pProgressUser); + } } else if(eMsg == ninjaSolverProgress) //Solver progress (%complete) { @@ -340,148 +182,67 @@ void ninjaGUIComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { //fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); - fprintf(multiStream, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); - fflush(multiStream); + if( *comType == eNinjaCom::ninjaGUICom ) + { + fprintf(multiStream, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + fflush(multiStream); - sprintf( msg, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg) ); - pfnProgress(msg, pProgressUser); + sprintf( msg, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg) ); + pfnProgress(msg, pProgressUser); + } } } else if(eMsg == ninjaOuterIterProgress) //Solver progress (%complete) { //fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); - fprintf(multiStream, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); - fflush(multiStream); + if( *comType == eNinjaCom::ninjaGUICom ) + { + fprintf(multiStream, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + fflush(multiStream); - sprintf( msg, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg) ); - pfnProgress(msg, pProgressUser); + sprintf( msg, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg) ); + pfnProgress(msg, pProgressUser); + } } else if(eMsg == ninjaWarning) //Warnings { //fprintf(fpLog, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); - fprintf(multiStream, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); - fflush(multiStream); + if( *comType == eNinjaCom::ninjaGUICom ) + { + fprintf(multiStream, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); + fflush(multiStream); - sprintf( msg, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg ); - pfnProgress(msg, pProgressUser); + sprintf( msg, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg ); + pfnProgress(msg, pProgressUser); + } } else if(eMsg == ninjaFailure) //Failures (ie errors) { //fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); - fprintf(multiStream, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); - fflush(multiStream); + if( *comType == eNinjaCom::ninjaGUICom ) + { + fprintf(multiStream, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + fflush(multiStream); - sprintf( msg, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg ); - pfnProgress(msg, pProgressUser); + sprintf( msg, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg ); + pfnProgress(msg, pProgressUser); + } } else if(eMsg == ninjaFatal) //Failures (probably fatal) { //fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + if( *comType == eNinjaCom::ninjaGUICom ) + { fprintf(multiStream, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); fflush(multiStream); sprintf( msg, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg ); pfnProgress(msg, pProgressUser); + } // if( *comType == eNinjaCom::ninjaGUICom ) } } -//********************************************************************** -// ninjaWFDSSComHandler() -//********************************************************************** -/** -* Communication handler for a "WFDSS" WindNinja simulation. -* @param eMsg Type of message to be passed. See msgType for available types. -* @param ninjaComMsg Message to be printed. Comes from ninjaComV and ninjaCom. -*/ -void ninjaWFDSSComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) -{ - //If message is a Failure or Fatal type, write the string to the NinjaComString which - //can then be read from the ninja class using lastComString - if(eMsg==ninjaFailure || eMsg==ninjaFatal) - strcpy(lastMsg,ninjaComMsg); //lastMsg points to string in WindNinjaInputs class (which is inherited by the ninja class) -} - - -//********************************************************************** -// ninjaCLIComHandler() -//********************************************************************** -/** -* Communication handler for a "CLI" WindNinja simulation. -* @param eMsg Type of message to be passed. See msgType for available types. -* @param ninjaComMsg Message to be printed. Comes from ninjaComV and ninjaCom. -*/ -void ninjaCLIComHandler::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) -{ - fpLog = stdout; - bool printRunNum = true; - if(printRunNum == true) { - if (eMsg==ninjaFailure || eMsg==ninjaFatal) { - errorCount++; - if (errorCount > nMaxErrors && nMaxErrors > 0) { - if(errorCount == nMaxErrors+1) { - fprintf(stderr, "Run %d: More than %d errors have been reported. " - "No more will be reported from now on.\n", - *runNumber, nMaxErrors); - } - return; - } - } - - if(eMsg == ninjaNone) - fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); - - else if(eMsg == ninjaSolverProgress) - { - if(printSolverProgress) - fprintf(fpLog, "Run %d (solver): %d%% complete\n", - *runNumber, atoi(ninjaComMsg)); - } - else if(eMsg == ninjaOuterIterProgress) //Solver progress for outer matching iterations (%complete) - fprintf(fpLog, "Run %d (matching): %d%% complete\n", - *runNumber, atoi(ninjaComMsg)); - else if(eMsg == ninjaWarning) - fprintf(fpLog, "\nRun %d (warning): %s\n", - *runNumber, ninjaComMsg); - else if(eMsg == ninjaFailure) - fprintf(stderr, "\nRun %d (ERROR): %s\n", - *runNumber, ninjaComMsg); - else if(eMsg == ninjaFatal) - fprintf(stderr, "\nRun %d (ERROR): %s\n", - *runNumber, ninjaComMsg); - - } - else { - if (eMsg==ninjaFailure || eMsg==ninjaFatal) { - errorCount++; - if (errorCount > nMaxErrors && nMaxErrors > 0) { - if(errorCount == nMaxErrors+1) { - fprintf(stderr, "More than %d errors have been reported. " - "No more will be reported from now on.\n", - nMaxErrors); - } - return; - } - } - - if(eMsg == ninjaNone) - fprintf(fpLog, "%s\n", ninjaComMsg); - else if(eMsg == ninjaSolverProgress) - { - if(printSolverProgress) - fprintf(fpLog, "Solver: %d%% complete\n", atoi(ninjaComMsg)); - } - else if(eMsg == ninjaOuterIterProgress) //Solver progress for outer matching iterations (%complete) - fprintf(fpLog, "Solver (matching): %d%% complete\n", atoi(ninjaComMsg)); - else if(eMsg == ninjaWarning) - fprintf(fpLog, "\nWarning: %s\n", ninjaComMsg); - else if(eMsg == ninjaFailure) - fprintf(stderr, "\nERROR: %s\n", ninjaComMsg); - else if(eMsg == ninjaFatal) - fprintf(stderr, "\nERROR: %s\n", ninjaComMsg); - fflush(stdout); - } -} diff --git a/src/ninja/ninjaCom.h b/src/ninja/ninjaCom.h index b72368921..2cf0a429a 100644 --- a/src/ninja/ninjaCom.h +++ b/src/ninja/ninjaCom.h @@ -42,11 +42,11 @@ #include "callbackFunctions.h" -class ninjaComClass //virtual base class +class ninjaComClass { public: ninjaComClass(); - virtual ~ninjaComClass(); + ~ninjaComClass(); double progressWeight; typedef enum @@ -92,49 +92,8 @@ class ninjaComClass //virtual base class void ninjaComV(msgType, const char *, va_list); //void initializeNinjaCom(char *LastMsg, int* RunNumber, eNinjaCom* ComType); - //pure virtual function that must be overridden in derived classes - virtual void ninjaComHandler(msgType eMsg, const char *ninjaComMsg) = 0; + void ninjaComHandler(msgType eMsg, const char *ninjaComMsg); }; - -class ninjaDefaultComHandler : public ninjaComClass //concrete class -{ -public: - virtual void ninjaComHandler(msgType eMsg, const char *ninjaComMsg); -}; - - -class ninjaQuietComHandler : public ninjaComClass //concrete class -{ -public: - virtual void ninjaComHandler(msgType eMsg, const char *ninjaComMsg); -}; - - -class ninjaLoggingComHandler : public ninjaComClass //concrete class -{ -public: - virtual void ninjaComHandler(msgType eMsg, const char *ninjaComMsg); -}; - - -class ninjaGUIComHandler : public ninjaComClass //concrete class -{ -public: - virtual void ninjaComHandler(msgType eMsg, const char *ninjaComMsg); -}; - - -class ninjaWFDSSComHandler : public ninjaComClass //concrete class -{ -public: - virtual void ninjaComHandler(msgType eMsg, const char *ninjaComMsg); -}; - -class ninjaCLIComHandler : public ninjaComClass //concrete class -{ -public: - virtual void ninjaComHandler(msgType eMsg, const char *ninjaComMsg); -}; #endif //NINJACOM_H From 04580dda9aca478af784ae1fcaa8d76a71c0f74e Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 29 Sep 2025 19:55:22 -0600 Subject: [PATCH 261/435] continuing commit 734feddbbd34474096a0e001d2440f3618819cc0, to do last touch up cleanup to that commit. The cli now prints again, not just the gui. For issue #666 --- src/gui/mainwindow.cpp | 2 -- src/ninja/ninjaCom.cpp | 59 ++++++++++++++++++++++++++---------------- src/ninja/ninjaCom.h | 2 +- 3 files changed, 37 insertions(+), 26 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 471ff5e6a..49edb38b9 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -365,8 +365,6 @@ void updateProgressCallback(const char *pszMessage, void *pUser) // this still msg = msg.substr(0, msg.size()-1); } - qDebug() << msg.c_str(); - int runNumber; int runProgress; if( sscanf(msg.c_str(), "Run %d (solver): %d%% complete", &runNumber, &runProgress) == 2 ) diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index c6016a1a2..5324927ae 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -102,7 +102,6 @@ void ninjaComClass::ninjaComV(msgType eMsg, const char *fmt, va_list args) // comType = ComType; //} - /** * Communication handler for WindNinja simulations. Takes an input message and prints/passes it. * The place the message is printed or passed to (or if the message is ignored) depends on @@ -118,20 +117,34 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) char msg[NINJA_MSG_SIZE]; // Declare a character array to store the result of sprintf, for printing - /* Trouble */ - if( runNumber == NULL ) - return; + if( *comType == eNinjaCom::ninjaGUICom ) + { + if( runNumber == NULL ) + { + return; + } + + if( multiStream == NULL ) + { + return; + } + if( pfnProgress == NULL || pProgressUser == NULL ) + { + return; + } + } + - if (eMsg==ninjaFailure || eMsg==ninjaFatal) + if( eMsg == ninjaFailure || eMsg == ninjaFatal ) { errorCount++; - if (errorCount > nMaxErrors && nMaxErrors > 0) + if( errorCount > nMaxErrors && nMaxErrors > 0 ) { - if(errorCount == nMaxErrors+1) + if( errorCount == nMaxErrors+1 ) { - //fprintf(fpLog, "Run %d: More than %d errors have been reported. " - // "No more will be reported from now on.\n", - // *runNumber, nMaxErrors); + fprintf(fpLog, "Run %d: More than %d errors have been reported. " + "No more will be reported from now on.\n", + *runNumber, nMaxErrors); if( *comType == eNinjaCom::ninjaGUICom ) { @@ -146,13 +159,13 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) pfnProgress(msg, pProgressUser); } } - //return; + return; } } if(eMsg == ninjaNone) //None { - //fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); + fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); if( *comType == eNinjaCom::ninjaGUICom ) { @@ -165,7 +178,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) } else if(eMsg == ninjaDebug) //Debug { - //fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); + fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); if( *comType == eNinjaCom::ninjaGUICom ) { @@ -180,7 +193,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if(printSolverProgress) { - //fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); if( *comType == eNinjaCom::ninjaGUICom ) { @@ -194,7 +207,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) } else if(eMsg == ninjaOuterIterProgress) //Solver progress (%complete) { - //fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); if( *comType == eNinjaCom::ninjaGUICom ) { @@ -207,7 +220,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) } else if(eMsg == ninjaWarning) //Warnings { - //fprintf(fpLog, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); + fprintf(fpLog, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); if( *comType == eNinjaCom::ninjaGUICom ) { @@ -220,7 +233,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) } else if(eMsg == ninjaFailure) //Failures (ie errors) { - //fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); if( *comType == eNinjaCom::ninjaGUICom ) { @@ -233,16 +246,16 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) } else if(eMsg == ninjaFatal) //Failures (probably fatal) { - //fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); if( *comType == eNinjaCom::ninjaGUICom ) { - fprintf(multiStream, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); - fflush(multiStream); + fprintf(multiStream, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + fflush(multiStream); - sprintf( msg, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg ); - pfnProgress(msg, pProgressUser); - } // if( *comType == eNinjaCom::ninjaGUICom ) + sprintf( msg, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg ); + pfnProgress(msg, pProgressUser); + } } } diff --git a/src/ninja/ninjaCom.h b/src/ninja/ninjaCom.h index 2cf0a429a..dbadcd71a 100644 --- a/src/ninja/ninjaCom.h +++ b/src/ninja/ninjaCom.h @@ -82,7 +82,7 @@ class ninjaComClass int errorCount; //running error count int nMaxErrors; //max number of errors to report - bool printSolverProgress; //flag specifying where normal solver progress should be printed (matching will still be printed) + bool printSolverProgress; //flag specifying where normal solver progress should be printed (matching will still be printed) //methods From 89d667ec774d7d9a8aa71051bf8a765092c9b283 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 30 Sep 2025 12:03:04 -0600 Subject: [PATCH 262/435] continuing 1st attempt at refactoring ninjaCom, for issue #666 brought back the various logic differences between the various ninjaComHandler() classes that were dropped, or at least the most important logic differences since the old code had lots of one off differences between the various classes. I did this by trying to assume at least some uniformity between the various ninjaComHandler types. --- src/ninja/ninjaCom.cpp | 155 +++++++++++++++++++++++++++++++++++++---- src/ninja/ninjaCom.h | 8 ++- 2 files changed, 146 insertions(+), 17 deletions(-) diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index 5324927ae..277973d2d 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -36,6 +36,7 @@ ninjaComClass::ninjaComClass() { fpLog = stdout; + fpErr = stderr; lastMsg = NULL; runNumber = NULL; comType = NULL; @@ -43,7 +44,9 @@ ninjaComClass::ninjaComClass() pProgressUser = nullptr; errorCount = 0; nMaxErrors = 10; + printMaxErrors = true; printSolverProgress = true; + printRunNumber = true; progressWeight = 1.0; } @@ -134,7 +137,34 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) } } + fpLog = stdout; + if( *comType == eNinjaCom::ninjaLoggingCom ) + { + fpLog = fopen("ninja.log", "w+"); + if( fpLog == NULL ) + { + return; + } + } + + // for now, just send fpErr/stderr to stdout + //fpErr = stderr; + fpErr = stdout; + +// not applicable for eNinjaCom::WFDSSCom +// printRunNumber is always effectively set to true for eNinjaCom::ninjaGUICom +if( *comType == eNinjaCom::ninjaQuietCom || *comType == eNinjaCom::ninjaLoggingCom ) +{ + printRunNumber = false; +} + +if( *comType == eNinjaCom::ninjaLoggingCom || *comType == eNinjaCom::WFDSSCom || *comType == eNinjaCom::ninjaGUICom ) +{ + printMaxErrors = false; +} +if( printMaxErrors == true ) +{ if( eMsg == ninjaFailure || eMsg == ninjaFatal ) { errorCount++; @@ -142,9 +172,17 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( errorCount == nMaxErrors+1 ) { - fprintf(fpLog, "Run %d: More than %d errors have been reported. " - "No more will be reported from now on.\n", - *runNumber, nMaxErrors); + if( printRunNumber == true ) + { + fprintf(fpErr, "Run %d: More than %d errors have been reported. " + "No more will be reported from now on.\n", + *runNumber, nMaxErrors); + } else + { + fprintf(fpErr, "More than %d errors have been reported. " + "No more will be reported from now on.\n", + nMaxErrors); + } if( *comType == eNinjaCom::ninjaGUICom ) { @@ -162,10 +200,19 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) return; } } +} // if( printMaxErrors == true ) +if( *comType != eNinjaCom::ninjaQuietCom && *comType != eNinjaCom::WFDSSCom ) +{ if(eMsg == ninjaNone) //None { - fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); + if( printRunNumber == true ) + { + fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); + } else + { + fprintf(fpLog, "%s\n", ninjaComMsg); + } if( *comType == eNinjaCom::ninjaGUICom ) { @@ -176,9 +223,16 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) pfnProgress(msg, pProgressUser); } } + #ifdef NINJA_DEBUG else if(eMsg == ninjaDebug) //Debug { - fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); + if( printRunNumber == true ) + { + fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); + } else + { + fprintf(fpLog, "%s\n", ninjaComMsg); + } if( *comType == eNinjaCom::ninjaGUICom ) { @@ -189,38 +243,81 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) pfnProgress(msg, pProgressUser); } } + #endif //NINJA_DEBUG else if(eMsg == ninjaSolverProgress) //Solver progress (%complete) { if(printSolverProgress) { - fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + if( printRunNumber == true ) + { + if( atoi(ninjaComMsg) > 99 ) // does this even matter for anything?? + { + fprintf(fpLog, "Run %d (solver): 99%% complete\n", *runNumber); + } else + { + fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + } + } else + { + if( atoi(ninjaComMsg) > 99 ) // does this even matter for anything?? + { + fprintf(fpLog, "Solver: 99%% complete\n"); + } else + { + fprintf(fpLog, "Solver: %d%% complete\n", atoi(ninjaComMsg)); + } + } if( *comType == eNinjaCom::ninjaGUICom ) { + if( atoi(ninjaComMsg) > 99 ) // does this even matter for anything?? + { + fprintf(multiStream, "Run %d (solver): 99%% complete\n", *runNumber); + } else + { fprintf(multiStream, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + } fflush(multiStream); + if( atoi(ninjaComMsg) > 99 ) // does this even matter for anything?? + { + sprintf( msg, "Run %d (solver): 99%% complete\n", atoi(ninjaComMsg) ); + } else + { sprintf( msg, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg) ); + } pfnProgress(msg, pProgressUser); } } } - else if(eMsg == ninjaOuterIterProgress) //Solver progress (%complete) + else if(eMsg == ninjaOuterIterProgress) //Solver progress for outer matching iterations (%complete) { - fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + if( printRunNumber == true ) + { + fprintf(fpLog, "Run %d (matching): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + } else + { + fprintf(fpLog, "Solver (matching): %d%% complete\n", atoi(ninjaComMsg)); + } if( *comType == eNinjaCom::ninjaGUICom ) { - fprintf(multiStream, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + fprintf(multiStream, "Run %d (matching): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); fflush(multiStream); - sprintf( msg, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg) ); + sprintf( msg, "Run %d (matching): %d%% complete\n", *runNumber, atoi(ninjaComMsg) ); pfnProgress(msg, pProgressUser); } } else if(eMsg == ninjaWarning) //Warnings { - fprintf(fpLog, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); + if( printRunNumber == true ) + { + fprintf(fpLog, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); + } else + { + fprintf(fpLog, "\nWarning: %s\n", ninjaComMsg); + } if( *comType == eNinjaCom::ninjaGUICom ) { @@ -231,9 +328,19 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) pfnProgress(msg, pProgressUser); } } - else if(eMsg == ninjaFailure) //Failures (ie errors) +} // if( *comType != eNinjaCom::ninjaQuietCom && *comType != eNinjaCom::WFDSSCom ) + +if( *comType != eNinjaCom::WFDSSCom ) +{ + if(eMsg == ninjaFailure) //Failures (ie errors) { - fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + if( printRunNumber == true ) + { + fprintf(fpErr, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + } else + { + fprintf(fpErr, "\nERROR: %s\n", ninjaComMsg); + } if( *comType == eNinjaCom::ninjaGUICom ) { @@ -246,7 +353,13 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) } else if(eMsg == ninjaFatal) //Failures (probably fatal) { - fprintf(fpLog, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + if( printRunNumber == true ) + { + fprintf(fpErr, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + } else + { + fprintf(fpErr, "\nERROR: %s\n", ninjaComMsg); + } if( *comType == eNinjaCom::ninjaGUICom ) { @@ -257,5 +370,19 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) pfnProgress(msg, pProgressUser); } } +} // if( *comType != eNinjaCom::WFDSSCom ) + +if( *comType == eNinjaCom::WFDSSCom ) +{ + //If message is a Failure or Fatal type, write the string to the NinjaComString which + //can then be read from the ninja class using lastComString + if( eMsg == ninjaFailure || eMsg == ninjaFatal ) + { + strcpy(lastMsg, ninjaComMsg); //lastMsg points to string in WindNinjaInputs class (which is inherited by the ninja class) + } +} // if( *comType == eNinjaCom::WFDSSCom ) + + // technically only eNinjaCom::CLI had this, probably fine to just do it anyways + fflush(stdout); } diff --git a/src/ninja/ninjaCom.h b/src/ninja/ninjaCom.h index dbadcd71a..7a1201ee8 100644 --- a/src/ninja/ninjaCom.h +++ b/src/ninja/ninjaCom.h @@ -78,11 +78,14 @@ class ninjaComClass void *pProgressUser; FILE* fpLog; + FILE* fpErr; FILE* multiStream; - int errorCount; //running error count - int nMaxErrors; //max number of errors to report + int errorCount; //running error count + int nMaxErrors; //max number of errors to report + bool printMaxErrors; //flag to determine whether to keep printing error messages past when errorCount exceeds nMaxErrors bool printSolverProgress; //flag specifying where normal solver progress should be printed (matching will still be printed) + bool printRunNumber; //flag to determine if thread number should be printed at beginning of messages //methods @@ -93,7 +96,6 @@ class ninjaComClass //void initializeNinjaCom(char *LastMsg, int* RunNumber, eNinjaCom* ComType); void ninjaComHandler(msgType eMsg, const char *ninjaComMsg); - }; #endif //NINJACOM_H From c6eff98b748e82d834523c63927419b527dc4025 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 30 Sep 2025 13:42:20 -0600 Subject: [PATCH 263/435] continuing 1st attempt at refactoring ninjaCom, for issue #666 finally fully dropped the ninjaComType usage from WITHIN ninjaCom, though I decided to wait to drop the ninjaComType usage from the rest of the code, the other parts of the code that USE ninjaCom, until the ninjaCom file stream setting methods get completed --- src/ninja/ninja.cpp | 3 +- src/ninja/ninjaCom.cpp | 208 ++++++++++++++++++++--------------------- src/ninja/ninjaCom.h | 7 +- 3 files changed, 107 insertions(+), 111 deletions(-) diff --git a/src/ninja/ninja.cpp b/src/ninja/ninja.cpp index b99bb86f5..df2b33e89 100644 --- a/src/ninja/ninja.cpp +++ b/src/ninja/ninja.cpp @@ -3562,8 +3562,7 @@ void ninja::set_ninjaCommunication(int RunNumber, ninjaComClass::eNinjaCom comTy void ninja::set_ninjaComProgressFunc(ProgressFunc func, void *pUser) { - input.Com->pfnProgress = func; - input.Com->pProgressUser = pUser; + input.Com->set_progressFunc(func, pUser); } void ninja::set_ninjaMultiComStream(FILE* stream) diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index 277973d2d..46cde19fd 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -37,14 +37,18 @@ ninjaComClass::ninjaComClass() { fpLog = stdout; fpErr = stderr; + printLastMsg = false; lastMsg = NULL; runNumber = NULL; comType = NULL; + printProgressFunc = false; pfnProgress = nullptr; pProgressUser = nullptr; + multiStream = NULL; + printLogFile = false; errorCount = 0; nMaxErrors = 10; - printMaxErrors = true; + printMaxErrors = false; printSolverProgress = true; printRunNumber = true; progressWeight = 1.0; @@ -59,6 +63,20 @@ ninjaComClass::~ninjaComClass() } +void ninjaComClass::set_progressFunc(ProgressFunc func, void *pUser) +{ + if( func == NULL || pUser == NULL ) + { + fprintf(stderr, "ninjaComClass::set_ninjaComProgressFunc() error!! input ProgressFunction or ProgressFunctionUser are NULL!!!\n"); + fflush(stderr); + return; + } + + pfnProgress = func; + pProgressUser = pUser; + printProgressFunc = true; +} + /** * Function to turn off solver progress messages. * Note that "matching" progress messages will still @@ -98,17 +116,16 @@ void ninjaComClass::ninjaComV(msgType eMsg, const char *fmt, va_list args) ninjaComHandler(eMsg, ninjaMsg); } -//void ninjaComClass::initializeNinjaCom(char *LastMsg, int* RunNumber, eNinjaCom* ComType) +//void ninjaComClass::initializeNinjaCom(char *LastMsg, int* RunNumber) //{ // lastMsg = LastMsg; // runNumber = RunNumber; -// comType = ComType; //} /** * Communication handler for WindNinja simulations. Takes an input message and prints/passes it. -* The place the message is printed or passed to (or if the message is ignored) depends on -* the input message type, the pre-set ninjaComHandler type, and other pre-set ninjaCom settings +* The place the message is printed or passed to (or if the message is ignored) +* depends on the input message type, and other pre-set ninjaCom settings * * @param eMsg Type of message to be passed. See msgType for available types. * @param ninjaComMsg Message to be printed. Comes from ninjaComV and ninjaCom. @@ -120,25 +137,15 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) char msg[NINJA_MSG_SIZE]; // Declare a character array to store the result of sprintf, for printing - if( *comType == eNinjaCom::ninjaGUICom ) + if( printProgressFunc == false || multiStream != NULL ) { if( runNumber == NULL ) { return; } - - if( multiStream == NULL ) - { - return; - } - if( pfnProgress == NULL || pProgressUser == NULL ) - { - return; - } } - fpLog = stdout; - if( *comType == eNinjaCom::ninjaLoggingCom ) + if( printLogFile == true ) { fpLog = fopen("ninja.log", "w+"); if( fpLog == NULL ) @@ -151,59 +158,53 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) //fpErr = stderr; fpErr = stdout; -// not applicable for eNinjaCom::WFDSSCom -// printRunNumber is always effectively set to true for eNinjaCom::ninjaGUICom -if( *comType == eNinjaCom::ninjaQuietCom || *comType == eNinjaCom::ninjaLoggingCom ) -{ - printRunNumber = false; -} + // for now, always assume printRunNumber has been already been set ahead of time, where the default value is always true + // but printRunNumber is always effectively set to true for printProgressFunc and multiStream output -if( *comType == eNinjaCom::ninjaLoggingCom || *comType == eNinjaCom::WFDSSCom || *comType == eNinjaCom::ninjaGUICom ) -{ - printMaxErrors = false; -} + // for now, always assume printMaxErrors has been already been set ahead of time, where the default value is always false, to print all errors -if( printMaxErrors == true ) -{ - if( eMsg == ninjaFailure || eMsg == ninjaFatal ) + if( printMaxErrors == true ) { - errorCount++; - if( errorCount > nMaxErrors && nMaxErrors > 0 ) + if( eMsg == ninjaFailure || eMsg == ninjaFatal ) { - if( errorCount == nMaxErrors+1 ) + errorCount++; + if( errorCount > nMaxErrors && nMaxErrors > 0 ) { - if( printRunNumber == true ) - { - fprintf(fpErr, "Run %d: More than %d errors have been reported. " - "No more will be reported from now on.\n", - *runNumber, nMaxErrors); - } else + if( errorCount == nMaxErrors+1 ) { - fprintf(fpErr, "More than %d errors have been reported. " - "No more will be reported from now on.\n", - nMaxErrors); - } - - if( *comType == eNinjaCom::ninjaGUICom ) - { - fprintf(multiStream, "Run %d: More than %d errors have been reported. ", - "No more will be reported from now on.\n", - *runNumber, nMaxErrors); - fflush(multiStream); - - sprintf( msg, "Run %d: More than %d errors have been reported. ", - "No more will be reported from now on.\n", - *runNumber, nMaxErrors ); - pfnProgress(msg, pProgressUser); + if( printRunNumber == true ) + { + fprintf(fpErr, "Run %d: More than %d errors have been reported. " + "No more will be reported from now on.\n", + *runNumber, nMaxErrors); + } else + { + fprintf(fpErr, "More than %d errors have been reported. " + "No more will be reported from now on.\n", + nMaxErrors); + } + + if( multiStream != NULL ) + { + fprintf(multiStream, "Run %d: More than %d errors have been reported. ", + "No more will be reported from now on.\n", + *runNumber, nMaxErrors); + fflush(multiStream); + } + + if( printProgressFunc == true ) + { + sprintf( msg, "Run %d: More than %d errors have been reported. ", + "No more will be reported from now on.\n", + *runNumber, nMaxErrors ); + pfnProgress(msg, pProgressUser); + } } + return; } - return; - } - } -} // if( printMaxErrors == true ) + } // if( eMsg == ninjaFailure || eMsg == ninjaFatal ) + } // if( printMaxErrors == true ) -if( *comType != eNinjaCom::ninjaQuietCom && *comType != eNinjaCom::WFDSSCom ) -{ if(eMsg == ninjaNone) //None { if( printRunNumber == true ) @@ -214,11 +215,14 @@ if( *comType != eNinjaCom::ninjaQuietCom && *comType != eNinjaCom::WFDSSCom ) fprintf(fpLog, "%s\n", ninjaComMsg); } - if( *comType == eNinjaCom::ninjaGUICom ) + if( multiStream != NULL ) { fprintf(multiStream, "Run %d: %s\n", *runNumber, ninjaComMsg); fflush(multiStream); + } + if( printProgressFunc == true ) + { sprintf( msg, "Run %d: %s\n", *runNumber, ninjaComMsg ); pfnProgress(msg, pProgressUser); } @@ -234,11 +238,14 @@ if( *comType != eNinjaCom::ninjaQuietCom && *comType != eNinjaCom::WFDSSCom ) fprintf(fpLog, "%s\n", ninjaComMsg); } - if( *comType == eNinjaCom::ninjaGUICom ) + if( multiStream != NULL ) { fprintf(multiStream, "Run %d: %s\n", *runNumber, ninjaComMsg); fflush(multiStream); + } + if( printProgressFunc == true ) + { sprintf( msg, "Run %d: %s\n", *runNumber, ninjaComMsg ); pfnProgress(msg, pProgressUser); } @@ -250,42 +257,21 @@ if( *comType != eNinjaCom::ninjaQuietCom && *comType != eNinjaCom::WFDSSCom ) { if( printRunNumber == true ) { - if( atoi(ninjaComMsg) > 99 ) // does this even matter for anything?? - { - fprintf(fpLog, "Run %d (solver): 99%% complete\n", *runNumber); - } else - { fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); - } } else { - if( atoi(ninjaComMsg) > 99 ) // does this even matter for anything?? - { - fprintf(fpLog, "Solver: 99%% complete\n"); - } else - { fprintf(fpLog, "Solver: %d%% complete\n", atoi(ninjaComMsg)); - } } - if( *comType == eNinjaCom::ninjaGUICom ) + if( multiStream != NULL ) { - if( atoi(ninjaComMsg) > 99 ) // does this even matter for anything?? - { - fprintf(multiStream, "Run %d (solver): 99%% complete\n", *runNumber); - } else - { fprintf(multiStream, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); - } fflush(multiStream); + } - if( atoi(ninjaComMsg) > 99 ) // does this even matter for anything?? - { - sprintf( msg, "Run %d (solver): 99%% complete\n", atoi(ninjaComMsg) ); - } else - { + if( printProgressFunc == true ) + { sprintf( msg, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg) ); - } pfnProgress(msg, pProgressUser); } } @@ -300,11 +286,14 @@ if( *comType != eNinjaCom::ninjaQuietCom && *comType != eNinjaCom::WFDSSCom ) fprintf(fpLog, "Solver (matching): %d%% complete\n", atoi(ninjaComMsg)); } - if( *comType == eNinjaCom::ninjaGUICom ) + if( multiStream != NULL ) { fprintf(multiStream, "Run %d (matching): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); fflush(multiStream); + } + if( printProgressFunc == true ) + { sprintf( msg, "Run %d (matching): %d%% complete\n", *runNumber, atoi(ninjaComMsg) ); pfnProgress(msg, pProgressUser); } @@ -319,20 +308,18 @@ if( *comType != eNinjaCom::ninjaQuietCom && *comType != eNinjaCom::WFDSSCom ) fprintf(fpLog, "\nWarning: %s\n", ninjaComMsg); } - if( *comType == eNinjaCom::ninjaGUICom ) + if( multiStream != NULL ) { fprintf(multiStream, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); fflush(multiStream); + } + if( printProgressFunc == true ) + { sprintf( msg, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg ); pfnProgress(msg, pProgressUser); } - } -} // if( *comType != eNinjaCom::ninjaQuietCom && *comType != eNinjaCom::WFDSSCom ) - -if( *comType != eNinjaCom::WFDSSCom ) -{ - if(eMsg == ninjaFailure) //Failures (ie errors) + } else if(eMsg == ninjaFailure) //Failures (ie errors) { if( printRunNumber == true ) { @@ -342,11 +329,14 @@ if( *comType != eNinjaCom::WFDSSCom ) fprintf(fpErr, "\nERROR: %s\n", ninjaComMsg); } - if( *comType == eNinjaCom::ninjaGUICom ) + if( multiStream != NULL ) { fprintf(multiStream, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); fflush(multiStream); + } + if( printProgressFunc == true ) + { sprintf( msg, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg ); pfnProgress(msg, pProgressUser); } @@ -361,28 +351,30 @@ if( *comType != eNinjaCom::WFDSSCom ) fprintf(fpErr, "\nERROR: %s\n", ninjaComMsg); } - if( *comType == eNinjaCom::ninjaGUICom ) + if( multiStream != NULL ) { fprintf(multiStream, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); fflush(multiStream); + } + if( printProgressFunc == true ) + { sprintf( msg, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg ); pfnProgress(msg, pProgressUser); } } -} // if( *comType != eNinjaCom::WFDSSCom ) -if( *comType == eNinjaCom::WFDSSCom ) -{ - //If message is a Failure or Fatal type, write the string to the NinjaComString which - //can then be read from the ninja class using lastComString - if( eMsg == ninjaFailure || eMsg == ninjaFatal ) + if( printLastMsg == true ) { - strcpy(lastMsg, ninjaComMsg); //lastMsg points to string in WindNinjaInputs class (which is inherited by the ninja class) - } -} // if( *comType == eNinjaCom::WFDSSCom ) + //If message is a Failure or Fatal type, write the string to the NinjaComString which + //can then be read from the ninja class using lastComString + if( eMsg == ninjaFailure || eMsg == ninjaFatal ) + { + strcpy(lastMsg, ninjaComMsg); //lastMsg points to string in WindNinjaInputs class (which is inherited by the ninja class) + } + } // if( printLastMsg == true ) - // technically only eNinjaCom::CLI had this, probably fine to just do it anyways fflush(stdout); + fflush(stderr); } diff --git a/src/ninja/ninjaCom.h b/src/ninja/ninjaCom.h index 7a1201ee8..5e145babd 100644 --- a/src/ninja/ninjaCom.h +++ b/src/ninja/ninjaCom.h @@ -70,13 +70,16 @@ class ninjaComClass ninjaCLICom } eNinjaCom; + bool printLastMsg; char* lastMsg; //pointer to last message, points to char in WindNinjaInputs class int* runNumber; //pointer to run number, points to int in WindNinjaInputs class eNinjaCom* comType; //pointer to communication type, should point to eNinjaCom in WindNinjaInputs class + bool printProgressFunc; ProgressFunc pfnProgress; void *pProgressUser; + bool printLogFile; FILE* fpLog; FILE* fpErr; FILE* multiStream; @@ -89,11 +92,13 @@ class ninjaComClass //methods + void set_progressFunc(ProgressFunc func, void *pUser); + void noSolverProgress(); void ninjaCom(msgType eMsg, const char *fmt, ...); void ninjaComV(msgType, const char *, va_list); - //void initializeNinjaCom(char *LastMsg, int* RunNumber, eNinjaCom* ComType); + //void initializeNinjaCom(char *LastMsg, int* RunNumber); void ninjaComHandler(msgType eMsg, const char *ninjaComMsg); }; From 443ce18e715f5eebb71bdb4f9fcc12928a1fd676 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 30 Sep 2025 15:27:05 -0600 Subject: [PATCH 264/435] simplifying refactored ninjaCom, for issue #666 huh, wasn't expecting reuse of char array without mem copy to work, but it did. Keep an eye out for it in the future though --- src/ninja/ninjaCom.cpp | 84 ++++++++++++++++++++++-------------------- 1 file changed, 44 insertions(+), 40 deletions(-) diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index 46cde19fd..fa7d834c7 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -174,29 +174,26 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - fprintf(fpErr, "Run %d: More than %d errors have been reported. " - "No more will be reported from now on.\n", - *runNumber, nMaxErrors); + sprintf( msg, "Run %d: More than %d errors have been reported. ", + "No more will be reported from now on.\n", + *runNumber, nMaxErrors ); } else { - fprintf(fpErr, "More than %d errors have been reported. " - "No more will be reported from now on.\n", - nMaxErrors); + sprintf( msg, "More than %d errors have been reported. ", + "No more will be reported from now on.\n", + nMaxErrors ); } + fprintf(fpErr, "%s", msg); + if( multiStream != NULL ) { - fprintf(multiStream, "Run %d: More than %d errors have been reported. ", - "No more will be reported from now on.\n", - *runNumber, nMaxErrors); + fprintf(multiStream, "%s", msg); fflush(multiStream); } if( printProgressFunc == true ) { - sprintf( msg, "Run %d: More than %d errors have been reported. ", - "No more will be reported from now on.\n", - *runNumber, nMaxErrors ); pfnProgress(msg, pProgressUser); } } @@ -209,21 +206,22 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); + sprintf( msg, "Run %d: %s\n", *runNumber, ninjaComMsg ); } else { - fprintf(fpLog, "%s\n", ninjaComMsg); + sprintf( msg, "%s\n", ninjaComMsg ); } + fprintf(fpLog, "%s", msg); + if( multiStream != NULL ) { - fprintf(multiStream, "Run %d: %s\n", *runNumber, ninjaComMsg); + fprintf(multiStream, "%s", msg); fflush(multiStream); } if( printProgressFunc == true ) { - sprintf( msg, "Run %d: %s\n", *runNumber, ninjaComMsg ); pfnProgress(msg, pProgressUser); } } @@ -232,21 +230,22 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - fprintf(fpLog, "Run %d: %s\n", *runNumber, ninjaComMsg); + sprintf( msg, "Run %d: %s\n", *runNumber, ninjaComMsg); } else { - fprintf(fpLog, "%s\n", ninjaComMsg); + sprintf( msg, "%s\n", ninjaComMsg); } + fprintf(fpLog, "%s", msg); + if( multiStream != NULL ) { - fprintf(multiStream, "Run %d: %s\n", *runNumber, ninjaComMsg); + fprintf(multiStream, "%s", msg); fflush(multiStream); } if( printProgressFunc == true ) { - sprintf( msg, "Run %d: %s\n", *runNumber, ninjaComMsg ); pfnProgress(msg, pProgressUser); } } @@ -257,21 +256,22 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - fprintf(fpLog, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + sprintf( msg, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); } else { - fprintf(fpLog, "Solver: %d%% complete\n", atoi(ninjaComMsg)); + sprintf( msg, "Solver: %d%% complete\n", atoi(ninjaComMsg)); } + fprintf(fpLog, "%s", msg); + if( multiStream != NULL ) { - fprintf(multiStream, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + fprintf(multiStream, "%s", msg); fflush(multiStream); } if( printProgressFunc == true ) { - sprintf( msg, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg) ); pfnProgress(msg, pProgressUser); } } @@ -280,21 +280,22 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - fprintf(fpLog, "Run %d (matching): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + sprintf( msg, "Run %d (matching): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); } else { - fprintf(fpLog, "Solver (matching): %d%% complete\n", atoi(ninjaComMsg)); + sprintf( msg, "Solver (matching): %d%% complete\n", atoi(ninjaComMsg)); } + fprintf(fpLog, "%s", msg); + if( multiStream != NULL ) { - fprintf(multiStream, "Run %d (matching): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + fprintf(multiStream, "%s", msg); fflush(multiStream); } if( printProgressFunc == true ) { - sprintf( msg, "Run %d (matching): %d%% complete\n", *runNumber, atoi(ninjaComMsg) ); pfnProgress(msg, pProgressUser); } } @@ -302,42 +303,44 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - fprintf(fpLog, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); + sprintf( msg, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); } else { - fprintf(fpLog, "\nWarning: %s\n", ninjaComMsg); + sprintf( msg, "\nWarning: %s\n", ninjaComMsg); } + fprintf(fpLog, "%s", msg); + if( multiStream != NULL ) { - fprintf(multiStream, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); + fprintf(multiStream, "%s", msg); fflush(multiStream); } if( printProgressFunc == true ) { - sprintf( msg, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg ); pfnProgress(msg, pProgressUser); } } else if(eMsg == ninjaFailure) //Failures (ie errors) { if( printRunNumber == true ) { - fprintf(fpErr, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + sprintf( msg, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); } else { - fprintf(fpErr, "\nERROR: %s\n", ninjaComMsg); + sprintf( msg, "\nERROR: %s\n", ninjaComMsg); } + fprintf(fpErr, "%s", msg); + if( multiStream != NULL ) { - fprintf(multiStream, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + fprintf(multiStream, "%s", msg); fflush(multiStream); } if( printProgressFunc == true ) { - sprintf( msg, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg ); pfnProgress(msg, pProgressUser); } } @@ -345,21 +348,22 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - fprintf(fpErr, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + sprintf( msg, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); } else { - fprintf(fpErr, "\nERROR: %s\n", ninjaComMsg); + sprintf( msg, "\nERROR: %s\n", ninjaComMsg); } + fprintf(fpErr, "%s", msg); + if( multiStream != NULL ) { - fprintf(multiStream, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + fprintf(multiStream, "%s", msg); fflush(multiStream); } if( printProgressFunc == true ) { - sprintf( msg, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg ); pfnProgress(msg, pProgressUser); } } From e8e744b1180e57b1c5e5a6238a5d145948990c64 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 1 Oct 2025 13:51:29 -0600 Subject: [PATCH 265/435] dropping the old QSocketNotifier methods from ninjaCom, for issue #666 note that the FILE* multistream part of QSocketNotifier in ninjaCom was kept, just because it won't be used for GUI progress bar stuff doesn't mean that it won't be a necessary separate FILE* stream for other methods, in fact it will be meant for the main method we just won't be using it for the GUI code now. --- src/gui/mainwindow.cpp | 94 ------------------------------------------ src/gui/mainwindow.h | 11 ----- 2 files changed, 105 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 49edb38b9..3ce299d14 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -375,50 +375,6 @@ void updateProgressCallback(const char *pszMessage, void *pUser) // this still emit self->writeToConsoleSignal(QString::fromStdString(msg)); } -void MainWindow::writeComMessage() -{ - char buffer[1024]; -#ifdef WIN32 - int n = _read(pipeFdWin[0], buffer, sizeof(buffer) - 1); -#else // WIN32 - ssize_t n = read(pipeFd[0], buffer, sizeof(buffer) - 1); -#endif // WIN32 - if( n > 0 ) - { - buffer[n] = '\0'; - ////writeToConsole(buffer); - - // Break into lines in case multiple messages arrived at once - QString data = QString::fromUtf8(buffer); - QStringList lines = data.split('\n', Qt::SkipEmptyParts); - int runNumber; - int runProgress; - for( int i = 0; i < lines.size(); i++ ) - { - const QString &line = lines[i]; - if( sscanf(buffer, "Run %d (solver): %d%% complete", &runNumber, &runProgress) == 2 ) - { -// emit updateProgressValue(runNumber, runProgress); - } -// emit updateProgressMessage(line); -// writeToConsole(line); - } - } - else if( n == 0 ) - { - // EOF - writeToConsole( "reached end of COM stream file." ); -// notifier->setEnabled(false); -// ::close(pipeFd[0]); - } - else - { - writeToConsole( "Error reading from COM stream file.", Qt::red ); -// notifier.setEnabled(false); -// ::fclose(ninjaComStream); - } -} - void MainWindow::cancelSolve() { progressDialog->setLabelText("Canceling..."); @@ -858,47 +814,6 @@ void MainWindow::solveButtonClicked() runProgress.push_back(0); } -#ifdef WIN32 - // Create a pipe for ninjaCom - if( _pipe(pipeFdWin, 4096, O_BINARY) == -1 ) - { - qDebug() << "Failed to create pipe for NinjaSetComStream"; - writeToConsole( "Failed to create pipe for NinjaSetComStream", Qt::red ); - } - - // Wrap write end in FILE* - ninjaComStream = _fdopen(_dup(pipeFdWin[1]), "w"); - if( !ninjaComStream ) - { - qDebug() << "Failed to open write side of pipe for NinjaSetComStream"; - writeToConsole( "Failed to open write side of pipe for NinjaSetComStream", Qt::red ); - } - - // Create notifier for read end - HANDLE hRead = (HANDLE)_get_osfhandle(pipeFdWin[0]); - notifier = new QWinEventNotifier(hRead, this); - connect(notifier, &QWinEventNotifier::activated, this, &MainWindow::writeComMessage); -#else // WIN32 - // Create a pipe for ninjaCom - if( pipe(pipeFd) == -1) - { - qDebug() << "Failed to create pipe for NinjaSetComStream"; - writeToConsole( "Failed to create pipe for NinjaSetComStream", Qt::red ); - } - - // Wrap write end in FILE* - ninjaComStream = fdopen(pipeFd[1], "w"); - if( !ninjaComStream ) - { - qDebug() << "Failed to open write side of pipe for NinjaSetComStream"; - writeToConsole( "Failed to open write side of pipe for NinjaSetComStream", Qt::red ); - } - - // Create notifier for read end - notifier = new QSocketNotifier(pipeFd[0], QSocketNotifier::Read, this); - QObject::connect(notifier, &QSocketNotifier::activated, this, &MainWindow::writeComMessage); -#endif // WIN32 - futureWatcher = new QFutureWatcher(this); progressDialog->show(); @@ -1127,12 +1042,6 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i qDebug() << "NinjaSetProgressFunc: err =" << err; } - err = NinjaSetMultiComStream(ninjaArmy, i, ninjaComStream, papszOptions); - if(err != NINJA_SUCCESS) - { - qDebug() << "NinjaSetMultiComStream: err =" << err; - } - /* * Sets Simulation Variables */ @@ -1501,9 +1410,6 @@ void MainWindow::finishedSolve() runProgress.clear(); futureWatcher->deleteLater(); - - notifier->setEnabled(false); - ::close(pipeFd[0]); } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 3900e7608..94963c972 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -45,7 +45,6 @@ #include #include #include -#include #include #include #include @@ -129,7 +128,6 @@ private slots: void writeToConsole(QString message, QColor color = Qt::white); void updateProgressValue(int run, int progress); void updateProgressMessage(const QString message); - void writeComMessage(); void cancelSolve(); private: @@ -150,15 +148,6 @@ private slots: int totalProgress; int maxProgress; -#ifdef WIN32 - intptr_t pipeFdWin[2]; // [0] = read end, [1] = write end - QWinEventNotifier* notifier; -#else // WIN32 - int pipeFd[2]; // [0] = read end, [1] = write end - QSocketNotifier* notifier; -#endif // WIN32 - FILE* ninjaComStream; - QProgressDialog *progressDialog; QFutureWatcher *futureWatcher; From 155190fc34fdb3962b1bcf16a9f2cbbad35d33f1 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 4 Nov 2025 15:12:42 -0700 Subject: [PATCH 266/435] Added initial work for API functions and GUI integration of time lists for weather models, for #637 and #667 --- src/gui/weathermodelinput.cpp | 28 ++++++++++++++++++++++++++++ src/gui/weathermodelinput.h | 1 + src/ninja/ninjaTools.cpp | 15 +++++++++++++++ src/ninja/ninjaTools.h | 2 ++ src/ninja/windninja.cpp | 26 +++++++++++++++++++++----- src/ninja/windninja.h | 2 ++ 6 files changed, 69 insertions(+), 5 deletions(-) diff --git a/src/gui/weathermodelinput.cpp b/src/gui/weathermodelinput.cpp index 66adab4fe..d5cac884b 100644 --- a/src/gui/weathermodelinput.cpp +++ b/src/gui/weathermodelinput.cpp @@ -115,7 +115,35 @@ void WeatherModelInput::setUpTreeView() void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged() { + QItemSelectionModel *selectionModel = ui->weatherModelFileTreeView->selectionModel(); + QModelIndexList indexes = selectionModel->selectedIndexes(); + if (indexes.isEmpty()) + return; + + QModelIndex index = indexes.first(); + QString filePath; + + QFileSystemModel *model = qobject_cast(ui->weatherModelFileTreeView->model()); + if (model) + filePath = model->filePath(index); + + std::string filepath = filePath.toStdString(); + std::string timeZone = ui->timeZoneComboBox->currentText().toStdString(); + int timeListCount = 0; + const char ** timeList = NinjaGetWeatherModelTimeList(tools, &timeListCount, filepath.c_str(), timeZone.c_str()); + + QStandardItemModel *timestepModel = new QStandardItemModel(this); + for (int i = 0; i < timeListCount; ++i) { + QString timestep = QString::fromUtf8(timeList[i]); + timestepModel->appendRow(new QStandardItem(timestep)); + } + + ui->weatherModelTimestepsTreeView->setModel(timestepModel); + ui->weatherModelTimestepsTreeView->setSortingEnabled(true); + ui->weatherModelTimestepsTreeView->sortByColumn(0, Qt::AscendingOrder); + QHeaderView *header = ui->weatherModelTimestepsTreeView->header(); + header->setVisible(false); } void WeatherModelInput::weatherModelGroupBoxToggled(bool checked) diff --git a/src/gui/weathermodelinput.h b/src/gui/weathermodelinput.h index dd6b5a926..282558d4a 100644 --- a/src/gui/weathermodelinput.h +++ b/src/gui/weathermodelinput.h @@ -34,6 +34,7 @@ #include "windninja.h" #include "appstate.h" #include "QFileSystemModel" +#include #include namespace Ui { diff --git a/src/ninja/ninjaTools.cpp b/src/ninja/ninjaTools.cpp index 9025c4fda..a585fdcbe 100644 --- a/src/ninja/ninjaTools.cpp +++ b/src/ninja/ninjaTools.cpp @@ -45,6 +45,21 @@ std::vector ninjaTools::getForecastIdentifiers() return modelIdentifiers; } +std::vector ninjaTools::getTimeList(const char* fileName, std::string timeZone) +{ + wxModelInitialization *model = NULL; + model = wxModelInitializationFactory::makeWxInitialization(fileName); + std::vector temp = model->getTimeList(timeZone); + std::vector timeList; + + for(int i = 0; i < temp.size(); i++) + { + timeList.push_back(temp[i].to_string()); + } + + return timeList; +} + int ninjaTools::getStartHour(const char* modelIdentifier) { wxModelInitialization *model = NULL; diff --git a/src/ninja/ninjaTools.h b/src/ninja/ninjaTools.h index b98a97cca..b82017ddb 100644 --- a/src/ninja/ninjaTools.h +++ b/src/ninja/ninjaTools.h @@ -2,6 +2,7 @@ #define NINJATOOLS_H #include "nomads_wx_init.h" +#include "wxModelInitializationFactory.h" class ninjaTools { @@ -9,6 +10,7 @@ class ninjaTools ninjaTools(); void fetchWeatherModelData(const char* modelName, const char* demFile, int hours); std::vector getForecastIdentifiers(); + std::vector getTimeList(const char* modelName, std::string timeZone); int getStartHour(const char*modelIdentifier); int getEndHour(const char* modelIdentifer); diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 68b253f22..ded4fb73e 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -326,6 +326,26 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFreeAllWeatherModelIdentifiers(const char** id return NINJA_SUCCESS; } +WINDNINJADLL_EXPORT const char** NinjaGetWeatherModelTimeList(NinjaToolsH* tools, int* count, const char* fileName, const char* timeZone) +{ + if (!tools) + return nullptr; + + std:string timeZoneString = timeZone; + std::vector temp = reinterpret_cast(tools)->getTimeList(fileName, timeZoneString); + *count = static_cast(temp.size()); + + const char** timeList = new const char*[*count]; + for (int i = 0; i < *count; i++) + { + char* time = new char[temp[i].size() + 1]; + std::strcpy(time, temp[i].c_str()); + timeList[i] = time; + } + + return timeList; +} + WINDNINJADLL_EXPORT NinjaErr NinjaGetWeatherModelHours (NinjaToolsH* tools, const char* modelIdentifier, int* startHour, int* endHour) { @@ -735,7 +755,7 @@ WINDNINJADLL_EXPORT ninjaComClass * NinjaGetCommunication } else { - return NINJA_E_NULL_PTR; + return NULL; } } #endif //NINJA_GUI @@ -2487,10 +2507,6 @@ WINDNINJADLL_EXPORT NinjaErr NinjaCheckTimeDuration } -/*----------------------------------------------------------------------------- - * Helper Methods - *-----------------------------------------------------------------------------*/ - /** * \brief calls wxStation::writeBlankStationFile(), which writes a weather station csv file with no data, just a header. * diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index e1223f30a..35700a580 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -111,6 +111,8 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaFreeAllWeatherModelIdentifiers(const char** identifiers, int count); + WINDNINJADLL_EXPORT const char** NinjaGetWeatherModelTimeList(NinjaToolsH * tools, int * count, const char * fileName, const char * timeZone); + WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationFromBBox (const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char * elevationFile, double buffer, const char* units, const char * timeZone, bool fetchLatestFlag, const char * outputPath, bool locationFileFlag, char ** options ); From 3df576040815ad187098d63d359f17ccf4814f7f Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 5 Nov 2025 09:51:58 -0700 Subject: [PATCH 267/435] Added selection for timesteps and implemented select all and none functionality for timesteps, for #637 --- src/gui/mainwindow.ui | 16 ++--- src/gui/serverbridge.cpp | 132 +++++++++++++++++----------------- src/gui/weathermodelinput.cpp | 23 ++++-- src/gui/weathermodelinput.h | 2 + src/ninja/ninjaTools.cpp | 1 + 5 files changed, 96 insertions(+), 78 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index fd2980202..0cb78154c 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -2288,7 +2288,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -2306,7 +2306,7 @@ li.checked::marker { content: "\2612"; } - + 0 @@ -2319,9 +2319,9 @@ li.checked::marker { content: "\2612"; } - + - + Qt::Orientation::Horizontal @@ -2334,14 +2334,14 @@ li.checked::marker { content: "\2612"; } - + Select All - + Select None @@ -2605,8 +2605,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 578 - 588 + 414 + 408 diff --git a/src/gui/serverbridge.cpp b/src/gui/serverbridge.cpp index 1a26ab038..d28de4c31 100644 --- a/src/gui/serverbridge.cpp +++ b/src/gui/serverbridge.cpp @@ -100,72 +100,72 @@ bool ServerBridge::NinjaCheckVersions(char * mostrecentversion, char * localvers char * ServerBridge::NinjaQueryServerMessages(bool checkAbort) { - CPLSetConfigOption("GDAL_HTTP_UNSAFESSL", "YES"); - const char* url = "https://ninjastorm.firelab.org/sqlitetest/messages.txt"; - CPLHTTPResult *poResult = CPLHTTPFetch(url, NULL); - CPLSetConfigOption( "GDAL_HTTP_TIMEOUT", NULL ); - if( !poResult || poResult->nStatus != 0 || poResult->nDataLen == 0 ) - { - CPLDebug( "NINJA", "Failed to reach the ninjastorm server." ); - return NULL; - } - - const char* pszTextContent = reinterpret_cast(poResult->pabyData); - std::vector messages; - std::istringstream iss(pszTextContent); - std::string message; - - // Read all lines into the vector - while (std::getline(iss, message)) - { - messages.push_back(message); - } - - // Process all lines except the last two - std::ostringstream oss; - if (checkAbort) - { - for (size_t i = 0; i < messages.size(); ++i) - { - if (i == messages.size()-1) - { - oss << messages[i] << "\n"; - } - } - } - else - { - bool versionisuptodate = NinjaCheckVersions(const_cast(messages[1].c_str()), const_cast(NINJA_VERSION_STRING)); - if (!versionisuptodate) - { - oss << "You are using an outdated WindNinja version, please update to version: " << messages[1] << "

"; - - oss << "Windows: Download the new " << messages[1] - << " installer here

"; - - oss << "Linux: See the " << messages[1] << " tag in our GitHub repo
"; - - } - if (messages[4].empty() == false) - { - for (size_t i = 3; i < messages.size() - 2; ++i) - { - if (!messages[i].empty()) - { - oss << messages[i] << "\n"; - } - } - } - if (messages[4].empty() && versionisuptodate) { - return NULL; - } - } - - std::string resultingmessage = oss.str(); - char* returnString = new char[resultingmessage.length() + 1]; - std::strcpy(returnString, resultingmessage.c_str()); - CPLHTTPDestroyResult(poResult); - return returnString; + // CPLSetConfigOption("GDAL_HTTP_UNSAFESSL", "YES"); + // const char* url = "https://ninjastorm.firelab.org/sqlitetest/messages.txt"; + // CPLHTTPResult *poResult = CPLHTTPFetch(url, NULL); + // CPLSetConfigOption( "GDAL_HTTP_TIMEOUT", NULL ); + // if( !poResult || poResult->nStatus != 0 || poResult->nDataLen == 0 ) + // { + // CPLDebug( "NINJA", "Failed to reach the ninjastorm server." ); + // return NULL; + // } + + // const char* pszTextContent = reinterpret_cast(poResult->pabyData); + // std::vector messages; + // std::istringstream iss(pszTextContent); + // std::string message; + + // // Read all lines into the vector + // while (std::getline(iss, message)) + // { + // messages.push_back(message); + // } + + // // Process all lines except the last two + // std::ostringstream oss; + // if (checkAbort) + // { + // for (size_t i = 0; i < messages.size(); ++i) + // { + // if (i == messages.size()-1) + // { + // oss << messages[i] << "\n"; + // } + // } + // } + // else + // { + // bool versionisuptodate = NinjaCheckVersions(const_cast(messages[1].c_str()), const_cast(NINJA_VERSION_STRING)); + // if (!versionisuptodate) + // { + // oss << "You are using an outdated WindNinja version, please update to version: " << messages[1] << "

"; + + // oss << "Windows: Download the new " << messages[1] + // << " installer here

"; + + // oss << "Linux: See the " << messages[1] << " tag in our GitHub repo
"; + + // } + // if (messages[4].empty() == false) + // { + // for (size_t i = 3; i < messages.size() - 2; ++i) + // { + // if (!messages[i].empty()) + // { + // oss << messages[i] << "\n"; + // } + // } + // } + // if (messages[4].empty() && versionisuptodate) { + // return NULL; + // } + // } + + // std::string resultingmessage = oss.str(); + // char* returnString = new char[resultingmessage.length() + 1]; + // std::strcpy(returnString, resultingmessage.c_str()); + // CPLHTTPDestroyResult(poResult); + // return returnString; return NULL; } diff --git a/src/gui/weathermodelinput.cpp b/src/gui/weathermodelinput.cpp index d5cac884b..f36129074 100644 --- a/src/gui/weathermodelinput.cpp +++ b/src/gui/weathermodelinput.cpp @@ -44,6 +44,8 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) connect(ui->weatherModelDownloadButton, &QPushButton::clicked, this, &WeatherModelInput::weatherModelDownloadButtonClicked); connect(ui->weatherModelComboBox, &QComboBox::currentIndexChanged, this, &WeatherModelInput::weatherModelComboBoxCurrentIndexChanged); + connect(ui->weatherModelTimeSelectAllButton, &QPushButton::clicked, this, &WeatherModelInput::weatherModelTimeSelectAllButtonClicked); + connect(ui->weatherModelTimeSelectNoneButton, &QPushButton::clicked, this, &WeatherModelInput::weatherModelTimeSelectNoneButtonClicked); weatherModelComboBoxCurrentIndexChanged(0); } @@ -139,10 +141,13 @@ void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged() timestepModel->appendRow(new QStandardItem(timestep)); } - ui->weatherModelTimestepsTreeView->setModel(timestepModel); - ui->weatherModelTimestepsTreeView->setSortingEnabled(true); - ui->weatherModelTimestepsTreeView->sortByColumn(0, Qt::AscendingOrder); - QHeaderView *header = ui->weatherModelTimestepsTreeView->header(); + ui->weatherModelTimeTreeView->setModel(timestepModel); + ui->weatherModelTimeTreeView->setSortingEnabled(true); + ui->weatherModelTimeTreeView->sortByColumn(0, Qt::AscendingOrder); + ui->weatherModelTimeTreeView->setSelectionMode(QAbstractItemView::MultiSelection); + ui->weatherModelTimeTreeView->setSelectionBehavior(QAbstractItemView::SelectRows); + ui->weatherModelTimeTreeView->selectAll(); + QHeaderView *header = ui->weatherModelTimeTreeView->header(); header->setVisible(false); } @@ -162,3 +167,13 @@ void WeatherModelInput::weatherModelGroupBoxToggled(bool checked) emit requestRefresh(); } +void WeatherModelInput::weatherModelTimeSelectAllButtonClicked() +{ + ui->weatherModelTimeTreeView->selectAll(); +} + +void WeatherModelInput::weatherModelTimeSelectNoneButtonClicked() +{ + ui->weatherModelTimeTreeView->clearSelection(); +} + diff --git a/src/gui/weathermodelinput.h b/src/gui/weathermodelinput.h index 282558d4a..3086ccc1a 100644 --- a/src/gui/weathermodelinput.h +++ b/src/gui/weathermodelinput.h @@ -54,6 +54,8 @@ class WeatherModelInput : public QObject private slots: void weatherModelDownloadButtonClicked(); void weatherModelFileTreeViewItemSelectionChanged(); + void weatherModelTimeSelectAllButtonClicked(); + void weatherModelTimeSelectNoneButtonClicked(); void weatherModelGroupBoxToggled(bool checked); void weatherModelComboBoxCurrentIndexChanged(int index); diff --git a/src/ninja/ninjaTools.cpp b/src/ninja/ninjaTools.cpp index a585fdcbe..acf5dabd6 100644 --- a/src/ninja/ninjaTools.cpp +++ b/src/ninja/ninjaTools.cpp @@ -47,6 +47,7 @@ std::vector ninjaTools::getForecastIdentifiers() std::vector ninjaTools::getTimeList(const char* fileName, std::string timeZone) { + std::string tz = "America/Denver"; wxModelInitialization *model = NULL; model = wxModelInitializationFactory::makeWxInitialization(fileName); std::vector temp = model->getTimeList(timeZone); From d6286cfa7cbc43b8a1fc2205e0ffad65bad17fb7 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 5 Nov 2025 15:47:56 -0700 Subject: [PATCH 268/435] Initial work to specify time steps when running weather model initialization WIP, for #637 --- src/gui/mainwindow.cpp | 24 +++++++++++++++++++ src/gui/pointinitializationinput.cpp | 5 ++-- src/gui/weathermodelinput.cpp | 5 ++-- src/gui/weathermodelinput.h | 2 +- src/ninja/CMakeLists.txt | 3 ++- src/ninja/ninjaArmy.h | 2 +- src/ninja/nomads_wx_init.cpp | 3 +++ src/ninja/windninja.cpp | 35 ++++++++++++++++++++++++++-- src/ninja/windninja.h | 2 +- 9 files changed, 70 insertions(+), 11 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 4d0a2364d..4828fb9ec 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -770,6 +770,30 @@ void MainWindow::solveButtonClicked() ); } } + else + { + QModelIndexList selectedIndexes = ui->weatherModelTimeTreeView->selectionModel()->selectedIndexes(); + int timeListSize = selectedIndexes.count(); + numNinjas = timeListSize; + initializationMethod = "wxmodel"; + std::string timeZone = ui->timeZoneComboBox->currentText().toStdString(); + + QModelIndex index = ui->weatherModelFileTreeView->currentIndex(); + QFileSystemModel *model = qobject_cast(ui->weatherModelFileTreeView->model()); + std::string filePath = model->filePath(index).toStdString(); + + // Allocate the char** array + const char **inputTimeList = new const char*[timeListSize]; + + for (int i = 0; i < timeListSize; ++i) + { + QString qstr = selectedIndexes[i].data().toString(); + std::string str = qstr.toStdString(); + inputTimeList[i] = strdup(str.c_str()); // allocate and copy each string + } + + ninjaArmy = NinjaMakeWeatherModelArmy(filePath.c_str(), timeZone.c_str(), inputTimeList, timeListSize, ui->momentumSolverCheckBox->isChecked(), papszOptions); + } writeToConsole(QString::number( numNinjas ) + " runs initialized. Starting solver..."); maxProgress = numNinjas*100; diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index d8256ba1b..65bcf3331 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -61,11 +61,10 @@ void PointInitializationInput::pointInitializationGroupBoxToggled(bool toggled) { ui->domainAverageGroupBox->setChecked(false); ui->weatherModelGroupBox->setChecked(false); + state.isDomainAverageInitializationToggled = ui->domainAverageGroupBox->isChecked(); + state.isWeatherModelInitializationToggled = ui->weatherModelGroupBox->isChecked(); } - state.isDomainAverageInitializationToggled = ui->domainAverageGroupBox->isChecked(); - state.isWeatherModelInitializationToggled = ui->weatherModelGroupBox->isChecked(); - emit requestRefresh(); } diff --git a/src/gui/weathermodelinput.cpp b/src/gui/weathermodelinput.cpp index f36129074..53f08c9c9 100644 --- a/src/gui/weathermodelinput.cpp +++ b/src/gui/weathermodelinput.cpp @@ -42,6 +42,7 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) } NinjaFreeAllWeatherModelIdentifiers(identifiers, count); + connect(ui->weatherModelGroupBox, &QGroupBox::toggled, this, &WeatherModelInput::weatherModelGroupBoxToggled); connect(ui->weatherModelDownloadButton, &QPushButton::clicked, this, &WeatherModelInput::weatherModelDownloadButtonClicked); connect(ui->weatherModelComboBox, &QComboBox::currentIndexChanged, this, &WeatherModelInput::weatherModelComboBoxCurrentIndexChanged); connect(ui->weatherModelTimeSelectAllButton, &QPushButton::clicked, this, &WeatherModelInput::weatherModelTimeSelectAllButtonClicked); @@ -151,10 +152,10 @@ void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged() header->setVisible(false); } -void WeatherModelInput::weatherModelGroupBoxToggled(bool checked) +void WeatherModelInput::weatherModelGroupBoxToggled(bool toggled) { AppState& state = AppState::instance(); - state.isWeatherModelInitializationToggled = checked; + state.isWeatherModelInitializationToggled = toggled; if (state.isWeatherModelInitializationToggled) { diff --git a/src/gui/weathermodelinput.h b/src/gui/weathermodelinput.h index 3086ccc1a..92ec19bc0 100644 --- a/src/gui/weathermodelinput.h +++ b/src/gui/weathermodelinput.h @@ -56,7 +56,7 @@ private slots: void weatherModelFileTreeViewItemSelectionChanged(); void weatherModelTimeSelectAllButtonClicked(); void weatherModelTimeSelectNoneButtonClicked(); - void weatherModelGroupBoxToggled(bool checked); + void weatherModelGroupBoxToggled(bool toggled); void weatherModelComboBoxCurrentIndexChanged(int index); private: diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt index d3173b654..0f1455bf4 100644 --- a/src/ninja/CMakeLists.txt +++ b/src/ninja/CMakeLists.txt @@ -112,7 +112,8 @@ set(NINJA_SOURCES air.cpp gcp_wx_init.cpp ninjaTools.h ninjaTools.cpp - windninja.h) + windninja.h + ninjaArmy.h) if(NINJAFOAM) set(NINJA_SOURCES ${NINJA_SOURCES} ninjafoam.cpp diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 5653a46f4..2d5750669 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -138,7 +138,7 @@ class ninjaArmy std::string demFile,bool matchPoints, bool momentumFlag ); void makeWeatherModelArmy(std::string forecastFilename, std::string timeZone, bool momentumFlag); - void makeWeatherModelArmy(std::string forecastFilename, std::string timeZone, std::vector times, bool momentumFlag); + void makeWeatherModelArmy(std::string forecastFilename, std::string timeZone, std::vector timeList, bool momentumFlag); std::vector toBoostLocal(std::vector in, std::string timeZone); int fetchDEMPoint(double * adfPoint, double *adfBuff, const char* units, double dfCellSize, const char * pszDstFile, const char* fetchType, char ** papszOptions); int fetchDEMBBox(double *boundsBox, const char *fileName, double resolution, const char* fetchType); diff --git a/src/ninja/nomads_wx_init.cpp b/src/ninja/nomads_wx_init.cpp index a1bc67a20..0d86b5e0a 100644 --- a/src/ninja/nomads_wx_init.cpp +++ b/src/ninja/nomads_wx_init.cpp @@ -539,6 +539,9 @@ void NomadsWxModel::setSurfaceGrids( WindNinjaInputs &input, const char *pszForecastFile = NULL; for( i = 0; i < (int)timeList.size(); i++ ) { + std::string listTimeStr = timeList[i].to_string(); + std::string ninjaTimeStr = input.ninjaTime.to_string(); + if( timeList[i] == input.ninjaTime ) { bpt::ptime epoch( boost::gregorian::date( 1970, 1, 1 ) ); diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index ded4fb73e..463b0479e 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -245,7 +245,7 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakePointArmy * \return An opaque handle to a ninjaArmy on success, NULL otherwise. */ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakeWeatherModelArmy - ( const char * forecastFilename, const char * timezone, bool momentumFlag, char ** options ) + ( const char * forecastFilename, const char * timeZone, const char** inputTimeList, int size, bool momentumFlag, char ** options ) { #ifndef NINJAFOAM if(momentumFlag == true) @@ -254,6 +254,36 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakeWeatherModelArmy } #endif + // std::vector timeList; + // boost::local_time::time_zone_ptr timeZonePtr; + // timeZonePtr = globalTimeZoneDB.time_zone_from_region(timeZone); + // for (int i = 0; i < size; i++) + // { + // std::string inputTime = inputTimeList[i]; + + // std::istringstream iss(inputTime); + // boost::local_time::local_time_input_facet* inFacet = + // new boost::local_time::local_time_input_facet("%Y-%b-%d %H:%M:%S %ZP"); + // iss.imbue(std::locale(std::locale::classic(), inFacet)); + + // blt::local_date_time ldt(boost::local_time::not_a_date_time); + // iss >> ldt; + + // if (ldt.is_not_a_date_time()) + // throw std::runtime_error("Failed to parse local date time: " + inputTime); + + // // Convert back to string for debugging + // std::ostringstream oss; + // boost::local_time::local_time_facet* outFacet = + // new boost::local_time::local_time_facet("%Y-%b-%d %H:%M:%S %Z"); + // oss.imbue(std::locale(std::locale::classic(), outFacet)); + // oss << ldt; + + // std::string parsedStr = oss.str(); // Inspect this in the debugger + + // timeList.push_back(ldt); + // } + NinjaArmyH* army; try { @@ -261,7 +291,8 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakeWeatherModelArmy reinterpret_cast( army )->makeWeatherModelArmy ( std::string( forecastFilename ), - std::string( timezone ), + std::string( timeZone ), + timeList, momentumFlag ); return army; } diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 35700a580..aaa05c498 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -97,7 +97,7 @@ typedef int NinjaErr; //TODO: add helper function to get list of times in a forecast file //TODO: include parameters for start/stop times and a list of timesteps as options->for cases where you don't want to simulate every time step in the forecast file WINDNINJADLL_EXPORT NinjaArmyH * NinjaMakeWeatherModelArmy - ( const char * forecastFilename, const char * timezone, bool momentumFlag, char ** options ); + ( const char * forecastFilename, const char * timeZone, const char** inputTimeList, int size, bool momentumFlag, char ** options ); WINDNINJADLL_EXPORT NinjaToolsH * NinjaMakeTools(); From aa268224f6f338308eb040f43f8f7262c80f2089 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 6 Nov 2025 13:59:19 -0700 Subject: [PATCH 269/435] Cleaned up weather model code, fixed bug where selecting model directory caused crash, for #637 --- src/gui/mainwindow.cpp | 2 +- src/gui/mainwindow.ui | 10 +-- src/gui/weathermodelinput.cpp | 139 ++++++++++++++++++---------------- src/gui/weathermodelinput.h | 8 +- src/ninja/nomads_wx_init.cpp | 3 - src/ninja/windninja.cpp | 2 +- 6 files changed, 85 insertions(+), 79 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 4828fb9ec..5549fb589 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -456,7 +456,6 @@ MainWindow::MainWindow(QWidget *parent) connectSignals(); - QString version(NINJA_VERSION_STRING); version = "Welcome to WindNinja " + version; @@ -473,6 +472,7 @@ MainWindow::~MainWindow() delete surfaceInput; delete domainAverageInput; delete pointInitializationInput; + delete weatherModelInput; delete menuBar; delete ui; } diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 0cb78154c..435cbd02e 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -464,7 +464,7 @@ QFrame::Shadow::Sunken
- 11 + 2 @@ -750,8 +750,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 538 - 419 + 578 + 588 @@ -1316,7 +1316,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 346 + 572 661 @@ -2226,7 +2226,7 @@ li.checked::marker { content: "\2612"; } 1 - 1 + 6
diff --git a/src/gui/weathermodelinput.cpp b/src/gui/weathermodelinput.cpp index 53f08c9c9..676b0c2fa 100644 --- a/src/gui/weathermodelinput.cpp +++ b/src/gui/weathermodelinput.cpp @@ -33,123 +33,130 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) : QObject(parent), ui(ui) { - tools = NinjaMakeTools(); - int count = 0; - const char** identifiers = NinjaGetAllWeatherModelIdentifiers(tools, &count); - for (int i = 0; i < count; i++) + ninjaTools = NinjaMakeTools(); + + int identifiersSize = 0; + const char** identifiers = NinjaGetAllWeatherModelIdentifiers(ninjaTools, &identifiersSize); + for (int i = 0; i < identifiersSize; i++) { ui->weatherModelComboBox->addItem(identifiers[i]); } - NinjaFreeAllWeatherModelIdentifiers(identifiers, count); + NinjaFreeAllWeatherModelIdentifiers(identifiers, identifiersSize); + weatherModelComboBoxCurrentIndexChanged(0); connect(ui->weatherModelGroupBox, &QGroupBox::toggled, this, &WeatherModelInput::weatherModelGroupBoxToggled); connect(ui->weatherModelDownloadButton, &QPushButton::clicked, this, &WeatherModelInput::weatherModelDownloadButtonClicked); connect(ui->weatherModelComboBox, &QComboBox::currentIndexChanged, this, &WeatherModelInput::weatherModelComboBoxCurrentIndexChanged); connect(ui->weatherModelTimeSelectAllButton, &QPushButton::clicked, this, &WeatherModelInput::weatherModelTimeSelectAllButtonClicked); connect(ui->weatherModelTimeSelectNoneButton, &QPushButton::clicked, this, &WeatherModelInput::weatherModelTimeSelectNoneButtonClicked); - - weatherModelComboBoxCurrentIndexChanged(0); } void WeatherModelInput::weatherModelDownloadButtonClicked() { - QByteArray modelNameByte = ui->weatherModelComboBox->currentText().toUtf8(); + QByteArray modelIdentifierByte = ui->weatherModelComboBox->currentText().toUtf8(); QByteArray demFileByte = ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8(); - - const char* modelName = modelNameByte.constData(); - const char* demFile = demFileByte.constData(); + const char* modelIdentifier = modelIdentifierByte.constData(); + const char* demFile = demFileByte.constData(); int hours = ui->weatherModelSpinBox->value(); - int err = NinjaFetchWeatherData(tools, modelName, demFile, hours); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, hours); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaFetchWeatherData: " << err; + qDebug() << "NinjaFetchWeatherData: " << ninjaErr; } - - setUpTreeView(); } void WeatherModelInput::weatherModelComboBoxCurrentIndexChanged(int index) { + QByteArray modelIdentifierByte = ui->weatherModelComboBox->currentText().toUtf8(); + const char* modelIdentifier = modelIdentifierByte.constData(); int starHour, endHour; - QByteArray modelNameByte = ui->weatherModelComboBox->currentText().toUtf8(); - const char* modelName = modelNameByte.constData(); - - int NinjaErr = NinjaGetWeatherModelHours(tools, modelName, &starHour, &endHour); - if (NinjaErr != NINJA_SUCCESS) + ninjaErr = NinjaGetWeatherModelHours(ninjaTools, modelIdentifier, &starHour, &endHour); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaGetWeatherModelHours: " << NinjaErr; + qDebug() << "NinjaGetWeatherModelHours: " << ninjaErr; } + ui->weatherModelSpinBox->setMinimum(starHour); ui->weatherModelSpinBox->setMaximum(endHour); } void WeatherModelInput::setUpTreeView() { - weatherModelFileSystemModel = new QFileSystemModel(this); - QString path = ui->elevationInputFileLineEdit->property("fullpath").toString(); - QFileInfo fileInfo(path); - - weatherModelFileSystemModel->setRootPath(fileInfo.absolutePath()); - weatherModelFileSystemModel->setNameFilters({"*.zip", "NOMADS-*", "20*"}); - weatherModelFileSystemModel->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); - weatherModelFileSystemModel->setNameFilterDisables(false); - - ui->weatherModelFileTreeView->setModel(weatherModelFileSystemModel); - ui->weatherModelFileTreeView->setRootIndex(weatherModelFileSystemModel->index(fileInfo.absolutePath())); - ui->weatherModelFileTreeView->setSelectionMode(QAbstractItemView::MultiSelection); + // File Tree View + fileModel = new QFileSystemModel(this); + QString demFilePath = ui->elevationInputFileLineEdit->property("fullpath").toString(); + QFileInfo demFileInfo(demFilePath); + + fileModel->setRootPath(demFileInfo.absolutePath()); + fileModel->setNameFilters({"*.zip", "NOMADS-*", "20*"}); + fileModel->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); + fileModel->setNameFilterDisables(false); + + ui->weatherModelFileTreeView->setModel(fileModel); + ui->weatherModelFileTreeView->setRootIndex(fileModel->index(demFileInfo.absolutePath())); + ui->weatherModelFileTreeView->setSelectionMode(QAbstractItemView::SingleSelection); ui->weatherModelFileTreeView->setSelectionBehavior(QAbstractItemView::SelectRows); ui->weatherModelFileTreeView->setAnimated(true); ui->weatherModelFileTreeView->setUniformRowHeights(true); - - QHeaderView *header = ui->weatherModelFileTreeView->header(); - header->setStretchLastSection(false); - header->setSectionResizeMode(0, QHeaderView::Stretch); - header->resizeSection(0, 400); - header->setSectionResizeMode(3, QHeaderView::ResizeToContents); - header->setSectionResizeMode(1, QHeaderView::ResizeToContents); - ui->weatherModelFileTreeView->hideColumn(1); ui->weatherModelFileTreeView->hideColumn(2); + QHeaderView *fileHeader = ui->weatherModelFileTreeView->header(); + fileHeader->setStretchLastSection(false); + fileHeader->setSectionResizeMode(0, QHeaderView::Stretch); + fileHeader->resizeSection(0, 400); + fileHeader->setSectionResizeMode(3, QHeaderView::ResizeToContents); + fileHeader->setSectionResizeMode(1, QHeaderView::ResizeToContents); + + // Time Tree View + timeModel = new QStandardItemModel(this); + + ui->weatherModelTimeTreeView->setModel(timeModel); + ui->weatherModelTimeTreeView->setSortingEnabled(true); + ui->weatherModelTimeTreeView->sortByColumn(0, Qt::AscendingOrder); + ui->weatherModelTimeTreeView->setSelectionMode(QAbstractItemView::MultiSelection); + ui->weatherModelTimeTreeView->setSelectionBehavior(QAbstractItemView::SelectRows); + ui->weatherModelTimeTreeView->selectAll(); + + QHeaderView *timeHeader = ui->weatherModelTimeTreeView->header(); + timeHeader->setVisible(false); + connect(ui->weatherModelFileTreeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged); } -void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged() +void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) { - QItemSelectionModel *selectionModel = ui->weatherModelFileTreeView->selectionModel(); - QModelIndexList indexes = selectionModel->selectedIndexes(); - - if (indexes.isEmpty()) + if (selected.indexes().empty()) + { return; + } - QModelIndex index = indexes.first(); - QString filePath; - - QFileSystemModel *model = qobject_cast(ui->weatherModelFileTreeView->model()); - if (model) - filePath = model->filePath(index); + QModelIndex index = selected.indexes().first(); + QFileInfo fileInfo = fileModel->fileInfo(index); + if(fileInfo.isDir()) + { + return; + } - std::string filepath = filePath.toStdString(); + std::string modelFilePath = fileModel->filePath(index).toStdString(); std::string timeZone = ui->timeZoneComboBox->currentText().toStdString(); - int timeListCount = 0; - const char ** timeList = NinjaGetWeatherModelTimeList(tools, &timeListCount, filepath.c_str(), timeZone.c_str()); + int timeListSize = 0; - QStandardItemModel *timestepModel = new QStandardItemModel(this); - for (int i = 0; i < timeListCount; ++i) { + const char **timeList = NinjaGetWeatherModelTimeList(ninjaTools, &timeListSize, modelFilePath.c_str(), timeZone.c_str()); + if(timeList == NULL) + { + qDebug() << "NinjaGetWeatherModelTimeList: Empty Time List"; + } + + for (int i = 0; i < timeListSize; i++) + { QString timestep = QString::fromUtf8(timeList[i]); - timestepModel->appendRow(new QStandardItem(timestep)); + timeModel->appendRow(new QStandardItem(timestep)); } - ui->weatherModelTimeTreeView->setModel(timestepModel); - ui->weatherModelTimeTreeView->setSortingEnabled(true); - ui->weatherModelTimeTreeView->sortByColumn(0, Qt::AscendingOrder); - ui->weatherModelTimeTreeView->setSelectionMode(QAbstractItemView::MultiSelection); - ui->weatherModelTimeTreeView->setSelectionBehavior(QAbstractItemView::SelectRows); ui->weatherModelTimeTreeView->selectAll(); - QHeaderView *header = ui->weatherModelTimeTreeView->header(); - header->setVisible(false); } void WeatherModelInput::weatherModelGroupBoxToggled(bool toggled) diff --git a/src/gui/weathermodelinput.h b/src/gui/weathermodelinput.h index 92ec19bc0..0c6580844 100644 --- a/src/gui/weathermodelinput.h +++ b/src/gui/weathermodelinput.h @@ -53,7 +53,7 @@ class WeatherModelInput : public QObject private slots: void weatherModelDownloadButtonClicked(); - void weatherModelFileTreeViewItemSelectionChanged(); + void weatherModelFileTreeViewItemSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); void weatherModelTimeSelectAllButtonClicked(); void weatherModelTimeSelectNoneButtonClicked(); void weatherModelGroupBoxToggled(bool toggled); @@ -61,8 +61,10 @@ private slots: private: Ui::MainWindow *ui; - NinjaToolsH* tools; - QFileSystemModel *weatherModelFileSystemModel; + NinjaToolsH* ninjaTools; + NinjaErr ninjaErr; + QFileSystemModel *fileModel; + QStandardItemModel *timeModel; }; #endif // WEATHERMODELINPUT_H diff --git a/src/ninja/nomads_wx_init.cpp b/src/ninja/nomads_wx_init.cpp index 0d86b5e0a..a1bc67a20 100644 --- a/src/ninja/nomads_wx_init.cpp +++ b/src/ninja/nomads_wx_init.cpp @@ -539,9 +539,6 @@ void NomadsWxModel::setSurfaceGrids( WindNinjaInputs &input, const char *pszForecastFile = NULL; for( i = 0; i < (int)timeList.size(); i++ ) { - std::string listTimeStr = timeList[i].to_string(); - std::string ninjaTimeStr = input.ninjaTime.to_string(); - if( timeList[i] == input.ninjaTime ) { bpt::ptime epoch( boost::gregorian::date( 1970, 1, 1 ) ); diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 463b0479e..0f1b3cd32 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -292,7 +292,7 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakeWeatherModelArmy reinterpret_cast( army )->makeWeatherModelArmy ( std::string( forecastFilename ), std::string( timeZone ), - timeList, + //timeList, momentumFlag ); return army; } From a2522d63e9a3e059397d7db01efa28b16f265446 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 6 Nov 2025 16:33:02 -0700 Subject: [PATCH 270/435] Added UCAR model identifiers for fetching data, reading time, and running simulations, for #637 and #667 --- src/gui/weathermodelinput.cpp | 8 +++---- src/ninja/ninjaTools.cpp | 41 +++++++++++++---------------------- 2 files changed, 19 insertions(+), 30 deletions(-) diff --git a/src/gui/weathermodelinput.cpp b/src/gui/weathermodelinput.cpp index 676b0c2fa..4c005c7e2 100644 --- a/src/gui/weathermodelinput.cpp +++ b/src/gui/weathermodelinput.cpp @@ -34,6 +34,8 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) ui(ui) { ninjaTools = NinjaMakeTools(); + fileModel = new QFileSystemModel(this); + timeModel = new QStandardItemModel(this); int identifiersSize = 0; const char** identifiers = NinjaGetAllWeatherModelIdentifiers(ninjaTools, &identifiersSize); @@ -85,12 +87,11 @@ void WeatherModelInput::weatherModelComboBoxCurrentIndexChanged(int index) void WeatherModelInput::setUpTreeView() { // File Tree View - fileModel = new QFileSystemModel(this); QString demFilePath = ui->elevationInputFileLineEdit->property("fullpath").toString(); QFileInfo demFileInfo(demFilePath); fileModel->setRootPath(demFileInfo.absolutePath()); - fileModel->setNameFilters({"*.zip", "NOMADS-*", "20*"}); + fileModel->setNameFilters({"*.zip", "NOMADS-*", "20*", "UCAR-*"}); fileModel->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); fileModel->setNameFilterDisables(false); @@ -111,8 +112,6 @@ void WeatherModelInput::setUpTreeView() fileHeader->setSectionResizeMode(1, QHeaderView::ResizeToContents); // Time Tree View - timeModel = new QStandardItemModel(this); - ui->weatherModelTimeTreeView->setModel(timeModel); ui->weatherModelTimeTreeView->setSortingEnabled(true); ui->weatherModelTimeTreeView->sortByColumn(0, Qt::AscendingOrder); @@ -150,6 +149,7 @@ void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged(const QItem qDebug() << "NinjaGetWeatherModelTimeList: Empty Time List"; } + timeModel->clear(); for (int i = 0; i < timeListSize; i++) { QString timestep = QString::fromUtf8(timeList[i]); diff --git a/src/ninja/ninjaTools.cpp b/src/ninja/ninjaTools.cpp index acf5dabd6..7831f730a 100644 --- a/src/ninja/ninjaTools.cpp +++ b/src/ninja/ninjaTools.cpp @@ -14,20 +14,12 @@ ninjaTools::ninjaTools() nomadsModels[i] = new NomadsWxModel( apszNomadsKeys[i][0] ); i++; } - CPLDebug( "WINDNINJA", "Loaded %d NOMADS models", nomadsCount ); } void ninjaTools::fetchWeatherModelData(const char* modelName, const char* demFile, int hours) { wxModelInitialization *model = NULL; - for(int i = 0; i < nomadsCount; i++) - { - if(nomadsModels[i]->getForecastIdentifier() == modelName) - { - model = nomadsModels[i]; - break; - } - } + model = wxModelInitializationFactory::makeWxInitializationFromId(std::string(modelName)); if (!model) { throw std::runtime_error(std::string("Weather model not found: ") + modelName); @@ -38,6 +30,18 @@ void ninjaTools::fetchWeatherModelData(const char* modelName, const char* demFil std::vector ninjaTools::getForecastIdentifiers() { + ncepGfsSurfInitialization gfs; + ncepNamSurfInitialization nam; + ncepNamAlaskaSurfInitialization namAla; + ncepRapSurfInitialization rap; + ncepNdfdInitialization ndfd; + + modelIdentifiers.push_back(ndfd.getForecastIdentifier()); + modelIdentifiers.push_back(nam.getForecastIdentifier()); + modelIdentifiers.push_back(rap.getForecastIdentifier()); + modelIdentifiers.push_back(namAla.getForecastIdentifier()); + modelIdentifiers.push_back(gfs.getForecastIdentifier()); + for(int i = 0; i < nomadsCount; i++) { modelIdentifiers.push_back(nomadsModels[i]->getForecastIdentifier()); @@ -47,7 +51,6 @@ std::vector ninjaTools::getForecastIdentifiers() std::vector ninjaTools::getTimeList(const char* fileName, std::string timeZone) { - std::string tz = "America/Denver"; wxModelInitialization *model = NULL; model = wxModelInitializationFactory::makeWxInitialization(fileName); std::vector temp = model->getTimeList(timeZone); @@ -64,27 +67,13 @@ std::vector ninjaTools::getTimeList(const char* fileName, std::stri int ninjaTools::getStartHour(const char* modelIdentifier) { wxModelInitialization *model = NULL; - for(int i = 0; i < nomadsCount; i++) - { - if(nomadsModels[i]->getForecastIdentifier() == modelIdentifier) - { - model = nomadsModels[i]; - break; - } - } + model = wxModelInitializationFactory::makeWxInitializationFromId(modelIdentifier); return model->getStartHour(); } int ninjaTools::getEndHour(const char* modelIdentifier) { wxModelInitialization *model = NULL; - for(int i = 0; i < nomadsCount; i++) - { - if(nomadsModels[i]->getForecastIdentifier() == modelIdentifier) - { - model = nomadsModels[i]; - break; - } - } + model = wxModelInitializationFactory::makeWxInitializationFromId(modelIdentifier); return model->getEndHour(); } From bfa5f98f6d80bd76fa136d03590ee1f4d89c1346 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 7 Nov 2025 11:14:19 -0700 Subject: [PATCH 271/435] Added more appropriate state checking for weather model and point initialization and ensured tree views are reset properly when changing elevation files, for #637 --- src/gui/appstate.h | 5 +++-- src/gui/mainwindow.cpp | 6 +++++- src/gui/pointinitializationinput.cpp | 6 +++++- src/gui/weathermodelinput.cpp | 18 ++++++++++++++++-- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/gui/appstate.h b/src/gui/appstate.h index 5397a7769..9c3f4b55a 100644 --- a/src/gui/appstate.h +++ b/src/gui/appstate.h @@ -39,7 +39,7 @@ class AppState return s; } - // Solver Methodology input states + // Solver Methodology states bool isSolverMethodologyValid = false; bool isMassSolverToggled = false; bool isMomentumSolverToggled = false; @@ -60,11 +60,12 @@ class AppState bool isStationFileSelectionValid = false; bool isPointInitializationValid = false; bool isWeatherModelInitializationToggled = false; + bool isWeatherModelForecastValid = false; bool isWeatherModelInitializationValid = false; bool isShowAllTimeZonesSelected = false; bool isDisplayTimeZoneDetailsSelected = false; - //Output States + // Output States bool isOutputsValid = false; bool isGoogleEarthToggled = false; bool isGoogleEarthValid = false; diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 5549fb589..db5aaec23 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -130,9 +130,13 @@ void MainWindow::refreshUI() } // Update weather model initialization - if (state.isWeatherModelInitializationToggled) { + if (state.isWeatherModelInitializationToggled && state.isWeatherModelForecastValid) { ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, tickIcon); state.isWeatherModelInitializationValid = true; + } else if (state.isWeatherModelInitializationToggled && !state.isWeatherModelForecastValid) { + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setToolTip(0, "Forecast is Invalid"); + state.isWeatherModelInitializationValid = false; } else { ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, bulletIcon); state.isWeatherModelInitializationValid = false; diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index 65bcf3331..eba416538 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -32,7 +32,7 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* parent) : QObject(parent), ui(ui) -{ +{ ui->pointInitializationDataTimeStackedWidget->setCurrentIndex(0); ui->weatherStationDataSourceStackedWidget->setCurrentIndex(0); ui->weatherStationDataTimeStackedWidget->setCurrentIndex(0); @@ -241,6 +241,10 @@ void PointInitializationInput::weatherStationDataTimeComboBoxCurrentIndexChanged void PointInitializationInput::setupTreeView() { + AppState& state = AppState::instance(); + state.isStationFileSelectionValid = false; + emit requestRefresh(); + stationFileSystemModel = new QFileSystemModel(this); QString path = ui->elevationInputFileLineEdit->property("fullpath").toString(); QFileInfo fileInfo(path); diff --git a/src/gui/weathermodelinput.cpp b/src/gui/weathermodelinput.cpp index 4c005c7e2..4577bb223 100644 --- a/src/gui/weathermodelinput.cpp +++ b/src/gui/weathermodelinput.cpp @@ -34,8 +34,6 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) ui(ui) { ninjaTools = NinjaMakeTools(); - fileModel = new QFileSystemModel(this); - timeModel = new QStandardItemModel(this); int identifiersSize = 0; const char** identifiers = NinjaGetAllWeatherModelIdentifiers(ninjaTools, &identifiersSize); @@ -86,7 +84,12 @@ void WeatherModelInput::weatherModelComboBoxCurrentIndexChanged(int index) void WeatherModelInput::setUpTreeView() { + AppState& state = AppState::instance(); + state.isWeatherModelForecastValid = false; + emit requestRefresh(); + // File Tree View + fileModel = new QFileSystemModel(this); QString demFilePath = ui->elevationInputFileLineEdit->property("fullpath").toString(); QFileInfo demFileInfo(demFilePath); @@ -103,6 +106,7 @@ void WeatherModelInput::setUpTreeView() ui->weatherModelFileTreeView->setUniformRowHeights(true); ui->weatherModelFileTreeView->hideColumn(1); ui->weatherModelFileTreeView->hideColumn(2); + ui->weatherModelFileTreeView->collapseAll(); QHeaderView *fileHeader = ui->weatherModelFileTreeView->header(); fileHeader->setStretchLastSection(false); @@ -112,6 +116,8 @@ void WeatherModelInput::setUpTreeView() fileHeader->setSectionResizeMode(1, QHeaderView::ResizeToContents); // Time Tree View + timeModel = new QStandardItemModel(this); + ui->weatherModelTimeTreeView->setModel(timeModel); ui->weatherModelTimeTreeView->setSortingEnabled(true); ui->weatherModelTimeTreeView->sortByColumn(0, Qt::AscendingOrder); @@ -127,6 +133,9 @@ void WeatherModelInput::setUpTreeView() void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) { + AppState& state = AppState::instance(); + state.isWeatherModelForecastValid = true; + if (selected.indexes().empty()) { return; @@ -136,6 +145,9 @@ void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged(const QItem QFileInfo fileInfo = fileModel->fileInfo(index); if(fileInfo.isDir()) { + state.isWeatherModelForecastValid = false; + timeModel->clear(); + emit requestRefresh(); return; } @@ -157,6 +169,8 @@ void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged(const QItem } ui->weatherModelTimeTreeView->selectAll(); + + emit requestRefresh(); } void WeatherModelInput::weatherModelGroupBoxToggled(bool toggled) From 78d05e4d9ee627a0a3aa8a684f3a4f04b78812f0 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 7 Nov 2025 11:38:17 -0700 Subject: [PATCH 272/435] Enabled selection of a specific time list through the API, for #637 --- src/ninja/windninja.cpp | 45 +++++++++++++++-------------------------- 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 0f1b3cd32..88c2a047d 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -254,35 +254,22 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakeWeatherModelArmy } #endif - // std::vector timeList; - // boost::local_time::time_zone_ptr timeZonePtr; - // timeZonePtr = globalTimeZoneDB.time_zone_from_region(timeZone); - // for (int i = 0; i < size; i++) - // { - // std::string inputTime = inputTimeList[i]; + wxModelInitialization *model = wxModelInitializationFactory::makeWxInitialization(std::string(forecastFilename)); + std::vector fullTimeList = model->getTimeList(std::string(timeZone)); + std::vector timeList; - // std::istringstream iss(inputTime); - // boost::local_time::local_time_input_facet* inFacet = - // new boost::local_time::local_time_input_facet("%Y-%b-%d %H:%M:%S %ZP"); - // iss.imbue(std::locale(std::locale::classic(), inFacet)); - - // blt::local_date_time ldt(boost::local_time::not_a_date_time); - // iss >> ldt; - - // if (ldt.is_not_a_date_time()) - // throw std::runtime_error("Failed to parse local date time: " + inputTime); - - // // Convert back to string for debugging - // std::ostringstream oss; - // boost::local_time::local_time_facet* outFacet = - // new boost::local_time::local_time_facet("%Y-%b-%d %H:%M:%S %Z"); - // oss.imbue(std::locale(std::locale::classic(), outFacet)); - // oss << ldt; - - // std::string parsedStr = oss.str(); // Inspect this in the debugger - - // timeList.push_back(ldt); - // } + for(int i = 0; i < fullTimeList.size(); i++) + { + for(int j = 0; j < size; j++) + { + std::string time1 = fullTimeList[i].to_string(); + std::string time2(inputTimeList[j]); + if(time1 == time2) + { + timeList.push_back(fullTimeList[i]); + } + } + } NinjaArmyH* army; try @@ -292,7 +279,7 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakeWeatherModelArmy reinterpret_cast( army )->makeWeatherModelArmy ( std::string( forecastFilename ), std::string( timeZone ), - //timeList, + timeList, momentumFlag ); return army; } From e0993f42938f239abb187e1ebc84b67ba544322a Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 7 Nov 2025 15:32:00 -0700 Subject: [PATCH 273/435] Initial work for archive HRRR data to be expose in GUI WIP, for #637 and #667 --- src/gui/mainwindow.ui | 35 ++++++++++++++++++++++----- src/gui/weathermodelinput.cpp | 45 ++++++++++++++++++++++++++++++++++- src/ninja/ninjaTools.cpp | 3 +++ src/ninja/windninja.cpp | 16 +++++++++++++ src/ninja/windninja.h | 3 +++ 5 files changed, 95 insertions(+), 7 deletions(-) diff --git a/src/gui/mainwindow.ui b/src/gui/mainwindow.ui index 435cbd02e..45b6400bd 100755 --- a/src/gui/mainwindow.ui +++ b/src/gui/mainwindow.ui @@ -464,7 +464,7 @@ QFrame::Shadow::Sunken - 2 + 11 @@ -2164,7 +2164,7 @@ li.checked::marker { content: "\2612"; } 0 0 572 - 637 + 713 @@ -2179,7 +2179,7 @@ li.checked::marker { content: "\2612"; } false - + @@ -2247,6 +2247,29 @@ li.checked::marker { content: "\2612"; }
+ + + + Earlierst Pastcast Date: 07/30/2014 // UTC or local time? + + + + + + Qt::TimeSpec::UTC + + + + + + + Qt::TimeSpec::UTC + + + + + + @@ -2605,8 +2628,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 414 - 408 + 578 + 588 @@ -3311,7 +3334,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 381 + 578 318 diff --git a/src/gui/weathermodelinput.cpp b/src/gui/weathermodelinput.cpp index 4577bb223..6fd679cd8 100644 --- a/src/gui/weathermodelinput.cpp +++ b/src/gui/weathermodelinput.cpp @@ -35,6 +35,10 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) { ninjaTools = NinjaMakeTools(); + ui->pastcastGroupBox->hide(); + ui->pastcastStartDateTimeEdit->setDateTime(QDateTime::currentDateTimeUtc()); + ui->pastcastEndDateTimeEdit->setDateTime(QDateTime::currentDateTimeUtc()); + int identifiersSize = 0; const char** identifiers = NinjaGetAllWeatherModelIdentifiers(ninjaTools, &identifiersSize); for (int i = 0; i < identifiersSize; i++) @@ -42,6 +46,7 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) ui->weatherModelComboBox->addItem(identifiers[i]); } NinjaFreeAllWeatherModelIdentifiers(identifiers, identifiersSize); + weatherModelComboBoxCurrentIndexChanged(0); connect(ui->weatherModelGroupBox, &QGroupBox::toggled, this, &WeatherModelInput::weatherModelGroupBoxToggled); @@ -59,6 +64,37 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() const char* demFile = demFileByte.constData(); int hours = ui->weatherModelSpinBox->value(); + if(ui->weatherModelComboBox->currentText().contains("PASTCAST")) + { + QDateTime startDT = ui->pastcastStartDateTimeEdit->dateTime(); + QDateTime endDT = ui->pastcastEndDateTimeEdit->dateTime(); + + // Extract start date and time + QDate startQDate = startDT.date(); + QTime startQTime = startDT.time(); + int startYear = startQDate.year(); + int startMonth = startQDate.month(); + int startDay = startQDate.day(); + int startHour = startQTime.hour(); + + // Extract end date and time + QDate endQDate = endDT.date(); + QTime endQTime = endDT.time(); + int endYear = endQDate.year(); + int endMonth = endQDate.month(); + int endDay = endQDate.day(); + int endHour = endQTime.hour(); + + ninjaErr = NinjaFetchArchiveWeatherData(ninjaTools, modelIdentifier, demFile, startYear, startMonth, startDay, startHour, endYear, endMonth, endDay, endHour); + if (ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaFetchArchiveWeatherData: " << ninjaErr; + } + + + return; + } + ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, hours); if (ninjaErr != NINJA_SUCCESS) { @@ -68,6 +104,13 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() void WeatherModelInput::weatherModelComboBoxCurrentIndexChanged(int index) { + if(ui->weatherModelComboBox->currentText().contains("PASTCAST")) + { + ui->weatherModelSpinBox->setDisabled(true); + ui->pastcastGroupBox->setVisible(true); + + return; + } QByteArray modelIdentifierByte = ui->weatherModelComboBox->currentText().toUtf8(); const char* modelIdentifier = modelIdentifierByte.constData(); int starHour, endHour; @@ -94,7 +137,7 @@ void WeatherModelInput::setUpTreeView() QFileInfo demFileInfo(demFilePath); fileModel->setRootPath(demFileInfo.absolutePath()); - fileModel->setNameFilters({"*.zip", "NOMADS-*", "20*", "UCAR-*"}); + fileModel->setNameFilters({"*.zip", "NOMADS-*", "20*", "UCAR-*", "PASTCAST-*"}); fileModel->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); fileModel->setNameFilterDisables(false); diff --git a/src/ninja/ninjaTools.cpp b/src/ninja/ninjaTools.cpp index 7831f730a..1fa377035 100644 --- a/src/ninja/ninjaTools.cpp +++ b/src/ninja/ninjaTools.cpp @@ -46,6 +46,9 @@ std::vector ninjaTools::getForecastIdentifiers() { modelIdentifiers.push_back(nomadsModels[i]->getForecastIdentifier()); } + + GCPWxModel archive; + modelIdentifiers.push_back(archive.getForecastIdentifier()); return modelIdentifiers; } diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 88c2a047d..7f9f6c24d 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -311,6 +311,22 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchWeatherData(NinjaToolsH* tools, const cha } } +WINDNINJADLL_EXPORT NinjaErr NinjaFetchArchiveWeatherData(NinjaToolsH* tools, const char* modelName, const char* demFile, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour) +{ + wxModelInitialization *model = wxModelInitializationFactory::makeWxInitializationFromId(std::string(modelName)); + + boost::gregorian::date startDate(startYear, startMonth, startDay); + boost::gregorian::date endDate(endYear, endMonth, endDay); + + int hours = 0; + + auto* forecastModel = dynamic_cast(model); + forecastModel->setDateTime(startDate, endDate, boost::lexical_cast(startHour), boost::lexical_cast(endHour)); + forecastModel->fetchForecast(demFile, hours); + + return NINJA_SUCCESS; +} + WINDNINJADLL_EXPORT const char** NinjaGetAllWeatherModelIdentifiers(NinjaToolsH* tools, int* count) { if (!tools || !count) diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index aaa05c498..7a9fbdd40 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -104,6 +104,9 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaFetchWeatherData (NinjaToolsH* tools, const char* modelName, const char* demFile, int hours); + WINDNINJADLL_EXPORT NinjaErr NinjaFetchArchiveWeatherData + (NinjaToolsH* tools, const char* modelName, const char* demFile, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour); + WINDNINJADLL_EXPORT const char** NinjaGetAllWeatherModelIdentifiers(NinjaToolsH* tools, int* count); WINDNINJADLL_EXPORT NinjaErr NinjaGetWeatherModelHours From 00ca415f0018a45c1e74b6b6c0930a63979e57d2 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 10 Nov 2025 11:15:36 -0700 Subject: [PATCH 274/435] Code clean up, refactoring, and added free function for weather model time list, for #637 --- src/gui/mainwindow.cpp | 8 ++-- src/gui/pointinitializationinput.cpp | 2 +- src/gui/pointinitializationinput.h | 2 +- src/gui/surfaceinput.h | 2 +- src/gui/weathermodelinput.cpp | 57 ++++++++++++++++------------ src/gui/weathermodelinput.h | 13 ++++++- src/ninja/windninja.cpp | 38 ++++++++++++++++--- src/ninja/windninja.h | 9 ++++- 8 files changed, 90 insertions(+), 41 deletions(-) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index db5aaec23..c4b6f9402 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -170,7 +170,7 @@ void MainWindow::refreshUI() ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad wind input."); } - if(state.isGoogleEarthToggled) + if(state.isGoogleEarthToggled)setupTreeView { if(state.isSurfaceInputValid) { @@ -504,11 +504,11 @@ void MainWindow::connectSignals() connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); connect(menuBar, &MenuBar::writeToConsole, this, &MainWindow::writeToConsole); -// connect(menuBar, SIGNAL( writeToConsole(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) )); // other way to do it +// connect(menuBar, SIGNAL( writeToConsole(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) )); // other way to do it connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); connect(surfaceInput, &SurfaceInput::requestRefresh, this, &MainWindow::refreshUI); - connect(surfaceInput, &SurfaceInput::setupTreeView, pointInitializationInput, &PointInitializationInput::setupTreeView); - connect(surfaceInput, &SurfaceInput::setupTreeView, weatherModelInput, &WeatherModelInput::setUpTreeView); + connect(surfaceInput, &SurfaceInput::updateTreeView, pointInitializationInput, &PointInitializationInput::updateTreeView); + connect(surfaceInput, &SurfaceInput::updateTreeView, weatherModelInput, &WeatherModelInput::updateTreeView); connect(domainAverageInput, &DomainAverageInput::requestRefresh, this, &MainWindow::refreshUI); connect(pointInitializationInput, &PointInitializationInput::requestRefresh, this, &MainWindow::refreshUI); connect(weatherModelInput, &WeatherModelInput::requestRefresh, this, &MainWindow::refreshUI); diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointinitializationinput.cpp index eba416538..837c20578 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointinitializationinput.cpp @@ -239,7 +239,7 @@ void PointInitializationInput::weatherStationDataTimeComboBoxCurrentIndexChanged ui->weatherStationDataTimeStackedWidget->setCurrentIndex(index); } -void PointInitializationInput::setupTreeView() +void PointInitializationInput::updateTreeView() { AppState& state = AppState::instance(); state.isStationFileSelectionValid = false; diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointinitializationinput.h index ff146c7fb..d4f80109b 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointinitializationinput.h @@ -59,7 +59,7 @@ class PointInitializationInput : public QObject void requestRefresh(); public slots: - void setupTreeView(); + void updateTreeView(); private slots: void pointInitializationGroupBoxToggled(bool toggled); diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceinput.h index a4a3bfcdb..3e41a71ed 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceinput.h @@ -63,7 +63,7 @@ class SurfaceInput : public QObject signals: void requestRefresh(); - void setupTreeView(); + void updateTreeView(); public slots: void boundingBoxReceived(double north, double south, double east, double west); diff --git a/src/gui/weathermodelinput.cpp b/src/gui/weathermodelinput.cpp index 6fd679cd8..51c6e8c59 100644 --- a/src/gui/weathermodelinput.cpp +++ b/src/gui/weathermodelinput.cpp @@ -36,7 +36,7 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) ninjaTools = NinjaMakeTools(); ui->pastcastGroupBox->hide(); - ui->pastcastStartDateTimeEdit->setDateTime(QDateTime::currentDateTimeUtc()); + ui->pastcastStartDateTimeEdit->setDateTime(QDateTime::currentDateTimeUtc().addDays(-1)); ui->pastcastEndDateTimeEdit->setDateTime(QDateTime::currentDateTimeUtc()); int identifiersSize = 0; @@ -66,24 +66,22 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() if(ui->weatherModelComboBox->currentText().contains("PASTCAST")) { - QDateTime startDT = ui->pastcastStartDateTimeEdit->dateTime(); - QDateTime endDT = ui->pastcastEndDateTimeEdit->dateTime(); - - // Extract start date and time - QDate startQDate = startDT.date(); - QTime startQTime = startDT.time(); - int startYear = startQDate.year(); - int startMonth = startQDate.month(); - int startDay = startQDate.day(); - int startHour = startQTime.hour(); - - // Extract end date and time - QDate endQDate = endDT.date(); - QTime endQTime = endDT.time(); - int endYear = endQDate.year(); - int endMonth = endQDate.month(); - int endDay = endQDate.day(); - int endHour = endQTime.hour(); + QDateTime startDateTime = ui->pastcastStartDateTimeEdit->dateTime(); + QDateTime endDateTime = ui->pastcastEndDateTimeEdit->dateTime(); + + QDate startDate = startDateTime.date(); + QTime startTime = startDateTime.time(); + int startYear = startDate.year(); + int startMonth = startDate.month(); + int startDay = startDate.day(); + int startHour = startTime.hour(); + + QDate endDate = endDateTime.date(); + QTime endTime = endDateTime.time(); + int endYear = endDate.year(); + int endMonth = endDate.month(); + int endDay = endDate.day(); + int endHour = endTime.hour(); ninjaErr = NinjaFetchArchiveWeatherData(ninjaTools, modelIdentifier, demFile, startYear, startMonth, startDay, startHour, endYear, endMonth, endDay, endHour); if (ninjaErr != NINJA_SUCCESS) @@ -91,7 +89,6 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() qDebug() << "NinjaFetchArchiveWeatherData: " << ninjaErr; } - return; } @@ -111,6 +108,7 @@ void WeatherModelInput::weatherModelComboBoxCurrentIndexChanged(int index) return; } + QByteArray modelIdentifierByte = ui->weatherModelComboBox->currentText().toUtf8(); const char* modelIdentifier = modelIdentifierByte.constData(); int starHour, endHour; @@ -125,7 +123,7 @@ void WeatherModelInput::weatherModelComboBoxCurrentIndexChanged(int index) ui->weatherModelSpinBox->setMaximum(endHour); } -void WeatherModelInput::setUpTreeView() +void WeatherModelInput::updateTreeView() { AppState& state = AppState::instance(); state.isWeatherModelForecastValid = false; @@ -174,13 +172,14 @@ void WeatherModelInput::setUpTreeView() connect(ui->weatherModelFileTreeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged); } -void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) +void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged(const QItemSelection &selected) { AppState& state = AppState::instance(); - state.isWeatherModelForecastValid = true; if (selected.indexes().empty()) { + state.isWeatherModelForecastValid = false; + return; } @@ -188,12 +187,16 @@ void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged(const QItem QFileInfo fileInfo = fileModel->fileInfo(index); if(fileInfo.isDir()) { - state.isWeatherModelForecastValid = false; timeModel->clear(); + + state.isWeatherModelForecastValid = false; emit requestRefresh(); + return; } + state.isWeatherModelForecastValid = true; + std::string modelFilePath = fileModel->filePath(index).toStdString(); std::string timeZone = ui->timeZoneComboBox->currentText().toStdString(); int timeListSize = 0; @@ -213,6 +216,12 @@ void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged(const QItem ui->weatherModelTimeTreeView->selectAll(); + ninjaErr = NinjaFreeWeatherModelTimeList(timeList, timeListSize); + if(ninjaErr == NINJA_SUCCESS) + { + qDebug() << "NinjaFreeWeatherModelTimeList: " << ninjaErr; + } + emit requestRefresh(); } diff --git a/src/gui/weathermodelinput.h b/src/gui/weathermodelinput.h index 0c6580844..a9c151ff7 100644 --- a/src/gui/weathermodelinput.h +++ b/src/gui/weathermodelinput.h @@ -33,8 +33,12 @@ #include "ui_mainwindow.h" #include "windninja.h" #include "appstate.h" +#include "QTimeZone" #include "QFileSystemModel" #include +#include +#include +#include #include namespace Ui { @@ -46,14 +50,17 @@ class WeatherModelInput : public QObject Q_OBJECT public: explicit WeatherModelInput(Ui::MainWindow* ui, QObject* parent = nullptr); - void setUpTreeView(); signals: void requestRefresh(); +public slots: + void updateTreeView(); + + private slots: void weatherModelDownloadButtonClicked(); - void weatherModelFileTreeViewItemSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); + void weatherModelFileTreeViewItemSelectionChanged(const QItemSelection &selected); void weatherModelTimeSelectAllButtonClicked(); void weatherModelTimeSelectNoneButtonClicked(); void weatherModelGroupBoxToggled(bool toggled); @@ -65,6 +72,8 @@ private slots: NinjaErr ninjaErr; QFileSystemModel *fileModel; QStandardItemModel *timeModel; + QProgressDialog *progress; + QFutureWatcher *futureWatcher; }; #endif // WEATHERMODELINPUT_H diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 7f9f6c24d..151fa005a 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -298,7 +298,8 @@ WINDNINJADLL_EXPORT NinjaToolsH* NinjaMakeTools() return army; } -WINDNINJADLL_EXPORT NinjaErr NinjaFetchWeatherData(NinjaToolsH* tools, const char* modelName, const char* demFile, int hours) +WINDNINJADLL_EXPORT NinjaErr NinjaFetchWeatherData + (NinjaToolsH* tools, const char* modelName, const char* demFile, int hours) { if(tools != NULL) { @@ -311,7 +312,8 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchWeatherData(NinjaToolsH* tools, const cha } } -WINDNINJADLL_EXPORT NinjaErr NinjaFetchArchiveWeatherData(NinjaToolsH* tools, const char* modelName, const char* demFile, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour) +WINDNINJADLL_EXPORT NinjaErr NinjaFetchArchiveWeatherData + (NinjaToolsH* tools, const char* modelName, const char* demFile, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour) { wxModelInitialization *model = wxModelInitializationFactory::makeWxInitializationFromId(std::string(modelName)); @@ -327,7 +329,8 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchArchiveWeatherData(NinjaToolsH* tools, co return NINJA_SUCCESS; } -WINDNINJADLL_EXPORT const char** NinjaGetAllWeatherModelIdentifiers(NinjaToolsH* tools, int* count) +WINDNINJADLL_EXPORT const char** NinjaGetAllWeatherModelIdentifiers + (NinjaToolsH* tools, int* count) { if (!tools || !count) return nullptr; @@ -346,13 +349,17 @@ WINDNINJADLL_EXPORT const char** NinjaGetAllWeatherModelIdentifiers(NinjaToolsH* return identifiers; } -WINDNINJADLL_EXPORT NinjaErr NinjaFreeAllWeatherModelIdentifiers(const char** identifiers, int count) +WINDNINJADLL_EXPORT NinjaErr NinjaFreeAllWeatherModelIdentifiers + (const char** identifiers, int count) { if (!identifiers) + { return NINJA_E_NULL_PTR; + } char** ids = (char**)identifiers; - for (int i = 0; i < count; ++i) { + for (int i = 0; i < count; i++) + { delete[] ids[i]; } delete[] ids; @@ -360,7 +367,8 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFreeAllWeatherModelIdentifiers(const char** id return NINJA_SUCCESS; } -WINDNINJADLL_EXPORT const char** NinjaGetWeatherModelTimeList(NinjaToolsH* tools, int* count, const char* fileName, const char* timeZone) +WINDNINJADLL_EXPORT const char** NinjaGetWeatherModelTimeList + (NinjaToolsH* tools, int* count, const char* fileName, const char* timeZone) { if (!tools) return nullptr; @@ -380,6 +388,24 @@ WINDNINJADLL_EXPORT const char** NinjaGetWeatherModelTimeList(NinjaToolsH* tools return timeList; } +WINDNINJADLL_EXPORT NinjaErr NinjaFreeWeatherModelTimeList + (const char** timeList, int timeListSize) +{ + if (!timeList) + { + return NINJA_E_NULL_PTR; + } + + char** times = (char**)timeList; + for (int i = 0; i < timeListSize; i++) + { + delete[] times[i]; + } + delete[] times; + + return NINJA_SUCCESS; +} + WINDNINJADLL_EXPORT NinjaErr NinjaGetWeatherModelHours (NinjaToolsH* tools, const char* modelIdentifier, int* startHour, int* endHour) { diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 7a9fbdd40..295d3a048 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -112,9 +112,14 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaGetWeatherModelHours (NinjaToolsH* tools, const char* modelIdentifier, int* starHours, int* endHour); - WINDNINJADLL_EXPORT NinjaErr NinjaFreeAllWeatherModelIdentifiers(const char** identifiers, int count); + WINDNINJADLL_EXPORT NinjaErr NinjaFreeAllWeatherModelIdentifiers + (const char** identifiers, int count); - WINDNINJADLL_EXPORT const char** NinjaGetWeatherModelTimeList(NinjaToolsH * tools, int * count, const char * fileName, const char * timeZone); + WINDNINJADLL_EXPORT const char** NinjaGetWeatherModelTimeList + (NinjaToolsH * tools, int * count, const char * fileName, const char * timeZone); + + WINDNINJADLL_EXPORT NinjaErr NinjaFreeWeatherModelTimeList + (const char** timeList, int timeListSize); WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationFromBBox (const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char * elevationFile, double buffer, const char* units, const char * timeZone, bool fetchLatestFlag, const char * outputPath, bool locationFileFlag, char ** options ); From 3869afc26583165bacbfa23e455ec0c6186b3e1f Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 10 Nov 2025 14:57:55 -0700 Subject: [PATCH 275/435] Changed file names to match ninja naming conventions (Camel Case) and moved appState function from mainWindow to the appState class --- src/gui/CMakeLists.txt | 43 +-- src/gui/appState.cpp | 323 +++++++++++++++++ src/gui/{appstate.h => appState.h} | 22 +- ...verageinput.cpp => domainAverageInput.cpp} | 4 +- ...ainaverageinput.h => domainAverageInput.h} | 4 +- src/gui/main.cpp | 4 +- src/gui/{mainwindow.cpp => mainWindow.cpp} | 327 ++---------------- src/gui/{mainwindow.h => mainWindow.h} | 23 +- src/gui/{mainwindow.ui => mainWindow.ui} | 0 src/gui/{mapbridge.cpp => mapBridge.cpp} | 2 +- src/gui/{mapbridge.h => mapBridge.h} | 0 src/gui/{menubar.cpp => menuBar.cpp} | 2 +- src/gui/{menubar.h => menuBar.h} | 4 +- ...input.cpp => pointInitializationInput.cpp} | 2 +- ...tioninput.h => pointInitializationInput.h} | 4 +- .../{serverbridge.cpp => serverBridge.cpp} | 2 +- src/gui/{serverbridge.h => serverBridge.h} | 0 ...g.cpp => setConfigurationDialogOption.cpp} | 4 +- ...ialog.h => setConfigurationDialogOption.h} | 6 +- ...log.ui => setConfigurationDialogOption.ui} | 0 .../{splashscreen.cpp => splashScreen.cpp} | 2 +- src/gui/{splashscreen.h => splashScreen.h} | 0 .../{surfaceinput.cpp => surfaceInput.cpp} | 4 +- src/gui/{surfaceinput.h => surfaceInput.h} | 4 +- ...ermodelinput.cpp => weatherModelInput.cpp} | 2 +- ...eathermodelinput.h => weatherModelInput.h} | 4 +- 26 files changed, 423 insertions(+), 369 deletions(-) create mode 100644 src/gui/appState.cpp rename src/gui/{appstate.h => appState.h} (91%) rename src/gui/{domainaverageinput.cpp => domainAverageInput.cpp} (99%) rename src/gui/{domainaverageinput.h => domainAverageInput.h} (97%) rename src/gui/{mainwindow.cpp => mainWindow.cpp} (78%) rename src/gui/{mainwindow.h => mainWindow.h} (94%) rename src/gui/{mainwindow.ui => mainWindow.ui} (100%) rename src/gui/{mapbridge.cpp => mapBridge.cpp} (98%) rename src/gui/{mapbridge.h => mapBridge.h} (100%) rename src/gui/{menubar.cpp => menuBar.cpp} (99%) rename src/gui/{menubar.h => menuBar.h} (98%) rename src/gui/{pointinitializationinput.cpp => pointInitializationInput.cpp} (99%) rename src/gui/{pointinitializationinput.h => pointInitializationInput.h} (98%) rename src/gui/{serverbridge.cpp => serverBridge.cpp} (99%) rename src/gui/{serverbridge.h => serverBridge.h} (100%) rename src/gui/{setconfigurationoptiondialog.cpp => setConfigurationDialogOption.cpp} (83%) rename src/gui/{setconfigurationoptiondialog.h => setConfigurationDialogOption.h} (75%) rename src/gui/{setconfigurationoptiondialog.ui => setConfigurationDialogOption.ui} (100%) rename src/gui/{splashscreen.cpp => splashScreen.cpp} (99%) rename src/gui/{splashscreen.h => splashScreen.h} (100%) rename src/gui/{surfaceinput.cpp => surfaceInput.cpp} (99%) rename src/gui/{surfaceinput.h => surfaceInput.h} (98%) rename src/gui/{weathermodelinput.cpp => weatherModelInput.cpp} (99%) rename src/gui/{weathermodelinput.h => weatherModelInput.h} (98%) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 4ec68bd47..839c07845 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -14,9 +14,9 @@ find_package(Qt6 REQUIRED COMPONENTS Widgets WebEngineWidgets) set(PROJECT_SOURCES main.cpp - mainwindow.cpp - mainwindow.h - mainwindow.ui + mainWindow.cpp + mainWindow.h + mainWindow.ui ) if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) @@ -24,24 +24,25 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) MANUAL_FINALIZATION ${PROJECT_SOURCES} ${CMAKE_SOURCE_DIR}/wn-resources.qrc - appstate.h - splashscreen.h - splashscreen.cpp - surfaceinput.h - surfaceinput.cpp - setconfigurationoptiondialog.h - setconfigurationoptiondialog.cpp - setconfigurationoptiondialog.ui - menubar.h - menubar.cpp - mapbridge.h - mapbridge.cpp - surfaceinput.h - surfaceinput.cpp - serverbridge.h serverbridge.cpp - domainaverageinput.h domainaverageinput.cpp - weathermodelinput.h weathermodelinput.cpp - pointinitializationinput.h pointinitializationinput.cpp + appState.h + splashScreen.h + splashScreen.cpp + surfaceInput.h + surfaceInput.cpp + setConfigurationDialogOption.h + setConfigurationDialogOption.cpp + setConfigurationDialogOption.ui + menuBar.h + menuBar.cpp + mapBridge.h + mapBridge.cpp + surfaceInput.h + surfaceInput.cpp + serverBridge.h serverBridge.cpp + domainAverageInput.h domainAverageInput.cpp + weatherModelInput.h weatherModelInput.cpp + pointInitializationInput.h pointInitializationInput.cpp + appState.cpp ) # Define target properties for Android with Qt 6 as: # set_property(TARGET WindNinja APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR diff --git a/src/gui/appState.cpp b/src/gui/appState.cpp new file mode 100644 index 000000000..a207cd7aa --- /dev/null +++ b/src/gui/appState.cpp @@ -0,0 +1,323 @@ + /****************************************************************************** + * + * $Id$ + * + * Project: WindNinja Qt GUI + * Purpose: Stores the states for inputs in the GUI + * Author: Mason Willman + * + ****************************************************************************** + * + * THIS SOFTWARE WAS DEVELOPED AT THE ROCKY MOUNTAIN RESEARCH STATION (RMRS) + * MISSOULA FIRE SCIENCES LABORATORY BY EMPLOYEES OF THE FEDERAL GOVERNMENT + * IN THE COURSE OF THEIR OFFICIAL DUTIES. PURSUANT TO TITLE 17 SECTION 105 + * OF THE UNITED STATES CODE, THIS SOFTWARE IS NOT SUBJECT TO COPYRIGHT + * PROTECTION AND IS IN THE PUBLIC DOMAIN. RMRS MISSOULA FIRE SCIENCES + * LABORATORY ASSUMES NO RESPONSIBILITY WHATSOEVER FOR ITS USE BY OTHER + * PARTIES, AND MAKES NO GUARANTEES, EXPRESSED OR IMPLIED, ABOUT ITS QUALITY, + * RELIABILITY, OR ANY OTHER CHARACTERISTIC. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + *****************************************************************************/ + +#include "appState.h" + +AppState& AppState::instance() +{ + static AppState s; + return s; +} + +void AppState::setUi(Ui::MainWindow* mainUi) +{ + ui = mainUi; +} + +/* + * Helper function to refresh the ui state of the app + * Called on every user input action + */ +void AppState::refreshUI() +{ + AppState& state = AppState::instance(); + + QIcon tickIcon(":/tick.png"); + QIcon xIcon(":/cross.png"); + QIcon bulletIcon(":/bullet_blue.png"); + + ui->treeWidget->setMouseTracking(true); + + // Update Solver Methodology UI + if (state.isMassSolverToggled != state.isMomentumSolverToggled) { + state.isSolverMethodologyValid = true; + ui->treeWidget->topLevelItem(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(0)->setToolTip(0, ""); + } else if (state.isMassSolverToggled && state.isMomentumSolverToggled) { + state.isSolverMethodologyValid = false; + ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently too many selections."); + } else { + state.isSolverMethodologyValid = false; + ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently no selections."); + } + + if (state.isMassSolverToggled) { + ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, tickIcon); + } else { + ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, bulletIcon); + } + + if (state.isMomentumSolverToggled) { + ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, tickIcon); + } else { + ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, bulletIcon); + } + + // Update surface input state + if (ui->elevationInputFileLineEdit->text() != "") { + state.isSurfaceInputValid = true; + ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, ""); + } else { + state.isSurfaceInputValid = false; + ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, "No DEM file detected."); + } + + // Update diurnal input state + if (state.isDiurnalInputToggled) { + ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, tickIcon); + } else { + ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, bulletIcon); + } + + // Update stability input state + if (state.isStabilityInputToggled) { + ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, tickIcon); + } else { + ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, bulletIcon); + } + + // Update domain average initialization + if (state.isDomainAverageInitializationToggled && state.isDomainAverageWindInputTableValid) { + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); + state.isDomainAverageInitializationValid = true; + } else if (state.isDomainAverageInitializationToggled && !state.isDomainAverageWindInputTableValid){ + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "Bad wind inputs; hover over red cells for explanation."); + state.isDomainAverageInitializationValid = false; + } else { + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); + state.isDomainAverageInitializationValid = false; + } + + // Update point initialization + if (state.isPointInitializationToggled && state.isStationFileSelectionValid && state.isStationFileSelected) { + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, ""); + state.isPointInitializationValid = true; + } else if(state.isPointInitializationToggled && !state.isStationFileSelected) { + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, "No station file selected."); + state.isPointInitializationValid = false; + } else if(state.isPointInitializationToggled && !state.isStationFileSelectionValid){ + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, "Conflicting files selected."); + state.isPointInitializationValid = false; + } else { + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, ""); + state.isPointInitializationValid = false; + } + + // Update weather model initialization + if (state.isWeatherModelInitializationToggled && state.isWeatherModelForecastValid) { + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, tickIcon); + state.isWeatherModelInitializationValid = true; + } else if (state.isWeatherModelInitializationToggled && !state.isWeatherModelForecastValid) { + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setToolTip(0, "Forecast is Invalid"); + state.isWeatherModelInitializationValid = false; + } else { + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, bulletIcon); + state.isWeatherModelInitializationValid = false; + } + + // Update wind input + if (state.isDomainAverageInitializationValid || state.isPointInitializationValid || state.isWeatherModelInitializationValid) { + ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, tickIcon); + state.isWindInputValid = true; + } else { + ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, xIcon); + state.isWindInputValid = false; + } + + // Update overall input UI state + if (state.isSurfaceInputValid && state.isWindInputValid) { + state.isInputsValid = true; + ui->treeWidget->topLevelItem(1)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, ""); + } else if (!state.isSurfaceInputValid && !state.isWindInputValid) { + state.isInputsValid = false; + ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface and wind inputs."); + } else if (!state.isSurfaceInputValid) { + state.isInputsValid = false; + ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface input."); + } else if (!state.isWindInputValid) { + state.isInputsValid = false; + ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad wind input."); + } + + if(state.isGoogleEarthToggled) + { + if(state.isSurfaceInputValid) + { + state.isGoogleEarthValid = true; + ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + state.isGoogleEarthValid = false; + ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); + ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->child(0)->setToolTip(0, "Cannot read DEM File"); + } + } + else + { + state.isGoogleEarthValid = false; + ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, bulletIcon); + } + if(state.isFireBehaviorToggled) + { + if(state.isSurfaceInputValid) + { + state.isFireBehaviorValid = true; + ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + state.isFireBehaviorValid = false; + ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); + ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->child(1)->setToolTip(0, "Cannot read DEM File"); + } + } + else + { + state.isFireBehaviorValid = false; + ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, bulletIcon); + } + if(state.isShapeFilesToggled) + { + if(state.isSurfaceInputValid) + { + state.isShapeFilesValid = true; + ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + state.isShapeFilesValid = false; + ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); + ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->child(2)->setToolTip(0, "Cannot read DEM File"); + } + } + else + { + state.isShapeFilesValid = false; + ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, bulletIcon); + } + if(state.isGeoSpatialPDFFilesToggled) + { + if(state.isSurfaceInputValid) + { + state.isGeoSpatialPDFFilesValid = true; + ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + state.isGeoSpatialPDFFilesValid = false; + ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); + ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->child(3)->setToolTip(0, "Cannot read DEM File"); + } + } + else + { + state.isGeoSpatialPDFFilesValid = false; + ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, bulletIcon); + } + if(state.isVTKFilesToggled) + { + if(state.isSurfaceInputValid) + { + state.isVTKFilesValid = true; + ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + state.isVTKFilesValid = false; + ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); + ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->child(4)->setToolTip(0, "Cannot read DEM File"); + } + } + else + { + state.isVTKFilesValid = false; + ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, bulletIcon); + } + + + if(state.isGoogleEarthValid || state.isFireBehaviorValid || state.isShapeFilesValid || state.isGeoSpatialPDFFilesValid || state.isVTKFilesValid) + { + state.isOutputsValid = true; + ui->treeWidget->topLevelItem(2)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "No Output Selected"); + } + + if (state.isSolverMethodologyValid && state.isInputsValid && state.isOutputsValid) { + ui->solveButton->setEnabled(true); + ui->numberOfProcessorsSolveButton->setEnabled(true); + ui->solveButton->setToolTip(""); + ui->numberOfProcessorsSolveButton->setToolTip(""); + ui->treeWidget->topLevelItem(3)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(3)->setToolTip(0, ""); + } else { + ui->solveButton->setEnabled(false); + ui->numberOfProcessorsSolveButton->setEnabled(false); + ui->solveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); + ui->numberOfProcessorsSolveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); + ui->treeWidget->topLevelItem(3)->setIcon(0, xIcon); + ui->treeWidget->topLevelItem(3)->setToolTip(0, "There are errors in the inputs or outputs"); + } +} diff --git a/src/gui/appstate.h b/src/gui/appState.h similarity index 91% rename from src/gui/appstate.h rename to src/gui/appState.h index 9c3f4b55a..3b765034c 100644 --- a/src/gui/appstate.h +++ b/src/gui/appState.h @@ -30,14 +30,18 @@ #ifndef APPSTATE_H #define APPSTATE_H -class AppState +#include "ui_mainWindow.h" +#include + + +class AppState : public QObject { + Q_OBJECT + public: - static AppState& instance() - { - static AppState s; - return s; - } + static AppState& instance(); + void setUi(Ui::MainWindow* mainUi); + void refreshUI(); // Solver Methodology states bool isSolverMethodologyValid = false; @@ -81,11 +85,11 @@ class AppState // All Inputs Ok bool isSolverReady = false; - private: - AppState() {} // private constructor - AppState(const AppState&) = delete; // prevent copying + AppState() {} + AppState(const AppState&) = delete; AppState& operator=(const AppState&) = delete; + Ui::MainWindow *ui; }; #endif // APPSTATE_H diff --git a/src/gui/domainaverageinput.cpp b/src/gui/domainAverageInput.cpp similarity index 99% rename from src/gui/domainaverageinput.cpp rename to src/gui/domainAverageInput.cpp index 607412c19..f93612307 100644 --- a/src/gui/domainaverageinput.cpp +++ b/src/gui/domainAverageInput.cpp @@ -27,8 +27,8 @@ * *****************************************************************************/ -#include "domainaverageinput.h" -#include "ui_mainwindow.h" +#include "domainAverageInput.h" +#include "ui_mainWindow.h" DomainAverageInput::DomainAverageInput(Ui::MainWindow* ui, QObject* parent) : QObject(parent), diff --git a/src/gui/domainaverageinput.h b/src/gui/domainAverageInput.h similarity index 97% rename from src/gui/domainaverageinput.h rename to src/gui/domainAverageInput.h index e4c12d053..7f0e8e30c 100644 --- a/src/gui/domainaverageinput.h +++ b/src/gui/domainAverageInput.h @@ -30,8 +30,8 @@ #ifndef DOMAINAVERAGEINPUT_H #define DOMAINAVERAGEINPUT_H -#include "appstate.h" -#include "ui_mainwindow.h" +#include "appState.h" +#include "ui_mainWindow.h" #include #include #include diff --git a/src/gui/main.cpp b/src/gui/main.cpp index b10279f39..fcd7f205c 100755 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -27,7 +27,7 @@ * *****************************************************************************/ -#include "mainwindow.h" +#include "mainWindow.h" #include "windninja.h" #include #include @@ -38,7 +38,7 @@ #include #include #include -#include "splashscreen.h" +#include "splashScreen.h" int main(int argc, char *argv[]) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainWindow.cpp similarity index 78% rename from src/gui/mainwindow.cpp rename to src/gui/mainWindow.cpp index c4b6f9402..f74286e80 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainWindow.cpp @@ -27,289 +27,7 @@ * *****************************************************************************/ -#include "mainwindow.h" - -/* - * Helper function to refresh the ui state of the app - * Called on every user input action - */ -void MainWindow::refreshUI() -{ - AppState& state = AppState::instance(); - - QIcon tickIcon(":/tick.png"); - QIcon xIcon(":/cross.png"); - QIcon bulletIcon(":/bullet_blue.png"); - - ui->treeWidget->setMouseTracking(true); - - // Update Solver Methodology UI - if (state.isMassSolverToggled != state.isMomentumSolverToggled) { - state.isSolverMethodologyValid = true; - ui->treeWidget->topLevelItem(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(0)->setToolTip(0, ""); - } else if (state.isMassSolverToggled && state.isMomentumSolverToggled) { - state.isSolverMethodologyValid = false; - ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently too many selections."); - } else { - state.isSolverMethodologyValid = false; - ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently no selections."); - } - - if (state.isMassSolverToggled) { - ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, tickIcon); - } else { - ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, bulletIcon); - } - - if (state.isMomentumSolverToggled) { - ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, tickIcon); - } else { - ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, bulletIcon); - } - - // Update surface input state - if (ui->elevationInputFileLineEdit->text() != "") { - state.isSurfaceInputValid = true; - ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, ""); - } else { - state.isSurfaceInputValid = false; - ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, "No DEM file detected."); - } - - // Update diurnal input state - if (state.isDiurnalInputToggled) { - ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, tickIcon); - } else { - ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, bulletIcon); - } - - // Update stability input state - if (state.isStabilityInputToggled) { - ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, tickIcon); - } else { - ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, bulletIcon); - } - - // Update domain average initialization - if (state.isDomainAverageInitializationToggled && state.isDomainAverageWindInputTableValid) { - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); - state.isDomainAverageInitializationValid = true; - } else if (state.isDomainAverageInitializationToggled && !state.isDomainAverageWindInputTableValid){ - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "Bad wind inputs; hover over red cells for explanation."); - state.isDomainAverageInitializationValid = false; - } else { - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, bulletIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); - state.isDomainAverageInitializationValid = false; - } - - // Update point initialization - if (state.isPointInitializationToggled && state.isStationFileSelectionValid && state.isStationFileSelected) { - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, ""); - state.isPointInitializationValid = true; - } else if(state.isPointInitializationToggled && !state.isStationFileSelected) { - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, "No station file selected."); - state.isPointInitializationValid = false; - } else if(state.isPointInitializationToggled && !state.isStationFileSelectionValid){ - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, "Conflicting files selected."); - state.isPointInitializationValid = false; - } else { - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, bulletIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, ""); - state.isPointInitializationValid = false; - } - - // Update weather model initialization - if (state.isWeatherModelInitializationToggled && state.isWeatherModelForecastValid) { - ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, tickIcon); - state.isWeatherModelInitializationValid = true; - } else if (state.isWeatherModelInitializationToggled && !state.isWeatherModelForecastValid) { - ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setToolTip(0, "Forecast is Invalid"); - state.isWeatherModelInitializationValid = false; - } else { - ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, bulletIcon); - state.isWeatherModelInitializationValid = false; - } - - // Update wind input - if (state.isDomainAverageInitializationValid || state.isPointInitializationValid || state.isWeatherModelInitializationValid) { - ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, tickIcon); - state.isWindInputValid = true; - } else { - ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, xIcon); - state.isWindInputValid = false; - } - - // Update overall input UI state - if (state.isSurfaceInputValid && state.isWindInputValid) { - state.isInputsValid = true; - ui->treeWidget->topLevelItem(1)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, ""); - } else if (!state.isSurfaceInputValid && !state.isWindInputValid) { - state.isInputsValid = false; - ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface and wind inputs."); - } else if (!state.isSurfaceInputValid) { - state.isInputsValid = false; - ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface input."); - } else if (!state.isWindInputValid) { - state.isInputsValid = false; - ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad wind input."); - } - - if(state.isGoogleEarthToggled)setupTreeView - { - if(state.isSurfaceInputValid) - { - state.isGoogleEarthValid = true; - ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); - } - else - { - state.isGoogleEarthValid = false; - ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); - ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->child(0)->setToolTip(0, "Cannot read DEM File"); - } - } - else - { - state.isGoogleEarthValid = false; - ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, bulletIcon); - } - if(state.isFireBehaviorToggled) - { - if(state.isSurfaceInputValid) - { - state.isFireBehaviorValid = true; - ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); - } - else - { - state.isFireBehaviorValid = false; - ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); - ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->child(1)->setToolTip(0, "Cannot read DEM File"); - } - } - else - { - state.isFireBehaviorValid = false; - ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, bulletIcon); - } - if(state.isShapeFilesToggled) - { - if(state.isSurfaceInputValid) - { - state.isShapeFilesValid = true; - ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); - } - else - { - state.isShapeFilesValid = false; - ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); - ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->child(2)->setToolTip(0, "Cannot read DEM File"); - } - } - else - { - state.isShapeFilesValid = false; - ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, bulletIcon); - } - if(state.isGeoSpatialPDFFilesToggled) - { - if(state.isSurfaceInputValid) - { - state.isGeoSpatialPDFFilesValid = true; - ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); - } - else - { - state.isGeoSpatialPDFFilesValid = false; - ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); - ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->child(3)->setToolTip(0, "Cannot read DEM File"); - } - } - else - { - state.isGeoSpatialPDFFilesValid = false; - ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, bulletIcon); - } - if(state.isVTKFilesToggled) - { - if(state.isSurfaceInputValid) - { - state.isVTKFilesValid = true; - ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); - } - else - { - state.isVTKFilesValid = false; - ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); - ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->child(4)->setToolTip(0, "Cannot read DEM File"); - } - } - else - { - state.isVTKFilesValid = false; - ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, bulletIcon); - } - - - if(state.isGoogleEarthValid || state.isFireBehaviorValid || state.isShapeFilesValid || state.isGeoSpatialPDFFilesValid || state.isVTKFilesValid) - { - state.isOutputsValid = true; - ui->treeWidget->topLevelItem(2)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); - } - else - { - ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, "No Output Selected"); - } - - if (state.isSolverMethodologyValid && state.isInputsValid && state.isOutputsValid) { - ui->solveButton->setEnabled(true); - ui->numberOfProcessorsSolveButton->setEnabled(true); - ui->solveButton->setToolTip(""); - ui->numberOfProcessorsSolveButton->setToolTip(""); - ui->treeWidget->topLevelItem(3)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(3)->setToolTip(0, ""); - } else { - ui->solveButton->setEnabled(false); - ui->numberOfProcessorsSolveButton->setEnabled(false); - ui->solveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); - ui->numberOfProcessorsSolveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); - ui->treeWidget->topLevelItem(3)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(3)->setToolTip(0, "There are errors in the inputs or outputs"); - } -} +#include "mainWindow.h" void MainWindow::writeToConsole(QString message, QColor color) { @@ -374,16 +92,20 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { + ui->setupUi(this); + resize(1200, 700); + ui->treeWidget->expandAll(); + + AppState& state = AppState::instance(); + state.setUi(ui); + ui->massSolverCheckBox->setChecked(true); + state.isMassSolverToggled = true; + lineNumber = 1; serverBridge = new ServerBridge(); serverBridge->checkMessages(); - ui->setupUi(this); - resize(1200, 700); - refreshUI(); - ui->treeWidget->expandAll(); - QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true); QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); QString dataPath = QString::fromUtf8(CPLGetConfigOption("WINDNINJA_DATA", "")); @@ -466,6 +188,8 @@ MainWindow::MainWindow(QWidget *parent) writeToConsole(version, Qt::blue); writeToConsole("WINDNINJA_DATA=" + dataPath); + + emit requestRefresh(); } MainWindow::~MainWindow() @@ -506,12 +230,13 @@ void MainWindow::connectSignals() connect(menuBar, &MenuBar::writeToConsole, this, &MainWindow::writeToConsole); // connect(menuBar, SIGNAL( writeToConsole(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) )); // other way to do it connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); - connect(surfaceInput, &SurfaceInput::requestRefresh, this, &MainWindow::refreshUI); + connect(surfaceInput, &SurfaceInput::requestRefresh, &AppState::instance(), &AppState::refreshUI); connect(surfaceInput, &SurfaceInput::updateTreeView, pointInitializationInput, &PointInitializationInput::updateTreeView); connect(surfaceInput, &SurfaceInput::updateTreeView, weatherModelInput, &WeatherModelInput::updateTreeView); - connect(domainAverageInput, &DomainAverageInput::requestRefresh, this, &MainWindow::refreshUI); - connect(pointInitializationInput, &PointInitializationInput::requestRefresh, this, &MainWindow::refreshUI); - connect(weatherModelInput, &WeatherModelInput::requestRefresh, this, &MainWindow::refreshUI); + connect(domainAverageInput, &DomainAverageInput::requestRefresh, &AppState::instance(), &AppState::refreshUI); + connect(pointInitializationInput, &PointInitializationInput::requestRefresh, &AppState::instance(), &AppState::refreshUI); + connect(weatherModelInput, &WeatherModelInput::requestRefresh, &AppState::instance(), &AppState::refreshUI); + connect(this, &MainWindow::requestRefresh, &AppState::instance(), &AppState::refreshUI); } void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) @@ -535,7 +260,7 @@ void MainWindow::massSolverCheckBoxClicked() { ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); } - refreshUI(); + emit requestRefresh(); } void MainWindow::momentumSolverCheckBoxClicked() @@ -553,7 +278,7 @@ void MainWindow::momentumSolverCheckBoxClicked() { ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); } - refreshUI(); + emit requestRefresh(); } void MainWindow::diurnalCheckBoxClicked() @@ -579,7 +304,7 @@ void MainWindow::diurnalCheckBoxClicked() ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); } - refreshUI(); + emit requestRefresh(); } void MainWindow::stabilityCheckBoxClicked() @@ -587,7 +312,7 @@ void MainWindow::stabilityCheckBoxClicked() AppState& state = AppState::instance(); state.isStabilityInputToggled = ui->stabilityCheckBox->isChecked(); - refreshUI(); + emit requestRefresh(); } void MainWindow::outputDirectoryButtonClicked() @@ -922,35 +647,35 @@ void MainWindow::googleEarthGroupBoxToggled(bool checked) { AppState& state = AppState::instance(); state.isGoogleEarthToggled = checked; - refreshUI(); + emit requestRefresh(); } void MainWindow::fireBehaviorGroupBoxToggled(bool checked) { AppState& state = AppState::instance(); state.isFireBehaviorToggled = checked; - refreshUI(); + emit requestRefresh(); } void MainWindow::shapeFilesGroupBoxToggled(bool checked) { AppState& state = AppState::instance(); state.isShapeFilesToggled = checked; - refreshUI(); + emit requestRefresh(); } void MainWindow::geospatialPDFFilesGroupBoxToggled(bool checked) { AppState& state = AppState::instance(); state.isGeoSpatialPDFFilesToggled = checked; - refreshUI(); + emit requestRefresh(); } void MainWindow::VTKFilesCheckBoxClicked(bool checked) { AppState& state = AppState::instance(); state.isVTKFilesToggled = checked; - refreshUI(); + emit requestRefresh(); } void MainWindow::googleEarthMeshResolutionGroupBoxToggled(bool checked) diff --git a/src/gui/mainwindow.h b/src/gui/mainWindow.h similarity index 94% rename from src/gui/mainwindow.h rename to src/gui/mainWindow.h index a5ace7064..651baf0fe 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainWindow.h @@ -30,16 +30,15 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H -#include "surfaceinput.h" -#include "menubar.h" -#include "domainaverageinput.h" -#include "pointinitializationinput.h" -#include "mapbridge.h" -#include "serverbridge.h" -#include "weathermodelinput.h" -#include "ui_mainwindow.h" -#include "appstate.h" -//#include "ninjaCom.h" +#include "surfaceInput.h" +#include "menuBar.h" +#include "domainAverageInput.h" +#include "pointInitializationInput.h" +#include "mapBridge.h" +#include "serverBridge.h" +#include "weatherModelInput.h" +#include "ui_mainWindow.h" +#include "appState.h" #include "windninja.h" #include #include @@ -102,6 +101,9 @@ class MainWindow : public QMainWindow MainWindow(QWidget *parent = nullptr); ~MainWindow(); +signals: + void requestRefresh(); + private slots: void massSolverCheckBoxClicked(); void momentumSolverCheckBoxClicked(); @@ -120,7 +122,6 @@ private slots: void fireBehaviorMeshResolutionGroupBoxToggled(bool checked); void shapeFilesMeshResolutionGroupBoxToggled(bool checked); void geospatialPDFFilesMeshResolutionGroupBoxToggled(bool checked); - void refreshUI(); void writeToConsole(QString message, QColor color = Qt::white); void updateProgressValue(int run, int progress); void updateProgressMessage(const QString message); diff --git a/src/gui/mainwindow.ui b/src/gui/mainWindow.ui similarity index 100% rename from src/gui/mainwindow.ui rename to src/gui/mainWindow.ui diff --git a/src/gui/mapbridge.cpp b/src/gui/mapBridge.cpp similarity index 98% rename from src/gui/mapbridge.cpp rename to src/gui/mapBridge.cpp index ed9e6d55e..3b27bf695 100644 --- a/src/gui/mapbridge.cpp +++ b/src/gui/mapBridge.cpp @@ -27,7 +27,7 @@ * *****************************************************************************/ -#include "mapbridge.h" +#include "mapBridge.h" void MapBridge::receiveBoundingBox(const QString &jsonCoords) { diff --git a/src/gui/mapbridge.h b/src/gui/mapBridge.h similarity index 100% rename from src/gui/mapbridge.h rename to src/gui/mapBridge.h diff --git a/src/gui/menubar.cpp b/src/gui/menuBar.cpp similarity index 99% rename from src/gui/menubar.cpp rename to src/gui/menuBar.cpp index 6a135a8a0..bfbcc6944 100755 --- a/src/gui/menubar.cpp +++ b/src/gui/menuBar.cpp @@ -27,7 +27,7 @@ * *****************************************************************************/ -#include "menubar.h" +#include "menuBar.h" MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) : QObject(parent), ui(ui) diff --git a/src/gui/menubar.h b/src/gui/menuBar.h similarity index 98% rename from src/gui/menubar.h rename to src/gui/menuBar.h index c9d058488..76810bc70 100644 --- a/src/gui/menubar.h +++ b/src/gui/menuBar.h @@ -30,11 +30,11 @@ #ifndef MENUBAR_H #define MENUBAR_H -#include "setconfigurationoptiondialog.h" +#include "setConfigurationDialogOption.h" #include "windninja.h" #include "gdal_util.h" #include "ninja_version.h" -#include "ui_mainwindow.h" +#include "ui_mainWindow.h" #include #include #include diff --git a/src/gui/pointinitializationinput.cpp b/src/gui/pointInitializationInput.cpp similarity index 99% rename from src/gui/pointinitializationinput.cpp rename to src/gui/pointInitializationInput.cpp index 837c20578..afaf23f85 100644 --- a/src/gui/pointinitializationinput.cpp +++ b/src/gui/pointInitializationInput.cpp @@ -27,7 +27,7 @@ * *****************************************************************************/ -#include "pointinitializationinput.h" +#include "pointInitializationInput.h" PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* parent) : QObject(parent), diff --git a/src/gui/pointinitializationinput.h b/src/gui/pointInitializationInput.h similarity index 98% rename from src/gui/pointinitializationinput.h rename to src/gui/pointInitializationInput.h index d4f80109b..c28ff4a32 100644 --- a/src/gui/pointinitializationinput.h +++ b/src/gui/pointInitializationInput.h @@ -30,10 +30,10 @@ #ifndef POINTINITIALIZATIONINPUT_H #define POINTINITIALIZATIONINPUT_H -#include "appstate.h" +#include "appState.h" #include "windninja.h" #include "gdal_util.h" -#include "ui_mainwindow.h" +#include "ui_mainWindow.h" #include #include #include diff --git a/src/gui/serverbridge.cpp b/src/gui/serverBridge.cpp similarity index 99% rename from src/gui/serverbridge.cpp rename to src/gui/serverBridge.cpp index d28de4c31..0720b56db 100644 --- a/src/gui/serverbridge.cpp +++ b/src/gui/serverBridge.cpp @@ -27,7 +27,7 @@ * *****************************************************************************/ -#include "serverbridge.h" +#include "serverBridge.h" ServerBridge::ServerBridge() {} diff --git a/src/gui/serverbridge.h b/src/gui/serverBridge.h similarity index 100% rename from src/gui/serverbridge.h rename to src/gui/serverBridge.h diff --git a/src/gui/setconfigurationoptiondialog.cpp b/src/gui/setConfigurationDialogOption.cpp similarity index 83% rename from src/gui/setconfigurationoptiondialog.cpp rename to src/gui/setConfigurationDialogOption.cpp index be0f11523..3d6e1bf17 100644 --- a/src/gui/setconfigurationoptiondialog.cpp +++ b/src/gui/setConfigurationDialogOption.cpp @@ -1,5 +1,5 @@ -#include "setconfigurationoptiondialog.h" -#include "ui_setconfigurationoptiondialog.h" +#include "setConfigurationDialogOption.h" +#include "ui_setConfigurationDialogOption.h" setConfigurationOptionDialog::setConfigurationOptionDialog(QWidget *parent) : QDialog(parent), diff --git a/src/gui/setconfigurationoptiondialog.h b/src/gui/setConfigurationDialogOption.h similarity index 75% rename from src/gui/setconfigurationoptiondialog.h rename to src/gui/setConfigurationDialogOption.h index 406800676..f3cf37af3 100644 --- a/src/gui/setconfigurationoptiondialog.h +++ b/src/gui/setConfigurationDialogOption.h @@ -1,5 +1,5 @@ -#ifndef SETCONFIGURATIONOPTIONDIALOG_H -#define SETCONFIGURATIONOPTIONDIALOG_H +#ifndef SETCONFIGURATIONDIALOGOPTION_H +#define SETCONFIGURATIONDIALOGOPTION_H #include @@ -22,4 +22,4 @@ class setConfigurationOptionDialog : public QDialog Ui::setConfigurationOptionDialog *ui; }; -#endif // SETCONFIGURATIONOPTIONDIALOG_H +#endif // SETCONFIGURATIONDIALOGOPTION_H diff --git a/src/gui/setconfigurationoptiondialog.ui b/src/gui/setConfigurationDialogOption.ui similarity index 100% rename from src/gui/setconfigurationoptiondialog.ui rename to src/gui/setConfigurationDialogOption.ui diff --git a/src/gui/splashscreen.cpp b/src/gui/splashScreen.cpp similarity index 99% rename from src/gui/splashscreen.cpp rename to src/gui/splashScreen.cpp index b698f14f4..f8b14b55e 100644 --- a/src/gui/splashscreen.cpp +++ b/src/gui/splashScreen.cpp @@ -27,7 +27,7 @@ * *****************************************************************************/ -#include "splashscreen.h" +#include "splashScreen.h" #include #include #include diff --git a/src/gui/splashscreen.h b/src/gui/splashScreen.h similarity index 100% rename from src/gui/splashscreen.h rename to src/gui/splashScreen.h diff --git a/src/gui/surfaceinput.cpp b/src/gui/surfaceInput.cpp similarity index 99% rename from src/gui/surfaceinput.cpp rename to src/gui/surfaceInput.cpp index b2025ad13..ce32109af 100644 --- a/src/gui/surfaceinput.cpp +++ b/src/gui/surfaceInput.cpp @@ -27,7 +27,7 @@ * *****************************************************************************/ -#include "surfaceinput.h" +#include "surfaceInput.h" SurfaceInput::SurfaceInput(Ui::MainWindow *ui, QWebEngineView *webEngineView, @@ -275,7 +275,7 @@ void SurfaceInput::elevationInputFileLineEditTextChanged(const QString &arg1) webEngineView->page()->runJavaScript(js); emit requestRefresh(); - emit setupTreeView(); + emit updateTreeView(); } void SurfaceInput::elevationInputFileOpenButtonClicked() diff --git a/src/gui/surfaceinput.h b/src/gui/surfaceInput.h similarity index 98% rename from src/gui/surfaceinput.h rename to src/gui/surfaceInput.h index 3e41a71ed..09bf11895 100644 --- a/src/gui/surfaceinput.h +++ b/src/gui/surfaceInput.h @@ -30,8 +30,8 @@ #ifndef SURFACEINPUT_H #define SURFACEINPUT_H -#include "ui_mainwindow.h" -#include "appstate.h" +#include "ui_mainWindow.h" +#include "appState.h" #include "windninja.h" #include "gdal_util.h" #include diff --git a/src/gui/weathermodelinput.cpp b/src/gui/weatherModelInput.cpp similarity index 99% rename from src/gui/weathermodelinput.cpp rename to src/gui/weatherModelInput.cpp index 51c6e8c59..897181316 100644 --- a/src/gui/weathermodelinput.cpp +++ b/src/gui/weatherModelInput.cpp @@ -27,7 +27,7 @@ * *****************************************************************************/ -#include "weathermodelinput.h" +#include "weatherModelInput.h" WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) : QObject(parent), diff --git a/src/gui/weathermodelinput.h b/src/gui/weatherModelInput.h similarity index 98% rename from src/gui/weathermodelinput.h rename to src/gui/weatherModelInput.h index a9c151ff7..2608e5c0b 100644 --- a/src/gui/weathermodelinput.h +++ b/src/gui/weatherModelInput.h @@ -30,9 +30,9 @@ #ifndef WEATHERMODELINPUT_H #define WEATHERMODELINPUT_H -#include "ui_mainwindow.h" +#include "ui_mainWindow.h" #include "windninja.h" -#include "appstate.h" +#include "appState.h" #include "QTimeZone" #include "QFileSystemModel" #include From 77071bf7a7bdc6996c9107f5947b2e160c4715ee Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 10 Nov 2025 15:39:38 -0700 Subject: [PATCH 276/435] Better standardized naming scheme for err handling via the API --- src/gui/main.cpp | 8 +- src/gui/mainWindow.cpp | 352 +++++++++++++-------------- src/gui/mainWindow.h | 1 + src/gui/menuBar.cpp | 6 +- src/gui/pointInitializationInput.cpp | 28 +-- src/gui/pointInitializationInput.h | 2 + src/gui/surfaceInput.cpp | 10 +- src/gui/weatherModelInput.cpp | 8 +- 8 files changed, 205 insertions(+), 210 deletions(-) diff --git a/src/gui/main.cpp b/src/gui/main.cpp index fcd7f205c..048ed2f86 100755 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -48,11 +48,11 @@ int main(int argc, char *argv[]) int result; char ** papszOptions = NULL; - NinjaErr err = 0; - err = NinjaInit(papszOptions); //TODO: NEED TO ADD NINJA INITIALIZE FOR GUI THROUGH API - if(err != NINJA_SUCCESS) + NinjaErr ninjaErr = 0; + ninjaErr = NinjaInit(papszOptions); //TODO: NEED TO ADD NINJA INITIALIZE FOR GUI THROUGH API + if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaInit: err =" << err; + qDebug() << "NinjaInit: ninjaErr =" << ninjaErr; } QApplication a(argc, argv); diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index f74286e80..d1d74ba56 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -29,68 +29,9 @@ #include "mainWindow.h" -void MainWindow::writeToConsole(QString message, QColor color) -{ - // if( ui->consoleDockWidget->isFloating() && color == Qt::white ) - // { - // color = Qt::black; - // } - - ui->consoleTextEdit->setTextColor(color); - ui->consoleTextEdit->append(QString::number(lineNumber) + ": " + message); - ui->consoleTextEdit->repaint(); - lineNumber++; -} - -void MainWindow::updateProgressMessage(const QString message) -{ - progressDialog->setLabelText(message); -} - -void MainWindow::updateProgressValue(int run, int progress) -{ - // update the stored progress value for the current run - if( runProgress[run] > progress ) - { - // if the stored progress is bigger than what we are seeing in the currently emitted progress - // ignore it. This happens for pointInitialization, when the match points is iterating, - // sometimes its next solution is worse and then it would make the progress bar go backwards - // by ignoring it, the progress bar just stays where it is - runProgress[run] = runProgress[run]; - } - else - { - // otherwise, store the progress for the current run - runProgress[run] = progress; - } - - // update the total progress value - // calculate the total progress from scratch each time, summing up the progress from each run - totalProgress = 0; // Initialize the progress bar each time - for(unsigned int i = 0; i < runProgress.size(); i++) - { - totalProgress = totalProgress + runProgress[i]; - } - - // update the progress bar - progressDialog->setValue(totalProgress); -} - -void MainWindow::cancelSolve() -{ - progressDialog->setLabelText("Canceling..."); - - char **papszOptions = nullptr; - int err = NinjaCancel(ninjaArmy, papszOptions); - if( err != NINJA_SUCCESS ) - { - qDebug() << "NinjaCancel: err =" << err; - } -} - MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), - ui(new Ui::MainWindow) + ui(new Ui::MainWindow) { ui->setupUi(this); resize(1200, 700); @@ -194,14 +135,7 @@ MainWindow::MainWindow(QWidget *parent) MainWindow::~MainWindow() { - delete webEngineView; - delete webChannel; - delete mapBridge; - delete surfaceInput; - delete domainAverageInput; - delete pointInitializationInput; - delete weatherModelInput; - delete menuBar; + delete serverBridge; delete ui; } @@ -228,7 +162,7 @@ void MainWindow::connectSignals() connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); connect(menuBar, &MenuBar::writeToConsole, this, &MainWindow::writeToConsole); -// connect(menuBar, SIGNAL( writeToConsole(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) )); // other way to do it + // connect(menuBar, SIGNAL( writeToConsole(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) )); // other way to do it connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); connect(surfaceInput, &SurfaceInput::requestRefresh, &AppState::instance(), &AppState::refreshUI); connect(surfaceInput, &SurfaceInput::updateTreeView, pointInitializationInput, &PointInitializationInput::updateTreeView); @@ -239,6 +173,65 @@ void MainWindow::connectSignals() connect(this, &MainWindow::requestRefresh, &AppState::instance(), &AppState::refreshUI); } +void MainWindow::writeToConsole(QString message, QColor color) +{ + // if( ui->consoleDockWidget->isFloating() && color == Qt::white ) + // { + // color = Qt::black; + // } + + ui->consoleTextEdit->setTextColor(color); + ui->consoleTextEdit->append(QString::number(lineNumber) + ": " + message); + ui->consoleTextEdit->repaint(); + lineNumber++; +} + +void MainWindow::updateProgressMessage(const QString message) +{ + progressDialog->setLabelText(message); +} + +void MainWindow::updateProgressValue(int run, int progress) +{ + // update the stored progress value for the current run + if( runProgress[run] > progress ) + { + // if the stored progress is bigger than what we are seeing in the currently emitted progress + // ignore it. This happens for pointInitialization, when the match points is iterating, + // sometimes its next solution is worse and then it would make the progress bar go backwards + // by ignoring it, the progress bar just stays where it is + runProgress[run] = runProgress[run]; + } + else + { + // otherwise, store the progress for the current run + runProgress[run] = progress; + } + + // update the total progress value + // calculate the total progress from scratch each time, summing up the progress from each run + totalProgress = 0; // Initialize the progress bar each time + for(unsigned int i = 0; i < runProgress.size(); i++) + { + totalProgress = totalProgress + runProgress[i]; + } + + // update the progress bar + progressDialog->setValue(totalProgress); +} + +void MainWindow::cancelSolve() +{ + progressDialog->setLabelText("Canceling..."); + + char **papszOptions = nullptr; + ninjaErr = NinjaCancel(ninjaArmy, papszOptions); + if( ninjaErr != NINJA_SUCCESS ) + { + qDebug() << "NinjaCancel: ninjaErr =" << ninjaErr; + } +} + void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) { int pageIndex = item->data(column, Qt::UserRole).toInt(); @@ -417,14 +410,14 @@ void MainWindow::solveButtonClicked() int endYear, endMonth, endDay, endHour, endMinute; - NinjaErr err = NinjaGenerateSingleTimeObject( + ninjaErr = NinjaGenerateSingleTimeObject( startYear, startMonth, startDay, startHour, startMinute, timeZoneBytes.constData(), &endYear, &endMonth, &endDay, &endHour, &endMinute ); - if(err != NINJA_SUCCESS) + if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaGenerateSingleTimeObject: err = " << err; + qDebug() << "NinjaGenerateSingleTimeObject: ninjaErr = " << ninjaErr; } outYear[0] = endYear; @@ -434,16 +427,16 @@ void MainWindow::solveButtonClicked() outMinute[0] = endMinute; } else { - NinjaErr err = NinjaGetTimeList( + ninjaErr = NinjaGetTimeList( year.data(), month.data(), day.data(), hour.data(), minute.data(), outYear.data(), outMonth.data(), outDay.data(), outHour.data(), outMinute.data(), nTimeSteps, timeZoneBytes.data() ); - if(err != NINJA_SUCCESS) + if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaGetTimeList: err = " << err; + qDebug() << "NinjaGetTimeList: ninjaErr = " << ninjaErr; } } @@ -469,14 +462,14 @@ void MainWindow::solveButtonClicked() int outYear, outMonth, outDay, outHour, outMinute; - NinjaErr err = NinjaGenerateSingleTimeObject( + ninjaErr = NinjaGenerateSingleTimeObject( year, month, day, hour, minute, timeZoneBytes.constData(), &outYear, &outMonth, &outDay, &outHour, &outMinute ); - if (err != NINJA_SUCCESS) + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaGenerateSingleTimeObject: err = " << err; + qDebug() << "NinjaGenerateSingleTimeObject: ninjaErr = " << ninjaErr; } QVector yearVec = { outYear }; @@ -749,19 +742,18 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i } char **papszOptions = nullptr; - int err; - err = NinjaSetAsciiAtmFile(ninjaArmy, ui->fireBehaviorResolutionCheckBox->isChecked(), papszOptions); - if(err != NINJA_SUCCESS) + ninjaErr = NinjaSetAsciiAtmFile(ninjaArmy, ui->fireBehaviorResolutionCheckBox->isChecked(), papszOptions); + if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetAsciiAtmFile: err =" << err; + qDebug() << "NinjaSetAsciiAtmFile: ninjaErr =" << ninjaErr; } for(unsigned int i=0; ioutputDirectoryLineEdit->text().toUtf8().constData(), ui->outputSpeedUnitsComboBox->currentText().toUtf8().constData(), papszOptions); - if(err != NINJA_SUCCESS) + ninjaErr = NinjaSetStationKML(ninjaArmy, i, ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8().constData(), ui->outputDirectoryLineEdit->text().toUtf8().constData(), ui->outputSpeedUnitsComboBox->currentText().toUtf8().constData(), papszOptions); + if(ninjaErr != NINJA_SUCCESS) { - printf("NinjaSetStationKML: err = %d\n", err); + printf("NinjaSetStationKML: ninjaErr = %d\n", ninjaErr); } } } @@ -797,58 +789,58 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i // connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgressMessage( QString ) ), Qt::QueuedConnection ); // connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgressValue( int, int ) ), Qt::QueuedConnection ); - err = NinjaSetNumberCPUs(ninjaArmy, i, ui->numberOfProcessorsSpinBox->value(), papszOptions); - if(err != NINJA_SUCCESS) + ninjaErr = NinjaSetNumberCPUs(ninjaArmy, i, ui->numberOfProcessorsSpinBox->value(), papszOptions); + if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetNumberCPUs: err =" << err; + qDebug() << "NinjaSetNumberCPUs: ninjaErr =" << ninjaErr; } - err = NinjaSetInitializationMethod(ninjaArmy, i, initializationMethod, ui->pointInitializationGroupBox->isChecked(), papszOptions); - if(err != NINJA_SUCCESS) + ninjaErr = NinjaSetInitializationMethod(ninjaArmy, i, initializationMethod, ui->pointInitializationGroupBox->isChecked(), papszOptions); + if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetInitializationMethod: err =" << err; + qDebug() << "NinjaSetInitializationMethod: ninjaErr =" << ninjaErr; } - err = NinjaSetDem(ninjaArmy, i, ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8().constData(), papszOptions); - if(err != NINJA_SUCCESS) + ninjaErr = NinjaSetDem(ninjaArmy, i, ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8().constData(), papszOptions); + if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetDem: err =" << err; + qDebug() << "NinjaSetDem: ninjaErr =" << ninjaErr; } - err = NinjaSetPosition(ninjaArmy, i, papszOptions); - if(err != NINJA_SUCCESS) + ninjaErr = NinjaSetPosition(ninjaArmy, i, papszOptions); + if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetPosition: err =" << err; + qDebug() << "NinjaSetPosition: ninjaErr =" << ninjaErr; } - err = NinjaSetInputWindHeight(ninjaArmy, i, ui->inputWindHeightSpinBox->value(), "m", papszOptions); - if(err != NINJA_SUCCESS) + ninjaErr = NinjaSetInputWindHeight(ninjaArmy, i, ui->inputWindHeightSpinBox->value(), "m", papszOptions); + if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetInputWindHeight: err =" << err; + qDebug() << "NinjaSetInputWindHeight: ninjaErr =" << ninjaErr; } - err = NinjaSetDiurnalWinds(ninjaArmy, i, ui->diurnalCheckBox->isChecked(), papszOptions); - if(err != NINJA_SUCCESS) + ninjaErr = NinjaSetDiurnalWinds(ninjaArmy, i, ui->diurnalCheckBox->isChecked(), papszOptions); + if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetDiurnalWinds: err =" << err; + qDebug() << "NinjaSetDiurnalWinds: ninjaErr =" << ninjaErr; } - err = NinjaSetUniVegetation(ninjaArmy, i, ui->vegetationComboBox->currentText().toLower().toUtf8().constData(), papszOptions); - if(err != NINJA_SUCCESS) + ninjaErr = NinjaSetUniVegetation(ninjaArmy, i, ui->vegetationComboBox->currentText().toLower().toUtf8().constData(), papszOptions); + if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetUniVegetation: err =" << err; + qDebug() << "NinjaSetUniVegetation: ninjaErr =" << ninjaErr; } - err = NinjaSetMeshResolutionChoice(ninjaArmy, i, ui->meshResolutionComboBox->currentText().toLower().toUtf8().constData(), papszOptions); - if(err != NINJA_SUCCESS) + ninjaErr = NinjaSetMeshResolutionChoice(ninjaArmy, i, ui->meshResolutionComboBox->currentText().toLower().toUtf8().constData(), papszOptions); + if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetMeshResolutionChoice: err =" << err; + qDebug() << "NinjaSetMeshResolutionChoice: ninjaErr =" << ninjaErr; } - err = NinjaSetNumVertLayers(ninjaArmy, i, 20, papszOptions); - if(err != NINJA_SUCCESS) + ninjaErr = NinjaSetNumVertLayers(ninjaArmy, i, 20, papszOptions); + if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetNumVertLayers: err =" << err; + qDebug() << "NinjaSetNumVertLayers: ninjaErr =" << ninjaErr; } setOutputFlags(ninjaArmy, i, numNinjas, googleEarth, fireBehavior, shapeFiles, geospatialPDFs, PDFSize); @@ -865,126 +857,126 @@ void MainWindow::setOutputFlags(NinjaArmyH* ninjaArmy, OutputPDFSize PDFSize) { char **papszOptions = nullptr; - int err; + int ninjaErr; - err = NinjaSetOutputPath(ninjaArmy, i, ui->outputDirectoryLineEdit->text().toUtf8().constData(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetOutputPath(ninjaArmy, i, ui->outputDirectoryLineEdit->text().toUtf8().constData(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetOutputPath: err =" << err; + qDebug() << "NinjaSetOutputPath: ninjaErr =" << ninjaErr; } - err = NinjaSetOutputWindHeight(ninjaArmy, i, ui->outputWindHeightSpinBox->value(), ui->outputWindHeightUnitsComboBox->itemData(ui->outputWindHeightUnitsComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetOutputWindHeight(ninjaArmy, i, ui->outputWindHeightSpinBox->value(), ui->outputWindHeightUnitsComboBox->itemData(ui->outputWindHeightUnitsComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetOutputWindHeight: err =" << err; + qDebug() << "NinjaSetOutputWindHeight: ninjaErr =" << ninjaErr; } - err = NinjaSetOutputSpeedUnits(ninjaArmy, i, ui->outputSpeedUnitsComboBox->currentText().toUtf8().constData(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetOutputSpeedUnits(ninjaArmy, i, ui->outputSpeedUnitsComboBox->currentText().toUtf8().constData(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetOutputSpeedUnits: err =" << err; + qDebug() << "NinjaSetOutputSpeedUnits: ninjaErr =" << ninjaErr; } - err = NinjaSetGoogOutFlag(ninjaArmy, i, ui->googleEarthGroupBox->isChecked(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetGoogOutFlag(ninjaArmy, i, ui->googleEarthGroupBox->isChecked(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetGoogOutFlag: err =" << err; + qDebug() << "NinjaSetGoogOutFlag: ninjaErr =" << ninjaErr; } - err = NinjaSetGoogResolution(ninjaArmy, i, googleEarth.resolution, googleEarth.units.constData(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetGoogResolution(ninjaArmy, i, googleEarth.resolution, googleEarth.units.constData(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetGoogResolution: err =" << err; + qDebug() << "NinjaSetGoogResolution: ninjaErr =" << ninjaErr; } - err = NinjaSetGoogSpeedScaling(ninjaArmy, i, ui->legendComboBox->itemData(ui->legendComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetGoogSpeedScaling(ninjaArmy, i, ui->legendComboBox->itemData(ui->legendComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetGoogSpeedScaling: err =" << err; + qDebug() << "NinjaSetGoogSpeedScaling: ninjaErr =" << ninjaErr; } - err = NinjaSetGoogLineWidth(ninjaArmy, i, ui->googleEarthVectorsSpinBox->value(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetGoogLineWidth(ninjaArmy, i, ui->googleEarthVectorsSpinBox->value(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetGoogLineWidth: err =" << err; + qDebug() << "NinjaSetGoogLineWidth: ninjaErr =" << ninjaErr; } - err = NinjaSetGoogColor(ninjaArmy, i, ui->alternativeColorSchemeComboBox->itemData(ui->alternativeColorSchemeComboBox->currentIndex()).toString().toUtf8().constData(), ui->googleEarthVectorScalingCheckBox->isChecked(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetGoogColor(ninjaArmy, i, ui->alternativeColorSchemeComboBox->itemData(ui->alternativeColorSchemeComboBox->currentIndex()).toString().toUtf8().constData(), ui->googleEarthVectorScalingCheckBox->isChecked(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetGoogColor: err =" << err; + qDebug() << "NinjaSetGoogColor: ninjaErr =" << ninjaErr; } - err = NinjaSetGoogConsistentColorScale(ninjaArmy, i, ui->legendCheckBox->isChecked(), numNinjas, papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetGoogConsistentColorScale(ninjaArmy, i, ui->legendCheckBox->isChecked(), numNinjas, papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetGoogConsistentColorScale: err =" << err; + qDebug() << "NinjaSetGoogConsistentColorScale: ninjaErr =" << ninjaErr; } - err = NinjaSetAsciiOutFlag(ninjaArmy, i, ui->fireBehaviorGroupBox->isChecked(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetAsciiOutFlag(ninjaArmy, i, ui->fireBehaviorGroupBox->isChecked(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetAsciiOutFlag: err =" << err; + qDebug() << "NinjaSetAsciiOutFlag: ninjaErr =" << ninjaErr; } - err = NinjaSetAsciiResolution(ninjaArmy, i, fireBehavior.resolution, fireBehavior.units.constData(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetAsciiResolution(ninjaArmy, i, fireBehavior.resolution, fireBehavior.units.constData(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetAsciiResolution: err =" << err; + qDebug() << "NinjaSetAsciiResolution: ninjaErr =" << ninjaErr; } - err = NinjaSetShpOutFlag(ninjaArmy, i, ui->shapeFilesGroupBox->isChecked(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetShpOutFlag(ninjaArmy, i, ui->shapeFilesGroupBox->isChecked(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetShpOutFlag: err =" << err; + qDebug() << "NinjaSetShpOutFlag: ninjaErr =" << ninjaErr; } - err = NinjaSetShpResolution(ninjaArmy, i, shapeFiles.resolution, shapeFiles.units.constData(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetShpResolution(ninjaArmy, i, shapeFiles.resolution, shapeFiles.units.constData(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetShpResolution: err =" << err; + qDebug() << "NinjaSetShpResolution: ninjaErr =" << ninjaErr; } - err = NinjaSetPDFOutFlag(ninjaArmy, i, ui->geospatialPDFFilesGroupBox->isChecked(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetPDFOutFlag(ninjaArmy, i, ui->geospatialPDFFilesGroupBox->isChecked(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetPDFOutFlag: err =" << err; + qDebug() << "NinjaSetPDFOutFlag: ninjaErr =" << ninjaErr; } - err = NinjaSetPDFLineWidth(ninjaArmy, i, ui->geospatialPDFFilesVectorsSpinBox->value(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetPDFLineWidth(ninjaArmy, i, ui->geospatialPDFFilesVectorsSpinBox->value(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetPDFLineWidth: err =" << err; + qDebug() << "NinjaSetPDFLineWidth: ninjaErr =" << ninjaErr; } - err = NinjaSetPDFBaseMap(ninjaArmy, i, ui->basemapComboBox->currentIndex(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetPDFBaseMap(ninjaArmy, i, ui->basemapComboBox->currentIndex(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetPDFBaseMap: err =" << err; + qDebug() << "NinjaSetPDFBaseMap: ninjaErr =" << ninjaErr; } - err = NinjaSetPDFDEM(ninjaArmy, i, ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8().constData(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetPDFDEM(ninjaArmy, i, ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8().constData(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetPDFDEM: err =" << err; + qDebug() << "NinjaSetPDFDEM: ninjaErr =" << ninjaErr; } - err = NinjaSetPDFSize(ninjaArmy, i, PDFSize.PDFHeight, PDFSize.PDFWidth, PDFSize.PDFDpi, papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetPDFSize(ninjaArmy, i, PDFSize.PDFHeight, PDFSize.PDFWidth, PDFSize.PDFDpi, papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetPDFSize: err =" << err; + qDebug() << "NinjaSetPDFSize: ninjaErr =" << ninjaErr; } - err = NinjaSetPDFResolution(ninjaArmy, i, geospatialPDFs.resolution, geospatialPDFs.units.constData(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetPDFResolution(ninjaArmy, i, geospatialPDFs.resolution, geospatialPDFs.units.constData(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetPDFResolution: err =" << err; + qDebug() << "NinjaSetPDFResolution: ninjaErr =" << ninjaErr; } - err = NinjaSetVtkOutFlag(ninjaArmy, i, ui->VTKFilesCheckBox->isChecked(), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaSetVtkOutFlag(ninjaArmy, i, ui->VTKFilesCheckBox->isChecked(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetVtkOutFlag: err =" << err; + qDebug() << "NinjaSetVtkOutFlag: ninjaErr =" << ninjaErr; } } @@ -1018,7 +1010,7 @@ int MainWindow::startSolve(int numProcessors) //// calling prepareArmy here is causing all kinds of troubles. Local variables aren't properly being passed on, //// or aren't properly copied ([=] type thing), or aren't properly in scope. The other values are .h variables, //// so they would at least be in the proper scope. But the out of scope variables leads to all kinds - //// of "QObject::connect: Cannot connect" and "err = 2" type messages. It is still somehow continuing to run though. + //// of "QObject::connect: Cannot connect" and "ninjaErr = 2" type messages. It is still somehow continuing to run though. //// //// seems the only way to put prepareArmy into a QFutureWatcher function, if it would even work, //// would be to have two separate QFutureWatcher functions, needs to be separated out from NinjaStartRuns() @@ -1140,10 +1132,10 @@ void MainWindow::finishedSolve() disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); char **papszOptions = nullptr; - int err = NinjaDestroyArmy(ninjaArmy, papszOptions); - if(err != NINJA_SUCCESS) + int ninjaErr = NinjaDestroyArmy(ninjaArmy, papszOptions); + if(ninjaErr != NINJA_SUCCESS) { - printf("NinjaDestroyRuns: err = %d\n", err); + printf("NinjaDestroyRuns: ninjaErr = %d\n", ninjaErr); } // clear the progress values for the next set of runs diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index 651baf0fe..bbc3cb4d8 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -140,6 +140,7 @@ private slots: PointInitializationInput *pointInitializationInput; NinjaArmyH *ninjaArmy; + NinjaErr ninjaErr; std::vector runProgress; int totalProgress; diff --git a/src/gui/menuBar.cpp b/src/gui/menuBar.cpp index bfbcc6944..063a05bbc 100755 --- a/src/gui/menuBar.cpp +++ b/src/gui/menuBar.cpp @@ -135,10 +135,10 @@ void MenuBar::writeBlankStationFileActionTriggered() emit writeToConsole("writing blank station file to " + fileName, Qt::darkGreen); char** papszOptions = nullptr; - int err = NinjaWriteBlankWxStationFile(fileName.toStdString().c_str(), papszOptions); - if(err != NINJA_SUCCESS) + int ninjaErr = NinjaWriteBlankWxStationFile(fileName.toStdString().c_str(), papszOptions); + if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaWriteBlankWxStationFile: err=" << err; + qDebug() << "NinjaWriteBlankWxStationFile: ninjaErr=" << ninjaErr; emit writeToConsole("failed to write blank station file!", Qt::red); } } diff --git a/src/gui/pointInitializationInput.cpp b/src/gui/pointInitializationInput.cpp index afaf23f85..dfa5ab901 100644 --- a/src/gui/pointInitializationInput.cpp +++ b/src/gui/pointInitializationInput.cpp @@ -102,25 +102,25 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() QVector minute = {start.time().minute(), end.time().minute()}; QVector outYear(2), outMonth(2), outDay(2), outHour(2), outMinute(2); - NinjaErr err = NinjaGetTimeList( + NinjaErr ninjaErr = NinjaGetTimeList( year.data(), month.data(), day.data(), hour.data(), minute.data(), outYear.data(), outMonth.data(), outDay.data(), outHour.data(), outMinute.data(), 2, DEMTimeZoneBytes.data() ); - if(err != NINJA_SUCCESS) + if(ninjaErr != NINJA_SUCCESS) { - printf("NinjaGetTimeList: err = %d\n", err); + printf("NinjaGetTimeList: ninjaErr = %d\n", ninjaErr); } if(ui->weatherStationDataTimeComboBox->currentIndex() == 1) // TODO: Add proper error handling for a bad time duration (someone downloads too much data) { char ** options = nullptr; - int err = NinjaCheckTimeDuration(outYear.data(), outMonth.data(), outDay.data(), outHour.data(), outMinute.data(), 2, options); - if(err != NINJA_SUCCESS) + int ninjaErr = NinjaCheckTimeDuration(outYear.data(), outMonth.data(), outDay.data(), outHour.data(), outMinute.data(), 2, options); + if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaCheckTimeDuration err=" << err; + qDebug() << "NinjaCheckTimeDuration ninjaErr=" << ninjaErr; } } @@ -171,7 +171,7 @@ int PointInitializationInput::fetchStationFromBbox(QVector year, QString outputPath) { char ** options = NULL; - NinjaErr err = NinjaFetchStationFromBBox( + NinjaErr ninjaErr = NinjaFetchStationFromBBox( year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), buffer, @@ -180,10 +180,10 @@ int PointInitializationInput::fetchStationFromBbox(QVector year, false, options ); - if (err != NINJA_SUCCESS) - qDebug() << "NinjaFetchStationFromBbox: err =" << err; + if (ninjaErr != NINJA_SUCCESS) + qDebug() << "NinjaFetchStationFromBbox: ninjaErr =" << ninjaErr; - return err; + return ninjaErr; } int PointInitializationInput::fetchStationByName(QVector year, @@ -198,7 +198,7 @@ int PointInitializationInput::fetchStationByName(QVector year, QString outputPath) { char ** options = NULL; - NinjaErr err = NinjaFetchStationByName( + NinjaErr ninjaErr = NinjaFetchStationByName( year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), stationList.toUtf8().constData(), @@ -206,10 +206,10 @@ int PointInitializationInput::fetchStationByName(QVector year, outputPath.toUtf8().constData(), false, options ); - if (err != NINJA_SUCCESS) - qDebug() << "NinjaFetchStationFromBbox: err =" << err; + if (ninjaErr != NINJA_SUCCESS) + qDebug() << "NinjaFetchStationFromBbox: ninjaErr =" << ninjaErr; - return err; + return ninjaErr; } void PointInitializationInput::fetchStationDataFinished() diff --git a/src/gui/pointInitializationInput.h b/src/gui/pointInitializationInput.h index c28ff4a32..bc9db6e16 100644 --- a/src/gui/pointInitializationInput.h +++ b/src/gui/pointInitializationInput.h @@ -78,6 +78,8 @@ private slots: private: Ui::MainWindow *ui; + NinjaErr ninjaErr; + QProgressDialog *progress; QFutureWatcher *futureWatcher; QFileSystemModel *stationFileSystemModel; diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp index ce32109af..304f2be54 100644 --- a/src/gui/surfaceInput.cpp +++ b/src/gui/surfaceInput.cpp @@ -544,13 +544,13 @@ int SurfaceInput::fetchDEMFile(QVector boundingBox, std::string demFile, { NinjaArmyH* ninjaArmy = NULL; char ** papszOptions = NULL; - NinjaErr err = 0; + NinjaErr ninjaErr = 0; - err = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); - if (err != NINJA_SUCCESS) + ninjaErr = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); + if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaFetchDEMBBox: err =" << err; - return err; + qDebug() << "NinjaFetchDEMBBox: ninjaErr =" << ninjaErr; + return ninjaErr; } else { diff --git a/src/gui/weatherModelInput.cpp b/src/gui/weatherModelInput.cpp index 897181316..d3e275ffc 100644 --- a/src/gui/weatherModelInput.cpp +++ b/src/gui/weatherModelInput.cpp @@ -86,7 +86,7 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() ninjaErr = NinjaFetchArchiveWeatherData(ninjaTools, modelIdentifier, demFile, startYear, startMonth, startDay, startHour, endYear, endMonth, endDay, endHour); if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaFetchArchiveWeatherData: " << ninjaErr; + qDebug() << "NinjaFetchArchiveWeatherData: ninjaErr=" << ninjaErr; } return; @@ -95,7 +95,7 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, hours); if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaFetchWeatherData: " << ninjaErr; + qDebug() << "NinjaFetchWeatherData: ninjaErr=" << ninjaErr; } } @@ -116,7 +116,7 @@ void WeatherModelInput::weatherModelComboBoxCurrentIndexChanged(int index) ninjaErr = NinjaGetWeatherModelHours(ninjaTools, modelIdentifier, &starHour, &endHour); if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaGetWeatherModelHours: " << ninjaErr; + qDebug() << "NinjaGetWeatherModelHours: ninjaErr=" << ninjaErr; } ui->weatherModelSpinBox->setMinimum(starHour); @@ -219,7 +219,7 @@ void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged(const QItem ninjaErr = NinjaFreeWeatherModelTimeList(timeList, timeListSize); if(ninjaErr == NINJA_SUCCESS) { - qDebug() << "NinjaFreeWeatherModelTimeList: " << ninjaErr; + qDebug() << "NinjaFreeWeatherModelTimeList: ninjaErr=" << ninjaErr; } emit requestRefresh(); From 7d3d5a48fcd91e6aff46bf4a4ca976bab61537ea Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 10 Nov 2025 16:47:07 -0700 Subject: [PATCH 277/435] Initial work to split refreshUI() into specific member functions for each GUI page --- src/gui/appState.cpp | 349 ++++++++++++++++++++++++++++++++++++++++++- src/gui/appState.h | 23 ++- 2 files changed, 366 insertions(+), 6 deletions(-) diff --git a/src/gui/appState.cpp b/src/gui/appState.cpp index a207cd7aa..78558780f 100644 --- a/src/gui/appState.cpp +++ b/src/gui/appState.cpp @@ -35,9 +35,17 @@ AppState& AppState::instance() return s; } -void AppState::setUi(Ui::MainWindow* mainUi) +AppState::AppState() + : tickIcon(":/tick.png"), + crossIcon(":/cross.png"), + bulletIcon(":/bullet_blue.png") { - ui = mainUi; + ui->treeWidget->setMouseTracking(true); +} + +void AppState::setUi(Ui::MainWindow* mainWindowUi) +{ + ui = mainWindowUi; } /* @@ -321,3 +329,340 @@ void AppState::refreshUI() ui->treeWidget->topLevelItem(3)->setToolTip(0, "There are errors in the inputs or outputs"); } } + +void AppState::updateSolverMethodologyState() +{ + if (isMassSolverToggled != isMomentumSolverToggled) + { + isSolverMethodologyValid = true; + ui->treeWidget->topLevelItem(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(0)->setToolTip(0, ""); + } + else if (isMassSolverToggled && isMomentumSolverToggled) + { + isSolverMethodologyValid = false; + ui->treeWidget->topLevelItem(0)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently too many selections."); + } + else + { + isSolverMethodologyValid = false; + ui->treeWidget->topLevelItem(0)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently no selections."); + } + + if (isMassSolverToggled) + { + ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, tickIcon); + } + else + { + ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, bulletIcon); + } + + if (isMomentumSolverToggled) + { + ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, tickIcon); + } + else + { + ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, bulletIcon); + } +} + +void AppState::updateSurfaceInputState() +{ + if (isSurfaceInputValid) + { + ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, ""); + } + else + { + ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, "No DEM file detected."); + } + + // Update diurnal input state + if (isDiurnalInputToggled) + { + ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, tickIcon); + } + else + { + ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, bulletIcon); + } + + // Update stability input state + if (isStabilityInputToggled) + { + ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, tickIcon); + } + else + { + ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, bulletIcon); + } +} + +void AppState::updateDomainAverageInputState() +{ + // Update domain average initialization + if (isDomainAverageInitializationToggled && isDomainAverageWindInputTableValid) + { + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); + isDomainAverageInitializationValid = true; + } + else if (isDomainAverageInitializationToggled && !isDomainAverageWindInputTableValid) + { + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "Bad wind inputs; hover over red cells for explanation."); + isDomainAverageInitializationValid = false; + } + else + { + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); + isDomainAverageInitializationValid = false; + } +} + +void AppState::updatePointInitializationInputState() +{ + // Update point initialization + if (isPointInitializationToggled && isStationFileSelectionValid && isStationFileSelected) + { + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, ""); + isPointInitializationValid = true; + } + else if(isPointInitializationToggled && !isStationFileSelected) + { + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, "No station file selected."); + isPointInitializationValid = false; + } + else if(isPointInitializationToggled && !isStationFileSelectionValid) + { + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, "Conflicting files selected."); + isPointInitializationValid = false; + } + else + { + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, ""); + isPointInitializationValid = false; + } +} + +void AppState::updateWeatherModelInputState() +{ + // Update weather model initialization + if (isWeatherModelInitializationToggled && isWeatherModelForecastValid) { + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, tickIcon); + isWeatherModelInitializationValid = true; + } else if (isWeatherModelInitializationToggled && !isWeatherModelForecastValid) { + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setToolTip(0, "Forecast is Invalid"); + isWeatherModelInitializationValid = false; + } else { + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, bulletIcon); + isWeatherModelInitializationValid = false; + } +} + +void AppState::updateGoogleEarthOutputState() +{ + if(isGoogleEarthToggled) + { + if(isSurfaceInputValid) + { + isGoogleEarthValid = true; + ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + isGoogleEarthValid = false; + ui->treeWidget->topLevelItem(2)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); + ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(2)->child(0)->setToolTip(0, "Cannot read DEM File"); + } + } + else + { + isGoogleEarthValid = false; + ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, bulletIcon); + } +} + +void AppState::updateFireBehaviorOutputState() +{ + if(isFireBehaviorToggled) + { + if(isSurfaceInputValid) + { + isFireBehaviorValid = true; + ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + isFireBehaviorValid = false; + ui->treeWidget->topLevelItem(2)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); + ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(2)->child(1)->setToolTip(0, "Cannot read DEM File"); + } + } + else + { + isFireBehaviorValid = false; + ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, bulletIcon); + } +} + +void AppState::updateShapeFilesOutputState() +{ + if(isShapeFilesToggled) + { + if(isSurfaceInputValid) + { + isShapeFilesValid = true; + ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + isShapeFilesValid = false; + ui->treeWidget->topLevelItem(2)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); + ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(2)->child(2)->setToolTip(0, "Cannot read DEM File"); + } + } + else + { + isShapeFilesValid = false; + ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, bulletIcon); + } +} + +void AppState::updateGeoSpatialPDFFilesOutputState() +{ + if(isGeoSpatialPDFFilesToggled) + { + if(isSurfaceInputValid) + { + isGeoSpatialPDFFilesValid = true; + ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + isGeoSpatialPDFFilesValid = false; + ui->treeWidget->topLevelItem(2)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); + ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(2)->child(3)->setToolTip(0, "Cannot read DEM File"); + } + } + else + { + isGeoSpatialPDFFilesValid = false; + ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, bulletIcon); + } +} + +void AppState::updateVTKFilesOutputState() +{ + if(isVTKFilesToggled) + { + if(isSurfaceInputValid) + { + isVTKFilesValid = true; + ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + isVTKFilesValid = false; + ui->treeWidget->topLevelItem(2)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); + ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(2)->child(4)->setToolTip(0, "Cannot read DEM File"); + } + } + else + { + isVTKFilesValid = false; + ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, bulletIcon); + } +} + +void AppState::updateInputState() +{ + if (isSurfaceInputValid && isWindInputValid) + { + isInputsValid = true; + ui->treeWidget->topLevelItem(1)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, ""); + } + else if (!isSurfaceInputValid && !isWindInputValid) + { + isInputsValid = false; + ui->treeWidget->topLevelItem(1)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface and wind inputs."); + } + else if (!isSurfaceInputValid) + { + isInputsValid = false; + ui->treeWidget->topLevelItem(1)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface input."); + } + else if (!isWindInputValid) + { + isInputsValid = false; + ui->treeWidget->topLevelItem(1)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad wind input."); + } +} + +void AppState::updateOutputState() +{ + if(isGoogleEarthValid || isFireBehaviorValid || isShapeFilesValid || isGeoSpatialPDFFilesValid || isVTKFilesValid) + { + isOutputsValid = true; + ui->treeWidget->topLevelItem(2)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + } + else + { + ui->treeWidget->topLevelItem(2)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "No Output Selected"); + } +} + +void AppState::updateOverallState() +{ + if (isSolverMethodologyValid && isInputsValid && isOutputsValid) + { + ui->solveButton->setEnabled(true); + ui->numberOfProcessorsSolveButton->setEnabled(true); + ui->solveButton->setToolTip(""); + ui->numberOfProcessorsSolveButton->setToolTip(""); + ui->treeWidget->topLevelItem(3)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(3)->setToolTip(0, ""); + } + else + { + ui->solveButton->setEnabled(false); + ui->numberOfProcessorsSolveButton->setEnabled(false); + ui->solveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); + ui->numberOfProcessorsSolveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); + ui->treeWidget->topLevelItem(3)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(3)->setToolTip(0, "There are errors in the inputs or outputs"); + } +} diff --git a/src/gui/appState.h b/src/gui/appState.h index 3b765034c..5d36cd226 100644 --- a/src/gui/appState.h +++ b/src/gui/appState.h @@ -40,8 +40,21 @@ class AppState : public QObject public: static AppState& instance(); - void setUi(Ui::MainWindow* mainUi); + void setUi(Ui::MainWindow* mainWindowUi); void refreshUI(); + void updateSolverMethodologyState(); + void updateSurfaceInputState(); + void updateDomainAverageInputState(); + void updatePointInitializationInputState(); + void updateWeatherModelInputState(); + void updateGoogleEarthOutputState(); + void updateFireBehaviorOutputState(); + void updateShapeFilesOutputState(); + void updateGeoSpatialPDFFilesOutputState(); + void updateVTKFilesOutputState(); + void updateInputState(); + void updateOutputState(); + void updateOverallState(); // Solver Methodology states bool isSolverMethodologyValid = false; @@ -66,8 +79,6 @@ class AppState : public QObject bool isWeatherModelInitializationToggled = false; bool isWeatherModelForecastValid = false; bool isWeatherModelInitializationValid = false; - bool isShowAllTimeZonesSelected = false; - bool isDisplayTimeZoneDetailsSelected = false; // Output States bool isOutputsValid = false; @@ -86,10 +97,14 @@ class AppState : public QObject bool isSolverReady = false; private: - AppState() {} + AppState(); AppState(const AppState&) = delete; AppState& operator=(const AppState&) = delete; Ui::MainWindow *ui; + + QIcon tickIcon; + QIcon crossIcon; + QIcon bulletIcon; }; #endif // APPSTATE_H From ae4d814f6f29665312b679ffd8de6ddf57686004 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 12 Nov 2025 10:37:13 -0700 Subject: [PATCH 278/435] Set up signals and slots for new state functions. State checking is now preformed by the appState class --- src/gui/appState.cpp | 356 +++++---------------------- src/gui/appState.h | 48 ++-- src/gui/domainAverageInput.cpp | 6 +- src/gui/domainAverageInput.h | 2 +- src/gui/mainWindow.cpp | 38 +-- src/gui/mainWindow.h | 9 +- src/gui/pointInitializationInput.cpp | 6 +- src/gui/pointInitializationInput.h | 2 +- src/gui/surfaceInput.cpp | 7 +- src/gui/surfaceInput.h | 2 +- src/gui/weatherModelInput.cpp | 8 +- src/gui/weatherModelInput.h | 2 +- 12 files changed, 134 insertions(+), 352 deletions(-) diff --git a/src/gui/appState.cpp b/src/gui/appState.cpp index 78558780f..a8fa2297c 100644 --- a/src/gui/appState.cpp +++ b/src/gui/appState.cpp @@ -39,295 +39,27 @@ AppState::AppState() : tickIcon(":/tick.png"), crossIcon(":/cross.png"), bulletIcon(":/bullet_blue.png") -{ - ui->treeWidget->setMouseTracking(true); -} +{ } void AppState::setUi(Ui::MainWindow* mainWindowUi) { ui = mainWindowUi; } -/* - * Helper function to refresh the ui state of the app - * Called on every user input action - */ -void AppState::refreshUI() +void AppState::setState() { - AppState& state = AppState::instance(); - - QIcon tickIcon(":/tick.png"); - QIcon xIcon(":/cross.png"); - QIcon bulletIcon(":/bullet_blue.png"); - - ui->treeWidget->setMouseTracking(true); - - // Update Solver Methodology UI - if (state.isMassSolverToggled != state.isMomentumSolverToggled) { - state.isSolverMethodologyValid = true; - ui->treeWidget->topLevelItem(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(0)->setToolTip(0, ""); - } else if (state.isMassSolverToggled && state.isMomentumSolverToggled) { - state.isSolverMethodologyValid = false; - ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently too many selections."); - } else { - state.isSolverMethodologyValid = false; - ui->treeWidget->topLevelItem(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently no selections."); - } - - if (state.isMassSolverToggled) { - ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, tickIcon); - } else { - ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, bulletIcon); - } - - if (state.isMomentumSolverToggled) { - ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, tickIcon); - } else { - ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, bulletIcon); - } - - // Update surface input state - if (ui->elevationInputFileLineEdit->text() != "") { - state.isSurfaceInputValid = true; - ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, ""); - } else { - state.isSurfaceInputValid = false; - ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, "No DEM file detected."); - } - - // Update diurnal input state - if (state.isDiurnalInputToggled) { - ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, tickIcon); - } else { - ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, bulletIcon); - } - - // Update stability input state - if (state.isStabilityInputToggled) { - ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, tickIcon); - } else { - ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, bulletIcon); - } - - // Update domain average initialization - if (state.isDomainAverageInitializationToggled && state.isDomainAverageWindInputTableValid) { - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); - state.isDomainAverageInitializationValid = true; - } else if (state.isDomainAverageInitializationToggled && !state.isDomainAverageWindInputTableValid){ - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "Bad wind inputs; hover over red cells for explanation."); - state.isDomainAverageInitializationValid = false; - } else { - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, bulletIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); - state.isDomainAverageInitializationValid = false; - } - - // Update point initialization - if (state.isPointInitializationToggled && state.isStationFileSelectionValid && state.isStationFileSelected) { - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, ""); - state.isPointInitializationValid = true; - } else if(state.isPointInitializationToggled && !state.isStationFileSelected) { - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, "No station file selected."); - state.isPointInitializationValid = false; - } else if(state.isPointInitializationToggled && !state.isStationFileSelectionValid){ - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, "Conflicting files selected."); - state.isPointInitializationValid = false; - } else { - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, bulletIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, ""); - state.isPointInitializationValid = false; - } - - // Update weather model initialization - if (state.isWeatherModelInitializationToggled && state.isWeatherModelForecastValid) { - ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, tickIcon); - state.isWeatherModelInitializationValid = true; - } else if (state.isWeatherModelInitializationToggled && !state.isWeatherModelForecastValid) { - ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setToolTip(0, "Forecast is Invalid"); - state.isWeatherModelInitializationValid = false; - } else { - ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, bulletIcon); - state.isWeatherModelInitializationValid = false; - } - - // Update wind input - if (state.isDomainAverageInitializationValid || state.isPointInitializationValid || state.isWeatherModelInitializationValid) { - ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, tickIcon); - state.isWindInputValid = true; - } else { - ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, xIcon); - state.isWindInputValid = false; - } - - // Update overall input UI state - if (state.isSurfaceInputValid && state.isWindInputValid) { - state.isInputsValid = true; - ui->treeWidget->topLevelItem(1)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, ""); - } else if (!state.isSurfaceInputValid && !state.isWindInputValid) { - state.isInputsValid = false; - ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface and wind inputs."); - } else if (!state.isSurfaceInputValid) { - state.isInputsValid = false; - ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface input."); - } else if (!state.isWindInputValid) { - state.isInputsValid = false; - ui->treeWidget->topLevelItem(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad wind input."); - } - - if(state.isGoogleEarthToggled) - { - if(state.isSurfaceInputValid) - { - state.isGoogleEarthValid = true; - ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); - } - else - { - state.isGoogleEarthValid = false; - ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); - ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->child(0)->setToolTip(0, "Cannot read DEM File"); - } - } - else - { - state.isGoogleEarthValid = false; - ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, bulletIcon); - } - if(state.isFireBehaviorToggled) - { - if(state.isSurfaceInputValid) - { - state.isFireBehaviorValid = true; - ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); - } - else - { - state.isFireBehaviorValid = false; - ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); - ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->child(1)->setToolTip(0, "Cannot read DEM File"); - } - } - else - { - state.isFireBehaviorValid = false; - ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, bulletIcon); - } - if(state.isShapeFilesToggled) - { - if(state.isSurfaceInputValid) - { - state.isShapeFilesValid = true; - ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); - } - else - { - state.isShapeFilesValid = false; - ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); - ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->child(2)->setToolTip(0, "Cannot read DEM File"); - } - } - else - { - state.isShapeFilesValid = false; - ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, bulletIcon); - } - if(state.isGeoSpatialPDFFilesToggled) - { - if(state.isSurfaceInputValid) - { - state.isGeoSpatialPDFFilesValid = true; - ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); - } - else - { - state.isGeoSpatialPDFFilesValid = false; - ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); - ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->child(3)->setToolTip(0, "Cannot read DEM File"); - } - } - else - { - state.isGeoSpatialPDFFilesValid = false; - ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, bulletIcon); - } - if(state.isVTKFilesToggled) - { - if(state.isSurfaceInputValid) - { - state.isVTKFilesValid = true; - ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); - } - else - { - state.isVTKFilesValid = false; - ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, "Cannot read DEM File"); - ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->child(4)->setToolTip(0, "Cannot read DEM File"); - } - } - else - { - state.isVTKFilesValid = false; - ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, bulletIcon); - } - - - if(state.isGoogleEarthValid || state.isFireBehaviorValid || state.isShapeFilesValid || state.isGeoSpatialPDFFilesValid || state.isVTKFilesValid) - { - state.isOutputsValid = true; - ui->treeWidget->topLevelItem(2)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); - } - else - { - ui->treeWidget->topLevelItem(2)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, "No Output Selected"); - } - - if (state.isSolverMethodologyValid && state.isInputsValid && state.isOutputsValid) { - ui->solveButton->setEnabled(true); - ui->numberOfProcessorsSolveButton->setEnabled(true); - ui->solveButton->setToolTip(""); - ui->numberOfProcessorsSolveButton->setToolTip(""); - ui->treeWidget->topLevelItem(3)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(3)->setToolTip(0, ""); - } else { - ui->solveButton->setEnabled(false); - ui->numberOfProcessorsSolveButton->setEnabled(false); - ui->solveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); - ui->numberOfProcessorsSolveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); - ui->treeWidget->topLevelItem(3)->setIcon(0, xIcon); - ui->treeWidget->topLevelItem(3)->setToolTip(0, "There are errors in the inputs or outputs"); - } + updateSolverMethodologyState(); + updateSurfaceInputState(); + updateDiurnalInputState(); + updateStabilityInputState(); + updateDomainAverageInputState(); + updatePointInitializationInputState(); + updateWeatherModelInputState(); + updateGoogleEarthOutputState(); + updateFireBehaviorOutputState(); + updateShapeFilesOutputState(); + updateGeoSpatialPDFFilesOutputState(); + updateVTKFilesOutputState(); } void AppState::updateSolverMethodologyState() @@ -368,22 +100,29 @@ void AppState::updateSolverMethodologyState() { ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, bulletIcon); } + + updateOverallState(); } void AppState::updateSurfaceInputState() { - if (isSurfaceInputValid) + if (ui->elevationInputFileLineEdit->text() != "") { + isSurfaceInputValid = true; ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, tickIcon); ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, ""); } else { + isSurfaceInputValid = false; ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, crossIcon); ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, "No DEM file detected."); } + updateInputState(); +} - // Update diurnal input state +void AppState::updateDiurnalInputState() +{ if (isDiurnalInputToggled) { ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, tickIcon); @@ -392,8 +131,10 @@ void AppState::updateSurfaceInputState() { ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, bulletIcon); } +} - // Update stability input state +void AppState::updateStabilityInputState() +{ if (isStabilityInputToggled) { ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, tickIcon); @@ -406,7 +147,6 @@ void AppState::updateSurfaceInputState() void AppState::updateDomainAverageInputState() { - // Update domain average initialization if (isDomainAverageInitializationToggled && isDomainAverageWindInputTableValid) { ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); @@ -425,11 +165,12 @@ void AppState::updateDomainAverageInputState() ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); isDomainAverageInitializationValid = false; } + + updateInputState(); } void AppState::updatePointInitializationInputState() { - // Update point initialization if (isPointInitializationToggled && isStationFileSelectionValid && isStationFileSelected) { ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, tickIcon); @@ -454,6 +195,8 @@ void AppState::updatePointInitializationInputState() ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, ""); isPointInitializationValid = false; } + + updateInputState(); } void AppState::updateWeatherModelInputState() @@ -470,6 +213,8 @@ void AppState::updateWeatherModelInputState() ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, bulletIcon); isWeatherModelInitializationValid = false; } + + updateInputState(); } void AppState::updateGoogleEarthOutputState() @@ -496,6 +241,8 @@ void AppState::updateGoogleEarthOutputState() isGoogleEarthValid = false; ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, bulletIcon); } + + updateOutputState(); } void AppState::updateFireBehaviorOutputState() @@ -522,6 +269,8 @@ void AppState::updateFireBehaviorOutputState() isFireBehaviorValid = false; ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, bulletIcon); } + + updateOutputState(); } void AppState::updateShapeFilesOutputState() @@ -548,6 +297,8 @@ void AppState::updateShapeFilesOutputState() isShapeFilesValid = false; ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, bulletIcon); } + + updateOutputState(); } void AppState::updateGeoSpatialPDFFilesOutputState() @@ -574,6 +325,8 @@ void AppState::updateGeoSpatialPDFFilesOutputState() isGeoSpatialPDFFilesValid = false; ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, bulletIcon); } + + updateOutputState(); } void AppState::updateVTKFilesOutputState() @@ -600,41 +353,56 @@ void AppState::updateVTKFilesOutputState() isVTKFilesValid = false; ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, bulletIcon); } + + updateOutputState(); } void AppState::updateInputState() { + if (isDomainAverageInitializationValid || isPointInitializationValid || isWeatherModelInitializationValid) + { + ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, tickIcon); + isWindInputValid = true; + } + else + { + ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, crossIcon); + isWindInputValid = false; + } + if (isSurfaceInputValid && isWindInputValid) { - isInputsValid = true; + isInputValid = true; ui->treeWidget->topLevelItem(1)->setIcon(0, tickIcon); ui->treeWidget->topLevelItem(1)->setToolTip(0, ""); } else if (!isSurfaceInputValid && !isWindInputValid) { - isInputsValid = false; + isInputValid = false; ui->treeWidget->topLevelItem(1)->setIcon(0, crossIcon); ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface and wind inputs."); } else if (!isSurfaceInputValid) { - isInputsValid = false; + isInputValid = false; ui->treeWidget->topLevelItem(1)->setIcon(0, crossIcon); ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface input."); } else if (!isWindInputValid) { - isInputsValid = false; + isInputValid = false; ui->treeWidget->topLevelItem(1)->setIcon(0, crossIcon); ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad wind input."); } + + updateOverallState(); } void AppState::updateOutputState() { if(isGoogleEarthValid || isFireBehaviorValid || isShapeFilesValid || isGeoSpatialPDFFilesValid || isVTKFilesValid) { - isOutputsValid = true; + isOutputValid = true; ui->treeWidget->topLevelItem(2)->setIcon(0, tickIcon); ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); } @@ -643,11 +411,13 @@ void AppState::updateOutputState() ui->treeWidget->topLevelItem(2)->setIcon(0, crossIcon); ui->treeWidget->topLevelItem(2)->setToolTip(0, "No Output Selected"); } + + updateOverallState(); } void AppState::updateOverallState() { - if (isSolverMethodologyValid && isInputsValid && isOutputsValid) + if (isSolverMethodologyValid && isInputValid && isOutputValid) { ui->solveButton->setEnabled(true); ui->numberOfProcessorsSolveButton->setEnabled(true); diff --git a/src/gui/appState.h b/src/gui/appState.h index 5d36cd226..728f94dc9 100644 --- a/src/gui/appState.h +++ b/src/gui/appState.h @@ -41,33 +41,17 @@ class AppState : public QObject public: static AppState& instance(); void setUi(Ui::MainWindow* mainWindowUi); - void refreshUI(); - void updateSolverMethodologyState(); - void updateSurfaceInputState(); - void updateDomainAverageInputState(); - void updatePointInitializationInputState(); - void updateWeatherModelInputState(); - void updateGoogleEarthOutputState(); - void updateFireBehaviorOutputState(); - void updateShapeFilesOutputState(); - void updateGeoSpatialPDFFilesOutputState(); - void updateVTKFilesOutputState(); - void updateInputState(); - void updateOutputState(); - void updateOverallState(); + void setState(); - // Solver Methodology states bool isSolverMethodologyValid = false; bool isMassSolverToggled = false; bool isMomentumSolverToggled = false; - // Input states - bool isInputsValid = false; + bool isInputValid = false; bool isSurfaceInputValid = false; bool isDiurnalInputToggled = false; bool isStabilityInputToggled = false; - // Wind Input States bool isWindInputValid = false; bool isDomainAverageInitializationToggled = false; bool isDomainAverageWindInputTableValid = true; @@ -80,8 +64,7 @@ class AppState : public QObject bool isWeatherModelForecastValid = false; bool isWeatherModelInitializationValid = false; - // Output States - bool isOutputsValid = false; + bool isOutputValid = false; bool isGoogleEarthToggled = false; bool isGoogleEarthValid = false; bool isFireBehaviorToggled = false; @@ -93,18 +76,35 @@ class AppState : public QObject bool isVTKFilesToggled = false; bool isVTKFilesValid = false; - // All Inputs Ok bool isSolverReady = false; +public slots: + void updateSolverMethodologyState(); + void updateSurfaceInputState(); + void updateDiurnalInputState(); + void updateStabilityInputState(); + void updateDomainAverageInputState(); + void updatePointInitializationInputState(); + void updateWeatherModelInputState(); + void updateGoogleEarthOutputState(); + void updateFireBehaviorOutputState(); + void updateShapeFilesOutputState(); + void updateGeoSpatialPDFFilesOutputState(); + void updateVTKFilesOutputState(); + private: - AppState(); - AppState(const AppState&) = delete; - AppState& operator=(const AppState&) = delete; Ui::MainWindow *ui; QIcon tickIcon; QIcon crossIcon; QIcon bulletIcon; + + AppState(); + AppState(const AppState&) = delete; + AppState& operator=(const AppState&) = delete; + void updateInputState(); + void updateOutputState(); + void updateOverallState(); }; #endif // APPSTATE_H diff --git a/src/gui/domainAverageInput.cpp b/src/gui/domainAverageInput.cpp index f93612307..7b81fddcc 100644 --- a/src/gui/domainAverageInput.cpp +++ b/src/gui/domainAverageInput.cpp @@ -134,7 +134,7 @@ void DomainAverageInput::domainAverageTableCellChanged(int row, int column) } AppState::instance().isDomainAverageWindInputTableValid = invalidDAWCells.isEmpty(); - emit requestRefresh(); + emit updateState(); } @@ -146,7 +146,7 @@ void DomainAverageInput::clearTableButtonClicked() ui->domainAverageTable->clearContents(); invalidDAWCells.clear(); - emit requestRefresh(); + emit updateState(); } void DomainAverageInput::windHeightComboBoxCurrentIndexChanged(int index) @@ -187,6 +187,6 @@ void DomainAverageInput::domainAverageGroupBoxToggled() state.isWeatherModelInitializationToggled = ui->weatherModelGroupBox->isChecked(); } - emit requestRefresh(); + emit updateState(); } diff --git a/src/gui/domainAverageInput.h b/src/gui/domainAverageInput.h index 7f0e8e30c..e9187ae06 100644 --- a/src/gui/domainAverageInput.h +++ b/src/gui/domainAverageInput.h @@ -46,7 +46,7 @@ class DomainAverageInput: public QObject Q_OBJECT signals: - void requestRefresh(); + void updateState(); public: DomainAverageInput(Ui::MainWindow* ui, QObject* parent = nullptr); diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index d1d74ba56..c66294836 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -40,6 +40,7 @@ MainWindow::MainWindow(QWidget *parent) AppState& state = AppState::instance(); state.setUi(ui); ui->massSolverCheckBox->setChecked(true); + ui->treeWidget->setMouseTracking(true); state.isMassSolverToggled = true; lineNumber = 1; @@ -130,7 +131,7 @@ MainWindow::MainWindow(QWidget *parent) writeToConsole("WINDNINJA_DATA=" + dataPath); - emit requestRefresh(); + state.setState(); } MainWindow::~MainWindow() @@ -164,13 +165,20 @@ void MainWindow::connectSignals() connect(menuBar, &MenuBar::writeToConsole, this, &MainWindow::writeToConsole); // connect(menuBar, SIGNAL( writeToConsole(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) )); // other way to do it connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); - connect(surfaceInput, &SurfaceInput::requestRefresh, &AppState::instance(), &AppState::refreshUI); + connect(surfaceInput, &SurfaceInput::updateState, &AppState::instance(), &AppState::updateSurfaceInputState); connect(surfaceInput, &SurfaceInput::updateTreeView, pointInitializationInput, &PointInitializationInput::updateTreeView); connect(surfaceInput, &SurfaceInput::updateTreeView, weatherModelInput, &WeatherModelInput::updateTreeView); - connect(domainAverageInput, &DomainAverageInput::requestRefresh, &AppState::instance(), &AppState::refreshUI); - connect(pointInitializationInput, &PointInitializationInput::requestRefresh, &AppState::instance(), &AppState::refreshUI); - connect(weatherModelInput, &WeatherModelInput::requestRefresh, &AppState::instance(), &AppState::refreshUI); - connect(this, &MainWindow::requestRefresh, &AppState::instance(), &AppState::refreshUI); + connect(domainAverageInput, &DomainAverageInput::updateState, &AppState::instance(), &AppState::updateDomainAverageInputState); + connect(pointInitializationInput, &PointInitializationInput::updateState, &AppState::instance(), &AppState::updatePointInitializationInputState); + connect(weatherModelInput, &WeatherModelInput::updateState, &AppState::instance(), &AppState::updateWeatherModelInputState); + connect(this, &MainWindow::updateDirunalState, &AppState::instance(), &AppState::updateDiurnalInputState); + connect(this, &MainWindow::updateStabilityState, &AppState::instance(), &AppState::updateStabilityInputState); + connect(this, &MainWindow::updateGoogleState, &AppState::instance(), &AppState::updateGoogleEarthOutputState); + connect(this, &MainWindow::updateFireBehaviorState, &AppState::instance(), &AppState::updateFireBehaviorOutputState); + connect(this, &MainWindow::updateShapeState, &AppState::instance(), &AppState::updateShapeFilesOutputState); + connect(this, &MainWindow::updatePDFState, &AppState::instance(), &AppState::updateGeoSpatialPDFFilesOutputState); + connect(this, &MainWindow::updateVTKState, &AppState::instance(), &AppState::updateVTKFilesOutputState); + connect(this, &MainWindow::updateMetholodyState, &AppState::instance(), &AppState::updateSolverMethodologyState); } void MainWindow::writeToConsole(QString message, QColor color) @@ -253,7 +261,7 @@ void MainWindow::massSolverCheckBoxClicked() { ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); } - emit requestRefresh(); + emit updateMetholodyState(); } void MainWindow::momentumSolverCheckBoxClicked() @@ -271,7 +279,7 @@ void MainWindow::momentumSolverCheckBoxClicked() { ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); } - emit requestRefresh(); + emit updateMetholodyState(); } void MainWindow::diurnalCheckBoxClicked() @@ -297,7 +305,7 @@ void MainWindow::diurnalCheckBoxClicked() ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); } - emit requestRefresh(); + emit updateDirunalState(); } void MainWindow::stabilityCheckBoxClicked() @@ -305,7 +313,7 @@ void MainWindow::stabilityCheckBoxClicked() AppState& state = AppState::instance(); state.isStabilityInputToggled = ui->stabilityCheckBox->isChecked(); - emit requestRefresh(); + emit updateStabilityState(); } void MainWindow::outputDirectoryButtonClicked() @@ -640,35 +648,35 @@ void MainWindow::googleEarthGroupBoxToggled(bool checked) { AppState& state = AppState::instance(); state.isGoogleEarthToggled = checked; - emit requestRefresh(); + emit updateGoogleState(); } void MainWindow::fireBehaviorGroupBoxToggled(bool checked) { AppState& state = AppState::instance(); state.isFireBehaviorToggled = checked; - emit requestRefresh(); + emit updateFireBehaviorState(); } void MainWindow::shapeFilesGroupBoxToggled(bool checked) { AppState& state = AppState::instance(); state.isShapeFilesToggled = checked; - emit requestRefresh(); + emit updateShapeState(); } void MainWindow::geospatialPDFFilesGroupBoxToggled(bool checked) { AppState& state = AppState::instance(); state.isGeoSpatialPDFFilesToggled = checked; - emit requestRefresh(); + emit updatePDFState(); } void MainWindow::VTKFilesCheckBoxClicked(bool checked) { AppState& state = AppState::instance(); state.isVTKFilesToggled = checked; - emit requestRefresh(); + emit updateVTKState(); } void MainWindow::googleEarthMeshResolutionGroupBoxToggled(bool checked) diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index bbc3cb4d8..3480a53cc 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -102,7 +102,14 @@ class MainWindow : public QMainWindow ~MainWindow(); signals: - void requestRefresh(); + void updateDirunalState(); + void updateStabilityState(); + void updateGoogleState(); + void updateFireBehaviorState(); + void updateShapeState(); + void updatePDFState(); + void updateVTKState(); + void updateMetholodyState(); private slots: void massSolverCheckBoxClicked(); diff --git a/src/gui/pointInitializationInput.cpp b/src/gui/pointInitializationInput.cpp index dfa5ab901..3094d0822 100644 --- a/src/gui/pointInitializationInput.cpp +++ b/src/gui/pointInitializationInput.cpp @@ -65,7 +65,7 @@ void PointInitializationInput::pointInitializationGroupBoxToggled(bool toggled) state.isWeatherModelInitializationToggled = ui->weatherModelGroupBox->isChecked(); } - emit requestRefresh(); + emit updateState(); } void PointInitializationInput::pointInitializationDownloadDataButtonClicked() @@ -243,7 +243,7 @@ void PointInitializationInput::updateTreeView() { AppState& state = AppState::instance(); state.isStationFileSelectionValid = false; - emit requestRefresh(); + emit updateState(); stationFileSystemModel = new QFileSystemModel(this); QString path = ui->elevationInputFileLineEdit->property("fullpath").toString(); @@ -361,7 +361,7 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged(c break; } } - emit requestRefresh(); + emit updateState(); } void PointInitializationInput::pointInitializationSelectAllButtonClicked() diff --git a/src/gui/pointInitializationInput.h b/src/gui/pointInitializationInput.h index bc9db6e16..2ed137c96 100644 --- a/src/gui/pointInitializationInput.h +++ b/src/gui/pointInitializationInput.h @@ -56,7 +56,7 @@ class PointInitializationInput : public QObject signals: - void requestRefresh(); + void updateState(); public slots: void updateTreeView(); diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp index 304f2be54..4063fa99d 100644 --- a/src/gui/surfaceInput.cpp +++ b/src/gui/surfaceInput.cpp @@ -274,7 +274,7 @@ void SurfaceInput::elevationInputFileLineEditTextChanged(const QString &arg1) QString js = QString("drawDEM([%1]);").arg(cornerStrs.join(", ")); webEngineView->page()->runJavaScript(js); - emit requestRefresh(); + emit updateState(); emit updateTreeView(); } @@ -355,7 +355,6 @@ void SurfaceInput::timeZoneComboBoxCurrentIndexChanged(int index) void SurfaceInput::timeZoneAllZonesCheckBoxClicked() { AppState& state = AppState::instance(); - state.isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); bool isShowAllTimeZonesSelected = ui->timeZoneAllZonesCheckBox->isChecked(); QVector> displayData = fetchAllTimeZones(isShowAllTimeZonesSelected); @@ -375,9 +374,7 @@ void SurfaceInput::timeZoneAllZonesCheckBoxClicked() void SurfaceInput::timeZoneDetailsCheckBoxClicked() { - AppState& state = AppState::instance(); - state.isDisplayTimeZoneDetailsSelected = ui->timeZoneDetailsCheckBox->isChecked(); - ui->timeZoneDetailsTextEdit->setVisible(state.isDisplayTimeZoneDetailsSelected); + ui->timeZoneDetailsTextEdit->setVisible(ui->timeZoneDetailsCheckBox->isChecked()); } QString SurfaceInput::fetchTimeZoneDetails(QString currentTimeZone) diff --git a/src/gui/surfaceInput.h b/src/gui/surfaceInput.h index 09bf11895..331e2239e 100644 --- a/src/gui/surfaceInput.h +++ b/src/gui/surfaceInput.h @@ -62,7 +62,7 @@ class SurfaceInput : public QObject double computeMeshResolution(int index, bool isMomemtumChecked); signals: - void requestRefresh(); + void updateState(); void updateTreeView(); public slots: diff --git a/src/gui/weatherModelInput.cpp b/src/gui/weatherModelInput.cpp index d3e275ffc..b8bc5b3e1 100644 --- a/src/gui/weatherModelInput.cpp +++ b/src/gui/weatherModelInput.cpp @@ -127,7 +127,7 @@ void WeatherModelInput::updateTreeView() { AppState& state = AppState::instance(); state.isWeatherModelForecastValid = false; - emit requestRefresh(); + emit updateState(); // File Tree View fileModel = new QFileSystemModel(this); @@ -190,7 +190,7 @@ void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged(const QItem timeModel->clear(); state.isWeatherModelForecastValid = false; - emit requestRefresh(); + emit updateState(); return; } @@ -222,7 +222,7 @@ void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged(const QItem qDebug() << "NinjaFreeWeatherModelTimeList: ninjaErr=" << ninjaErr; } - emit requestRefresh(); + emit updateState(); } void WeatherModelInput::weatherModelGroupBoxToggled(bool toggled) @@ -238,7 +238,7 @@ void WeatherModelInput::weatherModelGroupBoxToggled(bool toggled) state.isPointInitializationToggled = ui->pointInitializationGroupBox->isChecked(); } - emit requestRefresh(); + emit updateState(); } void WeatherModelInput::weatherModelTimeSelectAllButtonClicked() diff --git a/src/gui/weatherModelInput.h b/src/gui/weatherModelInput.h index 2608e5c0b..0a20e3dbc 100644 --- a/src/gui/weatherModelInput.h +++ b/src/gui/weatherModelInput.h @@ -52,7 +52,7 @@ class WeatherModelInput : public QObject explicit WeatherModelInput(Ui::MainWindow* ui, QObject* parent = nullptr); signals: - void requestRefresh(); + void updateState(); public slots: void updateTreeView(); From c5697dca5d795345c420418b8a9fc546ba333cc3 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 12 Nov 2025 11:30:56 -0700 Subject: [PATCH 279/435] Updated some logic and tool tips for state class --- src/gui/appState.cpp | 92 +++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 43 deletions(-) diff --git a/src/gui/appState.cpp b/src/gui/appState.cpp index a8fa2297c..243e76c5f 100644 --- a/src/gui/appState.cpp +++ b/src/gui/appState.cpp @@ -64,41 +64,30 @@ void AppState::setState() void AppState::updateSolverMethodologyState() { - if (isMassSolverToggled != isMomentumSolverToggled) + if (isMassSolverToggled) { isSolverMethodologyValid = true; + ui->treeWidget->topLevelItem(0)->setToolTip(0, "Conservation of Mass Selected"); ui->treeWidget->topLevelItem(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(0)->setToolTip(0, ""); - } - else if (isMassSolverToggled && isMomentumSolverToggled) - { - isSolverMethodologyValid = false; - ui->treeWidget->topLevelItem(0)->setIcon(0, crossIcon); - ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently too many selections."); - } - else - { - isSolverMethodologyValid = false; - ui->treeWidget->topLevelItem(0)->setIcon(0, crossIcon); - ui->treeWidget->topLevelItem(0)->setToolTip(0,"Requires exactly one selection: currently no selections."); - } - - if (isMassSolverToggled) - { ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, bulletIcon); } - else - { - ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, bulletIcon); - } - - if (isMomentumSolverToggled) + else if (isMomentumSolverToggled) { + isSolverMethodologyValid = true; + ui->treeWidget->topLevelItem(0)->setToolTip(1, "Conservation of Mass and Momentum Selected"); + ui->treeWidget->topLevelItem(0)->setIcon(0, tickIcon); ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, bulletIcon); } else { + isSolverMethodologyValid = false; + ui->treeWidget->topLevelItem(0)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(0)->setToolTip(0,"Select a Solver"); + ui->treeWidget->topLevelItem(0)->setIcon(0, crossIcon); ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, bulletIcon); } updateOverallState(); @@ -110,13 +99,13 @@ void AppState::updateSurfaceInputState() { isSurfaceInputValid = true; ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, ""); + ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, "Valid"); } else { isSurfaceInputValid = false; ui->treeWidget->topLevelItem(1)->child(0)->setIcon(0, crossIcon); - ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, "No DEM file detected."); + ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, "Input File Cannot be Detected"); } updateInputState(); } @@ -126,10 +115,12 @@ void AppState::updateDiurnalInputState() if (isDiurnalInputToggled) { ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(1)->setToolTip(0, "Valid"); } else { ui->treeWidget->topLevelItem(1)->child(1)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(1)->child(1)->setToolTip(0, "No Diurnal Input"); } } @@ -138,10 +129,12 @@ void AppState::updateStabilityInputState() if (isStabilityInputToggled) { ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(2)->setToolTip(0, "Valid"); } else { ui->treeWidget->topLevelItem(1)->child(2)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(1)->child(2)->setToolTip(0, "No Stability Input"); } } @@ -162,7 +155,7 @@ void AppState::updateDomainAverageInputState() else { ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, bulletIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "Not Selected"); isDomainAverageInitializationValid = false; } @@ -180,19 +173,19 @@ void AppState::updatePointInitializationInputState() else if(isPointInitializationToggled && !isStationFileSelected) { ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, crossIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, "No station file selected."); + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, "No Station File Selected"); isPointInitializationValid = false; } else if(isPointInitializationToggled && !isStationFileSelectionValid) { ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, crossIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, "Conflicting files selected."); + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, "Conflicting Files Selected"); isPointInitializationValid = false; } else { ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, bulletIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, ""); + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, "Not Selected"); isPointInitializationValid = false; } @@ -201,17 +194,23 @@ void AppState::updatePointInitializationInputState() void AppState::updateWeatherModelInputState() { - // Update weather model initialization - if (isWeatherModelInitializationToggled && isWeatherModelForecastValid) { - ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, tickIcon); + if (isWeatherModelInitializationToggled && isWeatherModelForecastValid) + { isWeatherModelInitializationValid = true; - } else if (isWeatherModelInitializationToggled && !isWeatherModelForecastValid) { + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setToolTip(0, "Valid"); + } + else if (isWeatherModelInitializationToggled && !isWeatherModelForecastValid) + { + isWeatherModelInitializationValid = false; ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, crossIcon); ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setToolTip(0, "Forecast is Invalid"); + } + else + { isWeatherModelInitializationValid = false; - } else { ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setIcon(0, bulletIcon); - isWeatherModelInitializationValid = false; + ui->treeWidget->topLevelItem(1)->child(3)->child(2)->setToolTip(0, "Not Selected"); } updateInputState(); @@ -240,6 +239,7 @@ void AppState::updateGoogleEarthOutputState() { isGoogleEarthValid = false; ui->treeWidget->topLevelItem(2)->child(0)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "Not Selected"); } updateOutputState(); @@ -268,6 +268,7 @@ void AppState::updateFireBehaviorOutputState() { isFireBehaviorValid = false; ui->treeWidget->topLevelItem(2)->child(1)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(2)->child(1)->setToolTip(0, "Not Selected"); } updateOutputState(); @@ -296,6 +297,7 @@ void AppState::updateShapeFilesOutputState() { isShapeFilesValid = false; ui->treeWidget->topLevelItem(2)->child(2)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(2)->child(2)->setToolTip(0, "Not Selected"); } updateOutputState(); @@ -324,6 +326,7 @@ void AppState::updateGeoSpatialPDFFilesOutputState() { isGeoSpatialPDFFilesValid = false; ui->treeWidget->topLevelItem(2)->child(3)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(2)->child(3)->setToolTip(0, "Not Selected"); } updateOutputState(); @@ -352,6 +355,7 @@ void AppState::updateVTKFilesOutputState() { isVTKFilesValid = false; ui->treeWidget->topLevelItem(2)->child(4)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(2)->child(4)->setToolTip(0, "Not Selected"); } updateOutputState(); @@ -361,38 +365,40 @@ void AppState::updateInputState() { if (isDomainAverageInitializationValid || isPointInitializationValid || isWeatherModelInitializationValid) { - ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, tickIcon); isWindInputValid = true; + ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(3)->setToolTip(0, "Valid"); } else { - ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, crossIcon); isWindInputValid = false; + ui->treeWidget->topLevelItem(1)->child(3)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(1)->child(3)->setToolTip(0, "No Initialization Method Selected"); } if (isSurfaceInputValid && isWindInputValid) { isInputValid = true; ui->treeWidget->topLevelItem(1)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, ""); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Valid"); } else if (!isSurfaceInputValid && !isWindInputValid) { isInputValid = false; ui->treeWidget->topLevelItem(1)->setIcon(0, crossIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface and wind inputs."); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Check Surface Input"); } else if (!isSurfaceInputValid) { isInputValid = false; ui->treeWidget->topLevelItem(1)->setIcon(0, crossIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad surface input."); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Check Surface Input"); } else if (!isWindInputValid) { isInputValid = false; ui->treeWidget->topLevelItem(1)->setIcon(0, crossIcon); - ui->treeWidget->topLevelItem(1)->setToolTip(0, "Bad wind input."); + ui->treeWidget->topLevelItem(1)->setToolTip(0, "Check Wind Input"); } updateOverallState(); @@ -404,7 +410,7 @@ void AppState::updateOutputState() { isOutputValid = true; ui->treeWidget->topLevelItem(2)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(2)->setToolTip(0, ""); + ui->treeWidget->topLevelItem(2)->setToolTip(0, "Valid"); } else { From a87759b8c5cdf475a3a81d3c54ac37aebd27b1cd Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 12 Nov 2025 11:48:04 -0700 Subject: [PATCH 280/435] Map now centers on drawing actions and added a center button for users, for #641 --- data/map.html | 59 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/data/map.html b/data/map.html index cf9052f00..17b374cc9 100755 --- a/data/map.html +++ b/data/map.html @@ -61,6 +61,26 @@ .leaflet-drag-target { cursor: move !important; } + .leaflet-control-center { + background: white; + border: 1px solid #ccc; + border-radius: 4px; + box-shadow: 0 1px 3px rgba(0,0,0,0.3); + } + .leaflet-control-center a { + display: block; + text-align: center; + color: #0077ff; + font-size: 20px; + line-height: 26px; + width: 28px; + height: 28px; + text-decoration: none; + } + .leaflet-control-center a:hover { + background: #0077ff; + color: white; + } @@ -145,7 +165,11 @@ const rectangle = L.rectangle(bounds).addTo(mapRectangleLayer); rectangle.editing.enable(); sendBoundingBox(rectangle); - rectangle.on('edit', () => sendBoundingBox(rectangle)); + map.fitBounds(rectangle.getBounds()); + rectangle.on('edit', () => { + sendBoundingBox(rectangle); + map.fitBounds(rectangle.getBounds()); + }); } function drawDEM(DEMCorners) { @@ -164,6 +188,8 @@ weight: 2, fill: false }).addTo(mapRectangleLayer); + + map.fitBounds(rectangle.getBounds()); } function startRectangleDrawing() { @@ -242,7 +268,11 @@ mapRectangleLayer.addLayer(layer); layer.editing.enable(); sendBoundingBox(layer); - layer.on('edit', () => sendBoundingBox(layer)); + layer.on('edit', () => { + sendBoundingBox(layer); + map.fitBounds(layer.getBounds()); + }); + map.fitBounds(layer.getBounds()); }); const baseMaps = {}; @@ -250,6 +280,31 @@ const layerControl = L.control.layers(baseMaps, overlayMaps).addTo(map); L.control.scale().addTo(map); + const centerControl = L.control({ position: 'topleft' }); + + centerControl.onAdd = function(map) { + const container = L.DomUtil.create('div', 'leaflet-bar leaflet-control leaflet-control-center'); + const button = L.DomUtil.create('a', '', container); + button.innerHTML = '⌖'; + button.title = 'Center on current shape'; + button.href = '#'; + + L.DomEvent.on(button, 'click', (e) => { + L.DomEvent.stopPropagation(e); + L.DomEvent.preventDefault(e); + if (mapRectangleLayer.getLayers().length > 0) { + const layer = mapRectangleLayer.getLayers()[0]; + if (layer.getBounds) { + map.fitBounds(layer.getBounds()); + } + } + }); + + return container; + }; + + centerControl.addTo(map); + new QWebChannel(qt.webChannelTransport, channel => { window.bridge = channel.objects.bridge; }); From 107a2967dc8f330cd89069c99a7f27fa6a6cd568 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 12 Nov 2025 13:16:59 -0700 Subject: [PATCH 281/435] Removed namespace, added outputs class to separate from main window, and moved connect statement to proper classes --- src/gui/CMakeLists.txt | 18 ++-- src/gui/appState.h | 1 - src/gui/domainAverageInput.cpp | 1 + src/gui/mainWindow.cpp | 111 +------------------------ src/gui/mainWindow.h | 25 +----- src/gui/outputs.cpp | 108 ++++++++++++++++++++++++ src/gui/outputs.h | 38 +++++++++ src/gui/pointInitializationInput.cpp | 1 + src/gui/setConfigurationDialogOption.h | 5 +- src/gui/surfaceInput.cpp | 1 + 10 files changed, 170 insertions(+), 139 deletions(-) create mode 100644 src/gui/outputs.cpp create mode 100644 src/gui/outputs.h diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 839c07845..c20725b7f 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -11,6 +11,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(QT NAMES Qt6 REQUIRED COMPONENTS Widgets) find_package(Qt6 REQUIRED COMPONENTS Widgets WebEngineWidgets) +find_package(Qt6 REQUIRED COMPONENTS Core) set(PROJECT_SOURCES main.cpp @@ -25,6 +26,7 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) ${PROJECT_SOURCES} ${CMAKE_SOURCE_DIR}/wn-resources.qrc appState.h + appState.cpp splashScreen.h splashScreen.cpp surfaceInput.h @@ -38,11 +40,16 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) mapBridge.cpp surfaceInput.h surfaceInput.cpp - serverBridge.h serverBridge.cpp - domainAverageInput.h domainAverageInput.cpp - weatherModelInput.h weatherModelInput.cpp - pointInitializationInput.h pointInitializationInput.cpp - appState.cpp + serverBridge.h + serverBridge.cpp + domainAverageInput.h + domainAverageInput.cpp + pointInitializationInput.h + pointInitializationInput.cpp + weatherModelInput.h + weatherModelInput.cpp + outputs.h + outputs.cpp ) # Define target properties for Android with Qt 6 as: # set_property(TARGET WindNinja APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR @@ -64,6 +71,7 @@ endif() target_link_libraries(WindNinja PRIVATE Qt${QT_VERSION_MAJOR}::Widgets PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets PRIVATE ninja) +target_link_libraries(WindNinja PRIVATE Qt6::Core) # Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. diff --git a/src/gui/appState.h b/src/gui/appState.h index 728f94dc9..021ba003f 100644 --- a/src/gui/appState.h +++ b/src/gui/appState.h @@ -33,7 +33,6 @@ #include "ui_mainWindow.h" #include - class AppState : public QObject { Q_OBJECT diff --git a/src/gui/domainAverageInput.cpp b/src/gui/domainAverageInput.cpp index 7b81fddcc..9ab024b5d 100644 --- a/src/gui/domainAverageInput.cpp +++ b/src/gui/domainAverageInput.cpp @@ -44,6 +44,7 @@ DomainAverageInput::DomainAverageInput(Ui::MainWindow* ui, QObject* parent) connect(ui->clearTableButton, &QPushButton::clicked, this, &DomainAverageInput::clearTableButtonClicked); connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &DomainAverageInput::domainAverageTableCellChanged); connect(ui->domainAverageGroupBox, &QGroupBox::toggled, this, &DomainAverageInput::domainAverageGroupBoxToggled); + connect(this, &DomainAverageInput::updateState, &AppState::instance(), &AppState::updateDomainAverageInputState); } void DomainAverageInput::domainAverageTableCellChanged(int row, int column) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index c66294836..69e9ca3b1 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -68,6 +68,7 @@ MainWindow::MainWindow(QWidget *parent) domainAverageInput = new DomainAverageInput(ui, this); pointInitializationInput = new PointInitializationInput(ui, this); weatherModelInput = new WeatherModelInput(ui, this); + outputs = new Outputs(ui, this); ui->inputsStackedWidget->setCurrentIndex(0); ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); @@ -95,33 +96,6 @@ MainWindow::MainWindow(QWidget *parent) ui->numberOfProcessorsSpinBox->setMaximum(nCPUs); ui->numberOfProcessorsSpinBox->setValue(nCPUs); - QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); - ui->outputDirectoryLineEdit->setText(downloadsPath); - ui->outputDirectoryButton->setIcon(QIcon(":/folder.png")); - - ui->outputWindHeightUnitsComboBox->setItemData(0, "ft"); - ui->outputWindHeightUnitsComboBox->setItemData(1, "m"); - ui->meshResolutionUnitsComboBox->setItemData(0, "m"); - ui->meshResolutionUnitsComboBox->setItemData(1, "ft"); - ui->googleEarthMeshResolutionComboBox->setItemData(0, "m"); - ui->googleEarthMeshResolutionComboBox->setItemData(1, "ft"); - ui->fireBehaviorMeshResolutionComboBox->setItemData(0, "m"); - ui->fireBehaviorMeshResolutionComboBox->setItemData(1, "ft"); - ui->shapeFilesMeshResolutionComboBox->setItemData(0, "m"); - ui->shapeFilesMeshResolutionComboBox->setItemData(1, "ft"); - ui->geospatialPDFFilesMeshResolutionComboBox->setItemData(0, "m"); - ui->geospatialPDFFilesMeshResolutionComboBox->setItemData(1, "ft"); - ui->alternativeColorSchemeComboBox->setItemData(0, "default"); - ui->alternativeColorSchemeComboBox->setItemData(1, "ROPGW"); - ui->alternativeColorSchemeComboBox->setItemData(2, "oranges"); - ui->alternativeColorSchemeComboBox->setItemData(3, "blues"); - ui->alternativeColorSchemeComboBox->setItemData(4, "pinks"); - ui->alternativeColorSchemeComboBox->setItemData(5, "greens"); - ui->alternativeColorSchemeComboBox->setItemData(6, "magic_beans"); - ui->alternativeColorSchemeComboBox->setItemData(7, "pink_to_green"); - ui->legendComboBox->setItemData(0, "equal_interval"); - ui->legendComboBox->setItemData(1, "equal_color"); - connectSignals(); QString version(NINJA_VERSION_STRING); @@ -150,34 +124,16 @@ void MainWindow::connectSignals() connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, this, &MainWindow::treeWidgetItemDoubleClicked); connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); - connect(ui->googleEarthGroupBox, &QGroupBox::toggled, this, &MainWindow::googleEarthGroupBoxToggled); - connect(ui->fireBehaviorGroupBox, &QGroupBox::toggled, this, &MainWindow::fireBehaviorGroupBoxToggled); - connect(ui->shapeFilesGroupBox, &QGroupBox::toggled, this, &MainWindow::shapeFilesGroupBoxToggled); - connect(ui->geospatialPDFFilesGroupBox, &QGroupBox::toggled, this, &MainWindow::geospatialPDFFilesGroupBoxToggled); - connect(ui->VTKFilesCheckBox, &QCheckBox::clicked, this, &MainWindow::VTKFilesCheckBoxClicked); - connect(ui->googleEarthMeshResolutionGroupBox, &QGroupBox::toggled, this, &MainWindow::googleEarthMeshResolutionGroupBoxToggled); - connect(ui->fireBehaviorMeshResolutionGroupBox, &QGroupBox::toggled, this, &MainWindow::fireBehaviorMeshResolutionGroupBoxToggled); - connect(ui->shapeFilesMeshResolutionGroupBox, &QGroupBox::toggled, this, &MainWindow::shapeFilesMeshResolutionGroupBoxToggled); - connect(ui->geospatialPDFFilesMeshResolutionGroupBox, &QGroupBox::toggled, this, &MainWindow::geospatialPDFFilesMeshResolutionGroupBoxToggled); connect(ui->outputDirectoryButton, &QPushButton::clicked, this, &MainWindow::outputDirectoryButtonClicked); connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); connect(menuBar, &MenuBar::writeToConsole, this, &MainWindow::writeToConsole); - // connect(menuBar, SIGNAL( writeToConsole(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) )); // other way to do it connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); - connect(surfaceInput, &SurfaceInput::updateState, &AppState::instance(), &AppState::updateSurfaceInputState); connect(surfaceInput, &SurfaceInput::updateTreeView, pointInitializationInput, &PointInitializationInput::updateTreeView); connect(surfaceInput, &SurfaceInput::updateTreeView, weatherModelInput, &WeatherModelInput::updateTreeView); - connect(domainAverageInput, &DomainAverageInput::updateState, &AppState::instance(), &AppState::updateDomainAverageInputState); - connect(pointInitializationInput, &PointInitializationInput::updateState, &AppState::instance(), &AppState::updatePointInitializationInputState); connect(weatherModelInput, &WeatherModelInput::updateState, &AppState::instance(), &AppState::updateWeatherModelInputState); connect(this, &MainWindow::updateDirunalState, &AppState::instance(), &AppState::updateDiurnalInputState); connect(this, &MainWindow::updateStabilityState, &AppState::instance(), &AppState::updateStabilityInputState); - connect(this, &MainWindow::updateGoogleState, &AppState::instance(), &AppState::updateGoogleEarthOutputState); - connect(this, &MainWindow::updateFireBehaviorState, &AppState::instance(), &AppState::updateFireBehaviorOutputState); - connect(this, &MainWindow::updateShapeState, &AppState::instance(), &AppState::updateShapeFilesOutputState); - connect(this, &MainWindow::updatePDFState, &AppState::instance(), &AppState::updateGeoSpatialPDFFilesOutputState); - connect(this, &MainWindow::updateVTKState, &AppState::instance(), &AppState::updateVTKFilesOutputState); connect(this, &MainWindow::updateMetholodyState, &AppState::instance(), &AppState::updateSolverMethodologyState); } @@ -644,65 +600,6 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) } } -void MainWindow::googleEarthGroupBoxToggled(bool checked) -{ - AppState& state = AppState::instance(); - state.isGoogleEarthToggled = checked; - emit updateGoogleState(); -} - -void MainWindow::fireBehaviorGroupBoxToggled(bool checked) -{ - AppState& state = AppState::instance(); - state.isFireBehaviorToggled = checked; - emit updateFireBehaviorState(); -} - -void MainWindow::shapeFilesGroupBoxToggled(bool checked) -{ - AppState& state = AppState::instance(); - state.isShapeFilesToggled = checked; - emit updateShapeState(); -} - -void MainWindow::geospatialPDFFilesGroupBoxToggled(bool checked) -{ - AppState& state = AppState::instance(); - state.isGeoSpatialPDFFilesToggled = checked; - emit updatePDFState(); -} - -void MainWindow::VTKFilesCheckBoxClicked(bool checked) -{ - AppState& state = AppState::instance(); - state.isVTKFilesToggled = checked; - emit updateVTKState(); -} - -void MainWindow::googleEarthMeshResolutionGroupBoxToggled(bool checked) -{ - ui->googleEarthMeshResolutionSpinBox->setEnabled(!checked); - ui->googleEarthMeshResolutionComboBox->setEnabled(!checked); -} - -void MainWindow::fireBehaviorMeshResolutionGroupBoxToggled(bool checked) -{ - ui->fireBehaviorMeshResolutionSpinBox->setEnabled(!checked); - ui->fireBehaviorMeshResolutionComboBox->setEnabled(!checked); -} - -void MainWindow::shapeFilesMeshResolutionGroupBoxToggled(bool checked) -{ - ui->shapeFilesMeshResolutionSpinBox->setEnabled(!checked); - ui->shapeFilesMeshResolutionComboBox->setEnabled(!checked); -} - -void MainWindow::geospatialPDFFilesMeshResolutionGroupBoxToggled(bool checked) -{ - ui->geospatialPDFFilesMeshResolutionSpinBox->setEnabled(!checked); - ui->geospatialPDFFilesMeshResolutionComboBox->setEnabled(!checked); -} - void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* initializationMethod) { OutputMeshResolution googleEarth = getMeshResolution( @@ -779,13 +676,13 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i } //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::writeToConsole ); // more exact way of doing it - connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ) ); // other way of doing it + connect(NinjaGetCommunication(ninjaArmy, i, papszOptions), SIGNAL(sendMessage(QString,QColor)), this, SLOT(writeToConsole(QString,QColor))); // other way of doing it //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendMessage, this, &MainWindow::updateProgressMessage ); - connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( updateProgressMessage( QString ) ) ); + connect(NinjaGetCommunication(ninjaArmy, i, papszOptions), SIGNAL(sendMessage(QString,QColor)), this, SLOT(updateProgressMessage(QString))); //connect( static_cast(NinjaGetCommunication( ninjaArmy, i, papszOptions )), &ninjaGUIComHandler::sendProgress, this, &MainWindow::updateProgressValue ); - connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendProgress( int, int ) ), this, SLOT( updateProgressValue( int, int ) ) ); + connect(NinjaGetCommunication(ninjaArmy, i, papszOptions), SIGNAL(sendProgress(int,int)), this, SLOT(updateProgressValue(int,int))); // // old code style method (see this in the old qt4 gui code) // connect( NinjaGetCommunication( ninjaArmy, i, papszOptions ), SIGNAL( sendMessage(QString, QColor) ), this, SLOT( writeToConsole(QString, QColor) ), Qt::AutoConnection ); diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index 3480a53cc..d09b3a333 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -30,6 +30,7 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H +#include "outputs.h" #include "surfaceInput.h" #include "menuBar.h" #include "domainAverageInput.h" @@ -72,13 +73,6 @@ #include #include -QT_BEGIN_NAMESPACE -namespace Ui -{ - class MainWindow; -} -QT_END_NAMESPACE - struct OutputMeshResolution { double resolution; QByteArray units; @@ -104,11 +98,6 @@ class MainWindow : public QMainWindow signals: void updateDirunalState(); void updateStabilityState(); - void updateGoogleState(); - void updateFireBehaviorState(); - void updateShapeState(); - void updatePDFState(); - void updateVTKState(); void updateMetholodyState(); private slots: @@ -120,15 +109,6 @@ private slots: void solveButtonClicked(); void outputDirectoryButtonClicked(); void numberOfProcessorsSolveButtonClicked(); - void googleEarthGroupBoxToggled(bool checked); - void fireBehaviorGroupBoxToggled(bool checked); - void shapeFilesGroupBoxToggled(bool checked); - void geospatialPDFFilesGroupBoxToggled(bool checked); - void VTKFilesCheckBoxClicked(bool checked); - void googleEarthMeshResolutionGroupBoxToggled(bool checked); - void fireBehaviorMeshResolutionGroupBoxToggled(bool checked); - void shapeFilesMeshResolutionGroupBoxToggled(bool checked); - void geospatialPDFFilesMeshResolutionGroupBoxToggled(bool checked); void writeToConsole(QString message, QColor color = Qt::white); void updateProgressValue(int run, int progress); void updateProgressMessage(const QString message); @@ -143,8 +123,9 @@ private slots: MenuBar *menuBar; ServerBridge *serverBridge; DomainAverageInput *domainAverageInput; - WeatherModelInput *weatherModelInput; PointInitializationInput *pointInitializationInput; + WeatherModelInput *weatherModelInput; + Outputs *outputs; NinjaArmyH *ninjaArmy; NinjaErr ninjaErr; diff --git a/src/gui/outputs.cpp b/src/gui/outputs.cpp new file mode 100644 index 000000000..d30407bef --- /dev/null +++ b/src/gui/outputs.cpp @@ -0,0 +1,108 @@ +#include "outputs.h" + +Outputs::Outputs(Ui::MainWindow *ui, + QObject* parent) + : QObject(parent), + ui(ui) +{ + QString downloadsPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); + ui->outputDirectoryLineEdit->setText(downloadsPath); + ui->outputDirectoryButton->setIcon(QIcon(":/folder.png")); + + ui->outputWindHeightUnitsComboBox->setItemData(0, "ft"); + ui->outputWindHeightUnitsComboBox->setItemData(1, "m"); + ui->meshResolutionUnitsComboBox->setItemData(0, "m"); + ui->meshResolutionUnitsComboBox->setItemData(1, "ft"); + ui->googleEarthMeshResolutionComboBox->setItemData(0, "m"); + ui->googleEarthMeshResolutionComboBox->setItemData(1, "ft"); + ui->fireBehaviorMeshResolutionComboBox->setItemData(0, "m"); + ui->fireBehaviorMeshResolutionComboBox->setItemData(1, "ft"); + ui->shapeFilesMeshResolutionComboBox->setItemData(0, "m"); + ui->shapeFilesMeshResolutionComboBox->setItemData(1, "ft"); + ui->geospatialPDFFilesMeshResolutionComboBox->setItemData(0, "m"); + ui->geospatialPDFFilesMeshResolutionComboBox->setItemData(1, "ft"); + ui->alternativeColorSchemeComboBox->setItemData(0, "default"); + ui->alternativeColorSchemeComboBox->setItemData(1, "ROPGW"); + ui->alternativeColorSchemeComboBox->setItemData(2, "oranges"); + ui->alternativeColorSchemeComboBox->setItemData(3, "blues"); + ui->alternativeColorSchemeComboBox->setItemData(4, "pinks"); + ui->alternativeColorSchemeComboBox->setItemData(5, "greens"); + ui->alternativeColorSchemeComboBox->setItemData(6, "magic_beans"); + ui->alternativeColorSchemeComboBox->setItemData(7, "pink_to_green"); + ui->legendComboBox->setItemData(0, "equal_interval"); + ui->legendComboBox->setItemData(1, "equal_color"); + + connect(ui->googleEarthGroupBox, &QGroupBox::toggled, this, &Outputs::googleEarthGroupBoxToggled); + connect(ui->fireBehaviorGroupBox, &QGroupBox::toggled, this, &Outputs::fireBehaviorGroupBoxToggled); + connect(ui->shapeFilesGroupBox, &QGroupBox::toggled, this, &Outputs::shapeFilesGroupBoxToggled); + connect(ui->geospatialPDFFilesGroupBox, &QGroupBox::toggled, this, &Outputs::geospatialPDFFilesGroupBoxToggled); + connect(ui->VTKFilesCheckBox, &QCheckBox::clicked, this, &Outputs::VTKFilesCheckBoxClicked); + connect(ui->googleEarthMeshResolutionGroupBox, &QGroupBox::toggled, this, &Outputs::googleEarthMeshResolutionGroupBoxToggled); + connect(ui->fireBehaviorMeshResolutionGroupBox, &QGroupBox::toggled, this, &Outputs::fireBehaviorMeshResolutionGroupBoxToggled); + connect(ui->shapeFilesMeshResolutionGroupBox, &QGroupBox::toggled, this, &Outputs::shapeFilesMeshResolutionGroupBoxToggled); + connect(ui->geospatialPDFFilesMeshResolutionGroupBox, &QGroupBox::toggled, this, &Outputs::geospatialPDFFilesMeshResolutionGroupBoxToggled); + connect(this, &Outputs::updateGoogleState, &AppState::instance(), &AppState::updateGoogleEarthOutputState); + connect(this, &Outputs::updateFireBehaviorState, &AppState::instance(), &AppState::updateFireBehaviorOutputState); + connect(this, &Outputs::updateShapeState, &AppState::instance(), &AppState::updateShapeFilesOutputState); + connect(this, &Outputs::updatePDFState, &AppState::instance(), &AppState::updateGeoSpatialPDFFilesOutputState); + connect(this, &Outputs::updateVTKState, &AppState::instance(), &AppState::updateVTKFilesOutputState); +} + +void Outputs::googleEarthGroupBoxToggled(bool checked) +{ + AppState& state = AppState::instance(); + state.isGoogleEarthToggled = checked; + emit updateGoogleState(); +} + +void Outputs::fireBehaviorGroupBoxToggled(bool checked) +{ + AppState& state = AppState::instance(); + state.isFireBehaviorToggled = checked; + emit updateFireBehaviorState(); +} + +void Outputs::shapeFilesGroupBoxToggled(bool checked) +{ + AppState& state = AppState::instance(); + state.isShapeFilesToggled = checked; + emit updateShapeState(); +} + +void Outputs::geospatialPDFFilesGroupBoxToggled(bool checked) +{ + AppState& state = AppState::instance(); + state.isGeoSpatialPDFFilesToggled = checked; + emit updatePDFState(); +} + +void Outputs::VTKFilesCheckBoxClicked(bool checked) +{ + AppState& state = AppState::instance(); + state.isVTKFilesToggled = checked; + emit updateVTKState(); +} + +void Outputs::googleEarthMeshResolutionGroupBoxToggled(bool checked) +{ + ui->googleEarthMeshResolutionSpinBox->setEnabled(!checked); + ui->googleEarthMeshResolutionComboBox->setEnabled(!checked); +} + +void Outputs::fireBehaviorMeshResolutionGroupBoxToggled(bool checked) +{ + ui->fireBehaviorMeshResolutionSpinBox->setEnabled(!checked); + ui->fireBehaviorMeshResolutionComboBox->setEnabled(!checked); +} + +void Outputs::shapeFilesMeshResolutionGroupBoxToggled(bool checked) +{ + ui->shapeFilesMeshResolutionSpinBox->setEnabled(!checked); + ui->shapeFilesMeshResolutionComboBox->setEnabled(!checked); +} + +void Outputs::geospatialPDFFilesMeshResolutionGroupBoxToggled(bool checked) +{ + ui->geospatialPDFFilesMeshResolutionSpinBox->setEnabled(!checked); + ui->geospatialPDFFilesMeshResolutionComboBox->setEnabled(!checked); +} diff --git a/src/gui/outputs.h b/src/gui/outputs.h new file mode 100644 index 000000000..73d909613 --- /dev/null +++ b/src/gui/outputs.h @@ -0,0 +1,38 @@ +#ifndef OUTPUTS_H +#define OUTPUTS_H + +#include "ui_mainWindow.h" +#include "appState.h" +#include +#include + + +class Outputs : public QObject +{ + Q_OBJECT +public: + explicit Outputs(Ui::MainWindow *ui, QObject* parent); + +signals: + void updateGoogleState(); + void updateFireBehaviorState(); + void updateShapeState(); + void updatePDFState(); + void updateVTKState(); + +private slots: + void googleEarthGroupBoxToggled(bool checked); + void fireBehaviorGroupBoxToggled(bool checked); + void shapeFilesGroupBoxToggled(bool checked); + void geospatialPDFFilesGroupBoxToggled(bool checked); + void VTKFilesCheckBoxClicked(bool checked); + void googleEarthMeshResolutionGroupBoxToggled(bool checked); + void fireBehaviorMeshResolutionGroupBoxToggled(bool checked); + void shapeFilesMeshResolutionGroupBoxToggled(bool checked); + void geospatialPDFFilesMeshResolutionGroupBoxToggled(bool checked); + +private: + Ui::MainWindow *ui; +}; + +#endif // OUTPUTS_H diff --git a/src/gui/pointInitializationInput.cpp b/src/gui/pointInitializationInput.cpp index 3094d0822..c2bd3e9ce 100644 --- a/src/gui/pointInitializationInput.cpp +++ b/src/gui/pointInitializationInput.cpp @@ -50,6 +50,7 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* connect(ui->pointInitializationTreeView, &QTreeView::expanded, this, &PointInitializationInput::folderExpanded); connect(ui->pointInitializationTreeView, &QTreeView::collapsed, this, &PointInitializationInput::folderCollapsed); connect(ui->weatherStationDataTimestepsSpinBox, &QSpinBox::valueChanged, this, &PointInitializationInput::weatherStationDataTimestepsSpinBoxValueChanged); + connect(this, &PointInitializationInput::updateState, &AppState::instance(), &AppState::updatePointInitializationInputState); } void PointInitializationInput::pointInitializationGroupBoxToggled(bool toggled) diff --git a/src/gui/setConfigurationDialogOption.h b/src/gui/setConfigurationDialogOption.h index f3cf37af3..883e8c6af 100644 --- a/src/gui/setConfigurationDialogOption.h +++ b/src/gui/setConfigurationDialogOption.h @@ -1,12 +1,9 @@ #ifndef SETCONFIGURATIONDIALOGOPTION_H #define SETCONFIGURATIONDIALOGOPTION_H +#include "ui_setConfigurationDialogOption.h" #include -namespace Ui { -class setConfigurationOptionDialog; -} - class setConfigurationOptionDialog : public QDialog { Q_OBJECT diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp index 4063fa99d..b3a53930f 100644 --- a/src/gui/surfaceInput.cpp +++ b/src/gui/surfaceInput.cpp @@ -59,6 +59,7 @@ SurfaceInput::SurfaceInput(Ui::MainWindow *ui, connect(ui->timeZoneAllZonesCheckBox, &QCheckBox::clicked, this, &SurfaceInput::timeZoneAllZonesCheckBoxClicked); connect(ui->timeZoneDetailsCheckBox, &QCheckBox::clicked, this, &SurfaceInput::timeZoneDetailsCheckBoxClicked); connect(ui->timeZoneComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInput::timeZoneComboBoxCurrentIndexChanged); + connect(this, &SurfaceInput::updateState, &AppState::instance(), &AppState::updateSurfaceInputState); } From 87467f7d29b325302050d1b6c11a25e2309550da Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 12 Nov 2025 13:49:46 -0700 Subject: [PATCH 282/435] More code clean up and added a 5 second limit to server requests --- src/gui/appState.cpp | 19 ++-- src/gui/domainAverageInput.cpp | 25 ++++- src/gui/domainAverageInput.h | 5 - src/gui/mainWindow.cpp | 1 - src/gui/mainWindow.ui | 14 +-- src/gui/menuBar.h | 4 - src/gui/pointInitializationInput.h | 5 - src/gui/serverBridge.cpp | 133 ++++++++++++----------- src/gui/setConfigurationDialogOption.cpp | 1 - src/gui/surfaceInput.cpp | 7 +- src/gui/surfaceInput.h | 5 - src/gui/weatherModelInput.h | 4 - 12 files changed, 111 insertions(+), 112 deletions(-) diff --git a/src/gui/appState.cpp b/src/gui/appState.cpp index 243e76c5f..8beff3c99 100644 --- a/src/gui/appState.cpp +++ b/src/gui/appState.cpp @@ -39,7 +39,7 @@ AppState::AppState() : tickIcon(":/tick.png"), crossIcon(":/cross.png"), bulletIcon(":/bullet_blue.png") -{ } +{} void AppState::setUi(Ui::MainWindow* mainWindowUi) { @@ -67,10 +67,12 @@ void AppState::updateSolverMethodologyState() if (isMassSolverToggled) { isSolverMethodologyValid = true; - ui->treeWidget->topLevelItem(0)->setToolTip(0, "Conservation of Mass Selected"); ui->treeWidget->topLevelItem(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(0)->setToolTip(0, "Using Conservation of Mass Selected"); ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(0)->child(0)->setToolTip(0, "Conservation of Mass Selected"); ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(0)->child(1)->setToolTip(0, "Conservation of Mass and Momentum Not Selected"); } else if (isMomentumSolverToggled) { @@ -78,16 +80,19 @@ void AppState::updateSolverMethodologyState() ui->treeWidget->topLevelItem(0)->setToolTip(1, "Conservation of Mass and Momentum Selected"); ui->treeWidget->topLevelItem(0)->setIcon(0, tickIcon); ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(0)->child(1)->setToolTip(0, "Conservation of Mass and Momentum Selected"); ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(0)->child(0)->setToolTip(0, "Conservation of Mass Not Selected"); } else { isSolverMethodologyValid = false; ui->treeWidget->topLevelItem(0)->setIcon(0, crossIcon); ui->treeWidget->topLevelItem(0)->setToolTip(0,"Select a Solver"); - ui->treeWidget->topLevelItem(0)->setIcon(0, crossIcon); - ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, bulletIcon); ui->treeWidget->topLevelItem(0)->child(0)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(0)->child(0)->setToolTip(0, "Conservation of Mass Not Selected"); + ui->treeWidget->topLevelItem(0)->child(1)->setIcon(0, bulletIcon); + ui->treeWidget->topLevelItem(0)->child(1)->setToolTip(0, "Conservation of Mass and Momentum Not Selected"); } updateOverallState(); @@ -143,13 +148,13 @@ void AppState::updateDomainAverageInputState() if (isDomainAverageInitializationToggled && isDomainAverageWindInputTableValid) { ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, ""); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "Valid"); isDomainAverageInitializationValid = true; } else if (isDomainAverageInitializationToggled && !isDomainAverageWindInputTableValid) { ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, crossIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "Bad wind inputs; hover over red cells for explanation."); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "Bad wind inputs"); isDomainAverageInitializationValid = false; } else @@ -167,7 +172,7 @@ void AppState::updatePointInitializationInputState() if (isPointInitializationToggled && isStationFileSelectionValid && isStationFileSelected) { ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, ""); + ui->treeWidget->topLevelItem(1)->child(3)->child(1)->setToolTip(0, "Valid"); isPointInitializationValid = true; } else if(isPointInitializationToggled && !isStationFileSelected) diff --git a/src/gui/domainAverageInput.cpp b/src/gui/domainAverageInput.cpp index 9ab024b5d..1e41dd036 100644 --- a/src/gui/domainAverageInput.cpp +++ b/src/gui/domainAverageInput.cpp @@ -51,8 +51,10 @@ void DomainAverageInput::domainAverageTableCellChanged(int row, int column) { QTableWidget* table = ui->domainAverageTable; QTableWidgetItem* item = table->item(row, column); - if (!item) return; - + if (!item) + { + return; + } QString value = item->text().trimmed(); bool valid = false; QString errorMessage; @@ -61,7 +63,8 @@ void DomainAverageInput::domainAverageTableCellChanged(int row, int column) if (value.isEmpty()) { valid = true; - } else + } + else { switch (column) { @@ -89,14 +92,20 @@ void DomainAverageInput::domainAverageTableCellChanged(int row, int column) { QTime t = QTime::fromString(value, "hh:mm"); valid = t.isValid(); - if (!valid) errorMessage = "Must be a valid 24h time (hh:mm)"; + if (!valid) + { + errorMessage = "Must be a valid 24h time (hh:mm)"; + } break; } case 3: { QDate d = QDate::fromString(value, "MM/dd/yyyy"); valid = d.isValid(); - if (!valid) errorMessage = "Must be a valid date (MM/DD/YYYY)"; + if (!valid) + { + errorMessage = "Must be a valid date (MM/DD/YYYY)"; + } break; } case 4: @@ -112,7 +121,10 @@ void DomainAverageInput::domainAverageTableCellChanged(int row, int column) case 5: { value.toInt(&valid); - if (!valid) errorMessage = "Must be an integer"; + if (!valid) + { + errorMessage = "Must be an integer"; + } break; } default: @@ -135,6 +147,7 @@ void DomainAverageInput::domainAverageTableCellChanged(int row, int column) } AppState::instance().isDomainAverageWindInputTableValid = invalidDAWCells.isEmpty(); + emit updateState(); } diff --git a/src/gui/domainAverageInput.h b/src/gui/domainAverageInput.h index e9187ae06..384e89178 100644 --- a/src/gui/domainAverageInput.h +++ b/src/gui/domainAverageInput.h @@ -36,11 +36,6 @@ #include #include -namespace Ui -{ - class MainWindow; -} - class DomainAverageInput: public QObject { Q_OBJECT diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 69e9ca3b1..76cf2e38d 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -116,7 +116,6 @@ MainWindow::~MainWindow() void MainWindow::connectSignals() { - connect(ui->elevationInputTypeComboBox, &QComboBox::currentIndexChanged, ui->elevationInputTypeStackedWidget, &QStackedWidget::setCurrentIndex); connect(ui->massSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::massSolverCheckBoxClicked); connect(ui->momentumSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::momentumSolverCheckBoxClicked); connect(ui->diurnalCheckBox, &QCheckBox::clicked, this, &MainWindow::diurnalCheckBoxClicked); diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index 45b6400bd..921f6e494 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -464,7 +464,7 @@ QFrame::Shadow::Sunken - 11 + 19 @@ -750,8 +750,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 578 - 588 + 538 + 419 @@ -1316,7 +1316,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 572 + 346 661 @@ -2628,8 +2628,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 578 - 588 + 414 + 408 @@ -3334,7 +3334,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 578 + 381 318 diff --git a/src/gui/menuBar.h b/src/gui/menuBar.h index 76810bc70..110777737 100644 --- a/src/gui/menuBar.h +++ b/src/gui/menuBar.h @@ -43,10 +43,6 @@ #include #include -namespace Ui { -class MainWindow; -} - class MenuBar : public QObject { Q_OBJECT diff --git a/src/gui/pointInitializationInput.h b/src/gui/pointInitializationInput.h index 2ed137c96..b4fa77484 100644 --- a/src/gui/pointInitializationInput.h +++ b/src/gui/pointInitializationInput.h @@ -42,11 +42,6 @@ #include #include - -namespace Ui { -class MainWindow; -} - class PointInitializationInput : public QObject { Q_OBJECT diff --git a/src/gui/serverBridge.cpp b/src/gui/serverBridge.cpp index 0720b56db..d4fc3e554 100644 --- a/src/gui/serverBridge.cpp +++ b/src/gui/serverBridge.cpp @@ -100,72 +100,73 @@ bool ServerBridge::NinjaCheckVersions(char * mostrecentversion, char * localvers char * ServerBridge::NinjaQueryServerMessages(bool checkAbort) { - // CPLSetConfigOption("GDAL_HTTP_UNSAFESSL", "YES"); - // const char* url = "https://ninjastorm.firelab.org/sqlitetest/messages.txt"; - // CPLHTTPResult *poResult = CPLHTTPFetch(url, NULL); - // CPLSetConfigOption( "GDAL_HTTP_TIMEOUT", NULL ); - // if( !poResult || poResult->nStatus != 0 || poResult->nDataLen == 0 ) - // { - // CPLDebug( "NINJA", "Failed to reach the ninjastorm server." ); - // return NULL; - // } - - // const char* pszTextContent = reinterpret_cast(poResult->pabyData); - // std::vector messages; - // std::istringstream iss(pszTextContent); - // std::string message; - - // // Read all lines into the vector - // while (std::getline(iss, message)) - // { - // messages.push_back(message); - // } - - // // Process all lines except the last two - // std::ostringstream oss; - // if (checkAbort) - // { - // for (size_t i = 0; i < messages.size(); ++i) - // { - // if (i == messages.size()-1) - // { - // oss << messages[i] << "\n"; - // } - // } - // } - // else - // { - // bool versionisuptodate = NinjaCheckVersions(const_cast(messages[1].c_str()), const_cast(NINJA_VERSION_STRING)); - // if (!versionisuptodate) - // { - // oss << "You are using an outdated WindNinja version, please update to version: " << messages[1] << "

"; - - // oss << "Windows: Download the new " << messages[1] - // << " installer here

"; - - // oss << "Linux: See the " << messages[1] << " tag in our GitHub repo
"; - - // } - // if (messages[4].empty() == false) - // { - // for (size_t i = 3; i < messages.size() - 2; ++i) - // { - // if (!messages[i].empty()) - // { - // oss << messages[i] << "\n"; - // } - // } - // } - // if (messages[4].empty() && versionisuptodate) { - // return NULL; - // } - // } - - // std::string resultingmessage = oss.str(); - // char* returnString = new char[resultingmessage.length() + 1]; - // std::strcpy(returnString, resultingmessage.c_str()); - // CPLHTTPDestroyResult(poResult); - // return returnString; + CPLSetConfigOption("GDAL_HTTP_UNSAFESSL", "YES"); + CPLSetConfigOption("GDAL_HTTP_TIMEOUT", "5"); + const char* url = "https://ninjastorm.firelab.org/sqlitetest/messages.txt"; + CPLHTTPResult *poResult = CPLHTTPFetch(url, NULL); + CPLSetConfigOption( "GDAL_HTTP_TIMEOUT", NULL ); + if( !poResult || poResult->nStatus != 0 || poResult->nDataLen == 0 ) + { + CPLDebug( "NINJA", "Failed to reach the ninjastorm server." ); + return NULL; + } + + const char* pszTextContent = reinterpret_cast(poResult->pabyData); + std::vector messages; + std::istringstream iss(pszTextContent); + std::string message; + + // Read all lines into the vector + while (std::getline(iss, message)) + { + messages.push_back(message); + } + + // Process all lines except the last two + std::ostringstream oss; + if (checkAbort) + { + for (size_t i = 0; i < messages.size(); ++i) + { + if (i == messages.size()-1) + { + oss << messages[i] << "\n"; + } + } + } + else + { + bool versionisuptodate = NinjaCheckVersions(const_cast(messages[1].c_str()), const_cast(NINJA_VERSION_STRING)); + if (!versionisuptodate) + { + oss << "You are using an outdated WindNinja version, please update to version: " << messages[1] << "

"; + + oss << "Windows: Download the new " << messages[1] + << " installer here

"; + + oss << "Linux: See the " << messages[1] << " tag in our GitHub repo
"; + + } + if (messages[4].empty() == false) + { + for (size_t i = 3; i < messages.size() - 2; ++i) + { + if (!messages[i].empty()) + { + oss << messages[i] << "\n"; + } + } + } + if (messages[4].empty() && versionisuptodate) { + return NULL; + } + } + + std::string resultingmessage = oss.str(); + char* returnString = new char[resultingmessage.length() + 1]; + std::strcpy(returnString, resultingmessage.c_str()); + CPLHTTPDestroyResult(poResult); + return returnString; return NULL; } diff --git a/src/gui/setConfigurationDialogOption.cpp b/src/gui/setConfigurationDialogOption.cpp index 3d6e1bf17..5a487ef5b 100644 --- a/src/gui/setConfigurationDialogOption.cpp +++ b/src/gui/setConfigurationDialogOption.cpp @@ -1,5 +1,4 @@ #include "setConfigurationDialogOption.h" -#include "ui_setConfigurationDialogOption.h" setConfigurationOptionDialog::setConfigurationOptionDialog(QWidget *parent) : QDialog(parent), diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp index b3a53930f..8a2f0117e 100644 --- a/src/gui/surfaceInput.cpp +++ b/src/gui/surfaceInput.cpp @@ -44,21 +44,26 @@ SurfaceInput::SurfaceInput(Ui::MainWindow *ui, connect(ui->boundingBoxSouthLineEdit, &QLineEdit::textChanged, this, &SurfaceInput::boundingBoxLineEditsTextChanged); connect(ui->boundingBoxEastLineEdit, &QLineEdit::textChanged, this, &SurfaceInput::boundingBoxLineEditsTextChanged); connect(ui->boundingBoxWestLineEdit, &QLineEdit::textChanged, this, &SurfaceInput::boundingBoxLineEditsTextChanged); + connect(ui->pointRadiusLatLineEdit,&QLineEdit::textChanged, this, &SurfaceInput::pointRadiusLineEditsTextChanged); connect(ui->pointRadiusLonLineEdit,&QLineEdit::textChanged, this, &SurfaceInput::pointRadiusLineEditsTextChanged); connect(ui->pointRadiusRadiusLineEdit,&QLineEdit::textChanged, this, &SurfaceInput::pointRadiusLineEditsTextChanged); + connect(ui->elevationInputFileDownloadButton, &QPushButton::clicked, this, &SurfaceInput::elevationInputFileDownloadButtonClicked); connect(ui->elevationInputFileOpenButton, &QPushButton::clicked, this, &SurfaceInput::elevationInputFileOpenButtonClicked); connect(ui->elevationInputFileLineEdit, &QLineEdit::textChanged, this, &SurfaceInput::elevationInputFileLineEditTextChanged); + connect(ui->elevationInputTypeComboBox, &QComboBox::currentIndexChanged, ui->elevationInputTypeStackedWidget, &QStackedWidget::setCurrentIndex); connect(ui->meshResolutionComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInput::meshResolutionComboBoxCurrentIndexChanged); connect(ui->meshResolutionUnitsComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInput::meshResolutionUnitsComboBoxCurrentIndexChanged); + connect(ui->timeZoneComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInput::timeZoneComboBoxCurrentIndexChanged); + connect(ui->surfaceInputDownloadCancelButton, &QPushButton::clicked, this, &SurfaceInput::surfaceInputDownloadCancelButtonClicked); connect(ui->surfaceInputDownloadButton, &QPushButton::clicked, this, &SurfaceInput::surfaceInputDownloadButtonClicked); connect(ui->elevationInputTypePushButton, &QPushButton::clicked, this, &SurfaceInput::elevationInputTypePushButtonClicked); connect(ui->timeZoneAllZonesCheckBox, &QCheckBox::clicked, this, &SurfaceInput::timeZoneAllZonesCheckBoxClicked); connect(ui->timeZoneDetailsCheckBox, &QCheckBox::clicked, this, &SurfaceInput::timeZoneDetailsCheckBoxClicked); - connect(ui->timeZoneComboBox, &QComboBox::currentIndexChanged, this, &SurfaceInput::timeZoneComboBoxCurrentIndexChanged); + connect(this, &SurfaceInput::updateState, &AppState::instance(), &AppState::updateSurfaceInputState); } diff --git a/src/gui/surfaceInput.h b/src/gui/surfaceInput.h index 331e2239e..4135d9bc5 100644 --- a/src/gui/surfaceInput.h +++ b/src/gui/surfaceInput.h @@ -46,11 +46,6 @@ #include #include -namespace Ui -{ - class MainWindow; -} - class SurfaceInput : public QObject { Q_OBJECT diff --git a/src/gui/weatherModelInput.h b/src/gui/weatherModelInput.h index 0a20e3dbc..5463475de 100644 --- a/src/gui/weatherModelInput.h +++ b/src/gui/weatherModelInput.h @@ -41,10 +41,6 @@ #include #include -namespace Ui { -class MainWindow; -} - class WeatherModelInput : public QObject { Q_OBJECT From 14ef6637708b7c7d6299d05e45d1ff5d20dd0df4 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 14 Nov 2025 12:01:24 -0700 Subject: [PATCH 283/435] Removed conflict markers left over from merge --- src/gui/mainWindow.h | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index e85ce738b..12fe71a98 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -30,7 +30,6 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H -<<<<<<< HEAD:src/gui/mainWindow.h #include "outputs.h" #include "surfaceInput.h" #include "menuBar.h" @@ -41,17 +40,6 @@ #include "weatherModelInput.h" #include "ui_mainWindow.h" #include "appState.h" -======= -#include "surfaceinput.h" -#include "menubar.h" -#include "domainaverageinput.h" -#include "pointinitializationinput.h" -#include "mapbridge.h" -#include "serverbridge.h" -#include "weathermodelinput.h" -#include "ui_mainwindow.h" -#include "appstate.h" ->>>>>>> GUI-Redesign-upgradeNinjaCom:src/gui/mainwindow.h #include "windninja.h" #include #include @@ -108,15 +96,12 @@ class MainWindow : public QMainWindow ~MainWindow(); signals: -<<<<<<< HEAD:src/gui/mainWindow.h void updateDirunalState(); void updateStabilityState(); void updateMetholodyState(); -======= void updateProgressValueSignal(int run, int progress); void updateProgressMessageSignal(const QString &msg); void writeToConsoleSignal(const QString &msg, QColor color = Qt::white); ->>>>>>> GUI-Redesign-upgradeNinjaCom:src/gui/mainwindow.h private slots: void massSolverCheckBoxClicked(); From 1bb26ad9103c94f5b3d0dcf15c79e5fc453aa9cc Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 14 Nov 2025 12:12:30 -0700 Subject: [PATCH 284/435] Added back removed connect statements from merge --- src/gui/mainWindow.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 2ad92901e..cacda5914 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -134,6 +134,10 @@ void MainWindow::connectSignals() connect(this, &MainWindow::updateDirunalState, &AppState::instance(), &AppState::updateDiurnalInputState); connect(this, &MainWindow::updateStabilityState, &AppState::instance(), &AppState::updateStabilityInputState); connect(this, &MainWindow::updateMetholodyState, &AppState::instance(), &AppState::updateSolverMethodologyState); + + connect(this, &MainWindow::updateProgressValueSignal, this, &MainWindow::updateProgressValue, Qt::QueuedConnection); + connect(this, &MainWindow::updateProgressMessageSignal, this, &MainWindow::updateProgressMessage, Qt::QueuedConnection); + connect(this, &MainWindow::writeToConsoleSignal, this, &MainWindow::writeToConsole, Qt::QueuedConnection); } void MainWindow::writeToConsole(QString message, QColor color) From 71804a037233b45732ce52e53d1bcddf54bc948d Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 18 Nov 2025 10:33:20 -0700 Subject: [PATCH 285/435] Changed all references of CPLIsNan to std::isnan, for #660 --- src/ninja/ascii_grid.cpp | 2 +- src/ninja/genericSurfInitialization.cpp | 12 ++++++------ src/ninja/ncepGfsSurfInitialization.cpp | 12 ++++++------ src/ninja/ncepHrrrSurfInitialization.cpp | 8 ++++---- src/ninja/ncepNamAlaskaSurfInitialization.cpp | 12 ++++++------ src/ninja/ncepNamGrib2SurfInitialization.cpp | 8 ++++---- src/ninja/ncepNamSurfInitialization.cpp | 12 ++++++------ src/ninja/ncepNdfdInitialization.cpp | 12 ++++++------ src/ninja/ncepRapSurfInitialization.cpp | 12 ++++++------ src/ninja/nomads_wx_init.cpp | 16 ++++++++-------- src/ninja/pointInitialization.cpp | 6 +++--- src/ninja/wrf3dInitialization.cpp | 2 +- src/ninja/wrfSurfInitialization.cpp | 14 +++++++------- src/ninja/wxStation.cpp | 14 +++++++------- 14 files changed, 71 insertions(+), 71 deletions(-) diff --git a/src/ninja/ascii_grid.cpp b/src/ninja/ascii_grid.cpp index 0cfbf3146..a6cc921a1 100644 --- a/src/ninja/ascii_grid.cpp +++ b/src/ninja/ascii_grid.cpp @@ -27,7 +27,7 @@ template<> inline short epsClr() { return 1; } template inline bool cplIsNan(T t) { - return CPLIsNan((double)t); // we need to disambiguate + return std::isnan((double)t); // we need to disambiguate } diff --git a/src/ninja/genericSurfInitialization.cpp b/src/ninja/genericSurfInitialization.cpp index c708cdd26..fbe072fa0 100644 --- a/src/ninja/genericSurfInitialization.cpp +++ b/src/ninja/genericSurfInitialization.cpp @@ -207,7 +207,7 @@ void genericSurfInitialization::checkForValidData() else { noDataValueExists = true; - noDataIsNan = CPLIsNan(dfNoData); + noDataIsNan = std::isnan(dfNoData); } //set the data @@ -221,7 +221,7 @@ void genericSurfInitialization::checkForValidData() { if(noDataIsNan) { - if(CPLIsNan(padfScanline[k])) + if(std::isnan(padfScanline[k])) throw badForecastFile("Forecast file contains no_data values."); }else { @@ -455,28 +455,28 @@ void genericSurfInitialization::setSurfaceGrids( WindNinjaInputs &input, if( varList[i] == "Temperature_height_above_ground" ) { GDAL2AsciiGrid( wrpDS, bandNum, airGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { airGrid.set_noDataValue(-9999.0); airGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "V-component_of_wind_height_above_ground" ) { GDAL2AsciiGrid( wrpDS, bandNum, vGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { vGrid.set_noDataValue(-9999.0); vGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "U-component_of_wind_height_above_ground" ) { GDAL2AsciiGrid( wrpDS, bandNum, uGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { uGrid.set_noDataValue(-9999.0); uGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "Total_cloud_cover" ) { GDAL2AsciiGrid( wrpDS, bandNum, cloudGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { cloudGrid.set_noDataValue(-9999.0); cloudGrid.replaceNan( -9999.0 ); } diff --git a/src/ninja/ncepGfsSurfInitialization.cpp b/src/ninja/ncepGfsSurfInitialization.cpp index e7b7d2c9a..2b0ebbe2e 100644 --- a/src/ninja/ncepGfsSurfInitialization.cpp +++ b/src/ninja/ncepGfsSurfInitialization.cpp @@ -217,7 +217,7 @@ void ncepGfsSurfInitialization::checkForValidData() else { noDataValueExists = true; - noDataIsNan = CPLIsNan(dfNoData); + noDataIsNan = std::isnan(dfNoData); } //set the data @@ -231,7 +231,7 @@ void ncepGfsSurfInitialization::checkForValidData() { if(noDataIsNan) { - if(CPLIsNan(padfScanline[k])) + if(std::isnan(padfScanline[k])) throw badForecastFile("Forecast file contains no_data values."); }else { @@ -540,7 +540,7 @@ void ncepGfsSurfInitialization::setSurfaceGrids( WindNinjaInputs &input, if( varList[i] == "Temperature_height_above_ground" ) { tempBandNum = (bandNum * 3) - 2; // adjust for height dimension (3) GDAL2AsciiGrid( wrpDS, tempBandNum, airGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { airGrid.set_noDataValue(-9999.0); airGrid.replaceNan( -9999.0 ); } @@ -548,7 +548,7 @@ void ncepGfsSurfInitialization::setSurfaceGrids( WindNinjaInputs &input, else if( varList[i] == "v-component_of_wind_height_above_ground" ) { vBandNum = (bandNum * 3) - 2; // adjust for height dimension (3) GDAL2AsciiGrid( wrpDS, vBandNum, vGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { vGrid.set_noDataValue(-9999.0); vGrid.replaceNan( -9999.0 ); } @@ -556,7 +556,7 @@ void ncepGfsSurfInitialization::setSurfaceGrids( WindNinjaInputs &input, else if( varList[i] == "u-component_of_wind_height_above_ground" ) { uBandNum = (bandNum * 3) - 2; //adjust for height dimension (3) GDAL2AsciiGrid( wrpDS, uBandNum, uGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { uGrid.set_noDataValue(-9999.0); uGrid.replaceNan( -9999.0 ); //TEST FOR SOUTHERN HEMISPHERE WARP ISSUE. @@ -567,7 +567,7 @@ void ncepGfsSurfInitialization::setSurfaceGrids( WindNinjaInputs &input, } else if( varList[i] == "Total_cloud_cover_convective_cloud" ) { GDAL2AsciiGrid( wrpDS, bandNum, cloudGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { cloudGrid.set_noDataValue(-9999.0); cloudGrid.replaceNan( -9999.0 ); } diff --git a/src/ninja/ncepHrrrSurfInitialization.cpp b/src/ninja/ncepHrrrSurfInitialization.cpp index 1105dea1d..a92f296c0 100644 --- a/src/ninja/ncepHrrrSurfInitialization.cpp +++ b/src/ninja/ncepHrrrSurfInitialization.cpp @@ -361,7 +361,7 @@ void ncepHrrrSurfInitialization::setSurfaceGrids( WindNinjaInputs &input, if( varList[i] == "2t" ) { GDAL2AsciiGrid( wrpDS, i+1, airGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { airGrid.set_noDataValue( -9999.0 ); airGrid.replaceNan( -9999.0 ); } @@ -372,21 +372,21 @@ void ncepHrrrSurfInitialization::setSurfaceGrids( WindNinjaInputs &input, } else if( varList[i] == "10v" ) { GDAL2AsciiGrid( wrpDS, i+1, vGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { vGrid.set_noDataValue( -9999.0 ); vGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "10u" ) { GDAL2AsciiGrid( wrpDS, i+1, uGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { uGrid.set_noDataValue( -9999.0 ); uGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "tcc" ) { GDAL2AsciiGrid( wrpDS, i+1, cloudGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { cloudGrid.set_noDataValue( -9999.0 ); cloudGrid.replaceNan( -9999.0 ); } diff --git a/src/ninja/ncepNamAlaskaSurfInitialization.cpp b/src/ninja/ncepNamAlaskaSurfInitialization.cpp index 464366d73..21ecaaaee 100644 --- a/src/ninja/ncepNamAlaskaSurfInitialization.cpp +++ b/src/ninja/ncepNamAlaskaSurfInitialization.cpp @@ -200,7 +200,7 @@ void ncepNamAlaskaSurfInitialization::checkForValidData() else { noDataValueExists = true; - noDataIsNan = CPLIsNan(dfNoData); + noDataIsNan = std::isnan(dfNoData); } //set the data @@ -214,7 +214,7 @@ void ncepNamAlaskaSurfInitialization::checkForValidData() { if(noDataIsNan) { - if(CPLIsNan(padfScanline[k])) + if(std::isnan(padfScanline[k])) throw badForecastFile("Forecast file contains no_data values."); }else { @@ -505,28 +505,28 @@ void ncepNamAlaskaSurfInitialization::setSurfaceGrids( WindNinjaInputs &input, } if( varList[i] == "Temperature_height_above_ground" ) { GDAL2AsciiGrid( wrpDS, bandNum, airGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { airGrid.set_noDataValue(-9999.0); airGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "v-component_of_wind_height_above_ground" ) { GDAL2AsciiGrid( wrpDS, bandNum, vGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { vGrid.set_noDataValue(-9999.0); vGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "u-component_of_wind_height_above_ground" ) { GDAL2AsciiGrid( wrpDS, bandNum, uGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { uGrid.set_noDataValue(-9999.0); uGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "Total_cloud_cover_entire_atmosphere_single_layer" ) { GDAL2AsciiGrid( wrpDS, bandNum, cloudGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { cloudGrid.set_noDataValue(-9999.0); cloudGrid.replaceNan( -9999.0 ); } diff --git a/src/ninja/ncepNamGrib2SurfInitialization.cpp b/src/ninja/ncepNamGrib2SurfInitialization.cpp index 14a41840d..40be0ee61 100644 --- a/src/ninja/ncepNamGrib2SurfInitialization.cpp +++ b/src/ninja/ncepNamGrib2SurfInitialization.cpp @@ -278,28 +278,28 @@ void ncepNamGrib2SurfInitialization::setSurfaceGrids( WindNinjaInputs &input, for( unsigned int i = 0; i < varList.size(); i++ ) { if( varList[i] == "2t" ) { GDAL2AsciiGrid( wrpDS, i+1, airGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { airGrid.set_noDataValue( -9999.0 ); airGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "10v" ) { GDAL2AsciiGrid( wrpDS, i+1, vGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { vGrid.set_noDataValue( -9999.0 ); vGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "10u" ) { GDAL2AsciiGrid( wrpDS, i+1, uGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { uGrid.set_noDataValue( -9999.0 ); uGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "tcc" ) { GDAL2AsciiGrid( wrpDS, i+1, cloudGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { cloudGrid.set_noDataValue( -9999.0 ); cloudGrid.replaceNan( -9999.0 ); } diff --git a/src/ninja/ncepNamSurfInitialization.cpp b/src/ninja/ncepNamSurfInitialization.cpp index b0efe030f..8e7c05468 100644 --- a/src/ninja/ncepNamSurfInitialization.cpp +++ b/src/ninja/ncepNamSurfInitialization.cpp @@ -200,7 +200,7 @@ void ncepNamSurfInitialization::checkForValidData() else { noDataValueExists = true; - noDataIsNan = CPLIsNan(dfNoData); + noDataIsNan = std::isnan(dfNoData); } //set the data @@ -214,7 +214,7 @@ void ncepNamSurfInitialization::checkForValidData() { if(noDataIsNan) { - if(CPLIsNan(padfScanline[k])) + if(std::isnan(padfScanline[k])) throw badForecastFile("Forecast file contains no_data values."); }else { @@ -509,28 +509,28 @@ void ncepNamSurfInitialization::setSurfaceGrids( WindNinjaInputs &input, if( varList[i] == "Temperature_height_above_ground" ) { GDAL2AsciiGrid( wrpDS, bandNum, airGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { airGrid.set_noDataValue(-9999.0); airGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "v-component_of_wind_height_above_ground" ) { GDAL2AsciiGrid( wrpDS, bandNum, vGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { vGrid.set_noDataValue(-9999.0); vGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "u-component_of_wind_height_above_ground" ) { GDAL2AsciiGrid( wrpDS, bandNum, uGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { uGrid.set_noDataValue(-9999.0); uGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "Total_cloud_cover_entire_atmosphere_single_layer" ) { GDAL2AsciiGrid( wrpDS, bandNum, cloudGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { cloudGrid.set_noDataValue(-9999.0); cloudGrid.replaceNan( -9999.0 ); } diff --git a/src/ninja/ncepNdfdInitialization.cpp b/src/ninja/ncepNdfdInitialization.cpp index 4374a441b..994314ed6 100644 --- a/src/ninja/ncepNdfdInitialization.cpp +++ b/src/ninja/ncepNdfdInitialization.cpp @@ -244,7 +244,7 @@ void ncepNdfdInitialization::checkForValidData() else { noDataValueExists = true; - noDataIsNan = CPLIsNan(dfNoData); + noDataIsNan = std::isnan(dfNoData); } //set the data @@ -258,7 +258,7 @@ void ncepNdfdInitialization::checkForValidData() { if(noDataIsNan) { - if(CPLIsNan(padfScanline[k])) + if(std::isnan(padfScanline[k])) throw badForecastFile("Forecast file contains no_data values."); }else { @@ -665,7 +665,7 @@ void ncepNdfdInitialization::setSurfaceGrids( WindNinjaInputs &input, // GDAL2AsciiGrid( wrpDS, bandNumTempLuck/2, airGrid ); // } // } - //if( CPLIsNan( dfNoData ) ) { + //if( std::isnan( dfNoData ) ) { //airHighGrid.set_noDataValue(-9999.0); //airHighGrid.replaceNan( -9999.0 ); //airLowGrid.set_noDataValue(-9999.0); @@ -704,7 +704,7 @@ void ncepNdfdInitialization::setSurfaceGrids( WindNinjaInputs &input, // } ///* fix no data in the air high, low, and regular grid */ - //if( CPLIsNan( dfNoData ) ) { + //if( std::isnan( dfNoData ) ) { //airHighGrid.set_noDataValue(-9999.0); //airHighGrid.replaceNan( -9999.0 ); //airLowGrid.set_noDataValue(-9999.0); @@ -717,7 +717,7 @@ void ncepNdfdInitialization::setSurfaceGrids( WindNinjaInputs &input, if(varList[i] == "Total_cloud_cover_entire_atmosphere_single_layer_layer") { GDAL2AsciiGrid( wrpDS, bandNum, cloudGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { cloudGrid.set_noDataValue(-9999.0); cloudGrid.replaceNan( -9999.0 ); } @@ -726,7 +726,7 @@ void ncepNdfdInitialization::setSurfaceGrids( WindNinjaInputs &input, }else if(varList[i] == "Wind_direction_from_which_blowing_height_above_ground") { GDAL2AsciiGrid( wrpDS, bandNum, directionGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { directionGrid.set_noDataValue(-9999.0); directionGrid.replaceNan( -9999.0 ); } diff --git a/src/ninja/ncepRapSurfInitialization.cpp b/src/ninja/ncepRapSurfInitialization.cpp index 630d54d04..b465e8b01 100644 --- a/src/ninja/ncepRapSurfInitialization.cpp +++ b/src/ninja/ncepRapSurfInitialization.cpp @@ -202,7 +202,7 @@ void ncepRapSurfInitialization::checkForValidData() else { noDataValueExists = true; - noDataIsNan = CPLIsNan(dfNoData); + noDataIsNan = std::isnan(dfNoData); } //set the data @@ -221,7 +221,7 @@ void ncepRapSurfInitialization::checkForValidData() { if(noDataIsNan) { - if(CPLIsNan(padfScanline[k])) + if(std::isnan(padfScanline[k])) throw badForecastFile("Forecast file contains no_data values."); }else { @@ -486,28 +486,28 @@ void ncepRapSurfInitialization::setSurfaceGrids( WindNinjaInputs &input, if( varList[i] == "Temperature_height_above_ground" ) { GDAL2AsciiGrid( wrpDS, bandNum, airGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { airGrid.set_noDataValue(-9999.0); airGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "v-component_of_wind_height_above_ground" ) { GDAL2AsciiGrid( wrpDS, bandNum, vGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { vGrid.set_noDataValue(-9999.0); vGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "u-component_of_wind_height_above_ground" ) { GDAL2AsciiGrid( wrpDS, bandNum, uGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { uGrid.set_noDataValue(-9999.0); uGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "Geopotential_height_cloud_tops" ) { GDAL2AsciiGrid( wrpDS, bandNum, cloudGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { cloudGrid.set_noDataValue(-9999.0); cloudGrid.replaceNan( -99999.0 ); } diff --git a/src/ninja/nomads_wx_init.cpp b/src/ninja/nomads_wx_init.cpp index a1bc67a20..e9759bb39 100644 --- a/src/ninja/nomads_wx_init.cpp +++ b/src/ninja/nomads_wx_init.cpp @@ -633,7 +633,7 @@ void NomadsWxModel::setSurfaceGrids( WindNinjaInputs &input, if( EQUAL( pszElement, "TMP" ) ) { GDAL2AsciiGrid( (GDALDataset*)hVrtDS, i + 1, airGrid ); - if( CPLIsNan( dfNoData ) ) + if( std::isnan( dfNoData ) ) { airGrid.set_noDataValue( -9999.0 ); airGrid.replaceNan( -9999.0 ); @@ -643,7 +643,7 @@ void NomadsWxModel::setSurfaceGrids( WindNinjaInputs &input, else if( EQUAL( pszElement, "UGRD" ) ) { GDAL2AsciiGrid( (GDALDataset*)hVrtDS, i + 1, uGrid ); - if( CPLIsNan( dfNoData ) ) + if( std::isnan( dfNoData ) ) { uGrid.set_noDataValue( -9999.0 ); uGrid.replaceNan( -9999.0 ); @@ -652,7 +652,7 @@ void NomadsWxModel::setSurfaceGrids( WindNinjaInputs &input, else if( EQUAL( pszElement, "VGRD" ) ) { GDAL2AsciiGrid( (GDALDataset*)hVrtDS, i + 1, vGrid ); - if( CPLIsNan( dfNoData ) ) + if( std::isnan( dfNoData ) ) { vGrid.set_noDataValue( -9999.0 ); vGrid.replaceNan( -9999.0 ); @@ -661,7 +661,7 @@ void NomadsWxModel::setSurfaceGrids( WindNinjaInputs &input, else if( EQUAL( pszElement, "TCDC" ) ) { GDAL2AsciiGrid( (GDALDataset*)hVrtDS, i + 1, cloudGrid ); - if( CPLIsNan( dfNoData ) ) + if( std::isnan( dfNoData ) ) { cloudGrid.set_noDataValue( -9999.0 ); cloudGrid.replaceNan( -9999.0 ); @@ -678,7 +678,7 @@ void NomadsWxModel::setSurfaceGrids( WindNinjaInputs &input, } GDAL2AsciiGrid( (GDALDataset*)hVrtDS, i + 1, airGrid ); - if( CPLIsNan( dfNoData ) ) + if( std::isnan( dfNoData ) ) { airGrid.set_noDataValue( -9999.0 ); airGrid.replaceNan( -9999.0 ); @@ -696,7 +696,7 @@ void NomadsWxModel::setSurfaceGrids( WindNinjaInputs &input, } GDAL2AsciiGrid( (GDALDataset*)hVrtDS, i + 1, speedGrid ); - if( CPLIsNan( dfNoData ) ) + if( std::isnan( dfNoData ) ) { speedGrid.set_noDataValue( -9999.0 ); speedGrid.replaceNan( -9999.0 ); @@ -706,7 +706,7 @@ void NomadsWxModel::setSurfaceGrids( WindNinjaInputs &input, { blendCheck = true; GDAL2AsciiGrid( (GDALDataset*)hVrtDS, i + 1, directionGrid ); - if( CPLIsNan( dfNoData ) ) + if( std::isnan( dfNoData ) ) { directionGrid.set_noDataValue( -9999.0 ); directionGrid.replaceNan( -9999.0 ); @@ -785,7 +785,7 @@ void NomadsWxModel::setSurfaceGrids( WindNinjaInputs &input, { dfNoData = -9999.0; } - if( CPLIsNan( dfNoData ) ) + if( std::isnan( dfNoData ) ) { cloudGrid.set_noDataValue( -9999.0 ); cloudGrid.replaceNan( -9999.0 ); diff --git a/src/ninja/pointInitialization.cpp b/src/ninja/pointInitialization.cpp index e4cdf59d4..bfcd81f57 100644 --- a/src/ninja/pointInitialization.cpp +++ b/src/ninja/pointInitialization.cpp @@ -1436,7 +1436,7 @@ double pointInitialization::interpolator(double iPoint, double lowX, double high //MSVC 2010 is not c++11 compliant-> isnan doesn't work with MSVC2010 //changing to CPLISNan() - if(CPLIsNan(result)) + if(std::isnan(result)) { result = work; } @@ -2247,8 +2247,8 @@ vector pointInitialization::Irradiate(vector solar_radiation, st { solFrac=one; } - //Note that CPLIsNan is required to compile on MSVC2010 c++11's isnan doesn't work - if (CPLIsNan(solFrac)) + //Note that std::isnan is required to compile on MSVC2010 c++11's isnan doesn't work + if (std::isnan(solFrac)) { solFrac=one; } diff --git a/src/ninja/wrf3dInitialization.cpp b/src/ninja/wrf3dInitialization.cpp index 93831f823..c7179cb6c 100644 --- a/src/ninja/wrf3dInitialization.cpp +++ b/src/ninja/wrf3dInitialization.cpp @@ -412,7 +412,7 @@ void wrf3dInitialization::set3dGrids( WindNinjaInputs &input, Mesh const& mesh ) /*AsciiGrid tempGrid; AsciiGrid temp2Grid; GDAL2AsciiGrid( wrpDS, 12, tempGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { tempGrid.set_noDataValue( -9999.0 ); tempGrid.replaceNan( -9999.0 ); } diff --git a/src/ninja/wrfSurfInitialization.cpp b/src/ninja/wrfSurfInitialization.cpp index 718bed305..b73b63bc3 100644 --- a/src/ninja/wrfSurfInitialization.cpp +++ b/src/ninja/wrfSurfInitialization.cpp @@ -182,7 +182,7 @@ void wrfSurfInitialization::checkForValidData() else { noDataValueExists = true; - noDataIsNan = CPLIsNan(dfNoData); + noDataIsNan = std::isnan(dfNoData); } //set the data @@ -196,7 +196,7 @@ void wrfSurfInitialization::checkForValidData() { if(noDataIsNan) { - if(CPLIsNan(padfScanline[k])) + if(std::isnan(padfScanline[k])) throw badForecastFile("Forecast file contains no_data values."); }else { @@ -726,7 +726,7 @@ void wrfSurfInitialization::setSurfaceGrids( WindNinjaInputs &input, if( varList[i] == "U10" ) { GDAL2AsciiGrid( wrpDS, 12, tempGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { tempGrid.set_noDataValue(-9999.0); tempGrid.replaceNan( -9999.0 ); } @@ -745,28 +745,28 @@ void wrfSurfInitialization::setSurfaceGrids( WindNinjaInputs &input, if( varList[i] == "T2" ) { GDAL2AsciiGrid( wrpDS, bandNum, airGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { airGrid.set_noDataValue(-9999.0); airGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "V10" ) { GDAL2AsciiGrid( wrpDS, bandNum, vGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { vGrid.set_noDataValue(-9999.0); vGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "U10" ) { GDAL2AsciiGrid( wrpDS, bandNum, uGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { uGrid.set_noDataValue(-9999.0); uGrid.replaceNan( -9999.0 ); } } else if( varList[i] == "QCLOUD" ) { GDAL2AsciiGrid( wrpDS, bandNum, cloudGrid ); - if( CPLIsNan( dfNoData ) ) { + if( std::isnan( dfNoData ) ) { cloudGrid.set_noDataValue(-9999.0); cloudGrid.replaceNan( -9999.0 ); } diff --git a/src/ninja/wxStation.cpp b/src/ninja/wxStation.cpp index f51d1224b..611a06611 100644 --- a/src/ninja/wxStation.cpp +++ b/src/ninja/wxStation.cpp @@ -577,32 +577,32 @@ bool wxStation::check_station(wxStation station) for (int i=0;i105.0) + if(station.speedList[i] < 0.0 || std::isnan(station.speedList[i]) || station.speedList[i]>105.0) { cout<<"failed speed Check on "< 360.0 || CPLIsNan(station.directionList[i])) + if(station.directionList[i] < 0.0 || station.directionList[i] > 360.0 || std::isnan(station.directionList[i])) { cout<<"failed direction Check on "< 330.00 || CPLIsNan(station.temperatureList[i])) + if(station.temperatureList[i]< 173.15 || station.temperatureList[i] > 330.00 || std::isnan(station.temperatureList[i])) { cout<<"failed temperature Check on "<1.10 || CPLIsNan(station.cloudCoverList[i])) + if(station.cloudCoverList[i]<0.0||station.cloudCoverList[i]>1.10 || std::isnan(station.cloudCoverList[i])) { cout<<"failed cloud check on "< Date: Tue, 18 Nov 2025 11:28:02 -0700 Subject: [PATCH 286/435] Made adjustments to cmake files and class statements to address build errors, for #660 --- CMakeLists.txt | 5 ++++- src/cli/CMakeLists.txt | 9 ++++++++- src/gui/CMakeLists.txt | 1 + src/ninja/CMakeLists.txt | 13 ++++++++++++- src/ninja/KmlVector.cpp | 2 +- src/ninja/WindNinjaInputs.cpp | 2 +- src/ninja/WindNinjaInputs.h | 2 +- 7 files changed, 28 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 790ea9895..6320b5779 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,7 @@ cmake_minimum_required (VERSION 3.16) project(WindNinja) # let cmake figure out how to set the C++ level -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED on) # Needed for FindNetCDF and GET_DATE() @@ -90,6 +90,9 @@ if(USE_VCPKG) find_package(GDAL CONFIG REQUIRED) find_package(netCDF CONFIG REQUIRED) + find_package(Boost REQUIRED COMPONENTS program_options) + + set(GDAL_LIBRARY GDAL::GDAL) set(NETCDF_LIBRARIES_C netCDF::netcdf) else() diff --git a/src/cli/CMakeLists.txt b/src/cli/CMakeLists.txt index 4be4176cf..ac3840c79 100644 --- a/src/cli/CMakeLists.txt +++ b/src/cli/CMakeLists.txt @@ -56,7 +56,14 @@ add_executable(WindNinja_cli cmake_cli.cpp) add_dependencies(WindNinja_cli ninja) -target_link_libraries(WindNinja_cli ${LINK_LIBS}) +target_link_libraries(WindNinja_cli PRIVATE shapelib::shp ${LINK_LIBS}) + +if(MSVC) + target_compile_definitions(WindNinja_cli + PUBLIC + WIN32_LEAN_AND_MEAN + ) +endif() install(TARGETS WindNinja_cli DESTINATION bin COMPONENT apps) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index b80f99d5d..989e2356b 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -49,6 +49,7 @@ target_link_libraries(WindNinja PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets PRIVATE Qt${QT_VERSION_MAJOR}::WebChannel PRIVATE ninja + PRIVATE shapelib::shp ) include(GNUInstallDirs) diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt index fc591b7cb..39b7867b0 100644 --- a/src/ninja/CMakeLists.txt +++ b/src/ninja/CMakeLists.txt @@ -149,7 +149,11 @@ endif(NINJA_GUI) if(WIN32) add_library(ninja STATIC ${NINJA_SOURCES}) add_library(WindNinjadll SHARED ${NINJA_SOURCES}) - target_link_libraries(WindNinjadll ${LINK_LIBS}) + target_link_libraries(WindNinjadll PRIVATE shapelib::shp ${LINK_LIBS}) + target_compile_definitions(WindNinjadll + PUBLIC + WIN32_LEAN_AND_MEAN + ) else() if(APPLE) add_library(ninja STATIC ${NINJA_SOURCES}) @@ -168,6 +172,13 @@ endif(NINJA_GUI) target_compile_definitions(ninja PUBLIC NINJA_GUI) ## needs to be PUBLIC for the cli and the gui to properly find it, for their #ifdef GUI sections +if(MSVC) + target_compile_definitions(ninja + PUBLIC + WIN32_LEAN_AND_MEAN + ) +endif() + target_include_directories(ninja PUBLIC $ $) diff --git a/src/ninja/KmlVector.cpp b/src/ninja/KmlVector.cpp index f8692a786..49b4886ed 100644 --- a/src/ninja/KmlVector.cpp +++ b/src/ninja/KmlVector.cpp @@ -71,7 +71,7 @@ KmlVector::~KmlVector() splitValue = NULL; } - OCTDestroyCoordinateTransformation( coordTransform ); + OCTDestroyCoordinateTransformation( (OGRCoordinateTransformationH)coordTransform ); } void KmlVector::setSpeedGrid(AsciiGrid &s, velocityUnits::eVelocityUnits units) diff --git a/src/ninja/WindNinjaInputs.cpp b/src/ninja/WindNinjaInputs.cpp index 517cc8dd1..b29803eb2 100644 --- a/src/ninja/WindNinjaInputs.cpp +++ b/src/ninja/WindNinjaInputs.cpp @@ -195,7 +195,7 @@ WindNinjaInputs::WindNinjaInputs(const WindNinjaInputs &rhs) * @param rhs WindNinjaInputs object to compare with. * @return true if objects are equal, otherwise false. */ -bool WindNinjaInputs::operator==(const WindNinjaInputs &rhs) +bool WindNinjaInputs::operator==(const WindNinjaInputs &rhs) const { if( inputSpeed == rhs.inputSpeed && inputSpeedUnits == rhs.inputSpeedUnits && diff --git a/src/ninja/WindNinjaInputs.h b/src/ninja/WindNinjaInputs.h index b2efe9043..c887a40c6 100644 --- a/src/ninja/WindNinjaInputs.h +++ b/src/ninja/WindNinjaInputs.h @@ -54,7 +54,7 @@ struct WindNinjaInputs WindNinjaInputs(const WindNinjaInputs &rhs); WindNinjaInputs &operator=(const WindNinjaInputs &rhs); - bool operator==(const WindNinjaInputs &rhs); + bool operator==(const WindNinjaInputs &rhs) const; /*----------------------------------------------------------------------------- From e487ec0f73944eb2c00ef654f91b39b1b87a6aba Mon Sep 17 00:00:00 2001 From: masonwillman <117214223+masonwillman@users.noreply.github.com> Date: Tue, 18 Nov 2025 13:41:24 -0700 Subject: [PATCH 287/435] WIP for installer work, for #660 --- CMakeLists.txt | 68 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 48 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6320b5779..447771103 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -509,7 +509,8 @@ RMDir \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\Tutorials\\\" RMDir \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\Documents\\\" ") # Build the nsis installer on the firelab machine(s). Not for external use. -if(FIRELAB_PACKAGE AND WIN32 AND MSVC AND GIS_INTERNALS_HOME) +if(FIRELAB_PACKAGE AND WIN32 AND MSVC AND USE_VCPKG) + # --- Existing Non-Qt Install Logic --- # Install the CURL_CA_BUNDLE file from the bin folder, and drop it in data/ install(FILES ${GIS_INTERNALS_HOME}/bin/curl/curl-ca-bundle.crt DESTINATION share/windninja COMPONENT apps) @@ -519,34 +520,61 @@ if(FIRELAB_PACKAGE AND WIN32 AND MSVC AND GIS_INTERNALS_HOME) install(PROGRAMS ${dll} DESTINATION bin COMPONENT apps) endforeach(dll ${dlls}) install(PROGRAMS ${GIS_INTERNALS_HOME}/bin/gdal/plugins/gdal_netCDF.dll DESTINATION bin/gdalplugins COMPONENT app) - get_filename_component(qtbin ${QT_QMAKE_EXECUTABLE} DIRECTORY) - string(REGEX REPLACE "\\\\" "/" qtbin "${qtbin}") - if(BUILD_TYPE MATCHES "release") - install(PROGRAMS "${qtbin}/qtgui4.dll" DESTINATION bin COMPONENT apps) - install(PROGRAMS "${qtbin}/qtcore4.dll" DESTINATION bin COMPONENT apps) - install(PROGRAMS "${qtbin}/qtwebkit4.dll" DESTINATION bin COMPONENT apps) - install(PROGRAMS "${qtbin}/phonon4.dll" DESTINATION bin COMPONENT apps) - install(PROGRAMS "${qtbin}/qtnetwork4.dll" DESTINATION bin COMPONENT apps) - install(PROGRAMS "${QT_PLUGINS_DIR}/imageformats/qjpeg4.dll" DESTINATION bin/imageformats) - else(BUILD_TYPE MATCHES "release") - install(PROGRAMS "${qtbin}/qtguid4.dll" DESTINATION bin COMPONENT apps) - install(PROGRAMS "${qtbin}/qtcored4.dll" DESTINATION bin COMPONENT apps) - install(PROGRAMS "${qtbin}/qtwebkitd4.dll" DESTINATION bin COMPONENT apps) - install(PROGRAMS "${qtbin}/phonond4.dll" DESTINATION bin COMPONENT apps) - install(PROGRAMS "${qtbin}/qtnetworkd4.dll" DESTINATION bin COMPONENT apps) - install(PROGRAMS "${QT_PLUGINS_DIR}/imageformats/qjpegd4.dll" DESTINATION bin/imageformats) - endif( BUILD_TYPE MATCHES "release") - # HACK FOR OPENMP + + # --- Start of VCPKG/Qt 6 Install Logic --- + + # 1. Find the Qt 6 libraries + # Adjust components (Gui, Network, Widgets, etc.) to match what your application uses. + find_package(Qt6 REQUIRED COMPONENTS Core Gui Network Widgets) + + # Determine the directory where Qt libraries are installed by vcpkg + # Use a known component (like Qt6::Core) to find the location. + get_target_property(QT_CORE_LOCATION Qt6::Core LOCATION) + get_filename_component(QT_BIN_DIR ${QT_CORE_LOCATION} DIRECTORY) + + # 2. Install Qt 6 Runtime DLLs + # Install the main Qt 6 libraries you are linking against. + # Qt 6 DLL names are generally like Qt6Core.dll, Qt6Gui.dll, etc. + set(QT_LIBS_TO_INSTALL + Qt6Core.dll + Qt6Gui.dll + Qt6Network.dll + Qt6Widgets.dll + # Add other components if needed (e.g., Qt6WebKit.dll, Qt6Svg.dll) + ) + + foreach(qt_lib ${QT_LIBS_TO_INSTALL}) + install(PROGRAMS "${QT_BIN_DIR}/${qt_lib}" DESTINATION bin COMPONENT apps) + endforeach() + + # 3. Install Necessary Plugins (e.g., platforms, imageformats) + # Plugins are critical for Qt applications on Windows. They are typically found + # relative to the bin directory in the vcpkg install root. + get_filename_component(QT_PREFIX_DIR ${QT_BIN_DIR} DIRECTORY) + set(QT_VCPKG_PLUGINS_DIR "${QT_PREFIX_DIR}/plugins") + + # Install the qwindows platform plugin (usually required for GUI apps) + install(PROGRAMS "${QT_VCPKG_PLUGINS_DIR}/platforms/qwindows.dll" + DESTINATION bin/platforms COMPONENT apps) + + # Install the JPEG image format plugin (qjpeg.dll) + install(PROGRAMS "${QT_VCPKG_PLUGINS_DIR}/imageformats/qjpeg.dll" + DESTINATION bin/imageformats COMPONENT apps) + + # --- HACK FOR OPENMP --- + # Leaving the MSVC OpenMP logic as-is, as it was in the original script. if(BUILD_64) install(PROGRAMS ${MSVC_REDIST_DIR}/x64/Microsoft.VC100.OPENMP/vcomp100.dll DESTINATION bin COMPONENT apps) else(BUILD_64) install(PROGRAMS ${MSVC_REDIST_DIR}/x86/Microsoft.VC100.OPENMP/vcomp100.dll DESTINATION bin COMPONENT apps) endif(BUILD_64) + if(NINJAFOAM) install(DIRECTORY "${FOAM_MINGW_PATH}/etc" DESTINATION bin) install(DIRECTORY "${FOAM_MINGW_PATH}/platforms" DESTINATION bin) endif(NINJAFOAM) -endif(FIRELAB_PACKAGE AND WIN32 AND MSVC AND GIS_INTERNALS_HOME) + +endif(FIRELAB_PACKAGE AND WIN32 AND MSVC AND USE_VCPKG) set(CPACK_COMPONENT_APPS_REQUIRED TRUE) set(CPACK_COMPONENT_LIBS_HIDDEN TRUE) set(CPACK_COMPONENT_LIBS_DISABLED TRUE) From 51b974b970ea331658d511606c66bd659e37e17e Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 18 Nov 2025 19:12:05 -0700 Subject: [PATCH 288/435] 1st attempt at making the GUI ninjaError communications be done directly by ninjaCom rather than via thrown error messages, for issue #639, related to issue #666 The first step was to reverse the changes to windninja.cpp from commit 5e73e5cd7c512f8ba2db4f701c5583d990b14a6f, where the error messages were passed to the GUI through the C-API. The second step was to edit ninjaArmy.cpp to use ninjaCom instead of std::cout for each instance of "throw". The third step was to do a bit of cleanup to mainWindow.cpp, to avoid duplicating error messages, which were overwriting the ninjaCom changes to the progressDialog. I also did a bit of cleanup to ninjaCom to make messages a bit cleaner, some of which was stuff that I accidentally dropped from the previous ninjaCom code. when editing ninjaArmy.cpp, it wasn't always clear which ninjaIdx to use for a given ninjaCom message, I tried to always start out using "ninjas[ninjas.size()-1]->ninjaCom()", adjusting to use the corresponding ninjaIdx where needed in a given section of code. The "i" was usually within scope for sections that required "ninjas[i]->ninjaCom()" but not so for all sections, there were also a few places where the "ninjas.size()" wasn't even defined yet. But I'm pretty sure that I got the ninjaIdx correct for the sections that I edited, more consideration should be made for non-solver sections where "return" is used instead of "throw". Note that for instances of "throw" contained in a try/catch statement, a ninjaCom message wasn't required in the "try" part, because it gets taken care of in the "catch" part, don't want to duplicate messages. --- src/gui/mainWindow.cpp | 62 ++++++++++++++++--------------- src/ninja/ninjaArmy.cpp | 81 ++++++++++++++++++++++++----------------- src/ninja/ninjaCom.cpp | 19 ++++++---- src/ninja/windninja.cpp | 9 +---- 4 files changed, 92 insertions(+), 79 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index cacda5914..afddde397 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -211,6 +211,8 @@ void updateProgressCallback(const char *pszMessage, void *pUser) // this still void MainWindow::cancelSolve() { progressDialog->setLabelText("Canceling..."); + //qDebug() << "Canceling..."; + //writeToConsole( "Canceling...", Qt::yellow); char **papszOptions = nullptr; ninjaErr = NinjaCancel(ninjaArmy, papszOptions); @@ -533,6 +535,7 @@ void MainWindow::solveButtonClicked() progressDialog->setValue(0); progressDialog->setLabelText("Running..."); + qDebug() << "Initializing runs..."; writeToConsole( "Initializing runs..." ); connect(futureWatcher, &QFutureWatcher::finished, this, &MainWindow::finishedSolve); @@ -938,7 +941,7 @@ int MainWindow::startSolve(int numProcessors) } catch (cancelledByUser& e) { // I forgot that the cancelSolve() works by doing a throw, I'm surprised that this throw is propagating out of the solver though - qWarning() << "Solver error:" << e.what(); + //qWarning() << "Solver error:" << e.what(); // no message with this error, and it is a known error, // so probably better to update the message in the finished() function, than in QtConcurrent::run() @@ -954,28 +957,28 @@ int MainWindow::startSolve(int numProcessors) } catch (const std::exception &e) { // Store error message somewhere (thread-safe) - qWarning() << "Solver error:" << e.what(); + //qWarning() << "Solver error:" << e.what(); - QString errorMsg = QString::fromStdString(e.what()); // copy out of 'e' before creating the thread safe invokeMethod lambda function - QMetaObject::invokeMethod(this, [this, errorMsg]() { - progressDialog->setLabelText("Simulation ended in error\n"+errorMsg); - progressDialog->setCancelButtonText("Close"); - progressDialog->setValue(this->maxProgress); - writeToConsole("Solver error: "+errorMsg, Qt::red); - }, Qt::QueuedConnection); + //QString errorMsg = QString::fromStdString(e.what()); // copy out of 'e' before creating the thread safe invokeMethod lambda function + //QMetaObject::invokeMethod(this, [this, errorMsg]() { + // progressDialog->setLabelText("Simulation ended in error\n"+errorMsg); + // progressDialog->setCancelButtonText("Close"); + // progressDialog->setValue(this->maxProgress); + // writeToConsole("Solver error: "+errorMsg, Qt::red); + //}, Qt::QueuedConnection); throw; // will propagate to the future } catch (...) { - qWarning() << "unknown solver error"; + //qWarning() << "unknown solver error"; - QMetaObject::invokeMethod(this, [this]() { - progressDialog->setLabelText("Simulation ended with unknown error"); - progressDialog->setCancelButtonText("Close"); - progressDialog->setValue(this->maxProgress); - writeToConsole("unknown solver error", Qt::red); - }, Qt::QueuedConnection); + //QMetaObject::invokeMethod(this, [this]() { + // progressDialog->setLabelText("Simulation ended with unknown error"); + // progressDialog->setCancelButtonText("Close"); + // progressDialog->setValue(this->maxProgress); + // writeToConsole("unknown solver error", Qt::red); + //}, Qt::QueuedConnection); throw; // will propagate to the future @@ -1000,37 +1003,38 @@ void MainWindow::finishedSolve() qDebug() << "Finished with simulations"; writeToConsole("Finished with simulations", Qt::darkGreen); } - ////else if( futureWatcher->isCanceled() ) // this doesn't get triggered as reliably as the QProgressDialog cancel button //else if( result == NINJA_E_CANCELLED ) // this is probably the proper way to do this, but checking progressDialog->wasCanceled() seems way safer else if( progressDialog->wasCanceled() ) // simulation was cancelled { progressDialog->setValue(maxProgress); - progressDialog->setLabelText("Simulation cancelled"); + //progressDialog->setLabelText("Simulation cancelled"); progressDialog->setCancelButtonText("Close"); //progressDialog->close(); - qDebug() << "Simulation cancelled by user"; - //writeToConsole( "Simulation cancelled by user", Qt::orange); // orange isn't a predefined QColor - //writeToConsole( "Simulation cancelled by user", Qt::QColor::fromRgb(255, 165, 0) ); // orange - writeToConsole( "Simulation cancelled by user", Qt::yellow); + //qDebug() << "Simulation cancelled by user"; + ////writeToConsole( "Simulation cancelled by user", Qt::orange); // orange isn't a predefined QColor + ////writeToConsole( "Simulation cancelled by user", Qt::QColor::fromRgb(255, 165, 0) ); // orange + //writeToConsole( "Simulation cancelled by user", Qt::yellow); + } else // simulation ended in some known error { progressDialog->setValue(maxProgress); - progressDialog->setLabelText("Simulation ended in error\nerror: "+QString::number(result)); + //progressDialog->setLabelText("Simulation ended in error\nerror: "+QString::number(result)); progressDialog->setCancelButtonText("Close"); - qWarning() << "Solver error:" << result; - writeToConsole("Solver error: "+QString::number(result), Qt::red); + // should I get rid of these? they seem like they might be helpful + //qWarning() << "Solver error:" << result; + //writeToConsole("Solver error: "+QString::number(result), Qt::red); } } catch (const std::exception &e) { // message got truncated, use the QtConcurrent::run() messaging // ooh, with the thread safe method, things are now updating appropriately - //progressDialog->setValue(maxProgress); + progressDialog->setValue(maxProgress); //progressDialog->setLabelText("Simulation ended in error\n"+QString(e.what())); - //progressDialog->setCancelButtonText("Close"); + progressDialog->setCancelButtonText("Close"); //qWarning() << "Solver error:" << e.what(); //writeToConsole("Solver error: "+QString(e.what()), Qt::red); @@ -1038,9 +1042,9 @@ void MainWindow::finishedSolve() } catch (...) { // message got truncated, use the QtConcurrent::run() messaging - //progressDialog->setValue(maxProgress); + progressDialog->setValue(maxProgress); //progressDialog->setLabelText("Simulation ended with unknown error"); - //progressDialog->setCancelButtonText("Close"); + progressDialog->setCancelButtonText("Close"); //qWarning() << "unknown solver error"; //writeToConsole("unknown solver error", Qt::red); diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 941ff0e52..f47905d04 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -359,6 +359,9 @@ void ninjaArmy::makeWeatherModelArmy(std::string forecastFilename, std::string t if( strstr( forecastFilename.c_str(), ".csv" ) ){ FILE *fcastList = VSIFOpen( forecastFilename.c_str(), "r" ); if(fcastList == NULL){ + //ninjas hasn't been sized yet + //which i to even use for ninjas? + //ninjas[ninjas.size()-1]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Forecast list %s cannot be opened.", forecastFilename.c_str()); throw std::runtime_error(std::string("Forecast list ") + forecastFilename.c_str() + std::string(" cannot be opened.")); } @@ -412,7 +415,8 @@ void ninjaArmy::makeWeatherModelArmy(std::string forecastFilename, std::string t } catch(armyException &e) { - std::cout << "Bad forecast file, exiting" << endl; + //which i to even use for ninjas? + ninjas[ninjas.size()-1]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Bad forecast file, exiting"); throw; } std::vector timeList = model->getTimeList(timeZone); @@ -489,7 +493,8 @@ bool ninjaArmy::startRuns(int numProcessors) } }catch (exception& e) { - std::cout << "Exception caught: " << e.what() << endl; + ninjas[ninjas.size()-1]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + //ninjas[j]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); status = false; throw; } @@ -507,6 +512,7 @@ bool ninjaArmy::startRuns(int numProcessors) CPLSetConfigOption("TEMP", CPLGetDirname(ninjas[0]->input.dem.fileName.c_str())); int status = NinjaFoam::GenerateFoamDirectory(ninjas[0]->input.dem.fileName); if(status != 0){ + ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Error generating the NINJAFOAM directory."); throw std::runtime_error("Error generating the NINJAFOAM directory."); } } @@ -703,23 +709,22 @@ bool ninjaArmy::startRuns(int numProcessors) }catch (bad_alloc& e) { - std::cout << "Exception bad_alloc caught: " << e.what() << endl; - std::cout << "WindNinja appears to have run out of memory." << endl; + ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception bad_alloc caught: %s\nWindNinja appears to have run out of memory.", e.what()); status = false; throw; }catch (cancelledByUser& e) { - std::cout << "Exception caught: " << e.what() << endl; + ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaNone, "Exception caught: %s", e.what()); status = false; throw; }catch (exception& e) { - std::cout << "Exception caught: " << e.what() << endl; + ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); status = false; throw; }catch (...) { - std::cout << "Exception caught: Cannot determine exception type." << endl; + ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); status = false; throw; } @@ -800,21 +805,24 @@ bool ninjaArmy::startRuns(int numProcessors) }catch (bad_alloc& e) { - std::cout << "Exception bad_alloc caught: " << e.what() << endl; - std::cout << "WindNinja appears to have run out of memory." << endl; + ninjas[i]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception bad_alloc caught: %s\nWindNinja appears to have run out of memory.", e.what()); status = false; + throw; }catch (cancelledByUser& e) { - std::cout << "Exception caught: " << e.what() << endl; + ninjas[i]->input.Com->ninjaCom(ninjaComClass::ninjaNone, "Exception caught: %s", e.what()); status = false; + throw; }catch (exception& e) { - std::cout << "Exception caught: " << e.what() << endl; + ninjas[i]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); status = false; + throw; }catch (...) { - std::cout << "Exception caught: Cannot determine exception type." << endl; + ninjas[i]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); status = false; + throw; } } try{ @@ -824,23 +832,22 @@ bool ninjaArmy::startRuns(int numProcessors) }catch (bad_alloc& e) { - std::cout << "Exception bad_alloc caught: " << e.what() << endl; - std::cout << "WindNinja appears to have run out of memory." << endl; + ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception bad_alloc caught: %s\nWindNinja appears to have run out of memory.", e.what()); status = false; throw; }catch (cancelledByUser& e) { - std::cout << "Exception caught: " << e.what() << endl; + ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaNone, "Exception caught: %s", e.what()); status = false; throw; }catch (exception& e) { - std::cout << "Exception caught: " << e.what() << endl; + ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); status = false; throw; }catch (...) { - std::cout << "Exception caught: Cannot determine exception type." << endl; + ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); status = false; throw; } @@ -922,6 +929,7 @@ bool ninjaArmy::startRuns(int numProcessors) }catch (bad_alloc& e) { + ninjas[i]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception bad_alloc caught: %s\nWindNinja appears to have run out of memory.", e.what()); #ifdef _OPENMP anErrors[omp_get_thread_num()] = STD_BAD_ALLOC_EXC; asMessages[omp_get_thread_num()] = "Exception bad_alloc caught:"; @@ -933,6 +941,7 @@ bool ninjaArmy::startRuns(int numProcessors) #endif }catch (logic_error& e) { + ninjas[i]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception logic_error caught: %s", e.what()); #ifdef _OPENMP anErrors[omp_get_thread_num()] = STD_LOGIC_EXC; asMessages[omp_get_thread_num()] = "Exception logic_error caught:"; @@ -944,9 +953,10 @@ bool ninjaArmy::startRuns(int numProcessors) #endif }catch (cancelledByUser& e) { + ninjas[i]->input.Com->ninjaCom(ninjaComClass::ninjaNone, "Exception canceled by user caught: %s", e.what()); #ifdef _OPENMP anErrors[omp_get_thread_num()] = NINJA_CANCEL_USER_EXC; - asMessages[omp_get_thread_num()] = "Exception cacneled by user caught:"; + asMessages[omp_get_thread_num()] = "Exception canceled by user caught:"; asMessages[omp_get_thread_num()] + e.what(); asMessages[omp_get_thread_num()] += "\n"; status = false; @@ -955,6 +965,7 @@ bool ninjaArmy::startRuns(int numProcessors) #endif }catch (badForecastFile& e) { + ninjas[i]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception badForecastFile caught: %s", e.what()); #ifdef _OPENMP anErrors[omp_get_thread_num()] = NINJA_BAD_FORECAST_EXC; asMessages[omp_get_thread_num()] = "Exception badForecastFile caught:"; @@ -966,6 +977,7 @@ bool ninjaArmy::startRuns(int numProcessors) #endif }catch (exception& e) { + ninjas[i]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); #ifdef _OPENMP anErrors[omp_get_thread_num()] = STD_EXC; asMessages[omp_get_thread_num()] = "Exception caught:"; @@ -977,6 +989,7 @@ bool ninjaArmy::startRuns(int numProcessors) #endif }catch (...) { + ninjas[i]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); #ifdef _OPENMP anErrors[omp_get_thread_num()] = STD_UNKNOWN_EXC; asMessages[omp_get_thread_num()] = "Unknown Exception caught:"; @@ -997,23 +1010,22 @@ bool ninjaArmy::startRuns(int numProcessors) }catch (bad_alloc& e) { - std::cout << "Exception bad_alloc caught: " << e.what() << endl; - std::cout << "WindNinja appears to have run out of memory." << endl; + ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception bad_alloc caught: %s\nWindNinja appears to have run out of memory.", e.what()); status = false; throw; }catch (cancelledByUser& e) { - std::cout << "Exception caught: " << e.what() << endl; + ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaNone, "Exception caught: %s", e.what()); status = false; throw; }catch (exception& e) { - std::cout << "Exception caught: " << e.what() << endl; + ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); status = false; throw; }catch (...) { - std::cout << "Exception caught: Cannot determine exception type." << endl; + ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); status = false; throw; } @@ -1164,23 +1176,22 @@ bool ninjaArmy::startRuns(int numProcessors) } }catch (bad_alloc& e) { - std::cout << "Exception bad_alloc caught: " << e.what() << endl; - std::cout << "WindNinja appears to have run out of memory." << endl; + ninjas[ninjas.size()-1]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception bad_alloc caught: %s\nWindNinja appears to have run out of memory.", e.what()); status = false; throw; }catch (cancelledByUser& e) { - std::cout << "Exception caught: " << e.what() << endl; + ninjas[ninjas.size()-1]->input.Com->ninjaCom(ninjaComClass::ninjaNone, "Exception caught: %s", e.what()); status = false; throw; }catch (exception& e) { - std::cout << "Exception caught: " << e.what() << endl; + ninjas[ninjas.size()-1]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); status = false; throw; }catch (...) { - std::cout << "Exception caught: Cannot determine exception type." << endl; + ninjas[ninjas.size()-1]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); status = false; throw; } @@ -1215,26 +1226,25 @@ bool ninjaArmy::startFirstRun() } catch (bad_alloc& e) { - std::cout << "Exception bad_alloc caught: " << e.what() << endl; - std::cout << "WindNinja appears to have run out of memory." << endl; + ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception bad_alloc caught: %s\nWindNinja appears to have run out of memory.", e.what()); status = false; throw; } catch (cancelledByUser& e) { - std::cout << "Exception caught: " << e.what() << endl; + ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaNone, "Exception caught: %s", e.what()); status = false; throw; } catch (exception& e) { - std::cout << "Exception caught: " << e.what() << endl; + ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); status = false; throw; } catch (...) { - std::cout << "Exception caught: Cannot determine exception type." << endl; + ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); status = false; throw; } @@ -1264,9 +1274,12 @@ void ninjaArmy::writeFarsiteAtmosphereFile() std::string fileroot( CPLGetBasename(ninjas[0]->get_VelFileName().c_str()) ); int stringPos = fileroot.find_last_of('_'); if(stringPos > 0) + { fileroot.erase(stringPos); - else + } else + { throw std::runtime_error("Problem writing FARSITE atmosphere file. The ninja ASCII velocity filename appears to be malformed."); + } //Form atm filename std::string filename( CPLFormFilename(filePath.c_str(), fileroot.c_str(), "atm") ); diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index fa7d834c7..b2116c03a 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -174,12 +174,12 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - sprintf( msg, "Run %d: More than %d errors have been reported. ", + sprintf( msg, "Run %d: More than %d errors have been reported. " "No more will be reported from now on.\n", *runNumber, nMaxErrors ); } else { - sprintf( msg, "More than %d errors have been reported. ", + sprintf( msg, "More than %d errors have been reported. " "No more will be reported from now on.\n", nMaxErrors ); } @@ -303,12 +303,13 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - sprintf( msg, "\nRun %d (warning): %s\n", *runNumber, ninjaComMsg); + sprintf( msg, "Run %d (warning): %s\n", *runNumber, ninjaComMsg); } else { - sprintf( msg, "\nWarning: %s\n", ninjaComMsg); + sprintf( msg, "Warning: %s\n", ninjaComMsg); } + //fprintf(fpLog, "\n%s", msg); fprintf(fpLog, "%s", msg); if( multiStream != NULL ) @@ -325,12 +326,13 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - sprintf( msg, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + sprintf( msg, "Run %d (ERROR): %s\n", *runNumber, ninjaComMsg); } else { - sprintf( msg, "\nERROR: %s\n", ninjaComMsg); + sprintf( msg, "ERROR: %s\n", ninjaComMsg); } + //fprintf(fpErr, "\n%s", msg); fprintf(fpErr, "%s", msg); if( multiStream != NULL ) @@ -348,12 +350,13 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - sprintf( msg, "\nRun %d (ERROR): %s\n", *runNumber, ninjaComMsg); + sprintf( msg, "Run %d (ERROR): %s\n", *runNumber, ninjaComMsg); } else { - sprintf( msg, "\nERROR: %s\n", ninjaComMsg); + sprintf( msg, "ERROR: %s\n", ninjaComMsg); } + //fprintf(fpErr, "\n%s", msg); fprintf(fpErr, "%s", msg); if( multiStream != NULL ) diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index b89e0096c..eb35388fa 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -665,16 +665,9 @@ WINDNINJADLL_EXPORT NinjaErr NinjaStartRuns { return reinterpret_cast( army )->startRuns( nprocessors ); } - catch (exception& e) - { - std::cout << "Exception caught: " << e.what() << endl; - throw; - } catch( ... ) { - std::cout << "Exception caught: Cannot determine exception type." << endl; -// return handleException(); - throw; + return handleException(); } } else From 5f81f27aafe3bee568a23abcfd35470482157812 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 18 Nov 2025 20:12:42 -0700 Subject: [PATCH 289/435] cleanup of the ninjaError GUI communications, from commit 51b974b970ea331658d511606c66bd659e37e17e, for issue #639, related to issue #666 turns out that reversing the changes to windninja.cpp from commit 5e73e5cd7c512f8ba2db4f701c5583d990b14a6f, made it possible to get rid of the try/catch statements that wrapped around the C-API functions called in the startSolve() and finishedSolve() QFutureWatcher style functions called in the GUI, greatly simplifying error handling in the GUI. --- src/gui/mainWindow.cpp | 141 ++++++++--------------------------------- 1 file changed, 28 insertions(+), 113 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index afddde397..109c71f18 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -923,131 +923,46 @@ OutputMeshResolution MainWindow::getMeshResolution( int MainWindow::startSolve(int numProcessors) { - try { - - char **papszOptions = nullptr; // found that I could pass this in as an argument after all, but makes more sense to just define it here - - //// calling prepareArmy here is causing all kinds of troubles. Local variables aren't properly being passed on, - //// or aren't properly copied ([=] type thing), or aren't properly in scope. The other values are .h variables, - //// so they would at least be in the proper scope. But the out of scope variables leads to all kinds - //// of "QObject::connect: Cannot connect" and "ninjaErr = 2" type messages. It is still somehow continuing to run though. - //// - //// seems the only way to put prepareArmy into a QFutureWatcher function, if it would even work, - //// would be to have two separate QFutureWatcher functions, needs to be separated out from NinjaStartRuns() - ////prepareArmy(ninjaArmy, ui->numberOfProcessorsSpinBox->value(), initializationMethod); - - return NinjaStartRuns(ninjaArmy, ui->numberOfProcessorsSpinBox->value(), papszOptions); // huh? I guess because "this" was used, it still has access to numNinjas this way - //return NinjaStartRuns(ninjaArmy, numProcessors, papszOptions); - - } catch (cancelledByUser& e) { // I forgot that the cancelSolve() works by doing a throw, I'm surprised that this throw is propagating out of the solver though - - //qWarning() << "Solver error:" << e.what(); - - // no message with this error, and it is a known error, - // so probably better to update the message in the finished() function, than in QtConcurrent::run() - //QMetaObject::invokeMethod(this, [this]() { - // progressDialog->setLabelText("Simulation cancelled by user"); - // progressDialog->setCancelButtonText("Close"); - // progressDialog->setValue(this->maxProgress); - // writeToConsole( "Simulation cancelled by user", Qt::yellow); - //}, Qt::QueuedConnection); - - ////throw; // will propagate to the future. We purposefully want to skip passing it on for this case, use the QFutureWatcher->future()->result() value instead. However, the return/result value was 0, not the NINJA_E_CANCELLED value of 7. Hrm. - return NINJA_E_CANCELLED; // turns out NinjaStartRuns() simply didn't return a value because cancelSolve() runs by triggering a throw before a return value can be given. So just have to return the appropriate value here. - - } catch (const std::exception &e) { // Store error message somewhere (thread-safe) - - //qWarning() << "Solver error:" << e.what(); - - //QString errorMsg = QString::fromStdString(e.what()); // copy out of 'e' before creating the thread safe invokeMethod lambda function - //QMetaObject::invokeMethod(this, [this, errorMsg]() { - // progressDialog->setLabelText("Simulation ended in error\n"+errorMsg); - // progressDialog->setCancelButtonText("Close"); - // progressDialog->setValue(this->maxProgress); - // writeToConsole("Solver error: "+errorMsg, Qt::red); - //}, Qt::QueuedConnection); - - throw; // will propagate to the future - - } catch (...) { - - //qWarning() << "unknown solver error"; - - //QMetaObject::invokeMethod(this, [this]() { - // progressDialog->setLabelText("Simulation ended with unknown error"); - // progressDialog->setCancelButtonText("Close"); - // progressDialog->setValue(this->maxProgress); - // writeToConsole("unknown solver error", Qt::red); - //}, Qt::QueuedConnection); - - throw; // will propagate to the future - - } + char **papszOptions = nullptr; + return NinjaStartRuns(ninjaArmy, ui->numberOfProcessorsSpinBox->value(), papszOptions); } void MainWindow::finishedSolve() { - try { - - // get the return value of the QtConcurrent::run() function - // Note that if an error was thrown during QtConcurrent::run(), this throws instead - // but the thrown error comes out truncated, it loses the details of the original error message - int result = futureWatcher->future().result(); - - if( result == 1 ) // simulation properly finished - { - progressDialog->setValue(maxProgress); - progressDialog->setLabelText("Simulations finished"); - progressDialog->setCancelButtonText("Close"); - - qDebug() << "Finished with simulations"; - writeToConsole("Finished with simulations", Qt::darkGreen); - } - //else if( result == NINJA_E_CANCELLED ) // this is probably the proper way to do this, but checking progressDialog->wasCanceled() seems way safer - else if( progressDialog->wasCanceled() ) // simulation was cancelled - { - progressDialog->setValue(maxProgress); - //progressDialog->setLabelText("Simulation cancelled"); - progressDialog->setCancelButtonText("Close"); - //progressDialog->close(); - - //qDebug() << "Simulation cancelled by user"; - ////writeToConsole( "Simulation cancelled by user", Qt::orange); // orange isn't a predefined QColor - ////writeToConsole( "Simulation cancelled by user", Qt::QColor::fromRgb(255, 165, 0) ); // orange - //writeToConsole( "Simulation cancelled by user", Qt::yellow); - - } - else // simulation ended in some known error - { - progressDialog->setValue(maxProgress); - //progressDialog->setLabelText("Simulation ended in error\nerror: "+QString::number(result)); - progressDialog->setCancelButtonText("Close"); - - // should I get rid of these? they seem like they might be helpful - //qWarning() << "Solver error:" << result; - //writeToConsole("Solver error: "+QString::number(result), Qt::red); - } + // get the return value of the QtConcurrent::run() function + // Note that if an error was thrown during QtConcurrent::run(), this throws instead + // but the thrown error comes out truncated, it loses the details of the original error message + int result = futureWatcher->future().result(); - } catch (const std::exception &e) { - - // message got truncated, use the QtConcurrent::run() messaging - // ooh, with the thread safe method, things are now updating appropriately + // ninjaCom handles most of the progress dialog, cli, and console window messaging now + if( result == 1 ) // simulation properly finished + { progressDialog->setValue(maxProgress); - //progressDialog->setLabelText("Simulation ended in error\n"+QString(e.what())); + progressDialog->setLabelText("Simulations finished"); progressDialog->setCancelButtonText("Close"); - //qWarning() << "Solver error:" << e.what(); - //writeToConsole("Solver error: "+QString(e.what()), Qt::red); - - } catch (...) { + qDebug() << "Finished with simulations"; + writeToConsole("Finished with simulations", Qt::darkGreen); + } + //else if( result == NINJA_E_CANCELLED ) // this is probably the proper way to do this, but checking progressDialog->wasCanceled() seems way safer + else if( progressDialog->wasCanceled() ) // simulation was cancelled + { + progressDialog->setValue(maxProgress); + //progressDialog->setLabelText("Simulation cancelled"); + progressDialog->setCancelButtonText("Close"); + //progressDialog->close(); - // message got truncated, use the QtConcurrent::run() messaging + //qDebug() << "Simulation cancelled by user"; + //writeToConsole( "Simulation cancelled by user", Qt::yellow); + } + else // simulation ended in some known error + { progressDialog->setValue(maxProgress); - //progressDialog->setLabelText("Simulation ended with unknown error"); + //progressDialog->setLabelText("Simulation ended in error\nerror: "+QString::number(result)); progressDialog->setCancelButtonText("Close"); - //qWarning() << "unknown solver error"; - //writeToConsole("unknown solver error", Qt::red); + //qWarning() << "Solver error:" << result; + //writeToConsole("Solver error: "+QString::number(result), Qt::red); } disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); From eede34d95e0216dc0acd44a86a8f8a398c4e2a04 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 19 Nov 2025 17:14:31 -0700 Subject: [PATCH 290/435] more cleanup of the ninjaError GUI communications, including a section in ninjaArmy.cpp to make it easier to keep the specific ninjaIdx ("ninjas[j]->ninjaCom") in scope. For issue #639, related to issue #666 --- src/gui/mainWindow.cpp | 13 +------------ src/ninja/ninjaArmy.cpp | 25 +++++++++++-------------- src/ninja/ninjaCom.cpp | 3 --- 3 files changed, 12 insertions(+), 29 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 109c71f18..a6e098fed 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -930,8 +930,6 @@ int MainWindow::startSolve(int numProcessors) void MainWindow::finishedSolve() { // get the return value of the QtConcurrent::run() function - // Note that if an error was thrown during QtConcurrent::run(), this throws instead - // but the thrown error comes out truncated, it loses the details of the original error message int result = futureWatcher->future().result(); // ninjaCom handles most of the progress dialog, cli, and console window messaging now @@ -944,25 +942,16 @@ void MainWindow::finishedSolve() qDebug() << "Finished with simulations"; writeToConsole("Finished with simulations", Qt::darkGreen); } - //else if( result == NINJA_E_CANCELLED ) // this is probably the proper way to do this, but checking progressDialog->wasCanceled() seems way safer + //else if( result == NINJA_E_CANCELLED ) // the proper way to do this, but checking progressDialog->wasCanceled() seems way safer else if( progressDialog->wasCanceled() ) // simulation was cancelled { progressDialog->setValue(maxProgress); - //progressDialog->setLabelText("Simulation cancelled"); progressDialog->setCancelButtonText("Close"); - //progressDialog->close(); - - //qDebug() << "Simulation cancelled by user"; - //writeToConsole( "Simulation cancelled by user", Qt::yellow); } else // simulation ended in some known error { progressDialog->setValue(maxProgress); - //progressDialog->setLabelText("Simulation ended in error\nerror: "+QString::number(result)); progressDialog->setCancelButtonText("Close"); - - //qWarning() << "Solver error:" << result; - //writeToConsole("Solver error: "+QString::number(result), Qt::red); } disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index f47905d04..d1b9b33af 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -480,23 +480,20 @@ bool ninjaArmy::startRuns(int numProcessors) //check for duplicate runs before we start the simulations //this is mostly for batch domain avg runs in the GUI and the API - try{ - if(ninjas.size() > 1){ - for(unsigned int i=0; iinput == ninjas[j]->input && - ninjas[i]->get_initializationMethod() == WindNinjaInputs::domainAverageInitializationFlag){ - throw std::runtime_error("Multiple runs were requested with the same input parameters."); - } + if(ninjas.size() > 1) + { + for(unsigned int i=0; iinput == ninjas[j]->input && ninjas[i]->get_initializationMethod() == WindNinjaInputs::domainAverageInitializationFlag) + { + ninjas[j]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Multiple runs were requested with the same input parameters."); + status = false; + throw std::runtime_error("Multiple runs were requested with the same input parameters."); } } } - }catch (exception& e) - { - ninjas[ninjas.size()-1]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); - //ninjas[j]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); - status = false; - throw; } #ifdef NINJAFOAM diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index b2116c03a..2a3fd469f 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -309,7 +309,6 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) sprintf( msg, "Warning: %s\n", ninjaComMsg); } - //fprintf(fpLog, "\n%s", msg); fprintf(fpLog, "%s", msg); if( multiStream != NULL ) @@ -332,7 +331,6 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) sprintf( msg, "ERROR: %s\n", ninjaComMsg); } - //fprintf(fpErr, "\n%s", msg); fprintf(fpErr, "%s", msg); if( multiStream != NULL ) @@ -356,7 +354,6 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) sprintf( msg, "ERROR: %s\n", ninjaComMsg); } - //fprintf(fpErr, "\n%s", msg); fprintf(fpErr, "%s", msg); if( multiStream != NULL ) From a441b6b3824e9d1279601483ce79fd3e252eeda9 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 19 Nov 2025 17:15:45 -0700 Subject: [PATCH 291/435] an attempt to parse the ninjaCom GUI communications by type into cleaner messages. For issue #639, related to issue #666 --- src/gui/mainWindow.cpp | 89 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 85 insertions(+), 4 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index a6e098fed..4b5ac7faa 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -198,14 +198,95 @@ void updateProgressCallback(const char *pszMessage, void *pUser) // this still msg = msg.substr(0, msg.size()-1); } - int runNumber; + int runNumber = -1; + sscanf(msg.c_str(), "Run %d", &runNumber); + + size_t pos; + size_t startPos; + size_t endPos; + std::string clipStr; + int runProgress; - if( sscanf(msg.c_str(), "Run %d (solver): %d%% complete", &runNumber, &runProgress) == 2 ) + endPos = msg.find("% complete"); + if( endPos != msg.npos ) { + clipStr = msg.substr(0, endPos); + //std::cout << "clipStr = \"" << clipStr << "\"" << std::endl; + pos = clipStr.rfind(": "); + startPos = pos+2; + clipStr = clipStr.substr(startPos); + //std::cout << "clipStr = \"" << clipStr << "\"" << std::endl; + runProgress = atoi(clipStr.c_str()); + emit self->updateProgressValueSignal(runNumber, runProgress); } - emit self->updateProgressMessageSignal(QString::fromStdString(msg)); - emit self->writeToConsoleSignal(QString::fromStdString(msg)); + +//"Run 1 (ERROR): Multiple runs were requested with the same input parameters." +//"Run 0 (ERROR): Exception caught: I WANT CHOCOLATE!!! Yum." +//"Run 0: Exception caught: Simulation was cancelled by the user." + + if( msg.find("Exception caught: ") != msg.npos || msg.find("(ERROR): ") != msg.npos || msg.find("ERROR: ") != msg.npos ) + { + if( msg.find("Exception caught: ") != msg.npos ) + { + pos = msg.find("Exception caught: "); + startPos = pos+18; + } + else if( msg.find("(ERROR): ") != msg.npos ) + { + pos = msg.find("(ERROR): "); + startPos = pos+9; + } + else // if( msg.find("ERROR: ") != msg.npos ) + { + pos = msg.find("ERROR: "); + startPos = pos+7; + } + clipStr = msg.substr(startPos); + //std::cout << "clipStr = \"" << clipStr << "\"" << std::endl; + //emit self->updateProgressMessageSignal(QString::fromStdString(clipStr)); + //emit self->writeToConsoleSignal(QString::fromStdString(clipStr)); + if( clipStr == "Simulation was cancelled by the user." ) + { + emit self->updateProgressMessageSignal(QString::fromStdString("Simulation cancelled")); + emit self->writeToConsoleSignal(QString::fromStdString("Simulation cancelled by user"), Qt::yellow); + } + else if( clipStr == "Cannot determine exception type." ) + { + emit self->updateProgressMessageSignal(QString::fromStdString("Simulation ended with unknown error")); + emit self->writeToConsoleSignal(QString::fromStdString("unknown solver error"), Qt::red); + } + else + { + emit self->updateProgressMessageSignal(QString::fromStdString("Simulation ended in error:\n"+clipStr)); + emit self->writeToConsoleSignal(QString::fromStdString("Solver error: "+clipStr), Qt::red); + } + } + else if( msg.find("(warning): ") != msg.npos || msg.find("Warning: ") != msg.npos ) + { + if( msg.find("(warning): ") != msg.npos ) + { + pos = msg.find("(warning): "); + startPos = pos+11; + } + if( msg.find("Warning: ") != msg.npos ) + { + pos = msg.find("Warning: "); + startPos = pos+9; + } + clipStr = msg.substr(startPos); + //std::cout << "clipStr = \"" << clipStr << "\"" << std::endl; + //emit self->updateProgressMessageSignal(QString::fromStdString(clipStr)); + //emit self->writeToConsoleSignal(QString::fromStdString(clipStr)); + emit self->updateProgressMessageSignal(QString::fromStdString("Solver ended in warning:\n"+clipStr)); + emit self->writeToConsoleSignal(QString::fromStdString("Solver warning: "+clipStr), Qt::yellow); + } + else + { + emit self->updateProgressMessageSignal(QString::fromStdString(msg)); + emit self->writeToConsoleSignal(QString::fromStdString(msg)); + } + } void MainWindow::cancelSolve() From c2c180b0b6c9e1871f58e249b4cae6945af2507a Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 21 Nov 2025 15:16:18 -0700 Subject: [PATCH 292/435] redoing commit of: first attempt at extending the ninjaCom error handling GUI communications, from the solver to other C-API function calls, specifically to the prepareOutput() and setOutputFlags() functions, for issue #639, related to issue #666 this involved figuring out the flow to trigger a "cancelSolve" and to check for a "cancelledSolve" for subsequent function calls. I also had to add ninjaCom messaging and a "catch( exception& e )" to the "#define IF_VALID_INDEX_TRY" ninjaArmy wrapper, to successfully capture and send messages for many of the C-API functions I was testing. I also had to swap back and forth between "#ifdef C_API" and "#ifndef C_API", try/catch vs error code only, forms of the ninjaArmy "#define IF_VALID_INDEX_TRY" function to get many of the C-API functions to work; I think that the try/catch form is the more correct form for the ninjaArmy "#define IF_VALID_INDEX_TRY" function I kept each of the C-API tests that I tried in the GUI prepareArmy() and setOutputFlags() code, with comments where a given test still had something to work out. I think most of the problems will go away once we normalize the error handling methods in ninjaArmy.cpp, but there were also a few quirks related to ninjaArmy.cpp functions that don't call ninja.cpp functions, or C-API functions that call non-ninjaArmy.cpp functions directly. All in all though, I am quite happy that I was able to get all these various tests to work, to successfully stop the solver and not just print messages, with proper cleanup upon cancelling the solver from an error. Might be good to use ninjaErr instead of bool for passing the "cancelledSolve" info around, by splitting up the "finishedSolve()" function into the reusable cleanup part, vs the QFutureWatcher part, we will just have to see what this evolves into with time. I was also happy we didn't need to divert ninjaCom communications into a separate QMessageBox for this section of the code, though there will likely need to be updates in how the progressFunction is named and shared across parts of the GUI code. --- src/gui/mainWindow.cpp | 142 ++++++++++++++++++++++++++++++++++++---- src/gui/mainWindow.h | 4 +- src/ninja/ninjaArmy.cpp | 67 +++++++++++++++---- src/ninja/ninjaArmy.h | 22 ++++++- src/ninja/windninja.cpp | 11 +++- 5 files changed, 218 insertions(+), 28 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 4b5ac7faa..892702768 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -610,7 +610,30 @@ void MainWindow::solveButtonClicked() progressDialog->show(); - prepareArmy(ninjaArmy, numNinjas, initializationMethod); + bool retVal = prepareArmy(ninjaArmy, numNinjas, initializationMethod); + if( retVal == false ) + { + progressDialog->setValue(maxProgress); + progressDialog->setCancelButtonText("Close"); + + // do cleanup before the return, similar to finishedSolve() + + disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); + + char **papszOptions = nullptr; + int ninjaErr = NinjaDestroyArmy(ninjaArmy, papszOptions); + if(ninjaErr != NINJA_SUCCESS) + { + printf("NinjaDestroyRuns: ninjaErr = %d\n", ninjaErr); + } + + // clear the progress values for the next set of runs + runProgress.clear(); + + futureWatcher->deleteLater(); + + return; + } // set progress dialog initial value and initial text for the set of runs progressDialog->setValue(0); @@ -708,7 +731,7 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) } } -void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* initializationMethod) +bool MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* initializationMethod) { OutputMeshResolution googleEarth = getMeshResolution( ui->googleEarthMeshResolutionGroupBox->isChecked(), @@ -755,12 +778,6 @@ void MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i } char **papszOptions = nullptr; - ninjaErr = NinjaSetAsciiAtmFile(ninjaArmy, ui->fireBehaviorResolutionCheckBox->isChecked(), papszOptions); - if(ninjaErr != NINJA_SUCCESS) - { - qDebug() << "NinjaSetAsciiAtmFile: ninjaErr =" << ninjaErr; - } - for(unsigned int i=0; ioutputDirectoryLineEdit->text().toUtf8().constData(), ui->outputSpeedUnitsComboBox->currentText().toUtf8().constData(), papszOptions); + //ninjaErr = NinjaSetStationKML(ninjaArmy, i+10, ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8().constData(), ui->outputDirectoryLineEdit->text().toUtf8().constData(), ui->outputSpeedUnitsComboBox->currentText().toUtf8().constData(), papszOptions); // test error handling // function needs reorganized to handle this test + //ninjaErr = NinjaSetStationKML(ninjaArmy, i, ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8().constData(), ui->outputDirectoryLineEdit->text().toUtf8().constData(), "fudge", papszOptions); // test error handling // ran, but the functions need reorganized for proper messaging + //ninjaErr = NinjaSetStationKML(ninjaArmy, i, ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8().constData(), "fudge", ui->outputSpeedUnitsComboBox->currentText().toUtf8().constData(), papszOptions); // test error handling // function needs reorganized to handle this test + //ninjaErr = NinjaSetStationKML(ninjaArmy, i, "fudge", ui->outputDirectoryLineEdit->text().toUtf8().constData(), ui->outputSpeedUnitsComboBox->currentText().toUtf8().constData(), papszOptions); // test error handling // function needs reorganized to handle this test if(ninjaErr != NINJA_SUCCESS) { printf("NinjaSetStationKML: ninjaErr = %d\n", ninjaErr); + return false; } } } ninjaErr = NinjaSetNumberCPUs(ninjaArmy, i, ui->numberOfProcessorsSpinBox->value(), papszOptions); + //ninjaErr = NinjaSetNumberCPUs(ninjaArmy, i+10, ui->numberOfProcessorsSpinBox->value(), papszOptions); // test error handling + //ninjaErr = NinjaSetNumberCPUs(ninjaArmy, i, -1, papszOptions); // test error handling // requires the try/catch form of IF_VALID_INDEX_TRY in ninjaArmy.h if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetNumberCPUs: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetInitializationMethod(ninjaArmy, i, initializationMethod, ui->pointInitializationGroupBox->isChecked(), papszOptions); + //ninjaErr = NinjaSetInitializationMethod(ninjaArmy, i+10, initializationMethod, ui->pointInitializationGroupBox->isChecked(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaSetInitializationMethod(ninjaArmy, i, "fudge", ui->pointInitializationGroupBox->isChecked(), papszOptions); // test error handling if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetInitializationMethod: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetDem(ninjaArmy, i, ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8().constData(), papszOptions); + //ninjaErr = NinjaSetDem(ninjaArmy, i+10, ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8().constData(), papszOptions); + //ninjaErr = NinjaSetDem(ninjaArmy, i, "fudge", papszOptions); // test error handling // requires the try/catch form of IF_VALID_INDEX_TRY in ninjaArmy.h if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetDem: ninjaErr =" << ninjaErr; + return false; } - ninjaErr = NinjaSetPosition(ninjaArmy, i, papszOptions); + ninjaErr = NinjaSetPosition(ninjaArmy, i, papszOptions); // if setting up ninja.cpp function call to simply throw, this breaks, this requires the try/catch form of IF_VALID_INDEX_TRY in ninjaArmy.h + //ninjaErr = NinjaSetPosition(ninjaArmy, i+10, papszOptions); // test error handling if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetPosition: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetInputWindHeight(ninjaArmy, i, ui->inputWindHeightSpinBox->value(), "m", papszOptions); + //ninjaErr = NinjaSetInputWindHeight(ninjaArmy, i+10, ui->inputWindHeightSpinBox->value(), "m", papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaSetInputWindHeight(ninjaArmy, i, ui->inputWindHeightSpinBox->value(), "fudge", papszOptions); // test error handling + //ninjaErr = NinjaSetInputWindHeight(ninjaArmy, i, -1, "m", papszOptions); // test error handling if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetInputWindHeight: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetDiurnalWinds(ninjaArmy, i, ui->diurnalCheckBox->isChecked(), papszOptions); + //ninjaErr = NinjaSetDiurnalWinds(ninjaArmy, i+10, ui->diurnalCheckBox->isChecked(), papszOptions); // test error handling if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetDiurnalWinds: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetUniVegetation(ninjaArmy, i, ui->vegetationComboBox->currentText().toLower().toUtf8().constData(), papszOptions); + //ninjaErr = NinjaSetUniVegetation(ninjaArmy, i+10, ui->vegetationComboBox->currentText().toLower().toUtf8().constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaSetUniVegetation(ninjaArmy, i, "fudge", papszOptions); // test error handling if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetUniVegetation: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetMeshResolutionChoice(ninjaArmy, i, ui->meshResolutionComboBox->currentText().toLower().toUtf8().constData(), papszOptions); + //ninjaErr = NinjaSetMeshResolutionChoice(ninjaArmy, i+10, ui->meshResolutionComboBox->currentText().toLower().toUtf8().constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaSetMeshResolutionChoice(ninjaArmy, i, "fudge", papszOptions); // test error handling if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetMeshResolutionChoice: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetNumVertLayers(ninjaArmy, i, 20, papszOptions); + //ninjaErr = NinjaSetNumVertLayers(ninjaArmy, i+10, 20, papszOptions); // test error handling + //ninjaErr = NinjaSetNumVertLayers(ninjaArmy, i, -1, papszOptions); // test error handling // requires the try/catch form of IF_VALID_INDEX_TRY in ninjaArmy.h if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetNumVertLayers: ninjaErr =" << ninjaErr; + return false; } - setOutputFlags(ninjaArmy, i, numNinjas, googleEarth, fireBehavior, shapeFiles, geospatialPDFs, PDFSize); + bool retVal = setOutputFlags(ninjaArmy, i, numNinjas, googleEarth, fireBehavior, shapeFiles, geospatialPDFs, PDFSize); + if( retVal == false ) + { + return false; + } } + + return true; } -void MainWindow::setOutputFlags(NinjaArmyH* ninjaArmy, +bool MainWindow::setOutputFlags(NinjaArmyH* ninjaArmy, int i, int numNinjas, OutputMeshResolution googleEarth, @@ -861,124 +927,178 @@ void MainWindow::setOutputFlags(NinjaArmyH* ninjaArmy, int ninjaErr; ninjaErr = NinjaSetOutputPath(ninjaArmy, i, ui->outputDirectoryLineEdit->text().toUtf8().constData(), papszOptions); + //ninjaErr = NinjaSetOutputPath(ninjaArmy, i+10, ui->outputDirectoryLineEdit->text().toUtf8().constData(), papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetOutputPath: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetOutputWindHeight(ninjaArmy, i, ui->outputWindHeightSpinBox->value(), ui->outputWindHeightUnitsComboBox->itemData(ui->outputWindHeightUnitsComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); + //ninjaErr = NinjaSetOutputWindHeight(ninjaArmy, i+10, ui->outputWindHeightSpinBox->value(), ui->outputWindHeightUnitsComboBox->itemData(ui->outputWindHeightUnitsComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaSetOutputWindHeight(ninjaArmy, i, ui->outputWindHeightSpinBox->value(), "fudge", papszOptions); // test error handling + //ninjaErr = NinjaSetOutputWindHeight(ninjaArmy, i, -1, ui->outputWindHeightUnitsComboBox->itemData(ui->outputWindHeightUnitsComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetOutputWindHeight: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetOutputSpeedUnits(ninjaArmy, i, ui->outputSpeedUnitsComboBox->currentText().toUtf8().constData(), papszOptions); + //ninjaErr = NinjaSetOutputSpeedUnits(ninjaArmy, i+10, ui->outputSpeedUnitsComboBox->currentText().toUtf8().constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaSetOutputSpeedUnits(ninjaArmy, i, "fudge", papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetOutputSpeedUnits: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetGoogOutFlag(ninjaArmy, i, ui->googleEarthGroupBox->isChecked(), papszOptions); + //ninjaErr = NinjaSetGoogOutFlag(ninjaArmy, i+10, ui->googleEarthGroupBox->isChecked(), papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetGoogOutFlag: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetGoogResolution(ninjaArmy, i, googleEarth.resolution, googleEarth.units.constData(), papszOptions); + //ninjaErr = NinjaSetGoogResolution(ninjaArmy, i+10, googleEarth.resolution, googleEarth.units.constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaSetGoogResolution(ninjaArmy, i, googleEarth.resolution, "fudge", papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetGoogResolution: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetGoogSpeedScaling(ninjaArmy, i, ui->legendComboBox->itemData(ui->legendComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); + //ninjaErr = NinjaSetGoogSpeedScaling(ninjaArmy, i+10, ui->legendComboBox->itemData(ui->legendComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaSetGoogSpeedScaling(ninjaArmy, i, "fudge", papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetGoogSpeedScaling: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetGoogLineWidth(ninjaArmy, i, ui->googleEarthVectorsSpinBox->value(), papszOptions); + //ninjaErr = NinjaSetGoogLineWidth(ninjaArmy, i+10, ui->googleEarthVectorsSpinBox->value(), papszOptions); // test error handling + //ninjaErr = NinjaSetGoogLineWidth(ninjaArmy, i, -1, papszOptions); // test error handling // requires the try/catch form of IF_VALID_INDEX_TRY in ninjaArmy.h + //ninjaErr = NinjaSetGoogLineWidth(ninjaArmy, i, 101, papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetGoogLineWidth: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetGoogColor(ninjaArmy, i, ui->alternativeColorSchemeComboBox->itemData(ui->alternativeColorSchemeComboBox->currentIndex()).toString().toUtf8().constData(), ui->googleEarthVectorScalingCheckBox->isChecked(), papszOptions); + //ninjaErr = NinjaSetGoogColor(ninjaArmy, i+10, ui->alternativeColorSchemeComboBox->itemData(ui->alternativeColorSchemeComboBox->currentIndex()).toString().toUtf8().constData(), ui->googleEarthVectorScalingCheckBox->isChecked(), papszOptions); // test error handling + ////ninjaErr = NinjaSetGoogColor(ninjaArmy, i, "fudge", ui->googleEarthVectorScalingCheckBox->isChecked(), papszOptions); // test error handling // requires the try/catch form of IF_VALID_INDEX_TRY in ninjaArmy.h // actually, the colorScheme string appears to not even be checked if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetGoogColor: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetGoogConsistentColorScale(ninjaArmy, i, ui->legendCheckBox->isChecked(), numNinjas, papszOptions); + //ninjaErr = NinjaSetGoogConsistentColorScale(ninjaArmy, i+10, ui->legendCheckBox->isChecked(), numNinjas, papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetGoogConsistentColorScale: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetAsciiOutFlag(ninjaArmy, i, ui->fireBehaviorGroupBox->isChecked(), papszOptions); + //ninjaErr = NinjaSetAsciiOutFlag(ninjaArmy, i+10, ui->fireBehaviorGroupBox->isChecked(), papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetAsciiOutFlag: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetAsciiResolution(ninjaArmy, i, fireBehavior.resolution, fireBehavior.units.constData(), papszOptions); + //ninjaErr = NinjaSetAsciiResolution(ninjaArmy, i+10, fireBehavior.resolution, fireBehavior.units.constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaSetAsciiResolution(ninjaArmy, i, fireBehavior.resolution, "fudge", papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetAsciiResolution: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetShpOutFlag(ninjaArmy, i, ui->shapeFilesGroupBox->isChecked(), papszOptions); + //ninjaErr = NinjaSetShpOutFlag(ninjaArmy, i+10, ui->shapeFilesGroupBox->isChecked(), papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetShpOutFlag: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetShpResolution(ninjaArmy, i, shapeFiles.resolution, shapeFiles.units.constData(), papszOptions); + //ninjaErr = NinjaSetShpResolution(ninjaArmy, i+10, shapeFiles.resolution, shapeFiles.units.constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaSetShpResolution(ninjaArmy, i, shapeFiles.resolution, "fudge", papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetShpResolution: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetPDFOutFlag(ninjaArmy, i, ui->geospatialPDFFilesGroupBox->isChecked(), papszOptions); + //ninjaErr = NinjaSetPDFOutFlag(ninjaArmy, i+10, ui->geospatialPDFFilesGroupBox->isChecked(), papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetPDFOutFlag: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetPDFLineWidth(ninjaArmy, i, ui->geospatialPDFFilesVectorsSpinBox->value(), papszOptions); + //ninjaErr = NinjaSetPDFLineWidth(ninjaArmy, i+10, ui->geospatialPDFFilesVectorsSpinBox->value(), papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetPDFLineWidth: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetPDFBaseMap(ninjaArmy, i, ui->basemapComboBox->currentIndex(), papszOptions); + //ninjaErr = NinjaSetPDFBaseMap(ninjaArmy, i+10, ui->basemapComboBox->currentIndex(), papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetPDFBaseMap: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetPDFDEM(ninjaArmy, i, ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8().constData(), papszOptions); + //ninjaErr = NinjaSetPDFDEM(ninjaArmy, i+10, ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8().constData(), papszOptions); // test error handling + ////ninjaErr = NinjaSetPDFDEM(ninjaArmy, i, "fudge", papszOptions); // test error handling // the dem string is not even checked if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetPDFDEM: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetPDFSize(ninjaArmy, i, PDFSize.PDFHeight, PDFSize.PDFWidth, PDFSize.PDFDpi, papszOptions); + //ninjaErr = NinjaSetPDFSize(ninjaArmy, i+10, PDFSize.PDFHeight, PDFSize.PDFWidth, PDFSize.PDFDpi, papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetPDFSize: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetPDFResolution(ninjaArmy, i, geospatialPDFs.resolution, geospatialPDFs.units.constData(), papszOptions); + //ninjaErr = NinjaSetPDFResolution(ninjaArmy, i+10, geospatialPDFs.resolution, geospatialPDFs.units.constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaSetPDFResolution(ninjaArmy, i, geospatialPDFs.resolution, "fudge", papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetPDFResolution: ninjaErr =" << ninjaErr; + return false; } ninjaErr = NinjaSetVtkOutFlag(ninjaArmy, i, ui->VTKFilesCheckBox->isChecked(), papszOptions); + //ninjaErr = NinjaSetVtkOutFlag(ninjaArmy, i+10, ui->VTKFilesCheckBox->isChecked(), papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetVtkOutFlag: ninjaErr =" << ninjaErr; + return false; } + + return true; } OutputMeshResolution MainWindow::getMeshResolution( diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index 12fe71a98..e79fa51c7 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -147,8 +147,8 @@ private slots: void connectSignals(); void treeItemClicked(QTreeWidgetItem *item, int column); - void prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* initializationMethod); - void setOutputFlags(NinjaArmyH* ninjaArmy, + bool prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* initializationMethod); + bool setOutputFlags(NinjaArmyH* ninjaArmy, int i, int numNinjas, OutputMeshResolution googleEarth, diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index d1b9b33af..d7270140f 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -1630,6 +1630,11 @@ int ninjaArmy::setInitializationMethod( const int nIndex, #endif else { +#ifdef NINJAFOAM + ninjas[ nIndex ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid input initialization_method '%s' in ninjaArmy::setInitializationMethod()\nchoices are: 'domain_average', 'domainAverage', 'domainaverageinitializationflag', 'domain',\n'point', 'pointinitializationflag', 'wxmodel', 'wxmodelinitializationflag', 'griddedInitialization'", method.c_str()); +#else + ninjas[ nIndex ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid input initialization_method '%s' in ninjaArmy::setInitializationMethod()\nchoices are: 'domain_average', 'domainAverage', 'domainaverageinitializationflag', 'domain',\n'point', 'pointinitializationflag', 'wxmodel', 'wxmodelinitializationflag', 'griddedInitialization', 'foamDomainAverageInitialization'", method.c_str()); +#endif retval = NINJA_E_INVALID; } } @@ -1683,8 +1688,15 @@ int ninjaArmy::setInputWindHeight( const int nIndex, const double height, ninjas[ nIndex ]->set_inputWindHeight( height, lengthUnits::getUnit( units ) ); retval = NINJA_SUCCESS; } - catch( std::logic_error &e ) + /*catch( std::range_error &e ) + { + ninjas[ nIndex ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + retval = NINJA_E_INVALID; + }*/ + //catch( std::logic_error &e ) + catch( std::exception &e ) { + ninjas[ nIndex ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); retval = NINJA_E_INVALID; } } @@ -1715,14 +1727,30 @@ int ninjaArmy::setOutputWindHeight( const int nIndex, const double height, ninjas[ nIndex ]->set_outputWindHeight( height, lengthUnits::getUnit( units ) ); retval = NINJA_SUCCESS; } - catch( std::logic_error &e ) + /*catch( std::range_error &e ) + { + ninjas[ nIndex ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + retval = NINJA_E_INVALID; + }*/ + //catch( std::logic_error &e ) + catch( std::exception &e ) { + ninjas[ nIndex ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); retval = NINJA_E_INVALID; } } return retval; } +//int ninjaArmy::setOutputWindHeight( const int nIndex, const double height, +// std::string units, char ** papszOptions ) +//{ +// //Parse units so it contains only lowercase letters +// std::transform( units.begin(), units.end(), units.begin(), ::tolower ); +// +// IF_VALID_INDEX_TRY( nIndex, ninjas, ninjas[ nIndex ]->set_outputWindHeight( height, lengthUnits::getUnit( units ) ) ); +//} + int ninjaArmy::setOutputSpeedUnits( const int nIndex, const velocityUnits::eVelocityUnits units, char ** papszOptions ) { @@ -1743,6 +1771,7 @@ int ninjaArmy::setOutputSpeedUnits( const int nIndex, std::string units, char ** } catch( std::logic_error &e ) { + ninjas[ nIndex ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); retval = NINJA_E_INVALID; } } @@ -1868,6 +1897,7 @@ int ninjaArmy::setUniVegetation( const int nIndex, std::string vegetation, } else { + ninjas[ nIndex ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid input vegation '%s' in ninjaArmy::setUniVegetation()\nchoices are: 'grass', 'g', 'brush', 'b', 'trees', 't'", vegetation.c_str()); retval = NINJA_E_INVALID; } } @@ -1889,17 +1919,27 @@ int ninjaArmy::setMeshResolutionChoice( const int nIndex, const std::string choi int retval = NINJA_E_INVALID; IF_VALID_INDEX( nIndex, ninjas ) { - if( ninjas[ nIndex ]->identify() == "ninja" ) - { - ninjas[ nIndex ]->set_meshResChoice( choice ); - retval = NINJA_SUCCESS; - } else if( ninjas[ nIndex ]->identify() == "ninjafoam" ) + try { - ninjas[ nIndex ]->set_MeshCount( ninja::get_eNinjafoamMeshChoice(choice) ); - retval = NINJA_SUCCESS; + if( ninjas[ nIndex ]->identify() == "ninja" ) + { + ninjas[ nIndex ]->set_meshResChoice( choice ); + retval = NINJA_SUCCESS; + } else if( ninjas[ nIndex ]->identify() == "ninjafoam" ) + { + ninjas[ nIndex ]->set_MeshCount( ninja::get_eNinjafoamMeshChoice(choice) ); + retval = NINJA_SUCCESS; + } + else + { + throw std::invalid_argument( "invalid ninja->identify() '" + choice + + "' in ninjaArmy::setMeshResolutionChoice()" + + "\nshould be: 'ninja' or 'ninjafoam'" ); + } } - else + catch( std::logic_error &e ) { + ninjas[ nIndex ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); retval = NINJA_E_INVALID; } } @@ -1936,6 +1976,7 @@ int ninjaArmy::setMeshResolution( const int nIndex, const double resolution, } catch( std::logic_error &e ) { + ninjas[ nIndex ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); retval = NINJA_E_INVALID; } } @@ -2188,6 +2229,7 @@ int ninjaArmy::setGoogResolution( const int nIndex, const double resolution, } catch( std::logic_error &e ) { + ninjas[ nIndex ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); retval = NINJA_E_INVALID; } } @@ -2220,8 +2262,8 @@ int ninjaArmy::setGoogSpeedScaling } else { + ninjas[ nIndex ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid speed scale '%s' in ninjaArmy::setGoogSpeedScaling()\nchoices are: 'equal_color', 'color', 'equal_interval', 'interval'", scaling.c_str()); retval = NINJA_E_INVALID; - } } return retval; @@ -2262,6 +2304,7 @@ int ninjaArmy::setShpResolution( const int nIndex, const double resolution, } catch( std::logic_error &e ) { + ninjas[ nIndex ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); retval = NINJA_E_INVALID; } } @@ -2316,6 +2359,7 @@ int ninjaArmy::setAsciiResolution( const int nIndex, const double resolution, } catch( std::logic_error &e ) { + ninjas[ nIndex ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); retval = NINJA_E_INVALID; } } @@ -2367,6 +2411,7 @@ int ninjaArmy::setPDFResolution( const int nIndex, const double resolution, } catch( std::logic_error &e ) { + ninjas[ nIndex ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); retval = NINJA_E_INVALID; } } diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 63f97cc9c..497ca52dd 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -73,7 +73,12 @@ extern boost::local_time::tz_database globalTimeZoneDB; if( i >= 0 && i < iterable.size() ) #define CHECK_VALID_INDEX(i,iterable) \ - if( i < 0 || i >= iterable.size() ) throw std::runtime_error("invalid index"); + if( i < 0 || i >= iterable.size() ) \ + { \ + std::cout << "here1" << std::endl; \ + ninjas[ 0 ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: invalid index %d", i); \ + throw std::runtime_error("invalid index"); \ + } \ /* * * Macro IF_VALID_INDEX_DO is a boiler plate for most of the ninjaArmy functions. @@ -83,6 +88,7 @@ extern boost::local_time::tz_database globalTimeZoneDB; * it is handled and NINJA_E_INVALID is returned. Otherwise, NINJA_SUCCESS is returned. * */ #ifdef C_API +//#ifndef C_API #define IF_VALID_INDEX_TRY( i, iterable, func ) \ if( i >= 0 && i < iterable.size() ) \ { \ @@ -90,20 +96,32 @@ extern boost::local_time::tz_database globalTimeZoneDB; { \ func; \ } \ + catch( exception& e ) \ + { \ + std::cout << "here2a" << std::endl; \ + ninjas[ i ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); \ + return NINJA_E_INVALID; \ + } \ catch( ... ) \ { \ + std::cout << "here2b" << std::endl; \ + ninjas[ i ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); \ return NINJA_E_INVALID; \ } \ return NINJA_SUCCESS; \ } \ + std::cout << "here3a" << std::endl; \ + ninjas[ 0 ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: invalid index %d", i); \ return NINJA_E_INVALID; #else #define IF_VALID_INDEX_TRY( i, iterable, func ) \ if( i >= 0 && i < iterable.size() ) \ { \ func; \ - return NINJA_SUCCESS; \ + return NINJA_SUCCESS; \ } \ + std::cout << "here3b" << std::endl; \ + ninjas[ 0 ]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: invalid index %d", i); \ return NINJA_E_INVALID; #endif diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index eb35388fa..5f58c2ddd 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -1766,8 +1766,15 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetStationKML if( NULL != army ) { - wxStation::writeKmlFile( reinterpret_cast( army )->getWxStations(nIndex), demFileName, outputDirectory, velocityUnits::getUnit(outputSpeedUnits)); - return NINJA_SUCCESS; + try + { + wxStation::writeKmlFile( reinterpret_cast( army )->getWxStations(nIndex), demFileName, outputDirectory, velocityUnits::getUnit(outputSpeedUnits)); + return NINJA_SUCCESS; + } + catch (const std::exception& e) + { + return NINJA_E_OTHER; + } } else { From 6a2c537bf878d2195c1ce9a0d439a9841b680640 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 2 Dec 2025 15:44:16 -0700 Subject: [PATCH 293/435] Added splitters to adjust section sizes, removed solve button, and adjusted other widgets --- src/gui/appState.cpp | 4 - src/gui/mainWindow.cpp | 8 +- src/gui/mainWindow.h | 1 - src/gui/mainWindow.ui | 322 +++++++++++++++++++++-------------------- 4 files changed, 169 insertions(+), 166 deletions(-) diff --git a/src/gui/appState.cpp b/src/gui/appState.cpp index 8beff3c99..a91ecdf2c 100644 --- a/src/gui/appState.cpp +++ b/src/gui/appState.cpp @@ -430,18 +430,14 @@ void AppState::updateOverallState() { if (isSolverMethodologyValid && isInputValid && isOutputValid) { - ui->solveButton->setEnabled(true); ui->numberOfProcessorsSolveButton->setEnabled(true); - ui->solveButton->setToolTip(""); ui->numberOfProcessorsSolveButton->setToolTip(""); ui->treeWidget->topLevelItem(3)->setIcon(0, tickIcon); ui->treeWidget->topLevelItem(3)->setToolTip(0, ""); } else { - ui->solveButton->setEnabled(false); ui->numberOfProcessorsSolveButton->setEnabled(false); - ui->solveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); ui->numberOfProcessorsSolveButton->setToolTip("Solver Methodology and Inputs must be passing to solve."); ui->treeWidget->topLevelItem(3)->setIcon(0, crossIcon); ui->treeWidget->topLevelItem(3)->setToolTip(0, "There are errors in the inputs or outputs"); diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 892702768..66ea29b0c 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -121,8 +121,7 @@ void MainWindow::connectSignals() connect(ui->diurnalCheckBox, &QCheckBox::clicked, this, &MainWindow::diurnalCheckBoxClicked); connect(ui->stabilityCheckBox, &QCheckBox::clicked, this, &MainWindow::stabilityCheckBoxClicked); connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, this, &MainWindow::treeWidgetItemDoubleClicked); - connect(ui->solveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); - connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::numberOfProcessorsSolveButtonClicked); + connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); connect(ui->outputDirectoryButton, &QPushButton::clicked, this, &MainWindow::outputDirectoryButtonClicked); connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); @@ -395,11 +394,6 @@ void MainWindow::outputDirectoryButtonClicked() } } -void MainWindow::numberOfProcessorsSolveButtonClicked() -{ - ui->solveButton->click(); -} - void MainWindow::solveButtonClicked() { AppState& state = AppState::instance(); diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index e79fa51c7..9f8045e27 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -111,7 +111,6 @@ private slots: void treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column); void solveButtonClicked(); void outputDirectoryButtonClicked(); - void numberOfProcessorsSolveButtonClicked(); void writeToConsole(QString message, QColor color = Qt::white); void updateProgressValue(int run, int progress); void updateProgressMessage(const QString message); diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index 921f6e494..0910bfe42 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -205,24 +205,18 @@ - - 0 - - - 0 - - - 0 - - - 0 - - - + + + Qt::Orientation::Horizontal + + + + Qt::Orientation::Vertical + - + 0 0 @@ -430,11 +424,9 @@
-
- - + 0 0 @@ -464,7 +456,7 @@ QFrame::Shadow::Sunken - 19 + 12 @@ -1765,49 +1757,28 @@ li.checked::marker { content: "\2612"; } - - - 0 - 0 - - - - - 0 - 20 - - - - - 16777215 - 16777215 - + + true - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTop|Qt::AlignmentFlag::AlignTrailing 0 0 - 558 - 654 + 586 + 488 - - - 0 - 0 - - - + 0 - 1 + 0 @@ -1836,6 +1807,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + Select Weather Stations @@ -1856,6 +1833,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + 140 @@ -1939,6 +1922,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + Select All @@ -1946,6 +1935,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + Select None @@ -1963,7 +1958,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -1981,12 +1976,24 @@ li.checked::marker { content: "\2612"; } - 1 + 0 + + + 0 + 0 + + + + + 0 + 0 + + Stop Time @@ -2017,6 +2024,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + Number of Time Steps @@ -2024,6 +2037,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + Start Time @@ -2067,11 +2086,17 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + - + 0 0 @@ -2090,6 +2115,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + Current Time Zone: @@ -2097,6 +2128,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + Current Min Time: @@ -2104,6 +2141,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + Current Max Time: @@ -2118,6 +2161,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + PointingHandCursor @@ -2585,14 +2634,23 @@ li.checked::marker { content: "\2612"; } - false + true + + + + 0 + 0 + Write Raw Weather Model Output - + true + + false + @@ -2628,8 +2686,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 414 - 408 + 578 + 480 @@ -3334,7 +3392,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 381 + 578 318 @@ -4572,11 +4630,9 @@ li.checked::marker { content: "\2612"; } - - - + 0 0 @@ -4589,107 +4645,65 @@ li.checked::marker { content: "\2612"; } - 600 - 125 + 16777215 + 16777215 true - - - - - - - false - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - PointingHandCursor - - - Qt::LayoutDirection::LeftToRight - - - #solveButton { - padding: 0; - width: 100px; - text-align: center; - padding: 5px; -} - - - Solve - - - - - -
-
- - - - - 1 - 0 - - - - - 100 - 0 - - - - - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - - + + + + + 1 + 0 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + + +
From a7e8107e0bc2c32c833a6d92d6284891437ea904 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 3 Dec 2025 09:39:56 -0700 Subject: [PATCH 294/435] Implemented raw wx model outputs for google earth, shape files, and ascii files --- src/gui/mainWindow.cpp | 24 ++++++++++++++++++++++++ src/gui/mainWindow.ui | 22 +++++++++++----------- src/gui/weatherModelInput.cpp | 2 ++ 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 66ea29b0c..e0481517c 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -1092,6 +1092,30 @@ bool MainWindow::setOutputFlags(NinjaArmyH* ninjaArmy, return false; } + if(ui->rawWeatherModelOutputCheckBox->isCheckable() && ui->rawWeatherModelOutputCheckBox->isChecked()) + { + ninjaErr = NinjaSetWxModelGoogOutFlag(ninjaArmy, i, ui->googleEarthGroupBox->isChecked(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaSetWxModelGoogOutFlag: ninjaErr =" << ninjaErr; + return false; + } + + ninjaErr = NinjaSetWxModelShpOutFlag(ninjaArmy, i, ui->shapeFilesGroupBox->isChecked(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaSetWxModelShpOutFlag: ninjaErr =" << ninjaErr; + return false; + } + + ninjaErr = NinjaSetWxModelAsciiOutFlag(ninjaArmy, i, ui->fireBehaviorGroupBox->isChecked(), papszOptions); + if (ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaSetWxModelAsciiOutFlag: ninjaErr =" << ninjaErr; + return false; + } + } + return true; } diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index 0910bfe42..187f8fdae 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -230,7 +230,7 @@ 16777215 - 250 + 16777215 @@ -434,7 +434,7 @@ 0 - 250 + 0 @@ -445,7 +445,7 @@ - 300 + 0 0 @@ -1768,8 +1768,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 586 - 488 + 502 + 399 @@ -2212,7 +2212,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 572 + 450 713 @@ -2634,7 +2634,7 @@ li.checked::marker { content: "\2612"; } - true + false @@ -2649,7 +2649,7 @@ li.checked::marker { content: "\2612"; } true - false + true @@ -2686,8 +2686,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 578 - 480 + 414 + 408 @@ -3392,7 +3392,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 578 + 381 318 diff --git a/src/gui/weatherModelInput.cpp b/src/gui/weatherModelInput.cpp index b8bc5b3e1..381fe0d98 100644 --- a/src/gui/weatherModelInput.cpp +++ b/src/gui/weatherModelInput.cpp @@ -227,6 +227,8 @@ void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged(const QItem void WeatherModelInput::weatherModelGroupBoxToggled(bool toggled) { + ui->rawWeatherModelOutputCheckBox->setEnabled(toggled); + AppState& state = AppState::instance(); state.isWeatherModelInitializationToggled = toggled; From f2a33ef49c181ad6397259ae38dc4b5a176e7efe Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 3 Dec 2025 09:56:30 -0700 Subject: [PATCH 295/435] Created function to hide console output and connect signals/slots with menu bar toggle --- src/gui/menuBar.cpp | 6 ++++++ src/gui/menuBar.h | 1 + 2 files changed, 7 insertions(+) diff --git a/src/gui/menuBar.cpp b/src/gui/menuBar.cpp index 063a05bbc..cc5336174 100755 --- a/src/gui/menuBar.cpp +++ b/src/gui/menuBar.cpp @@ -72,6 +72,7 @@ MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) connect(ui->supportEmailAction, &QAction::triggered, this, &MenuBar::supportEmailActionTriggered); connect(ui->submitBugReportAction, &QAction::triggered, this, &MenuBar::submitBugReportActionTriggered); connect(ui->aboutQtAction, &QAction::triggered, this, &QApplication::aboutQt); + connect(ui->enableConsoleOutputAction, &QAction::toggled, this, &MenuBar::enableConsoleOutputActionToggled); } void MenuBar::newProjectActionTriggered() @@ -385,3 +386,8 @@ void MenuBar::submitBugReportActionTriggered() ); } } + +void MenuBar::enableConsoleOutputActionToggled(bool toggled) +{ + ui->consoleTextEdit->setVisible(toggled); +} diff --git a/src/gui/menuBar.h b/src/gui/menuBar.h index 110777737..c281a4c3a 100644 --- a/src/gui/menuBar.h +++ b/src/gui/menuBar.h @@ -83,6 +83,7 @@ private slots: void citeWindNinjaActionTriggered(); void supportEmailActionTriggered(); void submitBugReportActionTriggered(); + void enableConsoleOutputActionToggled(bool toggled); private: Ui::MainWindow* ui; From 6f1c9e6ba8758e9ba54774e65daafdc26206985a Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 3 Dec 2025 11:03:53 -0700 Subject: [PATCH 296/435] Implemented proper checking of LCP files for vegetation data --- src/gui/mainWindow.cpp | 15 ++-- src/gui/mainWindow.ui | 185 ++++++++++++++++++++++++--------------- src/gui/surfaceInput.cpp | 37 +++++++- src/gui/surfaceInput.h | 2 +- 4 files changed, 162 insertions(+), 77 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index e0481517c..3ffb68903 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -871,13 +871,16 @@ bool MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i return false; } - ninjaErr = NinjaSetUniVegetation(ninjaArmy, i, ui->vegetationComboBox->currentText().toLower().toUtf8().constData(), papszOptions); - //ninjaErr = NinjaSetUniVegetation(ninjaArmy, i+10, ui->vegetationComboBox->currentText().toLower().toUtf8().constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. - //ninjaErr = NinjaSetUniVegetation(ninjaArmy, i, "fudge", papszOptions); // test error handling - if(ninjaErr != NINJA_SUCCESS) + if(ui->vegetationStackedWidget->currentIndex() == 0) { - qDebug() << "NinjaSetUniVegetation: ninjaErr =" << ninjaErr; - return false; + ninjaErr = NinjaSetUniVegetation(ninjaArmy, i, ui->vegetationComboBox->currentText().toLower().toUtf8().constData(), papszOptions); + //ninjaErr = NinjaSetUniVegetation(ninjaArmy, i+10, ui->vegetationComboBox->currentText().toLower().toUtf8().constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaSetUniVegetation(ninjaArmy, i, "fudge", papszOptions); // test error handling + if(ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaSetUniVegetation: ninjaErr =" << ninjaErr; + return false; + } } ninjaErr = NinjaSetMeshResolutionChoice(ninjaArmy, i, ui->meshResolutionComboBox->currentText().toLower().toUtf8().constData(), papszOptions); diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index 187f8fdae..fa3a62d61 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -456,7 +456,7 @@ QFrame::Shadow::Sunken - 12 + 5 @@ -742,8 +742,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 538 - 419 + 578 + 480 @@ -843,6 +843,115 @@ li.checked::marker { content: "\2612"; } + + + + + 0 + 0 + + + + + 0 + 70 + + + + Vegetation + + + + + + + 0 + 0 + + + + 1 + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + + Grass + + + + + Brush + + + + + Trees + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + <html><head/><body><p>Vegetation Data Set Using LCP File</p></body></html> + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + @@ -952,68 +1061,6 @@ li.checked::marker { content: "\2612"; } - - - - - 0 - 0 - - - - - 0 - 70 - - - - Vegetation - - - - - - - 0 - 0 - - - - PointingHandCursor - - - - Grass - - - - - Brush - - - - - Trees - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - @@ -1308,7 +1355,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 346 + 572 661 @@ -1768,8 +1815,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 502 - 399 + 586 + 488 @@ -2212,7 +2259,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 450 + 572 713 diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp index 8a2f0117e..876efcebb 100644 --- a/src/gui/surfaceInput.cpp +++ b/src/gui/surfaceInput.cpp @@ -37,6 +37,7 @@ SurfaceInput::SurfaceInput(Ui::MainWindow *ui, webEngineView(webEngineView) { ui->timeZoneDetailsTextEdit->setVisible(false); + ui->vegetationStackedWidget->setCurrentIndex(0); timeZoneAllZonesCheckBoxClicked(); @@ -272,6 +273,15 @@ void SurfaceInput::elevationInputFileLineEditTextChanged(const QString &arg1) ui->outputDirectoryLineEdit->setText(file.absolutePath()); computeDEMFile(currentDEMFilePath); + if(demFileType == "LCP") + { + ui->vegetationStackedWidget->setCurrentIndex(1); + } + else + { + ui->vegetationStackedWidget->setCurrentIndex(0); + } + ui->meshResolutionSpinBox->setValue(computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); QStringList cornerStrs; @@ -567,7 +577,32 @@ void SurfaceInput::computeDEMFile(QString filePath) GDALDataset *poInputDS; poInputDS = (GDALDataset*)GDALOpen(filePath.toStdString().c_str(), GA_ReadOnly); - GDALDriverName = poInputDS->GetDriver()->GetDescription(); + QString GDALDriverName = poInputDS->GetDriver()->GetDescription(); + if(GDALDriverName == "AAIGrid") + { + demFileType = "ASC"; + } + else if (GDALDriverName == "LCP") + { + demFileType = "LCP"; + } + else if (GDALDriverName == "GTiff") + { + int bandCount = GDALGetRasterCount(poInputDS); + if(bandCount >1) + { + demFileType = "LCP"; + } + else + { + demFileType = "GTIFF"; + } + } + else if (GDALDriverName == "IMG") + { + demFileType = "IMG"; + } + GDALXSize = poInputDS->GetRasterXSize(); GDALYSize = poInputDS->GetRasterYSize(); GDALGetCorners(poInputDS, DEMCorners); diff --git a/src/gui/surfaceInput.h b/src/gui/surfaceInput.h index 4135d9bc5..942e50725 100644 --- a/src/gui/surfaceInput.h +++ b/src/gui/surfaceInput.h @@ -87,7 +87,7 @@ private slots: QFutureWatcher *futureWatcher; QString currentDEMFilePath; - QString GDALDriverName; + QString demFileType; int GDALXSize, GDALYSize; double GDALCellSize, GDALMaxValue, GDALMinValue; double DEMCorners[8]; From 2be867a1783a72c6b5e8dac50214d44090fabad8 Mon Sep 17 00:00:00 2001 From: masonwillman <117214223+masonwillman@users.noreply.github.com> Date: Fri, 5 Dec 2025 15:53:08 -0700 Subject: [PATCH 297/435] Added custom command to run windeployqt6 from vcpkg on windninja for .dlls --- CMakeLists.txt | 69 +++++--------------------------------------------- 1 file changed, 7 insertions(+), 62 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 447771103..556f8112c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -510,69 +510,14 @@ RMDir \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\Documents\\\" ") # Build the nsis installer on the firelab machine(s). Not for external use. if(FIRELAB_PACKAGE AND WIN32 AND MSVC AND USE_VCPKG) - # --- Existing Non-Qt Install Logic --- - # Install the CURL_CA_BUNDLE file from the bin folder, and drop it in data/ - install(FILES ${GIS_INTERNALS_HOME}/bin/curl/curl-ca-bundle.crt DESTINATION - share/windninja COMPONENT apps) - # Install the dlls GDAL depends on - file(GLOB dlls ${GIS_INTERNALS_HOME}/bin/*.dll) - foreach(dll ${dlls}) - install(PROGRAMS ${dll} DESTINATION bin COMPONENT apps) - endforeach(dll ${dlls}) - install(PROGRAMS ${GIS_INTERNALS_HOME}/bin/gdal/plugins/gdal_netCDF.dll DESTINATION bin/gdalplugins COMPONENT app) - - # --- Start of VCPKG/Qt 6 Install Logic --- - - # 1. Find the Qt 6 libraries - # Adjust components (Gui, Network, Widgets, etc.) to match what your application uses. - find_package(Qt6 REQUIRED COMPONENTS Core Gui Network Widgets) - - # Determine the directory where Qt libraries are installed by vcpkg - # Use a known component (like Qt6::Core) to find the location. - get_target_property(QT_CORE_LOCATION Qt6::Core LOCATION) - get_filename_component(QT_BIN_DIR ${QT_CORE_LOCATION} DIRECTORY) - - # 2. Install Qt 6 Runtime DLLs - # Install the main Qt 6 libraries you are linking against. - # Qt 6 DLL names are generally like Qt6Core.dll, Qt6Gui.dll, etc. - set(QT_LIBS_TO_INSTALL - Qt6Core.dll - Qt6Gui.dll - Qt6Network.dll - Qt6Widgets.dll - # Add other components if needed (e.g., Qt6WebKit.dll, Qt6Svg.dll) - ) - foreach(qt_lib ${QT_LIBS_TO_INSTALL}) - install(PROGRAMS "${QT_BIN_DIR}/${qt_lib}" DESTINATION bin COMPONENT apps) - endforeach() - - # 3. Install Necessary Plugins (e.g., platforms, imageformats) - # Plugins are critical for Qt applications on Windows. They are typically found - # relative to the bin directory in the vcpkg install root. - get_filename_component(QT_PREFIX_DIR ${QT_BIN_DIR} DIRECTORY) - set(QT_VCPKG_PLUGINS_DIR "${QT_PREFIX_DIR}/plugins") - - # Install the qwindows platform plugin (usually required for GUI apps) - install(PROGRAMS "${QT_VCPKG_PLUGINS_DIR}/platforms/qwindows.dll" - DESTINATION bin/platforms COMPONENT apps) - - # Install the JPEG image format plugin (qjpeg.dll) - install(PROGRAMS "${QT_VCPKG_PLUGINS_DIR}/imageformats/qjpeg.dll" - DESTINATION bin/imageformats COMPONENT apps) - - # --- HACK FOR OPENMP --- - # Leaving the MSVC OpenMP logic as-is, as it was in the original script. - if(BUILD_64) - install(PROGRAMS ${MSVC_REDIST_DIR}/x64/Microsoft.VC100.OPENMP/vcomp100.dll DESTINATION bin COMPONENT apps) - else(BUILD_64) - install(PROGRAMS ${MSVC_REDIST_DIR}/x86/Microsoft.VC100.OPENMP/vcomp100.dll DESTINATION bin COMPONENT apps) - endif(BUILD_64) - - if(NINJAFOAM) - install(DIRECTORY "${FOAM_MINGW_PATH}/etc" DESTINATION bin) - install(DIRECTORY "${FOAM_MINGW_PATH}/platforms" DESTINATION bin) - endif(NINJAFOAM) + set(WINDEPLOYQT_EXE + "${CMAKE_SOURCE_DIR}/vcpkg_installed/x64-windows/tools/Qt6/bin/windeployqt6.exe" + ) + add_custom_target(deploy_windninja ALL + COMMAND "${WINDEPLOYQT_EXE}" --release "$" + DEPENDS WindNinja + ) endif(FIRELAB_PACKAGE AND WIN32 AND MSVC AND USE_VCPKG) set(CPACK_COMPONENT_APPS_REQUIRED TRUE) From 3337d3deefaf0b48000ce549fd1224cd09cdec19 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 9 Dec 2025 12:42:54 -0700 Subject: [PATCH 298/435] added ninjaCom error handling GUI communications to makeDomainAverageArmy(), which required adding a ninjaArmy level ninjaCom, for issue #639, related to issue #666 --- src/gui/mainWindow.cpp | 65 ++++++++++++++++++++++++++++++++++---- src/ninja/ninjaArmy.cpp | 70 +++++++++++++++++++++++++++++++++++++++++ src/ninja/ninjaArmy.h | 11 ++++++- src/ninja/windninja.cpp | 52 ++++++++++++++++++++++++------ src/ninja/windninja.h | 14 +++++++-- 5 files changed, 192 insertions(+), 20 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 3ffb68903..69136fd5d 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -398,11 +398,39 @@ void MainWindow::solveButtonClicked() { AppState& state = AppState::instance(); + maxProgress = 100; + + //progressDialog = new QProgressDialog("Initializing Runs...", "Cancel", 0, maxProgress, ui->centralwidget); + progressDialog = new QProgressDialog(ui->centralwidget); + progressDialog->setRange(0, maxProgress); + progressDialog->setValue(0); + progressDialog->setLabelText("Initializing Runs..."); + progressDialog->setCancelButtonText("Cancel"); + + progressDialog->setWindowModality(Qt::WindowModal); + progressDialog->setMinimumDuration(0); + progressDialog->setAutoClose(false); + progressDialog->setAutoReset(false); + int numNinjas = 0; ninjaArmy = nullptr; char **papszOptions = nullptr; const char *initializationMethod = nullptr; + ninjaArmy = NinjaInitializeArmy(); + + ninjaErr = NinjaSetArmyCommunication(ninjaArmy, "gui", papszOptions); + if(ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaSetArmyCommunication: ninjaErr =" << ninjaErr; + } + + ninjaErr = NinjaSetArmyComProgressFunc(ninjaArmy, &updateProgressCallback, this, papszOptions); + if(ninjaErr != NINJA_SUCCESS) + { + qDebug() << "Army NinjaSetArmyComProgressFunc: err =" << ninjaErr; + } + if (state.isDomainAverageInitializationValid) { initializationMethod = "domain_average"; @@ -423,7 +451,33 @@ void MainWindow::solveButtonClicked() numNinjas = speeds.size(); bool momentumFlag = ui->momentumSolverCheckBox->isChecked(); QString speedUnits = ui->tableSpeedUnits->currentText(); - ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), papszOptions); + + ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), papszOptions); + if(ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaMakeDomainAverageArmy: ninjaErr =" << ninjaErr; + + progressDialog->setValue(maxProgress); + progressDialog->setCancelButtonText("Close"); + + // do cleanup before the return, similar to finishedSolve() + + //disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); + + char **papszOptions = nullptr; + int ninjaErr = NinjaDestroyArmy(ninjaArmy, papszOptions); + if(ninjaErr != NINJA_SUCCESS) + { + printf("NinjaDestroyRuns: ninjaErr = %d\n", ninjaErr); + } + + // clear the progress values for the next set of runs + //runProgress.clear(); + + //futureWatcher->deleteLater(); + + return; + } } else if (state.isPointInitializationValid) { @@ -584,11 +638,10 @@ void MainWindow::solveButtonClicked() writeToConsole(QString::number( numNinjas ) + " runs initialized. Starting solver..."); maxProgress = numNinjas*100; - progressDialog = new QProgressDialog("Solving...", "Cancel", 0, maxProgress, ui->centralwidget); - progressDialog->setWindowModality(Qt::WindowModal); - progressDialog->setMinimumDuration(0); - progressDialog->setAutoClose(false); - progressDialog->setAutoReset(false); + + progressDialog->setRange(0, maxProgress); + progressDialog->setValue(0); + progressDialog->setLabelText("Solving..."); progressDialog->setCancelButtonText("Cancel"); connect( progressDialog, SIGNAL( canceled() ), this, SLOT( cancelSolve() ) ); diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index d7270140f..88f9743f9 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -74,6 +74,7 @@ ninjaArmy& ninjaArmy::operator= (ninjaArmy const& A) { if(&A != this) { + Com = NULL; //must be set to null! writeFarsiteAtmFile = A.writeFarsiteAtmFile; ninjas = A.ninjas; copyLocalData( A ); @@ -93,6 +94,9 @@ int ninjaArmy::getSize() void ninjaArmy::makeDomainAverageArmy( int nSize, bool momentumFlag ) { +//Com->ninjaCom(ninjaComClass::ninjaFailure, "forcing an error message in ninjaArmy::makeDomainAverageArmy."); +//throw std::runtime_error("forcing an error message in ninjaArmy::makeDomainAverageArmy."); +Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeDomainAverageArmy."); int i; for( i=0; i < ninjas.size();i ++) delete ninjas[i]; @@ -1317,6 +1321,72 @@ void ninjaArmy::setAtmFlags() * Ninja Communication Methods *-----------------------------------------------------------------------------*/ +int ninjaArmy::setNinjaCommunication( std::string comType, + char ** papszOptions ) +{ + int retval = NINJA_E_INVALID; + try + { + std::transform( comType.begin(), comType.end(), comType.begin(), ::tolower ); + if( comType == "ninjaCLICom" || comType == "cli" ) + { + inputsComType = ninjaComClass::ninjaCLICom; + retval = NINJA_SUCCESS; + } + else if( comType == "ninjaGUICom" || comType == "gui" ) + { + inputsComType = ninjaComClass::ninjaGUICom; + retval = NINJA_SUCCESS; + } + else if( comType == "ninjaQuietCom" || comType == "quiet" ) + { + inputsComType = ninjaComClass::ninjaQuietCom; + retval = NINJA_SUCCESS; + } + else + { + retval = NINJA_E_INVALID; + } + + inputsRunNumber = 9999; + lastComString[0] = 'the heck!\0'; + +// if(Com) +// delete Com; + + // following ninja.cpp style, might be able to move this and some of the initial value things from the lines above, + // to the ninjaArmy constructor, would then also require copy constructor stuff for the initial value storages + Com = new ninjaComClass(); + + Com->comType = &inputsComType; + Com->runNumber = &inputsRunNumber; + Com->lastMsg = lastComString; + } + catch( ... ) + { + std::cout << "!!!failed to set ninjaArmy level ninjaCom!!!" << std::endl; + return NINJA_E_INVALID; + } + + return retval; +} + +int ninjaArmy::setNinjaComProgressFunc( ProgressFunc func, void *pUser, + char ** papszOptions ) +{ + try + { + Com->set_progressFunc(func, pUser); + } + catch( ... ) + { + std::cout << "!!!failed to set ninjaArmy level ninjaCom progress function!!!" << std::endl; + return NINJA_E_INVALID; + } + return NINJA_SUCCESS; +} + + int ninjaArmy::setNinjaCommunication( const int nIndex, const int RunNumber, const ninjaComClass::eNinjaCom comType, char ** papszOptions ) diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 497ca52dd..6a22f1260 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -141,7 +141,10 @@ class ninjaArmy ninjaArmy& operator= (ninjaArmy const& A); - //ninjaComClass *Com; + ninjaComClass *Com; + char lastComString[NINJA_MSG_SIZE]; + int inputsRunNumber; + ninjaComClass::eNinjaCom inputsComType; enum eWxModelType{ ncepNdfd, @@ -181,6 +184,12 @@ class ninjaArmy /*----------------------------------------------------------------------------- * Ninja Communication Methods *-----------------------------------------------------------------------------*/ + + int setNinjaCommunication( std::string comType, + char ** papszOptions = NULL ); + int setNinjaComProgressFunc( ProgressFunc func, void *pUser, + char ** papszOptions = NULL); + /** * \brief Initialize the ninja communication of a ninja * diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 5f58c2ddd..84f0acecc 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -68,6 +68,14 @@ NinjaErr handleException() extern "C" { + +WINDNINJADLL_EXPORT NinjaArmyH* NinjaInitializeArmy() +{ + NinjaArmyH* army; + army = reinterpret_cast(new ninjaArmy()); + return army; +} + /** * \brief Create a new suite of domain average windninja runs. * @@ -100,10 +108,9 @@ extern "C" * * \return An opaque handle to a ninjaArmy on success, NULL otherwise. */ - -WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakeDomainAverageArmy - ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options ) -// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, +WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy + ( NinjaArmyH * army, unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options ) +// ( NinjaArmyH * army, unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, // const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options ) { @@ -130,11 +137,8 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakeDomainAverageArmy // throw std::runtime_error("yearList, monthList, dayList, hourList, minuteList, airTempList, and cloudCoverList must be the same length!"); // - NinjaArmyH* army; - try { - army = reinterpret_cast( new ninjaArmy() ); reinterpret_cast( army )->makeDomainAverageArmy( numNinjas, momentumFlag); for(int i=0; i( army )->getSize(); i++) @@ -150,11 +154,11 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakeDomainAverageArmy // reinterpret_cast( army )->setUniCloudCover( i, cloudCoverList[i], std::string( cloudCoverUnits ) ); } - return army; + return NINJA_SUCCESS; } - catch( bad_alloc& ) + catch( ... ) { - return NULL; + return NINJA_E_INVALID; } } @@ -766,6 +770,34 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetNumberCPUs } } +WINDNINJADLL_EXPORT NinjaErr NinjaSetArmyCommunication + ( NinjaArmyH * army, const char * comType, char ** papszOptions ) +{ + if( NULL != army ) + { + return reinterpret_cast( army )->setNinjaCommunication + ( std::string( comType ) ); + } + else + { + return NINJA_E_NULL_PTR; + } +} + +WINDNINJADLL_EXPORT NinjaErr NinjaSetArmyComProgressFunc + ( NinjaArmyH * army, ProgressFunc func, void *pUser, char ** papszOptions ) +{ + if( NULL != army ) + { + return reinterpret_cast( army )->setNinjaComProgressFunc + ( func, pUser ); + } + else + { + return NINJA_E_NULL_PTR; + } +} + /** * \brief Set the communication handler for simulations. * diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 9dc4056e3..db4844986 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -85,9 +85,11 @@ typedef int NinjaErr; /*----------------------------------------------------------------------------- * Contructor/Destructors *-----------------------------------------------------------------------------*/ - WINDNINJADLL_EXPORT NinjaArmyH * NinjaMakeDomainAverageArmy - ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options); -// ( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, + WINDNINJADLL_EXPORT NinjaArmyH* NinjaInitializeArmy(); + + WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy + ( NinjaArmyH * ninjaArmy, unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options); +// ( NinjaArmyH * ninjaArmy, unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, // const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char* airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options); //TODO: add helper function to generate arrays of years, months, days, hours, and minutes from a station file @@ -169,6 +171,12 @@ typedef int NinjaErr; ( NinjaArmyH * ninjaArmy, const int nIndex, const int nCPUs, char ** options ); /* Communication */ + WINDNINJADLL_EXPORT NinjaErr NinjaSetArmyCommunication + ( NinjaArmyH * ninjaArmy, const char * comType, char ** options ); + + WINDNINJADLL_EXPORT NinjaErr NinjaSetArmyComProgressFunc + ( NinjaArmyH * ninjaArmy, ProgressFunc func, void *pUser, char ** options ); + WINDNINJADLL_EXPORT NinjaErr NinjaSetCommunication ( NinjaArmyH * ninjaArmy, const int nIndex, const char * comType, char ** options ); From 92060fa71226e00c0903fbe0d9c8b5dbdc8d1e06 Mon Sep 17 00:00:00 2001 From: masonwillman <117214223+masonwillman@users.noreply.github.com> Date: Tue, 9 Dec 2025 12:45:28 -0700 Subject: [PATCH 299/435] Install statement to ensure .dlls are included when creating installer, for #660 --- CMakeLists.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 556f8112c..c4edaf299 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -519,6 +519,18 @@ if(FIRELAB_PACKAGE AND WIN32 AND MSVC AND USE_VCPKG) DEPENDS WindNinja ) + install( + DIRECTORY "${PROJECT_BINARY_DIR}/src/gui/" + DESTINATION bin + FILES_MATCHING + PATTERN "*.exe" + PATTERN "*.dll" + PATTERN "plugins/*" + PATTERN "platforms/*" + PATTERN "resources/*" + PATTERN "*.qm" +) + endif(FIRELAB_PACKAGE AND WIN32 AND MSVC AND USE_VCPKG) set(CPACK_COMPONENT_APPS_REQUIRED TRUE) set(CPACK_COMPONENT_LIBS_HIDDEN TRUE) From 10dc06c315593b289c20fc00cfa46f3a2e80af80 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 9 Dec 2025 13:07:47 -0700 Subject: [PATCH 300/435] successfully using the ninjaArmy level ninjaCom to set the individual ninjas[i] level ninjaCom instances, for issue #639, related to issue #666 --- src/gui/mainWindow.cpp | 14 -------------- src/ninja/ninjaArmy.cpp | 3 +++ 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 69136fd5d..709981b1f 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -825,20 +825,6 @@ bool MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i } char **papszOptions = nullptr; - for(unsigned int i=0; icomType ); + setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); } } From e089b924571779f4cd28f4a8ab3260109b205753 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 9 Dec 2025 13:10:21 -0700 Subject: [PATCH 301/435] oops, that last ninjaCom related commit broke the cli, this commit fixes the cli. For issue #639, related to issue #666 went to also test if this still works for the C-API testing scripts, looks like the C-API testing scripts have possibly been broken since whenever a std::string type was introduced. --- src/ninja/cli.cpp | 2 ++ src/ninja/ninjaArmy.cpp | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ninja/cli.cpp b/src/ninja/cli.cpp index 0b457538d..bd4a611c9 100644 --- a/src/ninja/cli.cpp +++ b/src/ninja/cli.cpp @@ -608,6 +608,8 @@ int windNinjaCLI(int argc, char* argv[]) ninjaArmy windsim; + windsim.setNinjaCommunication( "cli" ); + /* Do we have to fetch an elevation file */ #ifdef EMISSIONS diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 7b1f74a73..5deb8ab96 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -113,7 +113,10 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeDomainAverageArm #endif //NINJAFOAM setNinjaCommunication( i, i, *Com->comType ); - setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); + if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) + { + setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); + } } } From ee4654ea6f57c41665d17cbb433d7ef61ae394ad Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 9 Dec 2025 16:24:44 -0700 Subject: [PATCH 302/435] Properly added filters to weather model tree view, for #637 --- src/gui/weatherModelInput.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/gui/weatherModelInput.cpp b/src/gui/weatherModelInput.cpp index 381fe0d98..03a2ec7d4 100644 --- a/src/gui/weatherModelInput.cpp +++ b/src/gui/weatherModelInput.cpp @@ -45,6 +45,7 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) { ui->weatherModelComboBox->addItem(identifiers[i]); } + NinjaFreeAllWeatherModelIdentifiers(identifiers, identifiersSize); weatherModelComboBoxCurrentIndexChanged(0); @@ -135,10 +136,19 @@ void WeatherModelInput::updateTreeView() QFileInfo demFileInfo(demFilePath); fileModel->setRootPath(demFileInfo.absolutePath()); - fileModel->setNameFilters({"*.zip", "NOMADS-*", "20*", "UCAR-*", "PASTCAST-*"}); fileModel->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); fileModel->setNameFilterDisables(false); + QStringList filters; + for(int i = 0; i < ui->weatherModelComboBox->count(); i++) + { + filters << ui->weatherModelComboBox->itemText(i) + "-" + demFileInfo.fileName(); + } + filters << "20*.zip"; + filters << "20*T*"; + filters << "*.nc"; + fileModel->setNameFilters(filters); + ui->weatherModelFileTreeView->setModel(fileModel); ui->weatherModelFileTreeView->setRootIndex(fileModel->index(demFileInfo.absolutePath())); ui->weatherModelFileTreeView->setSelectionMode(QAbstractItemView::SingleSelection); From f8c35e085f93c6e65e0a03e79c95585e70c0b03b Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 9 Dec 2025 18:24:00 -0700 Subject: [PATCH 303/435] extended ninjaCom error handling GUI communications, from makeDomainAverageArmy(), to the other makePointArmy() and makeWeatherModelArmy() methods. Also fully removed the ninjas[i] level ninjaArmy setting functions from the C-API, the ninjaArmy level is fully used instead, double checking that this didn't break the cli. Other small cleanup. For issue #639, related to issue #666 for the mainWindow.cpp GUI implementation of the ninjaCom error handling, I had to move the "cancelSolve" methods around a bit quirkily, but I think that this current organization will work, at least for now. --- src/gui/mainWindow.cpp | 117 ++++++++++++++++++++-------------- src/gui/weatherModelInput.cpp | 2 +- src/ninja/cli.cpp | 11 ---- src/ninja/ninjaArmy.cpp | 31 +++++++-- src/ninja/windninja.cpp | 80 ++++++++--------------- src/ninja/windninja.h | 18 ++---- 6 files changed, 131 insertions(+), 128 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 709981b1f..8e50adb5f 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -419,16 +419,16 @@ void MainWindow::solveButtonClicked() ninjaArmy = NinjaInitializeArmy(); - ninjaErr = NinjaSetArmyCommunication(ninjaArmy, "gui", papszOptions); + ninjaErr = NinjaSetCommunication(ninjaArmy, "gui", papszOptions); if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetArmyCommunication: ninjaErr =" << ninjaErr; + qDebug() << "NinjaSetCommunication: ninjaErr =" << ninjaErr; } - ninjaErr = NinjaSetArmyComProgressFunc(ninjaArmy, &updateProgressCallback, this, papszOptions); + ninjaErr = NinjaSetComProgressFunc(ninjaArmy, &updateProgressCallback, this, papszOptions); if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "Army NinjaSetArmyComProgressFunc: err =" << ninjaErr; + qDebug() << "Army NinjaSetComProgressFunc: err =" << ninjaErr; } if (state.isDomainAverageInitializationValid) @@ -456,27 +456,6 @@ void MainWindow::solveButtonClicked() if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaMakeDomainAverageArmy: ninjaErr =" << ninjaErr; - - progressDialog->setValue(maxProgress); - progressDialog->setCancelButtonText("Close"); - - // do cleanup before the return, similar to finishedSolve() - - //disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - - char **papszOptions = nullptr; - int ninjaErr = NinjaDestroyArmy(ninjaArmy, papszOptions); - if(ninjaErr != NINJA_SUCCESS) - { - printf("NinjaDestroyRuns: ninjaErr = %d\n", ninjaErr); - } - - // clear the progress values for the next set of runs - //runProgress.clear(); - - //futureWatcher->deleteLater(); - - return; } } else if (state.isPointInitializationValid) @@ -536,7 +515,7 @@ void MainWindow::solveButtonClicked() ); if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaGenerateSingleTimeObject: ninjaErr = " << ninjaErr; + qDebug() << "NinjaGenerateSingleTimeObject: ninjaErr =" << ninjaErr; } outYear[0] = endYear; @@ -545,7 +524,8 @@ void MainWindow::solveButtonClicked() outHour[0] = endHour; outMinute[0] = endMinute; } - else { + else + { ninjaErr = NinjaGetTimeList( year.data(), month.data(), day.data(), hour.data(), minute.data(), @@ -555,19 +535,26 @@ void MainWindow::solveButtonClicked() ); if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaGetTimeList: ninjaErr = " << ninjaErr; + qDebug() << "NinjaGetTimeList: ninjaErr =" << ninjaErr; } } - numNinjas = ui->weatherStationDataTimestepsSpinBox->value(); + if(ninjaErr == NINJA_SUCCESS) + { + numNinjas = ui->weatherStationDataTimestepsSpinBox->value(); - ninjaArmy = NinjaMakePointArmy( - outYear.data(), outMonth.data(), outDay.data(), - outHour.data(), outMinute.data(), nTimeSteps, - DEMTimeZone.toUtf8().data(), stationFileNames.data(), - stationFileNames.size(), DEMPath.toUtf8().data(), - true, momentumFlag, papszOptions - ); + ninjaErr = NinjaMakePointArmy( ninjaArmy, + outYear.data(), outMonth.data(), outDay.data(), + outHour.data(), outMinute.data(), nTimeSteps, + DEMTimeZone.toUtf8().data(), stationFileNames.data(), + stationFileNames.size(), DEMPath.toUtf8().data(), + true, momentumFlag, papszOptions + ); + if(ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaMakePointArmy: ninjaErr =" << ninjaErr; + } + } } else { @@ -588,7 +575,7 @@ void MainWindow::solveButtonClicked() ); if (ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaGenerateSingleTimeObject: ninjaErr = " << ninjaErr; + qDebug() << "NinjaGenerateSingleTimeObject: ninjaErr =" << ninjaErr; } QVector yearVec = { outYear }; @@ -600,15 +587,22 @@ void MainWindow::solveButtonClicked() numNinjas = 1; int nTimeSteps = 1; - ninjaArmy = NinjaMakePointArmy( - yearVec.data(), monthVec.data(), dayVec.data(), - hourVec.data(), minuteVec.data(), nTimeSteps, - DEMTimeZone.toUtf8().data(), - stationFileNames.data(), - static_cast(stationFileNames.size()), - DEMPath.toUtf8().data(), - true, momentumFlag, papszOptions - ); + if(ninjaErr == NINJA_SUCCESS) + { + ninjaErr = NinjaMakePointArmy( ninjaArmy, + yearVec.data(), monthVec.data(), dayVec.data(), + hourVec.data(), minuteVec.data(), nTimeSteps, + DEMTimeZone.toUtf8().data(), + stationFileNames.data(), + static_cast(stationFileNames.size()), + DEMPath.toUtf8().data(), + true, momentumFlag, papszOptions + ); + if(ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaMakePointArmy =" << ninjaErr; + } + } } } else @@ -633,8 +627,37 @@ void MainWindow::solveButtonClicked() inputTimeList[i] = strdup(str.c_str()); // allocate and copy each string } - ninjaArmy = NinjaMakeWeatherModelArmy(filePath.c_str(), timeZone.c_str(), inputTimeList, timeListSize, ui->momentumSolverCheckBox->isChecked(), papszOptions); + ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), timeZone.c_str(), inputTimeList, timeListSize, ui->momentumSolverCheckBox->isChecked(), papszOptions); + if(ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaMakeWeatherModelArmy =" << ninjaErr; + } } + + if(ninjaErr != NINJA_SUCCESS) + { + progressDialog->setValue(maxProgress); + progressDialog->setCancelButtonText("Close"); + + // do cleanup before the return, similar to finishedSolve() + + //disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); + + char **papszOptions = nullptr; + int ninjaErr = NinjaDestroyArmy(ninjaArmy, papszOptions); + if(ninjaErr != NINJA_SUCCESS) + { + printf("NinjaDestroyRuns: ninjaErr = %d\n", ninjaErr); + } + + // clear the progress values for the next set of runs + //runProgress.clear(); + + //futureWatcher->deleteLater(); + + return; + } + writeToConsole(QString::number( numNinjas ) + " runs initialized. Starting solver..."); maxProgress = numNinjas*100; diff --git a/src/gui/weatherModelInput.cpp b/src/gui/weatherModelInput.cpp index 381fe0d98..f02622191 100644 --- a/src/gui/weatherModelInput.cpp +++ b/src/gui/weatherModelInput.cpp @@ -217,7 +217,7 @@ void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged(const QItem ui->weatherModelTimeTreeView->selectAll(); ninjaErr = NinjaFreeWeatherModelTimeList(timeList, timeListSize); - if(ninjaErr == NINJA_SUCCESS) + if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaFreeWeatherModelTimeList: ninjaErr=" << ninjaErr; } diff --git a/src/ninja/cli.cpp b/src/ninja/cli.cpp index bd4a611c9..6c099a190 100644 --- a/src/ninja/cli.cpp +++ b/src/ninja/cli.cpp @@ -1437,21 +1437,10 @@ int windNinjaCLI(int argc, char* argv[]) } //STATION_FETCH - /* - windsim.Com = new ninjaCLIComHandler(); - int r = -1; - windsim.Com->runNumber = &r; - char msg[1024]; - windsim.Com->lastMsg = msg; - */ - //For loop over all ninjas (just 1 ninja unless it's a weather model run)-------------------- for(int i_ = 0; i_ < windsim.getSize(); i_++) { - //Set ninja communication---------------------------------------------------------- - windsim.setNinjaCommunication(i_, i_, ninjaComClass::ninjaCLICom ); - windsim.setNumberCPUs( i_, vm["num_threads"].as() ); //windsim.ninjas[i_].readInputFile(*elevation_file); diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 5deb8ab96..4237d130e 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -131,6 +131,9 @@ void ninjaArmy::makePointArmy(std::vector timeList, string timeZone, string stationFileName, string demFile, bool matchPoints, bool momentumFlag) { +//Com->ninjaCom(ninjaComClass::ninjaFailure, "forcing an error message in ninjaArmy::makePointArmy."); +//throw std::runtime_error("forcing an error message in ninjaArmy::makePointArmy."); +Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makePointArmy."); vector stationList; boost::posix_time::ptime noTime; //interpolate raw data to actual time steps @@ -151,6 +154,12 @@ void ninjaArmy::makePointArmy(std::vector timeList, for(unsigned int i=0; icomType ); + if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) + { + setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); + } } boost::local_time::tz_database tz_db; @@ -361,6 +370,9 @@ const char* ninjaArmy::fetchForecast(const char* wx_model_type, unsigned int num */ void ninjaArmy::makeWeatherModelArmy(std::string forecastFilename, std::string timeZone, std::vector times, bool momentumFlag) { +//Com->ninjaCom(ninjaComClass::ninjaFailure, "forcing an error message in ninjaArmy::makeWeatherModelArmy."); +//throw std::runtime_error("forcing an error message in ninjaArmy::makeWeatherModelArmy."); +Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeWeatherModelArmy."); wxModelInitialization* model; tz = timeZone; @@ -369,9 +381,7 @@ void ninjaArmy::makeWeatherModelArmy(std::string forecastFilename, std::string t if( strstr( forecastFilename.c_str(), ".csv" ) ){ FILE *fcastList = VSIFOpen( forecastFilename.c_str(), "r" ); if(fcastList == NULL){ - //ninjas hasn't been sized yet - //which i to even use for ninjas? - //ninjas[ninjas.size()-1]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Forecast list %s cannot be opened.", forecastFilename.c_str()); + Com->ninjaCom(ninjaComClass::ninjaFailure, "Forecast list %s cannot be opened.", forecastFilename.c_str()); throw std::runtime_error(std::string("Forecast list ") + forecastFilename.c_str() + std::string(" cannot be opened.")); } @@ -400,6 +410,12 @@ void ninjaArmy::makeWeatherModelArmy(std::string forecastFilename, std::string t #else ninjas[i] = new ninja(); #endif //NINJAFOAM + + setNinjaCommunication( i, i, *Com->comType ); + if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) + { + setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); + } } std::vector timeList = model->getTimeList(timeZone); @@ -425,8 +441,7 @@ void ninjaArmy::makeWeatherModelArmy(std::string forecastFilename, std::string t } catch(armyException &e) { - //which i to even use for ninjas? - ninjas[ninjas.size()-1]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Bad forecast file, exiting"); + Com->ninjaCom(ninjaComClass::ninjaFailure, "Bad forecast file, exiting"); throw; } std::vector timeList = model->getTimeList(timeZone); @@ -447,6 +462,12 @@ void ninjaArmy::makeWeatherModelArmy(std::string forecastFilename, std::string t #else ninjas[i] = new ninja(); #endif + + setNinjaCommunication( i, i, *Com->comType ); + if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) + { + setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); + } } diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 84f0acecc..7996e3bdb 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -89,6 +89,7 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaInitializeArmy() * Avaliable Creation Options: * None * + * \param army An opaque handle to a valid ninjaArmy. * \param numNinjas The number of runs to create. * \param momentumFlag Flag specifying if the mass and momentum solver should be used. * \param speedList List of wind speeds to simulate. @@ -153,13 +154,13 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy // // reinterpret_cast( army )->setUniCloudCover( i, cloudCoverList[i], std::string( cloudCoverUnits ) ); } - - return NINJA_SUCCESS; } catch( ... ) { return NINJA_E_INVALID; } + + return NINJA_SUCCESS; } /** @@ -173,6 +174,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy * Avaliable Creation Options: * None * + * \param army An opaque handle to a valid ninjaArmy. * \param yearList A pointer to an array of years. * \param monthList A pointer to an array of months. * \param dayList A pointer to an array of days. @@ -187,8 +189,8 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy * * \return An opaque handle to a ninjaArmy on success, NULL otherwise. */ -WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakePointArmy - ( int * yearList, int * monthList, int * dayList, int * hourList, int * minuteList, int timeListSize, char * timeZone, const char ** stationFileNames, int numStationFiles, char * elevationFile, bool matchPointsFlag, bool momentumFlag, char ** options) +WINDNINJADLL_EXPORT NinjaErr NinjaMakePointArmy + ( NinjaArmyH * army, int * yearList, int * monthList, int * dayList, int * hourList, int * minuteList, int timeListSize, char * timeZone, const char ** stationFileNames, int numStationFiles, char * elevationFile, bool matchPointsFlag, bool momentumFlag, char ** options) { wxStation::SetStationFormat(wxStation::newFormat); if(momentumFlag == true) @@ -196,7 +198,6 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakePointArmy throw std::runtime_error("The momentum solver is not available for use with Point Initialization runs."); } - NinjaArmyH* army; try { std::vector timeList; @@ -211,7 +212,6 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakePointArmy } pointInitialization::storeFileNames(sFiles); - army = reinterpret_cast( new ninjaArmy() ); reinterpret_cast( army )->makePointArmy ( timeList, std::string(timeZone), @@ -219,13 +219,17 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakePointArmy std::string(elevationFile), matchPointsFlag, momentumFlag); - return army; } catch( armyException & e ) { - return NULL; + return NINJA_E_INVALID; } - return NULL; + //catch( ... ) + //{ + // return NINJA_E_INVALID; + //} + + return NINJA_SUCCESS; } /** @@ -239,6 +243,7 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakePointArmy * None * TODO: include parameters for start/stop times and a list of timesteps as options->for cases where you don't want to simulate every time step in the forecast file * + * \param army An opaque handle to a valid ninjaArmy. * \param forecastFilename A valid NOMADS/UCAR based weather model file. * \param timezone a timezone string representing a valid timezone, e.g. * America/Boise. @@ -248,13 +253,13 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakePointArmy * * \return An opaque handle to a ninjaArmy on success, NULL otherwise. */ -WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakeWeatherModelArmy - ( const char * forecastFilename, const char * timeZone, const char** inputTimeList, int size, bool momentumFlag, char ** options ) +WINDNINJADLL_EXPORT NinjaErr NinjaMakeWeatherModelArmy + ( NinjaArmyH * army, const char * forecastFilename, const char * timeZone, const char** inputTimeList, int size, bool momentumFlag, char ** options ) { #ifndef NINJAFOAM if(momentumFlag == true) { - throw std::runtime_error("bMomentumFlag cannot be set to true. WindNinja was not compiled with mass and momentum support."); + throw std::runtime_error("momentumFlag cannot be set to true. WindNinja was not compiled with mass and momentum support."); } #endif @@ -275,24 +280,24 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaMakeWeatherModelArmy } } - NinjaArmyH* army; try { - army = reinterpret_cast( new ninjaArmy() ); - reinterpret_cast( army )->makeWeatherModelArmy ( std::string( forecastFilename ), std::string( timeZone ), timeList, momentumFlag ); - return army; } catch( armyException & e ) { - return NULL; + return NINJA_E_INVALID; } + //catch( ... ) + //{ + // return NINJA_E_INVALID; + //} - return NULL; + return NINJA_SUCCESS; } WINDNINJADLL_EXPORT NinjaToolsH* NinjaMakeTools() @@ -770,50 +775,21 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetNumberCPUs } } -WINDNINJADLL_EXPORT NinjaErr NinjaSetArmyCommunication - ( NinjaArmyH * army, const char * comType, char ** papszOptions ) -{ - if( NULL != army ) - { - return reinterpret_cast( army )->setNinjaCommunication - ( std::string( comType ) ); - } - else - { - return NINJA_E_NULL_PTR; - } -} - -WINDNINJADLL_EXPORT NinjaErr NinjaSetArmyComProgressFunc - ( NinjaArmyH * army, ProgressFunc func, void *pUser, char ** papszOptions ) -{ - if( NULL != army ) - { - return reinterpret_cast( army )->setNinjaComProgressFunc - ( func, pUser ); - } - else - { - return NINJA_E_NULL_PTR; - } -} - /** * \brief Set the communication handler for simulations. * * \param army An opaque handle to a valid ninjaArmy. - * \param nIndex The run to apply the setting to. - * \param comType Type of communication. For now, comType is always "cli". + * \param comType Type of communication. * * \return NINJA_SUCCESS on success, non-zero otherwise. */ WINDNINJADLL_EXPORT NinjaErr NinjaSetCommunication - ( NinjaArmyH * army, const int nIndex, const char * comType, char ** papszOptions ) + ( NinjaArmyH * army, const char * comType, char ** papszOptions ) { if( NULL != army ) { return reinterpret_cast( army )->setNinjaCommunication - ( nIndex, std::string( comType ) ); + ( std::string( comType ) ); } else { @@ -822,12 +798,12 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetCommunication } WINDNINJADLL_EXPORT NinjaErr NinjaSetComProgressFunc - ( NinjaArmyH * army, const int nIndex, ProgressFunc func, void *pUser, char ** papszOptions ) + ( NinjaArmyH * army, ProgressFunc func, void *pUser, char ** papszOptions ) { if( NULL != army ) { return reinterpret_cast( army )->setNinjaComProgressFunc - ( nIndex, func, pUser ); + ( func, pUser ); } else { diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index db4844986..519b67729 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -93,14 +93,14 @@ typedef int NinjaErr; // const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char* airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options); //TODO: add helper function to generate arrays of years, months, days, hours, and minutes from a station file - WINDNINJADLL_EXPORT NinjaArmyH * NinjaMakePointArmy - ( int * yearList, int * monthList, int * dayList, int * hourList, int * minuteList, int timeListSize, char * timeZone, const char ** stationFileNames, int numStationFiles, char * elevationFile, bool matchPointsFlag, bool momentumFlag, char ** options); + WINDNINJADLL_EXPORT NinjaErr NinjaMakePointArmy + ( NinjaArmyH * ninjaArmy, int * yearList, int * monthList, int * dayList, int * hourList, int * minuteList, int timeListSize, char * timeZone, const char ** stationFileNames, int numStationFiles, char * elevationFile, bool matchPointsFlag, bool momentumFlag, char ** options); //TODO: add helper function to get first and last timesteps in a forecast file //TODO: add helper function to get list of times in a forecast file //TODO: include parameters for start/stop times and a list of timesteps as options->for cases where you don't want to simulate every time step in the forecast file - WINDNINJADLL_EXPORT NinjaArmyH * NinjaMakeWeatherModelArmy - ( const char * forecastFilename, const char * timeZone, const char** inputTimeList, int size, bool momentumFlag, char ** options ); + WINDNINJADLL_EXPORT NinjaErr NinjaMakeWeatherModelArmy + ( NinjaArmyH * ninjaArmy, const char * forecastFilename, const char * timeZone, const char** inputTimeList, int size, bool momentumFlag, char ** options ); WINDNINJADLL_EXPORT NinjaToolsH * NinjaMakeTools(); @@ -171,17 +171,11 @@ typedef int NinjaErr; ( NinjaArmyH * ninjaArmy, const int nIndex, const int nCPUs, char ** options ); /* Communication */ - WINDNINJADLL_EXPORT NinjaErr NinjaSetArmyCommunication - ( NinjaArmyH * ninjaArmy, const char * comType, char ** options ); - - WINDNINJADLL_EXPORT NinjaErr NinjaSetArmyComProgressFunc - ( NinjaArmyH * ninjaArmy, ProgressFunc func, void *pUser, char ** options ); - WINDNINJADLL_EXPORT NinjaErr NinjaSetCommunication - ( NinjaArmyH * ninjaArmy, const int nIndex, const char * comType, char ** options ); + ( NinjaArmyH * ninjaArmy, const char * comType, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaSetComProgressFunc - ( NinjaArmyH * ninjaArmy, const int nIndex, ProgressFunc func, void *pUser, char ** options ); + ( NinjaArmyH * ninjaArmy, ProgressFunc func, void *pUser, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaSetMultiComStream ( NinjaArmyH * ninjaArmy, const int nIndex, FILE* stream, char ** options ); From 69737ab4f8c3ac4b5852198d87bd59326881d4dd Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 10 Dec 2025 10:15:40 -0700 Subject: [PATCH 304/435] Added weather model glossary and combo box tool tips, for #637 --- src/gui/weatherModelInput.cpp | 18 ++++++++++++++++++ src/gui/weatherModelInput.h | 19 +++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/gui/weatherModelInput.cpp b/src/gui/weatherModelInput.cpp index 03a2ec7d4..502b333d3 100644 --- a/src/gui/weatherModelInput.cpp +++ b/src/gui/weatherModelInput.cpp @@ -110,6 +110,24 @@ void WeatherModelInput::weatherModelComboBoxCurrentIndexChanged(int index) return; } + QStringList tooltipList; + QString weatherModel = ui->weatherModelComboBox->currentText(); + for(int i = 0; i < modelGlossary.size(); i++) + { + int pos = modelGlossary[i].indexOf('='); + if (pos <= 0) + { + continue; + } + + QString key = modelGlossary[i].left(pos); + if(weatherModel.contains(key, Qt::CaseInsensitive)) + { + tooltipList << modelGlossary[i].mid(pos + 1); + } + } + ui->weatherModelComboBox->setToolTip(tooltipList.join(", ")); + QByteArray modelIdentifierByte = ui->weatherModelComboBox->currentText().toUtf8(); const char* modelIdentifier = modelIdentifierByte.constData(); int starHour, endHour; diff --git a/src/gui/weatherModelInput.h b/src/gui/weatherModelInput.h index 5463475de..3f0736e51 100644 --- a/src/gui/weatherModelInput.h +++ b/src/gui/weatherModelInput.h @@ -53,7 +53,6 @@ class WeatherModelInput : public QObject public slots: void updateTreeView(); - private slots: void weatherModelDownloadButtonClicked(); void weatherModelFileTreeViewItemSelectionChanged(const QItemSelection &selected); @@ -63,13 +62,29 @@ private slots: void weatherModelComboBoxCurrentIndexChanged(int index); private: - Ui::MainWindow *ui; NinjaToolsH* ninjaTools; NinjaErr ninjaErr; + + Ui::MainWindow *ui; QFileSystemModel *fileModel; QStandardItemModel *timeModel; QProgressDialog *progress; QFutureWatcher *futureWatcher; + const QVector modelGlossary = { + "UCAR=University Corporation for Atmospheric Research", + "NOMADS=NOAA Operational Model Archive and Distribution System", + "GCP=Google Cloud Platform", + "NDFD=National Digital Forecast Database", + "NAM=North American Mesoscale", + "RAP=Rapid Refresh", + "HRRR=High-Resolution Rapid Refresh", + "GFS=Global Forecast System", + "HIRES=High Resolution", + "NEST=Nested", + "ARW=Advanced Research WRF", + "NMM=Non-hydrostatic Mesoscale Model", + "NBM=National Blend of Models" + }; }; #endif // WEATHERMODELINPUT_H From 810685ff2d3c7115624dfa2e2a2aa64bb297b966 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 10 Dec 2025 12:24:40 -0700 Subject: [PATCH 305/435] fixed some of the C-API test functions, at least enough to show that the C-API can still compile and the main ninjaArmy ninjaCom methods should still work in the C-API, other C-API test functions will require a bunch more work to get updated to the current C-API methods. for issue #582, related to issue #639 and issue #666 --- autotest/api/test_capi_domain_average_wind.c | 41 +++++++++++++------- src/ninja/windninja.cpp | 4 +- src/ninja/windninja.h | 4 +- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/autotest/api/test_capi_domain_average_wind.c b/autotest/api/test_capi_domain_average_wind.c index 639e811f5..52265edd0 100644 --- a/autotest/api/test_capi_domain_average_wind.c +++ b/autotest/api/test_capi_domain_average_wind.c @@ -41,11 +41,11 @@ int main() const char * comType = "cli"; //communication type is always set to "cli" const int nCPUs = 4; char ** papszOptions = NULL; - NinjaErr err = 0; + NinjaErr err = 0; err = NinjaInit(papszOptions); //initialize global singletons and environments (GDAL_DATA, etc.) if(err != NINJA_SUCCESS) { - printf("NinjaInit: err = %d\n", err); + printf("NinjaInit: err = %d\n", err); } /* @@ -93,13 +93,34 @@ int main() //const double meshResolution = 300.0; const char * meshResolutionUnits = "m"; - /* - * Create the army + bool matchedPoints = true; // for point initialization, but currently required as an input to SetInitializationMethod(). Should the match points pointInitialization algorythm be run, or should it just run as a domainAvgRun on the input wind field. ALWAYS set to true unless you know what you are doing. + + /* + * Initialize the army */ - ninjaArmy = NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speedList, speedUnits, directionList, year, month, day, hour, minute, timezone, air, airUnits, cloud, cloudUnits, papszOptions); + ninjaArmy = NinjaInitializeArmy(); if( NULL == ninjaArmy ) { - printf("NinjaCreateArmy: ninjaArmy = NULL\n"); + printf("NinjaInitializeArmy: ninjaArmy = NULL\n"); + } + + /* + * Set the ninja communication + */ + err = NinjaSetCommunication(ninjaArmy, comType, papszOptions); + if(err != NINJA_SUCCESS) + { + printf("NinjaSetCommunication: err = %d\n", err); + } + + /* + * Create the army + */ + err = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speedList, speedUnits, directionList, papszOptions); + //err = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speedList, speedUnits, directionList, year, month, day, hour, minute, timezone, air, airUnits, cloud, cloudUnits, papszOptions); + if( err != NINJA_SUCCESS) + { + printf("NinjaMakeDomainAverageArmy: err = %d\n", err); } /* @@ -110,19 +131,13 @@ int main() /* * Sets Simulation Variables */ - err = NinjaSetCommunication(ninjaArmy, i, comType, papszOptions); - if(err != NINJA_SUCCESS) - { - printf("NinjaSetCommunication: err = %d\n", err); - } - err = NinjaSetNumberCPUs(ninjaArmy, i, nCPUs, papszOptions); if(err != NINJA_SUCCESS) { printf("NinjaSetNumberCPUs: err = %d\n", err); } - err = NinjaSetInitializationMethod(ninjaArmy, i, initializationMethod, papszOptions); + err = NinjaSetInitializationMethod(ninjaArmy, i, initializationMethod, matchedPoints, papszOptions); if(err != NINJA_SUCCESS) { printf("NinjaSetInitializationMethod: err = %d\n", err); diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 7996e3bdb..0396ad07e 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -1990,11 +1990,11 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetGoogLineWidth * \return NINJA_SUCCESS on success, non-zero otherwise. */ WINDNINJADLL_EXPORT NinjaErr NinjaSetGoogColor - ( NinjaArmyH * army, const int nIndex, std::string colorScheme, bool scaling, char ** papszOptions ) + ( NinjaArmyH * army, const int nIndex, const char * colorScheme, bool scaling, char ** papszOptions ) { if( NULL != army ) { - return reinterpret_cast( army )->setGoogColor(nIndex, colorScheme, scaling); + return reinterpret_cast( army )->setGoogColor(nIndex, std::string( colorScheme ), scaling); } else { diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 519b67729..29aea2de5 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -67,7 +67,7 @@ #endif #include -#include +#include WN_C_START @@ -331,7 +331,7 @@ typedef int NinjaErr; ( NinjaArmyH * ninjaArmy, const int nIndex, const char * scaling, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaSetGoogColor - ( NinjaArmyH * army, const int nIndex, std::string colorScheme, bool scaling, char ** papszOptions ); + ( NinjaArmyH * army, const int nIndex, const char * colorScheme, bool scaling, char ** papszOptions ); WINDNINJADLL_EXPORT NinjaErr NinjaSetGoogLineWidth ( NinjaArmyH * ninjaArmy, const int nIndex, const double width, char ** papszOptions ); From 282a4eeebda2b97e342496942f0da50dac9b03b9 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 11 Dec 2025 11:07:37 -0700 Subject: [PATCH 306/435] moved the redundantly shared/copied ninjaCom data members from WindNinjaInputs into ninjaCom, removing the pointer property of those members from ninjaCom. Also did some cleanup/fixup to the ninjaCom related constructors, copy constructors, assignment operators, and destructors. For issue #639, related to issue #666. still some remaining cleanup to do, but the changes don't appear to cause any multithreading or ninjaCom related issues so far. Tested the qt6 gui, the cli, and the "test_capi_domain_average_wind.c" C-API auto-test function --- src/ninja/WindNinjaInputs.cpp | 4 +- src/ninja/WindNinjaInputs.h | 7 +--- src/ninja/ninja.cpp | 35 +++++++++------- src/ninja/ninjaArmy.cpp | 75 +++++++++++++++++++++++++---------- src/ninja/ninjaArmy.h | 9 +++-- src/ninja/ninjaCom.cpp | 35 ++++++++-------- src/ninja/ninjaCom.h | 8 ++-- 7 files changed, 102 insertions(+), 71 deletions(-) diff --git a/src/ninja/WindNinjaInputs.cpp b/src/ninja/WindNinjaInputs.cpp index 517cc8dd1..d8bf7479b 100644 --- a/src/ninja/WindNinjaInputs.cpp +++ b/src/ninja/WindNinjaInputs.cpp @@ -33,6 +33,7 @@ WindNinjaInputs::WindNinjaInputs() : ninjaTime(boost::local_time::not_a_date_time) { //Initialize variables + Com = NULL; hSpdMemDs = NULL; hDirMemDs = NULL; hDustMemDs = NULL; @@ -223,8 +224,7 @@ WindNinjaInputs &WindNinjaInputs::operator=(const WindNinjaInputs &rhs) { if(&rhs != this) { - //ninjaCom stuff - Com = NULL; //must be set to null! + Com = NULL; // must be set to null! Gets created fresh in set_ninjaCommunication() armySize = rhs.armySize; hSpdMemDs = rhs.hSpdMemDs; hDirMemDs = rhs.hDirMemDs; diff --git a/src/ninja/WindNinjaInputs.h b/src/ninja/WindNinjaInputs.h index b2efe9043..3c0e5a1a0 100644 --- a/src/ninja/WindNinjaInputs.h +++ b/src/ninja/WindNinjaInputs.h @@ -106,12 +106,9 @@ struct WindNinjaInputs * Base input data passed to "simulate_wind()" *-----------------------------------------------------------------------------*/ - - ninjaComClass *Com; //pointer to a com handler for the specific communication type desired - char lastComString[NINJA_MSG_SIZE]; int inputsRunNumber; - ninjaComClass::eNinjaCom inputsComType; - + ninjaComClass *Com; //pointer to a com handler for the specific communication type desired + int armySize; GDALDatasetH hSpdMemDs; GDALDatasetH hDirMemDs; diff --git a/src/ninja/ninja.cpp b/src/ninja/ninja.cpp index df2b33e89..5e1d281bf 100644 --- a/src/ninja/ninja.cpp +++ b/src/ninja/ninja.cpp @@ -77,12 +77,12 @@ ninja::ninja() "150" ) ); CPLDebug( "NINJA", "Maximum match iterations set to: %d", nMaxMatchingIters ); - //ninjaCom stuff - input.lastComString[0] = '\0'; + // ninjaCom stuff input.inputsRunNumber = 0; - input.inputsComType = ninjaComClass::ninjaDefaultCom; input.Com = new ninjaComClass(); - input.Com->comType = &input.inputsComType; + input.Com->runNumber = input.inputsRunNumber; +// input.Com->comType = ninjaComClass::ninjaDefaultCom; +// input.Com->lastMsg[0] = '\0'; } /**Ninja destructor @@ -125,13 +125,12 @@ ninja::ninja(const ninja &rhs) , mesh(rhs.mesh) , input(rhs.input) { - input.Com = NULL; //must be set to null! + input.Com = NULL; // must be set to null! Gets created fresh in set_ninjaCommunication() set_ninjaCommunication(rhs.get_inputsRunNumber(), rhs.get_inputsComType()); -// set_ninjaMultiComStream(rhs.input.Com.multiStream); // is this even a valid way to deal with the FILE* pointer? Seems like there might be smarter ways to do this - strcpy( input.lastComString, rhs.get_lastComString() ); +// set_ninjaMultiComStream(rhs.input.Com->multiStream); // is this even a valid way to deal with the FILE* pointer? Seems like there might be smarter ways to do this + strcpy( input.Com->lastMsg, rhs.get_lastComString() ); input.Com->fpLog = rhs.get_ComLogFp(); - cancel = rhs.cancel; alphaH = rhs.alphaH; isNullRun = rhs.isNullRun; @@ -184,6 +183,12 @@ ninja &ninja::operator=(const ninja &rhs) { if(&rhs != this) { + input.Com = NULL; // must be set to null! Gets created fresh in set_ninjaCommunication() + set_ninjaCommunication(rhs.get_inputsRunNumber(), rhs.get_inputsComType()); +// set_ninjaMultiComStream(rhs.input.Com->multiStream); // is this even a valid way to deal with the FILE* pointer? Seems like there might be smarter ways to do this + strcpy( input.Com->lastMsg, rhs.get_lastComString() ); + input.Com->fpLog = rhs.get_ComLogFp(); + AngleGrid = rhs.AngleGrid; VelocityGrid = rhs.VelocityGrid; CloudGrid = rhs.CloudGrid; @@ -3547,17 +3552,17 @@ void ninja::set_DEM(const double* dem, const int nXSize, const int nYSize, void ninja::set_ninjaCommunication(int RunNumber, ninjaComClass::eNinjaCom comType) { - input.inputsComType = comType; + input.inputsRunNumber = RunNumber; if(input.Com) delete input.Com; input.Com = new ninjaComClass(); - input.Com->comType = &input.inputsComType; - input.inputsRunNumber = RunNumber; - input.Com->runNumber = &input.inputsRunNumber; - input.Com->lastMsg = input.lastComString; + input.Com->runNumber = input.inputsRunNumber; + input.Com->comType = comType; +// input.Com->lastMsg[0] = '\0'; + //input.Com->lastMsg = input.lastComString; } void ninja::set_ninjaComProgressFunc(ProgressFunc func, void *pUser) @@ -3577,12 +3582,12 @@ int ninja::get_inputsRunNumber() const ninjaComClass::eNinjaCom ninja::get_inputsComType() const { - return input.inputsComType; + return input.Com->comType; } char * ninja::get_lastComString() const { - return (char*)input.lastComString; + return (char*)input.Com->lastMsg; } FILE * ninja::get_ComLogFp() const diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 4237d130e..bb9e0a02e 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -35,6 +35,12 @@ ninjaArmy::ninjaArmy() : writeFarsiteAtmFile(false) { + Com = NULL; +// Com = new ninjaComClass(); +// Com->runNumber = 0; +//// Com->comType = ninjaComClass::ninjaDefaultCom; +//// Com->lastMsg[0] = '\0'; + // ninjas.push_back(new ninja()); initLocalData(); } @@ -46,6 +52,13 @@ ninjaArmy::ninjaArmy() */ ninjaArmy::ninjaArmy(const ninjaArmy& A) { + Com = NULL; // must be set to null! Gets created fresh in setNinjaCommunication() + setNinjaCommunication(A.Com->comType); + Com->runNumber = A.Com->runNumber; +// set_ninjaMultiComStream(A.Com->multiStream); // is this even a valid way to deal with the FILE* pointer? Seems like there might be smarter ways to do this + strcpy( Com->lastMsg, A.Com->lastMsg ); + Com->fpLog = A.Com->fpLog; + writeFarsiteAtmFile = A.writeFarsiteAtmFile; ninjas = A.ninjas; copyLocalData( A ); @@ -62,6 +75,8 @@ ninjaArmy::~ninjaArmy() delete ninjas[0]; } destoryLocalData(); + if(Com) + delete Com; } /** @@ -74,7 +89,13 @@ ninjaArmy& ninjaArmy::operator= (ninjaArmy const& A) { if(&A != this) { - Com = NULL; //must be set to null! + Com = NULL; // must be set to null! Gets created fresh in setNinjaCommunication() + setNinjaCommunication(A.Com->comType); + Com->runNumber = A.Com->runNumber; +// set_ninjaMultiComStream(A.Com->multiStream); // is this even a valid way to deal with the FILE* pointer? Seems like there might be smarter ways to do this + strcpy( Com->lastMsg, A.Com->lastMsg ); + Com->fpLog = A.Com->fpLog; + writeFarsiteAtmFile = A.writeFarsiteAtmFile; ninjas = A.ninjas; copyLocalData( A ); @@ -112,7 +133,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeDomainAverageArm ninjas[i] = new ninja(); #endif //NINJAFOAM - setNinjaCommunication( i, i, *Com->comType ); + setNinjaCommunication( i, i, Com->comType ); if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) { setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); @@ -155,7 +176,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makePointArmy."); { ninjas[i] = new ninja(); - setNinjaCommunication( i, i, *Com->comType ); + setNinjaCommunication( i, i, Com->comType ); if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) { setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); @@ -411,7 +432,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeWeatherModelArmy ninjas[i] = new ninja(); #endif //NINJAFOAM - setNinjaCommunication( i, i, *Com->comType ); + setNinjaCommunication( i, i, Com->comType ); if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) { setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); @@ -463,7 +484,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeWeatherModelArmy ninjas[i] = new ninja(); #endif - setNinjaCommunication( i, i, *Com->comType ); + setNinjaCommunication( i, i, Com->comType ); if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) { setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); @@ -1357,37 +1378,48 @@ int ninjaArmy::setNinjaCommunication( std::string comType, std::transform( comType.begin(), comType.end(), comType.begin(), ::tolower ); if( comType == "ninjaCLICom" || comType == "cli" ) { - inputsComType = ninjaComClass::ninjaCLICom; - retval = NINJA_SUCCESS; + retval = setNinjaCommunication( ninjaComClass::ninjaCLICom, papszOptions ); } else if( comType == "ninjaGUICom" || comType == "gui" ) { - inputsComType = ninjaComClass::ninjaGUICom; - retval = NINJA_SUCCESS; + retval = setNinjaCommunication( ninjaComClass::ninjaGUICom, papszOptions ); } else if( comType == "ninjaQuietCom" || comType == "quiet" ) { - inputsComType = ninjaComClass::ninjaQuietCom; - retval = NINJA_SUCCESS; + retval = setNinjaCommunication( ninjaComClass::ninjaQuietCom, papszOptions ); } else { + std::cout << "Invalid input '" << comType + << "' in ninjaArmy::setNinjaCommunication()" + << "\nchoices are: 'ninjaCLICom', 'cli', 'ninjaGUICom', 'gui', 'ninjaQuietCom', 'quiet'" + << std::endl; retval = NINJA_E_INVALID; } + } + catch( ... ) + { + std::cout << "!!!failed to set ninjaArmy level ninjaCom!!!" << std::endl; + return NINJA_E_INVALID; + } - inputsRunNumber = 9999; - lastComString[0] = 'the heck!\0'; + return retval; +} -// if(Com) -// delete Com; +int ninjaArmy::setNinjaCommunication( const ninjaComClass::eNinjaCom comType, + char ** papszOptions ) +{ + try + { + if(Com) + delete Com; - // following ninja.cpp style, might be able to move this and some of the initial value things from the lines above, - // to the ninjaArmy constructor, would then also require copy constructor stuff for the initial value storages Com = new ninjaComClass(); - Com->comType = &inputsComType; - Com->runNumber = &inputsRunNumber; - Com->lastMsg = lastComString; + Com->runNumber = 9999; + Com->comType = comType; +// Com->lastMsg[0] = '\0'; + strcpy(Com->lastMsg, "the heck!\0"); } catch( ... ) { @@ -1395,7 +1427,7 @@ int ninjaArmy::setNinjaCommunication( std::string comType, return NINJA_E_INVALID; } - return retval; + return NINJA_SUCCESS; } int ninjaArmy::setNinjaComProgressFunc( ProgressFunc func, void *pUser, @@ -1413,7 +1445,6 @@ int ninjaArmy::setNinjaComProgressFunc( ProgressFunc func, void *pUser, return NINJA_SUCCESS; } - int ninjaArmy::setNinjaCommunication( const int nIndex, const int RunNumber, const ninjaComClass::eNinjaCom comType, char ** papszOptions ) diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 6a22f1260..000fb30a8 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -141,10 +141,7 @@ class ninjaArmy ninjaArmy& operator= (ninjaArmy const& A); - ninjaComClass *Com; - char lastComString[NINJA_MSG_SIZE]; - int inputsRunNumber; - ninjaComClass::eNinjaCom inputsComType; + ninjaComClass *Com; //pointer to a com handler for the specific communication type desired enum eWxModelType{ ncepNdfd, @@ -187,6 +184,10 @@ class ninjaArmy int setNinjaCommunication( std::string comType, char ** papszOptions = NULL ); + + int setNinjaCommunication( const ninjaComClass::eNinjaCom comType, + char ** papszOptions = NULL ); + int setNinjaComProgressFunc( ProgressFunc func, void *pUser, char ** papszOptions = NULL); diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index 2a3fd469f..b95339076 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -38,9 +38,9 @@ ninjaComClass::ninjaComClass() fpLog = stdout; fpErr = stderr; printLastMsg = false; - lastMsg = NULL; - runNumber = NULL; - comType = NULL; + lastMsg[0] = '\0'; + runNumber = -9999; + comType = ninjaComClass::ninjaDefaultCom; printProgressFunc = false; pfnProgress = nullptr; pProgressUser = nullptr; @@ -116,7 +116,7 @@ void ninjaComClass::ninjaComV(msgType eMsg, const char *fmt, va_list args) ninjaComHandler(eMsg, ninjaMsg); } -//void ninjaComClass::initializeNinjaCom(char *LastMsg, int* RunNumber) +//void ninjaComClass::initializeNinjaCom(char *LastMsg, int RunNumber) //{ // lastMsg = LastMsg; // runNumber = RunNumber; @@ -132,14 +132,11 @@ void ninjaComClass::ninjaComV(msgType eMsg, const char *fmt, va_list args) */ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { - //char* lastMsg; //pointer to last message, points to char in WindNinjaInputs class - //int* runNumber; //pointer to run number, points to int in WindNinjaInputs class - char msg[NINJA_MSG_SIZE]; // Declare a character array to store the result of sprintf, for printing if( printProgressFunc == false || multiStream != NULL ) { - if( runNumber == NULL ) + if( runNumber == -9999 ) { return; } @@ -176,7 +173,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { sprintf( msg, "Run %d: More than %d errors have been reported. " "No more will be reported from now on.\n", - *runNumber, nMaxErrors ); + runNumber, nMaxErrors ); } else { sprintf( msg, "More than %d errors have been reported. " @@ -206,7 +203,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - sprintf( msg, "Run %d: %s\n", *runNumber, ninjaComMsg ); + sprintf( msg, "Run %d: %s\n", runNumber, ninjaComMsg ); } else { sprintf( msg, "%s\n", ninjaComMsg ); @@ -230,7 +227,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - sprintf( msg, "Run %d: %s\n", *runNumber, ninjaComMsg); + sprintf( msg, "Run %d: %s\n", runNumber, ninjaComMsg); } else { sprintf( msg, "%s\n", ninjaComMsg); @@ -256,7 +253,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - sprintf( msg, "Run %d (solver): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + sprintf( msg, "Run %d (solver): %d%% complete\n", runNumber, atoi(ninjaComMsg)); } else { sprintf( msg, "Solver: %d%% complete\n", atoi(ninjaComMsg)); @@ -280,7 +277,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - sprintf( msg, "Run %d (matching): %d%% complete\n", *runNumber, atoi(ninjaComMsg)); + sprintf( msg, "Run %d (matching): %d%% complete\n", runNumber, atoi(ninjaComMsg)); } else { sprintf( msg, "Solver (matching): %d%% complete\n", atoi(ninjaComMsg)); @@ -303,7 +300,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - sprintf( msg, "Run %d (warning): %s\n", *runNumber, ninjaComMsg); + sprintf( msg, "Run %d (warning): %s\n", runNumber, ninjaComMsg); } else { sprintf( msg, "Warning: %s\n", ninjaComMsg); @@ -325,7 +322,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - sprintf( msg, "Run %d (ERROR): %s\n", *runNumber, ninjaComMsg); + sprintf( msg, "Run %d (ERROR): %s\n", runNumber, ninjaComMsg); } else { sprintf( msg, "ERROR: %s\n", ninjaComMsg); @@ -348,7 +345,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( printRunNumber == true ) { - sprintf( msg, "Run %d (ERROR): %s\n", *runNumber, ninjaComMsg); + sprintf( msg, "Run %d (ERROR): %s\n", runNumber, ninjaComMsg); } else { sprintf( msg, "ERROR: %s\n", ninjaComMsg); @@ -370,11 +367,11 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) if( printLastMsg == true ) { - //If message is a Failure or Fatal type, write the string to the NinjaComString which - //can then be read from the ninja class using lastComString + // If message is a Failure or Fatal type, write the string to the lastMsg storage + // which can then be read from ninjaCom using ninja::get_lastComString() if( eMsg == ninjaFailure || eMsg == ninjaFatal ) { - strcpy(lastMsg, ninjaComMsg); //lastMsg points to string in WindNinjaInputs class (which is inherited by the ninja class) + strcpy(lastMsg, ninjaComMsg); // stores the raw message in lastMsg, without any ninjaCom message processing } } // if( printLastMsg == true ) diff --git a/src/ninja/ninjaCom.h b/src/ninja/ninjaCom.h index 5e145babd..0cdf9305d 100644 --- a/src/ninja/ninjaCom.h +++ b/src/ninja/ninjaCom.h @@ -71,9 +71,9 @@ class ninjaComClass } eNinjaCom; bool printLastMsg; - char* lastMsg; //pointer to last message, points to char in WindNinjaInputs class - int* runNumber; //pointer to run number, points to int in WindNinjaInputs class - eNinjaCom* comType; //pointer to communication type, should point to eNinjaCom in WindNinjaInputs class + char lastMsg[NINJA_MSG_SIZE]; // storage of the last message + int runNumber; // run number of the simulation. Can turn this back into a pointer to the value in the WindNinjaInputs class, if the values start to differ + eNinjaCom comType; // communication type bool printProgressFunc; ProgressFunc pfnProgress; @@ -98,7 +98,7 @@ class ninjaComClass void ninjaCom(msgType eMsg, const char *fmt, ...); void ninjaComV(msgType, const char *, va_list); - //void initializeNinjaCom(char *LastMsg, int* RunNumber); + //void initializeNinjaCom(char *LastMsg, int RunNumber); void ninjaComHandler(msgType eMsg, const char *ninjaComMsg); }; From 4ed2c572da125302ab8a1f1806855ec06c4e8f88 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 11 Dec 2025 12:37:09 -0700 Subject: [PATCH 307/435] more cleanup to ninjaCom. Got rid of the unused get_() ninjaCom style functions, just use the direct call to the data in the ninjaCom constructors. For issue #666 related to issue #639 --- src/ninja/ninja.cpp | 36 ++++++++---------------------------- src/ninja/ninja.h | 4 ---- src/ninja/ninjaArmy.cpp | 19 +++++++++++++++++-- src/ninja/ninjaArmy.h | 6 +++++- 4 files changed, 30 insertions(+), 35 deletions(-) diff --git a/src/ninja/ninja.cpp b/src/ninja/ninja.cpp index 5e1d281bf..a46420157 100644 --- a/src/ninja/ninja.cpp +++ b/src/ninja/ninja.cpp @@ -126,10 +126,10 @@ ninja::ninja(const ninja &rhs) , input(rhs.input) { input.Com = NULL; // must be set to null! Gets created fresh in set_ninjaCommunication() - set_ninjaCommunication(rhs.get_inputsRunNumber(), rhs.get_inputsComType()); -// set_ninjaMultiComStream(rhs.input.Com->multiStream); // is this even a valid way to deal with the FILE* pointer? Seems like there might be smarter ways to do this - strcpy( input.Com->lastMsg, rhs.get_lastComString() ); - input.Com->fpLog = rhs.get_ComLogFp(); + set_ninjaCommunication(rhs.input.inputsRunNumber, rhs.input.Com->comType); + set_ninjaMultiComStream(rhs.input.Com->multiStream); + strcpy( input.Com->lastMsg, rhs.input.Com->lastMsg ); + input.Com->fpLog = rhs.input.Com->fpLog; cancel = rhs.cancel; alphaH = rhs.alphaH; @@ -184,10 +184,10 @@ ninja &ninja::operator=(const ninja &rhs) if(&rhs != this) { input.Com = NULL; // must be set to null! Gets created fresh in set_ninjaCommunication() - set_ninjaCommunication(rhs.get_inputsRunNumber(), rhs.get_inputsComType()); -// set_ninjaMultiComStream(rhs.input.Com->multiStream); // is this even a valid way to deal with the FILE* pointer? Seems like there might be smarter ways to do this - strcpy( input.Com->lastMsg, rhs.get_lastComString() ); - input.Com->fpLog = rhs.get_ComLogFp(); + set_ninjaCommunication(rhs.input.inputsRunNumber, rhs.input.Com->comType); + set_ninjaMultiComStream(rhs.input.Com->multiStream); + strcpy( input.Com->lastMsg, rhs.input.Com->lastMsg ); + input.Com->fpLog = rhs.input.Com->fpLog; AngleGrid = rhs.AngleGrid; VelocityGrid = rhs.VelocityGrid; @@ -3575,26 +3575,6 @@ void ninja::set_ninjaMultiComStream(FILE* stream) input.Com->multiStream = stream; } -int ninja::get_inputsRunNumber() const -{ - return input.inputsRunNumber; -} - -ninjaComClass::eNinjaCom ninja::get_inputsComType() const -{ - return input.Com->comType; -} - -char * ninja::get_lastComString() const -{ - return (char*)input.Com->lastMsg; -} - -FILE * ninja::get_ComLogFp() const -{ - return input.Com->fpLog; -} - void ninja::set_progressWeight(double progressWeight) { CPLDebug("NINJA","ADJUSTING PROGRESS BAR WT TO: %f",progressWeight); diff --git a/src/ninja/ninja.h b/src/ninja/ninja.h index 040a13d32..f3170de34 100644 --- a/src/ninja/ninja.h +++ b/src/ninja/ninja.h @@ -168,10 +168,6 @@ class ninja void set_ninjaCommunication(int RunNumber, ninjaComClass::eNinjaCom comType); void set_ninjaComProgressFunc(ProgressFunc func, void *pUser); void set_ninjaMultiComStream(FILE* stream); - int get_inputsRunNumber() const; - ninjaComClass::eNinjaCom get_inputsComType() const; - char * get_lastComString() const; - FILE * get_ComLogFp() const; //returns the Com Log file pointer void set_progressWeight(double progressWeight); //For foam+diurnal simulations /************************************************************* diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index bb9e0a02e..d955ee12b 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -55,7 +55,7 @@ ninjaArmy::ninjaArmy(const ninjaArmy& A) Com = NULL; // must be set to null! Gets created fresh in setNinjaCommunication() setNinjaCommunication(A.Com->comType); Com->runNumber = A.Com->runNumber; -// set_ninjaMultiComStream(A.Com->multiStream); // is this even a valid way to deal with the FILE* pointer? Seems like there might be smarter ways to do this + setNinjaMultiComStream(A.Com->multiStream); strcpy( Com->lastMsg, A.Com->lastMsg ); Com->fpLog = A.Com->fpLog; @@ -92,7 +92,7 @@ ninjaArmy& ninjaArmy::operator= (ninjaArmy const& A) Com = NULL; // must be set to null! Gets created fresh in setNinjaCommunication() setNinjaCommunication(A.Com->comType); Com->runNumber = A.Com->runNumber; -// set_ninjaMultiComStream(A.Com->multiStream); // is this even a valid way to deal with the FILE* pointer? Seems like there might be smarter ways to do this + setNinjaMultiComStream(A.Com->multiStream); strcpy( Com->lastMsg, A.Com->lastMsg ); Com->fpLog = A.Com->fpLog; @@ -1445,6 +1445,21 @@ int ninjaArmy::setNinjaComProgressFunc( ProgressFunc func, void *pUser, return NINJA_SUCCESS; } +int ninjaArmy::setNinjaMultiComStream( FILE* stream, + char ** papszOptions ) +{ + try + { + Com->multiStream = stream; + } + catch( ... ) + { + std::cout << "!!!failed to set ninjaArmy level ninjaCom multiStream FILE pointer!!!" << std::endl; + return NINJA_E_INVALID; + } + return NINJA_SUCCESS; +} + int ninjaArmy::setNinjaCommunication( const int nIndex, const int RunNumber, const ninjaComClass::eNinjaCom comType, char ** papszOptions ) diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 000fb30a8..9a5e0f2f5 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -127,7 +127,8 @@ extern boost::local_time::tz_database globalTimeZoneDB; #include "callbackFunctions.h" -//#include "ninjaCom.h" +#include "ninjaCom.h" + /** * Class used for doing multiple WindNinja runs. */ @@ -191,6 +192,9 @@ class ninjaArmy int setNinjaComProgressFunc( ProgressFunc func, void *pUser, char ** papszOptions = NULL); + int setNinjaMultiComStream( FILE* stream, + char ** papszOptions = NULL); + /** * \brief Initialize the ninja communication of a ninja * From 7264cf7ea345181c6326bba318bbf7952af73f25 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 11 Dec 2025 14:40:35 -0700 Subject: [PATCH 308/435] fully removed "ninjaComType" from ninjaCom, ninjaCom can tell whether it is a GUI, a cli, or a C-API type run via whether the progress callback function and/or the multiStream FILE pointer are set. For issue #666, related to issues #639 and #582 --- autotest/api/test_capi_domain_average_wind.c | 3 +- src/gui/mainWindow.cpp | 2 +- src/ninja/cli.cpp | 2 +- src/ninja/ninja.cpp | 9 +- src/ninja/ninja.h | 2 +- src/ninja/ninjaArmy.cpp | 92 ++------------------ src/ninja/ninjaArmy.h | 11 +-- src/ninja/ninjaCom.cpp | 1 - src/ninja/ninjaCom.h | 11 --- src/ninja/windninja.cpp | 6 +- src/ninja/windninja.h | 2 +- 11 files changed, 20 insertions(+), 121 deletions(-) diff --git a/autotest/api/test_capi_domain_average_wind.c b/autotest/api/test_capi_domain_average_wind.c index 52265edd0..2cc9c7d58 100644 --- a/autotest/api/test_capi_domain_average_wind.c +++ b/autotest/api/test_capi_domain_average_wind.c @@ -38,7 +38,6 @@ int main() * Setting up the simulation */ NinjaArmyH* ninjaArmy = NULL; - const char * comType = "cli"; //communication type is always set to "cli" const int nCPUs = 4; char ** papszOptions = NULL; NinjaErr err = 0; @@ -107,7 +106,7 @@ int main() /* * Set the ninja communication */ - err = NinjaSetCommunication(ninjaArmy, comType, papszOptions); + err = NinjaSetCommunication(ninjaArmy, papszOptions); if(err != NINJA_SUCCESS) { printf("NinjaSetCommunication: err = %d\n", err); diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 8e50adb5f..0ea22fb3e 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -419,7 +419,7 @@ void MainWindow::solveButtonClicked() ninjaArmy = NinjaInitializeArmy(); - ninjaErr = NinjaSetCommunication(ninjaArmy, "gui", papszOptions); + ninjaErr = NinjaSetCommunication(ninjaArmy, papszOptions); if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetCommunication: ninjaErr =" << ninjaErr; diff --git a/src/ninja/cli.cpp b/src/ninja/cli.cpp index 6c099a190..26e48da10 100644 --- a/src/ninja/cli.cpp +++ b/src/ninja/cli.cpp @@ -608,7 +608,7 @@ int windNinjaCLI(int argc, char* argv[]) ninjaArmy windsim; - windsim.setNinjaCommunication( "cli" ); + windsim.setNinjaCommunication(); /* Do we have to fetch an elevation file */ diff --git a/src/ninja/ninja.cpp b/src/ninja/ninja.cpp index a46420157..c3f23969c 100644 --- a/src/ninja/ninja.cpp +++ b/src/ninja/ninja.cpp @@ -81,7 +81,6 @@ ninja::ninja() input.inputsRunNumber = 0; input.Com = new ninjaComClass(); input.Com->runNumber = input.inputsRunNumber; -// input.Com->comType = ninjaComClass::ninjaDefaultCom; // input.Com->lastMsg[0] = '\0'; } @@ -126,7 +125,7 @@ ninja::ninja(const ninja &rhs) , input(rhs.input) { input.Com = NULL; // must be set to null! Gets created fresh in set_ninjaCommunication() - set_ninjaCommunication(rhs.input.inputsRunNumber, rhs.input.Com->comType); + set_ninjaCommunication(rhs.input.inputsRunNumber); set_ninjaMultiComStream(rhs.input.Com->multiStream); strcpy( input.Com->lastMsg, rhs.input.Com->lastMsg ); input.Com->fpLog = rhs.input.Com->fpLog; @@ -184,7 +183,7 @@ ninja &ninja::operator=(const ninja &rhs) if(&rhs != this) { input.Com = NULL; // must be set to null! Gets created fresh in set_ninjaCommunication() - set_ninjaCommunication(rhs.input.inputsRunNumber, rhs.input.Com->comType); + set_ninjaCommunication(rhs.input.inputsRunNumber); set_ninjaMultiComStream(rhs.input.Com->multiStream); strcpy( input.Com->lastMsg, rhs.input.Com->lastMsg ); input.Com->fpLog = rhs.input.Com->fpLog; @@ -3550,7 +3549,7 @@ void ninja::set_DEM(const double* dem, const int nXSize, const int nYSize, input.dem.readFromMemory(dem, nXSize, nYSize, geoRef, prj); } -void ninja::set_ninjaCommunication(int RunNumber, ninjaComClass::eNinjaCom comType) +void ninja::set_ninjaCommunication(int RunNumber) { input.inputsRunNumber = RunNumber; @@ -3560,9 +3559,7 @@ void ninja::set_ninjaCommunication(int RunNumber, ninjaComClass::eNinjaCom comTy input.Com = new ninjaComClass(); input.Com->runNumber = input.inputsRunNumber; - input.Com->comType = comType; // input.Com->lastMsg[0] = '\0'; - //input.Com->lastMsg = input.lastComString; } void ninja::set_ninjaComProgressFunc(ProgressFunc func, void *pUser) diff --git a/src/ninja/ninja.h b/src/ninja/ninja.h index f3170de34..5baa15dbb 100644 --- a/src/ninja/ninja.h +++ b/src/ninja/ninja.h @@ -165,7 +165,7 @@ class ninja /*----------------------------------------------------------------------------- * ninjaCom section *-----------------------------------------------------------------------------*/ - void set_ninjaCommunication(int RunNumber, ninjaComClass::eNinjaCom comType); + void set_ninjaCommunication(int RunNumber); void set_ninjaComProgressFunc(ProgressFunc func, void *pUser); void set_ninjaMultiComStream(FILE* stream); void set_progressWeight(double progressWeight); //For foam+diurnal simulations diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index d955ee12b..5945c4324 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -38,7 +38,6 @@ ninjaArmy::ninjaArmy() Com = NULL; // Com = new ninjaComClass(); // Com->runNumber = 0; -//// Com->comType = ninjaComClass::ninjaDefaultCom; //// Com->lastMsg[0] = '\0'; // ninjas.push_back(new ninja()); @@ -53,7 +52,7 @@ ninjaArmy::ninjaArmy() ninjaArmy::ninjaArmy(const ninjaArmy& A) { Com = NULL; // must be set to null! Gets created fresh in setNinjaCommunication() - setNinjaCommunication(A.Com->comType); + setNinjaCommunication(); Com->runNumber = A.Com->runNumber; setNinjaMultiComStream(A.Com->multiStream); strcpy( Com->lastMsg, A.Com->lastMsg ); @@ -90,7 +89,7 @@ ninjaArmy& ninjaArmy::operator= (ninjaArmy const& A) if(&A != this) { Com = NULL; // must be set to null! Gets created fresh in setNinjaCommunication() - setNinjaCommunication(A.Com->comType); + setNinjaCommunication(); Com->runNumber = A.Com->runNumber; setNinjaMultiComStream(A.Com->multiStream); strcpy( Com->lastMsg, A.Com->lastMsg ); @@ -133,7 +132,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeDomainAverageArm ninjas[i] = new ninja(); #endif //NINJAFOAM - setNinjaCommunication( i, i, Com->comType ); + setNinjaCommunication( i, i ); if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) { setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); @@ -176,7 +175,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makePointArmy."); { ninjas[i] = new ninja(); - setNinjaCommunication( i, i, Com->comType ); + setNinjaCommunication( i, i ); if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) { setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); @@ -432,7 +431,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeWeatherModelArmy ninjas[i] = new ninja(); #endif //NINJAFOAM - setNinjaCommunication( i, i, Com->comType ); + setNinjaCommunication( i, i ); if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) { setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); @@ -484,7 +483,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeWeatherModelArmy ninjas[i] = new ninja(); #endif - setNinjaCommunication( i, i, Com->comType ); + setNinjaCommunication( i, i ); if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) { setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); @@ -1369,45 +1368,7 @@ void ninjaArmy::setAtmFlags() * Ninja Communication Methods *-----------------------------------------------------------------------------*/ -int ninjaArmy::setNinjaCommunication( std::string comType, - char ** papszOptions ) -{ - int retval = NINJA_E_INVALID; - try - { - std::transform( comType.begin(), comType.end(), comType.begin(), ::tolower ); - if( comType == "ninjaCLICom" || comType == "cli" ) - { - retval = setNinjaCommunication( ninjaComClass::ninjaCLICom, papszOptions ); - } - else if( comType == "ninjaGUICom" || comType == "gui" ) - { - retval = setNinjaCommunication( ninjaComClass::ninjaGUICom, papszOptions ); - } - else if( comType == "ninjaQuietCom" || comType == "quiet" ) - { - retval = setNinjaCommunication( ninjaComClass::ninjaQuietCom, papszOptions ); - } - else - { - std::cout << "Invalid input '" << comType - << "' in ninjaArmy::setNinjaCommunication()" - << "\nchoices are: 'ninjaCLICom', 'cli', 'ninjaGUICom', 'gui', 'ninjaQuietCom', 'quiet'" - << std::endl; - retval = NINJA_E_INVALID; - } - } - catch( ... ) - { - std::cout << "!!!failed to set ninjaArmy level ninjaCom!!!" << std::endl; - return NINJA_E_INVALID; - } - - return retval; -} - -int ninjaArmy::setNinjaCommunication( const ninjaComClass::eNinjaCom comType, - char ** papszOptions ) +int ninjaArmy::setNinjaCommunication( char ** papszOptions ) { try { @@ -1417,7 +1378,6 @@ int ninjaArmy::setNinjaCommunication( const ninjaComClass::eNinjaCom comType, Com = new ninjaComClass(); Com->runNumber = 9999; - Com->comType = comType; // Com->lastMsg[0] = '\0'; strcpy(Com->lastMsg, "the heck!\0"); } @@ -1461,44 +1421,10 @@ int ninjaArmy::setNinjaMultiComStream( FILE* stream, } int ninjaArmy::setNinjaCommunication( const int nIndex, const int RunNumber, - const ninjaComClass::eNinjaCom comType, - char ** papszOptions ) + char ** papszOptions ) { IF_VALID_INDEX_TRY( nIndex, ninjas, - ninjas[ nIndex ]->set_ninjaCommunication( RunNumber, comType ) ); -} - -int ninjaArmy::setNinjaCommunication( const int nIndex, std::string comType, - char ** papszOptions ) -{ - int retval = NINJA_E_INVALID; - IF_VALID_INDEX( nIndex, ninjas ) - { - std::transform( comType.begin(), comType.end(), comType.begin(), ::tolower ); - if( comType == "ninjaCLICom" || comType == "cli" ) - { - ninjas[ nIndex ]->set_ninjaCommunication - ( nIndex, ninjaComClass::ninjaCLICom ); - retval = NINJA_SUCCESS; - } - else if( comType == "ninjaGUICom" || comType == "gui" ) - { - ninjas[ nIndex ]->set_ninjaCommunication - ( nIndex, ninjaComClass::ninjaGUICom ); - retval = NINJA_SUCCESS; - } - else if( comType == "ninjaQuietCom" || comType == "quiet" ) - { - ninjas[ nIndex ]->set_ninjaCommunication - ( nIndex, ninjaComClass::ninjaQuietCom ); - retval = NINJA_SUCCESS; - } - else - { - retval = NINJA_E_INVALID; - } - } - return retval; + ninjas[ nIndex ]->set_ninjaCommunication( RunNumber ) ); } int ninjaArmy::setNinjaComProgressFunc( const int nIndex, ProgressFunc func, void *pUser, diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 9a5e0f2f5..f0110591b 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -183,11 +183,7 @@ class ninjaArmy * Ninja Communication Methods *-----------------------------------------------------------------------------*/ - int setNinjaCommunication( std::string comType, - char ** papszOptions = NULL ); - - int setNinjaCommunication( const ninjaComClass::eNinjaCom comType, - char ** papszOptions = NULL ); + int setNinjaCommunication( char ** papszOptions = NULL ); int setNinjaComProgressFunc( ProgressFunc func, void *pUser, char ** papszOptions = NULL); @@ -200,19 +196,14 @@ class ninjaArmy * * \param nIndex index of a ninja * \param RunNumber number of runs - * \param comType type of communication * \return errval Returns NINJA_SUCCESS upon success */ int setNinjaCommunication( const int nIndex, const int RunNumber, - const ninjaComClass::eNinjaCom comType, char ** papszOptions = NULL ); int setNinjaComProgressFunc( const int nIndex, ProgressFunc func, void *pUser, char ** papszOptions = NULL); - int setNinjaCommunication( const int nIndex, std::string comType, - char ** papszOptions = NULL); - /** * \brief Initialize the message communication multi-stream FILE of a ninja * diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index b95339076..4c46d3dcd 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -40,7 +40,6 @@ ninjaComClass::ninjaComClass() printLastMsg = false; lastMsg[0] = '\0'; runNumber = -9999; - comType = ninjaComClass::ninjaDefaultCom; printProgressFunc = false; pfnProgress = nullptr; pProgressUser = nullptr; diff --git a/src/ninja/ninjaCom.h b/src/ninja/ninjaCom.h index 0cdf9305d..3d625bb0b 100644 --- a/src/ninja/ninjaCom.h +++ b/src/ninja/ninjaCom.h @@ -60,20 +60,9 @@ class ninjaComClass ninjaFatal } msgType; - typedef enum - { - ninjaDefaultCom, - ninjaQuietCom, - ninjaLoggingCom, - ninjaGUICom, - WFDSSCom, - ninjaCLICom - } eNinjaCom; - bool printLastMsg; char lastMsg[NINJA_MSG_SIZE]; // storage of the last message int runNumber; // run number of the simulation. Can turn this back into a pointer to the value in the WindNinjaInputs class, if the values start to differ - eNinjaCom comType; // communication type bool printProgressFunc; ProgressFunc pfnProgress; diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 0396ad07e..4640e80a6 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -779,17 +779,15 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetNumberCPUs * \brief Set the communication handler for simulations. * * \param army An opaque handle to a valid ninjaArmy. - * \param comType Type of communication. * * \return NINJA_SUCCESS on success, non-zero otherwise. */ WINDNINJADLL_EXPORT NinjaErr NinjaSetCommunication - ( NinjaArmyH * army, const char * comType, char ** papszOptions ) + ( NinjaArmyH * army, char ** papszOptions ) { if( NULL != army ) { - return reinterpret_cast( army )->setNinjaCommunication - ( std::string( comType ) ); + return reinterpret_cast( army )->setNinjaCommunication(); } else { diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 29aea2de5..2f229231e 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -172,7 +172,7 @@ typedef int NinjaErr; /* Communication */ WINDNINJADLL_EXPORT NinjaErr NinjaSetCommunication - ( NinjaArmyH * ninjaArmy, const char * comType, char ** options ); + ( NinjaArmyH * ninjaArmy, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaSetComProgressFunc ( NinjaArmyH * ninjaArmy, ProgressFunc func, void *pUser, char ** options ); From b9ef02eaa2e1c49b2378236060ba2dda9b5d99ef Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 12 Dec 2025 13:44:01 -0700 Subject: [PATCH 309/435] Fixed date time displays and downloading for pastcasts, for #637 --- src/gui/mainWindow.ui | 31 +++++++++++++++++++++++-------- src/gui/weatherModelInput.cpp | 29 +++++++++++++++++++++++++---- src/gui/weatherModelInput.h | 1 + src/ninja/windninja.cpp | 30 ++++++++++++++++++++++++++++-- src/ninja/windninja.h | 2 +- 5 files changed, 78 insertions(+), 15 deletions(-) diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index fa3a62d61..5713d90ee 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -456,7 +456,7 @@ QFrame::Shadow::Sunken - 5 + 11 @@ -742,8 +742,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 578 - 480 + 538 + 419 @@ -1355,7 +1355,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 572 + 346 661 @@ -1815,8 +1815,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 586 - 488 + 502 + 399 @@ -2351,15 +2351,30 @@ li.checked::marker { content: "\2612"; } + + false + + + M/d/yy h:mm  + + + true + - Qt::TimeSpec::UTC + Qt::TimeSpec::LocalTime + + M/d/yy h:mm  + + + true + - Qt::TimeSpec::UTC + Qt::TimeSpec::LocalTime diff --git a/src/gui/weatherModelInput.cpp b/src/gui/weatherModelInput.cpp index 502b333d3..fddcbcbcb 100644 --- a/src/gui/weatherModelInput.cpp +++ b/src/gui/weatherModelInput.cpp @@ -36,8 +36,14 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) ninjaTools = NinjaMakeTools(); ui->pastcastGroupBox->hide(); - ui->pastcastStartDateTimeEdit->setDateTime(QDateTime::currentDateTimeUtc().addDays(-1)); - ui->pastcastEndDateTimeEdit->setDateTime(QDateTime::currentDateTimeUtc()); + + QDateTime dt1 = ui->pastcastStartDateTimeEdit->dateTime(); + dt1.setTimeSpec(Qt::OffsetFromUTC); + dt1.setOffsetFromUtc(0); + + QDateTime dt2 = ui->pastcastEndDateTimeEdit->dateTime(); + dt2.setTimeSpec(Qt::OffsetFromUTC); + dt2.setOffsetFromUtc(0); int identifiersSize = 0; const char** identifiers = NinjaGetAllWeatherModelIdentifiers(ninjaTools, &identifiersSize); @@ -49,20 +55,25 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) NinjaFreeAllWeatherModelIdentifiers(identifiers, identifiersSize); weatherModelComboBoxCurrentIndexChanged(0); + updatePastcastDateTimeEdits(); connect(ui->weatherModelGroupBox, &QGroupBox::toggled, this, &WeatherModelInput::weatherModelGroupBoxToggled); connect(ui->weatherModelDownloadButton, &QPushButton::clicked, this, &WeatherModelInput::weatherModelDownloadButtonClicked); connect(ui->weatherModelComboBox, &QComboBox::currentIndexChanged, this, &WeatherModelInput::weatherModelComboBoxCurrentIndexChanged); connect(ui->weatherModelTimeSelectAllButton, &QPushButton::clicked, this, &WeatherModelInput::weatherModelTimeSelectAllButtonClicked); connect(ui->weatherModelTimeSelectNoneButton, &QPushButton::clicked, this, &WeatherModelInput::weatherModelTimeSelectNoneButtonClicked); + connect(ui->timeZoneComboBox, &QComboBox::currentTextChanged, this, &WeatherModelInput::updatePastcastDateTimeEdits); } void WeatherModelInput::weatherModelDownloadButtonClicked() { QByteArray modelIdentifierByte = ui->weatherModelComboBox->currentText().toUtf8(); - QByteArray demFileByte = ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8(); + QByteArray demFileByte = ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8(); + QByteArray timeZoneByte = ui->timeZoneComboBox->currentText().toUtf8(); + const char* modelIdentifier = modelIdentifierByte.constData(); const char* demFile = demFileByte.constData(); + const char* timeZone = timeZoneByte.constData(); int hours = ui->weatherModelSpinBox->value(); if(ui->weatherModelComboBox->currentText().contains("PASTCAST")) @@ -84,7 +95,7 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() int endDay = endDate.day(); int endHour = endTime.hour(); - ninjaErr = NinjaFetchArchiveWeatherData(ninjaTools, modelIdentifier, demFile, startYear, startMonth, startDay, startHour, endYear, endMonth, endDay, endHour); + ninjaErr = NinjaFetchArchiveWeatherData(ninjaTools, modelIdentifier, demFile, timeZone, startYear, startMonth, startDay, startHour, endYear, endMonth, endDay, endHour); if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaFetchArchiveWeatherData: ninjaErr=" << ninjaErr; @@ -281,3 +292,13 @@ void WeatherModelInput::weatherModelTimeSelectNoneButtonClicked() ui->weatherModelTimeTreeView->clearSelection(); } +void WeatherModelInput::updatePastcastDateTimeEdits() +{ + QTimeZone zone( ui->timeZoneComboBox->currentText().toUtf8()); + QDateTime demTime = QDateTime::currentDateTime().toTimeZone(zone); + demTime.setTimeSpec(Qt::LocalTime); // Has to be set to avoid unnecessary conversions, use timeZoneComboBox for time zone info + + ui->pastcastStartDateTimeEdit->setDateTime(demTime); + ui->pastcastEndDateTimeEdit->setDateTime(demTime); +} + diff --git a/src/gui/weatherModelInput.h b/src/gui/weatherModelInput.h index 3f0736e51..da25344dc 100644 --- a/src/gui/weatherModelInput.h +++ b/src/gui/weatherModelInput.h @@ -52,6 +52,7 @@ class WeatherModelInput : public QObject public slots: void updateTreeView(); + void updatePastcastDateTimeEdits(); private slots: void weatherModelDownloadButtonClicked(); diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 5f58c2ddd..26f594a15 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -313,17 +313,43 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchWeatherData } WINDNINJADLL_EXPORT NinjaErr NinjaFetchArchiveWeatherData - (NinjaToolsH* tools, const char* modelName, const char* demFile, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour) + (NinjaToolsH* tools, const char* modelName, const char* demFile, const char* timeZone, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour) { wxModelInitialization *model = wxModelInitializationFactory::makeWxInitializationFromId(std::string(modelName)); boost::gregorian::date startDate(startYear, startMonth, startDay); boost::gregorian::date endDate(endYear, endMonth, endDay); + // Load timezone database + boost::local_time::tz_database tz_db; + tz_db.load_from_file( FindDataPath("date_time_zonespec.csv") ); + boost::local_time::time_zone_ptr timeZonePtr; + timeZonePtr = tz_db.time_zone_from_region(timeZone); + + boost::local_time::local_date_time ldtStart( + startDate, + boost::posix_time::hours(startHour), + timeZonePtr, + boost::local_time::local_date_time::NOT_DATE_TIME_ON_ERROR + ); + + boost::local_time::local_date_time ldtEnd( + endDate, + boost::posix_time::hours(endHour), + timeZonePtr, + boost::local_time::local_date_time::NOT_DATE_TIME_ON_ERROR + ); + + boost::posix_time::ptime startUTC = ldtStart.utc_time(); + boost::posix_time::ptime endUTC = ldtEnd.utc_time(); + int hours = 0; auto* forecastModel = dynamic_cast(model); - forecastModel->setDateTime(startDate, endDate, boost::lexical_cast(startHour), boost::lexical_cast(endHour)); + forecastModel->setDateTime(startUTC.date(), + endUTC.date(), + boost::lexical_cast(startUTC.time_of_day().hours()), + boost::lexical_cast(endUTC.time_of_day().hours())); forecastModel->fetchForecast(demFile, hours); return NINJA_SUCCESS; diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 9dc4056e3..083819d7c 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -106,7 +106,7 @@ typedef int NinjaErr; (NinjaToolsH* tools, const char* modelName, const char* demFile, int hours); WINDNINJADLL_EXPORT NinjaErr NinjaFetchArchiveWeatherData - (NinjaToolsH* tools, const char* modelName, const char* demFile, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour); + (NinjaToolsH* tools, const char* modelName, const char* demFile, const char * timeZone, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour); WINDNINJADLL_EXPORT const char** NinjaGetAllWeatherModelIdentifiers(NinjaToolsH* tools, int* count); From ffba937aefb6f0fb95f0b1098c3af4f8e350b096 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 12 Dec 2025 17:01:52 -0700 Subject: [PATCH 310/435] Initial work for progress dialog box for weather model inputs, for #637 --- src/gui/weatherModelInput.cpp | 102 ++++++++++++++++++++++++---------- src/gui/weatherModelInput.h | 5 ++ src/ninja/windninja.cpp | 1 - 3 files changed, 78 insertions(+), 30 deletions(-) diff --git a/src/gui/weatherModelInput.cpp b/src/gui/weatherModelInput.cpp index fddcbcbcb..1c12095d4 100644 --- a/src/gui/weatherModelInput.cpp +++ b/src/gui/weatherModelInput.cpp @@ -72,42 +72,86 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() QByteArray timeZoneByte = ui->timeZoneComboBox->currentText().toUtf8(); const char* modelIdentifier = modelIdentifierByte.constData(); - const char* demFile = demFileByte.constData(); - const char* timeZone = timeZoneByte.constData(); + const char* demFile = demFileByte.constData(); + const char* timeZone = timeZoneByte.constData(); int hours = ui->weatherModelSpinBox->value(); - if(ui->weatherModelComboBox->currentText().contains("PASTCAST")) - { - QDateTime startDateTime = ui->pastcastStartDateTimeEdit->dateTime(); - QDateTime endDateTime = ui->pastcastEndDateTimeEdit->dateTime(); - - QDate startDate = startDateTime.date(); - QTime startTime = startDateTime.time(); - int startYear = startDate.year(); - int startMonth = startDate.month(); - int startDay = startDate.day(); - int startHour = startTime.hour(); - - QDate endDate = endDateTime.date(); - QTime endTime = endDateTime.time(); - int endYear = endDate.year(); - int endMonth = endDate.month(); - int endDay = endDate.day(); - int endHour = endTime.hour(); - - ninjaErr = NinjaFetchArchiveWeatherData(ninjaTools, modelIdentifier, demFile, timeZone, startYear, startMonth, startDay, startHour, endYear, endMonth, endDay, endHour); - if (ninjaErr != NINJA_SUCCESS) - { - qDebug() << "NinjaFetchArchiveWeatherData: ninjaErr=" << ninjaErr; - } + progress = new QProgressDialog("Fetching Forecast Data...", QString(), 0, 0, ui->centralwidget); + progress->setWindowModality(Qt::WindowModal); + progress->setCancelButton(nullptr); + progress->setMinimumDuration(0); + progress->setAutoClose(true); + progress->show(); - return; + futureWatcher = new QFutureWatcher(this); + + QFuture future; + if (ui->weatherModelComboBox->currentText().contains("PASTCAST")) + { + QDateTime start = ui->pastcastStartDateTimeEdit->dateTime(); + QDateTime end = ui->pastcastEndDateTimeEdit->dateTime(); + + future = QtConcurrent::run( + WeatherModelInput::fetchPastcastWeather, + ninjaTools, modelIdentifier, demFile, timeZone, + start.date().year(), start.date().month(), start.date().day(), start.time().hour(), + end.date().year(), end.date().month(), end.date().day(), end.time().hour() + ); + } + else + { + future = QtConcurrent::run( + WeatherModelInput::fetchForecastWeather, + ninjaTools, modelIdentifier, demFile, hours + ); } - ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, hours); + futureWatcher->setFuture(future); + + connect(futureWatcher, &QFutureWatcher::finished, + this, &WeatherModelInput::weatherModelDownloadFinished); +} + +int WeatherModelInput::fetchForecastWeather(NinjaToolsH* ninjaTools, + const char* modelIdentifier, + const char* demFile, + int hours) +{ + NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, hours); + if (ninjaErr != NINJA_SUCCESS) + qDebug() << "NinjaFetchWeatherData: ninjaErr =" << ninjaErr; + return ninjaErr; +} + +int WeatherModelInput::fetchPastcastWeather(NinjaToolsH* ninjaTools, + const char* modelIdentifier, + const char* demFile, + const char* timeZone, + int startYear, int startMonth, int startDay, int startHour, + int endYear, int endMonth, int endDay, int endHour) +{ + NinjaErr ninjaErr = NinjaFetchArchiveWeatherData( + ninjaTools, modelIdentifier, demFile, timeZone, + startYear, startMonth, startDay, startHour, + endYear, endMonth, endDay, endHour + ); if (ninjaErr != NINJA_SUCCESS) + qDebug() << "NinjaFetchArchiveWeatherData: ninjaErr =" << ninjaErr; + return ninjaErr; +} + +void WeatherModelInput::weatherModelDownloadFinished() +{ + if (progress) + { + progress->close(); + progress->deleteLater(); + progress = nullptr; + } + if (futureWatcher) { - qDebug() << "NinjaFetchWeatherData: ninjaErr=" << ninjaErr; + futureWatcher->deleteLater(); + futureWatcher = nullptr; } } diff --git a/src/gui/weatherModelInput.h b/src/gui/weatherModelInput.h index da25344dc..3f8aa4a1f 100644 --- a/src/gui/weatherModelInput.h +++ b/src/gui/weatherModelInput.h @@ -39,6 +39,7 @@ #include #include #include +#include #include class WeatherModelInput : public QObject @@ -61,6 +62,7 @@ private slots: void weatherModelTimeSelectNoneButtonClicked(); void weatherModelGroupBoxToggled(bool toggled); void weatherModelComboBoxCurrentIndexChanged(int index); + void weatherModelDownloadFinished(); private: NinjaToolsH* ninjaTools; @@ -86,6 +88,9 @@ private slots: "NMM=Non-hydrostatic Mesoscale Model", "NBM=National Blend of Models" }; + static int fetchForecastWeather(NinjaToolsH* ninjaTools, const char* modelIdentifier, const char* demFile, int hours); + + static int fetchPastcastWeather(NinjaToolsH* ninjaTools, const char* modelIdentifier, const char* demFile, const char* timeZone, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour); }; #endif // WEATHERMODELINPUT_H diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 26f594a15..c2ce772a1 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -320,7 +320,6 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchArchiveWeatherData boost::gregorian::date startDate(startYear, startMonth, startDay); boost::gregorian::date endDate(endYear, endMonth, endDay); - // Load timezone database boost::local_time::tz_database tz_db; tz_db.load_from_file( FindDataPath("date_time_zonespec.csv") ); boost::local_time::time_zone_ptr timeZonePtr; From b0a97a42c37b1360c851aaa0be1b455ff6c07f93 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 12 Dec 2025 17:22:22 -0700 Subject: [PATCH 311/435] Moved byte variables to API wrapper functions to prevent memory issues, for #637 --- src/gui/weatherModelInput.cpp | 42 ++++++++++++++++++++++++++--------- src/gui/weatherModelInput.h | 12 ++++++++-- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/src/gui/weatherModelInput.cpp b/src/gui/weatherModelInput.cpp index 1c12095d4..a628a291f 100644 --- a/src/gui/weatherModelInput.cpp +++ b/src/gui/weatherModelInput.cpp @@ -93,7 +93,10 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() future = QtConcurrent::run( WeatherModelInput::fetchPastcastWeather, - ninjaTools, modelIdentifier, demFile, timeZone, + ninjaTools, + ui->weatherModelComboBox->currentText(), + ui->elevationInputFileLineEdit->property("fullpath").toString(), + ui->timeZoneComboBox->currentText(), start.date().year(), start.date().month(), start.date().day(), start.time().hour(), end.date().year(), end.date().month(), end.date().day(), end.time().hour() ); @@ -102,7 +105,10 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() { future = QtConcurrent::run( WeatherModelInput::fetchForecastWeather, - ninjaTools, modelIdentifier, demFile, hours + ninjaTools, + ui->weatherModelComboBox->currentText(), + ui->elevationInputFileLineEdit->property("fullpath").toString(), + hours ); } @@ -113,10 +119,16 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() } int WeatherModelInput::fetchForecastWeather(NinjaToolsH* ninjaTools, - const char* modelIdentifier, - const char* demFile, - int hours) + const QString& modelIdentifierStr, + const QString& demFileStr, + int hours) { + QByteArray modelIdentifierByte = modelIdentifierStr.toUtf8(); + QByteArray demFileByte = demFileStr.toUtf8(); + + const char* modelIdentifier = modelIdentifierByte.constData(); + const char* demFile = demFileByte.constData(); + NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, hours); if (ninjaErr != NINJA_SUCCESS) qDebug() << "NinjaFetchWeatherData: ninjaErr =" << ninjaErr; @@ -124,19 +136,29 @@ int WeatherModelInput::fetchForecastWeather(NinjaToolsH* ninjaTools, } int WeatherModelInput::fetchPastcastWeather(NinjaToolsH* ninjaTools, - const char* modelIdentifier, - const char* demFile, - const char* timeZone, - int startYear, int startMonth, int startDay, int startHour, - int endYear, int endMonth, int endDay, int endHour) + const QString& modelIdentifierStr, + const QString& demFileStr, + const QString& timeZoneStr, + int startYear, int startMonth, int startDay, int startHour, + int endYear, int endMonth, int endDay, int endHour) { + QByteArray modelIdentifierByte = modelIdentifierStr.toUtf8(); + QByteArray demFileByte = demFileStr.toUtf8(); + QByteArray timeZoneByte = timeZoneStr.toUtf8(); + + const char* modelIdentifier = modelIdentifierByte.constData(); + const char* demFile = demFileByte.constData(); + const char* timeZone = timeZoneByte.constData(); + NinjaErr ninjaErr = NinjaFetchArchiveWeatherData( ninjaTools, modelIdentifier, demFile, timeZone, startYear, startMonth, startDay, startHour, endYear, endMonth, endDay, endHour ); + if (ninjaErr != NINJA_SUCCESS) qDebug() << "NinjaFetchArchiveWeatherData: ninjaErr =" << ninjaErr; + return ninjaErr; } diff --git a/src/gui/weatherModelInput.h b/src/gui/weatherModelInput.h index 3f8aa4a1f..cf4847681 100644 --- a/src/gui/weatherModelInput.h +++ b/src/gui/weatherModelInput.h @@ -88,9 +88,17 @@ private slots: "NMM=Non-hydrostatic Mesoscale Model", "NBM=National Blend of Models" }; - static int fetchForecastWeather(NinjaToolsH* ninjaTools, const char* modelIdentifier, const char* demFile, int hours); + static int fetchForecastWeather(NinjaToolsH* ninjaTools, + const QString& modelIdentifierStr, + const QString& demFileStr, + int hours); - static int fetchPastcastWeather(NinjaToolsH* ninjaTools, const char* modelIdentifier, const char* demFile, const char* timeZone, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour); + static int fetchPastcastWeather(NinjaToolsH* ninjaTools, + const QString& modelIdentifierStr, + const QString& demFileStr, + const QString& timeZoneStr, + int startYear, int startMonth, int startDay, int startHour, + int endYear, int endMonth, int endDay, int endHour); }; #endif // WEATHERMODELINPUT_H From bea11d89bba56a4e344fead6e3bdad7c4b0184f2 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 15 Dec 2025 16:31:31 -0700 Subject: [PATCH 312/435] General clean-up and added time conversions for minimum pastcast datetime (issue with text is known, think its a problem with the style), for #637 --- src/gui/mainWindow.ui | 11 +++- src/gui/weatherModelInput.cpp | 96 +++++++++++++++++------------------ src/gui/weatherModelInput.h | 24 +++++---- 3 files changed, 71 insertions(+), 60 deletions(-) diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index 5713d90ee..6c2cdffa5 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -2345,8 +2345,17 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + - Earlierst Pastcast Date: 07/30/2014 // UTC or local time? + Minimum Pastcast Date: 07/30/2014 18:00 + + + false diff --git a/src/gui/weatherModelInput.cpp b/src/gui/weatherModelInput.cpp index a628a291f..ca75e0ffc 100644 --- a/src/gui/weatherModelInput.cpp +++ b/src/gui/weatherModelInput.cpp @@ -36,22 +36,12 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) ninjaTools = NinjaMakeTools(); ui->pastcastGroupBox->hide(); - - QDateTime dt1 = ui->pastcastStartDateTimeEdit->dateTime(); - dt1.setTimeSpec(Qt::OffsetFromUTC); - dt1.setOffsetFromUtc(0); - - QDateTime dt2 = ui->pastcastEndDateTimeEdit->dateTime(); - dt2.setTimeSpec(Qt::OffsetFromUTC); - dt2.setOffsetFromUtc(0); - int identifiersSize = 0; const char** identifiers = NinjaGetAllWeatherModelIdentifiers(ninjaTools, &identifiersSize); for (int i = 0; i < identifiersSize; i++) { ui->weatherModelComboBox->addItem(identifiers[i]); } - NinjaFreeAllWeatherModelIdentifiers(identifiers, identifiersSize); weatherModelComboBoxCurrentIndexChanged(0); @@ -66,14 +56,7 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) } void WeatherModelInput::weatherModelDownloadButtonClicked() -{ - QByteArray modelIdentifierByte = ui->weatherModelComboBox->currentText().toUtf8(); - QByteArray demFileByte = ui->elevationInputFileLineEdit->property("fullpath").toString().toUtf8(); - QByteArray timeZoneByte = ui->timeZoneComboBox->currentText().toUtf8(); - - const char* modelIdentifier = modelIdentifierByte.constData(); - const char* demFile = demFileByte.constData(); - const char* timeZone = timeZoneByte.constData(); +{ int hours = ui->weatherModelSpinBox->value(); progress = new QProgressDialog("Fetching Forecast Data...", QString(), 0, 0, ui->centralwidget); @@ -84,10 +67,12 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() progress->show(); futureWatcher = new QFutureWatcher(this); - QFuture future; + if (ui->weatherModelComboBox->currentText().contains("PASTCAST")) { + progress->setLabelText("Fetching Pastcast Data..."); + QDateTime start = ui->pastcastStartDateTimeEdit->dateTime(); QDateTime end = ui->pastcastEndDateTimeEdit->dateTime(); @@ -98,8 +83,7 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() ui->elevationInputFileLineEdit->property("fullpath").toString(), ui->timeZoneComboBox->currentText(), start.date().year(), start.date().month(), start.date().day(), start.time().hour(), - end.date().year(), end.date().month(), end.date().day(), end.time().hour() - ); + end.date().year(), end.date().month(), end.date().day(), end.time().hour()); } else { @@ -108,8 +92,7 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() ninjaTools, ui->weatherModelComboBox->currentText(), ui->elevationInputFileLineEdit->property("fullpath").toString(), - hours - ); + hours); } futureWatcher->setFuture(future); @@ -118,37 +101,42 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() this, &WeatherModelInput::weatherModelDownloadFinished); } -int WeatherModelInput::fetchForecastWeather(NinjaToolsH* ninjaTools, - const QString& modelIdentifierStr, - const QString& demFileStr, - int hours) +int WeatherModelInput::fetchForecastWeather( + NinjaToolsH* ninjaTools, + const QString& modelIdentifierStr, + const QString& demFileStr, + int hours) { - QByteArray modelIdentifierByte = modelIdentifierStr.toUtf8(); - QByteArray demFileByte = demFileStr.toUtf8(); + QByteArray modelIdentifierTemp = modelIdentifierStr.toUtf8(); + QByteArray demFileTemp = demFileStr.toUtf8(); - const char* modelIdentifier = modelIdentifierByte.constData(); - const char* demFile = demFileByte.constData(); + const char* modelIdentifier = modelIdentifierTemp.constData(); + const char* demFile = demFileTemp.constData(); NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, hours); if (ninjaErr != NINJA_SUCCESS) + { qDebug() << "NinjaFetchWeatherData: ninjaErr =" << ninjaErr; + } + return ninjaErr; } -int WeatherModelInput::fetchPastcastWeather(NinjaToolsH* ninjaTools, - const QString& modelIdentifierStr, - const QString& demFileStr, - const QString& timeZoneStr, - int startYear, int startMonth, int startDay, int startHour, - int endYear, int endMonth, int endDay, int endHour) +int WeatherModelInput::fetchPastcastWeather( + NinjaToolsH* ninjaTools, + const QString& modelIdentifierStr, + const QString& demFileStr, + const QString& timeZoneStr, + int startYear, int startMonth, int startDay, int startHour, + int endYear, int endMonth, int endDay, int endHour) { - QByteArray modelIdentifierByte = modelIdentifierStr.toUtf8(); - QByteArray demFileByte = demFileStr.toUtf8(); - QByteArray timeZoneByte = timeZoneStr.toUtf8(); + QByteArray modelIdentifierTemp = modelIdentifierStr.toUtf8(); + QByteArray demFileTemp = demFileStr.toUtf8(); + QByteArray timeZoneTemp = timeZoneStr.toUtf8(); - const char* modelIdentifier = modelIdentifierByte.constData(); - const char* demFile = demFileByte.constData(); - const char* timeZone = timeZoneByte.constData(); + const char* modelIdentifier = modelIdentifierTemp.constData(); + const char* demFile = demFileTemp.constData(); + const char* timeZone = timeZoneTemp.constData(); NinjaErr ninjaErr = NinjaFetchArchiveWeatherData( ninjaTools, modelIdentifier, demFile, timeZone, @@ -157,7 +145,9 @@ int WeatherModelInput::fetchPastcastWeather(NinjaToolsH* ninjaTools, ); if (ninjaErr != NINJA_SUCCESS) + { qDebug() << "NinjaFetchArchiveWeatherData: ninjaErr =" << ninjaErr; + } return ninjaErr; } @@ -209,7 +199,7 @@ void WeatherModelInput::weatherModelComboBoxCurrentIndexChanged(int index) const char* modelIdentifier = modelIdentifierByte.constData(); int starHour, endHour; - ninjaErr = NinjaGetWeatherModelHours(ninjaTools, modelIdentifier, &starHour, &endHour); + NinjaErr ninjaErr = NinjaGetWeatherModelHours(ninjaTools, modelIdentifier, &starHour, &endHour); if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaGetWeatherModelHours: ninjaErr=" << ninjaErr; @@ -321,7 +311,7 @@ void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged(const QItem ui->weatherModelTimeTreeView->selectAll(); - ninjaErr = NinjaFreeWeatherModelTimeList(timeList, timeListSize); + NinjaErr ninjaErr = NinjaFreeWeatherModelTimeList(timeList, timeListSize); if(ninjaErr == NINJA_SUCCESS) { qDebug() << "NinjaFreeWeatherModelTimeList: ninjaErr=" << ninjaErr; @@ -360,9 +350,19 @@ void WeatherModelInput::weatherModelTimeSelectNoneButtonClicked() void WeatherModelInput::updatePastcastDateTimeEdits() { - QTimeZone zone( ui->timeZoneComboBox->currentText().toUtf8()); - QDateTime demTime = QDateTime::currentDateTime().toTimeZone(zone); - demTime.setTimeSpec(Qt::LocalTime); // Has to be set to avoid unnecessary conversions, use timeZoneComboBox for time zone info + QTimeZone timeZone(ui->timeZoneComboBox->currentText().toUtf8()); + + // Update Minimum Time + QDate earliestDate(2014, 7, 30); + QDateTime utcDateTime(earliestDate, QTime(18, 0), Qt::UTC); + QDateTime localDateTime = utcDateTime.toTimeZone(timeZone); + ui->pastcastGroupBox->setTitle("Earliest Pastcast Datetime: " + localDateTime.toString("MM/dd/yyyy hh:mm")); + ui->pastcastGroupBox->updateGeometry(); + + // Update Date Time Edits + QDateTime demTime = QDateTime::currentDateTime().toTimeZone(timeZone); + // Has to be set to avoid unnecessary conversions, use timeZoneComboBox for time zone info + demTime.setTimeSpec(Qt::LocalTime); ui->pastcastStartDateTimeEdit->setDateTime(demTime); ui->pastcastEndDateTimeEdit->setDateTime(demTime); diff --git a/src/gui/weatherModelInput.h b/src/gui/weatherModelInput.h index cf4847681..84e0eb6e9 100644 --- a/src/gui/weatherModelInput.h +++ b/src/gui/weatherModelInput.h @@ -66,7 +66,6 @@ private slots: private: NinjaToolsH* ninjaTools; - NinjaErr ninjaErr; Ui::MainWindow *ui; QFileSystemModel *fileModel; @@ -88,17 +87,20 @@ private slots: "NMM=Non-hydrostatic Mesoscale Model", "NBM=National Blend of Models" }; - static int fetchForecastWeather(NinjaToolsH* ninjaTools, - const QString& modelIdentifierStr, - const QString& demFileStr, - int hours); - static int fetchPastcastWeather(NinjaToolsH* ninjaTools, - const QString& modelIdentifierStr, - const QString& demFileStr, - const QString& timeZoneStr, - int startYear, int startMonth, int startDay, int startHour, - int endYear, int endMonth, int endDay, int endHour); + static int fetchForecastWeather( + NinjaToolsH* ninjaTools, + const QString& modelIdentifierStr, + const QString& demFileStr, + int hours); + + static int fetchPastcastWeather( + NinjaToolsH* ninjaTools, + const QString& modelIdentifierStr, + const QString& demFileStr, + const QString& timeZoneStr, + int startYear, int startMonth, int startDay, int startHour, + int endYear, int endMonth, int endDay, int endHour); }; #endif // WEATHERMODELINPUT_H From 15864a0c44476efa3835322fa37c990da44a4ddb Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 16 Dec 2025 14:43:55 -0700 Subject: [PATCH 313/435] more cleanup to ninjaCom, including enabling and testing a multiStream log file in the "test_capi_domain_average_wind.c" C-API auto-test function, and moving the set_ninjaCommunications() copy constructor/assignment operator methods to the ninja and ninjaArmy copy constructors and assignment operators. Moving the set_ninjaCommunications() methods made it possible to completely remove the set_ninjaCommunication() calls in both ninjaArmy and ninja, as that step is now done via the ninja and ninjaArmy constructors/assignment operators. That being said, the runNumber for the simulation still had to be set alongside the ninjaCom runNumber, so a new function called set_ninjaComRunNumber() had to replace calls to set_ninjaCommunication(), for the individual ninjas[i] level ninjaCom. The set_ninjaComRunNumber() function was able to be completely dropped for the ninjaArmy level ninjaCom. During testing of the multiStream log file methods, I discovered a few ninjas[i] level ninjaCom data members that weren't being properly set at the ninjaArmy level, so I also did a bit of cleanup to the various set_ninjaCom() related functions and methods within the C-API, ninjaArmy, and ninja. Effectively I was trying to make sure that the given functions/methods were being set or called at the appropriate level, and only at the appropriate level, made for a better organization of the methods. For issue #666, related to issues #639 and #582. --- autotest/api/test_capi_domain_average_wind.c | 26 +++++- src/gui/mainWindow.cpp | 7 -- src/ninja/WindNinjaInputs.cpp | 2 +- src/ninja/cli.cpp | 2 - src/ninja/ninja.cpp | 35 +++++---- src/ninja/ninja.h | 2 +- src/ninja/ninjaArmy.cpp | 83 +++++++++++--------- src/ninja/ninjaArmy.h | 10 +-- src/ninja/windninja.cpp | 20 +---- src/ninja/windninja.h | 5 +- 10 files changed, 96 insertions(+), 96 deletions(-) diff --git a/autotest/api/test_capi_domain_average_wind.c b/autotest/api/test_capi_domain_average_wind.c index 2cc9c7d58..7f343bc6b 100644 --- a/autotest/api/test_capi_domain_average_wind.c +++ b/autotest/api/test_capi_domain_average_wind.c @@ -47,6 +47,16 @@ int main() printf("NinjaInit: err = %d\n", err); } + /* + * Setting up a log file, for ninjaCom, if desired + */ + FILE* multiStream = NULL; + multiStream = fopen("/home/atw09001/src/wind/windninja/autotest/api/data/output/ninja.log", "w+"); + if(multiStream == NULL) + { + printf("error opening log file\n"); + } + /* * Set up domain average run */ @@ -104,12 +114,12 @@ int main() } /* - * Set the ninja communication + * Customize the ninja communication */ - err = NinjaSetCommunication(ninjaArmy, papszOptions); + err = NinjaSetMultiComStream(ninjaArmy, multiStream, papszOptions); if(err != NINJA_SUCCESS) { - printf("NinjaSetCommunication: err = %d\n", err); + printf("NinjaSetMultiComStream: err = %d\n", err); } /* @@ -225,6 +235,14 @@ int main() { printf("NinjaDestroyRuns: err = %d\n", err); } - + + if(multiStream != NULL) + { + if(fclose(multiStream) != 0) + { + printf("error closing log file\n"); + } + } + return NINJA_SUCCESS; } diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 0ea22fb3e..f189f4407 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -399,7 +399,6 @@ void MainWindow::solveButtonClicked() AppState& state = AppState::instance(); maxProgress = 100; - //progressDialog = new QProgressDialog("Initializing Runs...", "Cancel", 0, maxProgress, ui->centralwidget); progressDialog = new QProgressDialog(ui->centralwidget); progressDialog->setRange(0, maxProgress); @@ -419,12 +418,6 @@ void MainWindow::solveButtonClicked() ninjaArmy = NinjaInitializeArmy(); - ninjaErr = NinjaSetCommunication(ninjaArmy, papszOptions); - if(ninjaErr != NINJA_SUCCESS) - { - qDebug() << "NinjaSetCommunication: ninjaErr =" << ninjaErr; - } - ninjaErr = NinjaSetComProgressFunc(ninjaArmy, &updateProgressCallback, this, papszOptions); if(ninjaErr != NINJA_SUCCESS) { diff --git a/src/ninja/WindNinjaInputs.cpp b/src/ninja/WindNinjaInputs.cpp index d8bf7479b..e00ed6a38 100644 --- a/src/ninja/WindNinjaInputs.cpp +++ b/src/ninja/WindNinjaInputs.cpp @@ -224,7 +224,7 @@ WindNinjaInputs &WindNinjaInputs::operator=(const WindNinjaInputs &rhs) { if(&rhs != this) { - Com = NULL; // must be set to null! Gets created fresh in set_ninjaCommunication() + Com = NULL; // must be set to null! Gets created fresh in the ninjaArmy/ninja constructors and assignment operators armySize = rhs.armySize; hSpdMemDs = rhs.hSpdMemDs; hDirMemDs = rhs.hDirMemDs; diff --git a/src/ninja/cli.cpp b/src/ninja/cli.cpp index 26e48da10..0c1beec5d 100644 --- a/src/ninja/cli.cpp +++ b/src/ninja/cli.cpp @@ -608,8 +608,6 @@ int windNinjaCLI(int argc, char* argv[]) ninjaArmy windsim; - windsim.setNinjaCommunication(); - /* Do we have to fetch an elevation file */ #ifdef EMISSIONS diff --git a/src/ninja/ninja.cpp b/src/ninja/ninja.cpp index c3f23969c..77e6d4cbc 100644 --- a/src/ninja/ninja.cpp +++ b/src/ninja/ninja.cpp @@ -81,7 +81,7 @@ ninja::ninja() input.inputsRunNumber = 0; input.Com = new ninjaComClass(); input.Com->runNumber = input.inputsRunNumber; -// input.Com->lastMsg[0] = '\0'; + //input.Com->lastMsg[0] = '\0'; } /**Ninja destructor @@ -124,9 +124,15 @@ ninja::ninja(const ninja &rhs) , mesh(rhs.mesh) , input(rhs.input) { - input.Com = NULL; // must be set to null! Gets created fresh in set_ninjaCommunication() - set_ninjaCommunication(rhs.input.inputsRunNumber); - set_ninjaMultiComStream(rhs.input.Com->multiStream); + if(input.Com) + delete input.Com; + + input.Com = new ninjaComClass(); + + set_ninjaComRunNumber(rhs.input.inputsRunNumber); + input.Com->pfnProgress = rhs.input.Com->pfnProgress; + input.Com->pProgressUser = rhs.input.Com->pProgressUser; + input.Com->multiStream = rhs.input.Com->multiStream; strcpy( input.Com->lastMsg, rhs.input.Com->lastMsg ); input.Com->fpLog = rhs.input.Com->fpLog; @@ -182,9 +188,15 @@ ninja &ninja::operator=(const ninja &rhs) { if(&rhs != this) { - input.Com = NULL; // must be set to null! Gets created fresh in set_ninjaCommunication() - set_ninjaCommunication(rhs.input.inputsRunNumber); - set_ninjaMultiComStream(rhs.input.Com->multiStream); + if(input.Com) + delete input.Com; + + input.Com = new ninjaComClass(); + + set_ninjaComRunNumber(rhs.input.inputsRunNumber); + input.Com->pfnProgress = rhs.input.Com->pfnProgress; + input.Com->pProgressUser = rhs.input.Com->pProgressUser; + input.Com->multiStream = rhs.input.Com->multiStream; strcpy( input.Com->lastMsg, rhs.input.Com->lastMsg ); input.Com->fpLog = rhs.input.Com->fpLog; @@ -3549,17 +3561,10 @@ void ninja::set_DEM(const double* dem, const int nXSize, const int nYSize, input.dem.readFromMemory(dem, nXSize, nYSize, geoRef, prj); } -void ninja::set_ninjaCommunication(int RunNumber) +void ninja::set_ninjaComRunNumber(int RunNumber) { input.inputsRunNumber = RunNumber; - - if(input.Com) - delete input.Com; - - input.Com = new ninjaComClass(); - input.Com->runNumber = input.inputsRunNumber; -// input.Com->lastMsg[0] = '\0'; } void ninja::set_ninjaComProgressFunc(ProgressFunc func, void *pUser) diff --git a/src/ninja/ninja.h b/src/ninja/ninja.h index 5baa15dbb..b58747d66 100644 --- a/src/ninja/ninja.h +++ b/src/ninja/ninja.h @@ -165,7 +165,7 @@ class ninja /*----------------------------------------------------------------------------- * ninjaCom section *-----------------------------------------------------------------------------*/ - void set_ninjaCommunication(int RunNumber); + void set_ninjaComRunNumber(int RunNumber); void set_ninjaComProgressFunc(ProgressFunc func, void *pUser); void set_ninjaMultiComStream(FILE* stream); void set_progressWeight(double progressWeight); //For foam+diurnal simulations diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 5945c4324..31ea899e4 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -35,10 +35,11 @@ ninjaArmy::ninjaArmy() : writeFarsiteAtmFile(false) { - Com = NULL; -// Com = new ninjaComClass(); -// Com->runNumber = 0; -//// Com->lastMsg[0] = '\0'; + Com = new ninjaComClass(); + //Com->runNumber = 0; + Com->runNumber = 9999; + //Com->lastMsg[0] = '\0'; + strcpy(Com->lastMsg, "the heck!\0"); // ninjas.push_back(new ninja()); initLocalData(); @@ -51,10 +52,15 @@ ninjaArmy::ninjaArmy() */ ninjaArmy::ninjaArmy(const ninjaArmy& A) { - Com = NULL; // must be set to null! Gets created fresh in setNinjaCommunication() - setNinjaCommunication(); + if(Com) + delete Com; + + Com = new ninjaComClass(); + Com->runNumber = A.Com->runNumber; - setNinjaMultiComStream(A.Com->multiStream); + Com->pfnProgress = A.Com->pfnProgress; + Com->pProgressUser = A.Com->pProgressUser; + Com->multiStream = A.Com->multiStream; strcpy( Com->lastMsg, A.Com->lastMsg ); Com->fpLog = A.Com->fpLog; @@ -88,10 +94,15 @@ ninjaArmy& ninjaArmy::operator= (ninjaArmy const& A) { if(&A != this) { - Com = NULL; // must be set to null! Gets created fresh in setNinjaCommunication() - setNinjaCommunication(); + if(Com) + delete Com; + + Com = new ninjaComClass(); + Com->runNumber = A.Com->runNumber; - setNinjaMultiComStream(A.Com->multiStream); + Com->pfnProgress = A.Com->pfnProgress; + Com->pProgressUser = A.Com->pProgressUser; + Com->multiStream = A.Com->multiStream; strcpy( Com->lastMsg, A.Com->lastMsg ); Com->fpLog = A.Com->fpLog; @@ -132,11 +143,15 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeDomainAverageArm ninjas[i] = new ninja(); #endif //NINJAFOAM - setNinjaCommunication( i, i ); + setNinjaComRunNumber( i, i ); if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) { setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); } + if( Com->multiStream != NULL ) + { + setNinjaMultiComStream( i, Com->multiStream ); + } } } @@ -175,11 +190,15 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makePointArmy."); { ninjas[i] = new ninja(); - setNinjaCommunication( i, i ); + setNinjaComRunNumber( i, i ); if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) { setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); } + if( Com->multiStream != NULL ) + { + setNinjaMultiComStream( i, Com->multiStream ); + } } boost::local_time::tz_database tz_db; @@ -431,11 +450,15 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeWeatherModelArmy ninjas[i] = new ninja(); #endif //NINJAFOAM - setNinjaCommunication( i, i ); + setNinjaComRunNumber( i, i ); if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) { setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); } + if( Com->multiStream != NULL ) + { + setNinjaMultiComStream( i, Com->multiStream ); + } } std::vector timeList = model->getTimeList(timeZone); @@ -483,11 +506,15 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeWeatherModelArmy ninjas[i] = new ninja(); #endif - setNinjaCommunication( i, i ); + setNinjaComRunNumber( i, i ); if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) { setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); } + if( Com->multiStream != NULL ) + { + setNinjaMultiComStream( i, Com->multiStream ); + } } @@ -1368,28 +1395,6 @@ void ninjaArmy::setAtmFlags() * Ninja Communication Methods *-----------------------------------------------------------------------------*/ -int ninjaArmy::setNinjaCommunication( char ** papszOptions ) -{ - try - { - if(Com) - delete Com; - - Com = new ninjaComClass(); - - Com->runNumber = 9999; -// Com->lastMsg[0] = '\0'; - strcpy(Com->lastMsg, "the heck!\0"); - } - catch( ... ) - { - std::cout << "!!!failed to set ninjaArmy level ninjaCom!!!" << std::endl; - return NINJA_E_INVALID; - } - - return NINJA_SUCCESS; -} - int ninjaArmy::setNinjaComProgressFunc( ProgressFunc func, void *pUser, char ** papszOptions ) { @@ -1420,11 +1425,11 @@ int ninjaArmy::setNinjaMultiComStream( FILE* stream, return NINJA_SUCCESS; } -int ninjaArmy::setNinjaCommunication( const int nIndex, const int RunNumber, - char ** papszOptions ) +int ninjaArmy::setNinjaComRunNumber( const int nIndex, const int RunNumber, + char ** papszOptions ) { IF_VALID_INDEX_TRY( nIndex, ninjas, - ninjas[ nIndex ]->set_ninjaCommunication( RunNumber ) ); + ninjas[ nIndex ]->set_ninjaComRunNumber( RunNumber ) ); } int ninjaArmy::setNinjaComProgressFunc( const int nIndex, ProgressFunc func, void *pUser, diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index f0110591b..adb69b03e 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -183,8 +183,6 @@ class ninjaArmy * Ninja Communication Methods *-----------------------------------------------------------------------------*/ - int setNinjaCommunication( char ** papszOptions = NULL ); - int setNinjaComProgressFunc( ProgressFunc func, void *pUser, char ** papszOptions = NULL); @@ -192,14 +190,14 @@ class ninjaArmy char ** papszOptions = NULL); /** - * \brief Initialize the ninja communication of a ninja + * \brief Set the ninja and ninjaCom runNumber of a ninja * * \param nIndex index of a ninja - * \param RunNumber number of runs + * \param RunNumber the specific ninja/simulation run number * \return errval Returns NINJA_SUCCESS upon success */ - int setNinjaCommunication( const int nIndex, const int RunNumber, - char ** papszOptions = NULL ); + int setNinjaComRunNumber( const int nIndex, const int RunNumber, + char ** papszOptions = NULL ); int setNinjaComProgressFunc( const int nIndex, ProgressFunc func, void *pUser, char ** papszOptions = NULL); diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 4640e80a6..a01a7b69a 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -776,25 +776,12 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetNumberCPUs } /** - * \brief Set the communication handler for simulations. + * \brief Set a comProgressFunction handler for simulations. * * \param army An opaque handle to a valid ninjaArmy. * * \return NINJA_SUCCESS on success, non-zero otherwise. */ -WINDNINJADLL_EXPORT NinjaErr NinjaSetCommunication - ( NinjaArmyH * army, char ** papszOptions ) -{ - if( NULL != army ) - { - return reinterpret_cast( army )->setNinjaCommunication(); - } - else - { - return NINJA_E_NULL_PTR; - } -} - WINDNINJADLL_EXPORT NinjaErr NinjaSetComProgressFunc ( NinjaArmyH * army, ProgressFunc func, void *pUser, char ** papszOptions ) { @@ -813,18 +800,17 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetComProgressFunc * \brief Set the multi-stream FILE, for message communications during simulations. * * \param army An opaque handle to a valid ninjaArmy. - * \param nIndex The run to apply the setting to. * \param stream The message communication FILE to send multi-stream messages to. * * \return NINJA_SUCCESS on success, non-zero otherwise. */ WINDNINJADLL_EXPORT NinjaErr NinjaSetMultiComStream - ( NinjaArmyH * army, const int nIndex, FILE* stream, char ** papszOptions ) + ( NinjaArmyH * army, FILE* stream, char ** papszOptions ) { if( NULL != army ) { return reinterpret_cast( army )->setNinjaMultiComStream - ( nIndex, stream ); + ( stream ); } else { diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 2f229231e..09ccff521 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -171,14 +171,11 @@ typedef int NinjaErr; ( NinjaArmyH * ninjaArmy, const int nIndex, const int nCPUs, char ** options ); /* Communication */ - WINDNINJADLL_EXPORT NinjaErr NinjaSetCommunication - ( NinjaArmyH * ninjaArmy, char ** options ); - WINDNINJADLL_EXPORT NinjaErr NinjaSetComProgressFunc ( NinjaArmyH * ninjaArmy, ProgressFunc func, void *pUser, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaSetMultiComStream - ( NinjaArmyH * ninjaArmy, const int nIndex, FILE* stream, char ** options ); + ( NinjaArmyH * ninjaArmy, FILE* stream, char ** options ); /* Input Parameters */ WINDNINJADLL_EXPORT NinjaErr NinjaSetInputSpeed From 64800a37c2f142250ad5e76d28a4286758df37c3 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 16 Dec 2025 15:12:19 -0700 Subject: [PATCH 314/435] Added the ability to write and read settings for application, need to implement settings for time zone and point --- data/map.html | 1 + src/gui/mainWindow.cpp | 104 +++++++++++++++++++++++++++++++++++++-- src/gui/mainWindow.h | 7 +++ src/gui/mapBridge.cpp | 5 ++ src/gui/mapBridge.h | 2 + src/gui/surfaceInput.cpp | 32 ++++++------ 6 files changed, 132 insertions(+), 19 deletions(-) diff --git a/data/map.html b/data/map.html index 17b374cc9..582db6657 100755 --- a/data/map.html +++ b/data/map.html @@ -307,6 +307,7 @@ new QWebChannel(qt.webChannelTransport, channel => { window.bridge = channel.objects.bridge; + window.bridge.notifyReady(); }); diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 3ffb68903..89e797311 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -52,11 +52,12 @@ MainWindow::MainWindow(QWidget *parent) QWebEngineProfile::defaultProfile()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true); QString dataPath = QString::fromUtf8(CPLGetConfigOption("WINDNINJA_DATA", "")); QString mapPath = QDir(dataPath).filePath("map.html"); - webChannel = new QWebChannel(this); - mapBridge = new MapBridge(this); webEngineView = new QWebEngineView(ui->mapPanelWidget); + webChannel = new QWebChannel(webEngineView->page()); + mapBridge = new MapBridge(this); webChannel->registerObject(QStringLiteral("bridge"), mapBridge); webEngineView->page()->setWebChannel(webChannel); + QUrl url = QUrl::fromLocalFile(mapPath); webEngineView->setUrl(url); QVBoxLayout *layout = new QVBoxLayout(); @@ -100,9 +101,7 @@ MainWindow::MainWindow(QWidget *parent) QString version(NINJA_VERSION_STRING); version = "Welcome to WindNinja " + version; - writeToConsole(version, Qt::blue); - writeToConsole("WINDNINJA_DATA=" + dataPath); state.setState(); @@ -1191,4 +1190,101 @@ void MainWindow::finishedSolve() futureWatcher->deleteLater(); } +void MainWindow::writeSettings() +{ + writeToConsole("Saving settings..."); + + QSettings settings(QSettings::UserScope, "Firelab", "WindNinja"); + settings.setDefaultFormat(QSettings::IniFormat); + + settings.setDefaultFormat(QSettings::IniFormat); + //input file path + settings.setValue("inputFileDir", ui->elevationInputFileLineEdit->property("fullpath")); + //veg choice + settings.setValue("vegChoice", ui->vegetationComboBox->currentIndex()); + //mesh choice + settings.setValue("meshChoice", ui->meshResolutionComboBox->currentIndex()); + //mesh units + settings.setValue("meshUnits", ui->meshResolutionUnitsComboBox->currentIndex()); + //number of processors + settings.setValue("nProcessors", ui->numberOfProcessorsSpinBox->value()); + + //time zone + //settings.setValue("timeZone", ui->timeZoneComboBox->currentIndex()); + + //settings.setValue("pointFile", tree->point->stationFileName ); + + settings.setValue("customRes", ui->meshResolutionSpinBox->value()); + writeToConsole("Settings saved."); +} + +void MainWindow::readSettings() +{ + QSettings settings(QSettings::UserScope, "Firelab", "WindNinja"); + settings.setDefaultFormat(QSettings::IniFormat); + if(settings.contains("inputFileDir")) + { + QString temp = settings.value("inputFileDir").toString(); + ui->elevationInputFileLineEdit->setText(settings.value("inputFileDir").toString()); + } + else + { + // std::string oTmpPath = FindNinjaRootDir(); + // inputFileDir = CPLFormFilename(oTmpPath.c_str(), "etc/windninja/example-files", NULL); + } + if(settings.contains("vegChoice")) + { + ui->vegetationComboBox->setCurrentIndex(settings.value("vegChoice").toInt()); + } + if(settings.contains("meshChoice")) + { + int choice = settings.value("meshChoice").toInt(); + ui->meshResolutionComboBox->setCurrentIndex(choice); + if(choice == 4 && settings.contains("customRes")) + { + ui->meshResolutionSpinBox->setValue(settings.value("customRes").toDouble()); + } + } + if(settings.contains("meshUnits")) + { + ui->meshResolutionUnitsComboBox->setCurrentIndex(settings.value("meshUnits").toInt()); + } + if(settings.contains("nProcessors")) + { + ui->numberOfProcessorsSpinBox->setValue(settings.value("nProcessors").toInt()); + } + if(settings.contains("timeZone")) + { + // QString v = settings.value("timeZone").toString(); + // int index = tree->surface->timeZone->tzComboBox->findText(v); + // if(index == -1) + // tree->surface->timeZone->tzCheckBox->setChecked( true ); + // index = tree->surface->timeZone->tzComboBox->findText(v); + // if( index == 0 ) + // tree->surface->timeZone->tzComboBox->setCurrentIndex(index + 1); + // true->surface->timeZone->tzComboBox->setCurrentIndex(index); + } + else + { + // tree->surface->timeZone->tzComboBox->setCurrentIndex(2); + // tree->surface->timeZone->tzComboBox->setCurrentIndex(1); + } + if(settings.contains("pointFile")) + { + // QString f = settings.value("pointFile").toString(); + // tree->point->stationFileName = f; + } +} + +void MainWindow::showEvent(QShowEvent *event) +{ + QMainWindow::showEvent(event); + connect(mapBridge, &MapBridge::ready, this, &MainWindow::readSettings); +} + +void MainWindow::closeEvent(QCloseEvent *event) +{ + writeSettings(); + QMainWindow::closeEvent(event); +} diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index 9f8045e27..594447c16 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -103,6 +103,10 @@ class MainWindow : public QMainWindow void updateProgressMessageSignal(const QString &msg); void writeToConsoleSignal(const QString &msg, QColor color = Qt::white); +protected: + void showEvent(QShowEvent *event) override; + void closeEvent(QCloseEvent *event) override; + private slots: void massSolverCheckBoxClicked(); void momentumSolverCheckBoxClicked(); @@ -161,5 +165,8 @@ private slots: int lineNumber; + void writeSettings(); + void readSettings(); + }; #endif // MAINWINDOW_H diff --git a/src/gui/mapBridge.cpp b/src/gui/mapBridge.cpp index 3b27bf695..ef2d2840d 100644 --- a/src/gui/mapBridge.cpp +++ b/src/gui/mapBridge.cpp @@ -51,3 +51,8 @@ void MapBridge::receiveBoundingBox(const QString &jsonCoords) emit boundingBoxReceived(north, south, east, west); } + +void MapBridge::notifyReady() +{ + emit ready(); +} diff --git a/src/gui/mapBridge.h b/src/gui/mapBridge.h index 653dec425..a67299a5b 100644 --- a/src/gui/mapBridge.h +++ b/src/gui/mapBridge.h @@ -44,10 +44,12 @@ class MapBridge : public QObject signals: void boundingBoxReceived(double north, double south, double east, double west); + void ready(); public slots: void receiveBoundingBox(const QString &jsonCoords); + void notifyReady(); }; diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp index 876efcebb..f9ca243fb 100644 --- a/src/gui/surfaceInput.cpp +++ b/src/gui/surfaceInput.cpp @@ -193,7 +193,7 @@ void SurfaceInput::surfaceInputDownloadCancelButtonClicked() webEngineView->page()->runJavaScript("stopRectangleDrawing();"); - if(!currentDEMFilePath.isEmpty()) + if(!ui->elevationInputFileLineEdit->property("fullpath").toString().isEmpty()) { QStringList cornerStrs; for (int i = 0; i < 8; ++i) @@ -227,7 +227,6 @@ void SurfaceInput::surfaceInputDownloadButtonClicked() if (!demFilePath.endsWith(".tif", Qt::CaseInsensitive)) { demFilePath += ".tif"; } - currentDEMFilePath = demFilePath; ui->elevationInputFileLineEdit->setProperty("fullpath", demFilePath); std::string demFile = demFilePath.toStdString(); @@ -267,12 +266,12 @@ void SurfaceInput::meshResolutionComboBoxCurrentIndexChanged(int index) ui->meshResolutionSpinBox->setValue(computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); } -void SurfaceInput::elevationInputFileLineEditTextChanged(const QString &arg1) +void SurfaceInput::elevationInputFileLineEditTextChanged(const QString &demFilePath) { - QFileInfo file(currentDEMFilePath); + QFileInfo file(demFilePath); ui->outputDirectoryLineEdit->setText(file.absolutePath()); - computeDEMFile(currentDEMFilePath); + computeDEMFile(demFilePath); if(demFileType == "LCP") { ui->vegetationStackedWidget->setCurrentIndex(1); @@ -290,6 +289,11 @@ void SurfaceInput::elevationInputFileLineEditTextChanged(const QString &arg1) QString js = QString("drawDEM([%1]);").arg(cornerStrs.join(", ")); webEngineView->page()->runJavaScript(js); + ui->elevationInputFileLineEdit->setProperty("fullpath", demFilePath); + QSignalBlocker blocker(ui->elevationInputFileLineEdit); + ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); + ui->elevationInputFileLineEdit->setToolTip(demFilePath); + emit updateState(); emit updateTreeView(); } @@ -297,30 +301,28 @@ void SurfaceInput::elevationInputFileLineEditTextChanged(const QString &arg1) void SurfaceInput::elevationInputFileOpenButtonClicked() { QString directoryPath; - if(!currentDEMFilePath.isEmpty()) + if(!ui->elevationInputFileLineEdit->property("fullpath").toString().isEmpty()) { - directoryPath = currentDEMFilePath; + directoryPath = ui->elevationInputFileLineEdit->property("fullpath").toString(); } else { directoryPath = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); } + QString demFilePath = QFileDialog::getOpenFileName(ui->centralwidget, "Select a file", directoryPath, "(*.tif);;All Files (*)"); if (demFilePath.isEmpty()) { - if (!currentDEMFilePath.isEmpty()) + if (!ui->elevationInputFileLineEdit->property("fullpath").toString().isEmpty()) { - - ui->elevationInputFileLineEdit->setText(QFileInfo(currentDEMFilePath).fileName()); - ui->elevationInputFileLineEdit->setToolTip(currentDEMFilePath); + ui->elevationInputFileLineEdit->setText(ui->elevationInputFileLineEdit->property("fullpath").toString()); + ui->elevationInputFileLineEdit->setToolTip(ui->elevationInputFileLineEdit->property("fullpath").toString()); } return; } - currentDEMFilePath = demFilePath; - ui->elevationInputFileLineEdit->setProperty("fullpath", demFilePath); - ui->elevationInputFileLineEdit->setText(QFileInfo(demFilePath).fileName()); + ui->elevationInputFileLineEdit->setText(demFilePath); ui->elevationInputFileLineEdit->setToolTip(demFilePath); } @@ -355,7 +357,7 @@ void SurfaceInput::fetchDEMFinished() futureWatcher = nullptr; } - ui->elevationInputFileLineEdit->setText(QFileInfo(currentDEMFilePath).fileName()); + ui->elevationInputFileLineEdit->setText(ui->elevationInputFileLineEdit->property("fullpath").toString()); ui->inputsStackedWidget->setCurrentIndex(5); } From eaf68e8919ea034f7723cf2e61b6fbf37a3ebc45 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 16 Dec 2025 16:14:23 -0700 Subject: [PATCH 315/435] update to my last ninjaCom commit, make the recently updated ninjaArmy and ninja copy constructors and assignment operators be more true to form, my past method was my first attempt at just getting it to work. For issue #666, related to issues #639 and #582. --- src/ninja/ninja.cpp | 10 +++------- src/ninja/ninjaArmy.cpp | 9 ++------- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/src/ninja/ninja.cpp b/src/ninja/ninja.cpp index 77e6d4cbc..c676af71f 100644 --- a/src/ninja/ninja.cpp +++ b/src/ninja/ninja.cpp @@ -89,8 +89,8 @@ ninja::ninja() */ ninja::~ninja() { - deleteDynamicMemory(); - delete input.Com; + deleteDynamicMemory(); + delete input.Com; } /** @@ -124,9 +124,6 @@ ninja::ninja(const ninja &rhs) , mesh(rhs.mesh) , input(rhs.input) { - if(input.Com) - delete input.Com; - input.Com = new ninjaComClass(); set_ninjaComRunNumber(rhs.input.inputsRunNumber); @@ -188,8 +185,7 @@ ninja &ninja::operator=(const ninja &rhs) { if(&rhs != this) { - if(input.Com) - delete input.Com; + delete input.Com; input.Com = new ninjaComClass(); diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 31ea899e4..88e16ea17 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -52,9 +52,6 @@ ninjaArmy::ninjaArmy() */ ninjaArmy::ninjaArmy(const ninjaArmy& A) { - if(Com) - delete Com; - Com = new ninjaComClass(); Com->runNumber = A.Com->runNumber; @@ -80,8 +77,7 @@ ninjaArmy::~ninjaArmy() delete ninjas[0]; } destoryLocalData(); - if(Com) - delete Com; + delete Com; } /** @@ -94,8 +90,7 @@ ninjaArmy& ninjaArmy::operator= (ninjaArmy const& A) { if(&A != this) { - if(Com) - delete Com; + delete Com; Com = new ninjaComClass(); From 1022cbdb8c75bff861f958a36602f3dc2a239ca5 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 17 Dec 2025 14:37:54 -0700 Subject: [PATCH 316/435] more cleanup to ninjaCom, added a ninjaCom copy constructor and assignment operator, which allowed moving the ninjaCom value setting from the ninja and ninjaArmy copy constructors and assignment operators to the ninjaCom copy constructor and assignment operator, which is more correct. ended up bringing back the set_ninjaCommunication() function, but in a different and cleaner form that more properly uses these constructors and assignment operators than the original form. This also allowed setting the ninjaArmy level ninjaCom to the ninjas[i] level ninjaCom, directly via the assignment operator rather than via the ninjas[i] level set_ninjaComProgressFunc() and set_ninjaMultiComStream() functions, made it even cleaner. For issue #666, related to issues #639 and #582. --- src/ninja/WindNinjaInputs.cpp | 2 + src/ninja/WindNinjaInputs.h | 2 +- src/ninja/ninja.cpp | 39 ++++--------- src/ninja/ninja.h | 3 +- src/ninja/ninjaArmy.cpp | 104 ++++++++++------------------------ src/ninja/ninjaArmy.h | 22 ++----- src/ninja/ninjaCom.cpp | 68 ++++++++++++++++++++-- src/ninja/ninjaCom.h | 5 ++ 8 files changed, 117 insertions(+), 128 deletions(-) diff --git a/src/ninja/WindNinjaInputs.cpp b/src/ninja/WindNinjaInputs.cpp index e00ed6a38..e49dcdb2b 100644 --- a/src/ninja/WindNinjaInputs.cpp +++ b/src/ninja/WindNinjaInputs.cpp @@ -34,6 +34,7 @@ WindNinjaInputs::WindNinjaInputs() { //Initialize variables Com = NULL; + inputsRunNumber = -9999; hSpdMemDs = NULL; hDirMemDs = NULL; hDustMemDs = NULL; @@ -225,6 +226,7 @@ WindNinjaInputs &WindNinjaInputs::operator=(const WindNinjaInputs &rhs) if(&rhs != this) { Com = NULL; // must be set to null! Gets created fresh in the ninjaArmy/ninja constructors and assignment operators + inputsRunNumber = rhs.inputsRunNumber; armySize = rhs.armySize; hSpdMemDs = rhs.hSpdMemDs; hDirMemDs = rhs.hDirMemDs; diff --git a/src/ninja/WindNinjaInputs.h b/src/ninja/WindNinjaInputs.h index 3c0e5a1a0..85805cc34 100644 --- a/src/ninja/WindNinjaInputs.h +++ b/src/ninja/WindNinjaInputs.h @@ -106,8 +106,8 @@ struct WindNinjaInputs * Base input data passed to "simulate_wind()" *-----------------------------------------------------------------------------*/ + ninjaComClass *Com; // pointer to a given ninjas[i] level com handler int inputsRunNumber; - ninjaComClass *Com; //pointer to a com handler for the specific communication type desired int armySize; GDALDatasetH hSpdMemDs; diff --git a/src/ninja/ninja.cpp b/src/ninja/ninja.cpp index c676af71f..3f0e0aecf 100644 --- a/src/ninja/ninja.cpp +++ b/src/ninja/ninja.cpp @@ -78,10 +78,8 @@ ninja::ninja() CPLDebug( "NINJA", "Maximum match iterations set to: %d", nMaxMatchingIters ); // ninjaCom stuff - input.inputsRunNumber = 0; input.Com = new ninjaComClass(); - input.Com->runNumber = input.inputsRunNumber; - //input.Com->lastMsg[0] = '\0'; + set_ninjaComRunNumber(-9999); // initial val } /**Ninja destructor @@ -124,14 +122,9 @@ ninja::ninja(const ninja &rhs) , mesh(rhs.mesh) , input(rhs.input) { - input.Com = new ninjaComClass(); - - set_ninjaComRunNumber(rhs.input.inputsRunNumber); - input.Com->pfnProgress = rhs.input.Com->pfnProgress; - input.Com->pProgressUser = rhs.input.Com->pProgressUser; - input.Com->multiStream = rhs.input.Com->multiStream; - strcpy( input.Com->lastMsg, rhs.input.Com->lastMsg ); - input.Com->fpLog = rhs.input.Com->fpLog; + //input.Com = new ninjaComClass(); + //*input.Com = *rhs.input.Com; + input.Com = new ninjaComClass(*rhs.input.Com); cancel = rhs.cancel; alphaH = rhs.alphaH; @@ -186,15 +179,8 @@ ninja &ninja::operator=(const ninja &rhs) if(&rhs != this) { delete input.Com; - input.Com = new ninjaComClass(); - - set_ninjaComRunNumber(rhs.input.inputsRunNumber); - input.Com->pfnProgress = rhs.input.Com->pfnProgress; - input.Com->pProgressUser = rhs.input.Com->pProgressUser; - input.Com->multiStream = rhs.input.Com->multiStream; - strcpy( input.Com->lastMsg, rhs.input.Com->lastMsg ); - input.Com->fpLog = rhs.input.Com->fpLog; + *input.Com = *rhs.input.Com; AngleGrid = rhs.AngleGrid; VelocityGrid = rhs.VelocityGrid; @@ -3557,20 +3543,15 @@ void ninja::set_DEM(const double* dem, const int nXSize, const int nYSize, input.dem.readFromMemory(dem, nXSize, nYSize, geoRef, prj); } -void ninja::set_ninjaComRunNumber(int RunNumber) -{ - input.inputsRunNumber = RunNumber; - input.Com->runNumber = input.inputsRunNumber; -} - -void ninja::set_ninjaComProgressFunc(ProgressFunc func, void *pUser) +void ninja::set_ninjaCommunication(const ninjaComClass* Com) { - input.Com->set_progressFunc(func, pUser); + *input.Com = *Com; } -void ninja::set_ninjaMultiComStream(FILE* stream) +void ninja::set_ninjaComRunNumber(int RunNumber) { - input.Com->multiStream = stream; + input.inputsRunNumber = RunNumber; + input.Com->runNumber = input.inputsRunNumber; } void ninja::set_progressWeight(double progressWeight) diff --git a/src/ninja/ninja.h b/src/ninja/ninja.h index b58747d66..e4397c073 100644 --- a/src/ninja/ninja.h +++ b/src/ninja/ninja.h @@ -165,9 +165,8 @@ class ninja /*----------------------------------------------------------------------------- * ninjaCom section *-----------------------------------------------------------------------------*/ + void set_ninjaCommunication(const ninjaComClass* Com); void set_ninjaComRunNumber(int RunNumber); - void set_ninjaComProgressFunc(ProgressFunc func, void *pUser); - void set_ninjaMultiComStream(FILE* stream); void set_progressWeight(double progressWeight); //For foam+diurnal simulations /************************************************************* diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 88e16ea17..bfdb5b288 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -36,10 +36,7 @@ ninjaArmy::ninjaArmy() : writeFarsiteAtmFile(false) { Com = new ninjaComClass(); - //Com->runNumber = 0; Com->runNumber = 9999; - //Com->lastMsg[0] = '\0'; - strcpy(Com->lastMsg, "the heck!\0"); // ninjas.push_back(new ninja()); initLocalData(); @@ -52,14 +49,9 @@ ninjaArmy::ninjaArmy() */ ninjaArmy::ninjaArmy(const ninjaArmy& A) { - Com = new ninjaComClass(); - - Com->runNumber = A.Com->runNumber; - Com->pfnProgress = A.Com->pfnProgress; - Com->pProgressUser = A.Com->pProgressUser; - Com->multiStream = A.Com->multiStream; - strcpy( Com->lastMsg, A.Com->lastMsg ); - Com->fpLog = A.Com->fpLog; + //Com = new ninjaComClass(); + //*Com = *A.Com; + Com = new ninjaComClass(*A.Com); writeFarsiteAtmFile = A.writeFarsiteAtmFile; ninjas = A.ninjas; @@ -91,15 +83,8 @@ ninjaArmy& ninjaArmy::operator= (ninjaArmy const& A) if(&A != this) { delete Com; - Com = new ninjaComClass(); - - Com->runNumber = A.Com->runNumber; - Com->pfnProgress = A.Com->pfnProgress; - Com->pProgressUser = A.Com->pProgressUser; - Com->multiStream = A.Com->multiStream; - strcpy( Com->lastMsg, A.Com->lastMsg ); - Com->fpLog = A.Com->fpLog; + *Com = *A.Com; writeFarsiteAtmFile = A.writeFarsiteAtmFile; ninjas = A.ninjas; @@ -138,15 +123,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeDomainAverageArm ninjas[i] = new ninja(); #endif //NINJAFOAM - setNinjaComRunNumber( i, i ); - if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) - { - setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); - } - if( Com->multiStream != NULL ) - { - setNinjaMultiComStream( i, Com->multiStream ); - } + setNinjaCommunication( i, i ); } } @@ -185,15 +162,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makePointArmy."); { ninjas[i] = new ninja(); - setNinjaComRunNumber( i, i ); - if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) - { - setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); - } - if( Com->multiStream != NULL ) - { - setNinjaMultiComStream( i, Com->multiStream ); - } + setNinjaCommunication( i, i ); } boost::local_time::tz_database tz_db; @@ -445,15 +414,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeWeatherModelArmy ninjas[i] = new ninja(); #endif //NINJAFOAM - setNinjaComRunNumber( i, i ); - if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) - { - setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); - } - if( Com->multiStream != NULL ) - { - setNinjaMultiComStream( i, Com->multiStream ); - } + setNinjaCommunication( i, i ); } std::vector timeList = model->getTimeList(timeZone); @@ -501,15 +462,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeWeatherModelArmy ninjas[i] = new ninja(); #endif - setNinjaComRunNumber( i, i ); - if( Com->pfnProgress != NULL && Com->pProgressUser != NULL) - { - setNinjaComProgressFunc( i, Com->pfnProgress, Com->pProgressUser ); - } - if( Com->multiStream != NULL ) - { - setNinjaMultiComStream( i, Com->multiStream ); - } + setNinjaCommunication( i, i ); } @@ -1420,25 +1373,30 @@ int ninjaArmy::setNinjaMultiComStream( FILE* stream, return NINJA_SUCCESS; } -int ninjaArmy::setNinjaComRunNumber( const int nIndex, const int RunNumber, - char ** papszOptions ) -{ - IF_VALID_INDEX_TRY( nIndex, ninjas, - ninjas[ nIndex ]->set_ninjaComRunNumber( RunNumber ) ); -} - -int ninjaArmy::setNinjaComProgressFunc( const int nIndex, ProgressFunc func, void *pUser, - char ** papszOptions ) -{ - IF_VALID_INDEX_TRY( nIndex, ninjas, - ninjas[ nIndex ]->set_ninjaComProgressFunc( func, pUser ) ); -} - -int ninjaArmy::setNinjaMultiComStream( const int nIndex, FILE* stream, - char ** papszOptions ) +int ninjaArmy::setNinjaCommunication( const int nIndex, const int RunNumber, + char ** papszOptions ) { - IF_VALID_INDEX_TRY( nIndex, ninjas, - ninjas[ nIndex ]->set_ninjaMultiComStream( stream ) ); + int retval = NINJA_E_INVALID; + IF_VALID_INDEX( nIndex, ninjas ) + { + try + { + ninjas[ nIndex ]->set_ninjaCommunication( Com ); + ninjas[ nIndex ]->set_ninjaComRunNumber( RunNumber ); + retval = NINJA_SUCCESS; + } + catch( std::exception &e ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s, Failed to set ninjas[%d] level ninjaCom", e.what(), RunNumber); + retval = NINJA_E_INVALID; + } + catch( ... ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Failed to set ninjas[%d] level ninjaCom", RunNumber); + retval = NINJA_E_INVALID; + } + } + return retval; } /*----------------------------------------------------------------------------- diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index adb69b03e..18aa5fedf 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -142,7 +142,7 @@ class ninjaArmy ninjaArmy& operator= (ninjaArmy const& A); - ninjaComClass *Com; //pointer to a com handler for the specific communication type desired + ninjaComClass *Com; // pointer to the ninjaArmy level com handler enum eWxModelType{ ncepNdfd, @@ -190,27 +190,15 @@ class ninjaArmy char ** papszOptions = NULL); /** - * \brief Set the ninja and ninjaCom runNumber of a ninja + * \brief Set the ninjaCom handler of a ninja, using the ninjaArmy level ninjaCom handler + * and set the ninja and ninjaCom runNumber of a ninja * * \param nIndex index of a ninja * \param RunNumber the specific ninja/simulation run number * \return errval Returns NINJA_SUCCESS upon success */ - int setNinjaComRunNumber( const int nIndex, const int RunNumber, - char ** papszOptions = NULL ); - - int setNinjaComProgressFunc( const int nIndex, ProgressFunc func, void *pUser, - char ** papszOptions = NULL); - - /** - * \brief Initialize the message communication multi-stream FILE of a ninja - * - * \param nIndex index of a ninja - * \param stream communication multi-stream FILE of a ninja - * \return errval Returns NINJA_SUCCESS upon success - */ - int setNinjaMultiComStream( const int nIndex, FILE* stream, - char ** papszOptions = NULL); + int setNinjaCommunication( const int nIndex, const int RunNumber, + char ** papszOptions = NULL); /*----------------------------------------------------------------------------- * Ninja speed testing Methods diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index 4c46d3dcd..4e333fa7e 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -30,8 +30,8 @@ #include "ninjaCom.h" /** -* Constructor for ninjaComClass. -* @return +* @brief Default constructor. +* */ ninjaComClass::ninjaComClass() { @@ -43,8 +43,8 @@ ninjaComClass::ninjaComClass() printProgressFunc = false; pfnProgress = nullptr; pProgressUser = nullptr; - multiStream = NULL; printLogFile = false; + multiStream = NULL; errorCount = 0; nMaxErrors = 10; printMaxErrors = false; @@ -54,14 +54,69 @@ ninjaComClass::ninjaComClass() } /** -* Destructor for ninjaComClass. -* @return +* @brief Destructor. +* */ ninjaComClass::~ninjaComClass() { } +/** +* @brief Copy constructor. +* +* @param a ninjaComClass object to be copied. +*/ +ninjaComClass::ninjaComClass(const ninjaComClass& A) +{ + fpLog = A.fpLog; + fpErr = A.fpErr; + printLastMsg = A.printLastMsg; + strcpy( lastMsg, A.lastMsg ); + runNumber = A.runNumber; + printProgressFunc = A.printProgressFunc; + pfnProgress = A.pfnProgress; + pProgressUser = A.pProgressUser; + printLogFile = A.printLogFile; + multiStream = A.multiStream; + errorCount = A.errorCount; + nMaxErrors = A.nMaxErrors; + printMaxErrors = A.printMaxErrors; + printSolverProgress = A.printSolverProgress; + printRunNumber = A.printRunNumber; + progressWeight = A.progressWeight; +} + +/** +* @brief Equals operator. +* +* @param a ninjaComClass object to set equal to. +* @return A reference to a ninjaComClass object equal to the one on the right-hand side. +*/ +ninjaComClass& ninjaComClass::operator=(const ninjaComClass &A) +{ + if(&A != this) + { + fpLog = A.fpLog; + fpErr = A.fpErr; + printLastMsg = A.printLastMsg; + strcpy( lastMsg, A.lastMsg ); + runNumber = A.runNumber; + printProgressFunc = A.printProgressFunc; + pfnProgress = A.pfnProgress; + pProgressUser = A.pProgressUser; + printLogFile = A.printLogFile; + multiStream = A.multiStream; + errorCount = A.errorCount; + nMaxErrors = A.nMaxErrors; + printMaxErrors = A.printMaxErrors; + printSolverProgress = A.printSolverProgress; + printRunNumber = A.printRunNumber; + progressWeight = A.progressWeight; + } + return *this; +} + void ninjaComClass::set_progressFunc(ProgressFunc func, void *pUser) { if( func == NULL || pUser == NULL ) @@ -87,7 +142,8 @@ void ninjaComClass::noSolverProgress() } /** -* Communication function used to pass messages from the program to different ninjaComHandler() functions. +* Communication function used to pass messages from the program to the ninjaComHandler() function, +* parsing the printf() %f, %d, %s, etc style syntax of the message into a fully built string. * @param eMsg Type of message to be passed. See msgType for available types. * @param Message to be passed, using string formatting (like a printf() statement). */ diff --git a/src/ninja/ninjaCom.h b/src/ninja/ninjaCom.h index 3d625bb0b..82139eb73 100644 --- a/src/ninja/ninjaCom.h +++ b/src/ninja/ninjaCom.h @@ -45,8 +45,13 @@ class ninjaComClass { public: + ninjaComClass(); ~ninjaComClass(); + + ninjaComClass(const ninjaComClass& A); + ninjaComClass& operator=(const ninjaComClass &A); + double progressWeight; typedef enum From 7fab2183740407a97bedb6560db13519367c85f0 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 17 Dec 2025 19:06:51 -0700 Subject: [PATCH 317/435] More cleanup to ninjaCom. Moved the ninjaCom constructor/assignment operator methods, from ninja, to WindNinjaInputs where the ninjas[i] level ninjaCom is actually held. Part of the process was cleaning up WindNinjaInputs constructor/assignment operator methods to be more proper, including adding WindNinjaInputs data members to the assignment operator that were missing, before using a copy of the assignment operator variables list in the newly updated copy constructor. I did not update the WindNinjaInputs default constructor, there are still a few WindNinjaInputs data members not yet initialized that do not seem to hurt anything, yet. I also decided to leave the WindNinjaInputs data members in their current order, in both the .h and .cpp files, even though the ordering seems to need a bit of revamping/consistency. But now at least the assignment operator and copy constructor properly set the full list of WindNinjaInputs data members. In the process, I found an error/bug in the WindNinjaInputs assignment operator, the "downEntrainmentCoeff" was accidentally being assigned to "rhs.downDragCoeff" rather than to "rhs.downEntrainmentCoeff", which likely overwrote the default value for some diurnal simulations. Not sure what effect this change will have on the code. I believe that I've finally got the default constructor, copy constructor, assignment operator methods for ninjaCom fully setup correctly and cleanly, to proper standards. The old way was doing these operations separate from the raw class object storage and was quite quirky. For issue #666, related to issues #639 and #582. --- src/ninja/WindNinjaInputs.cpp | 209 ++++++++++++++++++++++++++++++++-- src/ninja/WindNinjaInputs.h | 2 +- src/ninja/ninja.cpp | 13 --- src/ninja/ninjaArmy.cpp | 2 - src/ninja/ninjaCom.h | 4 +- 5 files changed, 201 insertions(+), 29 deletions(-) diff --git a/src/ninja/WindNinjaInputs.cpp b/src/ninja/WindNinjaInputs.cpp index e49dcdb2b..53017fb05 100644 --- a/src/ninja/WindNinjaInputs.cpp +++ b/src/ninja/WindNinjaInputs.cpp @@ -33,7 +33,7 @@ WindNinjaInputs::WindNinjaInputs() : ninjaTime(boost::local_time::not_a_date_time) { //Initialize variables - Com = NULL; + Com = new ninjaComClass(); inputsRunNumber = -9999; hSpdMemDs = NULL; hDirMemDs = NULL; @@ -177,6 +177,7 @@ WindNinjaInputs::WindNinjaInputs() WindNinjaInputs::~WindNinjaInputs() { + delete Com; } /** @@ -186,7 +187,179 @@ WindNinjaInputs::~WindNinjaInputs() WindNinjaInputs::WindNinjaInputs(const WindNinjaInputs &rhs) : ninjaTime(boost::local_time::not_a_date_time) { - *this = rhs; + Com = new ninjaComClass(*rhs.Com); + + inputsRunNumber = rhs.inputsRunNumber; + + armySize = rhs.armySize; + hSpdMemDs = rhs.hSpdMemDs; + hDirMemDs = rhs.hDirMemDs; + hDustMemDs = rhs.hDustMemDs; + + vegetation = rhs.vegetation; + + speedInitGridFilename = rhs.speedInitGridFilename; + dirInitGridFilename = rhs.dirInitGridFilename; + initializationMethod = rhs.initializationMethod; + forecastFilename = rhs.forecastFilename; + inputSpeedUnits = rhs.inputSpeedUnits; + outputSpeedUnits = rhs.outputSpeedUnits; + inputSpeed = rhs.inputSpeed; + inputDirection = rhs.inputDirection; + inputWindHeightUnits = rhs.inputWindHeightUnits; + inputWindHeight = rhs.inputWindHeight; + outputWindHeightUnits = rhs.outputWindHeightUnits; + outputWindHeight = rhs.outputWindHeight; + + stations = rhs.stations; + realStations = rhs.realStations; + wxStationFilename = rhs.wxStationFilename; + stationsScratch = rhs.stationsScratch; + stationsOldInput = rhs.stationsOldInput; + stationsOldOutput = rhs.stationsOldOutput; + stationFetch=rhs.stationFetch; + matchWxStations = rhs.matchWxStations; + outer_relax = rhs.outer_relax; + CPLDebug("NINJA", "Setting NINJA_POINT_MATCH_OUT_RELAX to %lf", outer_relax); + diurnalWinds = rhs.diurnalWinds; +#ifdef EMISSIONS + dustFlag = rhs.dustFlag; + dustFilename = rhs.dustFilename; + dustFileOut = rhs.dustFileOut; + geotiffOutFlag = rhs.geotiffOutFlag; + geotiffOutFilename = rhs.geotiffOutFilename; + dustFile = rhs.dustFile; + ustarFile = rhs.ustarFile; +#endif +#ifdef NINJAFOAM + nIterations = rhs.nIterations; + meshCount = rhs.meshCount; + ninjafoamMeshChoice = rhs.ninjafoamMeshChoice; + existingCaseDirectory = rhs.existingCaseDirectory; + stlFile = rhs.stlFile; + foamVelocityGrid = rhs.foamVelocityGrid; + foamAngleGrid = rhs.foamAngleGrid; + writeTurbulence = rhs.writeTurbulence; + colMax_colHeightAGL = rhs.colMax_colHeightAGL; + colMax_colHeightAGL_units = rhs.colMax_colHeightAGL_units; +#endif + outputPointsFilename = rhs.outputPointsFilename; + inputPointsFilename = rhs.inputPointsFilename; + pointsNamesList = rhs.pointsNamesList; + latList = rhs.latList; + lonList = rhs.lonList; + heightList = rhs.heightList; + projYList = rhs.projYList; + projXList = rhs.projXList; + + ninjaTime = rhs.ninjaTime; + if(rhs.ninjaTimeZone.get() == NULL) //If pointer is NULL + ninjaTimeZone.reset(); + else if(rhs.ninjaTimeZone->to_posix_string().empty()) //If pointer is good, but posix string is empty + ninjaTimeZone.reset(); + else //Else it is a good time zone pointer, so set accordingly + ninjaTimeZone = boost::local_time::time_zone_ptr (new boost::local_time::posix_time_zone(rhs.ninjaTimeZone->to_posix_string())); + + airTempUnits = rhs.airTempUnits; + airTemp = rhs.airTemp; + cloudCoverUnits = rhs.cloudCoverUnits; + cloudCover = rhs.cloudCover; + latitude = rhs.latitude; + longitude = rhs.longitude; + numberCPUs = rhs.numberCPUs; + outputBufferClipping = rhs.outputBufferClipping; + writeAtmFile = rhs.writeAtmFile; + googOutFlag = rhs.googOutFlag; + googSpeedScaling = rhs.googSpeedScaling; + googLineWidth = rhs.googLineWidth; + googColor = rhs.googColor; + googVectorScale = rhs.googVectorScale; + googUseConsistentColorScale = rhs.googUseConsistentColorScale; + wxModelGoogOutFlag = rhs.wxModelGoogOutFlag; + wxModelGoogSpeedScaling = rhs.wxModelGoogSpeedScaling; + wxModelGoogLineWidth = rhs.wxModelGoogLineWidth; + shpOutFlag = rhs.shpOutFlag; + + asciiOutFlag = rhs.asciiOutFlag; + asciiAaigridOutFlag = rhs.asciiAaigridOutFlag; + asciiJsonOutFlag = rhs.asciiJsonOutFlag; + asciiUtmOutFlag = rhs.asciiUtmOutFlag; + ascii4326OutFlag = rhs.ascii4326OutFlag; + asciiUvOutFlag = rhs.asciiUvOutFlag; + + wxModelShpOutFlag = rhs.wxModelShpOutFlag; + wxModelAsciiOutFlag = rhs.wxModelAsciiOutFlag; + txtOutFlag = rhs.txtOutFlag; + volVTKOutFlag = rhs.volVTKOutFlag; + kmlFile = rhs.kmlFile; + kmzFile = rhs.kmzFile; + wxModelKmlFile = rhs.wxModelKmlFile; + wxModelKmzFile = rhs.wxModelKmzFile; + kmzResolution = rhs.kmzResolution; + kmzUnits = rhs.kmzUnits; + shpFile = rhs.shpFile; + dbfFile = rhs.dbfFile; + wxModelShpFile = rhs.wxModelShpFile; + wxModelDbfFile = rhs.wxModelDbfFile; + shpResolution = rhs.shpResolution; + shpUnits = rhs.shpUnits; + pdfOutFlag = rhs.pdfOutFlag; + pdfDEMFileName = rhs.pdfDEMFileName; + pdfResolution = rhs.pdfResolution; + pdfLineWidth = rhs.pdfLineWidth; + pdfUnits = rhs.pdfUnits; + pdfFile = rhs.pdfFile; + pdfBaseType = rhs.pdfBaseType; + pdfWidth = rhs.pdfWidth; + pdfHeight = rhs.pdfHeight; + pdfDPI = rhs.pdfDPI; + cldFile = rhs.cldFile; + velFile = rhs.velFile; + wxModelCldFile = rhs.wxModelCldFile; + wxModelVelFile = rhs.wxModelVelFile; + velResolution = rhs.velResolution; + velOutputFileDistanceUnits = rhs.velOutputFileDistanceUnits; + angFile = rhs.angFile; + atmFile = rhs.atmFile; + wxModelAngFile = rhs.wxModelAngFile; + angResolution = rhs.angResolution; + angOutputFileDistanceUnits = rhs.angOutputFileDistanceUnits; + legFile = rhs.legFile; + dateTimeLegFile = rhs.dateTimeLegFile; + wxModelLegFile = rhs.wxModelLegFile; + dateTimewxModelLegFile = rhs.dateTimewxModelLegFile; + volVTKFile = rhs.volVTKFile; + keepOutGridsInMemory = rhs.keepOutGridsInMemory; + customOutputPath = rhs.customOutputPath; + +#ifdef NINJA_SPEED_TESTING + speedDampeningRatio = rhs.speedDampeningRatio; +#endif + + downDragCoeff = rhs.downDragCoeff; + downEntrainmentCoeff = rhs.downEntrainmentCoeff; + upDragCoeff = rhs.upDragCoeff; + upEntrainmentCoeff = rhs.upEntrainmentCoeff; + + stabilityFlag = rhs.stabilityFlag; + alphaStability = rhs.alphaStability; +#ifdef FRICTION_VELOCITY + frictionVelocityFlag = rhs.frictionVelocityFlag; + frictionVelocityCalculationMethod = rhs.frictionVelocityCalculationMethod; + ustarFile = rhs.ustarFile; +#endif + + outputPath = rhs.outputPath; + + //class crap + dem = rhs.dem; + surface = rhs.surface; + +#ifdef _OPENMP + omp_set_nested(false); + omp_set_dynamic(false); +#endif //_OPENMP + } /** @@ -225,15 +398,21 @@ WindNinjaInputs &WindNinjaInputs::operator=(const WindNinjaInputs &rhs) { if(&rhs != this) { - Com = NULL; // must be set to null! Gets created fresh in the ninjaArmy/ninja constructors and assignment operators + delete Com; + Com = new ninjaComClass(); + *Com = *rhs.Com; + inputsRunNumber = rhs.inputsRunNumber; + armySize = rhs.armySize; hSpdMemDs = rhs.hSpdMemDs; hDirMemDs = rhs.hDirMemDs; hDustMemDs = rhs.hDustMemDs; - + vegetation = rhs.vegetation; + speedInitGridFilename = rhs.speedInitGridFilename; + dirInitGridFilename = rhs.dirInitGridFilename; initializationMethod = rhs.initializationMethod; forecastFilename = rhs.forecastFilename; inputSpeedUnits = rhs.inputSpeedUnits; @@ -244,9 +423,9 @@ WindNinjaInputs &WindNinjaInputs::operator=(const WindNinjaInputs &rhs) inputWindHeight = rhs.inputWindHeight; outputWindHeightUnits = rhs.outputWindHeightUnits; outputWindHeight = rhs.outputWindHeight; - - + stations = rhs.stations; + realStations = rhs.realStations; wxStationFilename = rhs.wxStationFilename; stationsScratch = rhs.stationsScratch; stationsOldInput = rhs.stationsOldInput; @@ -261,6 +440,7 @@ WindNinjaInputs &WindNinjaInputs::operator=(const WindNinjaInputs &rhs) dustFilename = rhs.dustFilename; dustFileOut = rhs.dustFileOut; geotiffOutFlag = rhs.geotiffOutFlag; + geotiffOutFilename = rhs.geotiffOutFilename; dustFile = rhs.dustFile; ustarFile = rhs.ustarFile; #endif @@ -268,6 +448,7 @@ WindNinjaInputs &WindNinjaInputs::operator=(const WindNinjaInputs &rhs) nIterations = rhs.nIterations; meshCount = rhs.meshCount; ninjafoamMeshChoice = rhs.ninjafoamMeshChoice; + existingCaseDirectory = rhs.existingCaseDirectory; stlFile = rhs.stlFile; foamVelocityGrid = rhs.foamVelocityGrid; foamAngleGrid = rhs.foamAngleGrid; @@ -281,6 +462,8 @@ WindNinjaInputs &WindNinjaInputs::operator=(const WindNinjaInputs &rhs) latList = rhs.latList; lonList = rhs.lonList; heightList = rhs.heightList; + projYList = rhs.projYList; + projXList = rhs.projXList; ninjaTime = rhs.ninjaTime; if(rhs.ninjaTimeZone.get() == NULL) //If pointer is NULL @@ -290,7 +473,9 @@ WindNinjaInputs &WindNinjaInputs::operator=(const WindNinjaInputs &rhs) else //Else it is a good time zone pointer, so set accordingly ninjaTimeZone = boost::local_time::time_zone_ptr (new boost::local_time::posix_time_zone(rhs.ninjaTimeZone->to_posix_string())); + airTempUnits = rhs.airTempUnits; airTemp = rhs.airTemp; + cloudCoverUnits = rhs.cloudCoverUnits; cloudCover = rhs.cloudCover; latitude = rhs.latitude; longitude = rhs.longitude; @@ -314,7 +499,7 @@ WindNinjaInputs &WindNinjaInputs::operator=(const WindNinjaInputs &rhs) asciiUtmOutFlag = rhs.asciiUtmOutFlag; ascii4326OutFlag = rhs.ascii4326OutFlag; asciiUvOutFlag = rhs.asciiUvOutFlag; - + wxModelShpOutFlag = rhs.wxModelShpOutFlag; wxModelAsciiOutFlag = rhs.wxModelAsciiOutFlag; txtOutFlag = rhs.txtOutFlag; @@ -354,23 +539,25 @@ WindNinjaInputs &WindNinjaInputs::operator=(const WindNinjaInputs &rhs) angOutputFileDistanceUnits = rhs.angOutputFileDistanceUnits; legFile = rhs.legFile; dateTimeLegFile = rhs.dateTimeLegFile; + wxModelLegFile = rhs.wxModelLegFile; + dateTimewxModelLegFile = rhs.dateTimewxModelLegFile; volVTKFile = rhs.volVTKFile; keepOutGridsInMemory = rhs.keepOutGridsInMemory; customOutputPath = rhs.customOutputPath; - + #ifdef NINJA_SPEED_TESTING speedDampeningRatio = rhs.speedDampeningRatio; #endif downDragCoeff = rhs.downDragCoeff; - downEntrainmentCoeff = rhs.downDragCoeff; + downEntrainmentCoeff = rhs.downEntrainmentCoeff; upDragCoeff = rhs.upDragCoeff; upEntrainmentCoeff = rhs.upEntrainmentCoeff; - + stabilityFlag = rhs.stabilityFlag; alphaStability = rhs.alphaStability; #ifdef FRICTION_VELOCITY - frictionVelocityFlag = rhs.frictionVelocityFlag; + frictionVelocityFlag = rhs.frictionVelocityFlag; frictionVelocityCalculationMethod = rhs.frictionVelocityCalculationMethod; ustarFile = rhs.ustarFile; #endif diff --git a/src/ninja/WindNinjaInputs.h b/src/ninja/WindNinjaInputs.h index 85805cc34..7c220136b 100644 --- a/src/ninja/WindNinjaInputs.h +++ b/src/ninja/WindNinjaInputs.h @@ -109,7 +109,7 @@ struct WindNinjaInputs ninjaComClass *Com; // pointer to a given ninjas[i] level com handler int inputsRunNumber; - int armySize; + int armySize; GDALDatasetH hSpdMemDs; GDALDatasetH hDirMemDs; GDALDatasetH hDustMemDs; diff --git a/src/ninja/ninja.cpp b/src/ninja/ninja.cpp index 3f0e0aecf..ba9bab685 100644 --- a/src/ninja/ninja.cpp +++ b/src/ninja/ninja.cpp @@ -76,10 +76,6 @@ ninja::ninja() nMaxMatchingIters = atoi( CPLGetConfigOption( "NINJA_POINT_MAX_MATCH_ITERS", "150" ) ); CPLDebug( "NINJA", "Maximum match iterations set to: %d", nMaxMatchingIters ); - - // ninjaCom stuff - input.Com = new ninjaComClass(); - set_ninjaComRunNumber(-9999); // initial val } /**Ninja destructor @@ -88,7 +84,6 @@ ninja::ninja() ninja::~ninja() { deleteDynamicMemory(); - delete input.Com; } /** @@ -122,10 +117,6 @@ ninja::ninja(const ninja &rhs) , mesh(rhs.mesh) , input(rhs.input) { - //input.Com = new ninjaComClass(); - //*input.Com = *rhs.input.Com; - input.Com = new ninjaComClass(*rhs.input.Com); - cancel = rhs.cancel; alphaH = rhs.alphaH; isNullRun = rhs.isNullRun; @@ -178,10 +169,6 @@ ninja &ninja::operator=(const ninja &rhs) { if(&rhs != this) { - delete input.Com; - input.Com = new ninjaComClass(); - *input.Com = *rhs.input.Com; - AngleGrid = rhs.AngleGrid; VelocityGrid = rhs.VelocityGrid; CloudGrid = rhs.CloudGrid; diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index bfdb5b288..1e29ce663 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -49,8 +49,6 @@ ninjaArmy::ninjaArmy() */ ninjaArmy::ninjaArmy(const ninjaArmy& A) { - //Com = new ninjaComClass(); - //*Com = *A.Com; Com = new ninjaComClass(*A.Com); writeFarsiteAtmFile = A.writeFarsiteAtmFile; diff --git a/src/ninja/ninjaCom.h b/src/ninja/ninjaCom.h index 82139eb73..61411bb3c 100644 --- a/src/ninja/ninjaCom.h +++ b/src/ninja/ninjaCom.h @@ -52,8 +52,6 @@ class ninjaComClass ninjaComClass(const ninjaComClass& A); ninjaComClass& operator=(const ninjaComClass &A); - double progressWeight; - typedef enum { ninjaNone, @@ -84,6 +82,8 @@ class ninjaComClass bool printSolverProgress; //flag specifying where normal solver progress should be printed (matching will still be printed) bool printRunNumber; //flag to determine if thread number should be printed at beginning of messages + double progressWeight; + //methods void set_progressFunc(ProgressFunc func, void *pUser); From 660d8390ee5f2dbfdb59a3b6248928b3b379480f Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 18 Dec 2025 13:19:18 -0700 Subject: [PATCH 318/435] Setup proper connection for when to run readSettings, added timer to map.html to prevent weird zooming WIP --- data/map.html | 8 +++++--- src/gui/mainWindow.cpp | 6 +++--- src/gui/mainWindow.h | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/data/map.html b/data/map.html index 582db6657..9ac6a2ef4 100755 --- a/data/map.html +++ b/data/map.html @@ -189,8 +189,10 @@ fill: false }).addTo(mapRectangleLayer); - map.fitBounds(rectangle.getBounds()); - } + setTimeout(() => { + map.fitBounds(rectangle.getBounds()); +}, 5000); + } function startRectangleDrawing() { mapRectangleLayer.clearLayers(); @@ -275,6 +277,7 @@ map.fitBounds(layer.getBounds()); }); + const baseMaps = {}; const overlayMaps = {}; const layerControl = L.control.layers(baseMaps, overlayMaps).addTo(map); @@ -307,7 +310,6 @@ new QWebChannel(qt.webChannelTransport, channel => { window.bridge = channel.objects.bridge; - window.bridge.notifyReady(); }); diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 89e797311..5b005bc24 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -129,10 +129,11 @@ void MainWindow::connectSignals() connect(surfaceInput, &SurfaceInput::updateTreeView, pointInitializationInput, &PointInitializationInput::updateTreeView); connect(surfaceInput, &SurfaceInput::updateTreeView, weatherModelInput, &WeatherModelInput::updateTreeView); connect(weatherModelInput, &WeatherModelInput::updateState, &AppState::instance(), &AppState::updateWeatherModelInputState); + connect(webEngineView, &QWebEngineView::loadFinished, this, &MainWindow::readSettings); + connect(this, &MainWindow::updateDirunalState, &AppState::instance(), &AppState::updateDiurnalInputState); connect(this, &MainWindow::updateStabilityState, &AppState::instance(), &AppState::updateStabilityInputState); connect(this, &MainWindow::updateMetholodyState, &AppState::instance(), &AppState::updateSolverMethodologyState); - connect(this, &MainWindow::updateProgressValueSignal, this, &MainWindow::updateProgressValue, Qt::QueuedConnection); connect(this, &MainWindow::updateProgressMessageSignal, this, &MainWindow::updateProgressMessage, Qt::QueuedConnection); connect(this, &MainWindow::writeToConsoleSignal, this, &MainWindow::writeToConsole, Qt::QueuedConnection); @@ -1225,7 +1226,6 @@ void MainWindow::readSettings() settings.setDefaultFormat(QSettings::IniFormat); if(settings.contains("inputFileDir")) { - QString temp = settings.value("inputFileDir").toString(); ui->elevationInputFileLineEdit->setText(settings.value("inputFileDir").toString()); } else @@ -1280,7 +1280,7 @@ void MainWindow::readSettings() void MainWindow::showEvent(QShowEvent *event) { QMainWindow::showEvent(event); - connect(mapBridge, &MapBridge::ready, this, &MainWindow::readSettings); + } void MainWindow::closeEvent(QCloseEvent *event) diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index 594447c16..0ef61541b 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -104,7 +104,6 @@ class MainWindow : public QMainWindow void writeToConsoleSignal(const QString &msg, QColor color = Qt::white); protected: - void showEvent(QShowEvent *event) override; void closeEvent(QCloseEvent *event) override; private slots: @@ -167,6 +166,7 @@ private slots: void writeSettings(); void readSettings(); + void waitForLeaflet(); }; #endif // MAINWINDOW_H From 5874545bf8dfae319af5e3fb197d0ec57cc3c402 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 18 Dec 2025 13:32:11 -0700 Subject: [PATCH 319/435] make ninjaArmy level ninjaCom no longer print runNumber, while still allowing ninjas[i] level ninjaCom to print runNumber. For issue #666, related to issue #639 --- src/ninja/ninja.cpp | 1 + src/ninja/ninjaArmy.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/ninja/ninja.cpp b/src/ninja/ninja.cpp index ba9bab685..fe089f2d3 100644 --- a/src/ninja/ninja.cpp +++ b/src/ninja/ninja.cpp @@ -3533,6 +3533,7 @@ void ninja::set_DEM(const double* dem, const int nXSize, const int nYSize, void ninja::set_ninjaCommunication(const ninjaComClass* Com) { *input.Com = *Com; + input.Com->printRunNumber = true; } void ninja::set_ninjaComRunNumber(int RunNumber) diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 1e29ce663..f04b7f771 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -37,6 +37,7 @@ ninjaArmy::ninjaArmy() { Com = new ninjaComClass(); Com->runNumber = 9999; + Com->printRunNumber = false; // ninjas.push_back(new ninja()); initLocalData(); From c953be91601ec0132371f746d5dd4371ebe2078e Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 18 Dec 2025 13:35:35 -0700 Subject: [PATCH 320/435] re-enabled diurnal for the GUI and C-API, though still in a quirky form especially for the GUI, in order to test how the ninjaCom constructor and assignment operator methods hold up running diurnal GUI simulations. All the tests are working fine, though matchedPoints seems to print extra stuff not related to these tests in the C-API auto test script. For issue #666, related to issues #639 and #582 --- autotest/api/test_capi_domain_average_wind.c | 5 +-- src/gui/mainWindow.cpp | 47 +++++++++++++++++++- src/ninja/windninja.cpp | 17 ++++--- src/ninja/windninja.h | 5 +-- 4 files changed, 58 insertions(+), 16 deletions(-) diff --git a/autotest/api/test_capi_domain_average_wind.c b/autotest/api/test_capi_domain_average_wind.c index 7f343bc6b..d47c0f314 100644 --- a/autotest/api/test_capi_domain_average_wind.c +++ b/autotest/api/test_capi_domain_average_wind.c @@ -66,7 +66,7 @@ int main() const char * meshChoice = "coarse"; const char * vegetation = "grass"; const int nLayers = 20; //layers in the mesh - const int diurnalFlag = 0; //diurnal slope wind parameterization not used + const int diurnalFlag = 1; //diurnal slope wind parameterization not used const double height = 10.0; const char * heightUnits = "m"; //bool momentumFlag = 0; //we're using the conservation of mass solver @@ -125,8 +125,7 @@ int main() /* * Create the army */ - err = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speedList, speedUnits, directionList, papszOptions); - //err = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speedList, speedUnits, directionList, year, month, day, hour, minute, timezone, air, airUnits, cloud, cloudUnits, papszOptions); + err = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speedList, speedUnits, directionList, year, month, day, hour, minute, timezone, air, airUnits, cloud, cloudUnits, papszOptions); if( err != NINJA_SUCCESS) { printf("NinjaMakeDomainAverageArmy: err = %d\n", err); diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index f189f4407..0c696d25a 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -429,6 +429,13 @@ void MainWindow::solveButtonClicked() initializationMethod = "domain_average"; QList speeds; QList directions; +// QList years; +// QList months; +// QList days; +// QList hours; +// QList minutes; +// QList airTemps; +// QList cloudCovers; int rowCount = ui->domainAverageTable->rowCount(); for (int row = 0; row < rowCount; ++row) @@ -444,8 +451,46 @@ void MainWindow::solveButtonClicked() numNinjas = speeds.size(); bool momentumFlag = ui->momentumSolverCheckBox->isChecked(); QString speedUnits = ui->tableSpeedUnits->currentText(); +// QString DEMTimeZone = ui->timeZoneComboBox->currentText(); +// QString airTempUnits = ui->tableAirTempUnits->currentText(); +// QString cloudCoverUnits = ui->tableCloudCoverUnits->currentText(); + + QDateTime currentDateTimeUtc = QDateTime::currentDateTimeUtc(); + QDate currentDateUtc = currentDateTimeUtc.date(); + QTime currentTimeUtc = currentDateTimeUtc.time(); + int currentYearUtc = currentDateUtc.year(); + int currentMonthUtc = currentDateUtc.month(); + int currentDayUtc = currentDateUtc.day(); + int currentHoursUtc = currentTimeUtc.hour(); + int currentMinutesUtc = currentTimeUtc.minute(); + + QList years(numNinjas, currentYearUtc); + QList months(numNinjas, currentMonthUtc); + QList days(numNinjas, currentDayUtc); + QList hours(numNinjas, currentHoursUtc); + QList minutes(numNinjas, 0); + const char * timeZoneUtc = "UTC"; + QList airTemps(numNinjas, 72.0); + const char * airTempUnits = "F"; + QList cloudCovers(numNinjas, 15.0); + const char * cloudCoverUnits = "percent"; + for(size_t ninjaIdx = 1; ninjaIdx < numNinjas; ninjaIdx++) + { + minutes[ninjaIdx] = minutes[ninjaIdx] + 1; + // better not get more than 60 ninjas during our simple tests, cause this would break down really fast ... + //if( minutes[ninjaIdx] > 59 ) + //{ + // minutes[ninjaIdx] = minutes[ninjaIdx] - 60; + // hours[ninjaIdx] = hours[ninjaIdx] + 1; + // if( hours[ninjaIdx] > 23 ) + // { + // hours[ninjaIdx] = hours[ninjaIdx] - 24; + // } + //} + } - ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), papszOptions); +// ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), DEMTimeZone.toUtf8().data(), airTemps.data(), airTempUnits.toUtf8().constData(), cloudCovers.data(), cloudCoverUnits.toUtf8().constData(), papszOptions); + ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), timeZoneUtc, airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaMakeDomainAverageArmy: ninjaErr =" << ninjaErr; diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index a01a7b69a..0c99fd50a 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -110,9 +110,8 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaInitializeArmy() * \return An opaque handle to a ninjaArmy on success, NULL otherwise. */ WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy - ( NinjaArmyH * army, unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options ) -// ( NinjaArmyH * army, unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, -// const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options ) + ( NinjaArmyH * army, unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, + const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options ) { #ifndef NINJAFOAM @@ -145,14 +144,14 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy for(int i=0; i( army )->getSize(); i++) { reinterpret_cast( army )->setInputSpeed( i, speedList[i], std::string( speedUnits ) ); - + reinterpret_cast( army )->setInputDirection( i, directionList[i] ); -// reinterpret_cast( army )->setDateTime( i, yearList[i], monthList[i], dayList[i], hourList[i], minuteList[i], 0, timeZone ); -// -// reinterpret_cast( army )->setUniAirTemp( i, airTempList[i], std::string( airTempUnits ) ); -// -// reinterpret_cast( army )->setUniCloudCover( i, cloudCoverList[i], std::string( cloudCoverUnits ) ); + reinterpret_cast( army )->setDateTime( i, yearList[i], monthList[i], dayList[i], hourList[i], minuteList[i], 0, timeZone ); + + reinterpret_cast( army )->setUniAirTemp( i, airTempList[i], std::string( airTempUnits ) ); + + reinterpret_cast( army )->setUniCloudCover( i, cloudCoverList[i], std::string( cloudCoverUnits ) ); } } catch( ... ) diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 09ccff521..1bdb5cc57 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -88,9 +88,8 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaArmyH* NinjaInitializeArmy(); WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy - ( NinjaArmyH * ninjaArmy, unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, char ** options); -// ( NinjaArmyH * ninjaArmy, unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, -// const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char* airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options); + ( NinjaArmyH * ninjaArmy, unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, + const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char* airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options); //TODO: add helper function to generate arrays of years, months, days, hours, and minutes from a station file WINDNINJADLL_EXPORT NinjaErr NinjaMakePointArmy From 2d26c3ec8cef22f8d116c76137a0d6b499ef87c1 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 18 Dec 2025 13:36:18 -0700 Subject: [PATCH 321/435] rearrange the ninjaCom data members into a more coherent order. For issue #666, related to issue #639 --- src/ninja/ninjaCom.cpp | 80 ++++++++++++++++++++++++------------------ src/ninja/ninjaCom.h | 22 +++++++----- 2 files changed, 59 insertions(+), 43 deletions(-) diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index 4e333fa7e..a8198d2fb 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -35,22 +35,28 @@ */ ninjaComClass::ninjaComClass() { - fpLog = stdout; - fpErr = stderr; + printRunNumber = true; + runNumber = -9999; + + printMaxErrors = false; + errorCount = 0; + nMaxErrors = 10; + + progressWeight = 1.0; + + printSolverProgress = true; + printLastMsg = false; lastMsg[0] = '\0'; - runNumber = -9999; + printProgressFunc = false; pfnProgress = nullptr; pProgressUser = nullptr; + printLogFile = false; + fpLog = stdout; + fpErr = stderr; multiStream = NULL; - errorCount = 0; - nMaxErrors = 10; - printMaxErrors = false; - printSolverProgress = true; - printRunNumber = true; - progressWeight = 1.0; } /** @@ -69,22 +75,28 @@ ninjaComClass::~ninjaComClass() */ ninjaComClass::ninjaComClass(const ninjaComClass& A) { - fpLog = A.fpLog; - fpErr = A.fpErr; + printRunNumber = A.printRunNumber; + runNumber = A.runNumber; + + printMaxErrors = A.printMaxErrors; + errorCount = A.errorCount; + nMaxErrors = A.nMaxErrors; + + progressWeight = A.progressWeight; + + printSolverProgress = A.printSolverProgress; + printLastMsg = A.printLastMsg; strcpy( lastMsg, A.lastMsg ); - runNumber = A.runNumber; + printProgressFunc = A.printProgressFunc; pfnProgress = A.pfnProgress; pProgressUser = A.pProgressUser; + printLogFile = A.printLogFile; + fpLog = A.fpLog; + fpErr = A.fpErr; multiStream = A.multiStream; - errorCount = A.errorCount; - nMaxErrors = A.nMaxErrors; - printMaxErrors = A.printMaxErrors; - printSolverProgress = A.printSolverProgress; - printRunNumber = A.printRunNumber; - progressWeight = A.progressWeight; } /** @@ -97,22 +109,28 @@ ninjaComClass& ninjaComClass::operator=(const ninjaComClass &A) { if(&A != this) { - fpLog = A.fpLog; - fpErr = A.fpErr; + printRunNumber = A.printRunNumber; + runNumber = A.runNumber; + + printMaxErrors = A.printMaxErrors; + errorCount = A.errorCount; + nMaxErrors = A.nMaxErrors; + + progressWeight = A.progressWeight; + + printSolverProgress = A.printSolverProgress; + printLastMsg = A.printLastMsg; strcpy( lastMsg, A.lastMsg ); - runNumber = A.runNumber; + printProgressFunc = A.printProgressFunc; pfnProgress = A.pfnProgress; pProgressUser = A.pProgressUser; + printLogFile = A.printLogFile; + fpLog = A.fpLog; + fpErr = A.fpErr; multiStream = A.multiStream; - errorCount = A.errorCount; - nMaxErrors = A.nMaxErrors; - printMaxErrors = A.printMaxErrors; - printSolverProgress = A.printSolverProgress; - printRunNumber = A.printRunNumber; - progressWeight = A.progressWeight; } return *this; } @@ -126,9 +144,9 @@ void ninjaComClass::set_progressFunc(ProgressFunc func, void *pUser) return; } + printProgressFunc = true; pfnProgress = func; pProgressUser = pUser; - printProgressFunc = true; } /** @@ -171,12 +189,6 @@ void ninjaComClass::ninjaComV(msgType eMsg, const char *fmt, va_list args) ninjaComHandler(eMsg, ninjaMsg); } -//void ninjaComClass::initializeNinjaCom(char *LastMsg, int RunNumber) -//{ -// lastMsg = LastMsg; -// runNumber = RunNumber; -//} - /** * Communication handler for WindNinja simulations. Takes an input message and prints/passes it. * The place the message is printed or passed to (or if the message is ignored) diff --git a/src/ninja/ninjaCom.h b/src/ninja/ninjaCom.h index 61411bb3c..1b1a496bc 100644 --- a/src/ninja/ninjaCom.h +++ b/src/ninja/ninjaCom.h @@ -63,9 +63,21 @@ class ninjaComClass ninjaFatal } msgType; + + bool printRunNumber; // flag to determine if thread number should be printed at beginning of messages + int runNumber; // run number of the simulation. Can turn this back into a pointer to the value in the WindNinjaInputs class, if the values start to differ + + bool printMaxErrors; // flag to determine whether to keep printing error messages past when errorCount exceeds nMaxErrors + int errorCount; // running error count + int nMaxErrors; // max number of errors to report + + double progressWeight; // storage managed and used by diurnal simulations + + bool printSolverProgress; // flag specifying whether normal solver progress should be printed (matching progress from point initialization runs will still be printed) + bool printLastMsg; char lastMsg[NINJA_MSG_SIZE]; // storage of the last message - int runNumber; // run number of the simulation. Can turn this back into a pointer to the value in the WindNinjaInputs class, if the values start to differ + bool printProgressFunc; ProgressFunc pfnProgress; @@ -76,13 +88,6 @@ class ninjaComClass FILE* fpErr; FILE* multiStream; - int errorCount; //running error count - int nMaxErrors; //max number of errors to report - bool printMaxErrors; //flag to determine whether to keep printing error messages past when errorCount exceeds nMaxErrors - bool printSolverProgress; //flag specifying where normal solver progress should be printed (matching will still be printed) - bool printRunNumber; //flag to determine if thread number should be printed at beginning of messages - - double progressWeight; //methods @@ -92,7 +97,6 @@ class ninjaComClass void ninjaCom(msgType eMsg, const char *fmt, ...); void ninjaComV(msgType, const char *, va_list); - //void initializeNinjaCom(char *LastMsg, int RunNumber); void ninjaComHandler(msgType eMsg, const char *ninjaComMsg); }; From 05c6fcb6737855d2a42d8a2e9653381f985f5431 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 18 Dec 2025 19:42:57 -0700 Subject: [PATCH 322/435] a line in the code added during commit 64800a37c2f142250ad5e76d28a4286758df37c3, was removed during commit 660d8390ee5f2dbfdb59a3b6248928b3b379480f, which stopped the code from compiling, adding the line back in let the code compile again, the code appears to be working as expected now --- src/gui/mainWindow.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index 0ef61541b..5d510ea39 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -104,6 +104,7 @@ class MainWindow : public QMainWindow void writeToConsoleSignal(const QString &msg, QColor color = Qt::white); protected: + void showEvent(QShowEvent *event) override; void closeEvent(QCloseEvent *event) override; private slots: From e37a0c3ef3fe937e645e474992cf4ce08ddb2c2b Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 18 Dec 2025 19:45:37 -0700 Subject: [PATCH 323/435] unified/cleaned up the ninjaCom messages a bit, for issue #666 related to issue #639 --- src/gui/mainWindow.cpp | 20 +++++------ src/ninja/ninjaCom.cpp | 78 +++++++++-------------------------------- src/ninja/windninja.cpp | 2 +- 3 files changed, 26 insertions(+), 74 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index cb2ca8a40..abd11808f 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -220,21 +220,22 @@ void updateProgressCallback(const char *pszMessage, void *pUser) // this still emit self->updateProgressValueSignal(runNumber, runProgress); } -//"Run 1 (ERROR): Multiple runs were requested with the same input parameters." -//"Run 0 (ERROR): Exception caught: I WANT CHOCOLATE!!! Yum." +//"Run 1 ERROR: Multiple runs were requested with the same input parameters." +//"Run 0 ERROR: Exception caught: I WANT CHOCOLATE!!! Yum." //"Run 0: Exception caught: Simulation was cancelled by the user." +//"Run 1: Exception canceled by user caught: Simulation was cancelled by the user." - if( msg.find("Exception caught: ") != msg.npos || msg.find("(ERROR): ") != msg.npos || msg.find("ERROR: ") != msg.npos ) + if( msg.find("Exception caught: ") != msg.npos || msg.find("ERROR: ") != msg.npos || msg.find("Exception canceled by user caught: ") != msg.npos ) { if( msg.find("Exception caught: ") != msg.npos ) { pos = msg.find("Exception caught: "); startPos = pos+18; } - else if( msg.find("(ERROR): ") != msg.npos ) + else if( msg.find("Exception canceled by user caught: ") != msg.npos ) { - pos = msg.find("(ERROR): "); - startPos = pos+9; + pos = msg.find("Exception canceled by user caught: "); + startPos = pos+35; } else // if( msg.find("ERROR: ") != msg.npos ) { @@ -261,13 +262,8 @@ void updateProgressCallback(const char *pszMessage, void *pUser) // this still emit self->writeToConsoleSignal(QString::fromStdString("Solver error: "+clipStr), Qt::red); } } - else if( msg.find("(warning): ") != msg.npos || msg.find("Warning: ") != msg.npos ) + else if( msg.find("Warning: ") != msg.npos ) { - if( msg.find("(warning): ") != msg.npos ) - { - pos = msg.find("(warning): "); - startPos = pos+11; - } if( msg.find("Warning: ") != msg.npos ) { pos = msg.find("Warning: "); diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index a8198d2fb..8966b2783 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -200,6 +200,7 @@ void ninjaComClass::ninjaComV(msgType eMsg, const char *fmt, va_list args) void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { char msg[NINJA_MSG_SIZE]; // Declare a character array to store the result of sprintf, for printing + char runPartMsg[10]; // this SHOULD be enough for the "Run %d:" part of the msg if( printProgressFunc == false || multiStream != NULL ) { @@ -223,10 +224,15 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) fpErr = stdout; // for now, always assume printRunNumber has been already been set ahead of time, where the default value is always true - // but printRunNumber is always effectively set to true for printProgressFunc and multiStream output // for now, always assume printMaxErrors has been already been set ahead of time, where the default value is always false, to print all errors + runPartMsg[0] = '\0'; + if( printRunNumber == true ) + { + sprintf( runPartMsg, "Run %d: ", runNumber ); + } + if( printMaxErrors == true ) { if( eMsg == ninjaFailure || eMsg == ninjaFatal ) @@ -236,17 +242,9 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if( errorCount == nMaxErrors+1 ) { - if( printRunNumber == true ) - { - sprintf( msg, "Run %d: More than %d errors have been reported. " - "No more will be reported from now on.\n", - runNumber, nMaxErrors ); - } else - { - sprintf( msg, "More than %d errors have been reported. " - "No more will be reported from now on.\n", - nMaxErrors ); - } + sprintf( msg, "%sMore than %d errors have been reported. " + "No more will be reported from now on.\n", + runPartMsg, nMaxErrors ); fprintf(fpErr, "%s", msg); @@ -268,13 +266,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) if(eMsg == ninjaNone) //None { - if( printRunNumber == true ) - { - sprintf( msg, "Run %d: %s\n", runNumber, ninjaComMsg ); - } else - { - sprintf( msg, "%s\n", ninjaComMsg ); - } + sprintf( msg, "%s%s\n", runPartMsg, ninjaComMsg ); fprintf(fpLog, "%s", msg); @@ -292,13 +284,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) #ifdef NINJA_DEBUG else if(eMsg == ninjaDebug) //Debug { - if( printRunNumber == true ) - { - sprintf( msg, "Run %d: %s\n", runNumber, ninjaComMsg); - } else - { - sprintf( msg, "%s\n", ninjaComMsg); - } + sprintf( msg, "%s%s\n", runPartMsg, ninjaComMsg); fprintf(fpLog, "%s", msg); @@ -318,13 +304,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { if(printSolverProgress) { - if( printRunNumber == true ) - { - sprintf( msg, "Run %d (solver): %d%% complete\n", runNumber, atoi(ninjaComMsg)); - } else - { - sprintf( msg, "Solver: %d%% complete\n", atoi(ninjaComMsg)); - } + sprintf( msg, "%sSolver: %d%% complete\n", runPartMsg, atoi(ninjaComMsg)); fprintf(fpLog, "%s", msg); @@ -342,13 +322,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) } else if(eMsg == ninjaOuterIterProgress) //Solver progress for outer matching iterations (%complete) { - if( printRunNumber == true ) - { - sprintf( msg, "Run %d (matching): %d%% complete\n", runNumber, atoi(ninjaComMsg)); - } else - { - sprintf( msg, "Solver (matching): %d%% complete\n", atoi(ninjaComMsg)); - } + sprintf( msg, "%sSolver (matching): %d%% complete\n", runPartMsg, atoi(ninjaComMsg)); fprintf(fpLog, "%s", msg); @@ -365,13 +339,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) } else if(eMsg == ninjaWarning) //Warnings { - if( printRunNumber == true ) - { - sprintf( msg, "Run %d (warning): %s\n", runNumber, ninjaComMsg); - } else - { - sprintf( msg, "Warning: %s\n", ninjaComMsg); - } + sprintf( msg, "%sWarning: %s\n", runPartMsg, ninjaComMsg); fprintf(fpLog, "%s", msg); @@ -387,13 +355,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) } } else if(eMsg == ninjaFailure) //Failures (ie errors) { - if( printRunNumber == true ) - { - sprintf( msg, "Run %d (ERROR): %s\n", runNumber, ninjaComMsg); - } else - { - sprintf( msg, "ERROR: %s\n", ninjaComMsg); - } + sprintf( msg, "%sERROR: %s\n", runPartMsg, ninjaComMsg); fprintf(fpErr, "%s", msg); @@ -410,13 +372,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) } else if(eMsg == ninjaFatal) //Failures (probably fatal) { - if( printRunNumber == true ) - { - sprintf( msg, "Run %d (ERROR): %s\n", runNumber, ninjaComMsg); - } else - { - sprintf( msg, "ERROR: %s\n", ninjaComMsg); - } + sprintf( msg, "%sERROR: %s\n", runPartMsg, ninjaComMsg); fprintf(fpErr, "%s", msg); diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 9e44cd8fe..7c62903ad 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -141,7 +141,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy { reinterpret_cast( army )->makeDomainAverageArmy( numNinjas, momentumFlag); - for(int i=0; i( army )->getSize(); i++) + for(int i=0; i( army )->getSize(); i++) { reinterpret_cast( army )->setInputSpeed( i, speedList[i], std::string( speedUnits ) ); From e97249056a079ef9128ca032773601bfba7328de Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 29 Dec 2025 08:46:05 -0700 Subject: [PATCH 324/435] Readded removed package statements for linux and added MSVC if blocks, for #660 --- CMakeLists.txt | 15 +++++++++++++++ src/cli/CMakeLists.txt | 6 +++++- src/gui/CMakeLists.txt | 5 ++++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 447771103..e4c674d63 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,6 +82,21 @@ set(WINDNINJA_VERSION_NAME WindNinja-${VER_STR}) message(STATUS "VERSION: ${VER_STR}") message(STATUS "PKG VERSION: ${WINDNINJA_VERSION_NAME}") +include(FindBoost) +set(Boost_DEBUG OFF) +if(WIN32) + set(Boost_USE_STATIC_LIBS ON) +else(WIN32) + set(Boost_USE_STATIC_LIBS OFF) +endif(WIN32) +set(Boost_USE_MULTITHREAD OFF) +find_package(Boost 1.41.1 COMPONENTS date_time program_options + unit_test_framework REQUIRED) + +include(FindNetCDF) +include(FindGDAL) +find_package(NetCDF) + option(USE_VCPKG "Use VCPKG for Windows dependencies" OFF) if(USE_VCPKG) if(WIN32) diff --git a/src/cli/CMakeLists.txt b/src/cli/CMakeLists.txt index ac3840c79..d03aa35ed 100644 --- a/src/cli/CMakeLists.txt +++ b/src/cli/CMakeLists.txt @@ -56,7 +56,11 @@ add_executable(WindNinja_cli cmake_cli.cpp) add_dependencies(WindNinja_cli ninja) -target_link_libraries(WindNinja_cli PRIVATE shapelib::shp ${LINK_LIBS}) +if(WIN32) + target_link_libraries(WindNinja_cli PRIVATE shapelib::shp) +endif() + +target_link_libraries(WindNinja_cli PRIVATE ${LINK_LIBS}) if(MSVC) target_compile_definitions(WindNinja_cli diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 989e2356b..906604643 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -44,12 +44,15 @@ else() ) endif() +if(WIN32) + target_link_libraries(WindNinja PRIVATE shapelib::shp) +endif() + target_link_libraries(WindNinja PRIVATE Qt${QT_VERSION_MAJOR}::Widgets PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets PRIVATE Qt${QT_VERSION_MAJOR}::WebChannel PRIVATE ninja - PRIVATE shapelib::shp ) include(GNUInstallDirs) From 192e375a1509b4ed02df0356f035de721075c8c9 Mon Sep 17 00:00:00 2001 From: masonwillman <117214223+masonwillman@users.noreply.github.com> Date: Mon, 29 Dec 2025 09:51:20 -0700 Subject: [PATCH 325/435] Small fixes to ensure windows build was able to compile, for #660 --- CMakeLists.txt | 26 +++++++++++++------------- src/cli/CMakeLists.txt | 2 +- src/gui/CMakeLists.txt | 10 +++++++--- src/ninja/CMakeLists.txt | 2 +- src/ninja/windninja.h | 14 -------------- 5 files changed, 22 insertions(+), 32 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 04820201d..1d96146b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,20 +82,7 @@ set(WINDNINJA_VERSION_NAME WindNinja-${VER_STR}) message(STATUS "VERSION: ${VER_STR}") message(STATUS "PKG VERSION: ${WINDNINJA_VERSION_NAME}") -include(FindBoost) -set(Boost_DEBUG OFF) -if(WIN32) - set(Boost_USE_STATIC_LIBS ON) -else(WIN32) - set(Boost_USE_STATIC_LIBS OFF) -endif(WIN32) -set(Boost_USE_MULTITHREAD OFF) -find_package(Boost 1.41.1 COMPONENTS date_time program_options - unit_test_framework REQUIRED) -include(FindNetCDF) -include(FindGDAL) -find_package(NetCDF) option(USE_VCPKG "Use VCPKG for Windows dependencies" OFF) if(USE_VCPKG) @@ -110,9 +97,22 @@ if(USE_VCPKG) set(GDAL_LIBRARY GDAL::GDAL) set(NETCDF_LIBRARIES_C netCDF::netcdf) + set(Boost_DEBUG OFF) + set(Boost_USE_STATIC_LIBS ON) + set(Boost_USE_MULTITHREAD OFF) + else() message(FATAL_ERROR "USE_VCPKG is only supported on Windows.") endif() +else() + include(FindBoost) + set(Boost_DEBUG OFF) + set(Boost_USE_STATIC_LIBS OFF) + set(Boost_USE_MULTITHREAD OFF) + find_package(Boost 1.41.1 COMPONENTS date_time program_options unit_test_framework REQUIRED) + include(FindNetCDF) + include(FindGDAL) + find_package(NetCDF) endif() # Ninja executables diff --git a/src/cli/CMakeLists.txt b/src/cli/CMakeLists.txt index 974f7f5e1..4e3d893b4 100644 --- a/src/cli/CMakeLists.txt +++ b/src/cli/CMakeLists.txt @@ -44,7 +44,7 @@ add_executable(WindNinja_cli cmake_cli.cpp) add_dependencies(WindNinja_cli ninja) if(WIN32) - target_link_libraries(WindNinja_cli PRIVATE shapelib::shp) + target_link_libraries(WindNinja_cli PRIVATE shapelib::shp GDAL::GDAL) endif() target_link_libraries(WindNinja_cli PRIVATE ${LINK_LIBS}) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 814814e67..0331b5f01 100755 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -5,8 +5,12 @@ set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) find_package(QT NAMES Qt6 REQUIRED COMPONENTS Widgets) -find_package(Qt6 REQUIRED COMPONENTS Widgets WebEngineWidgets) -find_package(Qt6 REQUIRED COMPONENTS Core) +find_package(Qt6 REQUIRED COMPONENTS + Core + Widgets + WebEngineWidgets + WebChannel +) set(PROJECT_SOURCES main.cpp @@ -53,7 +57,7 @@ else() endif() if(WIN32) - target_link_libraries(WindNinja PRIVATE shapelib::shp) + target_link_libraries(WindNinja PRIVATE shapelib::shp GDAL::GDAL) endif() target_link_libraries(WindNinja PRIVATE Qt${QT_VERSION_MAJOR}::Widgets PRIVATE Qt${QT_VERSION_MAJOR}::WebEngineWidgets PRIVATE ninja) diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt index 46410a682..03780e772 100644 --- a/src/ninja/CMakeLists.txt +++ b/src/ninja/CMakeLists.txt @@ -142,7 +142,7 @@ include_directories(${NINJA_INCLUDES}) if(WIN32) add_library(ninja STATIC ${NINJA_SOURCES}) add_library(WindNinjadll SHARED ${NINJA_SOURCES}) - target_link_libraries(WindNinjadll PRIVATE shapelib::shp ${LINK_LIBS}) + target_link_libraries(WindNinjadll PRIVATE shapelib::shp GDAL::GDAL ${LINK_LIBS}) target_compile_definitions(WindNinjadll PUBLIC WIN32_LEAN_AND_MEAN diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 3fa1c9c58..64a11ae60 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -51,21 +51,7 @@ #endif //WIN32 && WINDNINJA_EXPORTS #endif //WINDNINJADLL_EXPORT -#ifdef WIN32 -#define true 1 -#define false 0 -#else #include -#endif - -#ifndef TRUE -#define TRUE 1 -#endif - -#ifndef FALSE -#define FALSE 0 -#endif - #include #include From 2dce964ad2af5beb3189135d5a04de0939889461 Mon Sep 17 00:00:00 2001 From: masonwillman <117214223+masonwillman@users.noreply.github.com> Date: Mon, 29 Dec 2025 12:43:07 -0700 Subject: [PATCH 326/435] Fixed issue with javascript error on windows build, for #660 --- data/map.html | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/data/map.html b/data/map.html index 9ac6a2ef4..be0ea7820 100755 --- a/data/map.html +++ b/data/map.html @@ -308,10 +308,12 @@ centerControl.addTo(map); - new QWebChannel(qt.webChannelTransport, channel => { - window.bridge = channel.objects.bridge; - }); - + if (window.qt) { + new QWebChannel(qt.webChannelTransport, channel => { + window.bridge = channel.objects.bridge; + }); + } + From a33961e4c7ecf0548a70314b95e8b0aed797b077 Mon Sep 17 00:00:00 2001 From: masonwillman <117214223+masonwillman@users.noreply.github.com> Date: Tue, 30 Dec 2025 07:55:04 -0700 Subject: [PATCH 327/435] Added an application style to standardize between Linux and Windows, for #660 --- src/gui/main.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 048ed2f86..6dbe1d46c 100755 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include "splashScreen.h" @@ -61,6 +62,7 @@ int main(int argc, char *argv[]) a.setWindowIcon(icon); a.setApplicationName(QString("WindNinja")); a.setApplicationVersion(ver); + a.setStyle(QStyleFactory::create("Fusion")); MainWindow* w = nullptr; try From c12d08ebc750a20b73345859186bbb8ee7ece4b1 Mon Sep 17 00:00:00 2001 From: masonwillman <117214223+masonwillman@users.noreply.github.com> Date: Mon, 5 Jan 2026 07:59:26 -0700 Subject: [PATCH 328/435] Updated vcpkg.json with proper features, for #660 --- vcpkg.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/vcpkg.json b/vcpkg.json index 614814600..117866354 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -12,7 +12,8 @@ "name": "boost-test" }, { - "name": "gdal" + "name": "gdal", + "features": ["poppler"] }, { "name": "shapelib" @@ -37,7 +38,8 @@ "name": "qtwebchannel" }, { - "name": "qtwebengine" + "name": "qtwebengine", + "features": ["webchannel"] } ] } From f5af4cd9f776b7acc8bb8e2f1dafc86ca22ce9fc Mon Sep 17 00:00:00 2001 From: masonwillman <117214223+masonwillman@users.noreply.github.com> Date: Mon, 5 Jan 2026 10:43:28 -0700 Subject: [PATCH 329/435] CMake and initialize changes to properly detect GDAL and Proj when installing WindNinja on Windows, for #660 --- CMakeLists.txt | 16 +++++++++++++++- src/ninja/ninja_init.cpp | 11 +++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d96146b2..9dc1a10d1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -544,9 +544,23 @@ if(FIRELAB_PACKAGE AND WIN32 AND MSVC AND USE_VCPKG) PATTERN "platforms/*" PATTERN "resources/*" PATTERN "*.qm" -) + ) + + install( + DIRECTORY "${CMAKE_SOURCE_DIR}/vcpkg_installed/x64-windows/share/gdal/" + DESTINATION share/windninja/gdal-data/data + COMPONENT apps + ) + + install( + FILES "${CMAKE_SOURCE_DIR}/vcpkg_installed/x64-windows/share/proj/proj.db" + DESTINATION share/windninja/proj-data/data + COMPONENT apps + ) + endif(FIRELAB_PACKAGE AND WIN32 AND MSVC AND USE_VCPKG) + set(CPACK_COMPONENT_APPS_REQUIRED TRUE) set(CPACK_COMPONENT_LIBS_HIDDEN TRUE) set(CPACK_COMPONENT_LIBS_DISABLED TRUE) diff --git a/src/ninja/ninja_init.cpp b/src/ninja/ninja_init.cpp index 0a04da9c0..5548f5bd4 100644 --- a/src/ninja/ninja_init.cpp +++ b/src/ninja/ninja_init.cpp @@ -260,13 +260,20 @@ int NinjaInitialize(const char* typeofrun) CPLDebug( "WINDNINJA", "Setting GDAL_DATA:%s", pszGdalData ); CPLSetConfigOption( "GDAL_DATA", pszGdalData ); + CPLDebug( "WINDNINJA", "Setting GDAL_DATA..." ); + std::string osProjData; + osProjData = FindDataPath( "proj-data/data/proj.db" ); + const char *pszProjData = CPLGetPath( osProjData.c_str() ); + CPLDebug( "WINDNINJA", "Setting PROJ_DATA:%s", pszProjData ); + CPLSetConfigOption( "PROJ_LIB", pszProjData ); + #if defined(FIRELAB_PACKAGE) char szDriverPath[MAX_PATH+1]; rc = CPLGetExecPath( szDriverPath, MAX_PATH+1); const char *pszPlugins = CPLSPrintf("%s/gdalplugins", CPLGetPath(szDriverPath)); - CPLDebug("WINDNINJA", "Setting GDAL_DRIVER_PATH: %s", pszPlugins); + //CPLDebug("WINDNINJA", "Setting GDAL_DRIVER_PATH: %s", pszPlugins); - CPLSetConfigOption("GDAL_DRIVER_PATH", pszPlugins); + //CPLSetConfigOption("GDAL_DRIVER_PATH", pszPlugins); #endif /* defined(FIRELAB_PACKAGE) */ #if defined(NINJAFOAM) && defined(FIRELAB_PACKAGE) From 46f002dd4141f81a3884d0b03074df25af33f57e Mon Sep 17 00:00:00 2001 From: masonwillman <117214223+masonwillman@users.noreply.github.com> Date: Mon, 5 Jan 2026 11:41:32 -0700 Subject: [PATCH 330/435] Fixed leaflet data installation path so map loads properly, for #660 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9dc1a10d1..6b8e7a5e0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -431,7 +431,7 @@ endforeach(f ${share_files}) # Leaflet data if(WIN32 AND FIRELAB_PACKAGE) - install(DIRECTORY ${PROJECT_SOURCE_DIR}/data/leaflet DESTINATION share) + install(DIRECTORY ${PROJECT_SOURCE_DIR}/data/leaflet DESTINATION share/windninja) else(WIN32 AND FIRELAB_PACKAGE) install(DIRECTORY ${PROJECT_SOURCE_DIR}/data/leaflet DESTINATION share/windninja) endif(WIN32 AND FIRELAB_PACKAGE) From 714b6809eaf1624748cf99e728bb00ddde9fe5bd Mon Sep 17 00:00:00 2001 From: masonwillman <117214223+masonwillman@users.noreply.github.com> Date: Wed, 7 Jan 2026 11:24:45 -0700 Subject: [PATCH 331/435] Changes to use QT online installer binaries instead of vcpkg, for #660 --- CMakeLists.txt | 12 ++++++------ vcpkg.json | 23 ----------------------- 2 files changed, 6 insertions(+), 29 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b8e7a5e0..83806c5bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -526,11 +526,11 @@ RMDir \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\Documents\\\" ") # Build the nsis installer on the firelab machine(s). Not for external use. if(FIRELAB_PACKAGE AND WIN32 AND MSVC AND USE_VCPKG) - set(WINDEPLOYQT_EXE - "${CMAKE_SOURCE_DIR}/vcpkg_installed/x64-windows/tools/Qt6/bin/windeployqt6.exe" - ) + set(WINDEPLOYQT_EXE "${Qt6_DIR}/../../../bin/windeployqt.exe") + add_custom_target(deploy_windninja ALL - COMMAND "${WINDEPLOYQT_EXE}" --release "$" + COMMAND "${WINDEPLOYQT_EXE}" --release + "$" DEPENDS WindNinja ) @@ -547,13 +547,13 @@ if(FIRELAB_PACKAGE AND WIN32 AND MSVC AND USE_VCPKG) ) install( - DIRECTORY "${CMAKE_SOURCE_DIR}/vcpkg_installed/x64-windows/share/gdal/" + DIRECTORY "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-windows/share/gdal/" DESTINATION share/windninja/gdal-data/data COMPONENT apps ) install( - FILES "${CMAKE_SOURCE_DIR}/vcpkg_installed/x64-windows/share/proj/proj.db" + DIRECTORY "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-windows/share/proj/" DESTINATION share/windninja/proj-data/data COMPONENT apps ) diff --git a/vcpkg.json b/vcpkg.json index 117866354..f6dbf7b36 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -17,29 +17,6 @@ }, { "name": "shapelib" - }, - { - "name": "qtbase", - "features": ["widgets", "network" ] - }, - { - "name": "qttools" - }, - { - "name": "qtdeclarative" - }, - { - "name": "qtquickcontrols2" - }, - { - "name": "qtpositioning" - }, - { - "name": "qtwebchannel" - }, - { - "name": "qtwebengine", - "features": ["webchannel"] } ] } From c02d8b1897975351904c2479439e148bcfb1de0e Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 8 Jan 2026 12:45:26 -0700 Subject: [PATCH 332/435] small fix to GUI read settings, trying to load the saved input dem file after the file had been deleted resulted in a seg fault --- src/gui/mainWindow.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index abd11808f..77e333a36 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -1294,7 +1294,6 @@ void MainWindow::writeSettings() QSettings settings(QSettings::UserScope, "Firelab", "WindNinja"); settings.setDefaultFormat(QSettings::IniFormat); - settings.setDefaultFormat(QSettings::IniFormat); //input file path settings.setValue("inputFileDir", ui->elevationInputFileLineEdit->property("fullpath")); //veg choice @@ -1320,15 +1319,21 @@ void MainWindow::readSettings() { QSettings settings(QSettings::UserScope, "Firelab", "WindNinja"); settings.setDefaultFormat(QSettings::IniFormat); + if(settings.contains("inputFileDir")) { - ui->elevationInputFileLineEdit->setText(settings.value("inputFileDir").toString()); + if(QFile::exists(settings.value("inputFileDir").toString())) + { + ui->elevationInputFileLineEdit->setText(settings.value("inputFileDir").toString()); + } } else { // std::string oTmpPath = FindNinjaRootDir(); // inputFileDir = CPLFormFilename(oTmpPath.c_str(), "etc/windninja/example-files", NULL); } + + // TODO: some of the following might be overriding the values computed by inputFileDir, when the other way around might be better if(settings.contains("vegChoice")) { ui->vegetationComboBox->setCurrentIndex(settings.value("vegChoice").toInt()); From db8d6178f2f7ed8e90c65b68d88ed9f1f288f761 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 8 Jan 2026 13:00:00 -0700 Subject: [PATCH 333/435] small fix to qt6 gui mesh resolution stuff, the "custom" case fix from commit 5a6463ed289e59d98132fbbb4800694f13f59fd9 was accidentally dropped, added it back in --- src/gui/surfaceInput.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp index f9ca243fb..3b6c684d7 100644 --- a/src/gui/surfaceInput.cpp +++ b/src/gui/surfaceInput.cpp @@ -676,10 +676,10 @@ double SurfaceInput::computeMeshResolution(int index, bool isMomemtumChecked) case 2: targetNumHorizCells = fine; break; - case 3: - return 200; + case 3: // custom + return ui->meshResolutionSpinBox->value(); default: - return 200; + return ui->meshResolutionSpinBox->value(); } double XLength = GDALXSize * GDALCellSize; From fb572384a7e5d298cac013157d8bcfbb28c17041 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 8 Jan 2026 13:47:16 -0700 Subject: [PATCH 334/435] small fix to GUI read settings, fixed momentumFlag and mesh resolution in settings --- src/gui/mainWindow.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 77e333a36..b549defb0 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -1293,9 +1293,13 @@ void MainWindow::writeSettings() QSettings settings(QSettings::UserScope, "Firelab", "WindNinja"); settings.setDefaultFormat(QSettings::IniFormat); + //qDebug() << "settings filename =" << settings.fileName(); //input file path settings.setValue("inputFileDir", ui->elevationInputFileLineEdit->property("fullpath")); + + //momentum flag + settings.setValue("momentumFlag", ui->momentumSolverCheckBox->isChecked()); //veg choice settings.setValue("vegChoice", ui->vegetationComboBox->currentIndex()); //mesh choice @@ -1310,6 +1314,11 @@ void MainWindow::writeSettings() //settings.setValue("pointFile", tree->point->stationFileName ); + //if(ui->meshResolutionComboBox->currentIndex() == 3) + //{ + // settings.setValue("customRes", ui->meshResolutionSpinBox->value()); + //} + // need to write it every time, the past value will get left there without getting updated otherwise, doesn't delete past settings values settings.setValue("customRes", ui->meshResolutionSpinBox->value()); writeToConsole("Settings saved."); @@ -1334,6 +1343,15 @@ void MainWindow::readSettings() } // TODO: some of the following might be overriding the values computed by inputFileDir, when the other way around might be better + if(settings.contains("momentumFlag")) + { + bool momentumFlag = settings.value("momentumFlag").toBool(); + if(momentumFlag == true) + { + ui->momentumSolverCheckBox->setChecked(true); + emit momentumSolverCheckBoxClicked(); + } + } if(settings.contains("vegChoice")) { ui->vegetationComboBox->setCurrentIndex(settings.value("vegChoice").toInt()); @@ -1342,8 +1360,12 @@ void MainWindow::readSettings() { int choice = settings.value("meshChoice").toInt(); ui->meshResolutionComboBox->setCurrentIndex(choice); - if(choice == 4 && settings.contains("customRes")) + if(choice == 3) { + if(!settings.contains("customRes")) + { + qDebug() << "Error. WindNinja settings does not contain \"customRes\""; + } ui->meshResolutionSpinBox->setValue(settings.value("customRes").toDouble()); } } From 69f9e2940b8e4e0fc9cac28e26e719fea66dade6 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 8 Jan 2026 17:27:58 -0700 Subject: [PATCH 335/435] fix to qt6 gui mesh resolution units, while the gui is open --- src/gui/mainWindow.cpp | 2 ++ src/gui/surfaceInput.cpp | 21 ++++++++++++++++++--- src/gui/surfaceInput.h | 1 + 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index b549defb0..2ce863b48 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -318,6 +318,7 @@ void MainWindow::massSolverCheckBoxClicked() if(!ui->elevationInputFileLineEdit->text().isEmpty()) { ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + surfaceInput->updateMeshResolutionByUnits(); } emit updateMetholodyState(); } @@ -336,6 +337,7 @@ void MainWindow::momentumSolverCheckBoxClicked() if(!ui->elevationInputFileLineEdit->text().isEmpty()) { ui->meshResolutionSpinBox->setValue(surfaceInput->computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + surfaceInput->updateMeshResolutionByUnits(); } emit updateMetholodyState(); } diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp index 3b6c684d7..82497f5e0 100644 --- a/src/gui/surfaceInput.cpp +++ b/src/gui/surfaceInput.cpp @@ -68,14 +68,13 @@ SurfaceInput::SurfaceInput(Ui::MainWindow *ui, connect(this, &SurfaceInput::updateState, &AppState::instance(), &AppState::updateSurfaceInputState); } - void SurfaceInput::meshResolutionUnitsComboBoxCurrentIndexChanged(int index) { - if(index == 0) + if(index == 0) // meters { ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 0.3048); } - else + else // if(index == 1) // feet { ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 3.28084); } @@ -264,6 +263,7 @@ void SurfaceInput::meshResolutionComboBoxCurrentIndexChanged(int index) } ui->meshResolutionSpinBox->setValue(computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + updateMeshResolutionByUnits(); } void SurfaceInput::elevationInputFileLineEditTextChanged(const QString &demFilePath) @@ -282,6 +282,7 @@ void SurfaceInput::elevationInputFileLineEditTextChanged(const QString &demFileP } ui->meshResolutionSpinBox->setValue(computeMeshResolution(ui->meshResolutionComboBox->currentIndex(), ui->momentumSolverCheckBox->isChecked())); + updateMeshResolutionByUnits(); QStringList cornerStrs; for (int i = 0; i < 8; ++i) @@ -734,6 +735,20 @@ double SurfaceInput::computeMeshResolution(int index, bool isMomemtumChecked) } +void SurfaceInput::updateMeshResolutionByUnits() +{ + // units are expected to always already be calculated to be in meters + // UNLESS it is CUSTOM, then it needs to be left in whatever units it shows up in, + // units are then only altered when updating the units combo box + if(ui->meshResolutionComboBox->currentIndex() != 3) + { + if(ui->meshResolutionUnitsComboBox->currentIndex() == 1) // feet + { + ui->meshResolutionSpinBox->setValue(ui->meshResolutionSpinBox->value() * 3.28084); + } + } +} + void SurfaceInput::computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]) { const double EARTH_RADIUS_MILES = 3958.7613; diff --git a/src/gui/surfaceInput.h b/src/gui/surfaceInput.h index 942e50725..e5e3062b4 100644 --- a/src/gui/surfaceInput.h +++ b/src/gui/surfaceInput.h @@ -55,6 +55,7 @@ class SurfaceInput : public QObject QWebEngineView* webEngineView, QObject* parent = nullptr); double computeMeshResolution(int index, bool isMomemtumChecked); + void updateMeshResolutionByUnits(); signals: void updateState(); From a9b177f0d14cb1bd872ad5b6b734de519e621bfb Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 8 Jan 2026 17:50:12 -0700 Subject: [PATCH 336/435] fix to GUI read settings, fixed mesh resolution units in settings though, this was more of a fix attempt that currently works, than a true fix, loading mesh resolution units after mesh resolution value rather than before causes an extra unit conversion. Unless the mesh resolution units handlers are setup to somehow not run when settings are loaded, then the mesh resolution units would almost need to be reverse converted as input to get it to work when loading in the more normal order. So this fix worked, but it's still quirky. --- src/gui/mainWindow.cpp | 9 +++++---- src/gui/surfaceInput.cpp | 1 - 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 2ce863b48..dd2aae1cd 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -1358,6 +1358,10 @@ void MainWindow::readSettings() { ui->vegetationComboBox->setCurrentIndex(settings.value("vegChoice").toInt()); } + if(settings.contains("meshUnits")) // putting this after loading meshChoice results in overwriting the value by an extra set of units + { + ui->meshResolutionUnitsComboBox->setCurrentIndex(settings.value("meshUnits").toInt()); + } if(settings.contains("meshChoice")) { int choice = settings.value("meshChoice").toInt(); @@ -1371,14 +1375,11 @@ void MainWindow::readSettings() ui->meshResolutionSpinBox->setValue(settings.value("customRes").toDouble()); } } - if(settings.contains("meshUnits")) - { - ui->meshResolutionUnitsComboBox->setCurrentIndex(settings.value("meshUnits").toInt()); - } if(settings.contains("nProcessors")) { ui->numberOfProcessorsSpinBox->setValue(settings.value("nProcessors").toInt()); } + // won't we want the timezone of the dem every time, to avoid accidentally doing a weird combination of time zones? if(settings.contains("timeZone")) { // QString v = settings.value("timeZone").toString(); diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp index 82497f5e0..74a00c18f 100644 --- a/src/gui/surfaceInput.cpp +++ b/src/gui/surfaceInput.cpp @@ -732,7 +732,6 @@ double SurfaceInput::computeMeshResolution(int index, bool isMomemtumChecked) #endif //NINJAFOAM return meshResolution; - } void SurfaceInput::updateMeshResolutionByUnits() From e1ad701a84eefd6c4b80b70a28990ee05dc4ff31 Mon Sep 17 00:00:00 2001 From: masonwillman <117214223+masonwillman@users.noreply.github.com> Date: Fri, 9 Jan 2026 10:57:24 -0700 Subject: [PATCH 337/435] Updated CMakeLists and json for using QT online installer binaries, for #660 --- CMakeLists.txt | 1 - vcpkg.json | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 83806c5bf..521ebd598 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -527,7 +527,6 @@ RMDir \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\Documents\\\" ") if(FIRELAB_PACKAGE AND WIN32 AND MSVC AND USE_VCPKG) set(WINDEPLOYQT_EXE "${Qt6_DIR}/../../../bin/windeployqt.exe") - add_custom_target(deploy_windninja ALL COMMAND "${WINDEPLOYQT_EXE}" --release "$" diff --git a/vcpkg.json b/vcpkg.json index f6dbf7b36..db11dcf8b 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -13,7 +13,7 @@ }, { "name": "gdal", - "features": ["poppler"] + "features": ["poppler", "netcdf", "openssl"] }, { "name": "shapelib" From ad802e7cbd96539308ee0236d36019e863df5c3e Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 9 Jan 2026 11:24:08 -0700 Subject: [PATCH 338/435] re-enabled GUI kmz output plotting, in its most simplest form, just grab all kmz files that are in the output directory and plot them. that being said, apparently leaving this at the end of the solveButtonClicked() function, after the QFutureWatcher is set and starts to run, causes the kmz output plotting to be run immediately after the QFutureWatcher starts to run, rather than waiting till after the QFutureWatcher process gets finished. Gonna need to figure out how to fix this, and we will want to watch out for similar QFutureWatcher asynchronous effects when coding stuff like this in the future. --- src/gui/mainWindow.cpp | 44 +++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index dd2aae1cd..403c968ee 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -753,32 +753,32 @@ void MainWindow::solveButtonClicked() QFuture future = QtConcurrent::run(&MainWindow::startSolve, this, ui->numberOfProcessorsSpinBox->value()); futureWatcher->setFuture(future); - // vector outputFiles; - // QDir outDir(ui->outputDirectoryLineEdit->text()); - // QString demName = QFileInfo(ui->elevationInputFileLineEdit->text()).baseName(); - // int meshInt = static_cast(std::round(ui->meshResolutionSpinBox->value())); - // QString meshSize = QString::number(meshInt) + "m"; - - // for (int i = 0; i < numNinjas; i++) { - // QString filePath = outDir.filePath(QString("%1_%2_%3_%4.kmz") - // .arg(demName) - // .arg(directions[i]) - // .arg(speeds[i]) - // .arg(meshSize)); - // outputFiles.push_back(filePath.toStdString()); - // } + // prep output kmz files for map kmz plotting + QDir outputDir(ui->outputDirectoryLineEdit->text()); - // for (const auto& dir : outputFiles) { - // QString qDir = QString::fromStdString(dir); + QStringList fileTypeFilters; + fileTypeFilters << "*.kmz"; - // QFile f(qDir); - // f.open(QIODevice::ReadOnly); - // QByteArray data = f.readAll(); - // QString base64 = data.toBase64(); + QStringList fullOutputFileList = outputDir.entryList(fileTypeFilters, QDir::Files | QDir::NoDotAndDotDot); - // webView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); - // } + QStringList outputFileList; + for (const QString& outFileStr : fullOutputFileList) + { + QString fullOutputFilename = outputDir.absolutePath() + "/" + outFileStr; + outputFileList.append(fullOutputFilename); + } + for (const auto& outFileStr : outputFileList) + { + qDebug() << "outFileStr =" << outFileStr; + QFile outFile(outFileStr); + + outFile.open(QIODevice::ReadOnly); + QByteArray data = outFile.readAll(); + QString base64 = data.toBase64(); + + webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + } } void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) From 4e18d7272458e9cb133e6269486b451f2e802efd Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 9 Jan 2026 11:33:37 -0700 Subject: [PATCH 339/435] moved GUI kmz output plotting into a separate afterFinishedSolve() function, to be triggered after the QFutureWatcher finishes the solve() function. This avoids the problem I was running into where the kmz output plotting was happening immediately after the QFutureWatcher started to run, at the start of the solve() function rather than after. I also re-enabled the ENABLE_QWEBINSPECTOR CPLConfigOption, though it should probably be placed somewhere at the start of the code run rather than only at the kmz output plotting code spot, but this was a first attempt. I also added kmz output plotting file filtering, to attempt to filter out the wx model kmz's and the station kml's, but while the method as a method works, some of those file types filter out for other reasons than what I was trying to do with my filtering. Also, seems like this grab all filtered kmz files really doesn't give enough control over what order the files are in or from what given run/process, probably gonna just need to implement some kind of C-API function to get the ninjas[i] base output filenames or something to truly get the control over the output files that is needed. --- src/gui/mainWindow.cpp | 129 ++++++++++++++++++++++++++++++++--------- src/gui/mainWindow.h | 1 + 2 files changed, 104 insertions(+), 26 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 403c968ee..4d7d8f4a5 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -749,36 +749,11 @@ void MainWindow::solveButtonClicked() writeToConsole( "Initializing runs..." ); connect(futureWatcher, &QFutureWatcher::finished, this, &MainWindow::finishedSolve); + connect(futureWatcher, &QFutureWatcher::finished, this, &MainWindow::afterFinishedSolve); QFuture future = QtConcurrent::run(&MainWindow::startSolve, this, ui->numberOfProcessorsSpinBox->value()); futureWatcher->setFuture(future); - // prep output kmz files for map kmz plotting - QDir outputDir(ui->outputDirectoryLineEdit->text()); - - QStringList fileTypeFilters; - fileTypeFilters << "*.kmz"; - - QStringList fullOutputFileList = outputDir.entryList(fileTypeFilters, QDir::Files | QDir::NoDotAndDotDot); - - QStringList outputFileList; - for (const QString& outFileStr : fullOutputFileList) - { - QString fullOutputFilename = outputDir.absolutePath() + "/" + outFileStr; - outputFileList.append(fullOutputFilename); - } - - for (const auto& outFileStr : outputFileList) - { - qDebug() << "outFileStr =" << outFileStr; - QFile outFile(outFileStr); - - outFile.open(QIODevice::ReadOnly); - QByteArray data = outFile.readAll(); - QString base64 = data.toBase64(); - - webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); - } } void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) @@ -1289,6 +1264,108 @@ void MainWindow::finishedSolve() futureWatcher->deleteLater(); } +void MainWindow::afterFinishedSolve() +{ + if(!progressDialog->wasCanceled() && ui->googleEarthGroupBox->isChecked() == true) + { + //enable QWebInspector for degugging google maps widget + qDebug() << "ENABLE_QWEBINSPECTOR =" << CPLGetConfigOption("ENABLE_QWEBINSPECTOR", "NO"); + if(CSLTestBoolean(CPLGetConfigOption("ENABLE_QWEBINSPECTOR", "NO"))) + { + // Create the dedicated window for the inspector + QWidget* inspectorWindow = new QWidget(); + inspectorWindow->setWindowTitle("Web Inspector - Developer Tools"); + //inspectorWindow->setAttribute(Qt::WA_DeleteOnClose); // Auto-delete when closed // this causes a seg fault when added to the code, allows closing WindNinja first without troubles, but closing this inspectorWindow first crash closes, the seg fault appears in both cases just one is less blow-uppy when it goes. Without this I can close things in whichever order but I get TWO of that "Release of profile requested but WebEnginePage still not deleted. Expect troubles !" warning message after it all closes. + inspectorWindow->setMinimumSize(800, 600); + + // Create the inspector view with the new window as its parent + QWebEngineView* inspectorView = new QWebEngineView(inspectorWindow); + inspectorView->page()->setInspectedPage(webEngineView->page()); // 'webEngineView' is your main web engine view + + // Set up layout for the new window + QVBoxLayout* layout = new QVBoxLayout(inspectorWindow); + layout->addWidget(inspectorView); + layout->setContentsMargins(0, 0, 0, 0); + + // Show the new window + inspectorWindow->show(); + } + + // prep output kmz files for map kmz plotting + QDir outputDir(ui->outputDirectoryLineEdit->text()); + QString demName = QFileInfo(ui->elevationInputFileLineEdit->text()).baseName(); + int meshResInt = static_cast(std::round(ui->meshResolutionSpinBox->value())); + QString meshResUnitsStr = "m"; + if(ui->meshResolutionUnitsComboBox->currentIndex() == 1) // feet + { + meshResUnitsStr = "ft"; + } + + QStringList fileTypeFilters; + fileTypeFilters << "*.kmz"; + + QStringList fullOutputFileList = outputDir.entryList(fileTypeFilters, QDir::Files | QDir::NoDotAndDotDot); + + QStringList containsFilters; + containsFilters << demName << QString::number(meshResInt)+meshResUnitsStr; + + QStringList preFilteredOutputFileList; + for (const QString& outFileStr : fullOutputFileList) + { + int filtersFound = 0; + for (const QString& filterStr : containsFilters ) + { + if(outFileStr.contains(filterStr)) + { + filtersFound++; + } + } + if(filtersFound == containsFilters.size()) + { + preFilteredOutputFileList.append(outFileStr); + } + } + + QStringList notContainsFilters; + //notContainsFilters << "station" << "wx" << "HRRR"; + // just doing the bogus one, let all the others through, see what happens + // oh, the station kml and HRRR forecast ones were still not grabbed in the list, + // because station kml doesn't have meshRes in it, and HRRR forecast doesn't have the dem name in it + notContainsFilters << "wx"; + + QStringList filteredOutputFileList; + for (const QString& outFileStr : preFilteredOutputFileList) + { + int filtersNotFound = 0; + for (const QString& notFilterStr : notContainsFilters ) + { + if(!outFileStr.contains(notFilterStr)) + { + filtersNotFound++; + } + } + if(filtersNotFound == notContainsFilters.size()) + { + QString fullOutputFilename = outputDir.absolutePath() + "/" + outFileStr; + filteredOutputFileList.append(fullOutputFilename); + } + } + + for (const auto& outFileStr : filteredOutputFileList) + { + qDebug() << "outFileStr =" << outFileStr; + QFile outFile(outFileStr); + + outFile.open(QIODevice::ReadOnly); + QByteArray data = outFile.readAll(); + QString base64 = data.toBase64(); + + webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + } + + } // if(!progressDialog->wasCanceled() && ui->googleEarthGroupBox->isChecked() == true) +} + void MainWindow::writeSettings() { writeToConsole("Saving settings..."); diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index 5d510ea39..0417b979b 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -145,6 +145,7 @@ private slots: int startSolve(int numProcessors); void finishedSolve(); + void afterFinishedSolve(); QString currentDEMFilePath; From 1d4660a9ff327b404aec147b68fd2892c8abadf1 Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 9 Jan 2026 12:20:51 -0700 Subject: [PATCH 340/435] went back to not filtering for the GUI kmz output methods, also did a bit of cleanup to the ENABLE_QWEBINSPECTOR CPLConfigOption code --- data/map.html | 1 + src/gui/mainWindow.cpp | 68 ++++++------------------------------------ 2 files changed, 10 insertions(+), 59 deletions(-) diff --git a/data/map.html b/data/map.html index be0ea7820..95d4a1a97 100755 --- a/data/map.html +++ b/data/map.html @@ -205,6 +205,7 @@ } async function loadKmzFromBase64(kmlData) { + console.log("running LoadKmzFromBase64"); const binary = atob(kmlData); const bytes = new Uint8Array(binary.length); for (let i = 0; i < binary.length; i++) { diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 4d7d8f4a5..0a50b52ed 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -1268,92 +1268,42 @@ void MainWindow::afterFinishedSolve() { if(!progressDialog->wasCanceled() && ui->googleEarthGroupBox->isChecked() == true) { - //enable QWebInspector for degugging google maps widget - qDebug() << "ENABLE_QWEBINSPECTOR =" << CPLGetConfigOption("ENABLE_QWEBINSPECTOR", "NO"); + // enable QWebInspector for degugging the google maps widget if(CSLTestBoolean(CPLGetConfigOption("ENABLE_QWEBINSPECTOR", "NO"))) { - // Create the dedicated window for the inspector - QWidget* inspectorWindow = new QWidget(); + QWidget* inspectorWindow = new QWidget(this); inspectorWindow->setWindowTitle("Web Inspector - Developer Tools"); - //inspectorWindow->setAttribute(Qt::WA_DeleteOnClose); // Auto-delete when closed // this causes a seg fault when added to the code, allows closing WindNinja first without troubles, but closing this inspectorWindow first crash closes, the seg fault appears in both cases just one is less blow-uppy when it goes. Without this I can close things in whichever order but I get TWO of that "Release of profile requested but WebEnginePage still not deleted. Expect troubles !" warning message after it all closes. inspectorWindow->setMinimumSize(800, 600); - // Create the inspector view with the new window as its parent QWebEngineView* inspectorView = new QWebEngineView(inspectorWindow); - inspectorView->page()->setInspectedPage(webEngineView->page()); // 'webEngineView' is your main web engine view + inspectorView->page()->setInspectedPage(webEngineView->page()); - // Set up layout for the new window QVBoxLayout* layout = new QVBoxLayout(inspectorWindow); layout->addWidget(inspectorView); layout->setContentsMargins(0, 0, 0, 0); - // Show the new window inspectorWindow->show(); } // prep output kmz files for map kmz plotting QDir outputDir(ui->outputDirectoryLineEdit->text()); - QString demName = QFileInfo(ui->elevationInputFileLineEdit->text()).baseName(); - int meshResInt = static_cast(std::round(ui->meshResolutionSpinBox->value())); - QString meshResUnitsStr = "m"; - if(ui->meshResolutionUnitsComboBox->currentIndex() == 1) // feet - { - meshResUnitsStr = "ft"; - } QStringList fileTypeFilters; + //fileTypeFilters << "*.kmz" << "*kml"; fileTypeFilters << "*.kmz"; QStringList fullOutputFileList = outputDir.entryList(fileTypeFilters, QDir::Files | QDir::NoDotAndDotDot); - QStringList containsFilters; - containsFilters << demName << QString::number(meshResInt)+meshResUnitsStr; - - QStringList preFilteredOutputFileList; + QStringList outputFileList; for (const QString& outFileStr : fullOutputFileList) { - int filtersFound = 0; - for (const QString& filterStr : containsFilters ) - { - if(outFileStr.contains(filterStr)) - { - filtersFound++; - } - } - if(filtersFound == containsFilters.size()) - { - preFilteredOutputFileList.append(outFileStr); - } - } - - QStringList notContainsFilters; - //notContainsFilters << "station" << "wx" << "HRRR"; - // just doing the bogus one, let all the others through, see what happens - // oh, the station kml and HRRR forecast ones were still not grabbed in the list, - // because station kml doesn't have meshRes in it, and HRRR forecast doesn't have the dem name in it - notContainsFilters << "wx"; - - QStringList filteredOutputFileList; - for (const QString& outFileStr : preFilteredOutputFileList) - { - int filtersNotFound = 0; - for (const QString& notFilterStr : notContainsFilters ) - { - if(!outFileStr.contains(notFilterStr)) - { - filtersNotFound++; - } - } - if(filtersNotFound == notContainsFilters.size()) - { - QString fullOutputFilename = outputDir.absolutePath() + "/" + outFileStr; - filteredOutputFileList.append(fullOutputFilename); - } + QString fullOutputFilename = outputDir.absolutePath() + "/" + outFileStr; + outputFileList.append(fullOutputFilename); } - for (const auto& outFileStr : filteredOutputFileList) + for (const auto& outFileStr : outputFileList) { - qDebug() << "outFileStr =" << outFileStr; + qDebug() << "kmz outFile =" << outFileStr; QFile outFile(outFileStr); outFile.open(QIODevice::ReadOnly); From c2fa29e90bfe168fee85151760887b7cbc3ef082 Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 9 Jan 2026 13:10:51 -0700 Subject: [PATCH 341/435] oops, Iaccidentally messed up the error handling when I added the GUI kmz output plotting, this fixed it, but need to watch out for this type of thing in the future, especially for new errors that haven't yet been properly caught --- src/gui/mainWindow.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 0a50b52ed..c8a76c9cf 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -1266,7 +1266,10 @@ void MainWindow::finishedSolve() void MainWindow::afterFinishedSolve() { - if(!progressDialog->wasCanceled() && ui->googleEarthGroupBox->isChecked() == true) + // get the return value of the QtConcurrent::run() function + int result = futureWatcher->future().result(); + + if(result == 1 && !progressDialog->wasCanceled() && ui->googleEarthGroupBox->isChecked() == true) { // enable QWebInspector for degugging the google maps widget if(CSLTestBoolean(CPLGetConfigOption("ENABLE_QWEBINSPECTOR", "NO"))) @@ -1313,7 +1316,7 @@ void MainWindow::afterFinishedSolve() webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); } - } // if(!progressDialog->wasCanceled() && ui->googleEarthGroupBox->isChecked() == true) + } // if(result == 1 && !progressDialog->wasCanceled() && ui->googleEarthGroupBox->isChecked() == true) } void MainWindow::writeSettings() From 99ab82e0f02866b8c6284624ef752fb31e4e3dc8 Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 9 Jan 2026 20:21:00 -0700 Subject: [PATCH 342/435] 1st attempt at adjusting the GUI kmz output plotting to use exact run kmz filenames, using new C-API get run kmz filenames function calls. Related to issue #582. To get this to work, I had to change the GUI kmz output plotting afterFinishedSolve() function to be a regular plotKmzOutputs() function, called within finishedSolve() instead, because finishedSolve() deletes the ninjaArmy instance and it was required for getting the kmz filenames for plotKmzOutputs(). There might be a smarter way to do this, but this is what I've got for now. I also had quite the challenge with actually getting the ninjas[i] filenames after the run, because all ninjas[i] but ninjas[0] gets deleted after each ninjas[i] run in ninjaArmy. I got around this by accumulating the desired ninjas[i] information pre that ninjas[i] deletion. There are probably smarter ways to setup these new C-API functions, especially since stationKmlFilenames needs to go up one more level in pointer-ness, needs to be an array of the current set of arrays. But, seemed like this was the best way to keep memory managed by the appropriate levels and users. --- src/gui/mainWindow.cpp | 54 ++++++++++++++----- src/gui/mainWindow.h | 2 +- src/ninja/ninjaArmy.cpp | 51 ++++++++++++++++++ src/ninja/ninjaArmy.h | 21 +++++++- src/ninja/windninja.cpp | 111 ++++++++++++++++++++++++++++++++++++++++ src/ninja/windninja.h | 2 + 6 files changed, 225 insertions(+), 16 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index c8a76c9cf..e368a0c40 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -749,7 +749,6 @@ void MainWindow::solveButtonClicked() writeToConsole( "Initializing runs..." ); connect(futureWatcher, &QFutureWatcher::finished, this, &MainWindow::finishedSolve); - connect(futureWatcher, &QFutureWatcher::finished, this, &MainWindow::afterFinishedSolve); QFuture future = QtConcurrent::run(&MainWindow::startSolve, this, ui->numberOfProcessorsSpinBox->value()); futureWatcher->setFuture(future); @@ -1251,6 +1250,9 @@ void MainWindow::finishedSolve() disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); + // one more process to do after finishedSolve() stuff + plotKmzOutputs(); + char **papszOptions = nullptr; int ninjaErr = NinjaDestroyArmy(ninjaArmy, papszOptions); if(ninjaErr != NINJA_SUCCESS) @@ -1264,7 +1266,7 @@ void MainWindow::finishedSolve() futureWatcher->deleteLater(); } -void MainWindow::afterFinishedSolve() +void MainWindow::plotKmzOutputs() { // get the return value of the QtConcurrent::run() function int result = futureWatcher->future().result(); @@ -1288,25 +1290,43 @@ void MainWindow::afterFinishedSolve() inspectorWindow->show(); } - // prep output kmz files for map kmz plotting - QDir outputDir(ui->outputDirectoryLineEdit->text()); + // vars to be filled + int numRuns = 0; + char **kmzFilenames = NULL; + char **stationKmlFilenames = NULL; + char **weatherModelKmzFilenames = NULL; + + char **papszOptions = nullptr; + ninjaErr = NinjaGetRunKmzFilenames(ninjaArmy, &numRuns, &kmzFilenames, &stationKmlFilenames, &weatherModelKmzFilenames, papszOptions); + if(ninjaErr != NINJA_SUCCESS) + { + printf("NinjaGetRunKmzFilenames: ninjaErr = %d\n", ninjaErr); + } + + for(int i = 0; i < numRuns; i++) + { + QString outFileStr = QString::fromStdString(kmzFilenames[i]); + qDebug() << "kmz outFile =" << outFileStr; + QFile outFile(outFileStr); - QStringList fileTypeFilters; - //fileTypeFilters << "*.kmz" << "*kml"; - fileTypeFilters << "*.kmz"; + outFile.open(QIODevice::ReadOnly); + QByteArray data = outFile.readAll(); + QString base64 = data.toBase64(); - QStringList fullOutputFileList = outputDir.entryList(fileTypeFilters, QDir::Files | QDir::NoDotAndDotDot); + webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + } - QStringList outputFileList; - for (const QString& outFileStr : fullOutputFileList) + for(int i = 0; i < numRuns; i++) { - QString fullOutputFilename = outputDir.absolutePath() + "/" + outFileStr; - outputFileList.append(fullOutputFilename); + QString outFileStr = QString::fromStdString(stationKmlFilenames[i]); + qDebug() << "station kml outFile =" << outFileStr; + // tested, this type does not plot right now, because the map.html can't handle it yet } - for (const auto& outFileStr : outputFileList) + for(int i = 0; i < numRuns; i++) { - qDebug() << "kmz outFile =" << outFileStr; + QString outFileStr = QString::fromStdString(weatherModelKmzFilenames[i]); + qDebug() << "wx model kmz outFile =" << outFileStr; QFile outFile(outFileStr); outFile.open(QIODevice::ReadOnly); @@ -1316,6 +1336,12 @@ void MainWindow::afterFinishedSolve() webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); } + ninjaErr = NinjaDestroyRunKmzFilenames(numRuns, kmzFilenames, stationKmlFilenames, weatherModelKmzFilenames, papszOptions); + if(ninjaErr != NINJA_SUCCESS) + { + printf("NinjaDestroyRunKmzFilenames: ninjaErr = %d\n", ninjaErr); + } + } // if(result == 1 && !progressDialog->wasCanceled() && ui->googleEarthGroupBox->isChecked() == true) } diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index 0417b979b..a495752e3 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -145,7 +145,7 @@ private slots: int startSolve(int numProcessors); void finishedSolve(); - void afterFinishedSolve(); + void plotKmzOutputs(); QString currentDEMFilePath; diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index f04b7f771..d28bff09b 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -669,6 +669,11 @@ bool ninjaArmy::startRuns(int numProcessors) CPLSetConfigOption( "GDAL_PAM_ENABLED", "ON" ); } + // prep a clean set of kmz output filenames to append to before ninjas[i] gets deleted after each run + kmzFilenames.clear(); + stationKmlFilenames.clear(); + wxModelKmzFilenames.clear(); + if(ninjas.size() == 1) { //set number of threads for the run @@ -729,6 +734,9 @@ bool ninjaArmy::startRuns(int numProcessors) if(writeFarsiteAtmFile) writeFarsiteAtmosphereFile(); + //setup the run kmz filenames, for C-API calls + setCurrentRunKmzFilenames(0); + }catch (bad_alloc& e) { ninjas[0]->input.Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception bad_alloc caught: %s\nWindNinja appears to have run out of memory.", e.what()); @@ -817,6 +825,9 @@ bool ninjaArmy::startRuns(int numProcessors) ninjas[i]->get_AngFileName(), ninjas[i]->get_CldFileName() ); } + //setup the run kmz filenames, for C-API calls + setCurrentRunKmzFilenames(i); + //delete all but ninjas[0] (ninjas[0] is used to set the output path in the GUI) //need to keep the ninjas for now, if doing a consistent color scale set of outputs if( i != 0 && ninjas[0]->input.googUseConsistentColorScale == false ) @@ -941,6 +952,9 @@ bool ninjaArmy::startRuns(int numProcessors) ninjas[i]->get_AngFileName(), ninjas[i]->get_CldFileName() ); } + //setup the run kmz filenames, for C-API calls + setCurrentRunKmzFilenames(i); + //delete all but ninjas[0] (ninjas[0] is used to set the output path in the GUI) //need to keep the ninjas for now, if doing a consistent color scale set of outputs if( i != 0 && ninjas[0]->input.googUseConsistentColorScale == false ) @@ -2470,6 +2484,17 @@ std::string ninjaArmy::getOutputPath( const int nIndex, char ** papszOptions ) } return std::string(""); } + +int ninjaArmy::getRunKmzFilenames( std::vector& kmzFilenamesStr, std::vector& stationKmlFilenamesStr, + std::vector& wxModelKmzFilenamesStr, char ** papszOptions ) +{ + kmzFilenamesStr = kmzFilenames; + stationKmlFilenamesStr = stationKmlFilenames; + wxModelKmzFilenamesStr = wxModelKmzFilenames; + + return NINJA_SUCCESS; +} + /** * @brief Reset the army in able to reinitialize needed parameters * @@ -2495,6 +2520,32 @@ void ninjaArmy::cancelAndReset() reset(); } +void ninjaArmy::setCurrentRunKmzFilenames(int runNumber) +{ + kmzFilenames.push_back( ninjas[runNumber]->input.kmzFile ); + + //stationKmlFilenames.push_back( "" ); + //wxModelKmzFilenames.push_back( "" ); + + // uh oh, this one has MORE than ONE for the RUN, TODO: need to resize my storage. + // Also, need to figure out how to loop through the stations data of the run to get the station filenames + // I see ninjaArmy::getWxStations() might be a cleaner way to get these input.stations as well, for sure input.stations seems to be the starting point + // oh, this is weird, I looked in wxStation to find the equivalent to stationFilenames, and found this "stationKmlNames" data member, + // but it's weird because this is a vector of stationKmlNames stored on each individual wxStation? Meaning input.stations[0] might be all that is needed + // but it really is kinda weird, and the one time the value gets setup seems to only be during calls to wxStation::writeKmlFile(), + // which DOES appear to be called, manually, by both cli.cpp and ninjaArmy.cpp, BUT it is done so on one stations[i] at a time, which is also quite weird, + // wxStation::writeKmlFile( army.getWxStations( i ), ); + // anyhow, at least I seem to have a path forward to get the filename, for now, + // and just using the stationKmlNames[0] of the first input.stations[0] seems to be an actual station filename. + // make sure to actually check the kml output writing or you will get seg faults, + // the stations[i].stationKmlNames[i] storage isn't sized unless station kml output writing is checked + ////stationKmlFilenames.push_back( ninjas[runNumber]->input.stationFilename ); + stationKmlFilenames.push_back( ninjas[runNumber]->input.stations[0].stationKmlNames[0] ); + + // oh, this one is set to "!set" for non-wxModel runs, the storage of this filename always exists for each ninjas[i] + wxModelKmzFilenames.push_back( ninjas[runNumber]->input.wxModelKmzFile ); +} + void ninjaArmy::initLocalData(void) { const char *pszTmp = NULL; diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 18aa5fedf..68e8b4fb9 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -1340,13 +1340,30 @@ class ninjaArmy * \return path String of the path, which is empty if no output is set */ std::string getOutputPath( const int nIndex, char ** papszOptions=NULL ); + + /** + * \brief Returns the output kmz filenames of each ninja, as well as the station kml filenames + * and the weather model filenames of each ninja if they were created for the run. + * + * \param kmzFilenames The output kmz filenames of each ninja, to be filled. + * \param stationKmlFilenames The station kml filenames of each ninja, to be filled. Runs without station kml file output use "" for the station kml filenames. + * \param weatherModelKmzFilenames The weather model kmz filenames of each ninja, to be filled. Runs without weather model kmz file output use "" for the weather model kmz filenames. + * \return errval Returns NINJA_SUCCESS upon success. + */ + int getRunKmzFilenames( std::vector& kmzFilenamesStr, std::vector& stationKmlFilenamesStr, + std::vector& wxModelKmzFilenamesStr, char ** papszOptions=NULL ); + /*----------------------------------------------------------------------------- * Termination Section *-----------------------------------------------------------------------------*/ void reset(); void cancel(); void cancelAndReset(); - + + std::vector kmzFilenames; + std::vector stationKmlFilenames; + std::vector wxModelKmzFilenames; + GDALDatasetH hSpdMemDS; //in-memory dataset for GTiff output writer GDALDatasetH hDirMemDS; //in-memory dataset for GTiff output writer GDALDatasetH hDustMemDS; //in-memory dataset for GTiff output writer @@ -1360,6 +1377,8 @@ class ninjaArmy void writeFarsiteAtmosphereFile(); void setAtmFlags(); + void setCurrentRunKmzFilenames(int runNumber); + /* ** This function initializes various data for the lifetime of the ** ninjaArmy. This should be used for various tasks, such as downloading diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 7c62903ad..3ae046f55 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -2616,5 +2616,116 @@ WINDNINJADLL_EXPORT NinjaErr NinjaWriteBlankWxStationFile( const char * outputSt } } +/** + * \brief calls ninjaArmy::getRunKmzFilenames(), which gets the ninjas[i] output kmz filenames, + * as well as ninjas[i] station kml filenames and ninjas[i] weather model filenames, + * if they were created for the run. + * + * \note Must be called after NinjaStartRuns is called and finished successfully. + * \note NinjaDestroyRunKmzFilenames() must be called on the run kmz filenames when done with the filenames, to properly deallocate the filenames memory. + * + * \param army An opaque handle to a valid ninjaArmy. + * \param numRuns The number of runs that were simulated, to be filled. Also the expected size of the filled filename arrays. + * \param kmzFilenames The ninjas[i] output kmz filenames array, as a NULL char**, to be created and filled, to be created of size numRuns. + * \param stationKmlFilenames The ninjas[i] station kml filenames array, as a NULL char**, to be created and filled, to be created of size numRuns. Runs without station kml file output use "" for the station kml filenames. + * \param weatherModelKmzFilenames The ninjas[i] weather model kmz filenames array, as a NULL char**, to be created and filled, to be created of size numRuns. Runs without weather model kmz file output use "" for the weather model kmz filenames. + * \param papszOptions options + * + * \return NINJA_SUCCESS on success, non-zero otherwise. + */ +WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *numRuns, char*** kmzFilenames, char*** stationKmlFilenames, char*** weatherModelKmzFilenames, char ** papszOptions) +{ + std::vector kmzFilenameStrings; + std::vector stationKmlFilenameStrings; + std::vector wxModelKmzFilenameStrings; + + if( NULL != army ) + { + NinjaErr retval = reinterpret_cast( army )->getRunKmzFilenames( kmzFilenameStrings, stationKmlFilenameStrings, wxModelKmzFilenameStrings ); + if( retval != NINJA_SUCCESS ) + { + return retval; + } + + int n = (int)kmzFilenameStrings.size(); + *numRuns = n; + + *kmzFilenames = (char **)malloc(sizeof(char *) * n); + *stationKmlFilenames = (char **)malloc(sizeof(char *) * n); + *weatherModelKmzFilenames = (char **)malloc(sizeof(char *) * n); + + for(int i = 0; i < n; i++) + { + std::string kmzFilenameStr = kmzFilenameStrings[i]; + std::string stationKmlFilenameStr = stationKmlFilenameStrings[i]; + std::string wxModelKmzFilenameStr = wxModelKmzFilenameStrings[i]; + + char *kmzFilename = (char *)malloc(kmzFilenameStr.size() + 1); + char *stationKmlFilename = (char *)malloc(stationKmlFilenameStr.size() + 1); + char *wxModelKmzFilename = (char *)malloc(wxModelKmzFilenameStr.size() + 1); + + if(!kmzFilename || !stationKmlFilename || !wxModelKmzFilename) + { + return NINJA_E_BAD_ALLOC; + } + + memcpy(kmzFilename, kmzFilenameStr.c_str(), kmzFilenameStr.size() + 1); + memcpy(stationKmlFilename, stationKmlFilenameStr.c_str(), stationKmlFilenameStr.size() + 1); + memcpy(wxModelKmzFilename, wxModelKmzFilenameStr.c_str(), wxModelKmzFilenameStr.size() + 1); + + (*kmzFilenames)[i] = kmzFilename; + (*stationKmlFilenames)[i] = stationKmlFilename; + (*weatherModelKmzFilenames)[i] = wxModelKmzFilename; + } + + return NINJA_SUCCESS; + } + else + { + return NINJA_E_NULL_PTR; + } +} + +WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmzFilenames, char** stationKmlFilenames, char** weatherModelKmzFilenames, char ** papszOptions) +{ + for(int i = 0; i < numRuns; i++) + { + if(kmzFilenames) + { + if(kmzFilenames[i]) + { + free(kmzFilenames[i]); + } + } + if(stationKmlFilenames) + { + if(stationKmlFilenames[i]) + { + free(stationKmlFilenames[i]); + } + } + if(weatherModelKmzFilenames) + { + if(weatherModelKmzFilenames[i]) + { + free(weatherModelKmzFilenames[i]); + } + } + } + + if(kmzFilenames) + { + free(kmzFilenames); + } + if(stationKmlFilenames) + { + free(stationKmlFilenames); + } + if(weatherModelKmzFilenames) + { + free(weatherModelKmzFilenames); + } +} + } // extern "C" diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 64a11ae60..8d675cd09 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -390,5 +390,7 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaCheckTimeDuration (int* yearList, int* monthList, int * dayList, int * minuteList, int *hourList, int listSize, char ** papszOptions); WINDNINJADLL_EXPORT NinjaErr NinjaWriteBlankWxStationFile( const char * outputStationFilename, char ** papszOptions ); + WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *numRuns, char*** kmzFilenames, char*** stationKmlFilenames, char*** weatherModelKmzFilenames, char ** papszOptions); + WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmzFilenames, char** stationKmlFilenames, char** weatherModelKmzFilenames, char ** papszOptions); WN_C_END From e571e3613c4b0fb929c53b8cd001679228cf4b87 Mon Sep 17 00:00:00 2001 From: masonwillman <117214223+masonwillman@users.noreply.github.com> Date: Mon, 12 Jan 2026 17:19:45 -0700 Subject: [PATCH 343/435] Fixed small issues in CMakeLists.txt and adjusted features in vcpkg dependencies, for #660 --- CMakeLists.txt | 78 ++++++++++++++++++++++++-------------------------- vcpkg.json | 23 +++++++++++++++ 2 files changed, 60 insertions(+), 41 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 521ebd598..8320155a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,15 @@ cmake_minimum_required (VERSION 3.16) +# Check if the user is using VCPKG on Windows +if(WIN32) + if(NOT DEFINED CMAKE_TOOLCHAIN_FILE OR NOT CMAKE_TOOLCHAIN_FILE MATCHES "vcpkg.cmake") + message(FATAL_ERROR + "WindNinja requires the Visual C++ Package Manager VCPKG.\n" + ) + endif() +endif(WIN32) + project(WindNinja) # let cmake figure out how to set the C++ level @@ -82,28 +91,17 @@ set(WINDNINJA_VERSION_NAME WindNinja-${VER_STR}) message(STATUS "VERSION: ${VER_STR}") message(STATUS "PKG VERSION: ${WINDNINJA_VERSION_NAME}") - - -option(USE_VCPKG "Use VCPKG for Windows dependencies" OFF) -if(USE_VCPKG) - if(WIN32) - message(STATUS "Using VCPKG") - find_package(shapelib CONFIG REQUIRED) - find_package(GDAL CONFIG REQUIRED) - find_package(netCDF CONFIG REQUIRED) - - find_package(Boost REQUIRED COMPONENTS program_options) - - - set(GDAL_LIBRARY GDAL::GDAL) - set(NETCDF_LIBRARIES_C netCDF::netcdf) - set(Boost_DEBUG OFF) - set(Boost_USE_STATIC_LIBS ON) - set(Boost_USE_MULTITHREAD OFF) - - else() - message(FATAL_ERROR "USE_VCPKG is only supported on Windows.") - endif() +# Find Dependencies: VCPKG for Windows and ATP for Linux +if(MSVC) + find_package(shapelib CONFIG REQUIRED) + find_package(GDAL CONFIG REQUIRED) + find_package(netCDF CONFIG REQUIRED) + find_package(Boost REQUIRED COMPONENTS date_time program_options unit_test_framework) + set(GDAL_LIBRARY GDAL::GDAL) + set(NETCDF_LIBRARIES_C netCDF::netcdf) + set(Boost_DEBUG OFF) + set(Boost_USE_STATIC_LIBS ON) + set(Boost_USE_MULTITHREAD OFF) else() include(FindBoost) set(Boost_DEBUG OFF) @@ -113,7 +111,7 @@ else() include(FindNetCDF) include(FindGDAL) find_package(NetCDF) -endif() +endif(MSVC) # Ninja executables option(NINJA_GUI "Build Qt GUI" ON) @@ -313,6 +311,16 @@ if(NINJA_GDAL_OUTPUT) add_definitions(-DNINJA_GDAL_OUTPUT) endif() +if(MSVC) + # Run windeployqt6.exe to provide all QT related DLLs + set(WINDEPLOYQT_EXE "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-windows/tools/Qt6/bin/windeployqt6.exe") + add_custom_target(deploy_windninja ALL + COMMAND "${WINDEPLOYQT_EXE}" + "$" + DEPENDS WindNinja + ) +endif(MSVC) + option(FIRE_BEHAVIOR_DATA_INSTALL "Only install files necessary for FireBehaviorModels" OFF) # Recurse into subdirectories @@ -432,8 +440,6 @@ endforeach(f ${share_files}) # Leaflet data if(WIN32 AND FIRELAB_PACKAGE) install(DIRECTORY ${PROJECT_SOURCE_DIR}/data/leaflet DESTINATION share/windninja) -else(WIN32 AND FIRELAB_PACKAGE) - install(DIRECTORY ${PROJECT_SOURCE_DIR}/data/leaflet DESTINATION share/windninja) endif(WIN32 AND FIRELAB_PACKAGE) set(doc_files CLI_instructions.pdf @@ -464,11 +470,6 @@ install(FILES ${PROJECT_SOURCE_DIR}/data/topofire_logo.png DESTINATION share/win set(ZIPFILES "") -# GDAL data -if(WIN32 AND FIRELAB_PACKAGE AND MSVC AND GIS_INTERNALS_HOME) - install(DIRECTORY "${GIS_INTERNALS_HOME}/bin/gdal-data/" DESTINATION share/windninja/gdal-data/data) -endif(WIN32 AND FIRELAB_PACKAGE AND MSVC AND GIS_INTERNALS_HOME) - if(BUILD_TYPE MATCHES "debug") if(PACKAGE_DEBUG) message(STATUS "Copying boost date time file into build/src/gui and build/src/cli") @@ -524,17 +525,11 @@ RMDir \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\Tutorials\\\" RMDir \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\Documents\\\" ") # Build the nsis installer on the firelab machine(s). Not for external use. -if(FIRELAB_PACKAGE AND WIN32 AND MSVC AND USE_VCPKG) - - set(WINDEPLOYQT_EXE "${Qt6_DIR}/../../../bin/windeployqt.exe") - add_custom_target(deploy_windninja ALL - COMMAND "${WINDEPLOYQT_EXE}" --release - "$" - DEPENDS WindNinja - ) +if(FIRELAB_PACKAGE AND WIN32 AND MSVC) + # Install DLLS for WindNinja.exe to the bin directory install( - DIRECTORY "${PROJECT_BINARY_DIR}/src/gui/" + DIRECTORY "${CMAKE_BINARY_DIR}/src/gui/" DESTINATION bin FILES_MATCHING PATTERN "*.exe" @@ -545,20 +540,21 @@ if(FIRELAB_PACKAGE AND WIN32 AND MSVC AND USE_VCPKG) PATTERN "*.qm" ) + # Installs GDAL data from VCPKG to the gdal-data/data directory install( DIRECTORY "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-windows/share/gdal/" DESTINATION share/windninja/gdal-data/data COMPONENT apps ) + # Installs PROJ data from VCPKG to the proj-data/data directory install( DIRECTORY "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-windows/share/proj/" DESTINATION share/windninja/proj-data/data COMPONENT apps ) - -endif(FIRELAB_PACKAGE AND WIN32 AND MSVC AND USE_VCPKG) +endif(FIRELAB_PACKAGE AND WIN32 AND MSVC) set(CPACK_COMPONENT_APPS_REQUIRED TRUE) set(CPACK_COMPONENT_LIBS_HIDDEN TRUE) diff --git a/vcpkg.json b/vcpkg.json index db11dcf8b..bdb9b8233 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -17,6 +17,29 @@ }, { "name": "shapelib" + }, + { + "name": "qtbase", + "features": ["widgets", "network" ] + }, + { + "name": "qttools" + }, + { + "name": "qtdeclarative" + }, + { + "name": "qtquickcontrols2" + }, + { + "name": "qtpositioning" + }, + { + "name": "qtwebchannel" + }, + { + "name": "qtwebengine", + "features": ["webchannel"] } ] } From fcc5b1b4ce5a43595922906896384f90456ce4c8 Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 12 Jan 2026 22:09:01 -0700 Subject: [PATCH 344/435] cleanup to GUI kmz output plotting exact kmz filenames stuff, made stationKmlfilenames be an array of the past set of arrays. Also made the GUI only attempt to plot station kml files when it is a pointInitialization run with kml files written, and only plot weather model kmz files when it is a weatherModelInitialization run with weather model kmz files written. The stationKmlfilenames is way more robust now, actually almost too robust. It expects a varying number of runs with stations than the number of runs, and allows varying numbers of stations for each given run (so in essence, it's a full blown staggered array method). But it could probably be worked out to just always output the full numRuns set of information, just as empty "" when no files. It also looks like the same station kml files are SHARED across all of the runs, so grabbing a set of files for each and every single run is probably redundant. related to issue #582 --- src/gui/mainWindow.cpp | 61 +++++++++++++++++++--------- src/ninja/ninjaArmy.cpp | 51 ++++++++++++++--------- src/ninja/ninjaArmy.h | 4 +- src/ninja/windninja.cpp | 90 +++++++++++++++++++++++++++++++++-------- src/ninja/windninja.h | 4 +- 5 files changed, 150 insertions(+), 60 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index e368a0c40..35aa72bd6 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -641,7 +641,7 @@ void MainWindow::solveButtonClicked() } } } - else + else //if (state.isWeatherModelInitializationValid) { QModelIndexList selectedIndexes = ui->weatherModelTimeTreeView->selectionModel()->selectedIndexes(); int timeListSize = selectedIndexes.count(); @@ -1293,11 +1293,13 @@ void MainWindow::plotKmzOutputs() // vars to be filled int numRuns = 0; char **kmzFilenames = NULL; - char **stationKmlFilenames = NULL; + int numRunsWithStationKmls = 0; + int *numStationKmls = NULL; + char ***stationKmlFilenames = NULL; char **weatherModelKmzFilenames = NULL; char **papszOptions = nullptr; - ninjaErr = NinjaGetRunKmzFilenames(ninjaArmy, &numRuns, &kmzFilenames, &stationKmlFilenames, &weatherModelKmzFilenames, papszOptions); + ninjaErr = NinjaGetRunKmzFilenames(ninjaArmy, &numRuns, &kmzFilenames, &numRunsWithStationKmls, &numStationKmls, &stationKmlFilenames, &weatherModelKmzFilenames, papszOptions); if(ninjaErr != NINJA_SUCCESS) { printf("NinjaGetRunKmzFilenames: ninjaErr = %d\n", ninjaErr); @@ -1305,6 +1307,7 @@ void MainWindow::plotKmzOutputs() for(int i = 0; i < numRuns; i++) { + // plot the output kmz of the run QString outFileStr = QString::fromStdString(kmzFilenames[i]); qDebug() << "kmz outFile =" << outFileStr; QFile outFile(outFileStr); @@ -1314,29 +1317,47 @@ void MainWindow::plotKmzOutputs() QString base64 = data.toBase64(); webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); - } - for(int i = 0; i < numRuns; i++) - { - QString outFileStr = QString::fromStdString(stationKmlFilenames[i]); - qDebug() << "station kml outFile =" << outFileStr; - // tested, this type does not plot right now, because the map.html can't handle it yet - } + // if it is a point initialization run, and station kmls were created for the run, + // plot the station kmls of the run + if(ui->pointInitializationGroupBox->isChecked() && ui->pointInitializationWriteStationKMLCheckBox->isChecked()) + { +qDebug() << "i=" << i << "numRunsWithStationKmls=" << numRunsWithStationKmls; + if(i < numRunsWithStationKmls) + { +qDebug() << "numStationKmls[i]=" << numStationKmls[i]; + for(int j = 0; j < numStationKmls[i]; j++) + { + QString outFileStr = QString::fromStdString(stationKmlFilenames[i][j]); + qDebug() << "station kml outFile =" << outFileStr; + QFile outFile(outFileStr); + + outFile.open(QIODevice::ReadOnly); + QByteArray data = outFile.readAll(); + QString base64 = data.toBase64(); + + webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + } + } + } - for(int i = 0; i < numRuns; i++) - { - QString outFileStr = QString::fromStdString(weatherModelKmzFilenames[i]); - qDebug() << "wx model kmz outFile =" << outFileStr; - QFile outFile(outFileStr); + // if it is a weather model run, and weather model kmzs were created for the run, + // plot the weather model kmz of the run + if(ui->weatherModelGroupBox->isChecked() && ui->googleEarthGroupBox->isChecked()) + { + QString outFileStr = QString::fromStdString(weatherModelKmzFilenames[i]); + qDebug() << "wx model kmz outFile =" << outFileStr; + QFile outFile(outFileStr); - outFile.open(QIODevice::ReadOnly); - QByteArray data = outFile.readAll(); - QString base64 = data.toBase64(); + outFile.open(QIODevice::ReadOnly); + QByteArray data = outFile.readAll(); + QString base64 = data.toBase64(); - webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + } } - ninjaErr = NinjaDestroyRunKmzFilenames(numRuns, kmzFilenames, stationKmlFilenames, weatherModelKmzFilenames, papszOptions); + ninjaErr = NinjaDestroyRunKmzFilenames(numRuns, kmzFilenames, numRunsWithStationKmls, numStationKmls, stationKmlFilenames, weatherModelKmzFilenames, papszOptions); if(ninjaErr != NINJA_SUCCESS) { printf("NinjaDestroyRunKmzFilenames: ninjaErr = %d\n", ninjaErr); diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index d28bff09b..dcbc893dc 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -2485,7 +2485,7 @@ std::string ninjaArmy::getOutputPath( const int nIndex, char ** papszOptions ) return std::string(""); } -int ninjaArmy::getRunKmzFilenames( std::vector& kmzFilenamesStr, std::vector& stationKmlFilenamesStr, +int ninjaArmy::getRunKmzFilenames( std::vector& kmzFilenamesStr, std::vector>& stationKmlFilenamesStr, std::vector& wxModelKmzFilenamesStr, char ** papszOptions ) { kmzFilenamesStr = kmzFilenames; @@ -2523,27 +2523,38 @@ void ninjaArmy::cancelAndReset() void ninjaArmy::setCurrentRunKmzFilenames(int runNumber) { kmzFilenames.push_back( ninjas[runNumber]->input.kmzFile ); - - //stationKmlFilenames.push_back( "" ); - //wxModelKmzFilenames.push_back( "" ); - - // uh oh, this one has MORE than ONE for the RUN, TODO: need to resize my storage. - // Also, need to figure out how to loop through the stations data of the run to get the station filenames - // I see ninjaArmy::getWxStations() might be a cleaner way to get these input.stations as well, for sure input.stations seems to be the starting point - // oh, this is weird, I looked in wxStation to find the equivalent to stationFilenames, and found this "stationKmlNames" data member, - // but it's weird because this is a vector of stationKmlNames stored on each individual wxStation? Meaning input.stations[0] might be all that is needed - // but it really is kinda weird, and the one time the value gets setup seems to only be during calls to wxStation::writeKmlFile(), - // which DOES appear to be called, manually, by both cli.cpp and ninjaArmy.cpp, BUT it is done so on one stations[i] at a time, which is also quite weird, - // wxStation::writeKmlFile( army.getWxStations( i ), ); - // anyhow, at least I seem to have a path forward to get the filename, for now, - // and just using the stationKmlNames[0] of the first input.stations[0] seems to be an actual station filename. - // make sure to actually check the kml output writing or you will get seg faults, - // the stations[i].stationKmlNames[i] storage isn't sized unless station kml output writing is checked - ////stationKmlFilenames.push_back( ninjas[runNumber]->input.stationFilename ); - stationKmlFilenames.push_back( ninjas[runNumber]->input.stations[0].stationKmlNames[0] ); +std::cout << "ninjas[" << runNumber << "]->input.stations.size() = " << ninjas[runNumber]->input.stations.size() << std::endl; + if(ninjas[runNumber]->input.stations.size() != 0) + { +std::cout << "ninjas[" << runNumber << "]->input.stations[0].stationKmlNames.size() = " << ninjas[runNumber]->input.stations[0].stationKmlNames.size() << std::endl; + if(ninjas[runNumber]->input.stations[0].stationKmlNames.size() != 0) + { + // assume all the other stations across all the other stations storage, are the exact same list as that of the first station + // SHOULD be true, seems like the idea of the storage was to make sure each station had access to the same copy of data + // it's still one of the quirkiest code setups that I've seen in a while + std::vector currentStationKmlFilenames; + for(int j = 0; j < ninjas[runNumber]->input.stations[0].stationKmlNames.size(); j++) + { +std::cout << "ninjas[" << runNumber << "]->input.stations[0].stationKmlNames[" << j << "] = " << ninjas[runNumber]->input.stations[0].stationKmlNames[j] << std::endl; + if(ninjas[runNumber]->input.stations[j].stationKmlNames.size()) + { + currentStationKmlFilenames.push_back( ninjas[runNumber]->input.stations[0].stationKmlNames[j] ); + } + } + stationKmlFilenames.push_back( currentStationKmlFilenames ); +std::cout << "stationKmlFilenames.size() = " << stationKmlFilenames.size() << std::endl; +std::cout << "stationKmlFilenames[0].size() = " << stationKmlFilenames[0].size() << std::endl; + } + } // oh, this one is set to "!set" for non-wxModel runs, the storage of this filename always exists for each ninjas[i] - wxModelKmzFilenames.push_back( ninjas[runNumber]->input.wxModelKmzFile ); + if(ninjas[runNumber]->input.wxModelKmzFile == "!set") + { + wxModelKmzFilenames.push_back( "" ); + } else + { + wxModelKmzFilenames.push_back( ninjas[runNumber]->input.wxModelKmzFile ); + } } void ninjaArmy::initLocalData(void) diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 68e8b4fb9..7ea22ba0b 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -1350,7 +1350,7 @@ class ninjaArmy * \param weatherModelKmzFilenames The weather model kmz filenames of each ninja, to be filled. Runs without weather model kmz file output use "" for the weather model kmz filenames. * \return errval Returns NINJA_SUCCESS upon success. */ - int getRunKmzFilenames( std::vector& kmzFilenamesStr, std::vector& stationKmlFilenamesStr, + int getRunKmzFilenames( std::vector& kmzFilenamesStr, std::vector>& stationKmlFilenamesStr, std::vector& wxModelKmzFilenamesStr, char ** papszOptions=NULL ); /*----------------------------------------------------------------------------- @@ -1361,7 +1361,7 @@ class ninjaArmy void cancelAndReset(); std::vector kmzFilenames; - std::vector stationKmlFilenames; + std::vector> stationKmlFilenames; std::vector wxModelKmzFilenames; GDALDatasetH hSpdMemDS; //in-memory dataset for GTiff output writer diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 3ae046f55..e54d9aaa3 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -2627,16 +2627,18 @@ WINDNINJADLL_EXPORT NinjaErr NinjaWriteBlankWxStationFile( const char * outputSt * \param army An opaque handle to a valid ninjaArmy. * \param numRuns The number of runs that were simulated, to be filled. Also the expected size of the filled filename arrays. * \param kmzFilenames The ninjas[i] output kmz filenames array, as a NULL char**, to be created and filled, to be created of size numRuns. - * \param stationKmlFilenames The ninjas[i] station kml filenames array, as a NULL char**, to be created and filled, to be created of size numRuns. Runs without station kml file output use "" for the station kml filenames. + * \param numRunsWithStationKmls The number of runs that actually have station kml filenames, to be filled. Also the expected size of the numStationKmls and stationKmlFilename outer array layers. + * \param numStationKmls An array of the number of station kmls for each run, as a NULL int*, to be created and filled, to be created of size numRunsWithStationKmls. + * \param stationKmlFilenames The ninjas[i] station kml filenames array, as a NULL char***, to be created and filled, to be created of size numRunsWithStationKmls by numStationKmls[runWithStationKmlsIdx]. Runs without station kml file output use "" for the station kml filenames. * \param weatherModelKmzFilenames The ninjas[i] weather model kmz filenames array, as a NULL char**, to be created and filled, to be created of size numRuns. Runs without weather model kmz file output use "" for the weather model kmz filenames. * \param papszOptions options * * \return NINJA_SUCCESS on success, non-zero otherwise. */ -WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *numRuns, char*** kmzFilenames, char*** stationKmlFilenames, char*** weatherModelKmzFilenames, char ** papszOptions) +WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *numRuns, char*** kmzFilenames, int *numRunsWithStationKmls, int** numStationKmls, char**** stationKmlFilenames, char*** weatherModelKmzFilenames, char ** papszOptions) { std::vector kmzFilenameStrings; - std::vector stationKmlFilenameStrings; + std::vector> stationKmlFilenameStrings; std::vector wxModelKmzFilenameStrings; if( NULL != army ) @@ -2651,33 +2653,69 @@ WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *num *numRuns = n; *kmzFilenames = (char **)malloc(sizeof(char *) * n); - *stationKmlFilenames = (char **)malloc(sizeof(char *) * n); *weatherModelKmzFilenames = (char **)malloc(sizeof(char *) * n); for(int i = 0; i < n; i++) { std::string kmzFilenameStr = kmzFilenameStrings[i]; - std::string stationKmlFilenameStr = stationKmlFilenameStrings[i]; std::string wxModelKmzFilenameStr = wxModelKmzFilenameStrings[i]; char *kmzFilename = (char *)malloc(kmzFilenameStr.size() + 1); - char *stationKmlFilename = (char *)malloc(stationKmlFilenameStr.size() + 1); char *wxModelKmzFilename = (char *)malloc(wxModelKmzFilenameStr.size() + 1); - if(!kmzFilename || !stationKmlFilename || !wxModelKmzFilename) + if(!kmzFilename || !wxModelKmzFilename) { return NINJA_E_BAD_ALLOC; } memcpy(kmzFilename, kmzFilenameStr.c_str(), kmzFilenameStr.size() + 1); - memcpy(stationKmlFilename, stationKmlFilenameStr.c_str(), stationKmlFilenameStr.size() + 1); memcpy(wxModelKmzFilename, wxModelKmzFilenameStr.c_str(), wxModelKmzFilenameStr.size() + 1); (*kmzFilenames)[i] = kmzFilename; - (*stationKmlFilenames)[i] = stationKmlFilename; (*weatherModelKmzFilenames)[i] = wxModelKmzFilename; } + int m = (int)stationKmlFilenameStrings.size(); + *numRunsWithStationKmls = m; +std::cout << "m = " << m << std::endl; + *numStationKmls = (int *)malloc(sizeof(int) * m); + for(int i = 0; i < m; i++) + { + (*numStationKmls)[i] = (int)stationKmlFilenameStrings[i].size(); + } + + *stationKmlFilenames = (char ***)malloc(sizeof(char **) * m); + for(int i = 0; i < m; i++) + { + std::vector stationKmlFilenameStrVec = stationKmlFilenameStrings[i]; + + //int nStations = (int)stationKmlFilenameStrVec.size(); + int nStations = (*numStationKmls)[i]; +std::cout << "nStations = " << nStations << std::endl; + (*stationKmlFilenames)[i] = (char **)malloc(sizeof(char *) * nStations); + + if(!(*stationKmlFilenames)[i]) + { + return NINJA_E_BAD_ALLOC; + } + + for(int j = 0; j < nStations; j++) + { + std::string stationKmlFilenameStr = stationKmlFilenameStrVec[j]; + + char *stationKmlFilename = (char *)malloc(stationKmlFilenameStr.size() + 1); + + if(!stationKmlFilename) + { + return NINJA_E_BAD_ALLOC; + } + + memcpy(stationKmlFilename, stationKmlFilenameStr.c_str(), stationKmlFilenameStr.size() + 1); + + (*stationKmlFilenames)[i][j] = stationKmlFilename; + } + } + return NINJA_SUCCESS; } else @@ -2686,7 +2724,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *num } } -WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmzFilenames, char** stationKmlFilenames, char** weatherModelKmzFilenames, char ** papszOptions) +WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmzFilenames, int numRunsWithStationKmls, int* numStationKmls, char*** stationKmlFilenames, char** weatherModelKmzFilenames, char ** papszOptions) { for(int i = 0; i < numRuns; i++) { @@ -2697,18 +2735,34 @@ WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmz free(kmzFilenames[i]); } } - if(stationKmlFilenames) + + if(weatherModelKmzFilenames) { - if(stationKmlFilenames[i]) + if(weatherModelKmzFilenames[i]) { - free(stationKmlFilenames[i]); + free(weatherModelKmzFilenames[i]); } } - if(weatherModelKmzFilenames) + } + + for(int i = 0; i < numRunsWithStationKmls; i++) + { + if(stationKmlFilenames && numStationKmls) { - if(weatherModelKmzFilenames[i]) + if(numStationKmls[i]) { - free(weatherModelKmzFilenames[i]); + for(int j = 0; j < numStationKmls[i]; j++) + { + if(stationKmlFilenames[i][j]) + { + free(stationKmlFilenames[i][j]); + } + } + + if(stationKmlFilenames[i]) + { + free(stationKmlFilenames[i]); + } } } } @@ -2721,6 +2775,10 @@ WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmz { free(stationKmlFilenames); } + if(numStationKmls) + { + free(numStationKmls); + } if(weatherModelKmzFilenames) { free(weatherModelKmzFilenames); diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 8d675cd09..b5685a2d9 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -390,7 +390,7 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaCheckTimeDuration (int* yearList, int* monthList, int * dayList, int * minuteList, int *hourList, int listSize, char ** papszOptions); WINDNINJADLL_EXPORT NinjaErr NinjaWriteBlankWxStationFile( const char * outputStationFilename, char ** papszOptions ); - WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *numRuns, char*** kmzFilenames, char*** stationKmlFilenames, char*** weatherModelKmzFilenames, char ** papszOptions); - WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmzFilenames, char** stationKmlFilenames, char** weatherModelKmzFilenames, char ** papszOptions); + WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *numRuns, char*** kmzFilenames, int *numRunsWithStationKmls, int** numStationKmls, char**** stationKmlFilenames, char*** weatherModelKmzFilenames, char ** papszOptions); + WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmzFilenames, int numRunsWithStationKmls, int* numStationKmls, char*** stationKmlFilenames, char** weatherModelKmzFilenames, char ** papszOptions); WN_C_END From 27b71d26c9496741fcdaaa08043b07a29c8fb0ad Mon Sep 17 00:00:00 2001 From: latwood Date: Mon, 12 Jan 2026 23:43:43 -0700 Subject: [PATCH 345/435] simplified GUI kmz output plotting station kml filenames, make it always output the full numRuns set of information, as empty "" when no files. So got rid of the varying number of station kml filenames, it is now always the same count as numRuns, though numStations for a given run is still setup to handle staggered grid counts, even though the number of stations is SHARED and is constant across runs. I did catch an error to my output plotting kmz filenames filling because of the work of this commit. The kmz filenames are set to size 0, then appended to at the end of each run, but if runs finish out of order (because parallel and multithreaded), they can still be accessed correctly at the end, but the order looks to get messed up compared to the runNumber. I found this out, because accessing [runNumber] in the moment of filling for a run 1 before a run 0 would seg fault because only [0] not [1] was filled by that point. Related to issue #582. --- src/gui/mainWindow.cpp | 31 +++++++++++++------------------ src/ninja/ninjaArmy.cpp | 32 +++++++++++++++++++++----------- src/ninja/windninja.cpp | 41 ++++++++++++++++++++--------------------- src/ninja/windninja.h | 4 ++-- 4 files changed, 56 insertions(+), 52 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 35aa72bd6..226d84116 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -1293,13 +1293,12 @@ void MainWindow::plotKmzOutputs() // vars to be filled int numRuns = 0; char **kmzFilenames = NULL; - int numRunsWithStationKmls = 0; int *numStationKmls = NULL; char ***stationKmlFilenames = NULL; char **weatherModelKmzFilenames = NULL; char **papszOptions = nullptr; - ninjaErr = NinjaGetRunKmzFilenames(ninjaArmy, &numRuns, &kmzFilenames, &numRunsWithStationKmls, &numStationKmls, &stationKmlFilenames, &weatherModelKmzFilenames, papszOptions); + ninjaErr = NinjaGetRunKmzFilenames(ninjaArmy, &numRuns, &kmzFilenames, &numStationKmls, &stationKmlFilenames, &weatherModelKmzFilenames, papszOptions); if(ninjaErr != NINJA_SUCCESS) { printf("NinjaGetRunKmzFilenames: ninjaErr = %d\n", ninjaErr); @@ -1322,22 +1321,18 @@ void MainWindow::plotKmzOutputs() // plot the station kmls of the run if(ui->pointInitializationGroupBox->isChecked() && ui->pointInitializationWriteStationKMLCheckBox->isChecked()) { -qDebug() << "i=" << i << "numRunsWithStationKmls=" << numRunsWithStationKmls; - if(i < numRunsWithStationKmls) +qDebug() << "i =" << i << ", numStationKmls[i] =" << numStationKmls[i]; + for(int j = 0; j < numStationKmls[i]; j++) { -qDebug() << "numStationKmls[i]=" << numStationKmls[i]; - for(int j = 0; j < numStationKmls[i]; j++) - { - QString outFileStr = QString::fromStdString(stationKmlFilenames[i][j]); - qDebug() << "station kml outFile =" << outFileStr; - QFile outFile(outFileStr); - - outFile.open(QIODevice::ReadOnly); - QByteArray data = outFile.readAll(); - QString base64 = data.toBase64(); - - webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); - } + QString outFileStr = QString::fromStdString(stationKmlFilenames[i][j]); + qDebug() << "station kml outFile =" << outFileStr; + QFile outFile(outFileStr); + + outFile.open(QIODevice::ReadOnly); + QByteArray data = outFile.readAll(); + QString base64 = data.toBase64(); + + webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); } } @@ -1357,7 +1352,7 @@ qDebug() << "numStationKmls[i]=" << numStationKmls[i]; } } - ninjaErr = NinjaDestroyRunKmzFilenames(numRuns, kmzFilenames, numRunsWithStationKmls, numStationKmls, stationKmlFilenames, weatherModelKmzFilenames, papszOptions); + ninjaErr = NinjaDestroyRunKmzFilenames(numRuns, kmzFilenames, numStationKmls, stationKmlFilenames, weatherModelKmzFilenames, papszOptions); if(ninjaErr != NINJA_SUCCESS) { printf("NinjaDestroyRunKmzFilenames: ninjaErr = %d\n", ninjaErr); diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index dcbc893dc..4a239fc8f 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -2524,29 +2524,39 @@ void ninjaArmy::setCurrentRunKmzFilenames(int runNumber) { kmzFilenames.push_back( ninjas[runNumber]->input.kmzFile ); std::cout << "ninjas[" << runNumber << "]->input.stations.size() = " << ninjas[runNumber]->input.stations.size() << std::endl; - if(ninjas[runNumber]->input.stations.size() != 0) + std::vector currentStationKmlFilenames; + if(ninjas[runNumber]->input.stations.size() == 0) { -std::cout << "ninjas[" << runNumber << "]->input.stations[0].stationKmlNames.size() = " << ninjas[runNumber]->input.stations[0].stationKmlNames.size() << std::endl; - if(ninjas[runNumber]->input.stations[0].stationKmlNames.size() != 0) + currentStationKmlFilenames.push_back( "" ); + } else + { +std::cout << "ninjas[" << runNumber << "]->input.stations[" << runNumber << "].stationKmlNames.size() = " << ninjas[runNumber]->input.stations[runNumber].stationKmlNames.size() << std::endl; + if(ninjas[runNumber]->input.stations[runNumber].stationKmlNames.size() == 0) + { + currentStationKmlFilenames.push_back( "" ); + } else { // assume all the other stations across all the other stations storage, are the exact same list as that of the first station // SHOULD be true, seems like the idea of the storage was to make sure each station had access to the same copy of data // it's still one of the quirkiest code setups that I've seen in a while - std::vector currentStationKmlFilenames; - for(int j = 0; j < ninjas[runNumber]->input.stations[0].stationKmlNames.size(); j++) + for(int j = 0; j < ninjas[runNumber]->input.stations[runNumber].stationKmlNames.size(); j++) { -std::cout << "ninjas[" << runNumber << "]->input.stations[0].stationKmlNames[" << j << "] = " << ninjas[runNumber]->input.stations[0].stationKmlNames[j] << std::endl; +std::cout << "ninjas[" << runNumber << "]->input.stations[" << runNumber << "].stationKmlNames[" << j << "] = " << ninjas[runNumber]->input.stations[runNumber].stationKmlNames[j] << std::endl; if(ninjas[runNumber]->input.stations[j].stationKmlNames.size()) { - currentStationKmlFilenames.push_back( ninjas[runNumber]->input.stations[0].stationKmlNames[j] ); + currentStationKmlFilenames.push_back( ninjas[runNumber]->input.stations[runNumber].stationKmlNames[j] ); } } - stationKmlFilenames.push_back( currentStationKmlFilenames ); -std::cout << "stationKmlFilenames.size() = " << stationKmlFilenames.size() << std::endl; -std::cout << "stationKmlFilenames[0].size() = " << stationKmlFilenames[0].size() << std::endl; } } - + stationKmlFilenames.push_back( currentStationKmlFilenames ); +std::cout << "stationKmlFilenames.size() = " << stationKmlFilenames.size() << std::endl; +std::cout << "stationKmlFilenames[0].size() = " << stationKmlFilenames[0].size() << std::endl; +std::cout << "stationKmlFilenames[0][0] = \"" << stationKmlFilenames[0][0] << "\"" << std::endl; +std::cout << "stationKmlFilenames[0][" << stationKmlFilenames[0].size()-1 << "] = \"" << stationKmlFilenames[0][stationKmlFilenames[0].size()-1] << "\"" << std::endl; +//std::cout << "stationKmlFilenames[" << runNumber << "].size() = " << stationKmlFilenames[runNumber].size() << std::endl; +//std::cout << "stationKmlFilenames[" << runNumber << "][0] = \"" << stationKmlFilenames[runNumber][0] << "\"" << std::endl; +//std::cout << "stationKmlFilenames[" << runNumber << "][" << stationKmlFilenames[runNumber].size()-1 << "] = \"" << stationKmlFilenames[runNumber][stationKmlFilenames[runNumber].size()-1] << "\"" << std::endl; // oh, this one is set to "!set" for non-wxModel runs, the storage of this filename always exists for each ninjas[i] if(ninjas[runNumber]->input.wxModelKmzFile == "!set") { diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index e54d9aaa3..9aebd4deb 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -2627,15 +2627,14 @@ WINDNINJADLL_EXPORT NinjaErr NinjaWriteBlankWxStationFile( const char * outputSt * \param army An opaque handle to a valid ninjaArmy. * \param numRuns The number of runs that were simulated, to be filled. Also the expected size of the filled filename arrays. * \param kmzFilenames The ninjas[i] output kmz filenames array, as a NULL char**, to be created and filled, to be created of size numRuns. - * \param numRunsWithStationKmls The number of runs that actually have station kml filenames, to be filled. Also the expected size of the numStationKmls and stationKmlFilename outer array layers. - * \param numStationKmls An array of the number of station kmls for each run, as a NULL int*, to be created and filled, to be created of size numRunsWithStationKmls. - * \param stationKmlFilenames The ninjas[i] station kml filenames array, as a NULL char***, to be created and filled, to be created of size numRunsWithStationKmls by numStationKmls[runWithStationKmlsIdx]. Runs without station kml file output use "" for the station kml filenames. + * \param numStationKmls An array of the number of station kmls for each run, as a NULL int*, to be created and filled, to be created of size numRuns. + * \param stationKmlFilenames The ninjas[i] station kml filenames array, as a NULL char***, to be created and filled, to be created of size numRuns by numStationKmls[runIdx]. Runs without station kml file output use "" for the station kml filenames. * \param weatherModelKmzFilenames The ninjas[i] weather model kmz filenames array, as a NULL char**, to be created and filled, to be created of size numRuns. Runs without weather model kmz file output use "" for the weather model kmz filenames. * \param papszOptions options * * \return NINJA_SUCCESS on success, non-zero otherwise. */ -WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *numRuns, char*** kmzFilenames, int *numRunsWithStationKmls, int** numStationKmls, char**** stationKmlFilenames, char*** weatherModelKmzFilenames, char ** papszOptions) +WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *numRuns, char*** kmzFilenames, int** numStationKmls, char**** stationKmlFilenames, char*** weatherModelKmzFilenames, char ** papszOptions) { std::vector kmzFilenameStrings; std::vector> stationKmlFilenameStrings; @@ -2676,16 +2675,19 @@ WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *num } int m = (int)stationKmlFilenameStrings.size(); - *numRunsWithStationKmls = m; + if(m != n) + { + return NINJA_E_INVALID; + } std::cout << "m = " << m << std::endl; - *numStationKmls = (int *)malloc(sizeof(int) * m); - for(int i = 0; i < m; i++) + *numStationKmls = (int *)malloc(sizeof(int) * n); + for(int i = 0; i < n; i++) { (*numStationKmls)[i] = (int)stationKmlFilenameStrings[i].size(); } - *stationKmlFilenames = (char ***)malloc(sizeof(char **) * m); - for(int i = 0; i < m; i++) + *stationKmlFilenames = (char ***)malloc(sizeof(char **) * n); + for(int i = 0; i < n; i++) { std::vector stationKmlFilenameStrVec = stationKmlFilenameStrings[i]; @@ -2724,7 +2726,7 @@ std::cout << "nStations = " << nStations << std::endl; } } -WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmzFilenames, int numRunsWithStationKmls, int* numStationKmls, char*** stationKmlFilenames, char** weatherModelKmzFilenames, char ** papszOptions) +WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmzFilenames, int* numStationKmls, char*** stationKmlFilenames, char** weatherModelKmzFilenames, char ** papszOptions) { for(int i = 0; i < numRuns; i++) { @@ -2736,17 +2738,6 @@ WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmz } } - if(weatherModelKmzFilenames) - { - if(weatherModelKmzFilenames[i]) - { - free(weatherModelKmzFilenames[i]); - } - } - } - - for(int i = 0; i < numRunsWithStationKmls; i++) - { if(stationKmlFilenames && numStationKmls) { if(numStationKmls[i]) @@ -2765,6 +2756,14 @@ WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmz } } } + + if(weatherModelKmzFilenames) + { + if(weatherModelKmzFilenames[i]) + { + free(weatherModelKmzFilenames[i]); + } + } } if(kmzFilenames) diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index b5685a2d9..49bf70a80 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -390,7 +390,7 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaCheckTimeDuration (int* yearList, int* monthList, int * dayList, int * minuteList, int *hourList, int listSize, char ** papszOptions); WINDNINJADLL_EXPORT NinjaErr NinjaWriteBlankWxStationFile( const char * outputStationFilename, char ** papszOptions ); - WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *numRuns, char*** kmzFilenames, int *numRunsWithStationKmls, int** numStationKmls, char**** stationKmlFilenames, char*** weatherModelKmzFilenames, char ** papszOptions); - WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmzFilenames, int numRunsWithStationKmls, int* numStationKmls, char*** stationKmlFilenames, char** weatherModelKmzFilenames, char ** papszOptions); + WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *numRuns, char*** kmzFilenames, int** numStationKmls, char**** stationKmlFilenames, char*** weatherModelKmzFilenames, char ** papszOptions); + WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmzFilenames, int* numStationKmls, char*** stationKmlFilenames, char** weatherModelKmzFilenames, char ** papszOptions); WN_C_END From b9427831560d0c3b9bd610b0a1172acc651e5f90 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 13 Jan 2026 00:16:35 -0700 Subject: [PATCH 346/435] fixed the GUI kmz output plotting kmz filenames filling, to better handle multithreading and changes in the order of completed runs. Now the order of the kmz filenames is correct for the given run. --- src/ninja/ninjaArmy.cpp | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 4a239fc8f..c8755739d 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -670,9 +670,9 @@ bool ninjaArmy::startRuns(int numProcessors) } // prep a clean set of kmz output filenames to append to before ninjas[i] gets deleted after each run - kmzFilenames.clear(); - stationKmlFilenames.clear(); - wxModelKmzFilenames.clear(); + kmzFilenames.resize(ninjas.size()); + stationKmlFilenames.resize(ninjas.size()); + wxModelKmzFilenames.resize(ninjas.size()); if(ninjas.size() == 1) { @@ -2522,7 +2522,7 @@ void ninjaArmy::cancelAndReset() void ninjaArmy::setCurrentRunKmzFilenames(int runNumber) { - kmzFilenames.push_back( ninjas[runNumber]->input.kmzFile ); + kmzFilenames[runNumber] = ninjas[runNumber]->input.kmzFile; std::cout << "ninjas[" << runNumber << "]->input.stations.size() = " << ninjas[runNumber]->input.stations.size() << std::endl; std::vector currentStationKmlFilenames; if(ninjas[runNumber]->input.stations.size() == 0) @@ -2549,21 +2549,17 @@ std::cout << "ninjas[" << runNumber << "]->input.stations[" << runNumber << "].s } } } - stationKmlFilenames.push_back( currentStationKmlFilenames ); -std::cout << "stationKmlFilenames.size() = " << stationKmlFilenames.size() << std::endl; -std::cout << "stationKmlFilenames[0].size() = " << stationKmlFilenames[0].size() << std::endl; -std::cout << "stationKmlFilenames[0][0] = \"" << stationKmlFilenames[0][0] << "\"" << std::endl; -std::cout << "stationKmlFilenames[0][" << stationKmlFilenames[0].size()-1 << "] = \"" << stationKmlFilenames[0][stationKmlFilenames[0].size()-1] << "\"" << std::endl; -//std::cout << "stationKmlFilenames[" << runNumber << "].size() = " << stationKmlFilenames[runNumber].size() << std::endl; -//std::cout << "stationKmlFilenames[" << runNumber << "][0] = \"" << stationKmlFilenames[runNumber][0] << "\"" << std::endl; -//std::cout << "stationKmlFilenames[" << runNumber << "][" << stationKmlFilenames[runNumber].size()-1 << "] = \"" << stationKmlFilenames[runNumber][stationKmlFilenames[runNumber].size()-1] << "\"" << std::endl; + stationKmlFilenames[runNumber] = currentStationKmlFilenames; +std::cout << "stationKmlFilenames[" << runNumber << "].size() = " << stationKmlFilenames[runNumber].size() << std::endl; +std::cout << "stationKmlFilenames[" << runNumber << "][0] = \"" << stationKmlFilenames[runNumber][0] << "\"" << std::endl; +std::cout << "stationKmlFilenames[" << runNumber << "][" << stationKmlFilenames[runNumber].size()-1 << "] = \"" << stationKmlFilenames[runNumber][stationKmlFilenames[runNumber].size()-1] << "\"" << std::endl; // oh, this one is set to "!set" for non-wxModel runs, the storage of this filename always exists for each ninjas[i] if(ninjas[runNumber]->input.wxModelKmzFile == "!set") { - wxModelKmzFilenames.push_back( "" ); + wxModelKmzFilenames[runNumber] = ""; } else { - wxModelKmzFilenames.push_back( ninjas[runNumber]->input.wxModelKmzFile ); + wxModelKmzFilenames[runNumber] = ninjas[runNumber]->input.wxModelKmzFile; } } From b9bcee32aa0a5cfb7c93b80c7bb5200e884310ef Mon Sep 17 00:00:00 2001 From: masonwillman <117214223+masonwillman@users.noreply.github.com> Date: Tue, 13 Jan 2026 08:38:02 -0700 Subject: [PATCH 347/435] Fixed compilation issue with OGRSpatialReference, for #660 --- src/ninja/gdal_util.cpp | 67 ++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/src/ninja/gdal_util.cpp b/src/ninja/gdal_util.cpp index 8db765898..f15d90562 100644 --- a/src/ninja/gdal_util.cpp +++ b/src/ninja/gdal_util.cpp @@ -440,47 +440,46 @@ bool GDALPointToLatLon( double &x, double &y, GDALDataset *poSrcDS, bool OGRPointToLatLon(double &x, double &y, OGRDataSourceH hDS, const char *datum) { - char *pszPrj = NULL; + char *pszPrj = NULL; - OGRSpatialReference *poSrcSRS; - OGRSpatialReference oSourceSRS, oTargetSRS; - OGRCoordinateTransformation *poCT; - - if (hDS == NULL) { - return false; - } - - OGRLayer *poLayer; - - poLayer = (OGRLayer *)OGR_DS_GetLayer(hDS, 0); - poLayer->ResetReading(); - - poSrcSRS = poLayer->GetSpatialRef(); - if (poSrcSRS == NULL) { - return false; - } + const OGRSpatialReference *poSrcSRS; + OGRSpatialReference oSourceSRS, oTargetSRS; + OGRCoordinateTransformation *poCT; - oTargetSRS.SetWellKnownGeogCS(datum); + if (hDS == NULL) { + return false; + } -#ifdef GDAL_COMPUTE_VERSION -#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3,0,0) - poSrcSRS->SetAxisMappingStrategy(OAMS_TRADITIONAL_GIS_ORDER); - oTargetSRS.SetAxisMappingStrategy(OAMS_TRADITIONAL_GIS_ORDER); -#endif /* GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3,0,0) */ -#endif /* GDAL_COMPUTE_VERSION */ + OGRLayer *poLayer; - poCT = OGRCreateCoordinateTransformation(poSrcSRS, &oTargetSRS); + poLayer = (OGRLayer *)OGR_DS_GetLayer(hDS, 0); + poLayer->ResetReading(); - if (poCT == NULL) { - return false; - } + poSrcSRS = poLayer->GetSpatialRef(); + if (poSrcSRS == NULL) { + return false; + } + oSourceSRS = *poSrcSRS; + oTargetSRS.SetWellKnownGeogCS(datum); + + #ifdef GDAL_COMPUTE_VERSION + #if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3,0,0) + oSourceSRS.SetAxisMappingStrategy(OAMS_TRADITIONAL_GIS_ORDER); + oTargetSRS.SetAxisMappingStrategy(OAMS_TRADITIONAL_GIS_ORDER); + #endif /* GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(3,0,0) */ + #endif /* GDAL_COMPUTE_VERSION */ + poCT = OGRCreateCoordinateTransformation(&oSourceSRS, &oTargetSRS); + + if (poCT == NULL) { + return false; + } - if (!poCT->Transform(1, &x, &y)) { + if (!poCT->Transform(1, &x, &y)) { + OGRCoordinateTransformation::DestroyCT(poCT); + return false; + } OGRCoordinateTransformation::DestroyCT(poCT); - return false; - } - OGRCoordinateTransformation::DestroyCT(poCT); - return true; + return true; } /** From 3600f944b9764ed03cfc4011db7564aa39db1526 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 13 Jan 2026 12:28:53 -0700 Subject: [PATCH 348/435] simplified GUI kmz output plotting station kml filenames, go back to commit 99ab82e0f02866b8c6284624ef752fb31e4e3dc8 style structure for stationkmlFilenames, where the single set of station kml files are SHARED across a given set of runs. With this, the 1st attempt at adjusting the GUI kmz output plotting to use exact run kmz filenames, using new C-API get run kmz filenames function calls, is tested and complete. Related to issue #582 --- src/gui/mainWindow.cpp | 14 ++++---- src/ninja/ninjaArmy.cpp | 48 +++++++++++++------------ src/ninja/ninjaArmy.h | 6 ++-- src/ninja/windninja.cpp | 79 ++++++++++++----------------------------- src/ninja/windninja.h | 4 +-- 5 files changed, 59 insertions(+), 92 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 226d84116..990c229af 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -1293,8 +1293,8 @@ void MainWindow::plotKmzOutputs() // vars to be filled int numRuns = 0; char **kmzFilenames = NULL; - int *numStationKmls = NULL; - char ***stationKmlFilenames = NULL; + int numStationKmls = 0; + char **stationKmlFilenames = NULL; char **weatherModelKmzFilenames = NULL; char **papszOptions = nullptr; @@ -1318,13 +1318,13 @@ void MainWindow::plotKmzOutputs() webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); // if it is a point initialization run, and station kmls were created for the run, - // plot the station kmls of the run - if(ui->pointInitializationGroupBox->isChecked() && ui->pointInitializationWriteStationKMLCheckBox->isChecked()) + // plot the station kmls of the first run + // (first run, because station kmls are SHARED across runs) + if(ui->pointInitializationGroupBox->isChecked() && ui->pointInitializationWriteStationKMLCheckBox->isChecked() && i == 0) { -qDebug() << "i =" << i << ", numStationKmls[i] =" << numStationKmls[i]; - for(int j = 0; j < numStationKmls[i]; j++) + for(int j = 0; j < numStationKmls; j++) { - QString outFileStr = QString::fromStdString(stationKmlFilenames[i][j]); + QString outFileStr = QString::fromStdString(stationKmlFilenames[j]); qDebug() << "station kml outFile =" << outFileStr; QFile outFile(outFileStr); diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index c8755739d..43cff752b 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -669,9 +669,11 @@ bool ninjaArmy::startRuns(int numProcessors) CPLSetConfigOption( "GDAL_PAM_ENABLED", "ON" ); } - // prep a clean set of kmz output filenames to append to before ninjas[i] gets deleted after each run + // prep a clean set of kmz output filenames, to be filled before ninjas[i] gets deleted after each run + // stationKmlfilenames is an exception, it is filled by appending the ninjas[0] set of station files, + // which are shared across runs. Appends within a single run don't mess up the ordering like they do across runs. kmzFilenames.resize(ninjas.size()); - stationKmlFilenames.resize(ninjas.size()); + stationKmlFilenames.clear(); wxModelKmzFilenames.resize(ninjas.size()); if(ninjas.size() == 1) @@ -2485,7 +2487,7 @@ std::string ninjaArmy::getOutputPath( const int nIndex, char ** papszOptions ) return std::string(""); } -int ninjaArmy::getRunKmzFilenames( std::vector& kmzFilenamesStr, std::vector>& stationKmlFilenamesStr, +int ninjaArmy::getRunKmzFilenames( std::vector& kmzFilenamesStr, std::vector& stationKmlFilenamesStr, std::vector& wxModelKmzFilenamesStr, char ** papszOptions ) { kmzFilenamesStr = kmzFilenames; @@ -2523,36 +2525,36 @@ void ninjaArmy::cancelAndReset() void ninjaArmy::setCurrentRunKmzFilenames(int runNumber) { kmzFilenames[runNumber] = ninjas[runNumber]->input.kmzFile; -std::cout << "ninjas[" << runNumber << "]->input.stations.size() = " << ninjas[runNumber]->input.stations.size() << std::endl; - std::vector currentStationKmlFilenames; - if(ninjas[runNumber]->input.stations.size() == 0) - { - currentStationKmlFilenames.push_back( "" ); - } else + + // assume all the other stations across all the other stations storage, are the exact same list as that of the first station + // SHOULD be true, seems like the idea of the storage was to make sure each station had access to the same copy of data, so a form of SHARED storage + // still, it's one of the quirkiest code setups that I've seen in a while + if(runNumber == 0) { -std::cout << "ninjas[" << runNumber << "]->input.stations[" << runNumber << "].stationKmlNames.size() = " << ninjas[runNumber]->input.stations[runNumber].stationKmlNames.size() << std::endl; - if(ninjas[runNumber]->input.stations[runNumber].stationKmlNames.size() == 0) +std::cout << "ninjas[" << runNumber << "]->input.stations.size() = " << ninjas[runNumber]->input.stations.size() << std::endl; + if(ninjas[runNumber]->input.stations.size() == 0) { - currentStationKmlFilenames.push_back( "" ); + stationKmlFilenames.push_back( "" ); } else { - // assume all the other stations across all the other stations storage, are the exact same list as that of the first station - // SHOULD be true, seems like the idea of the storage was to make sure each station had access to the same copy of data - // it's still one of the quirkiest code setups that I've seen in a while - for(int j = 0; j < ninjas[runNumber]->input.stations[runNumber].stationKmlNames.size(); j++) +std::cout << "ninjas[" << runNumber << "]->input.stations[" << runNumber << "].stationKmlNames.size() = " << ninjas[runNumber]->input.stations[runNumber].stationKmlNames.size() << std::endl; + if(ninjas[runNumber]->input.stations[runNumber].stationKmlNames.size() == 0) { -std::cout << "ninjas[" << runNumber << "]->input.stations[" << runNumber << "].stationKmlNames[" << j << "] = " << ninjas[runNumber]->input.stations[runNumber].stationKmlNames[j] << std::endl; - if(ninjas[runNumber]->input.stations[j].stationKmlNames.size()) + stationKmlFilenames.push_back( "" ); + } else + { + for(int j = 0; j < ninjas[runNumber]->input.stations[runNumber].stationKmlNames.size(); j++) { - currentStationKmlFilenames.push_back( ninjas[runNumber]->input.stations[runNumber].stationKmlNames[j] ); +std::cout << "ninjas[" << runNumber << "]->input.stations[" << runNumber << "].stationKmlNames[" << j << "] = " << ninjas[runNumber]->input.stations[runNumber].stationKmlNames[j] << std::endl; + stationKmlFilenames.push_back( ninjas[runNumber]->input.stations[runNumber].stationKmlNames[j] ); } } } +std::cout << "stationKmlFilenames.size() = " << stationKmlFilenames.size() << std::endl; +std::cout << "stationKmlFilenames[0] = \"" << stationKmlFilenames[0] << "\"" << std::endl; +std::cout << "stationKmlFilenames[" << stationKmlFilenames.size()-1 << "] = \"" << stationKmlFilenames[stationKmlFilenames.size()-1] << "\"" << std::endl; } - stationKmlFilenames[runNumber] = currentStationKmlFilenames; -std::cout << "stationKmlFilenames[" << runNumber << "].size() = " << stationKmlFilenames[runNumber].size() << std::endl; -std::cout << "stationKmlFilenames[" << runNumber << "][0] = \"" << stationKmlFilenames[runNumber][0] << "\"" << std::endl; -std::cout << "stationKmlFilenames[" << runNumber << "][" << stationKmlFilenames[runNumber].size()-1 << "] = \"" << stationKmlFilenames[runNumber][stationKmlFilenames[runNumber].size()-1] << "\"" << std::endl; + // oh, this one is set to "!set" for non-wxModel runs, the storage of this filename always exists for each ninjas[i] if(ninjas[runNumber]->input.wxModelKmzFile == "!set") { diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 7ea22ba0b..70273834e 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -1346,11 +1346,11 @@ class ninjaArmy * and the weather model filenames of each ninja if they were created for the run. * * \param kmzFilenames The output kmz filenames of each ninja, to be filled. - * \param stationKmlFilenames The station kml filenames of each ninja, to be filled. Runs without station kml file output use "" for the station kml filenames. + * \param stationKmlFilenames The station kml filenames SHARED across each ninja, to be filled. Runs without station kml file output use "" for the station kml filenames. * \param weatherModelKmzFilenames The weather model kmz filenames of each ninja, to be filled. Runs without weather model kmz file output use "" for the weather model kmz filenames. * \return errval Returns NINJA_SUCCESS upon success. */ - int getRunKmzFilenames( std::vector& kmzFilenamesStr, std::vector>& stationKmlFilenamesStr, + int getRunKmzFilenames( std::vector& kmzFilenamesStr, std::vector& stationKmlFilenamesStr, std::vector& wxModelKmzFilenamesStr, char ** papszOptions=NULL ); /*----------------------------------------------------------------------------- @@ -1361,7 +1361,7 @@ class ninjaArmy void cancelAndReset(); std::vector kmzFilenames; - std::vector> stationKmlFilenames; + std::vector stationKmlFilenames; std::vector wxModelKmzFilenames; GDALDatasetH hSpdMemDS; //in-memory dataset for GTiff output writer diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 9aebd4deb..5a1e2985b 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -2627,17 +2627,17 @@ WINDNINJADLL_EXPORT NinjaErr NinjaWriteBlankWxStationFile( const char * outputSt * \param army An opaque handle to a valid ninjaArmy. * \param numRuns The number of runs that were simulated, to be filled. Also the expected size of the filled filename arrays. * \param kmzFilenames The ninjas[i] output kmz filenames array, as a NULL char**, to be created and filled, to be created of size numRuns. - * \param numStationKmls An array of the number of station kmls for each run, as a NULL int*, to be created and filled, to be created of size numRuns. - * \param stationKmlFilenames The ninjas[i] station kml filenames array, as a NULL char***, to be created and filled, to be created of size numRuns by numStationKmls[runIdx]. Runs without station kml file output use "" for the station kml filenames. + * \param numStationKmls The number of station kmls SHARED across each run, to be filled. Also the expected size of the filled stationKmlFilenames array. + * \param stationKmlFilenames The ninjas[i] station kml filenames array, as a NULL char**, to be created and filled, to be created of size numStationKmls. Runs without station kml file output use "" for the station kml filenames. Each run SHARES this same list of stationkmlFilenames. * \param weatherModelKmzFilenames The ninjas[i] weather model kmz filenames array, as a NULL char**, to be created and filled, to be created of size numRuns. Runs without weather model kmz file output use "" for the weather model kmz filenames. * \param papszOptions options * * \return NINJA_SUCCESS on success, non-zero otherwise. */ -WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *numRuns, char*** kmzFilenames, int** numStationKmls, char**** stationKmlFilenames, char*** weatherModelKmzFilenames, char ** papszOptions) +WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *numRuns, char*** kmzFilenames, int *numStationKmls, char*** stationKmlFilenames, char*** weatherModelKmzFilenames, char ** papszOptions) { std::vector kmzFilenameStrings; - std::vector> stationKmlFilenameStrings; + std::vector stationKmlFilenameStrings; std::vector wxModelKmzFilenameStrings; if( NULL != army ) @@ -2675,47 +2675,24 @@ WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *num } int m = (int)stationKmlFilenameStrings.size(); - if(m != n) - { - return NINJA_E_INVALID; - } + *numStationKmls = m; std::cout << "m = " << m << std::endl; - *numStationKmls = (int *)malloc(sizeof(int) * n); - for(int i = 0; i < n; i++) - { - (*numStationKmls)[i] = (int)stationKmlFilenameStrings[i].size(); - } + *stationKmlFilenames = (char **)malloc(sizeof(char *) * m); - *stationKmlFilenames = (char ***)malloc(sizeof(char **) * n); - for(int i = 0; i < n; i++) + for(int j = 0; j < m; j++) { - std::vector stationKmlFilenameStrVec = stationKmlFilenameStrings[i]; + std::string stationKmlFilenameStr = stationKmlFilenameStrings[j]; - //int nStations = (int)stationKmlFilenameStrVec.size(); - int nStations = (*numStationKmls)[i]; -std::cout << "nStations = " << nStations << std::endl; - (*stationKmlFilenames)[i] = (char **)malloc(sizeof(char *) * nStations); + char *stationKmlFilename = (char *)malloc(stationKmlFilenameStr.size() + 1); - if(!(*stationKmlFilenames)[i]) + if(!stationKmlFilename) { return NINJA_E_BAD_ALLOC; } - for(int j = 0; j < nStations; j++) - { - std::string stationKmlFilenameStr = stationKmlFilenameStrVec[j]; - - char *stationKmlFilename = (char *)malloc(stationKmlFilenameStr.size() + 1); - - if(!stationKmlFilename) - { - return NINJA_E_BAD_ALLOC; - } + memcpy(stationKmlFilename, stationKmlFilenameStr.c_str(), stationKmlFilenameStr.size() + 1); - memcpy(stationKmlFilename, stationKmlFilenameStr.c_str(), stationKmlFilenameStr.size() + 1); - - (*stationKmlFilenames)[i][j] = stationKmlFilename; - } + (*stationKmlFilenames)[j] = stationKmlFilename; } return NINJA_SUCCESS; @@ -2726,7 +2703,7 @@ std::cout << "nStations = " << nStations << std::endl; } } -WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmzFilenames, int* numStationKmls, char*** stationKmlFilenames, char** weatherModelKmzFilenames, char ** papszOptions) +WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmzFilenames, int numStationKmls, char** stationKmlFilenames, char** weatherModelKmzFilenames, char ** papszOptions) { for(int i = 0; i < numRuns; i++) { @@ -2738,30 +2715,22 @@ WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmz } } - if(stationKmlFilenames && numStationKmls) + if(weatherModelKmzFilenames) { - if(numStationKmls[i]) + if(weatherModelKmzFilenames[i]) { - for(int j = 0; j < numStationKmls[i]; j++) - { - if(stationKmlFilenames[i][j]) - { - free(stationKmlFilenames[i][j]); - } - } - - if(stationKmlFilenames[i]) - { - free(stationKmlFilenames[i]); - } + free(weatherModelKmzFilenames[i]); } } + } - if(weatherModelKmzFilenames) + for(int j = 0; j < numStationKmls; j++) + { + if(stationKmlFilenames) { - if(weatherModelKmzFilenames[i]) + if(stationKmlFilenames[j]) { - free(weatherModelKmzFilenames[i]); + free(stationKmlFilenames[j]); } } } @@ -2774,10 +2743,6 @@ WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmz { free(stationKmlFilenames); } - if(numStationKmls) - { - free(numStationKmls); - } if(weatherModelKmzFilenames) { free(weatherModelKmzFilenames); diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 49bf70a80..acb3777ab 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -390,7 +390,7 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaCheckTimeDuration (int* yearList, int* monthList, int * dayList, int * minuteList, int *hourList, int listSize, char ** papszOptions); WINDNINJADLL_EXPORT NinjaErr NinjaWriteBlankWxStationFile( const char * outputStationFilename, char ** papszOptions ); - WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *numRuns, char*** kmzFilenames, int** numStationKmls, char**** stationKmlFilenames, char*** weatherModelKmzFilenames, char ** papszOptions); - WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmzFilenames, int* numStationKmls, char*** stationKmlFilenames, char** weatherModelKmzFilenames, char ** papszOptions); + WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *numRuns, char*** kmzFilenames, int *numStationKmls, char*** stationKmlFilenames, char*** weatherModelKmzFilenames, char ** papszOptions); + WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmzFilenames, int numStationKmls, char** stationKmlFilenames, char** weatherModelKmzFilenames, char ** papszOptions); WN_C_END From da8a167ee60e06f03628fc8bd9594b2f91e1ab4d Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 13 Jan 2026 13:20:08 -0700 Subject: [PATCH 349/435] added set of runs level storage to the GUI kmz output plotting. Also cleaned up std::cout statements from the GUI kmz output plotting sections. --- src/gui/mainWindow.cpp | 22 ++++++++++++++++++++++ src/gui/mainWindow.h | 4 ++++ src/ninja/ninjaArmy.cpp | 6 ------ src/ninja/windninja.cpp | 2 +- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 990c229af..26496b373 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -1304,6 +1304,28 @@ void MainWindow::plotKmzOutputs() printf("NinjaGetRunKmzFilenames: ninjaErr = %d\n", ninjaErr); } + std::vector kmzFilenamesStr; + std::vector stationKmlFilenamesStr; + std::vector wxModelKmzFilenamesStr; + + kmzFilenamesStr.reserve(numRuns); + wxModelKmzFilenamesStr.reserve(numRuns); + for(int i = 0; i < numRuns; i++) + { + kmzFilenamesStr.emplace_back(kmzFilenames[i]); + wxModelKmzFilenamesStr.emplace_back(weatherModelKmzFilenames[i]); + } + + stationKmlFilenamesStr.reserve(numStationKmls); + for(int j = 0; j < numStationKmls; j++) + { + stationKmlFilenamesStr.emplace_back(stationKmlFilenames[j]); + } + + outputKmzFilenames.push_back(std::move( kmzFilenamesStr )); + outputStationKmlFilenames.push_back(std::move( stationKmlFilenamesStr )); + outputWxModelKmzFilenames.push_back(std::move( wxModelKmzFilenamesStr )); + for(int i = 0; i < numRuns; i++) { // plot the output kmz of the run diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index a495752e3..a8672074a 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -147,6 +147,10 @@ private slots: void finishedSolve(); void plotKmzOutputs(); + std::vector> outputKmzFilenames; + std::vector> outputStationKmlFilenames; + std::vector> outputWxModelKmzFilenames; + QString currentDEMFilePath; void connectSignals(); diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 43cff752b..0a2bd0306 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -2531,13 +2531,11 @@ void ninjaArmy::setCurrentRunKmzFilenames(int runNumber) // still, it's one of the quirkiest code setups that I've seen in a while if(runNumber == 0) { -std::cout << "ninjas[" << runNumber << "]->input.stations.size() = " << ninjas[runNumber]->input.stations.size() << std::endl; if(ninjas[runNumber]->input.stations.size() == 0) { stationKmlFilenames.push_back( "" ); } else { -std::cout << "ninjas[" << runNumber << "]->input.stations[" << runNumber << "].stationKmlNames.size() = " << ninjas[runNumber]->input.stations[runNumber].stationKmlNames.size() << std::endl; if(ninjas[runNumber]->input.stations[runNumber].stationKmlNames.size() == 0) { stationKmlFilenames.push_back( "" ); @@ -2545,14 +2543,10 @@ std::cout << "ninjas[" << runNumber << "]->input.stations[" << runNumber << "].s { for(int j = 0; j < ninjas[runNumber]->input.stations[runNumber].stationKmlNames.size(); j++) { -std::cout << "ninjas[" << runNumber << "]->input.stations[" << runNumber << "].stationKmlNames[" << j << "] = " << ninjas[runNumber]->input.stations[runNumber].stationKmlNames[j] << std::endl; stationKmlFilenames.push_back( ninjas[runNumber]->input.stations[runNumber].stationKmlNames[j] ); } } } -std::cout << "stationKmlFilenames.size() = " << stationKmlFilenames.size() << std::endl; -std::cout << "stationKmlFilenames[0] = \"" << stationKmlFilenames[0] << "\"" << std::endl; -std::cout << "stationKmlFilenames[" << stationKmlFilenames.size()-1 << "] = \"" << stationKmlFilenames[stationKmlFilenames.size()-1] << "\"" << std::endl; } // oh, this one is set to "!set" for non-wxModel runs, the storage of this filename always exists for each ninjas[i] diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 5a1e2985b..1dd7d88a8 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -2676,7 +2676,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *num int m = (int)stationKmlFilenameStrings.size(); *numStationKmls = m; -std::cout << "m = " << m << std::endl; + *stationKmlFilenames = (char **)malloc(sizeof(char *) * m); for(int j = 0; j < m; j++) From c23f15b875cd57fdfad3697c332cf55ef0dd00ec Mon Sep 17 00:00:00 2001 From: masonwillman <117214223+masonwillman@users.noreply.github.com> Date: Tue, 13 Jan 2026 14:21:22 -0700 Subject: [PATCH 350/435] Refined CMakeLists file and removed unneccessary CMake options, for #660 --- CMakeLists.txt | 289 ++++++++++++++++++++++--------------------------- 1 file changed, 131 insertions(+), 158 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8320155a9..cc13e52e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,7 @@ endif(WIN32) project(WindNinja) -# let cmake figure out how to set the C++ level +# Set C++ version for CMake set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED on) @@ -182,11 +182,11 @@ if(WITH_LCP_CLIENT) add_definitions(-DWITH_LCP_CLIENT) endif(WITH_LCP_CLIENT) -#disable for exception handling in the GUI and CLI -option(C_API "Enable WindNinja C API" OFF) -if(C_API) - add_definitions(-DC_API) -endif(C_API) +# Disable for exception handling in the GUI and CLI +# option(C_API "Enable WindNinja C API" OFF) +# if(C_API) +# add_definitions(-DC_API) +# endif(C_API) # Enable phone home and message server startup option(PHONE_HOME_QUERIES "Enable Phone Home Queries" ON) @@ -311,18 +311,6 @@ if(NINJA_GDAL_OUTPUT) add_definitions(-DNINJA_GDAL_OUTPUT) endif() -if(MSVC) - # Run windeployqt6.exe to provide all QT related DLLs - set(WINDEPLOYQT_EXE "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-windows/tools/Qt6/bin/windeployqt6.exe") - add_custom_target(deploy_windninja ALL - COMMAND "${WINDEPLOYQT_EXE}" - "$" - DEPENDS WindNinja - ) -endif(MSVC) - -option(FIRE_BEHAVIOR_DATA_INSTALL "Only install files necessary for FireBehaviorModels" OFF) - # Recurse into subdirectories add_subdirectory(src) @@ -336,6 +324,16 @@ if(BUILD_TESTING) add_subdirectory(autotest) endif(BUILD_TESTING) +# Run windeployqt6.exe to provide all QT related DLLs +if(MSVC) + set(WINDEPLOYQT_EXE "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-windows/tools/Qt6/bin/windeployqt6.ex") + add_custom_target(deploy_windninja ALL + COMMAND "${WINDEPLOYQT_EXE}" + "$" + DEPENDS WindNinja + ) +endif(MSVC) + # Package related options and settings. option(PACKAGE_DEBUG "Show some information about the package" OFF) mark_as_advanced(PACKAGE_DEBUG) @@ -346,18 +344,6 @@ if(CMAKE_SIZEOF_VOID_P MATCHES "8") if(PACKAGE_DEBUG) message(STATUS "Building 64-bit installer") endif(PACKAGE_DEBUG) -elseif(CMAKE_SIZEOF_VOID_P MATCHES "4") - set(BUILD_64 FALSE) - add_definitions(-DNINJA_32BIT=1) - if(PACKAGE_DEBUG) - message(STATUS "Building 32-bit installer") - endif(PACKAGE_DEBUG) -else(CMAKE_SIZEOF_VOID_P MATCHES "8") - set(BUILD_64 FALSE) - add_definitions(-DNINJA_32BIT=1) - if(PACKAGE_DEBUG) - message(STATUS "Cannot determine architecture, using 32-bit by default") - endif(PACKAGE_DEBUG) endif(CMAKE_SIZEOF_VOID_P MATCHES "8") if(NOT CMAKE_BUILD_TYPE AND NOT MSVC_IDE) @@ -374,91 +360,92 @@ if(VERBOSE_CMAKE) include(CMakePrintSystemInformation) endif(VERBOSE_CMAKE) -if(FIRE_BEHAVIOR_DATA_INSTALL) - #FireBehaviorModels only requires date_time_zonespec.csv and tz_world.zip - message("Only installing data files necessary for FireBehaviorModels") - set(fire_behavior_model_files date_time_zonespec.csv tz_world.zip) - foreach(f ${fire_behavior_model_files}) - install(FILES ${PROJECT_SOURCE_DIR}/data/${f} DESTINATION - share/windninja COMPONENT apps) - endforeach(f ${fire_behavior_model_files}) - -else(FIRE_BEHAVIOR_DATA_INSTALL) -# install target related files -set(etc_files missoula_valley.tif - example_lcp.tif - cli_domainAverage.cfg - cli_domainAverage_diurnal.cfg - cli_pointInitialization_diurnal.cfg - cli_wxModelInitialization_diurnal.cfg - cli_momentumSolver_diurnal.cfg) -foreach(f ${etc_files}) - install(FILES ${PROJECT_SOURCE_DIR}/data/${f} DESTINATION - etc/windninja/example-files COMPONENT apps) -endforeach(f ${etc_files}) - -#add weather station files to example files -set(wx_station_current_files WXSTATIONS-2018-06-25-1237-missoula_valley/missoula_valley_stations_4.csv - WXSTATIONS-2018-06-25-1237-missoula_valley/KMSO-2018-06-25_1237-0.csv - WXSTATIONS-2018-06-25-1237-missoula_valley/PNTM8-2018-06-25_1237-2.csv - WXSTATIONS-2018-06-25-1237-missoula_valley/TR266-2018-06-25_1237-3.csv - WXSTATIONS-2018-06-25-1237-missoula_valley/TS934-2018-06-25_1237-1.csv) -foreach(f ${wx_station_current_files}) - install(FILES ${PROJECT_SOURCE_DIR}/data/${f} DESTINATION - etc/windninja/example-files/WXSTATIONS-2018-06-25-1237-missoula_valley COMPONENT apps) -endforeach(f ${wx_station_current_files}) - -#add weather station time series files -set(wx_station_ts_files WXSTATIONS-MDT-2018-06-20-2128-2018-06-21-2128-missoula_valley/missoula_valley_stations_4.csv - WXSTATIONS-MDT-2018-06-20-2128-2018-06-21-2128-missoula_valley/KMSO-MDT-2018-06-20_2128-2018-06-21_2128-0.csv - WXSTATIONS-MDT-2018-06-20-2128-2018-06-21-2128-missoula_valley/PNTM8-MDT-2018-06-20_2128-2018-06-21_2128-2.csv - WXSTATIONS-MDT-2018-06-20-2128-2018-06-21-2128-missoula_valley/TR266-MDT-2018-06-20_2128-2018-06-21_2128-3.csv - WXSTATIONS-MDT-2018-06-20-2128-2018-06-21-2128-missoula_valley/TS934-MDT-2018-06-20_2128-2018-06-21_2128-1.csv) -foreach(f ${wx_station_ts_files}) - install(FILES ${PROJECT_SOURCE_DIR}/data/${f} DESTINATION - etc/windninja/example-files/WXSTATIONS-MDT-2018-06-20-2128-2018-06-21-2128-missoula_valley COMPONENT apps) -endforeach(f ${wx_station_ts_files}) - -set(share_files date_time_zonespec.csv - config_options.csv - tz_world.zip - landfire.zip - map.html - qt_certs_bundle.pem - thredds.csv - surface_data.zip - srtm_region.geojson - us_srtm_region.dbf - us_srtm_region.prj - us_srtm_region.shp - us_srtm_region.shx) -foreach(f ${share_files}) - install(FILES ${PROJECT_SOURCE_DIR}/data/${f} DESTINATION - share/windninja COMPONENT apps) -endforeach(f ${share_files}) - -# Leaflet data +# Install DEM and configuration files +set(etc_files + missoula_valley.tif + example_lcp.tif + cli_domainAverage.cfg + cli_domainAverage_diurnal.cfg + cli_pointInitialization_diurnal.cfg + cli_wxModelInitialization_diurnal.cfg + cli_momentumSolver_diurnal.cfg) +list(TRANSFORM etc_files PREPEND ${PROJECT_SOURCE_DIR}/data/) +install(FILES ${etc_files} + DESTINATION etc/windninja/example-files + COMPONENT apps) + +# Install wxstation current files (add weather station files to example files) +set(wx_station_current_files + missoula_valley_stations_4.csv + KMSO-2018-06-25_1237-0.csv + PNTM8-2018-06-25_1237-2.csv + TR266-2018-06-25_1237-3.csv + TS934-2018-06-25_1237-1.csv) +list(TRANSFORM wx_station_current_files + PREPEND ${PROJECT_SOURCE_DIR}/data/WXSTATIONS-2018-06-25-1237-missoula_valley/) +install(FILES ${wx_station_current_files} + DESTINATION etc/windninja/example-files/WXSTATIONS-2018-06-25-1237-missoula_valley + COMPONENT apps) + +# Install wxstation files (add weather station time series files) +set(wx_station_ts_files + missoula_valley_stations_4.csv + KMSO-MDT-2018-06-20_2128-2018-06-21_2128-0.csv + PNTM8-MDT-2018-06-20_2128-2018-06-21_2128-2.csv + TR266-MDT-2018-06-20_2128-2018-06-21_2128-3.csv + TS934-MDT-2018-06-20_2128-2018-06-21_2128-1.csv) +list(TRANSFORM wx_station_ts_files + PREPEND ${PROJECT_SOURCE_DIR}/data/WXSTATIONS-MDT-2018-06-20-2128-2018-06-21-2128-missoula_valley/) +install(FILES ${wx_station_ts_files} + DESTINATION etc/windninja/example-files/WXSTATIONS-MDT-2018-06-20-2128-2018-06-21-2128-missoula_valley + COMPONENT apps) + +# Install all share files +set(share_files + date_time_zonespec.csv + config_options.csv + tz_world.zip + landfire.zip + map.html + qt_certs_bundle.pem + thredds.csv + surface_data.zip + srtm_region.geojson + us_srtm_region.dbf + us_srtm_region.prj + us_srtm_region.shp + us_srtm_region.shx) +list(TRANSFORM share_files PREPEND ${PROJECT_SOURCE_DIR}/data/) +install(FILES ${share_files} + DESTINATION share/windninja + COMPONENT apps) + +# Install Leaflet data if(WIN32 AND FIRELAB_PACKAGE) install(DIRECTORY ${PROJECT_SOURCE_DIR}/data/leaflet DESTINATION share/windninja) endif(WIN32 AND FIRELAB_PACKAGE) -set(doc_files CLI_instructions.pdf - displaying_wind_vectors_in_ArcGIS_Pro.pdf - download_elevation_file.pdf - fetch_dem_instructions.pdf) -foreach(f ${doc_files}) - install(FILES ${PROJECT_SOURCE_DIR}/doc/${f} DESTINATION - share/windninja/doc COMPONENT apps) -endforeach(f ${doc_files}) - -set(tutorials tutorials/WindNinja_tutorial1.pdf - tutorials/WindNinja_tutorial2.pdf - tutorials/WindNinja_tutorial3.pdf - tutorials/WindNinja_tutorial4.pdf) -foreach(f ${tutorials}) - install(FILES ${PROJECT_SOURCE_DIR}/doc/${f} DESTINATION - share/windninja/doc/tutorials COMPONENT apps) -endforeach(f ${tutorials}) +# Install all documentation files +set(doc_files + CLI_instructions.pdf + displaying_wind_vectors_in_ArcGIS_Pro.pdf + download_elevation_file.pdf + fetch_dem_instructions.pdf) +list(TRANSFORM doc_files PREPEND ${PROJECT_SOURCE_DIR}/doc/) +install(FILES ${doc_files} + DESTINATION share/windninja/doc + COMPONENT apps) + +# Install all tutorial files +set(tutorial_files + tutorials/WindNinja_tutorial1.pdf + tutorials/WindNinja_tutorial2.pdf + tutorials/WindNinja_tutorial3.pdf + tutorials/WindNinja_tutorial4.pdf) +list(TRANSFORM tutorial_files PREPEND ${PROJECT_SOURCE_DIR}/doc/tutorials/) +install(FILES ${tutorials} + DESTINATION share/windninja/doc/tutorials + COMPONENT apps) # Install the ninjafoam data install(DIRECTORY ${PROJECT_SOURCE_DIR}/data/ninjafoam DESTINATION share/windninja) @@ -468,6 +455,33 @@ install(FILES ${PROJECT_SOURCE_DIR}/data/wn-splash.png DESTINATION share/windnin install(FILES ${PROJECT_SOURCE_DIR}/data/relief.xml DESTINATION share/windninja) install(FILES ${PROJECT_SOURCE_DIR}/data/topofire_logo.png DESTINATION share/windninja) +# Installs specific to Windows NSIS installer +if(WIN32) + # Install DLLS for WindNinja.exe to the bin directory + install( + DIRECTORY "${CMAKE_BINARY_DIR}/src/gui/" + DESTINATION bin + FILES_MATCHING + PATTERN "*.exe" + PATTERN "*.dll" + PATTERN "plugins/*" + PATTERN "platforms/*" + PATTERN "resources/*" + PATTERN "*.qm") + + # Installs GDAL data from VCPKG to the gdal-data/data directory + install( + DIRECTORY "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-windows/share/gdal/" + DESTINATION share/windninja/gdal-data/data + COMPONENT apps) + + # Installs PROJ data from VCPKG to the proj-data/data directory + install( + DIRECTORY "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-windows/share/proj/" + DESTINATION share/windninja/proj-data/data + COMPONENT apps) +endif(WIN32) + set(ZIPFILES "") if(BUILD_TYPE MATCHES "debug") @@ -524,67 +538,26 @@ Delete \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\Example Files.lnk\\\" RMDir \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\Tutorials\\\" RMDir \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\Documents\\\" ") -# Build the nsis installer on the firelab machine(s). Not for external use. -if(FIRELAB_PACKAGE AND WIN32 AND MSVC) - - # Install DLLS for WindNinja.exe to the bin directory - install( - DIRECTORY "${CMAKE_BINARY_DIR}/src/gui/" - DESTINATION bin - FILES_MATCHING - PATTERN "*.exe" - PATTERN "*.dll" - PATTERN "plugins/*" - PATTERN "platforms/*" - PATTERN "resources/*" - PATTERN "*.qm" - ) - - # Installs GDAL data from VCPKG to the gdal-data/data directory - install( - DIRECTORY "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-windows/share/gdal/" - DESTINATION share/windninja/gdal-data/data - COMPONENT apps - ) - - # Installs PROJ data from VCPKG to the proj-data/data directory - install( - DIRECTORY "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-windows/share/proj/" - DESTINATION share/windninja/proj-data/data - COMPONENT apps - ) - -endif(FIRELAB_PACKAGE AND WIN32 AND MSVC) - set(CPACK_COMPONENT_APPS_REQUIRED TRUE) set(CPACK_COMPONENT_LIBS_HIDDEN TRUE) set(CPACK_COMPONENT_LIBS_DISABLED TRUE) set(CPACK_COMPONENT_INCLUDES_HIDDEN TRUE) set(CPACK_COMPONENT_INCLUDES_DISABLED TRUE) -# ***************************************************************************** # CPack call -# ***************************************************************************** include(CPack) include(CTest) -# ***************************************************************************** -# CPack groupings -# ***************************************************************************** +# CPack Groupings CPACK_ADD_COMPONENT(apps DISPLAY_NAME "WindNinja" DESCRIPTION "WindNinja binaries and documentation" - GROUP Application - ) + GROUP Application) + CPACK_ADD_COMPONENT(libs DISPLAY_NAME "WindNinja Libraries" - DESCRIPTION "Development libraries" - #GROUP Development - ) + DESCRIPTION "Development libraries") + CPACK_ADD_COMPONENT(includes DISPLAY_NAME "WindNinja Headers" - DESCRIPTION "Development include files" - #GROUP Development - ) - -endif(FIRE_BEHAVIOR_DATA_INSTALL) + DESCRIPTION "Development include files") From 7a3e6cd4ecebabb0e5218097b6065e1290c1ca4c Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 13 Jan 2026 14:32:28 -0700 Subject: [PATCH 351/435] Added runType to API function NinjaInit --- src/gui/main.cpp | 3 ++- src/ninja/windninja.cpp | 4 ++-- src/ninja/windninja.h | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 6dbe1d46c..948b97bfb 100755 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -49,8 +49,9 @@ int main(int argc, char *argv[]) int result; char ** papszOptions = NULL; + const char * runType = "gui"; NinjaErr ninjaErr = 0; - ninjaErr = NinjaInit(papszOptions); //TODO: NEED TO ADD NINJA INITIALIZE FOR GUI THROUGH API + ninjaErr = NinjaInit(runType, papszOptions); if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaInit: ninjaErr =" << ninjaErr; diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 7c62903ad..9f56f3f39 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -766,11 +766,11 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetInitializationMethod } WINDNINJADLL_EXPORT NinjaErr NinjaInit - ( char ** papszOptions ) + ( const char * runType, char ** papszOptions ) { NinjaErr retval = NINJA_E_INVALID; - retval = NinjaInitialize(); + retval = NinjaInitialize(runType); return retval; } diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 64a11ae60..3045ee66a 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -134,7 +134,7 @@ typedef int NinjaErr; ( NinjaArmyH * ninjaArmy, const unsigned int nprocessors, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaInit - ( char ** options ); + ( const char * runType, char ** options ); /*----------------------------------------------------------------------------- * Various Simulation Parameters From 444e95eefa3a66a751a70eec6a7e00baacad00b3 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 13 Jan 2026 15:03:13 -0700 Subject: [PATCH 352/435] made GUI outputs resolution match the mesh resolution when "use mesh resolution" is selected --- src/gui/outputs.cpp | 60 +++++++++++++++++++++++++++++++++++++++++++++ src/gui/outputs.h | 2 ++ 2 files changed, 62 insertions(+) diff --git a/src/gui/outputs.cpp b/src/gui/outputs.cpp index d30407bef..20115f167 100644 --- a/src/gui/outputs.cpp +++ b/src/gui/outputs.cpp @@ -46,6 +46,8 @@ Outputs::Outputs(Ui::MainWindow *ui, connect(this, &Outputs::updateShapeState, &AppState::instance(), &AppState::updateShapeFilesOutputState); connect(this, &Outputs::updatePDFState, &AppState::instance(), &AppState::updateGeoSpatialPDFFilesOutputState); connect(this, &Outputs::updateVTKState, &AppState::instance(), &AppState::updateVTKFilesOutputState); + connect(ui->meshResolutionSpinBox, &QDoubleSpinBox::valueChanged, this, &Outputs::meshResolutionSpinBoxValueChanged); + connect(ui->meshResolutionUnitsComboBox, &QComboBox::currentIndexChanged, this, &Outputs::meshResolutionUnitsComboBoxCurrentIndexChanged); } void Outputs::googleEarthGroupBoxToggled(bool checked) @@ -87,22 +89,80 @@ void Outputs::googleEarthMeshResolutionGroupBoxToggled(bool checked) { ui->googleEarthMeshResolutionSpinBox->setEnabled(!checked); ui->googleEarthMeshResolutionComboBox->setEnabled(!checked); + + emit meshResolutionSpinBoxValueChanged(ui->meshResolutionSpinBox->value()); + emit meshResolutionUnitsComboBoxCurrentIndexChanged(ui->meshResolutionUnitsComboBox->currentIndex()); } void Outputs::fireBehaviorMeshResolutionGroupBoxToggled(bool checked) { ui->fireBehaviorMeshResolutionSpinBox->setEnabled(!checked); ui->fireBehaviorMeshResolutionComboBox->setEnabled(!checked); + + emit meshResolutionSpinBoxValueChanged(ui->meshResolutionSpinBox->value()); + emit meshResolutionUnitsComboBoxCurrentIndexChanged(ui->meshResolutionUnitsComboBox->currentIndex()); } void Outputs::shapeFilesMeshResolutionGroupBoxToggled(bool checked) { ui->shapeFilesMeshResolutionSpinBox->setEnabled(!checked); ui->shapeFilesMeshResolutionComboBox->setEnabled(!checked); + + emit meshResolutionSpinBoxValueChanged(ui->meshResolutionSpinBox->value()); + emit meshResolutionUnitsComboBoxCurrentIndexChanged(ui->meshResolutionUnitsComboBox->currentIndex()); } void Outputs::geospatialPDFFilesMeshResolutionGroupBoxToggled(bool checked) { ui->geospatialPDFFilesMeshResolutionSpinBox->setEnabled(!checked); ui->geospatialPDFFilesMeshResolutionComboBox->setEnabled(!checked); + + emit meshResolutionSpinBoxValueChanged(ui->meshResolutionSpinBox->value()); + emit meshResolutionUnitsComboBoxCurrentIndexChanged(ui->meshResolutionUnitsComboBox->currentIndex()); +} + +void Outputs::meshResolutionSpinBoxValueChanged(double value) +{ + if(ui->googleEarthMeshResolutionGroupBox->isChecked()) + { + ui->googleEarthMeshResolutionSpinBox->setValue(value); + } + + if(ui->fireBehaviorMeshResolutionGroupBox->isChecked()) + { + ui->fireBehaviorMeshResolutionSpinBox->setValue(value); + } + + if(ui->shapeFilesMeshResolutionGroupBox->isChecked()) + { + ui->shapeFilesMeshResolutionSpinBox->setValue(value); + } + + if(ui->geospatialPDFFilesMeshResolutionGroupBox->isChecked()) + { + ui->geospatialPDFFilesMeshResolutionSpinBox->setValue(value); + } +} + +void Outputs::meshResolutionUnitsComboBoxCurrentIndexChanged(int index) +{ + if(ui->googleEarthMeshResolutionGroupBox->isChecked()) + { + ui->googleEarthMeshResolutionComboBox->setCurrentIndex(index); + } + + if(ui->fireBehaviorMeshResolutionGroupBox->isChecked()) + { + ui->fireBehaviorMeshResolutionComboBox->setCurrentIndex(index); + } + + if(ui->shapeFilesMeshResolutionGroupBox->isChecked()) + { + ui->shapeFilesMeshResolutionComboBox->setCurrentIndex(index); + } + + if(ui->geospatialPDFFilesMeshResolutionGroupBox->isChecked()) + { + ui->geospatialPDFFilesMeshResolutionComboBox->setCurrentIndex(index); + } } diff --git a/src/gui/outputs.h b/src/gui/outputs.h index 73d909613..83d1edad9 100644 --- a/src/gui/outputs.h +++ b/src/gui/outputs.h @@ -30,6 +30,8 @@ private slots: void fireBehaviorMeshResolutionGroupBoxToggled(bool checked); void shapeFilesMeshResolutionGroupBoxToggled(bool checked); void geospatialPDFFilesMeshResolutionGroupBoxToggled(bool checked); + void meshResolutionSpinBoxValueChanged(double value); + void meshResolutionUnitsComboBoxCurrentIndexChanged(int index); private: Ui::MainWindow *ui; From 8dee9324874d5e65173bc1fb6540fc88db228397 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 13 Jan 2026 16:14:53 -0700 Subject: [PATCH 353/435] enabled "custom" mesh resolution simulations in the GUI. Also caught an error causing "medium" res simulations to output with "ft" instead of "m" in the output filenames --- src/gui/mainWindow.cpp | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 26496b373..fd2cec29b 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -955,13 +955,24 @@ bool MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i } } - ninjaErr = NinjaSetMeshResolutionChoice(ninjaArmy, i, ui->meshResolutionComboBox->currentText().toLower().toUtf8().constData(), papszOptions); - //ninjaErr = NinjaSetMeshResolutionChoice(ninjaArmy, i+10, ui->meshResolutionComboBox->currentText().toLower().toUtf8().constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. - //ninjaErr = NinjaSetMeshResolutionChoice(ninjaArmy, i, "fudge", papszOptions); // test error handling - if(ninjaErr != NINJA_SUCCESS) + if(ui->meshResolutionComboBox->currentIndex() == 3) // custom res { - qDebug() << "NinjaSetMeshResolutionChoice: ninjaErr =" << ninjaErr; - return false; + ninjaErr = NinjaSetMeshResolution(ninjaArmy, i, ui->meshResolutionSpinBox->value(), ui->meshResolutionUnitsComboBox->itemData(ui->meshResolutionUnitsComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); + if(ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaSetMeshResolution: ninjaErr =" << ninjaErr; + return false; + } + } else + { + ninjaErr = NinjaSetMeshResolutionChoice(ninjaArmy, i, ui->meshResolutionComboBox->currentText().toLower().toUtf8().constData(), papszOptions); + //ninjaErr = NinjaSetMeshResolutionChoice(ninjaArmy, i+10, ui->meshResolutionComboBox->currentText().toLower().toUtf8().constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaSetMeshResolutionChoice(ninjaArmy, i, "fudge", papszOptions); // test error handling + if(ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaSetMeshResolutionChoice: ninjaErr =" << ninjaErr; + return false; + } } ninjaErr = NinjaSetNumVertLayers(ninjaArmy, i, 20, papszOptions); @@ -1209,7 +1220,7 @@ OutputMeshResolution MainWindow::getMeshResolution( else { result.resolution = ui->meshResolutionSpinBox->value(); - result.units = ui->meshResolutionUnitsComboBox->itemData(ui->meshResolutionComboBox->currentIndex()).toString().toUtf8(); + result.units = ui->meshResolutionUnitsComboBox->itemData(ui->meshResolutionUnitsComboBox->currentIndex()).toString().toUtf8(); } return result; @@ -1410,7 +1421,7 @@ void MainWindow::writeSettings() //settings.setValue("pointFile", tree->point->stationFileName ); - //if(ui->meshResolutionComboBox->currentIndex() == 3) + //if(ui->meshResolutionComboBox->currentIndex() == 3) // custom res //{ // settings.setValue("customRes", ui->meshResolutionSpinBox->value()); //} From 8974f35e0bd98882a2c938ac7528df75f5438f01 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 13 Jan 2026 16:54:36 -0700 Subject: [PATCH 354/435] now that the GUI output resolutions update correctly when "use mesh resolution" is selected, it makes more sense to just use the form values directly for the GUI output resolutions --- src/gui/mainWindow.cpp | 71 ++++++++---------------------------------- src/gui/mainWindow.h | 12 ------- 2 files changed, 13 insertions(+), 70 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index fd2cec29b..568ea09b6 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -813,26 +813,6 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) bool MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* initializationMethod) { - OutputMeshResolution googleEarth = getMeshResolution( - ui->googleEarthMeshResolutionGroupBox->isChecked(), - ui->googleEarthMeshResolutionSpinBox, - ui->googleEarthMeshResolutionComboBox); - - OutputMeshResolution fireBehavior = getMeshResolution( - ui->fireBehaviorMeshResolutionGroupBox->isChecked(), - ui->fireBehaviorMeshResolutionSpinBox, - ui->fireBehaviorMeshResolutionComboBox); - - OutputMeshResolution shapeFiles = getMeshResolution( - ui->shapeFilesMeshResolutionGroupBox->isChecked(), - ui->shapeFilesMeshResolutionSpinBox, - ui->shapeFilesMeshResolutionComboBox); - - OutputMeshResolution geospatialPDFs = getMeshResolution( - ui->geospatialPDFFilesMeshResolutionGroupBox->isChecked(), - ui->geospatialPDFFilesMeshResolutionSpinBox, - ui->geospatialPDFFilesMeshResolutionComboBox); - OutputPDFSize PDFSize; switch(ui->sizeDimensionsComboBox->currentIndex()) { @@ -984,7 +964,7 @@ bool MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i return false; } - bool retVal = setOutputFlags(ninjaArmy, i, numNinjas, googleEarth, fireBehavior, shapeFiles, geospatialPDFs, PDFSize); + bool retVal = setOutputFlags(ninjaArmy, i, numNinjas, PDFSize); if( retVal == false ) { return false; @@ -997,10 +977,6 @@ bool MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i bool MainWindow::setOutputFlags(NinjaArmyH* ninjaArmy, int i, int numNinjas, - OutputMeshResolution googleEarth, - OutputMeshResolution fireBehavior, - OutputMeshResolution shapeFiles, - OutputMeshResolution geospatialPDFs, OutputPDFSize PDFSize) { char **papszOptions = nullptr; @@ -1041,9 +1017,9 @@ bool MainWindow::setOutputFlags(NinjaArmyH* ninjaArmy, return false; } - ninjaErr = NinjaSetGoogResolution(ninjaArmy, i, googleEarth.resolution, googleEarth.units.constData(), papszOptions); - //ninjaErr = NinjaSetGoogResolution(ninjaArmy, i+10, googleEarth.resolution, googleEarth.units.constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. - //ninjaErr = NinjaSetGoogResolution(ninjaArmy, i, googleEarth.resolution, "fudge", papszOptions); // test error handling + ninjaErr = NinjaSetGoogResolution(ninjaArmy, i, ui->googleEarthMeshResolutionSpinBox->value(), ui->googleEarthMeshResolutionComboBox->itemData(ui->googleEarthMeshResolutionComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); + //ninjaErr = NinjaSetGoogResolution(ninjaArmy, i+10, ui->googleEarthMeshResolutionSpinBox->value(), ui->googleEarthMeshResolutionComboBox->itemData(ui->googleEarthMeshResolutionComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaSetGoogResolution(ninjaArmy, i, ui->googleEarthMeshResolutionSpinBox->value(), "fudge", papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetGoogResolution: ninjaErr =" << ninjaErr; @@ -1094,9 +1070,9 @@ bool MainWindow::setOutputFlags(NinjaArmyH* ninjaArmy, return false; } - ninjaErr = NinjaSetAsciiResolution(ninjaArmy, i, fireBehavior.resolution, fireBehavior.units.constData(), papszOptions); - //ninjaErr = NinjaSetAsciiResolution(ninjaArmy, i+10, fireBehavior.resolution, fireBehavior.units.constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. - //ninjaErr = NinjaSetAsciiResolution(ninjaArmy, i, fireBehavior.resolution, "fudge", papszOptions); // test error handling + ninjaErr = NinjaSetAsciiResolution(ninjaArmy, i, ui->fireBehaviorMeshResolutionSpinBox->value(), ui->fireBehaviorMeshResolutionComboBox->itemData(ui->fireBehaviorMeshResolutionComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); + //ninjaErr = NinjaSetAsciiResolution(ninjaArmy, i+10, ui->fireBehaviorMeshResolutionSpinBox->value(), ui->fireBehaviorMeshResolutionComboBox->itemData(ui->fireBehaviorMeshResolutionComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaSetAsciiResolution(ninjaArmy, i, ui->fireBehaviorMeshResolutionSpinBox->value(), "fudge", papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetAsciiResolution: ninjaErr =" << ninjaErr; @@ -1111,9 +1087,9 @@ bool MainWindow::setOutputFlags(NinjaArmyH* ninjaArmy, return false; } - ninjaErr = NinjaSetShpResolution(ninjaArmy, i, shapeFiles.resolution, shapeFiles.units.constData(), papszOptions); - //ninjaErr = NinjaSetShpResolution(ninjaArmy, i+10, shapeFiles.resolution, shapeFiles.units.constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. - //ninjaErr = NinjaSetShpResolution(ninjaArmy, i, shapeFiles.resolution, "fudge", papszOptions); // test error handling + ninjaErr = NinjaSetShpResolution(ninjaArmy, i, ui->shapeFilesMeshResolutionSpinBox->value(), ui->shapeFilesMeshResolutionComboBox->itemData(ui->shapeFilesMeshResolutionComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); + //ninjaErr = NinjaSetShpResolution(ninjaArmy, i+10, ui->shapeFilesMeshResolutionSpinBox->value(), ui->shapeFilesMeshResolutionComboBox->itemData(ui->shapeFilesMeshResolutionComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaSetShpResolution(ninjaArmy, i, ui->shapeFilesMeshResolutionSpinBox->value(), "fudge", papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetShpResolution: ninjaErr =" << ninjaErr; @@ -1161,9 +1137,9 @@ bool MainWindow::setOutputFlags(NinjaArmyH* ninjaArmy, return false; } - ninjaErr = NinjaSetPDFResolution(ninjaArmy, i, geospatialPDFs.resolution, geospatialPDFs.units.constData(), papszOptions); - //ninjaErr = NinjaSetPDFResolution(ninjaArmy, i+10, geospatialPDFs.resolution, geospatialPDFs.units.constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. - //ninjaErr = NinjaSetPDFResolution(ninjaArmy, i, geospatialPDFs.resolution, "fudge", papszOptions); // test error handling + ninjaErr = NinjaSetPDFResolution(ninjaArmy, i, ui->geospatialPDFFilesMeshResolutionSpinBox->value(), ui->geospatialPDFFilesMeshResolutionComboBox->itemData(ui->geospatialPDFFilesMeshResolutionComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); + //ninjaErr = NinjaSetPDFResolution(ninjaArmy, i+10, ui->geospatialPDFFilesMeshResolutionSpinBox->value(), ui->geospatialPDFFilesMeshResolutionComboBox->itemData(ui->geospatialPDFFilesMeshResolutionComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaSetPDFResolution(ninjaArmy, i, ui->geospatialPDFFilesMeshResolutionSpinBox->value(), "fudge", papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetPDFResolution: ninjaErr =" << ninjaErr; @@ -1205,27 +1181,6 @@ bool MainWindow::setOutputFlags(NinjaArmyH* ninjaArmy, return true; } -OutputMeshResolution MainWindow::getMeshResolution( - bool useOutputMeshResolution, - QDoubleSpinBox* outputMeshResolutionSpinBox, - QComboBox* outputMeshResolutionComboBox) -{ - OutputMeshResolution result; - - if (!useOutputMeshResolution) - { - result.resolution = outputMeshResolutionSpinBox->value(); - result.units = outputMeshResolutionComboBox->itemData(outputMeshResolutionComboBox->currentIndex()).toString().toUtf8(); - } - else - { - result.resolution = ui->meshResolutionSpinBox->value(); - result.units = ui->meshResolutionUnitsComboBox->itemData(ui->meshResolutionUnitsComboBox->currentIndex()).toString().toUtf8(); - } - - return result; -} - int MainWindow::startSolve(int numProcessors) { char **papszOptions = nullptr; diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index a8672074a..537ac3da5 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -73,11 +73,6 @@ #include #include -struct OutputMeshResolution { - double resolution; - QByteArray units; -}; - struct OutputPDFSize { double PDFHeight; double PDFWidth; @@ -159,14 +154,7 @@ private slots: bool setOutputFlags(NinjaArmyH* ninjaArmy, int i, int numNinjas, - OutputMeshResolution googleEarth, - OutputMeshResolution fireBehavior, - OutputMeshResolution shapeFiles, - OutputMeshResolution geospatialPDFs, OutputPDFSize PDFSize); - OutputMeshResolution getMeshResolution(bool useOutputMeshResolution, - QDoubleSpinBox* outputMeshResolutionSpinBox, - QComboBox* outputMeshResolutionComboBox); int lineNumber; From e6c556deefa7ea13bde171a6d04def9b70da4bf3 Mon Sep 17 00:00:00 2001 From: Natalie Wagenbrenner Date: Wed, 14 Jan 2026 11:30:54 -0700 Subject: [PATCH 355/435] NinjaDestroyRunKmzFilename must return a value --- src/ninja/windninja.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index e3c45833c..c51b9ae13 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -2747,6 +2747,8 @@ WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmz { free(weatherModelKmzFilenames); } + + return NINJA_SUCCESS; } From 7e0d5d1f8745fc48fd7fd60e01fb2b9df8d53385 Mon Sep 17 00:00:00 2001 From: Natalie Wagenbrenner Date: Wed, 14 Jan 2026 11:36:55 -0700 Subject: [PATCH 356/435] fix typo in CMakeLists.txt --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cc13e52e9..7d552ddc0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -326,7 +326,7 @@ endif(BUILD_TESTING) # Run windeployqt6.exe to provide all QT related DLLs if(MSVC) - set(WINDEPLOYQT_EXE "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-windows/tools/Qt6/bin/windeployqt6.ex") + set(WINDEPLOYQT_EXE "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-windows/tools/Qt6/bin/windeployqt6.exe") add_custom_target(deploy_windninja ALL COMMAND "${WINDEPLOYQT_EXE}" "$" From b08f241343c00c9d8b0c3276edb8f07116e3ef08 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 15 Jan 2026 16:11:55 -0700 Subject: [PATCH 357/435] 1st attempt at adding ninjaCom error handling to the GUI surface fetching, for issue #639, related to issue #666. started out by trying to print the info the existing QProgressDialog, but it closes instead of hangs when the process finishes, so I tried sending the error messages to a QMessageBox of "critical" type. This works, but supposedly is not wise, if more than one message gets sent somehow then you could have tons of QMessageBoxes opening up, seems like we SHOULD always get just a single message caught/passed in this way with the way I set it up though, for this specific process. note the way writeToConsole() was implemented, similar to the menuBar.h methods, but with the additional Qt::QueuedConnection option since it is being called withing an instance of QtConcurrent::run() with a QFutureWatcher. I didn't have to setup an update/resetNinjaComCallbackFunction() type function, because I guess the instance of ninjaArmy is fresh within surfaceInput compared to mainWindow. So just setting the initial progressCallbackFunction() was good enough. Note that I did have to play around with static vs non-static typing of the functions related to QFutureWatcher, seems like trying to avoid passing "this" around is a good idea, but the current method implementation requires it for the progressCallbackFunction() stuff. Might have to go deeper into how to setup ninja code, to properly pass along messages to ninjaCom. Instead of the "throw()" stuff I've seen so far, these surface fetch functions end up using CPLError() of types "warning" and "failure" with a return of error codes, some spots not even doing messaging at all just error codes. If we try/catch it, not sure if type "warning" is preserved, I need to think on this a bit. --- src/gui/mainWindow.cpp | 3 +- src/gui/surfaceInput.cpp | 104 ++++++++++++++++++++++++++++++++++++++- src/gui/surfaceInput.h | 6 ++- src/ninja/ninjaArmy.cpp | 7 +++ 4 files changed, 116 insertions(+), 4 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 568ea09b6..624ba91a9 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -137,6 +137,8 @@ void MainWindow::connectSignals() connect(this, &MainWindow::updateProgressValueSignal, this, &MainWindow::updateProgressValue, Qt::QueuedConnection); connect(this, &MainWindow::updateProgressMessageSignal, this, &MainWindow::updateProgressMessage, Qt::QueuedConnection); connect(this, &MainWindow::writeToConsoleSignal, this, &MainWindow::writeToConsole, Qt::QueuedConnection); + + connect(surfaceInput, &SurfaceInput::writeToConsoleSignal, this, &MainWindow::writeToConsole, Qt::QueuedConnection); } void MainWindow::writeToConsole(QString message, QColor color) @@ -281,7 +283,6 @@ void updateProgressCallback(const char *pszMessage, void *pUser) // this still emit self->updateProgressMessageSignal(QString::fromStdString(msg)); emit self->writeToConsoleSignal(QString::fromStdString(msg)); } - } void MainWindow::cancelSolve() diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp index 74a00c18f..d5f65e11e 100644 --- a/src/gui/surfaceInput.cpp +++ b/src/gui/surfaceInput.cpp @@ -65,6 +65,8 @@ SurfaceInput::SurfaceInput(Ui::MainWindow *ui, connect(ui->timeZoneAllZonesCheckBox, &QCheckBox::clicked, this, &SurfaceInput::timeZoneAllZonesCheckBoxClicked); connect(ui->timeZoneDetailsCheckBox, &QCheckBox::clicked, this, &SurfaceInput::timeZoneDetailsCheckBoxClicked); + connect(this, &SurfaceInput::updateProgressMessageSignal, this, &SurfaceInput::updateProgressMessage, Qt::QueuedConnection); + connect(this, &SurfaceInput::updateState, &AppState::instance(), &AppState::updateSurfaceInputState); } @@ -329,6 +331,8 @@ void SurfaceInput::elevationInputFileOpenButtonClicked() void SurfaceInput::startFetchDEM(QVector boundingBox, std::string demFile, double resolution, std::string fetchType) { + emit writeToConsoleSignal("Fetching DEM file..."); + progress = new QProgressDialog("Fetching DEM file...", QString(), 0, 0, ui->centralwidget); progress->setWindowModality(Qt::WindowModal); progress->setCancelButton(nullptr); @@ -337,7 +341,7 @@ void SurfaceInput::startFetchDEM(QVector boundingBox, std::string demFil progress->show(); futureWatcher = new QFutureWatcher(this); - QFuture future = QtConcurrent::run(&SurfaceInput::fetchDEMFile, boundingBox, demFile, resolution, fetchType); + QFuture future = QtConcurrent::run(&SurfaceInput::fetchDEMFile, this, boundingBox, demFile, resolution, fetchType); futureWatcher->setFuture(future); connect(futureWatcher, &QFutureWatcher::finished, this, &SurfaceInput::fetchDEMFinished); @@ -345,6 +349,9 @@ void SurfaceInput::startFetchDEM(QVector boundingBox, std::string demFil void SurfaceInput::fetchDEMFinished() { + // get the return value of the QtConcurrent::run() function + int result = futureWatcher->future().result(); + if (progress) { progress->close(); @@ -360,6 +367,14 @@ void SurfaceInput::fetchDEMFinished() ui->elevationInputFileLineEdit->setText(ui->elevationInputFileLineEdit->property("fullpath").toString()); ui->inputsStackedWidget->setCurrentIndex(5); + + if(result == NINJA_SUCCESS) + { + emit writeToConsoleSignal("Finished fetching DEM file.", Qt::darkGreen); + } else + { + emit writeToConsoleSignal("Failed to fetch DEM file."); + } } void SurfaceInput::timeZoneComboBoxCurrentIndexChanged(int index) @@ -556,13 +571,98 @@ QVector> SurfaceInput::fetchAllTimeZones(bool isShowAllTimeZone } } +void SurfaceInput::updateProgressMessage(const QString message) +{ + //progress->setLabelText(message); + QMessageBox::critical( + nullptr, + QApplication::tr("Error"), + message + ); +} + +//static void updateProgressCallback_SurfaceInput(const char *pszMessage, void *pUser) +void updateProgressCallback_SurfaceInput(const char *pszMessage, void *pUser) // this still worked?? huh. +{ + SurfaceInput *self = static_cast(pUser); + + std::string msg = pszMessage; + if( msg.substr(msg.size()-1, 1) == "\n") + { + msg = msg.substr(0, msg.size()-1); + } + + size_t pos; + size_t startPos; + size_t endPos; + std::string clipStr; + + if( msg.find("Exception caught: ") != msg.npos || msg.find("ERROR: ") != msg.npos ) + { + if( msg.find("Exception caught: ") != msg.npos ) + { + pos = msg.find("Exception caught: "); + startPos = pos+18; + } + else // if( msg.find("ERROR: ") != msg.npos ) + { + pos = msg.find("ERROR: "); + startPos = pos+7; + } + clipStr = msg.substr(startPos); + //std::cout << "clipStr = \"" << clipStr << "\"" << std::endl; + //emit self->updateProgressMessageSignal(QString::fromStdString(clipStr)); + //emit self->writeToConsoleSignal(QString::fromStdString(clipStr)); + if( clipStr == "Cannot determine exception type." ) + { + emit self->updateProgressMessageSignal(QString::fromStdString("SurfaceFetch ended with unknown error")); + emit self->writeToConsoleSignal(QString::fromStdString("unknown SurfaceFetch error"), Qt::red); + } + else + { + emit self->updateProgressMessageSignal(QString::fromStdString("SurfaceFetch ended in error:\n"+clipStr)); + emit self->writeToConsoleSignal(QString::fromStdString("SurfaceFetch error: "+clipStr), Qt::red); + } + } + else if( msg.find("Warning: ") != msg.npos ) + { + if( msg.find("Warning: ") != msg.npos ) + { + pos = msg.find("Warning: "); + startPos = pos+9; + } + clipStr = msg.substr(startPos); + //std::cout << "clipStr = \"" << clipStr << "\"" << std::endl; + //emit self->updateProgressMessageSignal(QString::fromStdString(clipStr)); + //emit self->writeToConsoleSignal(QString::fromStdString(clipStr)); + emit self->updateProgressMessageSignal(QString::fromStdString("SurfaceFetch ended in warning:\n"+clipStr)); + emit self->writeToConsoleSignal(QString::fromStdString("SurfaceFetch warning: "+clipStr), Qt::yellow); + } + else + { + emit self->updateProgressMessageSignal(QString::fromStdString(msg)); + emit self->writeToConsoleSignal(QString::fromStdString(msg)); + } +} + int SurfaceInput::fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType) { NinjaArmyH* ninjaArmy = NULL; char ** papszOptions = NULL; NinjaErr ninjaErr = 0; - ninjaErr = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); + ninjaArmy = NinjaInitializeArmy(); + + ninjaErr = NinjaSetComProgressFunc(ninjaArmy, &updateProgressCallback_SurfaceInput, this, papszOptions); + if(ninjaErr != NINJA_SUCCESS) + { + qDebug() << "Army NinjaSetComProgressFunc: err =" << ninjaErr; + } + + ninjaErr = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); // some errors and warnings are caught, but only as error codes, not as messages. Would need to update how we do the messaging within the various SurfaceFetch calls themselves. CPLError( CE_Warning, ...); and CPLError( CE_Failure, ...); with return of an error code seems hard to try/catch with ninjaCom. + //ninjaErr = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), ".", resolution, strdup(fetchType.c_str()), papszOptions); // error was caught, but message is not properly passed + //ninjaErr = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), resolution, "fudge", papszOptions); // actually catches this error, with a good message + //ninjaErr = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), -10.0, strdup(fetchType.c_str()), papszOptions); // error was caught, but not even a message to be passed around with this one if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaFetchDEMBBox: ninjaErr =" << ninjaErr; diff --git a/src/gui/surfaceInput.h b/src/gui/surfaceInput.h index e5e3062b4..40a83606a 100644 --- a/src/gui/surfaceInput.h +++ b/src/gui/surfaceInput.h @@ -45,6 +45,7 @@ #include #include #include +#include class SurfaceInput : public QObject { @@ -60,6 +61,8 @@ class SurfaceInput : public QObject signals: void updateState(); void updateTreeView(); + void updateProgressMessageSignal(const QString &msg); + void writeToConsoleSignal(const QString &msg, QColor color = Qt::white); public slots: void boundingBoxReceived(double north, double south, double east, double west); @@ -79,6 +82,7 @@ private slots: void timeZoneDetailsCheckBoxClicked(); void timeZoneComboBoxCurrentIndexChanged(int index); void timeZoneAllZonesCheckBoxClicked(); + void updateProgressMessage(const QString message); private: Ui::MainWindow *ui; @@ -95,7 +99,7 @@ private slots: QString fetchTimeZoneDetails(QString currentTimeZone); QVector> fetchAllTimeZones(bool isShowAllTimeZonesSelected); - static int fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); + int fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType); void computeDEMFile(QString filePath); void computeBoundingBox(double centerLat, double centerLon, double radius, double boundingBox[4]); void computePointRadius(double north, double east, double south, double west, double pointRadius[3]); diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 0a2bd0306..8f7b7f7e4 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -258,6 +258,7 @@ void ninjaArmy::makeWeatherModelArmy(std::string forecastFilename, std::string t int ninjaArmy::fetchDEMPoint(double * adfPoint,double *adfBuff, const char* units, double dfCellSize, const char * pszDstFile, const char* fetchType, char ** papszOptions){ if (pszDstFile == NULL) { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Input dstFile '%s' in ninjaArmy::fetchDEMPoint() is invalid.", pszDstFile); return NINJA_E_INVALID; } SURF_FETCH_E retval = SURF_FETCH_E_NONE; @@ -277,6 +278,7 @@ int ninjaArmy::fetchDEMPoint(double * adfPoint,double *adfBuff, const char* unit fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::LCP_STR,""); } if (fetcher == NULL) { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid input fetchType '%s' in ninjaArmy::fetchDEMPoint()\nchoices are: 'srtm', 'gmted', 'relief', 'lcp'", fetchType); delete fetcher; return NINJA_E_INVALID; } @@ -284,6 +286,8 @@ int ninjaArmy::fetchDEMPoint(double * adfPoint,double *adfBuff, const char* unit int result = fetcher->FetchPoint(adfPoint, adfBuff, ninjaUnits, dfCellSize, pszDstFile, papszOptions); if (result != 0) { + //Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + Com->ninjaCom(ninjaComClass::ninjaFailure, "in ninjaArmy::fetchDEMPoint(), fetching failed!"); delete fetcher; return NINJA_E_INVALID; } @@ -318,6 +322,7 @@ int ninjaArmy::fetchDEMBBox(double *boundsBox, const char *fileName, double reso fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::LCP_STR,""); } if (fetcher == NULL) { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid input fetchType '%s' in ninjaArmy::fetchDEMBBox()\nchoices are: 'srtm', 'gmted', 'relief', 'lcp'", fetchType); delete fetcher; return NINJA_E_INVALID; } @@ -329,6 +334,8 @@ int ninjaArmy::fetchDEMBBox(double *boundsBox, const char *fileName, double reso int result = fetcher->FetchBoundingBox(boundsBox, resolution, fileName, NULL); if (result != 0) { + //Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + Com->ninjaCom(ninjaComClass::ninjaFailure, "in ninjaArmy::fetchDEMBBox(), fetching failed!"); delete fetcher; return NINJA_E_INVALID; } From 8c36c4bec601cc10e5200b946d359a31ee299922 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 15 Jan 2026 20:55:20 -0700 Subject: [PATCH 358/435] updated the GUI surface fetching ninjaCom error messaging to use the QProgressDialog instead of a QMessageBox. For issue #639, related to issue #666 --- src/gui/surfaceInput.cpp | 45 +++++++++++++++++++++------------------- src/gui/surfaceInput.h | 1 - 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp index d5f65e11e..9c5061f98 100644 --- a/src/gui/surfaceInput.cpp +++ b/src/gui/surfaceInput.cpp @@ -352,29 +352,31 @@ void SurfaceInput::fetchDEMFinished() // get the return value of the QtConcurrent::run() function int result = futureWatcher->future().result(); - if (progress) + if(result == NINJA_SUCCESS) { - progress->close(); - progress->deleteLater(); - progress = nullptr; - } + emit writeToConsoleSignal("Finished fetching DEM file.", Qt::darkGreen); - if (futureWatcher) - { - futureWatcher->deleteLater(); - futureWatcher = nullptr; - } + if (progress) + { + progress->close(); + progress->deleteLater(); + progress = nullptr; + } - ui->elevationInputFileLineEdit->setText(ui->elevationInputFileLineEdit->property("fullpath").toString()); - ui->inputsStackedWidget->setCurrentIndex(5); + ui->elevationInputFileLineEdit->setText(ui->elevationInputFileLineEdit->property("fullpath").toString()); + ui->inputsStackedWidget->setCurrentIndex(5); - if(result == NINJA_SUCCESS) - { - emit writeToConsoleSignal("Finished fetching DEM file.", Qt::darkGreen); } else { emit writeToConsoleSignal("Failed to fetch DEM file."); } + + // delete the futureWatcher every time, whether success or failure + if (futureWatcher) + { + futureWatcher->deleteLater(); + futureWatcher = nullptr; + } } void SurfaceInput::timeZoneComboBoxCurrentIndexChanged(int index) @@ -573,12 +575,13 @@ QVector> SurfaceInput::fetchAllTimeZones(bool isShowAllTimeZone void SurfaceInput::updateProgressMessage(const QString message) { - //progress->setLabelText(message); - QMessageBox::critical( - nullptr, - QApplication::tr("Error"), - message - ); + progress->setLabelText(message); + progress->setWindowTitle(tr("Error")); + progress->setCancelButtonText(tr("Close")); + progress->setAutoClose(false); + progress->setAutoReset(false); + progress->setRange(0, 1); + progress->setValue(progress->maximum()); } //static void updateProgressCallback_SurfaceInput(const char *pszMessage, void *pUser) diff --git a/src/gui/surfaceInput.h b/src/gui/surfaceInput.h index 40a83606a..0d3f31858 100644 --- a/src/gui/surfaceInput.h +++ b/src/gui/surfaceInput.h @@ -45,7 +45,6 @@ #include #include #include -#include class SurfaceInput : public QObject { From bd9deb0e525c044a0cde468aba4d5e7bf47b95f7 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 15 Jan 2026 21:30:37 -0700 Subject: [PATCH 359/435] made the ninjaCom GUI progress callback functions of static type, allowing use of the same name for each of the functions across differing .cpp files. For issue #666, related to issue #639 technically the non-static, but still defined within .cpp without being a class function, style works, but apparently static at file scope gives better internal linkage, making each .cpp able to have its own private copy. Using the non-static method probably makes more sense if defining a single callback function to be used across .cpp files, which is not what we are doing here in this case. --- src/gui/mainWindow.cpp | 3 +-- src/gui/surfaceInput.cpp | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 624ba91a9..64fbc862a 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -188,8 +188,7 @@ void MainWindow::updateProgressValue(int run, int progress) progressDialog->setValue(totalProgress); } -//static void updateProgressCallback(const char *pszMessage, void *pUser) -void updateProgressCallback(const char *pszMessage, void *pUser) // this still worked?? huh. +static void updateProgressCallback(const char *pszMessage, void *pUser) { MainWindow *self = static_cast(pUser); diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp index 9c5061f98..e83f96343 100644 --- a/src/gui/surfaceInput.cpp +++ b/src/gui/surfaceInput.cpp @@ -584,8 +584,7 @@ void SurfaceInput::updateProgressMessage(const QString message) progress->setValue(progress->maximum()); } -//static void updateProgressCallback_SurfaceInput(const char *pszMessage, void *pUser) -void updateProgressCallback_SurfaceInput(const char *pszMessage, void *pUser) // this still worked?? huh. +static void updateProgressCallback(const char *pszMessage, void *pUser) { SurfaceInput *self = static_cast(pUser); @@ -656,7 +655,7 @@ int SurfaceInput::fetchDEMFile(QVector boundingBox, std::string demFile, ninjaArmy = NinjaInitializeArmy(); - ninjaErr = NinjaSetComProgressFunc(ninjaArmy, &updateProgressCallback_SurfaceInput, this, papszOptions); + ninjaErr = NinjaSetComProgressFunc(ninjaArmy, &updateProgressCallback, this, papszOptions); if(ninjaErr != NINJA_SUCCESS) { qDebug() << "Army NinjaSetComProgressFunc: err =" << ninjaErr; From 2325a7f900111bcd55f89049432bf80940a33210 Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 16 Jan 2026 14:20:32 -0700 Subject: [PATCH 360/435] revamped the ninjaCom GUI progress callback function naming, it is now called ninjaComMessageHandler. Also did a bit of cleanup to the ninjaCom naming schemes and header comments across the code. For issue #666, related to issue #639 and #582 --- src/gui/mainWindow.cpp | 6 +- src/gui/surfaceInput.cpp | 6 +- src/ninja/callbackFunctions.h | 2 +- src/ninja/ninjaArmy.cpp | 10 +-- src/ninja/ninjaArmy.h | 19 +++++- src/ninja/ninjaCom.cpp | 113 +++++++++++++++++----------------- src/ninja/ninjaCom.h | 14 ++--- src/ninja/windninja.cpp | 20 +++--- src/ninja/windninja.h | 4 +- 9 files changed, 106 insertions(+), 88 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 64fbc862a..6b35535dc 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -188,7 +188,7 @@ void MainWindow::updateProgressValue(int run, int progress) progressDialog->setValue(totalProgress); } -static void updateProgressCallback(const char *pszMessage, void *pUser) +static void comMessageHandler(const char *pszMessage, void *pUser) { MainWindow *self = static_cast(pUser); @@ -416,10 +416,10 @@ void MainWindow::solveButtonClicked() ninjaArmy = NinjaInitializeArmy(); - ninjaErr = NinjaSetComProgressFunc(ninjaArmy, &updateProgressCallback, this, papszOptions); + ninjaErr = NinjaSetComMessageHandler(ninjaArmy, &comMessageHandler, this, papszOptions); if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "Army NinjaSetComProgressFunc: err =" << ninjaErr; + qDebug() << "NinjaSetComMessageHandler(): ninjaErr =" << ninjaErr; } if (state.isDomainAverageInitializationValid) diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp index e83f96343..ea99ed3e8 100644 --- a/src/gui/surfaceInput.cpp +++ b/src/gui/surfaceInput.cpp @@ -584,7 +584,7 @@ void SurfaceInput::updateProgressMessage(const QString message) progress->setValue(progress->maximum()); } -static void updateProgressCallback(const char *pszMessage, void *pUser) +static void comMessageHandler(const char *pszMessage, void *pUser) { SurfaceInput *self = static_cast(pUser); @@ -655,10 +655,10 @@ int SurfaceInput::fetchDEMFile(QVector boundingBox, std::string demFile, ninjaArmy = NinjaInitializeArmy(); - ninjaErr = NinjaSetComProgressFunc(ninjaArmy, &updateProgressCallback, this, papszOptions); + ninjaErr = NinjaSetComMessageHandler(ninjaArmy, &comMessageHandler, this, papszOptions); if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "Army NinjaSetComProgressFunc: err =" << ninjaErr; + qDebug() << "NinjaSetComMessageHandler(): ninjaErr =" << ninjaErr; } ninjaErr = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); // some errors and warnings are caught, but only as error codes, not as messages. Would need to update how we do the messaging within the various SurfaceFetch calls themselves. CPLError( CE_Warning, ...); and CPLError( CE_Failure, ...); with return of an error code seems hard to try/catch with ninjaCom. diff --git a/src/ninja/callbackFunctions.h b/src/ninja/callbackFunctions.h index bea31814c..c89606275 100644 --- a/src/ninja/callbackFunctions.h +++ b/src/ninja/callbackFunctions.h @@ -1,6 +1,6 @@ #ifndef CALLBACKFUNCTIONS_H #define CALLBACKFUNCTIONS_H -typedef void (*ProgressFunc)(const char *pszMessage, void *pUser); +typedef void (*ninjaComMessageHandler)(const char *pszMessage, void *pUser); #endif // CALLBACKFUNCTIONS diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 8f7b7f7e4..8ddf584f4 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -1365,16 +1365,16 @@ void ninjaArmy::setAtmFlags() * Ninja Communication Methods *-----------------------------------------------------------------------------*/ -int ninjaArmy::setNinjaComProgressFunc( ProgressFunc func, void *pUser, - char ** papszOptions ) +int ninjaArmy::setNinjaComMessageHandler( ninjaComMessageHandler pMsgHandler, void *pUser, + char ** papszOptions ) { try { - Com->set_progressFunc(func, pUser); + Com->set_messageHandler(pMsgHandler, pUser); } catch( ... ) { - std::cout << "!!!failed to set ninjaArmy level ninjaCom progress function!!!" << std::endl; + std::cerr << "CRITICAL: ninjaArmy level ninjaComMessageHandler not set. Messages will NOT be delivered." << std::endl; return NINJA_E_INVALID; } return NINJA_SUCCESS; @@ -1389,7 +1389,7 @@ int ninjaArmy::setNinjaMultiComStream( FILE* stream, } catch( ... ) { - std::cout << "!!!failed to set ninjaArmy level ninjaCom multiStream FILE pointer!!!" << std::endl; + std::cerr << "ERROR: ninjaArmy level ninjaCom multiStream FILE pointer not set." << std::endl; return NINJA_E_INVALID; } return NINJA_SUCCESS; diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 70273834e..9e7e9f879 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -183,14 +183,27 @@ class ninjaArmy * Ninja Communication Methods *-----------------------------------------------------------------------------*/ - int setNinjaComProgressFunc( ProgressFunc func, void *pUser, - char ** papszOptions = NULL); + /** + * \brief Set a ninjaComMessageHandler callback function to the ninjaArmy level ninjaCom + * + * \param pMsgHandler A pointer to a ninjaComMessageHandler callback function. + * \param pUser A pointer to the object or context associated with the callback function. + * \return errval Returns NINJA_SUCCESS upon success + */ + int setNinjaComMessageHandler( ninjaComMessageHandler pMsgHandler, void *pUser, + char ** papszOptions = NULL); + /** + * \brief Set a ninjaCom multi-stream FILE handle to the ninjaArmy level ninjaCom + * + * \param stream A pointer to a multi-stream FILE handle/stream. + * \return errval Returns NINJA_SUCCESS upon success + */ int setNinjaMultiComStream( FILE* stream, char ** papszOptions = NULL); /** - * \brief Set the ninjaCom handler of a ninja, using the ninjaArmy level ninjaCom handler + * \brief Set the ninjaCom of a ninja, using the ninjaArmy level ninjaCom * and set the ninja and ninjaCom runNumber of a ninja * * \param nIndex index of a ninja diff --git a/src/ninja/ninjaCom.cpp b/src/ninja/ninjaCom.cpp index 8966b2783..6de27593e 100644 --- a/src/ninja/ninjaCom.cpp +++ b/src/ninja/ninjaCom.cpp @@ -49,9 +49,9 @@ ninjaComClass::ninjaComClass() printLastMsg = false; lastMsg[0] = '\0'; - printProgressFunc = false; - pfnProgress = nullptr; - pProgressUser = nullptr; + printToMsgHandler = false; + pMsgHandler = nullptr; + pMsgUser = nullptr; printLogFile = false; fpLog = stdout; @@ -89,9 +89,9 @@ ninjaComClass::ninjaComClass(const ninjaComClass& A) printLastMsg = A.printLastMsg; strcpy( lastMsg, A.lastMsg ); - printProgressFunc = A.printProgressFunc; - pfnProgress = A.pfnProgress; - pProgressUser = A.pProgressUser; + printToMsgHandler = A.printToMsgHandler; + pMsgHandler = A.pMsgHandler; + pMsgUser = A.pMsgUser; printLogFile = A.printLogFile; fpLog = A.fpLog; @@ -123,9 +123,9 @@ ninjaComClass& ninjaComClass::operator=(const ninjaComClass &A) printLastMsg = A.printLastMsg; strcpy( lastMsg, A.lastMsg ); - printProgressFunc = A.printProgressFunc; - pfnProgress = A.pfnProgress; - pProgressUser = A.pProgressUser; + printToMsgHandler = A.printToMsgHandler; + pMsgHandler = A.pMsgHandler; + pMsgUser = A.pMsgUser; printLogFile = A.printLogFile; fpLog = A.fpLog; @@ -135,18 +135,18 @@ ninjaComClass& ninjaComClass::operator=(const ninjaComClass &A) return *this; } -void ninjaComClass::set_progressFunc(ProgressFunc func, void *pUser) +void ninjaComClass::set_messageHandler(ninjaComMessageHandler pMessageHandler, void *pUser) { - if( func == NULL || pUser == NULL ) + if( pMessageHandler == NULL || pUser == NULL ) { - fprintf(stderr, "ninjaComClass::set_ninjaComProgressFunc() error!! input ProgressFunction or ProgressFunctionUser are NULL!!!\n"); + fprintf(stderr, "CRITICAL: ninjaComClass::set_messageHandler(), input ninjaComMessageHandler pMsgHandler and pMsgUser are NULL\n"); fflush(stderr); return; } - printProgressFunc = true; - pfnProgress = func; - pProgressUser = pUser; + printToMsgHandler = true; + pMsgHandler = pMessageHandler; + pMsgUser = pUser; } /** @@ -160,49 +160,50 @@ void ninjaComClass::noSolverProgress() } /** -* Communication function used to pass messages from the program to the ninjaComHandler() function, +* Communication function used to pass messages from the program to the ninjaComDispatchMessage() function, * parsing the printf() %f, %d, %s, etc style syntax of the message into a fully built string. -* @param eMsg Type of message to be passed. See msgType for available types. -* @param Message to be passed, using string formatting (like a printf() statement). +* @param eMsgType Type of message to be passed. See msgType for available types. +* @param fmt Message to be passed, using string formatting (like a printf() statement). */ -void ninjaComClass::ninjaCom(msgType eMsg, const char *fmt, ...) +void ninjaComClass::ninjaCom(msgType eMsgType, const char *fmt, ...) { va_list args; // Expand the error message va_start(args, fmt); - ninjaComV(eMsg, fmt, args); + ninjaComV(eMsgType, fmt, args); va_end(args); } /** * This is an intermediate function that parses the args...? -* @param eMsg Type of message to be passed. See msgType for available types. +* @param eMsgType Type of message to be passed. See msgType for available types. * @param fmt Message to be passed, using string formatting (like a printf() statement). * @param args Arguments list for fmt. */ -void ninjaComClass::ninjaComV(msgType eMsg, const char *fmt, va_list args) +void ninjaComClass::ninjaComV(msgType eMsgType, const char *fmt, va_list args) { char ninjaMsg[NINJA_MSG_SIZE] = ""; vsnprintf(ninjaMsg, NINJA_MSG_SIZE-2, fmt, args); - ninjaComHandler(eMsg, ninjaMsg); + ninjaComDispatchMessage(eMsgType, ninjaMsg); } /** -* Communication handler for WindNinja simulations. Takes an input message and prints/passes it. -* The place the message is printed or passed to (or if the message is ignored) -* depends on the input message type, and other pre-set ninjaCom settings +* Communication dispatcher for WindNinja simulations. Takes an input message and prints/passes it. +* The place the message is printed or passed to (or if the message is ignored) depends on the input message type, +* whether a ninjaComMessageHandler and/or a multi-stream FILE and/or various FILE streams are set, +* and other pre-set ninjaCom settings * -* @param eMsg Type of message to be passed. See msgType for available types. -* @param ninjaComMsg Message to be printed. Comes from ninjaComV and ninjaCom. +* @param eMsgType Type of message to be passed. See msgType for available types. +* @param ninjaComMsg Message to be printed. Comes from ninjaComV and ninjaCom. */ -void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) +void ninjaComClass::ninjaComDispatchMessage(msgType eMsgType, const char *ninjaComMsg) { char msg[NINJA_MSG_SIZE]; // Declare a character array to store the result of sprintf, for printing char runPartMsg[10]; // this SHOULD be enough for the "Run %d:" part of the msg - if( printProgressFunc == false || multiStream != NULL ) + if( printToMsgHandler == false || multiStream != NULL ) { if( runNumber == -9999 ) { @@ -235,7 +236,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) if( printMaxErrors == true ) { - if( eMsg == ninjaFailure || eMsg == ninjaFatal ) + if( eMsgType == ninjaFailure || eMsgType == ninjaFatal ) { errorCount++; if( errorCount > nMaxErrors && nMaxErrors > 0 ) @@ -254,17 +255,17 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) fflush(multiStream); } - if( printProgressFunc == true ) + if( printToMsgHandler == true ) { - pfnProgress(msg, pProgressUser); + pMsgHandler(msg, pMsgUser); } } return; } - } // if( eMsg == ninjaFailure || eMsg == ninjaFatal ) + } // if( eMsgType == ninjaFailure || eMsgType == ninjaFatal ) } // if( printMaxErrors == true ) - if(eMsg == ninjaNone) //None + if(eMsgType == ninjaNone) //None { sprintf( msg, "%s%s\n", runPartMsg, ninjaComMsg ); @@ -276,13 +277,13 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) fflush(multiStream); } - if( printProgressFunc == true ) + if( printToMsgHandler == true ) { - pfnProgress(msg, pProgressUser); + pMsgHandler(msg, pMsgUser); } } #ifdef NINJA_DEBUG - else if(eMsg == ninjaDebug) //Debug + else if(eMsgType == ninjaDebug) //Debug { sprintf( msg, "%s%s\n", runPartMsg, ninjaComMsg); @@ -294,13 +295,13 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) fflush(multiStream); } - if( printProgressFunc == true ) + if( printToMsgHandler == true ) { - pfnProgress(msg, pProgressUser); + pMsgHandler(msg, pMsgUser); } } #endif //NINJA_DEBUG - else if(eMsg == ninjaSolverProgress) //Solver progress (%complete) + else if(eMsgType == ninjaSolverProgress) //Solver progress (%complete) { if(printSolverProgress) { @@ -314,13 +315,13 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) fflush(multiStream); } - if( printProgressFunc == true ) + if( printToMsgHandler == true ) { - pfnProgress(msg, pProgressUser); + pMsgHandler(msg, pMsgUser); } } } - else if(eMsg == ninjaOuterIterProgress) //Solver progress for outer matching iterations (%complete) + else if(eMsgType == ninjaOuterIterProgress) //Solver progress for outer matching iterations (%complete) { sprintf( msg, "%sSolver (matching): %d%% complete\n", runPartMsg, atoi(ninjaComMsg)); @@ -332,12 +333,12 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) fflush(multiStream); } - if( printProgressFunc == true ) + if( printToMsgHandler == true ) { - pfnProgress(msg, pProgressUser); + pMsgHandler(msg, pMsgUser); } } - else if(eMsg == ninjaWarning) //Warnings + else if(eMsgType == ninjaWarning) //Warnings { sprintf( msg, "%sWarning: %s\n", runPartMsg, ninjaComMsg); @@ -349,11 +350,11 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) fflush(multiStream); } - if( printProgressFunc == true ) + if( printToMsgHandler == true ) { - pfnProgress(msg, pProgressUser); + pMsgHandler(msg, pMsgUser); } - } else if(eMsg == ninjaFailure) //Failures (ie errors) + } else if(eMsgType == ninjaFailure) //Failures (ie errors) { sprintf( msg, "%sERROR: %s\n", runPartMsg, ninjaComMsg); @@ -365,12 +366,12 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) fflush(multiStream); } - if( printProgressFunc == true ) + if( printToMsgHandler == true ) { - pfnProgress(msg, pProgressUser); + pMsgHandler(msg, pMsgUser); } } - else if(eMsg == ninjaFatal) //Failures (probably fatal) + else if(eMsgType == ninjaFatal) //Failures (probably fatal) { sprintf( msg, "%sERROR: %s\n", runPartMsg, ninjaComMsg); @@ -382,9 +383,9 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) fflush(multiStream); } - if( printProgressFunc == true ) + if( printToMsgHandler == true ) { - pfnProgress(msg, pProgressUser); + pMsgHandler(msg, pMsgUser); } } @@ -392,7 +393,7 @@ void ninjaComClass::ninjaComHandler(msgType eMsg, const char *ninjaComMsg) { // If message is a Failure or Fatal type, write the string to the lastMsg storage // which can then be read from ninjaCom using ninja::get_lastComString() - if( eMsg == ninjaFailure || eMsg == ninjaFatal ) + if( eMsgType == ninjaFailure || eMsgType == ninjaFatal ) { strcpy(lastMsg, ninjaComMsg); // stores the raw message in lastMsg, without any ninjaCom message processing } diff --git a/src/ninja/ninjaCom.h b/src/ninja/ninjaCom.h index 1b1a496bc..f9fe4125d 100644 --- a/src/ninja/ninjaCom.h +++ b/src/ninja/ninjaCom.h @@ -79,26 +79,26 @@ class ninjaComClass char lastMsg[NINJA_MSG_SIZE]; // storage of the last message - bool printProgressFunc; - ProgressFunc pfnProgress; - void *pProgressUser; + bool printToMsgHandler; + ninjaComMessageHandler pMsgHandler; // A pointer to a user defined ninjaComMessageHandler callback function. If defined, ninjaCom sends messages to this callback function. + void *pMsgUser; // A pointer to a user-defined object or context associated with the callback function. This pointer is passed through to the callback function and allows forwarding of messages to this object or context. bool printLogFile; FILE* fpLog; FILE* fpErr; - FILE* multiStream; + FILE* multiStream; // A pointer to a multi-stream FILE handle/stream. If defined, ninjaCom sends ALL messages to this stream, in addition to std::cout and std::cerr. //methods - void set_progressFunc(ProgressFunc func, void *pUser); + void set_messageHandler(ninjaComMessageHandler pMessageHandler, void *pUser); void noSolverProgress(); - void ninjaCom(msgType eMsg, const char *fmt, ...); + void ninjaCom(msgType eMsgType, const char *fmt, ...); void ninjaComV(msgType, const char *, va_list); - void ninjaComHandler(msgType eMsg, const char *ninjaComMsg); + void ninjaComDispatchMessage(msgType eMsgType, const char *ninjaComMsg); }; #endif //NINJACOM_H diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index c51b9ae13..8619ed2bd 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -800,19 +800,23 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetNumberCPUs } /** - * \brief Set a comProgressFunction handler for simulations. + * \brief Set a ninjaComMessageHandler callback function for simulations. * - * \param army An opaque handle to a valid ninjaArmy. + * Allows the caller to receive status, progress, informational messages, and error + * messages generated during simulations via a user-provided callback function. * + * \param army An opaque handle to a valid ninjaArmy. + * \param pMsgHandler A pointer to a user defined ninjaComMessageHandler callback function. If defined, ninjaCom sends messages to this callback function. + * \param pUser A pointer to a user-defined object or context associated with the callback function. This pointer is passed through to the callback function and allows forwarding of messages to this object or context. * \return NINJA_SUCCESS on success, non-zero otherwise. */ -WINDNINJADLL_EXPORT NinjaErr NinjaSetComProgressFunc - ( NinjaArmyH * army, ProgressFunc func, void *pUser, char ** papszOptions ) +WINDNINJADLL_EXPORT NinjaErr NinjaSetComMessageHandler + ( NinjaArmyH * army, ninjaComMessageHandler pMsgHandler, void *pUser, char ** papszOptions ) { if( NULL != army ) { - return reinterpret_cast( army )->setNinjaComProgressFunc - ( func, pUser ); + return reinterpret_cast( army )->setNinjaComMessageHandler + ( pMsgHandler, pUser ); } else { @@ -821,10 +825,10 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetComProgressFunc } /** - * \brief Set the multi-stream FILE, for message communications during simulations. + * \brief Set a ninjaCom multi-stream FILE handle, for message communications during simulations. * * \param army An opaque handle to a valid ninjaArmy. - * \param stream The message communication FILE to send multi-stream messages to. + * \param stream A pointer to a multi-stream FILE handle/stream. If defined, ninjaCom sends ALL messages to this stream, in addition to std::cout and std::cerr. * * \return NINJA_SUCCESS on success, non-zero otherwise. */ diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 230c10f03..d5bd1b595 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -156,8 +156,8 @@ typedef int NinjaErr; ( NinjaArmyH * ninjaArmy, const int nIndex, const int nCPUs, char ** options ); /* Communication */ - WINDNINJADLL_EXPORT NinjaErr NinjaSetComProgressFunc - ( NinjaArmyH * ninjaArmy, ProgressFunc func, void *pUser, char ** options ); + WINDNINJADLL_EXPORT NinjaErr NinjaSetComMessageHandler + ( NinjaArmyH * ninjaArmy, ninjaComMessageHandler pMsgHandler, void *pUser, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaSetMultiComStream ( NinjaArmyH * ninjaArmy, FILE* stream, char ** options ); From 336f7c19d48cde32dcd4a1f944dd2e92eb73256c Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 16 Jan 2026 19:46:43 -0700 Subject: [PATCH 361/435] 1st attempt at adding GUI ninjaCom error handling to the wxModel downloading in ninjaTools, for issue #639, related to issue #582 because of the need to differentiate between ninjaArmy and ninjaTools level ninjaCom setting functions. Still haven't successfully caught the errors yet, getting a lot of seg faults. But the infrastructure is now all there to where I just need to track the specific error spots down. Still have that same issue where some messages are passed via CPLError() of types warning and failure with a return of error codes, rather than "throw" methods. But there are definitely some throws as well, that are not getting properly caught yet, hence the seg faults. --- autotest/api/test_capi_domain_average_wind.c | 4 +- src/gui/mainWindow.cpp | 5 +- src/gui/surfaceInput.cpp | 4 +- src/gui/weatherModelInput.cpp | 156 +++++++++++++++++-- src/gui/weatherModelInput.h | 12 +- src/ninja/ninjaArmy.cpp | 1 + src/ninja/ninjaTools.cpp | 121 +++++++++++++- src/ninja/ninjaTools.h | 38 +++++ src/ninja/windninja.cpp | 73 ++++++++- src/ninja/windninja.h | 10 +- 10 files changed, 391 insertions(+), 33 deletions(-) diff --git a/autotest/api/test_capi_domain_average_wind.c b/autotest/api/test_capi_domain_average_wind.c index d47c0f314..3741f7c22 100644 --- a/autotest/api/test_capi_domain_average_wind.c +++ b/autotest/api/test_capi_domain_average_wind.c @@ -116,10 +116,10 @@ int main() /* * Customize the ninja communication */ - err = NinjaSetMultiComStream(ninjaArmy, multiStream, papszOptions); + err = NinjaSetArmyMultiComStream(ninjaArmy, multiStream, papszOptions); if(err != NINJA_SUCCESS) { - printf("NinjaSetMultiComStream: err = %d\n", err); + printf("NinjaSetArmyMultiComStream: err = %d\n", err); } /* diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 6b35535dc..571b9c713 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -139,6 +139,7 @@ void MainWindow::connectSignals() connect(this, &MainWindow::writeToConsoleSignal, this, &MainWindow::writeToConsole, Qt::QueuedConnection); connect(surfaceInput, &SurfaceInput::writeToConsoleSignal, this, &MainWindow::writeToConsole, Qt::QueuedConnection); + connect(weatherModelInput, &WeatherModelInput::writeToConsoleSignal, this, &MainWindow::writeToConsole, Qt::QueuedConnection); } void MainWindow::writeToConsole(QString message, QColor color) @@ -416,10 +417,10 @@ void MainWindow::solveButtonClicked() ninjaArmy = NinjaInitializeArmy(); - ninjaErr = NinjaSetComMessageHandler(ninjaArmy, &comMessageHandler, this, papszOptions); + ninjaErr = NinjaSetArmyComMessageHandler(ninjaArmy, &comMessageHandler, this, papszOptions); if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetComMessageHandler(): ninjaErr =" << ninjaErr; + qDebug() << "NinjaSetArmyComMessageHandler(): ninjaErr =" << ninjaErr; } if (state.isDomainAverageInitializationValid) diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp index ea99ed3e8..7a6e7f256 100644 --- a/src/gui/surfaceInput.cpp +++ b/src/gui/surfaceInput.cpp @@ -655,10 +655,10 @@ int SurfaceInput::fetchDEMFile(QVector boundingBox, std::string demFile, ninjaArmy = NinjaInitializeArmy(); - ninjaErr = NinjaSetComMessageHandler(ninjaArmy, &comMessageHandler, this, papszOptions); + ninjaErr = NinjaSetArmyComMessageHandler(ninjaArmy, &comMessageHandler, this, papszOptions); if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetComMessageHandler(): ninjaErr =" << ninjaErr; + qDebug() << "NinjaSetArmyComMessageHandler(): ninjaErr =" << ninjaErr; } ninjaErr = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); // some errors and warnings are caught, but only as error codes, not as messages. Would need to update how we do the messaging within the various SurfaceFetch calls themselves. CPLError( CE_Warning, ...); and CPLError( CE_Failure, ...); with return of an error code seems hard to try/catch with ninjaCom. diff --git a/src/gui/weatherModelInput.cpp b/src/gui/weatherModelInput.cpp index ca75e0ffc..409de1c77 100644 --- a/src/gui/weatherModelInput.cpp +++ b/src/gui/weatherModelInput.cpp @@ -33,7 +33,7 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) : QObject(parent), ui(ui) { - ninjaTools = NinjaMakeTools(); + initNinjaTools(); ui->pastcastGroupBox->hide(); int identifiersSize = 0; @@ -53,10 +53,14 @@ WeatherModelInput::WeatherModelInput(Ui::MainWindow* ui, QObject* parent) connect(ui->weatherModelTimeSelectAllButton, &QPushButton::clicked, this, &WeatherModelInput::weatherModelTimeSelectAllButtonClicked); connect(ui->weatherModelTimeSelectNoneButton, &QPushButton::clicked, this, &WeatherModelInput::weatherModelTimeSelectNoneButtonClicked); connect(ui->timeZoneComboBox, &QComboBox::currentTextChanged, this, &WeatherModelInput::updatePastcastDateTimeEdits); + + connect(this, &WeatherModelInput::updateProgressMessageSignal, this, &WeatherModelInput::updateProgressMessage, Qt::QueuedConnection); } void WeatherModelInput::weatherModelDownloadButtonClicked() -{ +{ + emit writeToConsoleSignal("Fetching weather model data..."); + int hours = ui->weatherModelSpinBox->value(); progress = new QProgressDialog("Fetching Forecast Data...", QString(), 0, 0, ui->centralwidget); @@ -77,7 +81,8 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() QDateTime end = ui->pastcastEndDateTimeEdit->dateTime(); future = QtConcurrent::run( - WeatherModelInput::fetchPastcastWeather, + &WeatherModelInput::fetchPastcastWeather, + this, ninjaTools, ui->weatherModelComboBox->currentText(), ui->elevationInputFileLineEdit->property("fullpath").toString(), @@ -88,7 +93,8 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() else { future = QtConcurrent::run( - WeatherModelInput::fetchForecastWeather, + &WeatherModelInput::fetchForecastWeather, + this, ninjaTools, ui->weatherModelComboBox->currentText(), ui->elevationInputFileLineEdit->property("fullpath").toString(), @@ -101,6 +107,85 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() this, &WeatherModelInput::weatherModelDownloadFinished); } +void WeatherModelInput::updateProgressMessage(const QString message) +{ + QMessageBox::critical( + nullptr, + QApplication::tr("Error"), + message + ); +// progress->setLabelText(message); +// progress->setWindowTitle(tr("Error")); +// progress->setCancelButtonText(tr("Close")); +// progress->setAutoClose(false); +// progress->setAutoReset(false); +// progress->setRange(0, 1); +// progress->setValue(progress->maximum()); +} + +static void comMessageHandler(const char *pszMessage, void *pUser) +{ + WeatherModelInput *self = static_cast(pUser); + + std::string msg = pszMessage; + if( msg.substr(msg.size()-1, 1) == "\n") + { + msg = msg.substr(0, msg.size()-1); + } + + size_t pos; + size_t startPos; + size_t endPos; + std::string clipStr; + + if( msg.find("Exception caught: ") != msg.npos || msg.find("ERROR: ") != msg.npos ) + { + if( msg.find("Exception caught: ") != msg.npos ) + { + pos = msg.find("Exception caught: "); + startPos = pos+18; + } + else // if( msg.find("ERROR: ") != msg.npos ) + { + pos = msg.find("ERROR: "); + startPos = pos+7; + } + clipStr = msg.substr(startPos); + //std::cout << "clipStr = \"" << clipStr << "\"" << std::endl; + //emit self->updateProgressMessageSignal(QString::fromStdString(clipStr)); + //emit self->writeToConsoleSignal(QString::fromStdString(clipStr)); + if( clipStr == "Cannot determine exception type." ) + { + emit self->updateProgressMessageSignal(QString::fromStdString("SurfaceFetch ended with unknown error")); + emit self->writeToConsoleSignal(QString::fromStdString("unknown SurfaceFetch error"), Qt::red); + } + else + { + emit self->updateProgressMessageSignal(QString::fromStdString("SurfaceFetch ended in error:\n"+clipStr)); + emit self->writeToConsoleSignal(QString::fromStdString("SurfaceFetch error: "+clipStr), Qt::red); + } + } + else if( msg.find("Warning: ") != msg.npos ) + { + if( msg.find("Warning: ") != msg.npos ) + { + pos = msg.find("Warning: "); + startPos = pos+9; + } + clipStr = msg.substr(startPos); + //std::cout << "clipStr = \"" << clipStr << "\"" << std::endl; + //emit self->updateProgressMessageSignal(QString::fromStdString(clipStr)); + //emit self->writeToConsoleSignal(QString::fromStdString(clipStr)); + emit self->updateProgressMessageSignal(QString::fromStdString("SurfaceFetch ended in warning:\n"+clipStr)); + emit self->writeToConsoleSignal(QString::fromStdString("SurfaceFetch warning: "+clipStr), Qt::yellow); + } + else + { + emit self->updateProgressMessageSignal(QString::fromStdString(msg)); + emit self->writeToConsoleSignal(QString::fromStdString(msg)); + } +} + int WeatherModelInput::fetchForecastWeather( NinjaToolsH* ninjaTools, const QString& modelIdentifierStr, @@ -113,7 +198,11 @@ int WeatherModelInput::fetchForecastWeather( const char* modelIdentifier = modelIdentifierTemp.constData(); const char* demFile = demFileTemp.constData(); - NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, hours); + NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, hours); // some errors and warnings are caught, but only as error codes, not as messages, for instance "ERROR 1: HTTP error code : 404", "ERROR 1: Failed to download file.", "Warning 1: Failed to download forecast, stepping back one forecast run time step.". Would need to update how we do the messaging within the various SurfaceFetch calls themselves. CPLError( CE_Warning, ...); and CPLError( CE_Failure, ...); with return of an error code seems hard to try/catch with ninjaCom. Also, a seg fault from the first available wx model somehow, need to track down what is going on with that weather model. + //NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, "fudge", demFile, hours); // getting a similar seg fault, "what(): std::exception". I think I must not be quite handling something that is being thrown + //NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, "fudge", hours); // getting a similar seg fault, "what(): std::exception", after "ERROR 4: fudge: No such file or directory". I think I must not be quite handling something that is being thrown + //NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, -1); // um, this one somehow went forward as if it was a correct value? Stepped back one, but in the end I got a single weather model data file, not the usual 2 when it steps back like that. + //NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, 0); // only works as a test for certain specific weather models, that have minimums of 3 or 6 hrs, like xxxx if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaFetchWeatherData: ninjaErr =" << ninjaErr; @@ -143,6 +232,31 @@ int WeatherModelInput::fetchPastcastWeather( startYear, startMonth, startDay, startHour, endYear, endMonth, endDay, endHour ); + //NinjaErr ninjaErr = NinjaFetchArchiveWeatherData( + // ninjaTools, "fudge", demFile, timeZone, + // startYear, startMonth, startDay, startHour, + // endYear, endMonth, endDay, endHour + // ); + //NinjaErr ninjaErr = NinjaFetchArchiveWeatherData( + // ninjaTools, modelIdentifier, "fudge", timeZone, + // startYear, startMonth, startDay, startHour, + // endYear, endMonth, endDay, endHour + // ); + //NinjaErr ninjaErr = NinjaFetchArchiveWeatherData( + // ninjaTools, modelIdentifier, demFile, "fudge", + // startYear, startMonth, startDay, startHour, + // endYear, endMonth, endDay, endHour + // ); + //NinjaErr ninjaErr = NinjaFetchArchiveWeatherData( + // ninjaTools, modelIdentifier, demFile, timeZone, + // startYear, startMonth, startDay, startHour, + // startYear-1, startMonth, startDay, startHour + // ); + //NinjaErr ninjaErr = NinjaFetchArchiveWeatherData( + // ninjaTools, modelIdentifier, demFile, timeZone, + // startYear, startMonth, startDay, startHour, + // startYear, startMonth, startDay, startHour-1 + // ); if (ninjaErr != NINJA_SUCCESS) { @@ -154,12 +268,25 @@ int WeatherModelInput::fetchPastcastWeather( void WeatherModelInput::weatherModelDownloadFinished() { - if (progress) + // get the return value of the QtConcurrent::run() function + int result = futureWatcher->future().result(); + + if(result == NINJA_SUCCESS) { - progress->close(); - progress->deleteLater(); - progress = nullptr; + emit writeToConsoleSignal("Finished fetching weather model data.", Qt::darkGreen); + + if (progress) + { + progress->close(); + progress->deleteLater(); + progress = nullptr; + } + } else + { + emit writeToConsoleSignal("Failed to fetch weather model data."); } + + // delete the futureWatcher every time, whether success or failure if (futureWatcher) { futureWatcher->deleteLater(); @@ -368,3 +495,14 @@ void WeatherModelInput::updatePastcastDateTimeEdits() ui->pastcastEndDateTimeEdit->setDateTime(demTime); } +void WeatherModelInput::initNinjaTools() +{ + ninjaTools = NinjaMakeTools(); + + char **papszOptions = NULL; + NinjaErr ninjaErr = NinjaSetToolsComMessageHandler(ninjaTools, &comMessageHandler, this, papszOptions); + if(ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaSetToolsComMessageHandler(): ninjaErr =" << ninjaErr; + } +} diff --git a/src/gui/weatherModelInput.h b/src/gui/weatherModelInput.h index 84e0eb6e9..16b19bc88 100644 --- a/src/gui/weatherModelInput.h +++ b/src/gui/weatherModelInput.h @@ -40,6 +40,7 @@ #include #include #include +#include #include class WeatherModelInput : public QObject @@ -50,6 +51,8 @@ class WeatherModelInput : public QObject signals: void updateState(); + void updateProgressMessageSignal(const QString &msg); + void writeToConsoleSignal(const QString &msg, QColor color = Qt::white); public slots: void updateTreeView(); @@ -63,6 +66,7 @@ private slots: void weatherModelGroupBoxToggled(bool toggled); void weatherModelComboBoxCurrentIndexChanged(int index); void weatherModelDownloadFinished(); + void updateProgressMessage(const QString message); private: NinjaToolsH* ninjaTools; @@ -88,19 +92,23 @@ private slots: "NBM=National Blend of Models" }; - static int fetchForecastWeather( + int fetchForecastWeather( NinjaToolsH* ninjaTools, const QString& modelIdentifierStr, const QString& demFileStr, int hours); - static int fetchPastcastWeather( + int fetchPastcastWeather( NinjaToolsH* ninjaTools, const QString& modelIdentifierStr, const QString& demFileStr, const QString& timeZoneStr, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour); + + // this function is for trying to force the static comMessageHandler() + // to be defined BEFORE the constructor call, without reorganizing the code + void initNinjaTools(); }; #endif // WEATHERMODELINPUT_H diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 8ddf584f4..a3d00c988 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -366,6 +366,7 @@ const char* ninjaArmy::fetchForecast(const char* wx_model_type, unsigned int num } catch(armyException &e) { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); return "exception"; } } diff --git a/src/ninja/ninjaTools.cpp b/src/ninja/ninjaTools.cpp index 1fa377035..4964ef58c 100644 --- a/src/ninja/ninjaTools.cpp +++ b/src/ninja/ninjaTools.cpp @@ -1,7 +1,15 @@ #include "ninjaTools.h" +/** +* @brief Default constructor. +* +*/ ninjaTools::ninjaTools() { + Com = new ninjaComClass(); + Com->runNumber = 9999; + Com->printRunNumber = false; + nomadsCount = 0; while( apszNomadsKeys[nomadsCount][0] != NULL ) { @@ -16,16 +24,83 @@ ninjaTools::ninjaTools() } } -void ninjaTools::fetchWeatherModelData(const char* modelName, const char* demFile, int hours) +/** +* @brief Destructor. +* +*/ +ninjaTools::~ninjaTools() { - wxModelInitialization *model = NULL; - model = wxModelInitializationFactory::makeWxInitializationFromId(std::string(modelName)); + if(nomadsModels) + { + for(int i = 0; i < nomadsCount; i++) + { + if(nomadsModels[i]) + { + free(nomadsModels[i]); + } + } - if (!model) { - throw std::runtime_error(std::string("Weather model not found: ") + modelName); + free(nomadsModels); } - model->fetchForecast(demFile, hours); + delete Com; +} + +/** +* @brief Copy constructor. +* +* @param An Object to copy. +*/ +/*ninjaTools::ninjaTools(const ninjaTools& A) +{ + nomadsCount = A.nomadsCount; + nomadsModels = new NomadsWxModel*[nomadsCount]; + for(int i = 0; i < nomadsCount; i++) + { + nomadsModels[i] = new NomadsWxModel( apszNomadsKeys[i][0] ); // this should ACTUALLY be something like "new NomadsWxModel( A.nomadsModels[i] )" or something like that, but I don't think it has a proper copy constructor setup. I guess just replicate the constructor for now. + } + + Com = new ninjaComClass(*A.Com); +}*/ + +/** +* @brief Equals operator. +* +* @param A Right-hand side. +* @return An Object equal to the one on the right-hand side; +*/ +/*ninjaTools& ninjaTools::operator=(ninjaTools const& A) +{ + if(&A != this) + { + // I don't even want to know where to begin for the nomadsModels here + + delete Com; + Com = new ninjaComClass(); + *Com = *A.Com; + } + return *this; +}*/ + +void ninjaTools::fetchWeatherModelData(const char* modelName, const char* demFile, int hours) +{ + try + { + wxModelInitialization *model = NULL; + + model = wxModelInitializationFactory::makeWxInitializationFromId(std::string(modelName)); + + if (!model) { + throw std::runtime_error(std::string("Weather model not found: ") + modelName); + } + + model->fetchForecast(demFile, hours); + } + catch(armyException &e) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return; + } } std::vector ninjaTools::getForecastIdentifiers() @@ -80,3 +155,37 @@ int ninjaTools::getEndHour(const char* modelIdentifier) model = wxModelInitializationFactory::makeWxInitializationFromId(modelIdentifier); return model->getEndHour(); } + +/*----------------------------------------------------------------------------- + * Ninja Communication Methods + *-----------------------------------------------------------------------------*/ + +int ninjaTools::setNinjaComMessageHandler( ninjaComMessageHandler pMsgHandler, void *pUser, + char ** papszOptions ) +{ + try + { + Com->set_messageHandler(pMsgHandler, pUser); + } + catch( ... ) + { + std::cerr << "CRITICAL: ninjaTools level ninjaComMessageHandler not set. Messages will NOT be delivered." << std::endl; + return NINJA_E_INVALID; + } + return NINJA_SUCCESS; +} + +int ninjaTools::setNinjaMultiComStream( FILE* stream, + char ** papszOptions ) +{ + try + { + Com->multiStream = stream; + } + catch( ... ) + { + std::cerr << "ERROR: ninjaTools level ninjaCom multiStream FILE pointer not set." << std::endl; + return NINJA_E_INVALID; + } + return NINJA_SUCCESS; +} diff --git a/src/ninja/ninjaTools.h b/src/ninja/ninjaTools.h index b82017ddb..4d777e128 100644 --- a/src/ninja/ninjaTools.h +++ b/src/ninja/ninjaTools.h @@ -4,10 +4,24 @@ #include "nomads_wx_init.h" #include "wxModelInitializationFactory.h" +#include "ninja_errors.h" + +#include "callbackFunctions.h" + +#include "ninjaCom.h" + class ninjaTools { public: + ninjaTools(); + ~ninjaTools(); + +// ninjaTools(const ninjaTools& A); +// ninjaTools& operator=(ninjaTools const& A); + + ninjaComClass *Com; // pointer to the ninjaTools level com handler + void fetchWeatherModelData(const char* modelName, const char* demFile, int hours); std::vector getForecastIdentifiers(); std::vector getTimeList(const char* modelName, std::string timeZone); @@ -18,6 +32,30 @@ class ninjaTools int nomadsCount; NomadsWxModel** nomadsModels; std::vector modelIdentifiers; + +public: + /*----------------------------------------------------------------------------- + * Ninja Communication Methods + *-----------------------------------------------------------------------------*/ + + /** + * \brief Set a ninjaComMessageHandler callback function to the ninjaTools level ninjaCom + * + * \param pMsgHandler A pointer to a ninjaComMessageHandler callback function. + * \param pUser A pointer to the object or context associated with the callback function. + * \return errval Returns NINJA_SUCCESS upon success + */ + int setNinjaComMessageHandler( ninjaComMessageHandler pMsgHandler, void *pUser, + char ** papszOptions = NULL); + + /** + * \brief Set a ninjaCom multi-stream FILE handle to the ninjaTools level ninjaCom + * + * \param stream A pointer to a multi-stream FILE handle/stream. + * \return errval Returns NINJA_SUCCESS upon success + */ + int setNinjaMultiComStream( FILE* stream, + char ** papszOptions = NULL); }; #endif // NINJATOOLS_H diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 8619ed2bd..859d09242 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -357,7 +357,13 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchArchiveWeatherData endUTC.date(), boost::lexical_cast(startUTC.time_of_day().hours()), boost::lexical_cast(endUTC.time_of_day().hours())); - forecastModel->fetchForecast(demFile, hours); + std::string forecastFileName = forecastModel->fetchForecast(demFile, hours); + ////std::string forecastFileName = reinterpret_cast( army )->fetchForecast(wxModelType, numNinjas, elevationFile); +// std::string forecastFileName = reinterpret_cast( army )->fetchForecast(wxModelType, nHours, elevationFile); + if(forecastFileName == "exception") + { + return NINJA_E_INVALID; + } return NINJA_SUCCESS; } @@ -529,15 +535,19 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchForecast(NinjaArmyH * army, const char* w try { model = wxModelInitializationFactory::makeWxInitializationFromId(wxModelType); - model->fetchForecast(elevationFile, nHours); + std::string forecastFileName = model->fetchForecast(elevationFile, nHours); + ////std::string forecastFileName = reinterpret_cast( army )->fetchForecast(wxModelType, numNinjas, elevationFile); +// std::string forecastFileName = reinterpret_cast( army )->fetchForecast(wxModelType, nHours, elevationFile); + if(forecastFileName == "exception") + { + return NINJA_E_INVALID; + } return NINJA_SUCCESS; } catch(armyException &e) { return NINJA_E_INVALID; } - - //return reinterpret_cast( army )->fetchForecast(wx_model_type, numNinjas, elevation_file); } /** @@ -800,7 +810,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetNumberCPUs } /** - * \brief Set a ninjaComMessageHandler callback function for simulations. + * \brief Set a ninjaComMessageHandler callback function, for message communications during simulations, to the ninjaArmy level ninjaCom. * * Allows the caller to receive status, progress, informational messages, and error * messages generated during simulations via a user-provided callback function. @@ -810,7 +820,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetNumberCPUs * \param pUser A pointer to a user-defined object or context associated with the callback function. This pointer is passed through to the callback function and allows forwarding of messages to this object or context. * \return NINJA_SUCCESS on success, non-zero otherwise. */ -WINDNINJADLL_EXPORT NinjaErr NinjaSetComMessageHandler +WINDNINJADLL_EXPORT NinjaErr NinjaSetArmyComMessageHandler ( NinjaArmyH * army, ninjaComMessageHandler pMsgHandler, void *pUser, char ** papszOptions ) { if( NULL != army ) @@ -825,14 +835,14 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetComMessageHandler } /** - * \brief Set a ninjaCom multi-stream FILE handle, for message communications during simulations. + * \brief Set a ninjaCom multi-stream FILE handle, for message communications during simulations, to the ninjaArmy level ninjaCom. * * \param army An opaque handle to a valid ninjaArmy. * \param stream A pointer to a multi-stream FILE handle/stream. If defined, ninjaCom sends ALL messages to this stream, in addition to std::cout and std::cerr. * * \return NINJA_SUCCESS on success, non-zero otherwise. */ -WINDNINJADLL_EXPORT NinjaErr NinjaSetMultiComStream +WINDNINJADLL_EXPORT NinjaErr NinjaSetArmyMultiComStream ( NinjaArmyH * army, FILE* stream, char ** papszOptions ) { if( NULL != army ) @@ -846,6 +856,53 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetMultiComStream } } +/** + * \brief Set a ninjaComMessageHandler callback function, for message communications during simulations, to the ninjaTools level ninjaCom + * + * Allows the caller to receive status, progress, informational messages, and error + * messages generated during simulations via a user-provided callback function. + * + * \param tools An opaque handle to a valid ninjaTools. + * \param pMsgHandler A pointer to a user defined ninjaComMessageHandler callback function. If defined, ninjaCom sends messages to this callback function. + * \param pUser A pointer to a user-defined object or context associated with the callback function. This pointer is passed through to the callback function and allows forwarding of messages to this object or context. + * \return NINJA_SUCCESS on success, non-zero otherwise. + */ +WINDNINJADLL_EXPORT NinjaErr NinjaSetToolsComMessageHandler + ( NinjaToolsH * tools, ninjaComMessageHandler pMsgHandler, void *pUser, char ** papszOptions ) +{ + if( NULL != tools ) + { + return reinterpret_cast( tools )->setNinjaComMessageHandler + ( pMsgHandler, pUser ); + } + else + { + return NINJA_E_NULL_PTR; + } +} + +/** + * \brief Set a ninjaCom multi-stream FILE handle, for message communications during simulations, to the ninjaTools level ninjaCom + * + * \param tools An opaque handle to a valid ninjaTools. + * \param stream A pointer to a multi-stream FILE handle/stream. If defined, ninjaCom sends ALL messages to this stream, in addition to std::cout and std::cerr. + * + * \return NINJA_SUCCESS on success, non-zero otherwise. + */ +WINDNINJADLL_EXPORT NinjaErr NinjaSetToolsMultiComStream + ( NinjaToolsH * tools, FILE* stream, char ** papszOptions ) +{ + if( NULL != tools ) + { + return reinterpret_cast( tools )->setNinjaMultiComStream + ( stream ); + } + else + { + return NULL; + } +} + /** * \brief Set the DEM to use for the simulations. * diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index d5bd1b595..a00384a42 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -156,12 +156,18 @@ typedef int NinjaErr; ( NinjaArmyH * ninjaArmy, const int nIndex, const int nCPUs, char ** options ); /* Communication */ - WINDNINJADLL_EXPORT NinjaErr NinjaSetComMessageHandler + WINDNINJADLL_EXPORT NinjaErr NinjaSetArmyComMessageHandler ( NinjaArmyH * ninjaArmy, ninjaComMessageHandler pMsgHandler, void *pUser, char ** options ); - WINDNINJADLL_EXPORT NinjaErr NinjaSetMultiComStream + WINDNINJADLL_EXPORT NinjaErr NinjaSetArmyMultiComStream ( NinjaArmyH * ninjaArmy, FILE* stream, char ** options ); + WINDNINJADLL_EXPORT NinjaErr NinjaSetToolsComMessageHandler + ( NinjaToolsH * tools, ninjaComMessageHandler pMsgHandler, void *pUser, char ** options ); + + WINDNINJADLL_EXPORT NinjaErr NinjaSetToolsMultiComStream + ( NinjaToolsH * tools, FILE* stream, char ** options ); + /* Input Parameters */ WINDNINJADLL_EXPORT NinjaErr NinjaSetInputSpeed ( NinjaArmyH * ninjaArmy, const int nIndex, const double speed, const char * units, char ** options ); From c60ae9e3362aee4a6ed0dbcca3df6d4e13bdf177 Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 16 Jan 2026 19:51:53 -0700 Subject: [PATCH 362/435] not sure when "callbackFunctions.h" started being required to get the "test_capi_domain_average_wind.c" C-API autotest function to compile correctly, that wasn't happening to me before, but I had to add it to the shared includes build directory. Maybe it worked before by accident, I'm on a new machine again. Also not sure when ninjaInit() started to get more strict, and what that might entail to the code. I think it was from commit 7a3e6cd4ecebabb0e5218097b6065e1290c1ca4c. Looks like the ninjaArmy level has the option to use default runType of "", that was dropped when adding it to the C-API. Not sure if this change to ninjaInit() changes the desired effects in the ninja phone home stuff. related to issue #582 --- autotest/api/test_capi_domain_average_wind.c | 5 +++-- src/ninja/CMakeLists.txt | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/autotest/api/test_capi_domain_average_wind.c b/autotest/api/test_capi_domain_average_wind.c index 3741f7c22..98933eb1e 100644 --- a/autotest/api/test_capi_domain_average_wind.c +++ b/autotest/api/test_capi_domain_average_wind.c @@ -38,10 +38,11 @@ int main() * Setting up the simulation */ NinjaArmyH* ninjaArmy = NULL; - const int nCPUs = 4; + const int nCPUs = 3; + const char * runType = "C-API autotest"; char ** papszOptions = NULL; NinjaErr err = 0; - err = NinjaInit(papszOptions); //initialize global singletons and environments (GDAL_DATA, etc.) + err = NinjaInit(runType, papszOptions); //initialize global singletons and environments (GDAL_DATA, etc.) if(err != NINJA_SUCCESS) { printf("NinjaInit: err = %d\n", err); diff --git a/src/ninja/CMakeLists.txt b/src/ninja/CMakeLists.txt index 03780e772..4a6d40e5c 100644 --- a/src/ninja/CMakeLists.txt +++ b/src/ninja/CMakeLists.txt @@ -172,5 +172,5 @@ install(TARGETS ninja DESTINATION lib COMPONENT libs) if(WIN32) install(TARGETS WindNinjadll DESTINATION ${lib_dest}) endif(WIN32) -install(FILES WindNinjaInputs.h ninja.h gdal_util.h windninja.h ninja_errors.h DESTINATION include COMPONENT includes) +install(FILES WindNinjaInputs.h ninja.h gdal_util.h callbackFunctions.h windninja.h ninja_errors.h DESTINATION include COMPONENT includes) From 98a3543b8bb821fe75171d09d7d640fb58b68b95 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 20 Jan 2026 10:54:14 -0700 Subject: [PATCH 363/435] Set Google Output to be selected by default --- src/gui/mainWindow.ui | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index 6c2cdffa5..b58d3092c 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -456,7 +456,7 @@ QFrame::Shadow::Sunken - 11 + 13 @@ -2757,8 +2757,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 414 - 408 + 578 + 480 @@ -2773,6 +2773,9 @@ li.checked::marker { content: "\2612"; } + + true + 0 @@ -2792,7 +2795,7 @@ li.checked::marker { content: "\2612"; } true - false + true From 3f95bc4f709c638fe70b8cce7546aa885a92c2e2 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 20 Jan 2026 17:04:12 -0700 Subject: [PATCH 364/435] Made KMZ files mutually exclusive and simplified legend, for #641 --- data/map.html | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/data/map.html b/data/map.html index 95d4a1a97..9d3438358 100755 --- a/data/map.html +++ b/data/map.html @@ -140,6 +140,7 @@ center: new L.LatLng(43.62455, -113.2971), zoom: 8 }); + const mapRectangleLayer = new L.FeatureGroup(); map.addLayer(mapRectangleLayer); @@ -204,6 +205,8 @@ rectangleDrawer.disable(); } + let activeKmzLayer = null; + async function loadKmzFromBase64(kmlData) { console.log("running LoadKmzFromBase64"); const binary = atob(kmlData); @@ -236,23 +239,26 @@ const layerName = entry.name; const legendControl = L.control({ position: 'bottomright' }); + legendControl.onAdd = function () { const container = L.DomUtil.create('div', 'kmz-legend'); - container.style.background = 'white'; - container.style.padding = '4px'; - container.style.borderRadius = '6px'; - container.style.maxWidth = '250px'; - container.innerHTML = `${layerName}
`; - - legendEntries.forEach(async (legendEntry) => { - const blob = await legendEntry.async('blob'); - const url = URL.createObjectURL(blob); - const img = new Image(); - img.src = url; - img.style.maxWidth = '80%'; - img.style.marginTop = '6px'; - container.appendChild(img); - }); + L.DomEvent.disableClickPropagation(container); + + if (legendEntries.length > 0) { + (async () => { + const legendEntry = legendEntries[0]; // Grabs only the legend + const blob = await legendEntry.async('blob'); + const url = URL.createObjectURL(blob); + + const img = new Image(); + img.src = url; + img.style.display = 'block'; + img.style.maxWidth = '150px'; + img.style.height = 'auto'; + + container.appendChild(img); + })(); + } return container; }; @@ -260,8 +266,11 @@ kmlLegendLayer.on('add', () => legendControl.addTo(map)); kmlLegendLayer.on('remove', () => legendControl.remove()); - layerControl.addOverlay(kmlLegendLayer, layerName); - kmlLegendLayer.addTo(map); + layerControl.addBaseLayer(kmlLegendLayer, layerName); + if (!activeKmzLayer) { + activeKmzLayer = kmlLegendLayer; + kmlLegendLayer.addTo(map); + } } } From e0c1c3fcdeceed4642212b8fe85577fcfc106d8e Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 20 Jan 2026 17:14:57 -0700 Subject: [PATCH 365/435] Quick fix to resolve issue with google earth state not checking properly on start up --- src/gui/appState.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/appState.cpp b/src/gui/appState.cpp index a91ecdf2c..ca3a763aa 100644 --- a/src/gui/appState.cpp +++ b/src/gui/appState.cpp @@ -113,6 +113,7 @@ void AppState::updateSurfaceInputState() ui->treeWidget->topLevelItem(1)->child(0)->setToolTip(0, "Input File Cannot be Detected"); } updateInputState(); + updateGoogleEarthOutputState(); } void AppState::updateDiurnalInputState() @@ -223,7 +224,7 @@ void AppState::updateWeatherModelInputState() void AppState::updateGoogleEarthOutputState() { - if(isGoogleEarthToggled) + if(ui->googleEarthGroupBox->isChecked()) { if(isSurfaceInputValid) { From 9ca7b1a5f014263a5444129f0e670235d4d0a1f3 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 20 Jan 2026 17:39:35 -0700 Subject: [PATCH 366/435] got the GUI ninjaCom error handling to work for standard wxModel downloading, though still having problems getting PASTCAST to work, for issue #639. note that the changes to ninjaArmy.cpp were NOT required to get this to work, but I fixed it after the same manner, in case it were called for other cases/methods. --- src/gui/weatherModelInput.cpp | 34 +++++++++++++++++----------------- src/ninja/ninjaArmy.cpp | 10 ++++++++++ src/ninja/ninjaTools.cpp | 12 +++++++++++- src/ninja/windninja.cpp | 17 ++++++++++++++++- 4 files changed, 54 insertions(+), 19 deletions(-) diff --git a/src/gui/weatherModelInput.cpp b/src/gui/weatherModelInput.cpp index 409de1c77..384a62472 100644 --- a/src/gui/weatherModelInput.cpp +++ b/src/gui/weatherModelInput.cpp @@ -109,18 +109,18 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() void WeatherModelInput::updateProgressMessage(const QString message) { - QMessageBox::critical( - nullptr, - QApplication::tr("Error"), - message - ); -// progress->setLabelText(message); -// progress->setWindowTitle(tr("Error")); -// progress->setCancelButtonText(tr("Close")); -// progress->setAutoClose(false); -// progress->setAutoReset(false); -// progress->setRange(0, 1); -// progress->setValue(progress->maximum()); +// QMessageBox::critical( +// nullptr, +// QApplication::tr("Error"), +// message +// ); + progress->setLabelText(message); + progress->setWindowTitle(tr("Error")); + progress->setCancelButtonText(tr("Close")); + progress->setAutoClose(false); + progress->setAutoReset(false); + progress->setRange(0, 1); + progress->setValue(progress->maximum()); } static void comMessageHandler(const char *pszMessage, void *pUser) @@ -198,11 +198,11 @@ int WeatherModelInput::fetchForecastWeather( const char* modelIdentifier = modelIdentifierTemp.constData(); const char* demFile = demFileTemp.constData(); - NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, hours); // some errors and warnings are caught, but only as error codes, not as messages, for instance "ERROR 1: HTTP error code : 404", "ERROR 1: Failed to download file.", "Warning 1: Failed to download forecast, stepping back one forecast run time step.". Would need to update how we do the messaging within the various SurfaceFetch calls themselves. CPLError( CE_Warning, ...); and CPLError( CE_Failure, ...); with return of an error code seems hard to try/catch with ninjaCom. Also, a seg fault from the first available wx model somehow, need to track down what is going on with that weather model. - //NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, "fudge", demFile, hours); // getting a similar seg fault, "what(): std::exception". I think I must not be quite handling something that is being thrown - //NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, "fudge", hours); // getting a similar seg fault, "what(): std::exception", after "ERROR 4: fudge: No such file or directory". I think I must not be quite handling something that is being thrown - //NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, -1); // um, this one somehow went forward as if it was a correct value? Stepped back one, but in the end I got a single weather model data file, not the usual 2 when it steps back like that. - //NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, 0); // only works as a test for certain specific weather models, that have minimums of 3 or 6 hrs, like xxxx + NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, hours); // some errors and warnings are caught, but only as error codes, not as messages, for instance "ERROR 1: HTTP error code : 404", "ERROR 1: Failed to download file.", "Warning 1: Failed to download forecast, stepping back one forecast run time step.". Would need to update how we do the messaging within the various wxModelInitialization fetch calls themselves. CPLError( CE_Warning, ...); and CPLError( CE_Failure, ...); with return of an error code seems hard to try/catch with ninjaCom. + //NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, "fudge", demFile, hours); // works with proper error message, after non-caught message "ERROR 4: fudge: No such file or directory". + //NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, "fudge", hours); // works with proper error message, after non-caught message "ERROR 4: fudge: No such file or directory". + ////NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, -1); // um, this one somehow went forward as if it was a correct value? Stepped back one, but in the end I got a single weather model data file, not the usual 2 when it steps back like that. + //NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, 0); // only works as a test for certain specific weather models, that have minimums of 3 or 6 hrs, like UCAR-NDFD-CONUS-2.5-KM (currently breaking as a model, even on qt4 gui), UCAR-NAM-CONUS-12-KM (this works great as a test) if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaFetchWeatherData: ninjaErr =" << ninjaErr; diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index a3d00c988..e03ff9fdc 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -369,6 +369,16 @@ const char* ninjaArmy::fetchForecast(const char* wx_model_type, unsigned int num Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); return "exception"; } + catch( exception& e ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return "exception"; + } + catch( ... ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); + return "exception"; + } } /** * @brief Makes an army (array) of ninjas for a weather forecast run. diff --git a/src/ninja/ninjaTools.cpp b/src/ninja/ninjaTools.cpp index 4964ef58c..4c868075b 100644 --- a/src/ninja/ninjaTools.cpp +++ b/src/ninja/ninjaTools.cpp @@ -99,7 +99,17 @@ void ninjaTools::fetchWeatherModelData(const char* modelName, const char* demFil catch(armyException &e) { Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); - return; + throw; + } + catch( exception& e ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + throw; + } + catch( ... ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); + throw; } } diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 859d09242..91fa283d1 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -311,7 +311,22 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchWeatherData { if(tools != NULL) { - reinterpret_cast( tools )->fetchWeatherModelData(modelName, demFile, hours); + try + { + reinterpret_cast( tools )->fetchWeatherModelData(modelName, demFile, hours); + } + catch( armyException & e ) + { + return NINJA_E_INVALID; + } + catch( exception & e ) + { + return NINJA_E_INVALID; + } + //catch( ... ) + //{ + // return NINJA_E_INVALID; + //} return NINJA_SUCCESS; } else From fd709266c8597cf543faa1331c9922471e07e430 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 20 Jan 2026 19:15:47 -0700 Subject: [PATCH 367/435] reconfigured the C-API "if(army == NULL){ return NULL }" style, for the specific functions that I am working with for my current GUI ninjaCom error handling work. related to issues #639 and #582 --- src/ninja/windninja.cpp | 156 +++++++++++++++++++++++++++------------- 1 file changed, 106 insertions(+), 50 deletions(-) diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 91fa283d1..2524194b7 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -113,6 +113,10 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy ( NinjaArmyH * army, unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options ) { + if(!army) + { + return NINJA_E_NULL_PTR; + } #ifndef NINJAFOAM if(momentumFlag == true) @@ -191,6 +195,11 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy WINDNINJADLL_EXPORT NinjaErr NinjaMakePointArmy ( NinjaArmyH * army, int * yearList, int * monthList, int * dayList, int * hourList, int * minuteList, int timeListSize, char * timeZone, const char ** stationFileNames, int numStationFiles, char * elevationFile, bool matchPointsFlag, bool momentumFlag, char ** options) { + if(!army) + { + return NINJA_E_NULL_PTR; + } + wxStation::SetStationFormat(wxStation::newFormat); if(momentumFlag == true) { @@ -255,6 +264,11 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakePointArmy WINDNINJADLL_EXPORT NinjaErr NinjaMakeWeatherModelArmy ( NinjaArmyH * army, const char * forecastFilename, const char * timeZone, const char** inputTimeList, int size, bool momentumFlag, char ** options ) { + if(!army) + { + return NINJA_E_NULL_PTR; + } + #ifndef NINJAFOAM if(momentumFlag == true) { @@ -309,35 +323,39 @@ WINDNINJADLL_EXPORT NinjaToolsH* NinjaMakeTools() WINDNINJADLL_EXPORT NinjaErr NinjaFetchWeatherData (NinjaToolsH* tools, const char* modelName, const char* demFile, int hours) { - if(tools != NULL) + if(!tools) { - try - { - reinterpret_cast( tools )->fetchWeatherModelData(modelName, demFile, hours); - } - catch( armyException & e ) - { - return NINJA_E_INVALID; - } - catch( exception & e ) - { - return NINJA_E_INVALID; - } - //catch( ... ) - //{ - // return NINJA_E_INVALID; - //} - return NINJA_SUCCESS; + return NINJA_E_NULL_PTR; } - else + + try { - return NINJA_E_NULL_PTR; + reinterpret_cast( tools )->fetchWeatherModelData(modelName, demFile, hours); + } + catch( armyException & e ) + { + return NINJA_E_INVALID; } + catch( exception & e ) + { + return NINJA_E_INVALID; + } + //catch( ... ) + //{ + // return NINJA_E_INVALID; + //} + + return NINJA_SUCCESS; } WINDNINJADLL_EXPORT NinjaErr NinjaFetchArchiveWeatherData (NinjaToolsH* tools, const char* modelName, const char* demFile, const char* timeZone, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour) { + if(!tools) + { + return NINJA_E_NULL_PTR; + } + wxModelInitialization *model = wxModelInitializationFactory::makeWxInitializationFromId(std::string(modelName)); boost::gregorian::date startDate(startYear, startMonth, startDay); @@ -386,8 +404,10 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchArchiveWeatherData WINDNINJADLL_EXPORT const char** NinjaGetAllWeatherModelIdentifiers (NinjaToolsH* tools, int* count) { - if (!tools || !count) + if(!tools || !count) + { return nullptr; + } std::vector temp = reinterpret_cast(tools)->getForecastIdentifiers(); *count = static_cast(temp.size()); @@ -406,7 +426,7 @@ WINDNINJADLL_EXPORT const char** NinjaGetAllWeatherModelIdentifiers WINDNINJADLL_EXPORT NinjaErr NinjaFreeAllWeatherModelIdentifiers (const char** identifiers, int count) { - if (!identifiers) + if(!identifiers) { return NINJA_E_NULL_PTR; } @@ -424,8 +444,10 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFreeAllWeatherModelIdentifiers WINDNINJADLL_EXPORT const char** NinjaGetWeatherModelTimeList (NinjaToolsH* tools, int* count, const char* fileName, const char* timeZone) { - if (!tools) + if(!tools) + { return nullptr; + } std:string timeZoneString = timeZone; std::vector temp = reinterpret_cast(tools)->getTimeList(fileName, timeZoneString); @@ -445,7 +467,7 @@ WINDNINJADLL_EXPORT const char** NinjaGetWeatherModelTimeList WINDNINJADLL_EXPORT NinjaErr NinjaFreeWeatherModelTimeList (const char** timeList, int timeListSize) { - if (!timeList) + if(!timeList) { return NINJA_E_NULL_PTR; } @@ -463,8 +485,10 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFreeWeatherModelTimeList WINDNINJADLL_EXPORT NinjaErr NinjaGetWeatherModelHours (NinjaToolsH* tools, const char* modelIdentifier, int* startHour, int* endHour) { - if (!tools || !startHour || !endHour) + if(!tools || !startHour || !endHour) + { return NINJA_E_NULL_PTR; + } *startHour = reinterpret_cast(tools)->getStartHour(modelIdentifier); *endHour = reinterpret_cast(tools)->getEndHour(modelIdentifier); @@ -487,16 +511,15 @@ WINDNINJADLL_EXPORT NinjaErr NinjaGetWeatherModelHours WINDNINJADLL_EXPORT NinjaErr NinjaDestroyArmy ( NinjaArmyH * army, char ** options ) { - if( NULL != army ) - { - delete reinterpret_cast( army ); - army = NULL; - return NINJA_SUCCESS; - } - else + if(!army) { return NINJA_E_NULL_PTR; } + + delete reinterpret_cast( army ); + army = NULL; + + return NINJA_SUCCESS; } /** @@ -512,7 +535,14 @@ WINDNINJADLL_EXPORT NinjaErr NinjaDestroyArmy * * \return NINJA_SUCCESS on success, NINJA_E_INVALID otherwise. */ -WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMPoint(NinjaArmyH * army, double * adfPoint, double *adfBuff, const char* units, double dfCellSize, char * pszDstFile, char* fetchType, char ** papszOptions ){ +WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMPoint + (NinjaArmyH * army, double * adfPoint, double *adfBuff, const char* units, double dfCellSize, char * pszDstFile, char* fetchType, char ** papszOptions ) +{ + if(!army) + { + return NINJA_E_NULL_PTR; + } + return reinterpret_cast( army )->fetchDEMPoint(adfPoint, adfBuff, units, dfCellSize, pszDstFile, fetchType, papszOptions); } /** @@ -528,7 +558,15 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMPoint(NinjaArmyH * army, double * adfP * \return NINJA_SUCCESS on success, NINJA_E_INVALID otherwise. */ -WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMBBox(NinjaArmyH * army, double *boundsBox, const char *fileName, double resolution, char * fetchType, char ** papszOptions){ +WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMBBox + (NinjaArmyH * army, double *boundsBox, const char *fileName, double resolution, char * fetchType, char ** papszOptions) + +{ + if(!army) + { + return NINJA_E_NULL_PTR; + } + return reinterpret_cast( army )->fetchDEMBBox(boundsBox, fileName, resolution, fetchType); } @@ -544,8 +582,14 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMBBox(NinjaArmyH * army, double *bounds * \return Forecast file name on success, "exception" otherwise. */ -WINDNINJADLL_EXPORT NinjaErr NinjaFetchForecast(NinjaArmyH * army, const char* wxModelType, unsigned int nHours, const char * elevationFile, char ** options) +WINDNINJADLL_EXPORT NinjaErr NinjaFetchForecast + (NinjaArmyH * army, const char* wxModelType, unsigned int nHours, const char * elevationFile, char ** options) { + if(!army) + { + return NINJA_E_NULL_PTR; + } + wxModelInitialization *model; try { @@ -598,9 +642,14 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchForecast(NinjaArmyH * army, const char* w * to return the path to the file rather than a bool for success/failure. This might be the simplest for now. * */ -WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationFromBBox(const int* yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, - const char* elevationFile, double buffer, const char* units, const char* timeZone, bool fetchLatestFlag, const char* outputPath, bool locationFileFlag, char ** options) +WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationFromBBox + (const int* yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char* elevationFile, double buffer, const char* units, const char* timeZone, bool fetchLatestFlag, const char* outputPath, bool locationFileFlag, char ** options) { + //if(!tools) + //{ + // return NINJA_E_NULL_PTR; + //} + std::vector timeList; for(size_t i=0; i timeList; for(size_t i=0; i( army )->startRuns( nprocessors ); - } - catch( ... ) - { - return handleException(); - } + return NINJA_E_NULL_PTR; } - else + + try { - return NINJA_E_NULL_PTR; + return reinterpret_cast( army )->startRuns( nprocessors ); } + catch( ... ) + { + return handleException(); + } + + return NINJA_SUCCESS; } /** From a43a592c37d8b1f3b1f6866f9c93e2dcbecc04f1 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 21 Jan 2026 13:20:29 -0700 Subject: [PATCH 368/435] Changed google earth widget from group box to check box, so we can disable it for users, for #641 --- src/gui/appState.cpp | 2 +- src/gui/mainWindow.cpp | 14 +- src/gui/mainWindow.ui | 539 +++++++++++++++++++++-------------------- src/gui/outputs.cpp | 5 +- src/gui/outputs.h | 2 +- 5 files changed, 286 insertions(+), 276 deletions(-) diff --git a/src/gui/appState.cpp b/src/gui/appState.cpp index ca3a763aa..75a5f85fe 100644 --- a/src/gui/appState.cpp +++ b/src/gui/appState.cpp @@ -224,7 +224,7 @@ void AppState::updateWeatherModelInputState() void AppState::updateGoogleEarthOutputState() { - if(ui->googleEarthGroupBox->isChecked()) + if(ui->googleEarthCheckBox->isChecked()) { if(isSurfaceInputValid) { diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 568ea09b6..df489dc00 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -791,7 +791,7 @@ void MainWindow::treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column) } else if (item->text(0) == "Google Earth") { - ui->googleEarthGroupBox->setChecked(!ui->googleEarthGroupBox->isChecked()); + ui->googleEarthCheckBox->setChecked(!ui->googleEarthCheckBox->isChecked()); } else if (item->text(0) == "Fire Behavior") { @@ -1009,8 +1009,8 @@ bool MainWindow::setOutputFlags(NinjaArmyH* ninjaArmy, return false; } - ninjaErr = NinjaSetGoogOutFlag(ninjaArmy, i, ui->googleEarthGroupBox->isChecked(), papszOptions); - //ninjaErr = NinjaSetGoogOutFlag(ninjaArmy, i+10, ui->googleEarthGroupBox->isChecked(), papszOptions); // test error handling + ninjaErr = NinjaSetGoogOutFlag(ninjaArmy, i, ui->googleEarthCheckBox->isChecked(), papszOptions); + //ninjaErr = NinjaSetGoogOutFlag(ninjaArmy, i+10, ui->googleEarthCheckBox->isChecked(), papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetGoogOutFlag: ninjaErr =" << ninjaErr; @@ -1156,7 +1156,7 @@ bool MainWindow::setOutputFlags(NinjaArmyH* ninjaArmy, if(ui->rawWeatherModelOutputCheckBox->isCheckable() && ui->rawWeatherModelOutputCheckBox->isChecked()) { - ninjaErr = NinjaSetWxModelGoogOutFlag(ninjaArmy, i, ui->googleEarthGroupBox->isChecked(), papszOptions); + ninjaErr = NinjaSetWxModelGoogOutFlag(ninjaArmy, i, ui->googleEarthCheckBox->isChecked(), papszOptions); if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetWxModelGoogOutFlag: ninjaErr =" << ninjaErr; @@ -1237,7 +1237,7 @@ void MainWindow::plotKmzOutputs() // get the return value of the QtConcurrent::run() function int result = futureWatcher->future().result(); - if(result == 1 && !progressDialog->wasCanceled() && ui->googleEarthGroupBox->isChecked() == true) + if(result == 1 && !progressDialog->wasCanceled() && ui->googleEarthCheckBox->isChecked() == true) { // enable QWebInspector for degugging the google maps widget if(CSLTestBoolean(CPLGetConfigOption("ENABLE_QWEBINSPECTOR", "NO"))) @@ -1326,7 +1326,7 @@ void MainWindow::plotKmzOutputs() // if it is a weather model run, and weather model kmzs were created for the run, // plot the weather model kmz of the run - if(ui->weatherModelGroupBox->isChecked() && ui->googleEarthGroupBox->isChecked()) + if(ui->weatherModelGroupBox->isChecked() && ui->googleEarthCheckBox->isChecked()) { QString outFileStr = QString::fromStdString(weatherModelKmzFilenames[i]); qDebug() << "wx model kmz outFile =" << outFileStr; @@ -1346,7 +1346,7 @@ void MainWindow::plotKmzOutputs() printf("NinjaDestroyRunKmzFilenames: ninjaErr = %d\n", ninjaErr); } - } // if(result == 1 && !progressDialog->wasCanceled() && ui->googleEarthGroupBox->isChecked() == true) + } // if(result == 1 && !progressDialog->wasCanceled() && ui->googleEarthCheckBox->isChecked() == true) } void MainWindow::writeSettings() diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index b58d3092c..04faee745 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -742,8 +742,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 538 - 419 + 578 + 480
@@ -1355,7 +1355,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 346 + 572 661 @@ -1815,8 +1815,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 502 - 399 + 586 + 488 @@ -2770,12 +2770,48 @@ li.checked::marker { content: "\2612"; } Qt::LayoutDirection::LeftToRight - + - + + + + 0 + 0 + + + + false + + + 0 + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> +p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Version 4.0.0 requires Google Earth (KML/KMZ) files to display simulations on the map. This requirement will be removed in version 4.0.1. </p></body></html> + + + + + + false + + + Create Google Earth Files (*.kmz) + + true + + + + 0 @@ -2785,85 +2821,146 @@ li.checked::marker { content: "\2612"; } 0 - 384 + 69 - Create Google Earth Files (*.kmz) + Legend - - true - - - true - - + - + - + 0 0 - 0 - 70 + 131 + 0 - - Vectors - - - - QLayout::SizeConstraint::SetNoConstraint + + + Uniform Range - - - - Line Width: - - - - - - - 1 - - - 10.000000000000000 - - - 1.000000000000000 - - - - - - - Apply Vector Scaling - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - + + + + Equal Count + + + + + + + + Use Consistent Color Scale + + + + + + + Qt::Orientation::Horizontal + + + + 153 + 20 + + + + + +
+
+ + + + + 0 + 0 + + + + + 0 + 70 + + + + Vectors + + + + QLayout::SizeConstraint::SetNoConstraint + + + + + Line Width: + - + + + 1 + + + 10.000000000000000 + + + 1.000000000000000 + + + + + + + Apply Vector Scaling + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 114 + + + + Resolution + + + + 0 @@ -2873,15 +2970,34 @@ li.checked::marker { content: "\2612"; } 0 - 69 + 70 - Legend + Use Mesh Resolution - + + true + + + + + + false + + + 5000.000000000000000 + + + 200.000000000000000 + + + - + + + false + 0 @@ -2890,37 +3006,36 @@ li.checked::marker { content: "\2612"; } - 131 + 80 0 + + + 80 + 16777215 + + - Uniform Range + Meters - Equal Count + Feet - - - Use Consistent Color Scale - - - - - + Qt::Orientation::Horizontal - 153 + 302 20 @@ -2929,201 +3044,95 @@ li.checked::marker { content: "\2612"; } + + + + + + + + 0 + 0 + + + + + 0 + 69 + + + + Alternative Color Schemes + + + true + + + false + + - + 0 0 - - - 0 - 114 - - - - Resolution - - - - - - - 0 - 0 - - - - - 0 - 70 - - - - Use Mesh Resolution - - - true - - - - - - false - - - 5000.000000000000000 - - - 200.000000000000000 - - - - - - - false - - - - 0 - 0 - - - - - 80 - 0 - - - - - 80 - 16777215 - - - - - Meters - - - - - Feet - - - - - - - - Qt::Orientation::Horizontal - - - - 302 - 20 - - - - - - - - + + + Default + + + + + ROPGW (Red Orange Pink Green White) + + + + + Oranges + + + + + Blues + + + + + Pinks + + + + + Greens + + + + + Magic Beans + + + + + Pink to Green + + - - - - 0 - 0 - + + + Qt::Orientation::Horizontal - + - 0 - 69 + 40 + 20 - - Alternative Color Schemes - - - true - - - false - - - - - - - 0 - 0 - - - - - Default - - - - - ROPGW (Red Orange Pink Green White) - - - - - Oranges - - - - - Blues - - - - - Pinks - - - - - Greens - - - - - Magic Beans - - - - - Pink to Green - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - + diff --git a/src/gui/outputs.cpp b/src/gui/outputs.cpp index 20115f167..5935fe2dc 100644 --- a/src/gui/outputs.cpp +++ b/src/gui/outputs.cpp @@ -32,7 +32,7 @@ Outputs::Outputs(Ui::MainWindow *ui, ui->legendComboBox->setItemData(0, "equal_interval"); ui->legendComboBox->setItemData(1, "equal_color"); - connect(ui->googleEarthGroupBox, &QGroupBox::toggled, this, &Outputs::googleEarthGroupBoxToggled); + connect(ui->googleEarthCheckBox, &QCheckBox::toggled, this, &Outputs::googleEarthCheckBoxToggled); connect(ui->fireBehaviorGroupBox, &QGroupBox::toggled, this, &Outputs::fireBehaviorGroupBoxToggled); connect(ui->shapeFilesGroupBox, &QGroupBox::toggled, this, &Outputs::shapeFilesGroupBoxToggled); connect(ui->geospatialPDFFilesGroupBox, &QGroupBox::toggled, this, &Outputs::geospatialPDFFilesGroupBoxToggled); @@ -48,9 +48,10 @@ Outputs::Outputs(Ui::MainWindow *ui, connect(this, &Outputs::updateVTKState, &AppState::instance(), &AppState::updateVTKFilesOutputState); connect(ui->meshResolutionSpinBox, &QDoubleSpinBox::valueChanged, this, &Outputs::meshResolutionSpinBoxValueChanged); connect(ui->meshResolutionUnitsComboBox, &QComboBox::currentIndexChanged, this, &Outputs::meshResolutionUnitsComboBoxCurrentIndexChanged); + } -void Outputs::googleEarthGroupBoxToggled(bool checked) +void Outputs::googleEarthCheckBoxToggled(bool checked) { AppState& state = AppState::instance(); state.isGoogleEarthToggled = checked; diff --git a/src/gui/outputs.h b/src/gui/outputs.h index 83d1edad9..e87624b3a 100644 --- a/src/gui/outputs.h +++ b/src/gui/outputs.h @@ -21,7 +21,7 @@ class Outputs : public QObject void updateVTKState(); private slots: - void googleEarthGroupBoxToggled(bool checked); + void googleEarthCheckBoxToggled(bool checked); void fireBehaviorGroupBoxToggled(bool checked); void shapeFilesGroupBoxToggled(bool checked); void geospatialPDFFilesGroupBoxToggled(bool checked); From a2a44e4641c56907d02294c2298761f4440a9c8e Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 21 Jan 2026 13:25:30 -0700 Subject: [PATCH 369/435] Made buttons appear/disappear as needed on the map and fixed issue with KMZ files staying loaded, for #641 --- data/map.html | 64 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 7 deletions(-) diff --git a/data/map.html b/data/map.html index 9d3438358..dc41d26f9 100755 --- a/data/map.html +++ b/data/map.html @@ -191,9 +191,11 @@ }).addTo(mapRectangleLayer); setTimeout(() => { - map.fitBounds(rectangle.getBounds()); -}, 5000); - } + map.fitBounds(rectangle.getBounds()); + }, 5000); + + showCenterControl(); + } function startRectangleDrawing() { mapRectangleLayer.clearLayers(); @@ -202,13 +204,16 @@ function stopRectangleDrawing() { mapRectangleLayer.clearLayers(); + if(!drawDEMCheck) { + hideCenterControl(); + } rectangleDrawer.disable(); } let activeKmzLayer = null; async function loadKmzFromBase64(kmlData) { - console.log("running LoadKmzFromBase64"); + clearKmzBaseLayers(); const binary = atob(kmlData); const bytes = new Uint8Array(binary.length); for (let i = 0; i < binary.length; i++) { @@ -239,6 +244,7 @@ const layerName = entry.name; const legendControl = L.control({ position: 'bottomright' }); + kmzLegendControls.push(legendControl); legendControl.onAdd = function () { const container = L.DomUtil.create('div', 'kmz-legend'); @@ -267,10 +273,17 @@ kmlLegendLayer.on('remove', () => legendControl.remove()); layerControl.addBaseLayer(kmlLegendLayer, layerName); + kmzBaseLayers.push(kmlLegendLayer); + + if (!layerControlAdded) { + layerControl.addTo(map); + layerControlAdded = true; + } + if (!activeKmzLayer) { activeKmzLayer = kmlLegendLayer; kmlLegendLayer.addTo(map); - } + } } } @@ -285,15 +298,37 @@ map.fitBounds(layer.getBounds()); }); map.fitBounds(layer.getBounds()); + showCenterControl(); }); + function showCenterControl() { + if (!centerControlAdded) { + centerControl.addTo(map); + centerControlAdded = true; + } + } + + function hideCenterControl() { + if (centerControlAdded) { + map.removeControl(centerControl); + centerControlAdded = false; + } + } + const baseMaps = {}; const overlayMaps = {}; - const layerControl = L.control.layers(baseMaps, overlayMaps).addTo(map); + const layerControl = L.control.layers(baseMaps, overlayMaps); + let layerControlAdded = false; + let drawDEMCheck = false; + + let kmzBaseLayers = []; +let kmzLegendControls = []; + L.control.scale().addTo(map); const centerControl = L.control({ position: 'topleft' }); + let centerControlAdded = false; centerControl.onAdd = function(map) { const container = L.DomUtil.create('div', 'leaflet-bar leaflet-control leaflet-control-center'); @@ -316,7 +351,22 @@ return container; }; - centerControl.addTo(map); + function clearKmzBaseLayers() { + kmzBaseLayers.forEach(layer => { + if (map.hasLayer(layer)) { + map.removeLayer(layer); + } + layerControl.removeLayer(layer); + }); + + kmzLegendControls.forEach(ctrl => { + map.removeControl(ctrl); + }); + + kmzBaseLayers = []; + kmzLegendControls = []; + activeKmzLayer = null; +} if (window.qt) { new QWebChannel(qt.webChannelTransport, channel => { From 4452a8a8cc3235cb7acf6098f74bd766e43b3fed Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 21 Jan 2026 15:03:23 -0700 Subject: [PATCH 370/435] tested old NinjaFetchForecast(), and PASTCAST, wxModel data downloading with ninjaCom GUI error handling. For issue #639, related to issue #582 ran into an issue for the first time, where having the code in the C-API rather than contained in a ninjaArmy or ninjaTools function, leads to the try/catch of the C-API being triggered within the C-API without an available ninjaCom, leading to a ninjaCom GUI error handling state, where the returned error code gets decoupled from the ninjaCom message. This leads to a situation where the error code is used to try to avoid closing or updating the QProgressDialog, but the ninjaCom message was never passed to the QProgressDialog, so the QProgressDialog gets left hanging open looking like the process is continuing indefinitely, rather than closing or displaying an error message. Trying to fix this by using the error code to update the QProgressDialog message, would then override any ninjaCom messages passed on from working cases. it looks like this decoupled ninjaCom GUI error handling state only occurs while the code isn't fully setup, and when the C-API does stuff that triggers a throw itself rather than leaving all possible throws to a called ninjaArmy or ninjaTools function. It is an annoying state to debug, but seems like once everything is fully configured, this problem should mostly go away. But to be safe, maybe having a bool to keep track of when an error message is sent to the QProgressDialog via the ninjaComMessageHandler callback function, could be used to do stuff alongside the returned error code, as a catch all method to at least let the coder know when the code is in this decoupled state. --- src/gui/weatherModelInput.cpp | 44 +++++++++++-- src/gui/weatherModelInput.h | 1 + src/ninja/ninjaArmy.cpp | 3 +- src/ninja/ninjaTools.cpp | 7 +- src/ninja/windninja.cpp | 121 +++++++++++++++++++++------------- 5 files changed, 123 insertions(+), 53 deletions(-) diff --git a/src/gui/weatherModelInput.cpp b/src/gui/weatherModelInput.cpp index 384a62472..56da9f85a 100644 --- a/src/gui/weatherModelInput.cpp +++ b/src/gui/weatherModelInput.cpp @@ -203,11 +203,33 @@ int WeatherModelInput::fetchForecastWeather( //NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, "fudge", hours); // works with proper error message, after non-caught message "ERROR 4: fudge: No such file or directory". ////NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, -1); // um, this one somehow went forward as if it was a correct value? Stepped back one, but in the end I got a single weather model data file, not the usual 2 when it steps back like that. //NinjaErr ninjaErr = NinjaFetchWeatherData(ninjaTools, modelIdentifier, demFile, 0); // only works as a test for certain specific weather models, that have minimums of 3 or 6 hrs, like UCAR-NDFD-CONUS-2.5-KM (currently breaking as a model, even on qt4 gui), UCAR-NAM-CONUS-12-KM (this works great as a test) - if (ninjaErr != NINJA_SUCCESS) + if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaFetchWeatherData: ninjaErr =" << ninjaErr; } + /*//// try the old ninjaArmy form of fetching + ninjaArmy = nullptr; + char **papszOptions = nullptr; + + ninjaArmy = NinjaInitializeArmy(); + + NinjaErr ninjaErr = NinjaSetArmyComMessageHandler(ninjaArmy, &comMessageHandler, this, papszOptions); + if(ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaSetArmyComMessageHandler(): ninjaErr =" << ninjaErr; + } + + ninjaErr = NinjaFetchForecast(ninjaArmy, modelIdentifier, hours, demFile, papszOptions); // some errors and warnings are caught, but only as error codes, not as messages, for instance "ERROR 1: HTTP error code : 404", "ERROR 1: Failed to download file.", "Warning 1: Failed to download forecast, stepping back one forecast run time step.". Would need to update how we do the messaging within the various wxModelInitialization fetch calls themselves. CPLError( CE_Warning, ...); and CPLError( CE_Failure, ...); with return of an error code seems hard to try/catch with ninjaCom. + //ninjaErr = NinjaFetchForecast(ninjaArmy, "fudge", hours, demFile, papszOptions); // works with proper error message. + //ninjaErr = NinjaFetchForecast(ninjaArmy, modelIdentifier, hours, "fudge", papszOptions); // works with proper error message, after non-caught message "ERROR 4: fudge: No such file or directory". + //ninjaErr = NinjaFetchForecast(ninjaArmy, modelIdentifier, -1, demFile, papszOptions); // um, this one somehow went forward as if it was a correct value? Stepped back one, but in the end I got a single weather model data file, not the usual 2 when it steps back like that. + //ninjaErr = NinjaFetchForecast(ninjaArmy, modelIdentifier, 0, demFile, papszOptions); // only works as a test for certain specific weather models, that have minimums of 3 or 6 hrs, like UCAR-NDFD-CONUS-2.5-KM (currently breaking as a model, even on qt4 gui, but does seem to work for this test here this time), UCAR-NAM-CONUS-12-KM (this works great as a test) + if(ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaFetchForecast: ninjaErr =" << ninjaErr; + }*/ + return ninjaErr; } @@ -231,32 +253,32 @@ int WeatherModelInput::fetchPastcastWeather( ninjaTools, modelIdentifier, demFile, timeZone, startYear, startMonth, startDay, startHour, endYear, endMonth, endDay, endHour - ); + ); // when run without authentication keys, I get the authentication key error when running this, which is correct. However, after I set the authentication keys as in qt4, it acts like it wants to run, but it just hangs there forever. //NinjaErr ninjaErr = NinjaFetchArchiveWeatherData( // ninjaTools, "fudge", demFile, timeZone, // startYear, startMonth, startDay, startHour, // endYear, endMonth, endDay, endHour - // ); + // ); // I think that I need to move the fetch stuff, from the C-API, to ninjaTools, it is dying within the C-API and so not propagating the error message. //NinjaErr ninjaErr = NinjaFetchArchiveWeatherData( // ninjaTools, modelIdentifier, "fudge", timeZone, // startYear, startMonth, startDay, startHour, // endYear, endMonth, endDay, endHour - // ); + // ); // works with proper error message, after non-caught message "ERROR 4: fudge: No such file or directory". //NinjaErr ninjaErr = NinjaFetchArchiveWeatherData( // ninjaTools, modelIdentifier, demFile, "fudge", // startYear, startMonth, startDay, startHour, // endYear, endMonth, endDay, endHour - // ); + // ); // it acts like it wants to run, but it just hangs there forever. //NinjaErr ninjaErr = NinjaFetchArchiveWeatherData( // ninjaTools, modelIdentifier, demFile, timeZone, // startYear, startMonth, startDay, startHour, // startYear-1, startMonth, startDay, startHour - // ); + // ); // it acts like it wants to run, but it just hangs there forever. //NinjaErr ninjaErr = NinjaFetchArchiveWeatherData( // ninjaTools, modelIdentifier, demFile, timeZone, // startYear, startMonth, startDay, startHour, // startYear, startMonth, startDay, startHour-1 - // ); + // ); // it acts like it wants to run, but it just hangs there forever. if (ninjaErr != NINJA_SUCCESS) { @@ -284,6 +306,14 @@ void WeatherModelInput::weatherModelDownloadFinished() } else { emit writeToConsoleSignal("Failed to fetch weather model data."); + + /*//// if trying out the ninjaArmy form + char **papszOptions = nullptr; + int ninjaErr = NinjaDestroyArmy(ninjaArmy, papszOptions); + if(ninjaErr != NINJA_SUCCESS) + { + printf("NinjaDestroyRuns: ninjaErr = %d\n", ninjaErr); + }*/ } // delete the futureWatcher every time, whether success or failure diff --git a/src/gui/weatherModelInput.h b/src/gui/weatherModelInput.h index 16b19bc88..2c5cb9294 100644 --- a/src/gui/weatherModelInput.h +++ b/src/gui/weatherModelInput.h @@ -70,6 +70,7 @@ private slots: private: NinjaToolsH* ninjaTools; + //NinjaArmyH* ninjaArmy; // if trying out the old ninjaArmy form of fetching Ui::MainWindow *ui; QFileSystemModel *fileModel; diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index e03ff9fdc..c1820680a 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -358,7 +358,8 @@ const char* ninjaArmy::fetchForecast(const char* wx_model_type, unsigned int num try { model = wxModelInitializationFactory::makeWxInitializationFromId(wx_model_type); - std::string forecastFileName = model->fetchForecast(elevation_file, numNinjas-2); +// std::string forecastFileName = model->fetchForecast(elevation_file, numNinjas-2); // why the heck was this -2?? Threw it off for my case + std::string forecastFileName = model->fetchForecast(elevation_file, numNinjas); delete model; char* cstr = new char[forecastFileName.length() + 1]; std::strcpy(cstr, forecastFileName.c_str()); diff --git a/src/ninja/ninjaTools.cpp b/src/ninja/ninjaTools.cpp index 4c868075b..bb582a3ee 100644 --- a/src/ninja/ninjaTools.cpp +++ b/src/ninja/ninjaTools.cpp @@ -94,7 +94,12 @@ void ninjaTools::fetchWeatherModelData(const char* modelName, const char* demFil throw std::runtime_error(std::string("Weather model not found: ") + modelName); } - model->fetchForecast(demFile, hours); + std::string forecastFileName = model->fetchForecast(demFile, hours); + if(forecastFileName == "exception") + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: ninjaTools::fetchWeatherModelData() returned an invalid forecastFileName."); + return NINJA_E_INVALID; + } } catch(armyException &e) { diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 2524194b7..db7457676 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -356,47 +356,67 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchArchiveWeatherData return NINJA_E_NULL_PTR; } - wxModelInitialization *model = wxModelInitializationFactory::makeWxInitializationFromId(std::string(modelName)); - - boost::gregorian::date startDate(startYear, startMonth, startDay); - boost::gregorian::date endDate(endYear, endMonth, endDay); - - boost::local_time::tz_database tz_db; - tz_db.load_from_file( FindDataPath("date_time_zonespec.csv") ); - boost::local_time::time_zone_ptr timeZonePtr; - timeZonePtr = tz_db.time_zone_from_region(timeZone); - - boost::local_time::local_date_time ldtStart( - startDate, - boost::posix_time::hours(startHour), - timeZonePtr, - boost::local_time::local_date_time::NOT_DATE_TIME_ON_ERROR - ); - - boost::local_time::local_date_time ldtEnd( - endDate, - boost::posix_time::hours(endHour), - timeZonePtr, - boost::local_time::local_date_time::NOT_DATE_TIME_ON_ERROR - ); - - boost::posix_time::ptime startUTC = ldtStart.utc_time(); - boost::posix_time::ptime endUTC = ldtEnd.utc_time(); - - int hours = 0; - - auto* forecastModel = dynamic_cast(model); - forecastModel->setDateTime(startUTC.date(), - endUTC.date(), - boost::lexical_cast(startUTC.time_of_day().hours()), - boost::lexical_cast(endUTC.time_of_day().hours())); - std::string forecastFileName = forecastModel->fetchForecast(demFile, hours); - ////std::string forecastFileName = reinterpret_cast( army )->fetchForecast(wxModelType, numNinjas, elevationFile); -// std::string forecastFileName = reinterpret_cast( army )->fetchForecast(wxModelType, nHours, elevationFile); - if(forecastFileName == "exception") + try + { + wxModelInitialization *model = wxModelInitializationFactory::makeWxInitializationFromId(std::string(modelName)); + + boost::gregorian::date startDate(startYear, startMonth, startDay); + boost::gregorian::date endDate(endYear, endMonth, endDay); + + boost::local_time::tz_database tz_db; + tz_db.load_from_file( FindDataPath("date_time_zonespec.csv") ); + boost::local_time::time_zone_ptr timeZonePtr; + timeZonePtr = tz_db.time_zone_from_region(timeZone); + + boost::local_time::local_date_time ldtStart( + startDate, + boost::posix_time::hours(startHour), + timeZonePtr, + boost::local_time::local_date_time::NOT_DATE_TIME_ON_ERROR + ); + + boost::local_time::local_date_time ldtEnd( + endDate, + boost::posix_time::hours(endHour), + timeZonePtr, + boost::local_time::local_date_time::NOT_DATE_TIME_ON_ERROR + ); + + boost::posix_time::ptime startUTC = ldtStart.utc_time(); + boost::posix_time::ptime endUTC = ldtEnd.utc_time(); + + int hours = 0; + + auto* forecastModel = dynamic_cast(model); + forecastModel->setDateTime(startUTC.date(), + endUTC.date(), + boost::lexical_cast(startUTC.time_of_day().hours()), + boost::lexical_cast(endUTC.time_of_day().hours())); + + // doing it this way loses access to ninjaCom, which means that the QProgressDialog + // is left hanging as if it is still processing. Need to use the other method for now. + //std::string forecastFileName = forecastModel->fetchForecast(demFile, hours); + //if(forecastFileName == "exception") + //{ + // return NINJA_E_INVALID; + //} + + // doing it this way, lets it access ninjaCom, but loses the above information + // Probably need to just move the above into a ninjaTools function, to be safer and more correct + reinterpret_cast( tools )->fetchWeatherModelData(modelName, demFile, hours); + } + catch( armyException & e ) { return NINJA_E_INVALID; } + catch( exception & e ) + { + return NINJA_E_INVALID; + } + //catch( ... ) + //{ + // return NINJA_E_INVALID; + //} return NINJA_SUCCESS; } @@ -593,20 +613,33 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchForecast wxModelInitialization *model; try { - model = wxModelInitializationFactory::makeWxInitializationFromId(wxModelType); - std::string forecastFileName = model->fetchForecast(elevationFile, nHours); - ////std::string forecastFileName = reinterpret_cast( army )->fetchForecast(wxModelType, numNinjas, elevationFile); -// std::string forecastFileName = reinterpret_cast( army )->fetchForecast(wxModelType, nHours, elevationFile); + // doing it this way loses access to ninjaCom, which means that the QProgressDialog + // is left hanging as if it is still processing. Need to use the other method for now. + // this is even more especially true, when trying to force errors, like "fudge" thrown into wxModelType + //model = wxModelInitializationFactory::makeWxInitializationFromId(wxModelType); + //std::string forecastFileName = model->fetchForecast(elevationFile, nHours); + + // doing it this way, lets it access ninjaCom, but potentially loses the above information + // but for this particular case, the above IS the same thing as this function call, so not losing any of the above information + std::string forecastFileName = reinterpret_cast( army )->fetchForecast(wxModelType, nHours, elevationFile); // numNinjas is equivalent to nHours, probably should update the variable names of this function to be clearer if(forecastFileName == "exception") { return NINJA_E_INVALID; } - return NINJA_SUCCESS; } - catch(armyException &e) + catch( armyException & e ) + { + return NINJA_E_INVALID; + } + catch( exception & e ) { return NINJA_E_INVALID; } + //catch( ... ) + //{ + // return NINJA_E_INVALID; + //} + return NINJA_SUCCESS; } /** From a9d1fb64577750d8e3204380077118a48a80d186 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 21 Jan 2026 15:33:18 -0700 Subject: [PATCH 371/435] For time series runs, weather model and point, we include the date and time of the run on the map as well, for #641 --- data/map.html | 36 +++++++++++++++++++++++++++++++++++- src/gui/mainWindow.cpp | 6 +++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/data/map.html b/data/map.html index dc41d26f9..9441b70b7 100755 --- a/data/map.html +++ b/data/map.html @@ -81,6 +81,19 @@ background: #0077ff; color: white; } + .leaflet-topcenter { + position: absolute; + top: 10px; + left: 50%; + transform: translateX(-50%); + z-index: 1000; + pointer-events: none; /* optional, avoids interfering with map clicks */ +} + +.kmz-top-center-legend img { + display: block; +} + @@ -212,7 +225,7 @@ let activeKmzLayer = null; - async function loadKmzFromBase64(kmlData) { + async function loadKmzFromBase64(kmlData, timeSeries) { clearKmzBaseLayers(); const binary = atob(kmlData); const bytes = new Uint8Array(binary.length); @@ -250,6 +263,7 @@ const container = L.DomUtil.create('div', 'kmz-legend'); L.DomEvent.disableClickPropagation(container); + if (legendEntries.length > 0) { (async () => { const legendEntry = legendEntries[0]; // Grabs only the legend @@ -263,6 +277,26 @@ img.style.height = 'auto'; container.appendChild(img); + + if (timeSeries && legendEntries.length > 1) { + const legendEntry2 = legendEntries[1]; + const blob2 = await legendEntry2.async('blob'); + const url2 = URL.createObjectURL(blob2); + + const img2 = new Image(); + img2.src = url2; + img2.style.position = 'absolute'; + img2.style.top = '10px'; + img2.style.left = '50%'; + img2.style.transform = 'translateX(-50%)'; + img2.style.maxWidth = '90%'; // prevents it from overflowing the map + img2.style.height = 'auto'; + img2.style.zIndex = '1000'; + img2.className = 'kmz-time-series-legend'; + + // Append directly to the map container + map.getContainer().appendChild(img2); +} })(); } diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index df489dc00..f464c69ff 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -1303,7 +1303,11 @@ void MainWindow::plotKmzOutputs() QByteArray data = outFile.readAll(); QString base64 = data.toBase64(); - webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + bool timeSeries = !ui->domainAverageGroupBox->isChecked(); + + webEngineView->page()->runJavaScript( + "loadKmzFromBase64('" + base64 + "', " + (timeSeries ? "true" : "false") + ");" + ); // if it is a point initialization run, and station kmls were created for the run, // plot the station kmls of the first run From 0399f1989f96d6b20002594525d6792a1f4dc544 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 21 Jan 2026 16:45:44 -0700 Subject: [PATCH 372/435] moved the PASTCAST wxModel data downloading, from the C-API, to a ninjaTools function, to allow ninjaCom GUI error handling. Also, fully removed the old C-API and ninjaArmy NinjaFetchForecast() function, it is now fully migrated over to ninjaTools. For issue #639 and #667, related to issue #582. The ninjaCom GUI error handling is now fully implemented and working for wxModel data downloading, including for the PASTCAST. Tests that still struggle have more to do with the underlying ninja code, properly generating the errors, than catching them now. --- src/gui/weatherModelInput.cpp | 40 ++--------- src/gui/weatherModelInput.h | 1 - src/ninja/ninjaArmy.cpp | 38 ---------- src/ninja/ninjaArmy.h | 1 - src/ninja/ninjaTools.cpp | 63 ++++++++++++++++ src/ninja/ninjaTools.h | 1 + src/ninja/windninja.cpp | 132 ++++++++-------------------------- src/ninja/windninja.h | 3 - 8 files changed, 97 insertions(+), 182 deletions(-) diff --git a/src/gui/weatherModelInput.cpp b/src/gui/weatherModelInput.cpp index 56da9f85a..4792343b0 100644 --- a/src/gui/weatherModelInput.cpp +++ b/src/gui/weatherModelInput.cpp @@ -208,28 +208,6 @@ int WeatherModelInput::fetchForecastWeather( qDebug() << "NinjaFetchWeatherData: ninjaErr =" << ninjaErr; } - /*//// try the old ninjaArmy form of fetching - ninjaArmy = nullptr; - char **papszOptions = nullptr; - - ninjaArmy = NinjaInitializeArmy(); - - NinjaErr ninjaErr = NinjaSetArmyComMessageHandler(ninjaArmy, &comMessageHandler, this, papszOptions); - if(ninjaErr != NINJA_SUCCESS) - { - qDebug() << "NinjaSetArmyComMessageHandler(): ninjaErr =" << ninjaErr; - } - - ninjaErr = NinjaFetchForecast(ninjaArmy, modelIdentifier, hours, demFile, papszOptions); // some errors and warnings are caught, but only as error codes, not as messages, for instance "ERROR 1: HTTP error code : 404", "ERROR 1: Failed to download file.", "Warning 1: Failed to download forecast, stepping back one forecast run time step.". Would need to update how we do the messaging within the various wxModelInitialization fetch calls themselves. CPLError( CE_Warning, ...); and CPLError( CE_Failure, ...); with return of an error code seems hard to try/catch with ninjaCom. - //ninjaErr = NinjaFetchForecast(ninjaArmy, "fudge", hours, demFile, papszOptions); // works with proper error message. - //ninjaErr = NinjaFetchForecast(ninjaArmy, modelIdentifier, hours, "fudge", papszOptions); // works with proper error message, after non-caught message "ERROR 4: fudge: No such file or directory". - //ninjaErr = NinjaFetchForecast(ninjaArmy, modelIdentifier, -1, demFile, papszOptions); // um, this one somehow went forward as if it was a correct value? Stepped back one, but in the end I got a single weather model data file, not the usual 2 when it steps back like that. - //ninjaErr = NinjaFetchForecast(ninjaArmy, modelIdentifier, 0, demFile, papszOptions); // only works as a test for certain specific weather models, that have minimums of 3 or 6 hrs, like UCAR-NDFD-CONUS-2.5-KM (currently breaking as a model, even on qt4 gui, but does seem to work for this test here this time), UCAR-NAM-CONUS-12-KM (this works great as a test) - if(ninjaErr != NINJA_SUCCESS) - { - qDebug() << "NinjaFetchForecast: ninjaErr =" << ninjaErr; - }*/ - return ninjaErr; } @@ -253,12 +231,12 @@ int WeatherModelInput::fetchPastcastWeather( ninjaTools, modelIdentifier, demFile, timeZone, startYear, startMonth, startDay, startHour, endYear, endMonth, endDay, endHour - ); // when run without authentication keys, I get the authentication key error when running this, which is correct. However, after I set the authentication keys as in qt4, it acts like it wants to run, but it just hangs there forever. + ); // when run without authentication keys, I get the authentication key error when running this, which is correct. And now, with authentication keys set, it is no longer hanging. If the time is too late, it acts like it finishes while failing to download a file, no error message thrown. If using a good time, it downloads successfully. This was the old qt4 gui behavior. //NinjaErr ninjaErr = NinjaFetchArchiveWeatherData( // ninjaTools, "fudge", demFile, timeZone, // startYear, startMonth, startDay, startHour, // endYear, endMonth, endDay, endHour - // ); // I think that I need to move the fetch stuff, from the C-API, to ninjaTools, it is dying within the C-API and so not propagating the error message. + // ); // works with proper error message. //NinjaErr ninjaErr = NinjaFetchArchiveWeatherData( // ninjaTools, modelIdentifier, "fudge", timeZone, // startYear, startMonth, startDay, startHour, @@ -268,17 +246,17 @@ int WeatherModelInput::fetchPastcastWeather( // ninjaTools, modelIdentifier, demFile, "fudge", // startYear, startMonth, startDay, startHour, // endYear, endMonth, endDay, endHour - // ); // it acts like it wants to run, but it just hangs there forever. + // ); // no longer hangs, but it runs successfully, I guess maybe using the timezone of the dem, rather than throwing an error for having an incorrect timezone. //NinjaErr ninjaErr = NinjaFetchArchiveWeatherData( // ninjaTools, modelIdentifier, demFile, timeZone, // startYear, startMonth, startDay, startHour, // startYear-1, startMonth, startDay, startHour - // ); // it acts like it wants to run, but it just hangs there forever. + // ); // it acts like it finishes while failing to download a file, no error message thrown. //NinjaErr ninjaErr = NinjaFetchArchiveWeatherData( // ninjaTools, modelIdentifier, demFile, timeZone, // startYear, startMonth, startDay, startHour, // startYear, startMonth, startDay, startHour-1 - // ); // it acts like it wants to run, but it just hangs there forever. + // ); // it acts like it finishes while failing to download a file, no error message thrown. if (ninjaErr != NINJA_SUCCESS) { @@ -306,14 +284,6 @@ void WeatherModelInput::weatherModelDownloadFinished() } else { emit writeToConsoleSignal("Failed to fetch weather model data."); - - /*//// if trying out the ninjaArmy form - char **papszOptions = nullptr; - int ninjaErr = NinjaDestroyArmy(ninjaArmy, papszOptions); - if(ninjaErr != NINJA_SUCCESS) - { - printf("NinjaDestroyRuns: ninjaErr = %d\n", ninjaErr); - }*/ } // delete the futureWatcher every time, whether success or failure diff --git a/src/gui/weatherModelInput.h b/src/gui/weatherModelInput.h index 2c5cb9294..16b19bc88 100644 --- a/src/gui/weatherModelInput.h +++ b/src/gui/weatherModelInput.h @@ -70,7 +70,6 @@ private slots: private: NinjaToolsH* ninjaTools; - //NinjaArmyH* ninjaArmy; // if trying out the old ninjaArmy form of fetching Ui::MainWindow *ui; QFileSystemModel *fileModel; diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index c1820680a..29b9bc2c4 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -343,44 +343,6 @@ int ninjaArmy::fetchDEMBBox(double *boundsBox, const char *fileName, double reso return NINJA_SUCCESS; } -/** - * @brief Fetches a forecast file from UCAR/THREDDS server. - * - * @param wx_model_type Type of weather model. - * @param numNinjas Number of ninjas. - * @param elevation_file Name of elevation file. - * - * @return Name of forecast file. - */ -const char* ninjaArmy::fetchForecast(const char* wx_model_type, unsigned int numNinjas, const char* elevation_file) -{ - wxModelInitialization *model; - try - { - model = wxModelInitializationFactory::makeWxInitializationFromId(wx_model_type); -// std::string forecastFileName = model->fetchForecast(elevation_file, numNinjas-2); // why the heck was this -2?? Threw it off for my case - std::string forecastFileName = model->fetchForecast(elevation_file, numNinjas); - delete model; - char* cstr = new char[forecastFileName.length() + 1]; - std::strcpy(cstr, forecastFileName.c_str()); - return cstr; - } - catch(armyException &e) - { - Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); - return "exception"; - } - catch( exception& e ) - { - Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); - return "exception"; - } - catch( ... ) - { - Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); - return "exception"; - } -} /** * @brief Makes an army (array) of ninjas for a weather forecast run. * diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 9e7e9f879..a659d18f9 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -163,7 +163,6 @@ class ninjaArmy std::vector toBoostLocal(std::vector in, std::string timeZone); int fetchDEMPoint(double * adfPoint, double *adfBuff, const char* units, double dfCellSize, const char * pszDstFile, const char* fetchType, char ** papszOptions); int fetchDEMBBox(double *boundsBox, const char *fileName, double resolution, const char* fetchType); - const char* fetchForecast(const char* wx_model_type, unsigned int forecastDuration, const char* elevation_file); void set_writeFarsiteAtmFile(bool flag); bool startRuns(int numProcessors); bool startFirstRun(); diff --git a/src/ninja/ninjaTools.cpp b/src/ninja/ninjaTools.cpp index bb582a3ee..4b373420f 100644 --- a/src/ninja/ninjaTools.cpp +++ b/src/ninja/ninjaTools.cpp @@ -118,6 +118,69 @@ void ninjaTools::fetchWeatherModelData(const char* modelName, const char* demFil } } +void ninjaTools::fetchArchiveWeatherModelData(const char* modelName, const char* demFile, const char* timeZone, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour) +{ + try + { + wxModelInitialization *model = wxModelInitializationFactory::makeWxInitializationFromId(std::string(modelName)); + + boost::gregorian::date startDate(startYear, startMonth, startDay); + boost::gregorian::date endDate(endYear, endMonth, endDay); + + boost::local_time::tz_database tz_db; + tz_db.load_from_file( FindDataPath("date_time_zonespec.csv") ); + boost::local_time::time_zone_ptr timeZonePtr; + timeZonePtr = tz_db.time_zone_from_region(timeZone); + + boost::local_time::local_date_time ldtStart( + startDate, + boost::posix_time::hours(startHour), + timeZonePtr, + boost::local_time::local_date_time::NOT_DATE_TIME_ON_ERROR + ); + + boost::local_time::local_date_time ldtEnd( + endDate, + boost::posix_time::hours(endHour), + timeZonePtr, + boost::local_time::local_date_time::NOT_DATE_TIME_ON_ERROR + ); + + boost::posix_time::ptime startUTC = ldtStart.utc_time(); + boost::posix_time::ptime endUTC = ldtEnd.utc_time(); + + int hours = 0; + + auto* forecastModel = dynamic_cast(model); + forecastModel->setDateTime(startUTC.date(), + endUTC.date(), + boost::lexical_cast(startUTC.time_of_day().hours()), + boost::lexical_cast(endUTC.time_of_day().hours())); + + std::string forecastFileName = forecastModel->fetchForecast(demFile, hours); + if(forecastFileName == "exception") + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: ninjaTools::fetchArchiveWeatherModelData() returned an invalid forecastFileName."); + return NINJA_E_INVALID; + } + } + catch(armyException &e) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + throw; + } + catch( exception& e ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + throw; + } + catch( ... ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); + throw; + } +} + std::vector ninjaTools::getForecastIdentifiers() { ncepGfsSurfInitialization gfs; diff --git a/src/ninja/ninjaTools.h b/src/ninja/ninjaTools.h index 4d777e128..314d8a130 100644 --- a/src/ninja/ninjaTools.h +++ b/src/ninja/ninjaTools.h @@ -23,6 +23,7 @@ class ninjaTools ninjaComClass *Com; // pointer to the ninjaTools level com handler void fetchWeatherModelData(const char* modelName, const char* demFile, int hours); + void fetchArchiveWeatherModelData(const char* modelName, const char* demFile, const char* timeZone, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour); std::vector getForecastIdentifiers(); std::vector getTimeList(const char* modelName, std::string timeZone); int getStartHour(const char*modelIdentifier); diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index db7457676..77c369300 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -69,6 +69,11 @@ NinjaErr handleException() extern "C" { +/** + * \brief Automatically allocate an empty ninjaArmy. + * + * \return An opaque handle to a ninjaArmy on success, NULL otherwise. + */ WINDNINJADLL_EXPORT NinjaArmyH* NinjaInitializeArmy() { NinjaArmyH* army; @@ -77,7 +82,7 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaInitializeArmy() } /** - * \brief Create a new suite of domain average windninja runs. + * \brief Generate a new suite of domain average windninja runs. * * Use this method to create a finite, known number of runs for windninja. * There are other creation methods that automatically allocate the correct @@ -107,7 +112,7 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaInitializeArmy() * \param cloudCoverUnits String indicating cloud cover units ("fraction" or "percent"), can be NULL. * \param options Key, value option pairs from the options listed above, can be NULL. * - * \return An opaque handle to a ninjaArmy on success, NULL otherwise. + * \return NINJA_SUCCESS on success, non-zero otherwise. */ WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy ( NinjaArmyH * army, unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, @@ -167,7 +172,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy } /** - * \brief Automatically allocate and generate a ninjaArmy from a weather station file. + * \brief Generate a ninjaArmy from a weather station file. * * This method will create a set of runs for windninja based on the contents of * a weather station file and list of datetimes specified by arrays of years, months, days, and hours @@ -190,7 +195,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy * \param momentumFlag A flag representing whether to use the momentum solver or not (the momentum solver is not currently supported in point initializations). Default is false. * \param options Key, value option pairs from the options listed above, can be NULL. * - * \return An opaque handle to a ninjaArmy on success, NULL otherwise. + * \return NINJA_SUCCESS on success, non-zero otherwise. */ WINDNINJADLL_EXPORT NinjaErr NinjaMakePointArmy ( NinjaArmyH * army, int * yearList, int * monthList, int * dayList, int * hourList, int * minuteList, int timeListSize, char * timeZone, const char ** stationFileNames, int numStationFiles, char * elevationFile, bool matchPointsFlag, bool momentumFlag, char ** options) @@ -241,7 +246,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakePointArmy } /** - * \brief Automatically allocate and generate a ninjaArmy from a forecast file. + * \brief Generate a ninjaArmy from a forecast file. * * This method will create a set of runs for windninja based on the contents of * the weather forecast file. One run is done for each timestep in the forecast @@ -259,7 +264,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakePointArmy * \param momentumFlag A flag representing whether to use the momentum solver or not. * \param options Key, value option pairs from the options listed above, can be NULL. * - * \return An opaque handle to a ninjaArmy on success, NULL otherwise. + * \return NINJA_SUCCESS on success, non-zero otherwise. */ WINDNINJADLL_EXPORT NinjaErr NinjaMakeWeatherModelArmy ( NinjaArmyH * army, const char * forecastFilename, const char * timeZone, const char** inputTimeList, int size, bool momentumFlag, char ** options ) @@ -313,6 +318,11 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakeWeatherModelArmy return NINJA_SUCCESS; } +/** + * \brief Automatically allocate a ninjaTools. + * + * \return An opaque handle to a ninjaTools on success, NULL otherwise. + */ WINDNINJADLL_EXPORT NinjaToolsH* NinjaMakeTools() { NinjaToolsH* army; @@ -320,6 +330,17 @@ WINDNINJADLL_EXPORT NinjaToolsH* NinjaMakeTools() return army; } +/** + * \brief Fetch Forecast file from UCAR/THREDDS server, or from NOMADS server. + * + * This method will fetch a forecast file from the UCAR/THREDDS server, also can be from the NOMADS server. + * + * \param modelName A string representing a valid weather model type (e.g. "NOMADS-HRRR-CONUS-3-KM"). + * \param demFile A valid path to an elevation file. + * \param hours Number of hours to be requested (the forecast duration). + * + * \return NINJA_SUCCESS on success, non-zero otherwise. + */ WINDNINJADLL_EXPORT NinjaErr NinjaFetchWeatherData (NinjaToolsH* tools, const char* modelName, const char* demFile, int hours) { @@ -358,52 +379,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchArchiveWeatherData try { - wxModelInitialization *model = wxModelInitializationFactory::makeWxInitializationFromId(std::string(modelName)); - - boost::gregorian::date startDate(startYear, startMonth, startDay); - boost::gregorian::date endDate(endYear, endMonth, endDay); - - boost::local_time::tz_database tz_db; - tz_db.load_from_file( FindDataPath("date_time_zonespec.csv") ); - boost::local_time::time_zone_ptr timeZonePtr; - timeZonePtr = tz_db.time_zone_from_region(timeZone); - - boost::local_time::local_date_time ldtStart( - startDate, - boost::posix_time::hours(startHour), - timeZonePtr, - boost::local_time::local_date_time::NOT_DATE_TIME_ON_ERROR - ); - - boost::local_time::local_date_time ldtEnd( - endDate, - boost::posix_time::hours(endHour), - timeZonePtr, - boost::local_time::local_date_time::NOT_DATE_TIME_ON_ERROR - ); - - boost::posix_time::ptime startUTC = ldtStart.utc_time(); - boost::posix_time::ptime endUTC = ldtEnd.utc_time(); - - int hours = 0; - - auto* forecastModel = dynamic_cast(model); - forecastModel->setDateTime(startUTC.date(), - endUTC.date(), - boost::lexical_cast(startUTC.time_of_day().hours()), - boost::lexical_cast(endUTC.time_of_day().hours())); - - // doing it this way loses access to ninjaCom, which means that the QProgressDialog - // is left hanging as if it is still processing. Need to use the other method for now. - //std::string forecastFileName = forecastModel->fetchForecast(demFile, hours); - //if(forecastFileName == "exception") - //{ - // return NINJA_E_INVALID; - //} - - // doing it this way, lets it access ninjaCom, but loses the above information - // Probably need to just move the above into a ninjaTools function, to be safer and more correct - reinterpret_cast( tools )->fetchWeatherModelData(modelName, demFile, hours); + reinterpret_cast( tools )->fetchArchiveWeatherModelData(modelName, demFile, timeZone, startYear, startMonth, startDay, startHour, endYear, endMonth, endDay, endHour); } catch( armyException & e ) { @@ -590,58 +566,6 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMBBox return reinterpret_cast( army )->fetchDEMBBox(boundsBox, fileName, resolution, fetchType); } -/** - * \brief Fetch Forecast file from UCAR/THREDDS server. - * - * This method will fetch a forecast file from the UCAR/THREDDS server. - * - * \param wx_model_type A string representing a valid weather model type (e.g. "NOMADS-HRRR-CONUS-3-KM") - * \param numNinjas Number of Ninjas - * \param elevation_file A valid path to an elevation file. - * - * \return Forecast file name on success, "exception" otherwise. - */ - -WINDNINJADLL_EXPORT NinjaErr NinjaFetchForecast - (NinjaArmyH * army, const char* wxModelType, unsigned int nHours, const char * elevationFile, char ** options) -{ - if(!army) - { - return NINJA_E_NULL_PTR; - } - - wxModelInitialization *model; - try - { - // doing it this way loses access to ninjaCom, which means that the QProgressDialog - // is left hanging as if it is still processing. Need to use the other method for now. - // this is even more especially true, when trying to force errors, like "fudge" thrown into wxModelType - //model = wxModelInitializationFactory::makeWxInitializationFromId(wxModelType); - //std::string forecastFileName = model->fetchForecast(elevationFile, nHours); - - // doing it this way, lets it access ninjaCom, but potentially loses the above information - // but for this particular case, the above IS the same thing as this function call, so not losing any of the above information - std::string forecastFileName = reinterpret_cast( army )->fetchForecast(wxModelType, nHours, elevationFile); // numNinjas is equivalent to nHours, probably should update the variable names of this function to be clearer - if(forecastFileName == "exception") - { - return NINJA_E_INVALID; - } - } - catch( armyException & e ) - { - return NINJA_E_INVALID; - } - catch( exception & e ) - { - return NINJA_E_INVALID; - } - //catch( ... ) - //{ - // return NINJA_E_INVALID; - //} - return NINJA_SUCCESS; -} - /** * \brief Fetch Station forecast files using bbox from elevation file * diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index a00384a42..fb7a71d7f 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -121,9 +121,6 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMBBox (NinjaArmyH * ninjaArmy, double * boundsBox, const char * fileName, double resolution, char * fetchType, char ** options ); - WINDNINJADLL_EXPORT NinjaErr NinjaFetchForecast - (NinjaArmyH * ninjaArmy, const char * wx_model_type, unsigned int nHours, const char * elevation_file, char ** options ); - WINDNINJADLL_EXPORT NinjaErr NinjaDestroyArmy ( NinjaArmyH * ninjaArmy, char ** options ); From 42224d3a12a505a4abedbf9472b4221b0790c8e3 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 22 Jan 2026 13:28:38 -0700 Subject: [PATCH 373/435] Fixed incorrec tutorial paths and variable name in CMake --- CMakeLists.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d552ddc0..0f56fda6a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -438,12 +438,12 @@ install(FILES ${doc_files} # Install all tutorial files set(tutorial_files - tutorials/WindNinja_tutorial1.pdf - tutorials/WindNinja_tutorial2.pdf - tutorials/WindNinja_tutorial3.pdf - tutorials/WindNinja_tutorial4.pdf) + WindNinja_tutorial1.pdf + WindNinja_tutorial2.pdf + WindNinja_tutorial3.pdf + WindNinja_tutorial4.pdf) list(TRANSFORM tutorial_files PREPEND ${PROJECT_SOURCE_DIR}/doc/tutorials/) -install(FILES ${tutorials} +install(FILES ${tutorial_files} DESTINATION share/windninja/doc/tutorials COMPONENT apps) From 9b65ec06f901fb9dedd78f5b9919eeb5328ff46a Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 22 Jan 2026 15:05:31 -0700 Subject: [PATCH 374/435] Added API function to get installed bin directory path and updated menu bar file paths accordingly --- src/gui/menuBar.cpp | 20 +++++++++++--------- src/ninja/windninja.cpp | 8 ++++++++ src/ninja/windninja.h | 1 + 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/gui/menuBar.cpp b/src/gui/menuBar.cpp index cc5336174..4b6d56de0 100755 --- a/src/gui/menuBar.cpp +++ b/src/gui/menuBar.cpp @@ -32,7 +32,9 @@ MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) : QObject(parent), ui(ui) { - dataPath = QDir(QString::fromUtf8(CPLGetConfigOption("WINDNINJA_DATA", ""))); + char ** options; + const char * tmp = NinjaFindBinDir(options); + dataPath = QDir(QString::fromUtf8(tmp)); // QMenu fileMenu "File" actions connect(ui->newProjectAction, &QAction::triggered, this, &MenuBar::newProjectActionTriggered); @@ -169,7 +171,7 @@ void MenuBar::setConfigurationOptionActionTriggered() void MenuBar::displayArcGISProGuideActionTriggered() { - QString displayFile = dataPath.absoluteFilePath("../doc/displaying_wind_vectors_in_ArcGIS_Pro.pdf"); + QString displayFile = dataPath.absoluteFilePath("../share/windninja/doc/displaying_wind_vectors_in_ArcGIS_Pro.pdf"); displayFile = QDir::cleanPath(displayFile); emit writeToConsole("Opening " + displayFile); @@ -185,7 +187,7 @@ void MenuBar::displayArcGISProGuideActionTriggered() } void MenuBar::displayTutorial1ActionTriggered() { - QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial1.pdf"); + QString displayFile = dataPath.absoluteFilePath("../share/windninja/doc/tutorials/WindNinja_tutorial1.pdf"); displayFile = QDir::cleanPath(displayFile); emit writeToConsole("Opening " + displayFile); @@ -202,7 +204,7 @@ void MenuBar::displayTutorial1ActionTriggered() void MenuBar::displayTutorial2ActionTriggered() { - QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial2.pdf"); + QString displayFile = dataPath.absoluteFilePath("../share/windninja/doc/tutorials/WindNinja_tutorial2.pdf"); displayFile = QDir::cleanPath(displayFile); emit writeToConsole("Opening " + displayFile); @@ -219,7 +221,7 @@ void MenuBar::displayTutorial2ActionTriggered() void MenuBar::displayTutorial3ActionTriggered() { - QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial3.pdf"); + QString displayFile = dataPath.absoluteFilePath("../share/windninja/doc/tutorials/WindNinja_tutorial3.pdf"); displayFile = QDir::cleanPath(displayFile); emit writeToConsole("Opening " + displayFile); @@ -236,7 +238,7 @@ void MenuBar::displayTutorial3ActionTriggered() void MenuBar::displayTutorial4ActionTriggered() { - QString displayFile = dataPath.absoluteFilePath("../doc/tutorials/WindNinja_tutorial4.pdf"); + QString displayFile = dataPath.absoluteFilePath("../share/windninja/doc/tutorials/WindNinja_tutorial4.pdf"); displayFile = QDir::cleanPath(displayFile); emit writeToConsole("Opening " + displayFile); @@ -253,7 +255,7 @@ void MenuBar::displayTutorial4ActionTriggered() void MenuBar::displayDemDownloadInstructionsActionTriggered() { - QString displayFile = dataPath.absoluteFilePath("../doc/download_elevation_file.pdf"); + QString displayFile = dataPath.absoluteFilePath("../share/windninja/doc/download_elevation_file.pdf"); displayFile = QDir::cleanPath(displayFile); emit writeToConsole("Opening " + displayFile); @@ -270,7 +272,7 @@ void MenuBar::displayDemDownloadInstructionsActionTriggered() void MenuBar::displayFetchDemInstructionsActionTriggered() { - QString displayFile = dataPath.absoluteFilePath("../doc/fetch_dem_instructions.pdf"); + QString displayFile = dataPath.absoluteFilePath("../share/windninja/doc/fetch_dem_instructions.pdf"); displayFile = QDir::cleanPath(displayFile); emit writeToConsole("Opening " + displayFile); @@ -287,7 +289,7 @@ void MenuBar::displayFetchDemInstructionsActionTriggered() void MenuBar::displayCommandLineInterfaceInstructionsActionTriggered() { - QString displayFile = dataPath.absoluteFilePath("../doc/CLI_instructions.pdf"); + QString displayFile = dataPath.absoluteFilePath("../share/windninja/doc/CLI_instructions.pdf"); displayFile = QDir::cleanPath(displayFile); emit writeToConsole("Opening " + displayFile); diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index c51b9ae13..ac7da8850 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -2751,5 +2751,13 @@ WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmz return NINJA_SUCCESS; } +WINDNINJADLL_EXPORT const char* NinjaFindBinDir(char ** papszOptions) +{ + std::string path = FindNinjaBinDir(); + char* result = static_cast(std::malloc(path.size() + 1)); + std::memcpy(result, path.c_str(), path.size() + 1); + return result; +} + } // extern "C" diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 230c10f03..c62e74484 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -392,5 +392,6 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaErr NinjaWriteBlankWxStationFile( const char * outputStationFilename, char ** papszOptions ); WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *numRuns, char*** kmzFilenames, int *numStationKmls, char*** stationKmlFilenames, char*** weatherModelKmzFilenames, char ** papszOptions); WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmzFilenames, int numStationKmls, char** stationKmlFilenames, char** weatherModelKmzFilenames, char ** papszOptions); + WINDNINJADLL_EXPORT const char* NinjaFindBinDir(char ** papszOptions); WN_C_END From 6eb13905039376c4f352bd9b9b99b22ac8956d0d Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 22 Jan 2026 16:58:55 -0700 Subject: [PATCH 375/435] Added QSpinBox and QTimeEdit widgets to domain average table and adjusted ui text --- src/gui/domainAverageInput.cpp | 40 ++++++++++++-- src/gui/domainAverageInput.h | 1 + src/gui/mainWindow.ui | 96 ++++++++++++++-------------------- 3 files changed, 77 insertions(+), 60 deletions(-) diff --git a/src/gui/domainAverageInput.cpp b/src/gui/domainAverageInput.cpp index 1e41dd036..d6a9f3455 100644 --- a/src/gui/domainAverageInput.cpp +++ b/src/gui/domainAverageInput.cpp @@ -34,10 +34,7 @@ DomainAverageInput::DomainAverageInput(Ui::MainWindow* ui, QObject* parent) : QObject(parent), ui(ui) { - ui->domainAverageTable->hideColumn(2); - ui->domainAverageTable->hideColumn(3); - ui->domainAverageTable->hideColumn(4); - ui->domainAverageTable->hideColumn(5); + setupDomainAverageTableWidgets(); ui->domainAverageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); connect(ui->inputWindHeightComboBox, &QComboBox::currentIndexChanged, this, &DomainAverageInput::windHeightComboBoxCurrentIndexChanged); @@ -204,3 +201,38 @@ void DomainAverageInput::domainAverageGroupBoxToggled() emit updateState(); } +void DomainAverageInput::setupDomainAverageTableWidgets() +{ + QTableWidget* table = ui->domainAverageTable; + int rows = table->rowCount(); + + for (int row = 0; row < rows; ++row) + { + + QDoubleSpinBox* speedSpin = new QDoubleSpinBox(table); + speedSpin->setRange(0.0, 500.0); + speedSpin->setDecimals(2); + table->setCellWidget(row, 0, speedSpin); + + QSpinBox* dirSpin = new QSpinBox(table); + dirSpin->setRange(0, 359); + table->setCellWidget(row, 1, dirSpin); + + QTimeEdit* timeEdit = new QTimeEdit(QTime::currentTime(), table); + timeEdit->setDisplayFormat("HH:mm"); + table->setCellWidget(row, 2, timeEdit); + + QDateEdit* dateEdit = new QDateEdit(QDate::currentDate(), table); + dateEdit->setCalendarPopup(true); + table->setCellWidget(row, 3, dateEdit); + + QSpinBox* cloudSpin = new QSpinBox(table); + cloudSpin->setRange(0, 100); + table->setCellWidget(row, 4, cloudSpin); + + QSpinBox* airTempSpin = new QSpinBox(table); + airTempSpin->setRange(-40, 200); + table->setCellWidget(row, 5, airTempSpin); + } +} + diff --git a/src/gui/domainAverageInput.h b/src/gui/domainAverageInput.h index 384e89178..fc873a8ee 100644 --- a/src/gui/domainAverageInput.h +++ b/src/gui/domainAverageInput.h @@ -47,6 +47,7 @@ class DomainAverageInput: public QObject DomainAverageInput(Ui::MainWindow* ui, QObject* parent = nullptr); private slots: + void setupDomainAverageTableWidgets(); void domainAverageTableCellChanged(int row, int column); void clearTableButtonClicked(); void domainAverageGroupBoxToggled(); diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index 04faee745..dfb9dce68 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -456,7 +456,7 @@ QFrame::Shadow::Sunken - 13 + 9 @@ -742,8 +742,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 578 - 480 + 538 + 419 @@ -1355,8 +1355,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 572 - 661 + 586 + 488 @@ -1475,7 +1475,7 @@ li.checked::marker { content: "\2612"; } - Table Unites: + Table Units: @@ -1562,6 +1562,19 @@ li.checked::marker { content: "\2612"; }
+ + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + @@ -1576,27 +1589,18 @@ li.checked::marker { content: "\2612"; } Clear Table - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - + + + :/cancel.png:/cancel.png - + - + 1 0 @@ -1604,7 +1608,7 @@ li.checked::marker { content: "\2612"; } 0 - 490 + 0 @@ -1616,17 +1620,23 @@ li.checked::marker { content: "\2612"; } Qt::DropAction::MoveAction - + true + + false + + + false + - 50 + 30 false - 20 + 80 80 @@ -1676,30 +1686,9 @@ li.checked::marker { content: "\2612"; } - - - - - - - - - - - - - - - - - - - - - Speed -(Select) + Speed @@ -1709,8 +1698,7 @@ li.checked::marker { content: "\2612"; } - Direction -(degrees) + Direction @@ -1723,8 +1711,7 @@ li.checked::marker { content: "\2612"; } - Time -(hh:mm) + Time @@ -1734,8 +1721,7 @@ li.checked::marker { content: "\2612"; } - Date -(mm/dd/yyyy) + Date @@ -1745,8 +1731,7 @@ li.checked::marker { content: "\2612"; } - Cloud Cover -(%) + Cloud Cover @@ -1756,8 +1741,7 @@ li.checked::marker { content: "\2612"; } - Air Temp -(Select) + Air Temp From 512e5b5edc12687b1ccbcd9e7945f8bcf3d4056d Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 22 Jan 2026 17:55:14 -0700 Subject: [PATCH 376/435] 1st attempt at extending the ninjaCom GUI error handling to point initialization, also a hint of cleanup to wxModel GUI ninjaCom error handling messages, for issue #639, related to issues #667 and #582. haven't yet set it up to properly catch all the errors with ninjaCom, I need to move the C-API functions into ninjaTools first for that, but this means messing with solve() point initialization setup functions, which have access to ninjaArmy but not yet ninjaTools, so I wanted to do that commit separate --- src/gui/mainWindow.cpp | 1 + src/gui/pointInitializationInput.cpp | 359 +++++++++++++++++++++++++-- src/gui/pointInitializationInput.h | 46 ++-- src/gui/weatherModelInput.cpp | 16 +- src/gui/weatherModelInput.h | 1 - 5 files changed, 365 insertions(+), 58 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 571b9c713..b3b19acb3 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -139,6 +139,7 @@ void MainWindow::connectSignals() connect(this, &MainWindow::writeToConsoleSignal, this, &MainWindow::writeToConsole, Qt::QueuedConnection); connect(surfaceInput, &SurfaceInput::writeToConsoleSignal, this, &MainWindow::writeToConsole, Qt::QueuedConnection); + connect(pointInitializationInput, &PointInitializationInput::writeToConsoleSignal, this, &MainWindow::writeToConsole, Qt::QueuedConnection); connect(weatherModelInput, &WeatherModelInput::writeToConsoleSignal, this, &MainWindow::writeToConsole, Qt::QueuedConnection); } diff --git a/src/gui/pointInitializationInput.cpp b/src/gui/pointInitializationInput.cpp index c2bd3e9ce..8f78af0cb 100644 --- a/src/gui/pointInitializationInput.cpp +++ b/src/gui/pointInitializationInput.cpp @@ -51,6 +51,8 @@ PointInitializationInput::PointInitializationInput(Ui::MainWindow* ui, QObject* connect(ui->pointInitializationTreeView, &QTreeView::collapsed, this, &PointInitializationInput::folderCollapsed); connect(ui->weatherStationDataTimestepsSpinBox, &QSpinBox::valueChanged, this, &PointInitializationInput::weatherStationDataTimestepsSpinBoxValueChanged); connect(this, &PointInitializationInput::updateState, &AppState::instance(), &AppState::updatePointInitializationInputState); + + connect(this, &PointInitializationInput::updateProgressMessageSignal, this, &PointInitializationInput::updateProgressMessage, Qt::QueuedConnection); } void PointInitializationInput::pointInitializationGroupBoxToggled(bool toggled) @@ -91,6 +93,15 @@ void PointInitializationInput::weatherStationDataDownloadCancelButtonClicked() void PointInitializationInput::weatherStationDataDownloadButtonClicked() { + emit writeToConsoleSignal("Fetching station data..."); + + progress = new QProgressDialog("Fetching Station Data...", QString(), 0, 0, ui->centralwidget); + progress->setWindowModality(Qt::WindowModal); + progress->setCancelButton(nullptr); + progress->setMinimumDuration(0); + progress->setAutoClose(true); + progress->show(); + QString DEMTimeZone = ui->timeZoneComboBox->currentText(); QByteArray DEMTimeZoneBytes = ui->timeZoneComboBox->currentText().toUtf8(); QDateTime start = ui->downloadBetweenDatesStartTimeDateTimeEdit->dateTime(); @@ -103,6 +114,87 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() QVector minute = {start.time().minute(), end.time().minute()}; QVector outYear(2), outMonth(2), outDay(2), outHour(2), outMinute(2); + // this one should break so hard, the code won't even know what happened + // yeah, a qt error this time, "ASSERT failure in QList::operator[]: "index out of range"" + // well, that's confusing. This breaking only happens if doing "qDebug() << outTime[1];" rather than just [0], + // comment that out and it runs to completion fine for everything, it just uses the first time for everything. + // looks like it just uses the single time, as either a latestTime or a time-series file format, + // depending on the choice of the input download type, latestTime or time-series + /*QVector year = {start.date().year(), end.date().year()}; + QVector month = {start.date().month(), end.date().month()}; + QVector day = {start.date().day(), end.date().day()}; + QVector hour = {start.time().hour(), end.time().hour()}; + QVector minute = {start.time().minute(), end.time().minute()}; + QVector outYear(1), outMonth(1), outDay(1), outHour(1), outMinute(1);*/ + + // this set will probably work fine + // yup, worked fine. The time-series became a time-series from and to the same exact time + /*QVector year = {start.date().year(), start.date().year()}; + QVector month = {start.date().month(), start.date().month()}; + QVector day = {start.date().day(), start.date().day()}; + QVector hour = {start.time().hour(), start.time().hour()}; + QVector minute = {start.time().minute(), start.time().minute()}; + QVector outYear(2), outMonth(2), outDay(2), outHour(2), outMinute(2);*/ + + // this set will probably work fine + // yup, worked fine. The time-series became a time-series from and to the same exact time + /*QVector year = {end.date().year(), end.date().year()}; + QVector month = {end.date().month(), end.date().month()}; + QVector day = {end.date().day(), end.date().day()}; + QVector hour = {end.time().hour(), end.time().hour()}; + QVector minute = {end.time().minute(), end.time().minute()}; + QVector outYear(2), outMonth(2), outDay(2), outHour(2), outMinute(2);*/ + + // should die pretty hard + // well, it runs this part fine, just dies normally when run by the later fetch, + // unless it is a latestTime fetch in which case it just uses the first time from the list + /*QVector year = {start.date().year(), start.date().year()-1}; + QVector month = {start.date().month(), start.date().month()}; + QVector day = {start.date().day(), start.date().day()}; + QVector hour = {start.time().hour(), start.time().hour()}; + QVector minute = {start.time().minute(), start.time().minute()}; + QVector outYear(2), outMonth(2), outDay(2), outHour(2), outMinute(2);*/ + + // should die pretty hard + // well, it runs this part fine, just runs normally when run by the later fetch (because the fetch SHOULD die, but does not right now for this case), + // unless it is a latestTime fetch in which case it just uses the first time from the list + /*QVector year = {start.date().year(), start.date().year()}; + QVector month = {start.date().month(), start.date().month()}; + QVector day = {start.date().day(), start.date().day()}; + QVector hour = {start.time().hour(), start.time().hour()-1}; + QVector minute = {start.time().minute(), start.time().minute()}; + QVector outYear(2), outMonth(2), outDay(2), outHour(2), outMinute(2);*/ + + // should die pretty hard + // well, it runs this part fine, just dies normally when run by the later fetch, + // unless it is a latestTime fetch in which case it just uses the first time from the list + /*QVector year = {start.date().year(), start.date().year()}; + QVector month = {start.date().month(), start.date().month()}; + QVector day = {start.date().day(), start.date().day()}; + QVector hour = {start.time().hour(), start.time().hour()-2}; // had to use 3 instead of 2 for this to work, when I was right at and close to the hour + QVector minute = {start.time().minute(), start.time().minute()}; + QVector outYear(2), outMonth(2), outDay(2), outHour(2), outMinute(2);*/ + + // should die pretty hard + // well, it runs this part fine, just dies normally when run by the later fetch, + // unless it is a latestTime fetch in which case it just uses the first time from the list + /*QVector year = {end.date().year()+1, end.date().year()}; + QVector month = {end.date().month(), end.date().month()}; + QVector day = {end.date().day(), end.date().day()}; + QVector hour = {end.time().hour(), end.time().hour()}; + QVector minute = {end.time().minute(), end.time().minute()}; + QVector outYear(2), outMonth(2), outDay(2), outHour(2), outMinute(2);*/ + + // should die pretty hard + // well, it runs this part fine, just dies normally when run by the later fetch, + // unless it is a latestTime fetch in which case it just uses the first time from the list + /*QVector year = {end.date().year(), end.date().year()}; + QVector month = {end.date().month(), end.date().month()}; + QVector day = {end.date().day(), end.date().day()}; + QVector hour = {end.time().hour()+1, end.time().hour()}; + QVector minute = {end.time().minute(), end.time().minute()}; + QVector outYear(2), outMonth(2), outDay(2), outHour(2), outMinute(2);*/ + NinjaErr ninjaErr = NinjaGetTimeList( year.data(), month.data(), day.data(), hour.data(), minute.data(), @@ -110,18 +202,84 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() outHour.data(), outMinute.data(), 2, DEMTimeZoneBytes.data() ); + //NinjaErr ninjaErr = NinjaGetTimeList( + // year.data(), month.data(), day.data(), + // hour.data(), minute.data(), + // outYear.data(), outMonth.data(), outDay.data(), + // outHour.data(), outMinute.data(), + // 1, DEMTimeZoneBytes.data() + // ); // this one shouldn't hurt anything, but want to see what happens // turns out it runs fine for latestTime downloads, just a smaller list, but it seg faults no matter what on the bbox download, probably because that is setup to expect 2 times no matter what. // now, it seg faults with an error message for non-latestTime downloads "Day of month value is out of range 1..31". + //NinjaErr ninjaErr = NinjaGetTimeList( + // year.data(), month.data(), day.data(), + // hour.data(), minute.data(), + // outYear.data(), outMonth.data(), outDay.data(), + // outHour.data(), outMinute.data(), + // 2, "fudge" + // ); // should break, but probably won't, will probably be treated like the dem timezone // turns out it breaks HARD, a smart pointer failing on assert somewhere along the pipeline, not sure if that occurs here, or later down the pipeline. Definitely a break not necessarily related directly with the dem, breaks probably because of something sized wrong because of the dem being off, or it breaks because it IS trying to read the dem even though it shouldn't. if(ninjaErr != NINJA_SUCCESS) { - printf("NinjaGetTimeList: ninjaErr = %d\n", ninjaErr); + qDebug() << "NinjaGetTimeList: ninjaErr =" << ninjaErr; + + progress->setWindowTitle(tr("Error")); + progress->setCancelButtonText("Close"); + progress->setAutoClose(false); + progress->setAutoReset(false); + progress->setRange(0, 1); + progress->setValue(progress->maximum()); + + // do cleanup before the return, similar to finishedSolve() + + //disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); + +// char **papszOptions = nullptr; +// int ninjaErr = NinjaDestroyArmy(ninjaArmy, papszOptions); +// if(ninjaErr != NINJA_SUCCESS) +// { +// printf("NinjaDestroyRuns: ninjaErr = %d\n", ninjaErr); +// } + + // clear the progress values for the next set of runs + //runProgress.clear(); + + //futureWatcher->deleteLater(); + + return; } if(ui->weatherStationDataTimeComboBox->currentIndex() == 1) // TODO: Add proper error handling for a bad time duration (someone downloads too much data) { char ** options = nullptr; + //outYear[0] = outYear[1]-2; // doing more than a year worth of time SHOULD be what triggers it, this is NOT a check on the times themselves // hrm, it returns an error code of 8, but no ninjaCom seems to be sent so it leaves it hanging without a proper message. runs fine for a latestTime simulation. + //outYear[1] = outYear[0]+2; // not sure if it can even handle when the endYear goes past the current year // same result as the above test. int ninjaErr = NinjaCheckTimeDuration(outYear.data(), outMonth.data(), outDay.data(), outHour.data(), outMinute.data(), 2, options); if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaCheckTimeDuration ninjaErr=" << ninjaErr; + + progress->setWindowTitle(tr("Error")); + progress->setCancelButtonText("Close"); + progress->setAutoClose(false); + progress->setAutoReset(false); + progress->setRange(0, 1); + progress->setValue(progress->maximum()); + + // do cleanup before the return, similar to finishedSolve() + + //disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); + +// char **papszOptions = nullptr; +// int ninjaErr = NinjaDestroyArmy(ninjaArmy, papszOptions); +// if(ninjaErr != NINJA_SUCCESS) +// { +// printf("NinjaDestroyRuns: ninjaErr = %d\n", ninjaErr); +// } + + // clear the progress values for the next set of runs + //runProgress.clear(); + + //futureWatcher->deleteLater(); + + return; } } @@ -129,20 +287,13 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() QString outputPath = ui->outputDirectoryLineEdit->text(); QString elevationFile = ui->elevationInputFileLineEdit->property("fullpath").toString(); - progress = new QProgressDialog("Fetching Station Data...", QString(), 0, 0, ui->centralwidget); - progress->setWindowModality(Qt::WindowModal); - progress->setCancelButton(nullptr); - progress->setMinimumDuration(0); - progress->setAutoClose(true); - progress->show(); - futureWatcher = new QFutureWatcher(this); QFuture future; if(ui->weatherStationDataSourceComboBox->currentIndex() == 0) { QString units = ui->downloadFromDEMComboBox->currentText(); double buffer = ui->downloadFromDEMSpinBox->value(); - future = QtConcurrent::run(&PointInitializationInput::fetchStationFromBbox, + future = QtConcurrent::run(&PointInitializationInput::fetchStationFromBbox, this, outYear, outMonth, outDay, outHour, outMinute, elevationFile, buffer, units, DEMTimeZone, fetchLatestFlag, outputPath); @@ -150,13 +301,93 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() else { QString stationList = ui->downloadFromStationIDLineEdit->text(); - future = QtConcurrent::run(&PointInitializationInput::fetchStationByName,outYear, outMonth, outDay, outHour, outMinute, + future = QtConcurrent::run(&PointInitializationInput::fetchStationByName, this, + outYear, outMonth, outDay, outHour, outMinute, elevationFile, stationList, DEMTimeZone, fetchLatestFlag, outputPath); } futureWatcher->setFuture(future); - connect(futureWatcher, &QFutureWatcher::finished,this, &PointInitializationInput::fetchStationDataFinished); + connect(futureWatcher, &QFutureWatcher::finished, this, &PointInitializationInput::fetchStationDataFinished); +} + +void PointInitializationInput::updateProgressMessage(const QString message) +{ +// QMessageBox::critical( +// nullptr, +// QApplication::tr("Error"), +// message +// ); + progress->setLabelText(message); + progress->setWindowTitle(tr("Error")); + progress->setCancelButtonText(tr("Close")); + progress->setAutoClose(false); + progress->setAutoReset(false); + progress->setRange(0, 1); + progress->setValue(progress->maximum()); +} + +static void comMessageHandler(const char *pszMessage, void *pUser) +{ + PointInitializationInput *self = static_cast(pUser); + + std::string msg = pszMessage; + if( msg.substr(msg.size()-1, 1) == "\n") + { + msg = msg.substr(0, msg.size()-1); + } + + size_t pos; + size_t startPos; + size_t endPos; + std::string clipStr; + + if( msg.find("Exception caught: ") != msg.npos || msg.find("ERROR: ") != msg.npos ) + { + if( msg.find("Exception caught: ") != msg.npos ) + { + pos = msg.find("Exception caught: "); + startPos = pos+18; + } + else // if( msg.find("ERROR: ") != msg.npos ) + { + pos = msg.find("ERROR: "); + startPos = pos+7; + } + clipStr = msg.substr(startPos); + //std::cout << "clipStr = \"" << clipStr << "\"" << std::endl; + //emit self->updateProgressMessageSignal(QString::fromStdString(clipStr)); + //emit self->writeToConsoleSignal(QString::fromStdString(clipStr)); + if( clipStr == "Cannot determine exception type." ) + { + emit self->updateProgressMessageSignal(QString::fromStdString("StationFetch ended with unknown error")); + emit self->writeToConsoleSignal(QString::fromStdString("unknown StationFetch error"), Qt::red); + } + else + { + emit self->updateProgressMessageSignal(QString::fromStdString("StationFetch ended in error:\n"+clipStr)); + emit self->writeToConsoleSignal(QString::fromStdString("StationFetch error: "+clipStr), Qt::red); + } + } + else if( msg.find("Warning: ") != msg.npos ) + { + if( msg.find("Warning: ") != msg.npos ) + { + pos = msg.find("Warning: "); + startPos = pos+9; + } + clipStr = msg.substr(startPos); + //std::cout << "clipStr = \"" << clipStr << "\"" << std::endl; + //emit self->updateProgressMessageSignal(QString::fromStdString(clipStr)); + //emit self->writeToConsoleSignal(QString::fromStdString(clipStr)); + emit self->updateProgressMessageSignal(QString::fromStdString("StationFetch ended in warning:\n"+clipStr)); + emit self->writeToConsoleSignal(QString::fromStdString("StationFetch warning: "+clipStr), Qt::yellow); + } + else + { + emit self->updateProgressMessageSignal(QString::fromStdString(msg)); + emit self->writeToConsoleSignal(QString::fromStdString(msg)); + } } int PointInitializationInput::fetchStationFromBbox(QVector year, @@ -171,6 +402,41 @@ int PointInitializationInput::fetchStationFromBbox(QVector year, bool fetchLatestFlag, QString outputPath) { + // apparently if it is a latestTime run, changing the times means nothing, they get ignored + // though looks like the values that find themselves in there before editing for a latestTime run, + // are endDateTime of current time , in UTC + // and startDateTime of current time - 1 hour, in UTC + // meaning that setting a latestTime run to a multi-time series, just runs fine and acts like a multi-time series + // hrm, when redownloading of the same type, multi-time series, but differing times, the same folder and sometimes filenames end up getting used, from the first download attempt. Seems like badly defined behavior, might be related to the stations info being a set of static variables? I'm not sure what is going on there, the inputs to the function ARE the proper updated set of times. + // hrm, in all cases, failing or otherwise, the wxStation folder ends up still getting written, does not end up getting cleaned up after the failing of the run. + + //fetchLatestFlag = TRUE; // on a single-time series, what will happen? // Turns out it runs fine, just uses the start time of the multi-time series. So kind of a useless test. + //fetchLatestFlag = FALSE; // try on a multi-time series, with good inputs or no, what will happen? // Turns out it runs fine, because the default values are a time series that is normally ignored. kind of behaves like a useful test, though that depends on how the inputs could change. + + //year[1] = year[0]-1; // throws an error as expected + //hour[1] = hour[0]-1; // apparently this test SHOULD break, but something must be up in how it is handled within the ninja code because it ends up just downloading a single dateTime, of the earliest of the two sets of times. + //hour[1] = hour[0]-2; // this one throws an error as expected, I guess just have to keep the two times a decent enough distance past enough other the wrong way to trigger the errors. + //year[0] = year[1]+1; // throws an error as expected + //hour[0] = hour[1]+1; // this one throws an error as expected, interesting that going this direction one dateTime past the other, it doesn't succeed like it does for the other direction. + //elevationFile = "fudge"; // throws error as expected, after a message of "ERROR 4: fudge: No such file or directory" + //buffer = -1; // runs fine, no error messages, just downloads the data within the area of the dem + //units = "fudge"; // runs fine, no error messages, just downloads the data within the area of the dem + //osTimeZone = "fudge"; // runs fine, no error messages, seems to just download the data assuming the timezone of the dem + + //year[0] = 9999; // throws an error as expected + //hour[0] = 9999; // throws an error as expected + //year[1] = 9999; // throws an error as expected + //hour[1] = 9999; // um, this one did NOT throw an error, but actually ran successfully, creating data as if the endTime was the same thing as the startTime + //year[0] = -1; // throws an error, and seg faults, as expected + //hour[0] = -1; // um, this one did NOT throw an error, but actually ran successfully, creating data as if the startHour was the same thing as the endHour + //year[1] = -1; // throws an error, and seg faults, as expected + //hour[1] = -1; // um, this one did NOT throw an error, but actually ran successfully, creating data as if the endHour was the same thing as the startHour + //year[0] = 0; // throws an error, and seg faults, as expected + //year[1] = 0; // throws an error, and seg faults, as expected + + qDebug() << "year[0] month[0] day[0] hour[0] minute[0] =" << year[0] << month[0] << day[0] << hour[0] << minute[0]; + qDebug() << "year[1] month[1] day[1] hour[1] minute[1] =" << year[1] << month[1] << day[1] << hour[1] << minute[1]; + char ** options = NULL; NinjaErr ninjaErr = NinjaFetchStationFromBBox( year.data(), month.data(), day.data(), @@ -182,7 +448,9 @@ int PointInitializationInput::fetchStationFromBbox(QVector year, ); if (ninjaErr != NINJA_SUCCESS) + { qDebug() << "NinjaFetchStationFromBbox: ninjaErr =" << ninjaErr; + } return ninjaErr; } @@ -198,6 +466,27 @@ int PointInitializationInput::fetchStationByName(QVector year, bool fetchLatestFlag, QString outputPath) { + //year[1] = year[0]-1; + //hour[1] = hour[0]-1; + //year[0] = year[1]+1; + //hour[0] = hour[1]+1; + //elevationFile = "fudge"; + //stationList = "fudge"; + //osTimeZone = "fudge"; + //fetchLatestFlag = TRUE; // on a single-time series, what will happen? + + //year[0] = 9999; + //hour[0] = 9999; + //year[1] = 9999; + //hour[1] = 9999; + //year[0] = -1; + //hour[0] = -1; + //year[1] = -1; + //hour[1] = -1; + //year[0] = 0; + //year[1] = 0; + //fetchLatestFlag = FALSE; // try on a multi-time series, with good inputs or no, what will happen? + char ** options = NULL; NinjaErr ninjaErr = NinjaFetchStationByName( year.data(), month.data(), day.data(), @@ -208,26 +497,42 @@ int PointInitializationInput::fetchStationByName(QVector year, ); if (ninjaErr != NINJA_SUCCESS) + { qDebug() << "NinjaFetchStationFromBbox: ninjaErr =" << ninjaErr; + } return ninjaErr; } void PointInitializationInput::fetchStationDataFinished() { - if (progress) + // get the return value of the QtConcurrent::run() function + int result = futureWatcher->future().result(); + + if(result == NINJA_SUCCESS) + { + emit writeToConsoleSignal("Finished fetching station data.", Qt::darkGreen); + + if (progress) + { + progress->close(); + progress->deleteLater(); + progress = nullptr; + } + + ui->inputsStackedWidget->setCurrentIndex(10); + + } else { - progress->close(); - progress->deleteLater(); - progress = nullptr; + emit writeToConsoleSignal("Failed to fetch station data."); } + + // delete the futureWatcher every time, whether success or failure if (futureWatcher) { futureWatcher->deleteLater(); futureWatcher = nullptr; } - - ui->inputsStackedWidget->setCurrentIndex(10); } void PointInitializationInput::weatherStationDataSourceComboBoxCurrentIndexChanged(int index) @@ -297,13 +602,13 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged(c QString recentFileSelected = stationFileSystemModel->filePath(selectedRows[i]); stationFiles.push_back(recentFileSelected); - qDebug() << "[GUI-Point] Selected file path:" << recentFileSelected; + //qDebug() << "[GUI-Point] Selected file path:" << recentFileSelected; QByteArray filePathBytes = recentFileSelected.toUtf8(); const char* filePath = filePathBytes.constData(); char** options = nullptr; int stationHeader = NinjaGetWxStationHeaderVersion(filePath, options); - qDebug() << "[GUI-Point] Station Header: " << stationHeader; + //qDebug() << "[GUI-Point] Station Header: " << stationHeader; bool timeSeriesFlag = true; if (stationHeader != 1) @@ -319,25 +624,25 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged(c OGRLayer* poLayer = hDS->GetLayer(0); poLayer->ResetReading(); qint64 lastIndex = poLayer->GetFeatureCount(); - qDebug() << "[GUI-Point] Number of Time Entries:" << lastIndex; + //qDebug() << "[GUI-Point] Number of Time Entries:" << lastIndex; OGRFeature* poFeature = poLayer->GetFeature(1); // Skip header, row 1 is first time in series QString startDateTime(poFeature->GetFieldAsString(15)); // Time should be in 15th (last) column (0-14) - qDebug() << "[GUI-Point] Station start time:" << startDateTime; + //qDebug() << "[GUI-Point] Station start time:" << startDateTime; poFeature = poLayer->GetFeature(lastIndex); // last time in series QString stopDateTime(poFeature->GetFieldAsString(15)); - qDebug() << "[GUI-Point] Station end Time:" << stopDateTime; + //qDebug() << "[GUI-Point] Station end Time:" << stopDateTime; if (startDateTime.isEmpty() && stopDateTime.isEmpty()) // No time series { - qDebug() << "[GUI-Point] File cannot be used for Time Series"; + //qDebug() << "[GUI-Point] File cannot be used for Time Series"; timeSeriesFlag = false; stationFileTypes.push_back(0); } else if (!startDateTime.isEmpty() && !stopDateTime.isEmpty()) // Some type of time series { - qDebug() << "[GUI-Point] File can be used for Time Series, suggesting time series parameters..."; + //qDebug() << "[GUI-Point] File can be used for Time Series, suggesting time series parameters..."; readStationTime(startDateTime, stopDateTime); stationFileTypes.push_back(1); } @@ -422,8 +727,8 @@ void PointInitializationInput::readStationTime(QString startDateTime, QString st maxStationTime = DEMEndTime; } - qDebug() << "[GUI-Point] Start Time (" << DEMTimeZone << "):" << minStationTime.toString(); - qDebug() << "[GUI-Point] Stop Time (" << DEMTimeZone << "):" << maxStationTime.toString(); + //qDebug() << "[GUI-Point] Start Time (" << DEMTimeZone << "):" << minStationTime.toString(); + //qDebug() << "[GUI-Point] Stop Time (" << DEMTimeZone << "):" << maxStationTime.toString(); ui->weatherStationMinTimeLabel->setText("Current Min Time: " + minStationTime.toString()); ui->weatherStationMaxTimeLabel->setText("Current Min Time: " + maxStationTime.toString()); @@ -439,7 +744,7 @@ void PointInitializationInput::readStationTime(QString startDateTime, QString st int timesteps = qMax(2, static_cast(minStationTime.secsTo(maxStationTime) / 3600)); ui->weatherStationDataTimestepsSpinBox->setValue(timesteps); - qDebug() << "[GUI-Point] Suggested Timesteps:" << timesteps; + //qDebug() << "[GUI-Point] Suggested Timesteps:" << timesteps; } void PointInitializationInput::pointInitializationSelectNoneButtonClicked() diff --git a/src/gui/pointInitializationInput.h b/src/gui/pointInitializationInput.h index b4fa77484..1bd22b3ab 100644 --- a/src/gui/pointInitializationInput.h +++ b/src/gui/pointInitializationInput.h @@ -49,9 +49,10 @@ class PointInitializationInput : public QObject PointInitializationInput(Ui::MainWindow* ui, QObject* parent = nullptr); QVector getStationFiles(); - signals: void updateState(); + void updateProgressMessageSignal(const QString &msg); + void writeToConsoleSignal(const QString &msg, QColor color = Qt::white); public slots: void updateTreeView(); @@ -69,6 +70,7 @@ private slots: void folderExpanded(const QModelIndex &index); void folderCollapsed(const QModelIndex &index); void weatherStationDataTimestepsSpinBoxValueChanged(int value); + void updateProgressMessage(const QString message); private: Ui::MainWindow *ui; @@ -83,27 +85,27 @@ private slots: QVector stationFileTypes; QVector openStationFolders; - static int fetchStationFromBbox(QVector year, - QVector month, - QVector day, - QVector hour, - QVector minute, - QString elevationFile, - double buffer, - QString units, - QString osTimeZone, - bool fetchLatestFlag, - QString outputPath); - static int fetchStationByName(QVector year, - QVector month, - QVector day, - QVector hour, - QVector minute, - QString elevationFile, - QString stationList, - QString osTimeZone, - bool fetchLatestFlag, - QString outputPath); + int fetchStationFromBbox(QVector year, + QVector month, + QVector day, + QVector hour, + QVector minute, + QString elevationFile, + double buffer, + QString units, + QString osTimeZone, + bool fetchLatestFlag, + QString outputPath); + int fetchStationByName(QVector year, + QVector month, + QVector day, + QVector hour, + QVector minute, + QString elevationFile, + QString stationList, + QString osTimeZone, + bool fetchLatestFlag, + QString outputPath); void fetchStationDataFinished(); bool readTimeSeries(QModelIndex row); void readStationTime(QString startDateTime, QString stopDateTime); diff --git a/src/gui/weatherModelInput.cpp b/src/gui/weatherModelInput.cpp index 4792343b0..3f552a1b3 100644 --- a/src/gui/weatherModelInput.cpp +++ b/src/gui/weatherModelInput.cpp @@ -61,8 +61,6 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() { emit writeToConsoleSignal("Fetching weather model data..."); - int hours = ui->weatherModelSpinBox->value(); - progress = new QProgressDialog("Fetching Forecast Data...", QString(), 0, 0, ui->centralwidget); progress->setWindowModality(Qt::WindowModal); progress->setCancelButton(nullptr); @@ -70,6 +68,8 @@ void WeatherModelInput::weatherModelDownloadButtonClicked() progress->setAutoClose(true); progress->show(); + int hours = ui->weatherModelSpinBox->value(); + futureWatcher = new QFutureWatcher(this); QFuture future; @@ -156,13 +156,13 @@ static void comMessageHandler(const char *pszMessage, void *pUser) //emit self->writeToConsoleSignal(QString::fromStdString(clipStr)); if( clipStr == "Cannot determine exception type." ) { - emit self->updateProgressMessageSignal(QString::fromStdString("SurfaceFetch ended with unknown error")); - emit self->writeToConsoleSignal(QString::fromStdString("unknown SurfaceFetch error"), Qt::red); + emit self->updateProgressMessageSignal(QString::fromStdString("WeatherModelFetch ended with unknown error")); + emit self->writeToConsoleSignal(QString::fromStdString("unknown WeatherModelFetch error"), Qt::red); } else { - emit self->updateProgressMessageSignal(QString::fromStdString("SurfaceFetch ended in error:\n"+clipStr)); - emit self->writeToConsoleSignal(QString::fromStdString("SurfaceFetch error: "+clipStr), Qt::red); + emit self->updateProgressMessageSignal(QString::fromStdString("WeatherModelFetch ended in error:\n"+clipStr)); + emit self->writeToConsoleSignal(QString::fromStdString("WeatherModelFetch error: "+clipStr), Qt::red); } } else if( msg.find("Warning: ") != msg.npos ) @@ -176,8 +176,8 @@ static void comMessageHandler(const char *pszMessage, void *pUser) //std::cout << "clipStr = \"" << clipStr << "\"" << std::endl; //emit self->updateProgressMessageSignal(QString::fromStdString(clipStr)); //emit self->writeToConsoleSignal(QString::fromStdString(clipStr)); - emit self->updateProgressMessageSignal(QString::fromStdString("SurfaceFetch ended in warning:\n"+clipStr)); - emit self->writeToConsoleSignal(QString::fromStdString("SurfaceFetch warning: "+clipStr), Qt::yellow); + emit self->updateProgressMessageSignal(QString::fromStdString("WeatherModelFetch ended in warning:\n"+clipStr)); + emit self->writeToConsoleSignal(QString::fromStdString("WeatherModelFetch warning: "+clipStr), Qt::yellow); } else { diff --git a/src/gui/weatherModelInput.h b/src/gui/weatherModelInput.h index 16b19bc88..16686cd8c 100644 --- a/src/gui/weatherModelInput.h +++ b/src/gui/weatherModelInput.h @@ -40,7 +40,6 @@ #include #include #include -#include #include class WeatherModelInput : public QObject From ee292e9693f1095bb2002624832460dc25ea2dd2 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 23 Jan 2026 11:48:24 -0700 Subject: [PATCH 377/435] Added resource file for windows icon on .exe and taskbar, for #680 --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0f56fda6a..377851fef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -324,6 +324,11 @@ if(BUILD_TESTING) add_subdirectory(autotest) endif(BUILD_TESTING) +# Add the resource files for the .exe icon +if (MSVC) + target_sources(WindNinja PRIVATE ${PROJECT_SOURCE_DIR}/wn-ms-resource.rc) +endif() + # Run windeployqt6.exe to provide all QT related DLLs if(MSVC) set(WINDEPLOYQT_EXE "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-windows/tools/Qt6/bin/windeployqt6.exe") From 551ad6407d3639c5b26520702a50e90ed97d3198 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 23 Jan 2026 15:34:15 -0700 Subject: [PATCH 378/435] Changed UI from dark mode to light mode, for #604 --- src/gui/mainWindow.cpp | 3 + src/gui/mainWindow.ui | 478 +++++++++++++++++++++++++++++++++++------ 2 files changed, 411 insertions(+), 70 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index f464c69ff..e6cbc6e56 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -92,6 +92,9 @@ MainWindow::MainWindow(QWidget *parent) ui->treeWidget->topLevelItem(2)->child(4)->setData(0, Qt::UserRole, 17); ui->treeWidget->topLevelItem(3)->setData(0, Qt::UserRole, 18); + ui->treeWidget->topLevelItem(0)->setSelected(true); + + int nCPUs = QThread::idealThreadCount(); ui->availableProcessorsTextEdit->setPlainText("Available Processors: " + QString::number(nCPUs)); ui->numberOfProcessorsSpinBox->setMaximum(nCPUs); diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index dfb9dce68..3cc522c35 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -35,6 +35,24 @@ + + + 0 + 0 + 0 + + + + + + + 246 + 245 + 244 + + + + 255 @@ -43,16 +61,43 @@ - + - 60 - 60 - 60 + 250 + 250 + 249 + + + + + + + 123 + 122 + 122 + + + + + + + 164 + 163 + 163 + + + 0 + 0 + 0 + + + + 255 @@ -62,6 +107,15 @@ + + + 0 + 0 + 0 + + + + 255 @@ -70,27 +124,108 @@ - + - 60 - 60 - 60 + 246 + 245 + 244 - + + + + 0 + 0 + 0 + + + + + + + 233 + 84 + 32 + + + + - 60 - 60 - 60 + 255 + 255 + 255 + + + + + + + 250 + 250 + 249 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 233 + 84 + 32 + + + 0 + 0 + 0 + + + + + + + 246 + 245 + 244 + + + + 255 @@ -99,16 +234,43 @@ - + + + + 250 + 250 + 249 + + + + + + + 123 + 122 + 122 + + + + - 60 - 60 - 60 + 164 + 163 + 163 + + + 0 + 0 + 0 + + + + 255 @@ -118,6 +280,15 @@ + + + 0 + 0 + 0 + + + + 255 @@ -126,50 +297,248 @@ - + - 60 - 60 - 60 + 246 + 245 + 244 - + + + + 0 + 0 + 0 + + + + + + + 233 + 84 + 32 + + + + - 60 - 60 - 60 + 255 + 255 + 255 + + + + + + + 250 + 250 + 249 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 233 + 84 + 32 + + + + 123 + 122 + 122 + + + - 60 - 60 - 60 + 246 + 245 + 244 + + + + + + + 255 + 255 + 255 + + + + + + + 250 + 250 + 249 + + + + + + + 123 + 122 + 122 + + + + + + + 164 + 163 + 163 + + + + + + + 123 + 122 + 122 + + + + + + + 255 + 255 + 255 + + + + + + + 123 + 122 + 122 - 60 - 60 - 60 + 246 + 245 + 244 - 60 - 60 - 60 + 246 + 245 + 244 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 246 + 245 + 244 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 123 + 122 + 122 + + + + + + + 233 + 84 + 32 @@ -179,6 +548,10 @@ WindNinja + + + :/wn-desktop.ico:/wn-desktop.ico + @@ -233,33 +606,6 @@ 16777215 - - - - - - - 60 - 60 - 60 - - - - - - - - - 60 - 60 - 60 - - - - - - - 12 @@ -2741,8 +3087,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 578 - 480 + 390 + 468 @@ -4784,14 +5130,6 @@ li.checked::marker { content: "\2612"; } 22 - - QMenuBar { - background-color: #818181 -} -QMenu::item:selected { - background: #3c3c3c; -} - &File From c27b4ce9ccdd7adf2cd25de75f49ba5a71cc43ed Mon Sep 17 00:00:00 2001 From: latwood Date: Fri, 23 Jan 2026 18:33:55 -0700 Subject: [PATCH 379/435] continuing 1st attempt at extending the ninjaCom GUI error handling to point initialization, by moving the C-API called functions into ninjaTools. This also led to having to add ninjaTools to the mainWindow solve() function, just for the point initialization section. For issue 639 and #667, related to issue #582 still need to test the mainWindow solve() functionality a bit more robustly, then this attempt will be done, just cleanup after that point. while the point initialization downloading now properly catches errors instead of seg faulting, or getting stuck hanging, the error messages that it is seeing aren't very informative. Not sure if this is something off with the C-API functions themselves, or the underlying ninja code, there are a few other things that are off including that the GUI likes to re-use the downloaded folders and files while stuffing them with new data rather than renaming them when doing subsequent downloads, but that might be related to the "static" stations storage within ninja. I had to move the comMessageHandler() function within point initialization to further up in the code, to keep it in scope. I kept the updateProgressMessage() function with it. Might need to revisit the organization of some of these static callback functions in the GUI code, eventually. --- src/gui/mainWindow.cpp | 22 ++ src/gui/pointInitializationInput.cpp | 321 ++++++++++++++------------- src/gui/pointInitializationInput.h | 6 +- src/ninja/ninjaTools.cpp | 237 +++++++++++++++++++- src/ninja/ninjaTools.h | 8 + src/ninja/windninja.cpp | 145 ++---------- src/ninja/windninja.h | 8 +- 7 files changed, 468 insertions(+), 279 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index b3b19acb3..dadc8bc60 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -500,6 +500,14 @@ void MainWindow::solveButtonClicked() { initializationMethod = "point"; + NinjaToolsH* ninjaTools = NinjaMakeTools(); + + ninjaErr = NinjaSetToolsComMessageHandler(ninjaTools, &comMessageHandler, this, papszOptions); + if(ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaSetToolsComMessageHandler(): ninjaErr =" << ninjaErr; + } + QVector stationFiles = pointInitializationInput->getStationFiles(); QString DEMTimeZone = ui->timeZoneComboBox->currentText(); QByteArray timeZoneBytes = ui->timeZoneComboBox->currentText().toUtf8(); @@ -547,6 +555,7 @@ void MainWindow::solveButtonClicked() int endYear, endMonth, endDay, endHour, endMinute; ninjaErr = NinjaGenerateSingleTimeObject( + ninjaTools, startYear, startMonth, startDay, startHour, startMinute, timeZoneBytes.constData(), &endYear, &endMonth, &endDay, &endHour, &endMinute @@ -565,6 +574,7 @@ void MainWindow::solveButtonClicked() else { ninjaErr = NinjaGetTimeList( + ninjaTools, year.data(), month.data(), day.data(), hour.data(), minute.data(), outYear.data(), outMonth.data(), outDay.data(), @@ -593,6 +603,17 @@ void MainWindow::solveButtonClicked() qDebug() << "NinjaMakePointArmy: ninjaErr =" << ninjaErr; } } + + if(ninjaErr != NINJA_SUCCESS) + { + // do cleanup before the return, similar to finishedSolve() + +// ninjaErr = NinjaDestroyTools(ninjaTools, papszOptions); +// if(ninjaErr != NINJA_SUCCESS) +// { +// printf("NinjaDestroyTools: ninjaErr = %d\n", ninjaErr); +// } + } } else { @@ -607,6 +628,7 @@ void MainWindow::solveButtonClicked() int outYear, outMonth, outDay, outHour, outMinute; ninjaErr = NinjaGenerateSingleTimeObject( + ninjaTools, year, month, day, hour, minute, timeZoneBytes.constData(), &outYear, &outMonth, &outDay, &outHour, &outMinute diff --git a/src/gui/pointInitializationInput.cpp b/src/gui/pointInitializationInput.cpp index 8f78af0cb..e02d93079 100644 --- a/src/gui/pointInitializationInput.cpp +++ b/src/gui/pointInitializationInput.cpp @@ -91,6 +91,85 @@ void PointInitializationInput::weatherStationDataDownloadCancelButtonClicked() ui->inputsStackedWidget->setCurrentIndex(10); } +void PointInitializationInput::updateProgressMessage(const QString message) +{ +// QMessageBox::critical( +// nullptr, +// QApplication::tr("Error"), +// message +// ); + progress->setLabelText(message); + progress->setWindowTitle(tr("Error")); + progress->setCancelButtonText(tr("Close")); + progress->setAutoClose(false); + progress->setAutoReset(false); + progress->setRange(0, 1); + progress->setValue(progress->maximum()); +} + +static void comMessageHandler(const char *pszMessage, void *pUser) +{ + PointInitializationInput *self = static_cast(pUser); + + std::string msg = pszMessage; + if( msg.substr(msg.size()-1, 1) == "\n") + { + msg = msg.substr(0, msg.size()-1); + } + + size_t pos; + size_t startPos; + size_t endPos; + std::string clipStr; + + if( msg.find("Exception caught: ") != msg.npos || msg.find("ERROR: ") != msg.npos ) + { + if( msg.find("Exception caught: ") != msg.npos ) + { + pos = msg.find("Exception caught: "); + startPos = pos+18; + } + else // if( msg.find("ERROR: ") != msg.npos ) + { + pos = msg.find("ERROR: "); + startPos = pos+7; + } + clipStr = msg.substr(startPos); + //std::cout << "clipStr = \"" << clipStr << "\"" << std::endl; + //emit self->updateProgressMessageSignal(QString::fromStdString(clipStr)); + //emit self->writeToConsoleSignal(QString::fromStdString(clipStr)); + if( clipStr == "Cannot determine exception type." ) + { + emit self->updateProgressMessageSignal(QString::fromStdString("StationFetch ended with unknown error")); + emit self->writeToConsoleSignal(QString::fromStdString("unknown StationFetch error"), Qt::red); + } + else + { + emit self->updateProgressMessageSignal(QString::fromStdString("StationFetch ended in error:\n"+clipStr)); + emit self->writeToConsoleSignal(QString::fromStdString("StationFetch error: "+clipStr), Qt::red); + } + } + else if( msg.find("Warning: ") != msg.npos ) + { + if( msg.find("Warning: ") != msg.npos ) + { + pos = msg.find("Warning: "); + startPos = pos+9; + } + clipStr = msg.substr(startPos); + //std::cout << "clipStr = \"" << clipStr << "\"" << std::endl; + //emit self->updateProgressMessageSignal(QString::fromStdString(clipStr)); + //emit self->writeToConsoleSignal(QString::fromStdString(clipStr)); + emit self->updateProgressMessageSignal(QString::fromStdString("StationFetch ended in warning:\n"+clipStr)); + emit self->writeToConsoleSignal(QString::fromStdString("StationFetch warning: "+clipStr), Qt::yellow); + } + else + { + emit self->updateProgressMessageSignal(QString::fromStdString(msg)); + emit self->writeToConsoleSignal(QString::fromStdString(msg)); + } +} + void PointInitializationInput::weatherStationDataDownloadButtonClicked() { emit writeToConsoleSignal("Fetching station data..."); @@ -102,6 +181,15 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() progress->setAutoClose(true); progress->show(); + NinjaToolsH* ninjaTools = NinjaMakeTools(); + + char **papszOptions = NULL; + NinjaErr ninjaErr = NinjaSetToolsComMessageHandler(ninjaTools, &comMessageHandler, this, papszOptions); + if(ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaSetToolsComMessageHandler(): ninjaErr =" << ninjaErr; + } + QString DEMTimeZone = ui->timeZoneComboBox->currentText(); QByteArray DEMTimeZoneBytes = ui->timeZoneComboBox->currentText().toUtf8(); QDateTime start = ui->downloadBetweenDatesStartTimeDateTimeEdit->dateTime(); @@ -145,9 +233,8 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() QVector minute = {end.time().minute(), end.time().minute()}; QVector outYear(2), outMonth(2), outDay(2), outHour(2), outMinute(2);*/ - // should die pretty hard - // well, it runs this part fine, just dies normally when run by the later fetch, - // unless it is a latestTime fetch in which case it just uses the first time from the list + // the latestTime fetch just uses the first time from the list + // the time-series fetch throws an error as expected, but the message seems to drop what is going on to cause the error /*QVector year = {start.date().year(), start.date().year()-1}; QVector month = {start.date().month(), start.date().month()}; QVector day = {start.date().day(), start.date().day()}; @@ -165,9 +252,8 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() QVector minute = {start.time().minute(), start.time().minute()}; QVector outYear(2), outMonth(2), outDay(2), outHour(2), outMinute(2);*/ - // should die pretty hard - // well, it runs this part fine, just dies normally when run by the later fetch, - // unless it is a latestTime fetch in which case it just uses the first time from the list + // the latestTime fetch just uses the first time from the list + // the time-series fetch throws an error as expected, but the message seems to drop what is going on to cause the error /*QVector year = {start.date().year(), start.date().year()}; QVector month = {start.date().month(), start.date().month()}; QVector day = {start.date().day(), start.date().day()}; @@ -175,9 +261,8 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() QVector minute = {start.time().minute(), start.time().minute()}; QVector outYear(2), outMonth(2), outDay(2), outHour(2), outMinute(2);*/ - // should die pretty hard - // well, it runs this part fine, just dies normally when run by the later fetch, - // unless it is a latestTime fetch in which case it just uses the first time from the list + // the latestTime fetch just uses the first time from the list + // the time-series fetch throws an error as expected, but the message seems to drop what is going on to cause the error /*QVector year = {end.date().year()+1, end.date().year()}; QVector month = {end.date().month(), end.date().month()}; QVector day = {end.date().day(), end.date().day()}; @@ -185,9 +270,8 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() QVector minute = {end.time().minute(), end.time().minute()}; QVector outYear(2), outMonth(2), outDay(2), outHour(2), outMinute(2);*/ - // should die pretty hard - // well, it runs this part fine, just dies normally when run by the later fetch, - // unless it is a latestTime fetch in which case it just uses the first time from the list + // the latestTime fetch just uses the first time from the list + // the time-series fetch throws an error as expected, but the message seems to drop what is going on to cause the error /*QVector year = {end.date().year(), end.date().year()}; QVector month = {end.date().month(), end.date().month()}; QVector day = {end.date().day(), end.date().day()}; @@ -195,27 +279,30 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() QVector minute = {end.time().minute(), end.time().minute()}; QVector outYear(2), outMonth(2), outDay(2), outHour(2), outMinute(2);*/ - NinjaErr ninjaErr = NinjaGetTimeList( + ninjaErr = NinjaGetTimeList( + ninjaTools, year.data(), month.data(), day.data(), hour.data(), minute.data(), outYear.data(), outMonth.data(), outDay.data(), outHour.data(), outMinute.data(), 2, DEMTimeZoneBytes.data() ); - //NinjaErr ninjaErr = NinjaGetTimeList( + //ninjaErr = NinjaGetTimeList( + // ninjaTools, // year.data(), month.data(), day.data(), // hour.data(), minute.data(), // outYear.data(), outMonth.data(), outDay.data(), // outHour.data(), outMinute.data(), // 1, DEMTimeZoneBytes.data() - // ); // this one shouldn't hurt anything, but want to see what happens // turns out it runs fine for latestTime downloads, just a smaller list, but it seg faults no matter what on the bbox download, probably because that is setup to expect 2 times no matter what. // now, it seg faults with an error message for non-latestTime downloads "Day of month value is out of range 1..31". - //NinjaErr ninjaErr = NinjaGetTimeList( + // ); // this one shouldn't hurt anything, but want to see what happens // gives an error, for both latestTime and time-series: "Day of month value is out of range 1..31". + //ninjaErr = NinjaGetTimeList( + // ninjaTools, // year.data(), month.data(), day.data(), // hour.data(), minute.data(), // outYear.data(), outMonth.data(), outDay.data(), // outHour.data(), outMinute.data(), // 2, "fudge" - // ); // should break, but probably won't, will probably be treated like the dem timezone // turns out it breaks HARD, a smart pointer failing on assert somewhere along the pipeline, not sure if that occurs here, or later down the pipeline. Definitely a break not necessarily related directly with the dem, breaks probably because of something sized wrong because of the dem being off, or it breaks because it IS trying to read the dem even though it shouldn't. + // ); // should break, but probably won't, will probably be treated like the dem timezone // turns out it breaks HARD, a smart pointer failing on assert somewhere along the pipeline, not sure if that occurs here, or later down the pipeline. Definitely a break not necessarily related directly with the dem, breaks probably because of something sized wrong because of the dem being off, or it breaks because it IS trying to read the dem even though it shouldn't. And it gets past the try/catch error handling stuff, hrm. if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaGetTimeList: ninjaErr =" << ninjaErr; @@ -229,18 +316,12 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() // do cleanup before the return, similar to finishedSolve() - //disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - -// char **papszOptions = nullptr; -// int ninjaErr = NinjaDestroyArmy(ninjaArmy, papszOptions); +// ninjaErr = NinjaDestroyTools(ninjaTools, papszOptions); // if(ninjaErr != NINJA_SUCCESS) // { -// printf("NinjaDestroyRuns: ninjaErr = %d\n", ninjaErr); +// printf("NinjaDestroyTools: ninjaErr = %d\n", ninjaErr); // } - // clear the progress values for the next set of runs - //runProgress.clear(); - //futureWatcher->deleteLater(); return; @@ -248,10 +329,9 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() if(ui->weatherStationDataTimeComboBox->currentIndex() == 1) // TODO: Add proper error handling for a bad time duration (someone downloads too much data) { - char ** options = nullptr; //outYear[0] = outYear[1]-2; // doing more than a year worth of time SHOULD be what triggers it, this is NOT a check on the times themselves // hrm, it returns an error code of 8, but no ninjaCom seems to be sent so it leaves it hanging without a proper message. runs fine for a latestTime simulation. //outYear[1] = outYear[0]+2; // not sure if it can even handle when the endYear goes past the current year // same result as the above test. - int ninjaErr = NinjaCheckTimeDuration(outYear.data(), outMonth.data(), outDay.data(), outHour.data(), outMinute.data(), 2, options); + ninjaErr = NinjaCheckTimeDuration(ninjaTools, outYear.data(), outMonth.data(), outDay.data(), outHour.data(), outMinute.data(), 2, papszOptions); if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaCheckTimeDuration ninjaErr=" << ninjaErr; @@ -265,18 +345,12 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() // do cleanup before the return, similar to finishedSolve() - //disconnect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelSolve())); - -// char **papszOptions = nullptr; -// int ninjaErr = NinjaDestroyArmy(ninjaArmy, papszOptions); +// ninjaErr = NinjaDestroyTools(ninjaTools, papszOptions); // if(ninjaErr != NINJA_SUCCESS) // { -// printf("NinjaDestroyRuns: ninjaErr = %d\n", ninjaErr); +// printf("NinjaDestroyTools: ninjaErr = %d\n", ninjaErr); // } - // clear the progress values for the next set of runs - //runProgress.clear(); - //futureWatcher->deleteLater(); return; @@ -294,6 +368,7 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() QString units = ui->downloadFromDEMComboBox->currentText(); double buffer = ui->downloadFromDEMSpinBox->value(); future = QtConcurrent::run(&PointInitializationInput::fetchStationFromBbox, this, + ninjaTools, outYear, outMonth, outDay, outHour, outMinute, elevationFile, buffer, units, DEMTimeZone, fetchLatestFlag, outputPath); @@ -302,6 +377,7 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() { QString stationList = ui->downloadFromStationIDLineEdit->text(); future = QtConcurrent::run(&PointInitializationInput::fetchStationByName, this, + ninjaTools, outYear, outMonth, outDay, outHour, outMinute, elevationFile, stationList, DEMTimeZone, fetchLatestFlag, outputPath); @@ -311,86 +387,8 @@ void PointInitializationInput::weatherStationDataDownloadButtonClicked() connect(futureWatcher, &QFutureWatcher::finished, this, &PointInitializationInput::fetchStationDataFinished); } -void PointInitializationInput::updateProgressMessage(const QString message) -{ -// QMessageBox::critical( -// nullptr, -// QApplication::tr("Error"), -// message -// ); - progress->setLabelText(message); - progress->setWindowTitle(tr("Error")); - progress->setCancelButtonText(tr("Close")); - progress->setAutoClose(false); - progress->setAutoReset(false); - progress->setRange(0, 1); - progress->setValue(progress->maximum()); -} - -static void comMessageHandler(const char *pszMessage, void *pUser) -{ - PointInitializationInput *self = static_cast(pUser); - - std::string msg = pszMessage; - if( msg.substr(msg.size()-1, 1) == "\n") - { - msg = msg.substr(0, msg.size()-1); - } - - size_t pos; - size_t startPos; - size_t endPos; - std::string clipStr; - - if( msg.find("Exception caught: ") != msg.npos || msg.find("ERROR: ") != msg.npos ) - { - if( msg.find("Exception caught: ") != msg.npos ) - { - pos = msg.find("Exception caught: "); - startPos = pos+18; - } - else // if( msg.find("ERROR: ") != msg.npos ) - { - pos = msg.find("ERROR: "); - startPos = pos+7; - } - clipStr = msg.substr(startPos); - //std::cout << "clipStr = \"" << clipStr << "\"" << std::endl; - //emit self->updateProgressMessageSignal(QString::fromStdString(clipStr)); - //emit self->writeToConsoleSignal(QString::fromStdString(clipStr)); - if( clipStr == "Cannot determine exception type." ) - { - emit self->updateProgressMessageSignal(QString::fromStdString("StationFetch ended with unknown error")); - emit self->writeToConsoleSignal(QString::fromStdString("unknown StationFetch error"), Qt::red); - } - else - { - emit self->updateProgressMessageSignal(QString::fromStdString("StationFetch ended in error:\n"+clipStr)); - emit self->writeToConsoleSignal(QString::fromStdString("StationFetch error: "+clipStr), Qt::red); - } - } - else if( msg.find("Warning: ") != msg.npos ) - { - if( msg.find("Warning: ") != msg.npos ) - { - pos = msg.find("Warning: "); - startPos = pos+9; - } - clipStr = msg.substr(startPos); - //std::cout << "clipStr = \"" << clipStr << "\"" << std::endl; - //emit self->updateProgressMessageSignal(QString::fromStdString(clipStr)); - //emit self->writeToConsoleSignal(QString::fromStdString(clipStr)); - emit self->updateProgressMessageSignal(QString::fromStdString("StationFetch ended in warning:\n"+clipStr)); - emit self->writeToConsoleSignal(QString::fromStdString("StationFetch warning: "+clipStr), Qt::yellow); - } - else - { - emit self->updateProgressMessageSignal(QString::fromStdString(msg)); - emit self->writeToConsoleSignal(QString::fromStdString(msg)); - } -} - -int PointInitializationInput::fetchStationFromBbox(QVector year, +int PointInitializationInput::fetchStationFromBbox(NinjaToolsH* ninjaTools, + QVector year, QVector month, QVector day, QVector hour, @@ -413,32 +411,34 @@ int PointInitializationInput::fetchStationFromBbox(QVector year, //fetchLatestFlag = TRUE; // on a single-time series, what will happen? // Turns out it runs fine, just uses the start time of the multi-time series. So kind of a useless test. //fetchLatestFlag = FALSE; // try on a multi-time series, with good inputs or no, what will happen? // Turns out it runs fine, because the default values are a time series that is normally ignored. kind of behaves like a useful test, though that depends on how the inputs could change. - //year[1] = year[0]-1; // throws an error as expected - //hour[1] = hour[0]-1; // apparently this test SHOULD break, but something must be up in how it is handled within the ninja code because it ends up just downloading a single dateTime, of the earliest of the two sets of times. - //hour[1] = hour[0]-2; // this one throws an error as expected, I guess just have to keep the two times a decent enough distance past enough other the wrong way to trigger the errors. - //year[0] = year[1]+1; // throws an error as expected - //hour[0] = hour[1]+1; // this one throws an error as expected, interesting that going this direction one dateTime past the other, it doesn't succeed like it does for the other direction. - //elevationFile = "fudge"; // throws error as expected, after a message of "ERROR 4: fudge: No such file or directory" + //year[1] = year[0]-1; // throws an error as expected, though the message seems to drop what is going on to cause the error. The folder is still created, doesn't get cleaned up after the download fails. + //hour[1] = hour[0]-1; // need to carefully set the date to the same date for both times for this test to properly work. apparently this test SHOULD break, but something must be up in how it is handled within the ninja code because it ends up just downloading a single dateTime, of the earliest of the two sets of times. + //hour[1] = hour[0]-2; // throws an error as expected, though the message seems to drop what is going on to cause the error, but had to use 3 instead of 2 for this to work, when I was right at and close to the hour. need to carefully set the date to the same date for both times for this test to properly work. + //year[0] = year[1]+1; // throws an error as expected, though the message seems to drop what is going on to cause the error + //hour[0] = hour[1]+1; // need to carefully set the date to the same date for both times for this test to properly work. apparently this test SHOULD break, but something must be up in how it is handled within the ninja code because it ends up just downloading a single dateTime, of the earliest of the two sets of times. Seems to work better when not close to the hour. + //hour[0] = hour[1]+2; // throws an error as expected. need to carefully set the date to the same date for both times for this test to properly work. + //elevationFile = "fudge"; // throws error as expected, after a message of "ERROR 4: fudge: No such file or directory", BUT, the message seems to drop what is going on to cause the error //buffer = -1; // runs fine, no error messages, just downloads the data within the area of the dem //units = "fudge"; // runs fine, no error messages, just downloads the data within the area of the dem //osTimeZone = "fudge"; // runs fine, no error messages, seems to just download the data assuming the timezone of the dem - //year[0] = 9999; // throws an error as expected - //hour[0] = 9999; // throws an error as expected - //year[1] = 9999; // throws an error as expected + //year[0] = 9999; // throws an error as expected, though the message seems to drop what is going on to cause the error + //hour[0] = 9999; // throws an error as expected, though the message seems to drop what is going on to cause the error + //year[1] = 9999; // throws an error as expected, though the message seems to drop what is going on to cause the error //hour[1] = 9999; // um, this one did NOT throw an error, but actually ran successfully, creating data as if the endTime was the same thing as the startTime - //year[0] = -1; // throws an error, and seg faults, as expected + //year[0] = -1; // throws an error as expected, and actually a good informative error this time //hour[0] = -1; // um, this one did NOT throw an error, but actually ran successfully, creating data as if the startHour was the same thing as the endHour - //year[1] = -1; // throws an error, and seg faults, as expected + //year[1] = -1; // throws an error as expected, and actually a good informative error this time //hour[1] = -1; // um, this one did NOT throw an error, but actually ran successfully, creating data as if the endHour was the same thing as the startHour - //year[0] = 0; // throws an error, and seg faults, as expected - //year[1] = 0; // throws an error, and seg faults, as expected + //year[0] = 0; // throws an error as expected, and actually a good informative error this time + //year[1] = 0; // throws an error as expected, and actually a good informative error this time - qDebug() << "year[0] month[0] day[0] hour[0] minute[0] =" << year[0] << month[0] << day[0] << hour[0] << minute[0]; - qDebug() << "year[1] month[1] day[1] hour[1] minute[1] =" << year[1] << month[1] << day[1] << hour[1] << minute[1]; + //qDebug() << "year[0] month[0] day[0] hour[0] minute[0] =" << year[0] << month[0] << day[0] << hour[0] << minute[0]; + //qDebug() << "year[1] month[1] day[1] hour[1] minute[1] =" << year[1] << month[1] << day[1] << hour[1] << minute[1]; char ** options = NULL; NinjaErr ninjaErr = NinjaFetchStationFromBBox( + ninjaTools, year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), buffer, @@ -455,7 +455,8 @@ int PointInitializationInput::fetchStationFromBbox(QVector year, return ninjaErr; } -int PointInitializationInput::fetchStationByName(QVector year, +int PointInitializationInput::fetchStationByName(NinjaToolsH* ninjaTools, + QVector year, QVector month, QVector day, QVector hour, @@ -466,29 +467,47 @@ int PointInitializationInput::fetchStationByName(QVector year, bool fetchLatestFlag, QString outputPath) { - //year[1] = year[0]-1; - //hour[1] = hour[0]-1; - //year[0] = year[1]+1; - //hour[0] = hour[1]+1; - //elevationFile = "fudge"; - //stationList = "fudge"; - //osTimeZone = "fudge"; - //fetchLatestFlag = TRUE; // on a single-time series, what will happen? - - //year[0] = 9999; - //hour[0] = 9999; - //year[1] = 9999; - //hour[1] = 9999; - //year[0] = -1; - //hour[0] = -1; - //year[1] = -1; - //hour[1] = -1; - //year[0] = 0; - //year[1] = 0; - //fetchLatestFlag = FALSE; // try on a multi-time series, with good inputs or no, what will happen? + //stationList = "KMSO,PNTM8"; // this is a working list, what the list SHOULD be, and it works great. But apparently doing so with a SPACE between the commas of the stations, even though that is what is shown in the GUI as an example, DOES break the code. + //stationList = "KMSO, PNTM8"; // um, this should NOT thrown an error, but it does. So I guess something is wrong with how the files are parsed. Runs fine for a single station. The error message also drops telling what is going on, so annoying. + + // apparently if it is a latestTime run, changing the times means nothing, they get ignored + // though looks like the values that find themselves in there before editing for a latestTime run, + // are endDateTime of current time , in UTC + // and startDateTime of current time - 1 hour, in UTC + // meaning that setting a latestTime run to a multi-time series, just runs fine and acts like a multi-time series + // hrm, when redownloading of the same type, multi-time series, but differing times, the same folder and sometimes filenames end up getting used, from the first download attempt. Seems like badly defined behavior, might be related to the stations info being a set of static variables? I'm not sure what is going on there, the inputs to the function ARE the proper updated set of times. + // hrm, in all cases, failing or otherwise, the wxStation folder ends up still getting written, does not end up getting cleaned up after the failing of the run. + + //fetchLatestFlag = TRUE; // on a single-time series, what will happen? // Turns out it runs fine, just uses the start time of the multi-time series. So kind of a useless test. + //fetchLatestFlag = FALSE; // try on a multi-time series, with good inputs or no, what will happen? // Turns out it runs fine, because the default values are a time series that is normally ignored. kind of behaves like a useful test, though that depends on how the inputs could change. + + //year[1] = year[0]-1; // throws an error as expected, though the message seems to drop what is going on to cause the error. The folder is still created, doesn't get cleaned up after the download fails. + //hour[1] = hour[0]-1; // need to carefully set the date to the same date for both times for this test to properly work. apparently this test SHOULD break, but something must be up in how it is handled within the ninja code because it ends up just downloading a single dateTime, of the earliest of the two sets of times. + //hour[1] = hour[0]-2; // throws an error as expected, though the message seems to drop what is going on to cause the error, but had to use 3 instead of 2 for this to work, when I was right at and close to the hour. need to carefully set the date to the same date for both times for this test to properly work. + //year[0] = year[1]+1; // throws an error as expected, though the message seems to drop what is going on to cause the error + //hour[0] = hour[1]+1; // need to carefully set the date to the same date for both times for this test to properly work. apparently this test SHOULD break, but something must be up in how it is handled within the ninja code because it ends up just downloading a single dateTime, of the earliest of the two sets of times. Seems to work better when not close to the hour. + //hour[0] = hour[1]+2; // throws an error as expected. need to carefully set the date to the same date for both times for this test to properly work. + //elevationFile = "fudge"; // um, this is supposed to have thrown an error, but it didn't, data somehow downloaded fine with fudge in the name. Oh I see, it just uses the stations that are chosen to be downloaded. + //stationList = "fudge"; // throws error as expected, though the message seems to drop what is going on to cause the error. + //osTimeZone = "fudge"; // runs fine, no error messages, seems to just download the data assuming the timezone of the dem + + //year[0] = 9999; // throws an error as expected, though the message seems to drop what is going on to cause the error + //hour[0] = 9999; // throws an error as expected, though the message seems to drop what is going on to cause the error + //year[1] = 9999; // throws an error as expected, though the message seems to drop what is going on to cause the error + //hour[1] = 9999; // um, this one did NOT throw an error, but actually ran successfully, creating data as if the endTime was the same thing as the startTime + //year[0] = -1; // throws an error as expected, and actually a good informative error this time + //hour[0] = -1; // um, this one did NOT throw an error, but actually ran successfully, creating data as if the startHour was the same thing as the endHour + //year[1] = -1; // throws an error as expected, and actually a good informative error this time + //hour[1] = -1; // um, this one did NOT throw an error, but actually ran successfully, creating data as if the endHour was the same thing as the startHour + //year[0] = 0; // throws an error as expected, and actually a good informative error this time + //year[1] = 0; // throws an error as expected, and actually a good informative error this time + + //qDebug() << "year[0] month[0] day[0] hour[0] minute[0] =" << year[0] << month[0] << day[0] << hour[0] << minute[0]; + //qDebug() << "year[1] month[1] day[1] hour[1] minute[1] =" << year[1] << month[1] << day[1] << hour[1] << minute[1]; char ** options = NULL; NinjaErr ninjaErr = NinjaFetchStationByName( + ninjaTools, year.data(), month.data(), day.data(), hour.data(), minute.data(), year.size(), elevationFile.toUtf8().constData(), stationList.toUtf8().constData(), diff --git a/src/gui/pointInitializationInput.h b/src/gui/pointInitializationInput.h index 1bd22b3ab..3176d496d 100644 --- a/src/gui/pointInitializationInput.h +++ b/src/gui/pointInitializationInput.h @@ -85,7 +85,8 @@ private slots: QVector stationFileTypes; QVector openStationFolders; - int fetchStationFromBbox(QVector year, + int fetchStationFromBbox(NinjaToolsH* ninjaTools, + QVector year, QVector month, QVector day, QVector hour, @@ -96,7 +97,8 @@ private slots: QString osTimeZone, bool fetchLatestFlag, QString outputPath); - int fetchStationByName(QVector year, + int fetchStationByName(NinjaToolsH* ninjaTools, + QVector year, QVector month, QVector day, QVector hour, diff --git a/src/ninja/ninjaTools.cpp b/src/ninja/ninjaTools.cpp index 4b373420f..1b2741437 100644 --- a/src/ninja/ninjaTools.cpp +++ b/src/ninja/ninjaTools.cpp @@ -90,7 +90,8 @@ void ninjaTools::fetchWeatherModelData(const char* modelName, const char* demFil model = wxModelInitializationFactory::makeWxInitializationFromId(std::string(modelName)); - if (!model) { + if(!model) + { throw std::runtime_error(std::string("Weather model not found: ") + modelName); } @@ -234,6 +235,240 @@ int ninjaTools::getEndHour(const char* modelIdentifier) return model->getEndHour(); } + +int ninjaTools::fetchStationFromBBox( const int* yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char* elevationFile, double buffer, const char* units, const char* timeZone, bool fetchLatestFlag, const char* outputPath, bool locationFileFlag, char ** papszOptions ) +{ + try + { + std::vector timeList; + for(size_t i=0; ininjaCom(ninjaComClass::ninjaFailure, "pointInitialization::fetchStationFromBbox() failed."); + return NINJA_E_INVALID; + } + if(locationFileFlag) + { + pointInitialization::writeStationLocationFile(stationPathName, std::string(elevationFile), fetchLatestFlag); + } + + return NINJA_SUCCESS; + } + catch(armyException &e) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return NINJA_E_INVALID; + } + catch( exception& e ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return NINJA_E_INVALID; + } + catch( ... ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); + return NINJA_E_INVALID; + } +} + +int ninjaTools::fetchStationByName( const int* yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char* elevationFile, const char* stationList, const char* timeZone, bool fetchLatestFlag, const char* outputPath, bool locationFileFlag, char ** papszOptions ) +{ + try + { + std::vector timeList; + for(size_t i=0; ininjaCom(ninjaComClass::ninjaFailure, "pointInitialization::fetchStationByName() failed."); + return NINJA_E_INVALID; + } + if(locationFileFlag) + { + pointInitialization::writeStationLocationFile(stationPathName, std::string(elevationFile), fetchLatestFlag); + } + + return NINJA_SUCCESS; + } + catch(armyException &e) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return NINJA_E_INVALID; + } + catch( exception& e ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return NINJA_E_INVALID; + } + catch( ... ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); + return NINJA_E_INVALID; + } +} + +int ninjaTools::getTimeList( const int * inputYearList, const int * inputMonthList, const int * inputDayList, const int * inputHourList, const int * inputMinuteList, int * outputYearList, int* outputMonthList, int * outputDayList, int * outputHourList, int* outputMinuteList, int nTimeSteps, const char* timeZone ) +{ + try + { + std::vector timeList = + pointInitialization::getTimeList( + inputYearList[0], inputMonthList[0], inputDayList[0], + inputHourList[0], inputMinuteList[0], + inputYearList[1], inputMonthList[1], inputDayList[1], + inputHourList[1], inputMinuteList[1], + nTimeSteps, std::string(timeZone) + ); + + for (int i = 0; i < nTimeSteps; ++i) + { + const boost::posix_time::ptime& time = timeList[i]; + boost::gregorian::date date = time.date(); + boost::posix_time::time_duration timeDuration = time.time_of_day(); + + outputYearList[i] = static_cast(date.year()); + outputMonthList[i] = static_cast(date.month()); + outputDayList[i] = static_cast(date.day()); + outputHourList[i] = timeDuration.hours(); + outputMinuteList[i] = timeDuration.minutes(); + } + + return NINJA_SUCCESS; + } + catch(armyException &e) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return NINJA_E_INVALID; + } + catch( exception& e ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return NINJA_E_INVALID; + } + catch( ... ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); + return NINJA_E_INVALID; + } +} + +int ninjaTools::generateSingleTimeObject( int inputYear, int inputMonth, int inputDay, int inputHour, int inputMinute, const char * timeZone, int * outYear, int * outMonth, int* outDay, int * outHour, int * outMinute ) +{ + try + { + boost::posix_time::ptime timeObject = + pointInitialization::generateSingleTimeObject(inputYear, inputMonth, inputDay, inputHour, inputMinute, std::string(timeZone)); + + const boost::gregorian::date& date = timeObject.date(); + const boost::posix_time::time_duration& td = timeObject.time_of_day(); + + *outYear = static_cast(date.year()); + *outMonth = static_cast(date.month()); + *outDay = static_cast(date.day()); + *outHour = td.hours(); + *outMinute = td.minutes(); + + return NINJA_SUCCESS; + } + catch(armyException &e) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return NINJA_E_INVALID; + } + catch( exception& e ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return NINJA_E_INVALID; + } + catch( ... ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); + return NINJA_E_INVALID; + } +} + +int ninjaTools::checkTimeDuration( int* yearList, int* monthList, int * dayList, int * minuteList, int *hourList, int listSize, char ** papszOptions ) +{ + try + { + std::vector timeList; + for(size_t i=0; i < listSize; i++) + { + timeList.push_back(boost::posix_time::ptime(boost::gregorian::date(yearList[i], monthList[i], dayList[i]), boost::posix_time::time_duration(hourList[i],minuteList[i],0,0))); + } + + int isValid = pointInitialization::checkFetchTimeDuration(timeList); + if(isValid == -2) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "pointInitialization::checkFetchTimeDuration() failed."); + return NINJA_E_OTHER; + } + + return NINJA_SUCCESS; + } + catch(armyException &e) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return NINJA_E_INVALID; + } + catch( exception& e ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return NINJA_E_INVALID; + } + catch( ... ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); + return NINJA_E_INVALID; + } +} + /*----------------------------------------------------------------------------- * Ninja Communication Methods *-----------------------------------------------------------------------------*/ diff --git a/src/ninja/ninjaTools.h b/src/ninja/ninjaTools.h index 314d8a130..3e0344606 100644 --- a/src/ninja/ninjaTools.h +++ b/src/ninja/ninjaTools.h @@ -3,6 +3,8 @@ #include "nomads_wx_init.h" #include "wxModelInitializationFactory.h" +#include "wxStation.h" +#include "pointInitialization.h" #include "ninja_errors.h" @@ -29,6 +31,12 @@ class ninjaTools int getStartHour(const char*modelIdentifier); int getEndHour(const char* modelIdentifer); + int fetchStationFromBBox( const int* yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char* elevationFile, double buffer, const char* units, const char* timeZone, bool fetchLatestFlag, const char* outputPath, bool locationFileFlag, char ** papszOptions=NULL ); + int fetchStationByName( const int* yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char* elevationFile, const char* stationList, const char* timeZone, bool fetchLatestFlag, const char* outputPath, bool locationFileFlag, char ** papszOptions=NULL ); + int getTimeList( const int * inputYearList, const int * inputMonthList, const int * inputDayList, const int * inputHourList, const int * inputMinuteList, int * outputYearList, int* outputMonthList, int * outputDayList, int * outputHourList, int* outputMinuteList, int nTimeSteps, const char* timeZone ); + int generateSingleTimeObject( int inputYear, int inputMonth, int inputDay, int inputHour, int inputMinute, const char * timeZone, int * outYear, int * outMonth, int* outDay, int * outHour, int * outMinute ); + int checkTimeDuration( int* yearList, int* monthList, int * dayList, int * minuteList, int *hourList, int listSize, char ** papszOptions=NULL ); + private: int nomadsCount; NomadsWxModel** nomadsModels; diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 77c369300..edadfe192 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -335,6 +335,7 @@ WINDNINJADLL_EXPORT NinjaToolsH* NinjaMakeTools() * * This method will fetch a forecast file from the UCAR/THREDDS server, also can be from the NOMADS server. * + * \param tools An opaque handle to a valid ninjaTools. * \param modelName A string representing a valid weather model type (e.g. "NOMADS-HRRR-CONUS-3-KM"). * \param demFile A valid path to an elevation file. * \param hours Number of hours to be requested (the forecast duration). @@ -573,6 +574,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMBBox * None * TODO: Add option parameter to specify a buffer to use in station fetching * + * \param tools An opaque handle to a valid ninjaTools. * \param yearList A pointer to an array of years. * \param monthList A pointer to an array of months. * \param dayList A pointer to an array of days. @@ -600,46 +602,14 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMBBox * */ WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationFromBBox - (const int* yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char* elevationFile, double buffer, const char* units, const char* timeZone, bool fetchLatestFlag, const char* outputPath, bool locationFileFlag, char ** options) + (NinjaToolsH* tools, const int* yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char* elevationFile, double buffer, const char* units, const char* timeZone, bool fetchLatestFlag, const char* outputPath, bool locationFileFlag, char ** options) { - //if(!tools) - //{ - // return NINJA_E_NULL_PTR; - //} - - std::vector timeList; - for(size_t i=0; i( tools )->fetchStationFromBBox(yearList, monthList, dayList, hourList, minuteList, size, elevationFile, buffer, units, timeZone, fetchLatestFlag, outputPath, locationFileFlag, options); } /** @@ -648,6 +618,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationFromBBox * Avaliable Creation Options: * None * + * \param tools An opaque handle to a valid ninjaTools. * \param yearList A pointer to an array of years. * \param monthList A pointer to an array of months. * \param dayList A pointer to an array of days. @@ -674,45 +645,14 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationFromBBox * */ WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationByName - (const int* yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char* elevationFile, const char* stationList, const char* timeZone, bool fetchLatestFlag, const char* outputPath, bool locationFileFlag, char ** options) + (NinjaToolsH* tools, const int* yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char* elevationFile, const char* stationList, const char* timeZone, bool fetchLatestFlag, const char* outputPath, bool locationFileFlag, char ** options) { - //if(!tools) - //{ - // return NINJA_E_NULL_PTR; - //} - - std::vector timeList; - for(size_t i=0; i( tools )->fetchStationByName(yearList, monthList, dayList, hourList, minuteList, size, elevationFile, stationList, timeZone, fetchLatestFlag, outputPath, locationFileFlag, options); } @@ -2561,6 +2501,7 @@ WINDNINJADLL_EXPORT int NinjaGetWxStationHeaderVersion(const char * stationPath, /** * \brief Get a time series in UTC with a specific number time steps between the inputted start and stop times. * + * \param tools An opaque handle to a valid ninjaTools. * \param inputYearList A pointer to an array of input years. * \param inputMonthList A pointer to an array of input months. * \param inputDayList A pointer to an array of input days. @@ -2577,40 +2518,25 @@ WINDNINJADLL_EXPORT int NinjaGetWxStationHeaderVersion(const char * stationPath, * \return NINJA_SUCCESS on success, non-zero otherwise. */ WINDNINJADLL_EXPORT NinjaErr NinjaGetTimeList( + NinjaToolsH* tools, const int * inputYearList, const int * inputMonthList, const int * inputDayList, const int * inputHourList, const int * inputMinuteList, int * outputYearList, int* outputMonthList, int * outputDayList, int * outputHourList, int* outputMinuteList, int nTimeSteps, const char* timeZone) { - std::vector timeList = - pointInitialization::getTimeList( - inputYearList[0], inputMonthList[0], inputDayList[0], - inputHourList[0], inputMinuteList[0], - inputYearList[1], inputMonthList[1], inputDayList[1], - inputHourList[1], inputMinuteList[1], - nTimeSteps, std::string(timeZone) - ); - - for (int i = 0; i < nTimeSteps; ++i) + if(!tools) { - const boost::posix_time::ptime& time = timeList[i]; - boost::gregorian::date date = time.date(); - boost::posix_time::time_duration timeDuration = time.time_of_day(); - - outputYearList[i] = static_cast(date.year()); - outputMonthList[i] = static_cast(date.month()); - outputDayList[i] = static_cast(date.day()); - outputHourList[i] = timeDuration.hours(); - outputMinuteList[i] = timeDuration.minutes(); + return NINJA_E_NULL_PTR; } - return NINJA_SUCCESS; + return reinterpret_cast( tools )->getTimeList(inputYearList, inputMonthList, inputDayList, inputHourList, inputMinuteList, outputYearList, outputMonthList, outputDayList, outputHourList, outputMinuteList, nTimeSteps, timeZone); } /** * \brief Get a date time in UTC from an inpute date time in a specified timezone. * + * \param tools An opaque handle to a valid ninjaTools. * \param inputYear An input year. * \param inputMonth An input month. * \param inputDay An input day. @@ -2626,32 +2552,22 @@ WINDNINJADLL_EXPORT NinjaErr NinjaGetTimeList( * \return NINJA_SUCCESS on success, non-zero otherwise. */ WINDNINJADLL_EXPORT NinjaErr NinjaGenerateSingleTimeObject( + NinjaToolsH* tools, int inputYear, int inputMonth, int inputDay, int inputHour, int inputMinute, const char * timeZone, int * outYear, int * outMonth, int* outDay, int * outHour, int * outMinute) { - if (!outYear || !outMonth || !outDay || !outHour || !outMinute) + if(!outYear || !outMonth || !outDay || !outHour || !outMinute) { return NINJA_E_OTHER; } - boost::posix_time::ptime timeObject = - pointInitialization::generateSingleTimeObject(inputYear, inputMonth, inputDay, inputHour, inputMinute, std::string(timeZone)); - - const boost::gregorian::date& date = timeObject.date(); - const boost::posix_time::time_duration& td = timeObject.time_of_day(); - - *outYear = static_cast(date.year()); - *outMonth = static_cast(date.month()); - *outDay = static_cast(date.day()); - *outHour = td.hours(); - *outMinute = td.minutes(); - - return NINJA_SUCCESS; + return reinterpret_cast( tools )->generateSingleTimeObject(inputYear, inputMonth, inputDay, inputHour, inputMinute, timeZone, outYear, outMonth, outDay, outHour, outMinute); } /** * \brief Get a time series in UTC with a specific number of time steps between the inputted start and stop times. * + * \param tools An opaque handle to a valid ninjaTools. * \param yearList A pointer to an array of years. * \param monthList A pointer to an array of months. * \param dayList A pointer to an array of days. @@ -2662,24 +2578,9 @@ WINDNINJADLL_EXPORT NinjaErr NinjaGenerateSingleTimeObject( * \return NINJA_SUCCESS on success, non-zero otherwise. */ WINDNINJADLL_EXPORT NinjaErr NinjaCheckTimeDuration - (int* yearList, int* monthList, int * dayList, int * minuteList, int *hourList, int listSize, char ** papszOptions) + (NinjaToolsH* tools, int* yearList, int* monthList, int * dayList, int * minuteList, int *hourList, int listSize, char ** papszOptions) { - std::vector timeList; - for(size_t i=0; i < listSize; i++) - { - timeList.push_back(boost::posix_time::ptime(boost::gregorian::date(yearList[i], monthList[i], dayList[i]), boost::posix_time::time_duration(hourList[i],minuteList[i],0,0))); - } - - int isValid = pointInitialization::checkFetchTimeDuration(timeList); - - if(isValid == -2) - { - return NINJA_E_OTHER; - } - else - { - return NINJA_SUCCESS; - } + return reinterpret_cast( tools )->checkTimeDuration( yearList, monthList, dayList, minuteList, hourList, listSize, papszOptions ); } /** diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index fb7a71d7f..fd10a0d8b 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -110,10 +110,10 @@ typedef int NinjaErr; (const char** timeList, int timeListSize); WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationFromBBox - (const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char * elevationFile, double buffer, const char* units, const char * timeZone, bool fetchLatestFlag, const char * outputPath, bool locationFileFlag, char ** options ); + (NinjaToolsH* tools, const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char * elevationFile, double buffer, const char* units, const char * timeZone, bool fetchLatestFlag, const char * outputPath, bool locationFileFlag, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaFetchStationByName - (const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char * elevationFile, const char* stationList, const char * timeZone, bool fetchLatestFlag, const char * outputPath, bool locationFileFlag, char ** options ); + (NinjaToolsH* tools, const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char * elevationFile, const char* stationList, const char * timeZone, bool fetchLatestFlag, const char * outputPath, bool locationFileFlag, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMPoint (NinjaArmyH * ninjaArmy, double * point, double * buff, const char * units, double cellSize, char * dstFile, char * fetchType, char ** options ); @@ -382,16 +382,18 @@ typedef int NinjaErr; *-----------------------------------------------------------------------------*/ WINDNINJADLL_EXPORT int NinjaGetWxStationHeaderVersion(const char * filePath, char ** papszOptions); WINDNINJADLL_EXPORT NinjaErr NinjaGetTimeList( + NinjaToolsH* tools, const int* inputYearList, const int* inputMonthList, const int* inputDayList, const int* inputHourList, const int* inputMinuteList, int* outputYearList, int* outputMonthList, int* outputDayList, int* outputHourList, int* outputMinuteList, int nTimeSteps, const char* timeZone); WINDNINJADLL_EXPORT NinjaErr NinjaGenerateSingleTimeObject( + NinjaToolsH* tools, int inputYear, int inputMonth, int inputDay, int inputHour, int inputMinute, const char* timeZone, int* outYear, int* outMonth, int* outDay, int* outHour, int* outMinute); WINDNINJADLL_EXPORT NinjaErr NinjaCheckTimeDuration - (int* yearList, int* monthList, int * dayList, int * minuteList, int *hourList, int listSize, char ** papszOptions); + (NinjaToolsH* tools, int* yearList, int* monthList, int * dayList, int * minuteList, int *hourList, int listSize, char ** papszOptions); WINDNINJADLL_EXPORT NinjaErr NinjaWriteBlankWxStationFile( const char * outputStationFilename, char ** papszOptions ); WINDNINJADLL_EXPORT NinjaErr NinjaGetRunKmzFilenames(NinjaArmyH * army, int *numRuns, char*** kmzFilenames, int *numStationKmls, char*** stationKmlFilenames, char*** weatherModelKmzFilenames, char ** papszOptions); WINDNINJADLL_EXPORT NinjaErr NinjaDestroyRunKmzFilenames(int numRuns, char** kmzFilenames, int numStationKmls, char** stationKmlFilenames, char** weatherModelKmzFilenames, char ** papszOptions); From b44a720f7fb2a18a22399644e8fa0594222db3ed Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 26 Jan 2026 13:55:47 -0700 Subject: [PATCH 380/435] Changed image zIndex value to ensure layer control is always the top most layer --- data/map.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/map.html b/data/map.html index 9441b70b7..f09477e80 100755 --- a/data/map.html +++ b/data/map.html @@ -87,7 +87,7 @@ left: 50%; transform: translateX(-50%); z-index: 1000; - pointer-events: none; /* optional, avoids interfering with map clicks */ + pointer-events: none; } .kmz-top-center-legend img { @@ -291,7 +291,7 @@ img2.style.transform = 'translateX(-50%)'; img2.style.maxWidth = '90%'; // prevents it from overflowing the map img2.style.height = 'auto'; - img2.style.zIndex = '1000'; + img2.style.zIndex = '600'; img2.className = 'kmz-time-series-legend'; // Append directly to the map container From a6cf030018e5735f8d42c230da9f65e372847891 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 26 Jan 2026 14:19:54 -0700 Subject: [PATCH 381/435] Removed padding around inputs and tab, and set splitter to no longer collapse children --- src/gui/mainWindow.ui | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index 3cc522c35..396f105c0 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -578,15 +578,39 @@ + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + Qt::Orientation::Horizontal + + 4 + + + false + Qt::Orientation::Vertical + + false + @@ -1702,7 +1726,7 @@ li.checked::marker { content: "\2612"; } 0 0 586 - 488 + 498 @@ -2145,8 +2169,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 586 - 488 + 502 + 399 @@ -2589,7 +2613,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 572 + 358 713 From de5269971b6ac2fa7cca71d0b54c5365f894e39e Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 26 Jan 2026 16:50:16 -0700 Subject: [PATCH 382/435] Tightened Layout Spacing, changed QTextEdits to QLabels, adjusted sizing policies, and refactored code accordingly --- src/gui/mainWindow.cpp | 38 +- src/gui/mainWindow.ui | 1211 ++++++++++++++++++-------- src/gui/pointInitializationInput.cpp | 8 +- src/gui/surfaceInput.cpp | 4 +- 4 files changed, 867 insertions(+), 394 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index e6cbc6e56..7f655aea6 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -73,30 +73,30 @@ MainWindow::MainWindow(QWidget *parent) ui->inputsStackedWidget->setCurrentIndex(0); ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); - ui->treeWidget->topLevelItem(0)->child(0)->setData(0, Qt::UserRole, 2); - ui->treeWidget->topLevelItem(0)->child(1)->setData(0, Qt::UserRole, 3); - ui->treeWidget->topLevelItem(1)->setData(0, Qt::UserRole, 4); - ui->treeWidget->topLevelItem(1)->child(0)->setData(0, Qt::UserRole, 5); - ui->treeWidget->topLevelItem(1)->child(1)->setData(0, Qt::UserRole, 6); - ui->treeWidget->topLevelItem(1)->child(2)->setData(0, Qt::UserRole, 7); - ui->treeWidget->topLevelItem(1)->child(3)->setData(0, Qt::UserRole, 8); + ui->treeWidget->topLevelItem(0)->child(0)->setData(0, Qt::UserRole, 1); + ui->treeWidget->topLevelItem(0)->child(1)->setData(0, Qt::UserRole, 2); + ui->treeWidget->topLevelItem(1)->setData(0, Qt::UserRole, 3); + ui->treeWidget->topLevelItem(1)->child(0)->setData(0, Qt::UserRole, 3); + ui->treeWidget->topLevelItem(1)->child(1)->setData(0, Qt::UserRole, 4); + ui->treeWidget->topLevelItem(1)->child(2)->setData(0, Qt::UserRole, 5); + ui->treeWidget->topLevelItem(1)->child(3)->setData(0, Qt::UserRole, 6); QTreeWidgetItem *windInputItem = ui->treeWidget->topLevelItem(1)->child(3); - windInputItem->child(0)->setData(0, Qt::UserRole, 9); - windInputItem->child(1)->setData(0, Qt::UserRole, 10); - windInputItem->child(2)->setData(0, Qt::UserRole, 11); - ui->treeWidget->topLevelItem(2)->setData(0, Qt::UserRole, 12); - ui->treeWidget->topLevelItem(2)->child(0)->setData(0, Qt::UserRole, 13); - ui->treeWidget->topLevelItem(2)->child(1)->setData(0, Qt::UserRole, 14); - ui->treeWidget->topLevelItem(2)->child(2)->setData(0, Qt::UserRole, 15); - ui->treeWidget->topLevelItem(2)->child(3)->setData(0, Qt::UserRole, 16); - ui->treeWidget->topLevelItem(2)->child(4)->setData(0, Qt::UserRole, 17); - ui->treeWidget->topLevelItem(3)->setData(0, Qt::UserRole, 18); + windInputItem->child(0)->setData(0, Qt::UserRole, 6); + windInputItem->child(1)->setData(0, Qt::UserRole, 7); + windInputItem->child(2)->setData(0, Qt::UserRole, 8); + ui->treeWidget->topLevelItem(2)->setData(0, Qt::UserRole, 9); + ui->treeWidget->topLevelItem(2)->child(0)->setData(0, Qt::UserRole, 10); + ui->treeWidget->topLevelItem(2)->child(1)->setData(0, Qt::UserRole, 11); + ui->treeWidget->topLevelItem(2)->child(2)->setData(0, Qt::UserRole, 12); + ui->treeWidget->topLevelItem(2)->child(3)->setData(0, Qt::UserRole, 13); + ui->treeWidget->topLevelItem(2)->child(4)->setData(0, Qt::UserRole, 14); + ui->treeWidget->topLevelItem(3)->setData(0, Qt::UserRole, 15); ui->treeWidget->topLevelItem(0)->setSelected(true); int nCPUs = QThread::idealThreadCount(); - ui->availableProcessorsTextEdit->setPlainText("Available Processors: " + QString::number(nCPUs)); + ui->availableProcessorsLabel->setText("Available Processors: " + QString::number(nCPUs)); ui->numberOfProcessorsSpinBox->setMaximum(nCPUs); ui->numberOfProcessorsSpinBox->setValue(nCPUs); @@ -598,7 +598,7 @@ void MainWindow::solveButtonClicked() else { int year, month, day, hour, minute; - QDateTime date = ui->weatherStationDataTextEdit->property("simulationTime").toDateTime(); + QDateTime date = ui->weatherStationDataLabel->property("simulationTime").toDateTime(); year = date.date().year(); month = date.date().month(); day = date.date().day(); diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index 396f105c0..1fd73b2a2 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -605,6 +605,12 @@ false + + + 0 + 0 + + Qt::Orientation::Vertical @@ -826,68 +832,9 @@ QFrame::Shadow::Sunken - 9 + 7 - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 10 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';">A solution requires the selection of one (1) Solver Methodology:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';"> 1. Conservation of Mass (faster, less accurate)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';"> 2. Conservation of Mass and Momentum (slower, more accurate)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';">Select either option for more detail.</span></p></body></html> - - - Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - @@ -896,6 +843,9 @@ li.checked::marker { content: "\2612"; } + + 6 + 5 @@ -922,24 +872,15 @@ li.checked::marker { content: "\2612"; } - - - - 8 - + + + This is the native WindNinja solver. It solves a conservation of mass equation, but not a conservation of momentum equation. This solver is fast-running, but may give less accurate wind predictions in regions where momentum effects are important, for example on the lee side of terrain obstacles. - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">This is the native WindNinja solver. It solves a conservation of mass equation, but not a conservation of momentum equation. This solver is fast-running, but may give less accurate wind predictions in regions where momentum effects are important, for example on the lee side of terrain obstacles.</span></p></body></html> + + false - - Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse + + true @@ -989,27 +930,12 @@ li.checked::marker { content: "\2612"; } - - - - 8 - - - - QFrame::Shape::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt;">This solver conserves both mass and momentum. It is based on the OpenFOAM CFD toolbox. This solver should give more accurate wind predictions in regions where momentum effects are important, such as on the lee side of terrain obstacles. Because this solver is more computationally intensive than the conservation of mass solver, simulation times will be longer. Typical simulation times for this solver range from 10-30 minutes, but will depend on your domain, resolution, and computational resources. Note that some options (e.g., point initialization and non-neutral stability) are not available for this solver at this time. We plan to make these options available in future releases.</span></p></body></html> + + + This solver conserves both mass and momentum. It is based on the OpenFOAM CFD toolbox. This solver should give more accurate wind predictions in regions where momentum effects are important, such as on the lee side of terrain obstacles. Because this solver is more computationally intensive than the conservation of mass solver, simulation times will be longer. Typical simulation times for this solver range from 10-30 minutes, but will depend on your domain, resolution, and computational resources. Note that some options (e.g., point initialization and non-neutral stability) are not available for this solver at this time. We plan to make these options available in future releases. - - Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse + + true @@ -1028,66 +954,6 @@ li.checked::marker { content: "\2612"; } - - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - 8 - - - - QFrame::Shape::NoFrame - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">This is where input parameters are defined. Analysis requires:</span> </p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> </p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> <span style=" font-family:'Sans Serif'; font-size:10pt;">1. Surface Input (.tif) file:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:30px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:10pt;">- Can be uploaded from a computer or downloaded using the map on the right</span> </p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:30px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:10pt;">- Optional diurnal and stability analysis</span> </p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> <span style=" font-family:'Sans Serif'; font-size:10pt;">2. Wind Input:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:30px; margin-right:0px; -qt-block-indent:1; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:10pt;">- Requires one (1) of the three (3) options available: Domain Average Wind, Point Initialization, or Weather Model</span></p></body></html> - - - Qt::TextInteractionFlag::TextSelectableByKeyboard|Qt::TextInteractionFlag::TextSelectableByMouse - - - - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - - @@ -1102,6 +968,18 @@ li.checked::marker { content: "\2612"; } + + 0 + + + 0 + + + 0 + + + 0 + @@ -1112,8 +990,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 538 - 419 + 596 + 406 @@ -1122,7 +1000,22 @@ li.checked::marker { content: "\2612"; } 0 - + + + 6 + + + 5 + + + 5 + + + 5 + + + 5 + @@ -1134,12 +1027,21 @@ li.checked::marker { content: "\2612"; } 0 - 70 + 0 Elevation Input File + + false + + + false + + + false + 5 @@ -1224,13 +1126,25 @@ li.checked::marker { content: "\2612"; } 0 - 70 + 0 Vegetation + + 5 + + + 5 + + + 5 + + + 5 + @@ -1240,10 +1154,22 @@ li.checked::marker { content: "\2612"; } - 1 + 0 + + 0 + + + 0 + + + 0 + + + 0 + @@ -1289,6 +1215,18 @@ li.checked::marker { content: "\2612"; } + + 0 + + + 0 + + + 0 + + + 0 + @@ -1333,13 +1271,25 @@ li.checked::marker { content: "\2612"; } 0 - 70 + 0 Mesh Resolution + + 5 + + + 5 + + + 5 + + + 5 + @@ -1434,7 +1384,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -1697,23 +1647,22 @@ li.checked::marker { content: "\2612"; } - 6 - 5 + 0 - 5 + 0 - 5 + 0 - 5 + 0 @@ -1725,8 +1674,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 586 - 498 + 596 + 406 @@ -1748,6 +1697,18 @@ li.checked::marker { content: "\2612"; } false + + 5 + + + 5 + + + 5 + + + 5 + @@ -1760,6 +1721,18 @@ li.checked::marker { content: "\2612"; } Input Wind Height + + 5 + + + 5 + + + 5 + + + 5 + @@ -2132,29 +2105,29 @@ li.checked::marker { content: "\2612"; } - + 0 0 - 1000 + 16777215 16777215 - 5 + 0 - 5 + 0 - 5 + 0 - 5 + 0 @@ -2169,10 +2142,16 @@ li.checked::marker { content: "\2612"; } 0 0 - 502 - 399 + 596 + 508 + + + 0 + 0 + + @@ -2204,6 +2183,18 @@ li.checked::marker { content: "\2612"; } false + + 5 + + + 5 + + + 5 + + + 5 + @@ -2351,6 +2342,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + Qt::Orientation::Horizontal @@ -2359,7 +2356,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -2367,7 +2364,7 @@ li.checked::marker { content: "\2612"; } 0 - 80 + 0 @@ -2377,7 +2374,7 @@ li.checked::marker { content: "\2612"; } - 0 + 1 @@ -2387,6 +2384,24 @@ li.checked::marker { content: "\2612"; } + + 0 + + + 0 + + + 0 + + + 0 + + + 6 + + + 0 + @@ -2494,19 +2509,22 @@ li.checked::marker { content: "\2612"; } + + 0 + + + 0 + + + 0 + + + 0 + - - - - 0 - 0 - - - - - 16777215 - 30 - + + + Placeholder Text @@ -2517,7 +2535,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -2530,7 +2548,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -2543,7 +2561,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -2555,15 +2573,21 @@ li.checked::marker { content: "\2612"; } - - Qt::Orientation::Horizontal + + + 0 + 0 + + + + Qt::Orientation::Horizontal - + 0 0 @@ -2592,16 +2616,16 @@ li.checked::marker { content: "\2612"; } - 5 + 0 - 5 + 0 - 5 + 0 - 5 + 0 @@ -2613,8 +2637,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 358 - 713 + 582 + 681 @@ -2630,6 +2654,18 @@ li.checked::marker { content: "\2612"; } false + + 5 + + + 5 + + + 5 + + + 5 + @@ -2642,6 +2678,18 @@ li.checked::marker { content: "\2612"; } Download Weather Data + + 5 + + + 5 + + + 5 + + + 5 + @@ -2712,6 +2760,18 @@ li.checked::marker { content: "\2612"; } false + + 5 + + + 5 + + + 5 + + + 5 + @@ -2760,16 +2820,16 @@ li.checked::marker { content: "\2612"; } - 0 + 5 - 0 + 5 - 0 + 5 - 0 + 5 @@ -2802,6 +2862,18 @@ li.checked::marker { content: "\2612"; } false + + 0 + + + 0 + + + 0 + + + 0 + @@ -2876,6 +2948,18 @@ li.checked::marker { content: "\2612"; } + + 5 + + + 5 + + + 5 + + + 5 + @@ -2894,6 +2978,18 @@ li.checked::marker { content: "\2612"; } Output Wind Height + + 5 + + + 5 + + + 5 + + + 5 + @@ -3095,6 +3191,18 @@ li.checked::marker { content: "\2612"; } + + 0 + + + 0 + + + 0 + + + 0 + @@ -3111,8 +3219,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 390 - 468 + 596 + 508 @@ -3125,29 +3233,31 @@ li.checked::marker { content: "\2612"; } Qt::LayoutDirection::LeftToRight + + 5 + + + 5 + + + 5 + + + 5 + - + 0 0 - - false - - - 0 + + NOTE: Version 4.0.0 requires Google Earth (KML/KMZ) files to display simulations on the map. This requirement will be removed in version 4.0.1. - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Version 4.0.0 requires Google Earth (KML/KMZ) files to display simulations on the map. This requirement will be removed in version 4.0.1. </p></body></html> + + true @@ -3156,6 +3266,12 @@ li.checked::marker { content: "\2612"; } false + + + 0 + 0 + + Create Google Earth Files (*.kmz) @@ -3175,13 +3291,25 @@ li.checked::marker { content: "\2612"; } 0 - 69 + 0 Legend + + 5 + + + 5 + + + 5 + + + 5 + @@ -3242,7 +3370,7 @@ li.checked::marker { content: "\2612"; } 0 - 70 + 0 @@ -3252,6 +3380,18 @@ li.checked::marker { content: "\2612"; } QLayout::SizeConstraint::SetNoConstraint + + 5 + + + 5 + + + 5 + + + 5 + @@ -3306,13 +3446,28 @@ li.checked::marker { content: "\2612"; } 0 - 114 + 0 Resolution + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + @@ -3334,6 +3489,18 @@ li.checked::marker { content: "\2612"; } true + + 5 + + + 5 + + + 5 + + + 5 + @@ -3412,7 +3579,7 @@ li.checked::marker { content: "\2612"; } 0 - 69 + 0 @@ -3425,6 +3592,18 @@ li.checked::marker { content: "\2612"; } false + + 5 + + + 5 + + + 5 + + + 5 + @@ -3512,10 +3691,22 @@ li.checked::marker { content: "\2612"; } + + 5 + + + 5 + + + 5 + + + 5 + - + 0 0 @@ -3523,7 +3714,7 @@ li.checked::marker { content: "\2612"; } 0 - 186 + 0 @@ -3536,6 +3727,18 @@ li.checked::marker { content: "\2612"; } false + + 5 + + + 5 + + + 5 + + + 5 + @@ -3554,6 +3757,18 @@ li.checked::marker { content: "\2612"; } Resolution + + 0 + + + 0 + + + 0 + + + 0 + @@ -3575,6 +3790,18 @@ li.checked::marker { content: "\2612"; } true + + 5 + + + 5 + + + 5 + + + 5 + @@ -3669,10 +3896,22 @@ li.checked::marker { content: "\2612"; } + + 5 + + + 5 + + + 5 + + + 5 + - + 0 0 @@ -3680,7 +3919,7 @@ li.checked::marker { content: "\2612"; } 0 - 158 + 0 @@ -3693,6 +3932,18 @@ li.checked::marker { content: "\2612"; } false + + 5 + + + 5 + + + 5 + + + 5 + @@ -3704,13 +3955,25 @@ li.checked::marker { content: "\2612"; } 0 - 114 + 0 Resolution + + 0 + + + 0 + + + 0 + + + 0 + @@ -3732,6 +3995,18 @@ li.checked::marker { content: "\2612"; } true + + 5 + + + 5 + + + 5 + + + 5 + @@ -3818,7 +4093,25 @@ li.checked::marker { content: "\2612"; } - + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + @@ -3829,15 +4122,15 @@ li.checked::marker { content: "\2612"; } 0 0 - 381 - 318 + 596 + 508 - + 0 0 @@ -3845,7 +4138,7 @@ li.checked::marker { content: "\2612"; } 0 - 300 + 0 @@ -3858,6 +4151,18 @@ li.checked::marker { content: "\2612"; } false + + 5 + + + 5 + + + 5 + + + 5 + @@ -3869,15 +4174,33 @@ li.checked::marker { content: "\2612"; } 0 - 70 + 0 Vectors + + 5 + + + 5 + + + 5 + + + 5 + + + + 0 + 0 + + Line Width: @@ -4047,7 +4370,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -4055,13 +4378,25 @@ li.checked::marker { content: "\2612"; } 0 - 114 + 0 Resolution - + + + 0 + + + 0 + + + 0 + + + 0 + @@ -4073,7 +4408,7 @@ li.checked::marker { content: "\2612"; } 0 - 70 + 0 @@ -4083,11 +4418,29 @@ li.checked::marker { content: "\2612"; } true + + 5 + + + 5 + + + 5 + + + 5 + false + + + 0 + 0 + + 5000.000000000000000 @@ -4153,27 +4506,39 @@ li.checked::marker { content: "\2612"; } + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + - - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - - - + + + 5 + + + 5 + + + 5 + + + 5 + @@ -4188,24 +4553,20 @@ li.checked::marker { content: "\2612"; } - - - - 0 - 0 - + + + Write VTK surface and volume files + - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Write VTK surface and volume files</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt;">Note that *vtk files are for advanced users and are rarely used by fire managers/modelers</span></p></body></html> + + + + + + Note that *vtk files are for advanced users and are rarely used by fire managers/modelers + + + true @@ -4242,35 +4603,11 @@ li.checked::marker { content: "\2612"; } 5 - - - - 0 - 0 - - - - - 16777215 - 25 - - - - - 0 - 0 - - - - QFrame::Shape::NoFrame - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff + + + Placeholder Text - + true @@ -4278,38 +4615,8 @@ li.checked::marker { content: "\2612"; } - - - - 0 - 0 - - - - - 175 - 25 - - - - - 0 - 0 - - - - QFrame::Shape::NoFrame - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - true - - + + Number of Processors: @@ -4341,6 +4648,10 @@ li.checked::marker { content: "\2612"; } Solve + + + :/cog_go.png:/cog_go.png + @@ -4370,6 +4681,18 @@ li.checked::marker { content: "\2612"; } Output Directory + + 5 + + + 5 + + + 5 + + + 5 + @@ -4383,7 +4706,11 @@ li.checked::marker { content: "\2612"; } PointingHandCursor - Output Location + Save output in... + + + + :/folder.png:/folder.png @@ -4420,6 +4747,18 @@ li.checked::marker { content: "\2612"; } + + 5 + + + 5 + + + 5 + + + 5 + @@ -4432,6 +4771,18 @@ li.checked::marker { content: "\2612"; } Elevation Input Type + + 5 + + + 5 + + + 5 + + + 5 + @@ -4520,10 +4871,22 @@ li.checked::marker { content: "\2612"; } - 0 + 1 + + 0 + + + 0 + + + 0 + + + 0 + @@ -4568,6 +4931,18 @@ li.checked::marker { content: "\2612"; } + + 0 + + + 0 + + + 0 + + + 0 + @@ -4687,11 +5062,23 @@ li.checked::marker { content: "\2612"; } - + + + 5 + + + 5 + + + 5 + + + 5 + - + 0 0 @@ -4699,13 +5086,25 @@ li.checked::marker { content: "\2612"; } 0 - 250 + 0 Fetch Station Data + + 5 + + + 5 + + + 5 + + + 5 + @@ -4738,7 +5137,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -4763,8 +5162,26 @@ li.checked::marker { content: "\2612"; } + + 0 + + + 0 + + + 0 + + + 0 + + + + 0 + 0 + + Buffer Around DEM @@ -4779,6 +5196,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + PointingHandCursor @@ -4810,9 +5233,36 @@ li.checked::marker { content: "\2612"; } + + + 16777215 + 16777215 + + + + SizeBDiagCursor + + + 5 + + + 5 + + + 5 + + + 5 + + + + 0 + 0 + + Input Station IDs @@ -4871,7 +5321,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -4885,43 +5335,36 @@ li.checked::marker { content: "\2612"; } 16777215 - 80 + 16777215 - 1 + 0 + + 5 + + + 5 + + + 5 + + + 5 + - + - + 0 0 - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download the most recent weather data for a single time step simulation</p></body></html> + + Download the most recent weather data for a single time step simulation @@ -4929,10 +5372,28 @@ li.checked::marker { content: "\2612"; } + + 5 + + + 5 + + + 5 + + + 5 + + + + 0 + 0 + + Start Time: @@ -4947,6 +5408,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + End Time: @@ -4976,6 +5443,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + Current Time Zone: diff --git a/src/gui/pointInitializationInput.cpp b/src/gui/pointInitializationInput.cpp index c2bd3e9ce..07e341d22 100644 --- a/src/gui/pointInitializationInput.cpp +++ b/src/gui/pointInitializationInput.cpp @@ -80,13 +80,13 @@ void PointInitializationInput::pointInitializationDownloadDataButtonClicked() ui->downloadBetweenDatesStartTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(-1)); ui->downloadBetweenDatesEndTimeDateTimeEdit->setDateTime(QDateTime::currentDateTime()); - ui->inputsStackedWidget->setCurrentIndex(20); + ui->inputsStackedWidget->setCurrentIndex(17); } void PointInitializationInput::weatherStationDataDownloadCancelButtonClicked() { ui->pointInitializationTreeView->collapseAll(); - ui->inputsStackedWidget->setCurrentIndex(10); + ui->inputsStackedWidget->setCurrentIndex(7); } void PointInitializationInput::weatherStationDataDownloadButtonClicked() @@ -348,8 +348,8 @@ void PointInitializationInput::pointInitializationTreeViewItemSelectionChanged(c if (!timeSeriesFlag) { QDateTime dateModified = QFileInfo(recentFileSelected).birthTime(); - ui->weatherStationDataTextEdit->setText("Simulation time set to: " + dateModified.toString()); - ui->weatherStationDataTextEdit->setProperty("simulationTime", dateModified); + ui->weatherStationDataLabel->setText("Simulation time set to: " + dateModified.toString()); + ui->weatherStationDataLabel->setProperty("simulationTime", dateModified); } ui->pointInitializationTreeView->setProperty("timeSeriesFlag", timeSeriesFlag); } diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp index 74a00c18f..b67aaaafa 100644 --- a/src/gui/surfaceInput.cpp +++ b/src/gui/surfaceInput.cpp @@ -175,7 +175,7 @@ void SurfaceInput::pointRadiusLineEditsTextChanged() void SurfaceInput::surfaceInputDownloadCancelButtonClicked() { - ui->inputsStackedWidget->setCurrentIndex(5); + ui->inputsStackedWidget->setCurrentIndex(3); ui->elevationInputTypeComboBox->setCurrentIndex(0); ui->elevationFileTypeComboBox->setCurrentIndex(0); @@ -248,7 +248,7 @@ void SurfaceInput::surfaceInputDownloadButtonClicked() void SurfaceInput::elevationInputFileDownloadButtonClicked() { - ui->inputsStackedWidget->setCurrentIndex(19); + ui->inputsStackedWidget->setCurrentIndex(16); } void SurfaceInput::meshResolutionComboBoxCurrentIndexChanged(int index) From a4cfab5c6dfd5b262cbe625be3f65f2d4205b7a4 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 26 Jan 2026 17:20:51 -0700 Subject: [PATCH 383/435] Fixed any missed index for the inputsStackedWidget --- src/gui/mainWindow.cpp | 3 +- src/gui/mainWindow.ui | 49 ++++++++++++++++++++-------- src/gui/pointInitializationInput.cpp | 2 +- src/gui/surfaceInput.cpp | 2 +- 4 files changed, 38 insertions(+), 18 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 7f655aea6..4e488f3da 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -71,7 +71,7 @@ MainWindow::MainWindow(QWidget *parent) weatherModelInput = new WeatherModelInput(ui, this); outputs = new Outputs(ui, this); - ui->inputsStackedWidget->setCurrentIndex(0); + ui->inputsStackedWidget->setCurrentIndex(1); ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); ui->treeWidget->topLevelItem(0)->child(0)->setData(0, Qt::UserRole, 1); ui->treeWidget->topLevelItem(0)->child(1)->setData(0, Qt::UserRole, 2); @@ -94,7 +94,6 @@ MainWindow::MainWindow(QWidget *parent) ui->treeWidget->topLevelItem(0)->setSelected(true); - int nCPUs = QThread::idealThreadCount(); ui->availableProcessorsLabel->setText("Available Processors: " + QString::number(nCPUs)); ui->numberOfProcessorsSpinBox->setMaximum(nCPUs); diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index 1fd73b2a2..da3fb876e 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -802,7 +802,7 @@ - + 0 0 @@ -832,7 +832,7 @@ QFrame::Shadow::Sunken - 7 + 13 @@ -982,6 +982,9 @@ + + QFrame::Shape::NoFrame + true @@ -990,8 +993,8 @@ 0 0 - 596 - 406 + 598 + 510 @@ -1666,6 +1669,12 @@ li.checked::marker { content: "\2612"; } + + QFrame::Shape::NoFrame + + + 1 + true @@ -1674,8 +1683,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 596 - 406 + 598 + 510 @@ -2131,6 +2140,9 @@ li.checked::marker { content: "\2612"; } + + QFrame::Shape::NoFrame + true @@ -2142,8 +2154,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 596 - 508 + 598 + 510 @@ -2629,6 +2641,9 @@ li.checked::marker { content: "\2612"; } + + QFrame::Shape::NoFrame + true @@ -2637,7 +2652,7 @@ li.checked::marker { content: "\2612"; } 0 0 - 582 + 584 681 @@ -3211,6 +3226,9 @@ li.checked::marker { content: "\2612"; } 0 + + QFrame::Shape::NoFrame + true @@ -3219,8 +3237,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 596 - 508 + 598 + 510 @@ -4114,6 +4132,9 @@ li.checked::marker { content: "\2612"; } + + QFrame::Shape::NoFrame + true @@ -4122,8 +4143,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 596 - 508 + 598 + 408 @@ -4370,7 +4391,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 diff --git a/src/gui/pointInitializationInput.cpp b/src/gui/pointInitializationInput.cpp index 07e341d22..d2b9f4a2f 100644 --- a/src/gui/pointInitializationInput.cpp +++ b/src/gui/pointInitializationInput.cpp @@ -227,7 +227,7 @@ void PointInitializationInput::fetchStationDataFinished() futureWatcher = nullptr; } - ui->inputsStackedWidget->setCurrentIndex(10); + ui->inputsStackedWidget->setCurrentIndex(7); } void PointInitializationInput::weatherStationDataSourceComboBoxCurrentIndexChanged(int index) diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp index b67aaaafa..16f02bc7c 100644 --- a/src/gui/surfaceInput.cpp +++ b/src/gui/surfaceInput.cpp @@ -359,7 +359,7 @@ void SurfaceInput::fetchDEMFinished() } ui->elevationInputFileLineEdit->setText(ui->elevationInputFileLineEdit->property("fullpath").toString()); - ui->inputsStackedWidget->setCurrentIndex(5); + ui->inputsStackedWidget->setCurrentIndex(3); } void SurfaceInput::timeZoneComboBoxCurrentIndexChanged(int index) From a9ed80bbe622cbc1b0b474da566664e14152824f Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 26 Jan 2026 17:48:07 -0700 Subject: [PATCH 384/435] Changed how tree item selection was handled, allowing pages to be changed via arrow keys --- src/gui/mainWindow.cpp | 7 ++++--- src/gui/mainWindow.h | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 4e488f3da..f20882861 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -124,7 +124,7 @@ void MainWindow::connectSignals() connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, this, &MainWindow::treeWidgetItemDoubleClicked); connect(ui->numberOfProcessorsSolveButton, &QPushButton::clicked, this, &MainWindow::solveButtonClicked); connect(ui->outputDirectoryButton, &QPushButton::clicked, this, &MainWindow::outputDirectoryButtonClicked); - connect(ui->treeWidget, &QTreeWidget::itemClicked, this, &MainWindow::treeItemClicked); + connect(ui->treeWidget, &QTreeWidget::itemSelectionChanged, this, &MainWindow::treeWidgetItemSelectionChanged); connect(menuBar, &MenuBar::writeToConsole, this, &MainWindow::writeToConsole); connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); @@ -300,9 +300,10 @@ void MainWindow::cancelSolve() } } -void MainWindow::treeItemClicked(QTreeWidgetItem *item, int column) +void MainWindow::treeWidgetItemSelectionChanged() { - int pageIndex = item->data(column, Qt::UserRole).toInt(); + int column = ui->treeWidget->currentColumn(); + int pageIndex = ui->treeWidget->selectedItems()[0]->data(column, Qt::UserRole).toInt(); // assume 0 since no multi selection ui->inputsStackedWidget->setCurrentIndex(pageIndex); } diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index 537ac3da5..a43347947 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -107,6 +107,7 @@ private slots: void momentumSolverCheckBoxClicked(); void diurnalCheckBoxClicked(); void stabilityCheckBoxClicked(); + void treeWidgetItemSelectionChanged(); void treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column); void solveButtonClicked(); void outputDirectoryButtonClicked(); @@ -149,7 +150,6 @@ private slots: QString currentDEMFilePath; void connectSignals(); - void treeItemClicked(QTreeWidgetItem *item, int column); bool prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* initializationMethod); bool setOutputFlags(NinjaArmyH* ninjaArmy, int i, From 1bece8d3545208ef9865ea037a96d5f064846eac Mon Sep 17 00:00:00 2001 From: masonwillman Date: Mon, 26 Jan 2026 17:52:10 -0700 Subject: [PATCH 385/435] Added spacing on version dialog box to prevent characters from cutting off --- src/gui/serverBridge.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/gui/serverBridge.cpp b/src/gui/serverBridge.cpp index d4fc3e554..9b35c0ae3 100644 --- a/src/gui/serverBridge.cpp +++ b/src/gui/serverBridge.cpp @@ -52,7 +52,11 @@ void ServerBridge::checkMessages(void) if (papszMsg != NULL) { mbox.setTextFormat(Qt::RichText); - mbox.setText(papszMsg); + + QString formattedMsg = QString( + "
%1
" + ).arg(papszMsg); + mbox.setText(formattedMsg); mbox.setTextInteractionFlags(Qt::TextBrowserInteraction); mbox.setStandardButtons(QMessageBox::Ok); mbox.setWindowModality(Qt::ApplicationModal); From 68e0893d870d254d5acd409db73657dd9eb5e6a0 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 27 Jan 2026 12:19:23 -0700 Subject: [PATCH 386/435] continuing 1st attempt at extending the ninjaCom GUI error handling to point initialization, involved a 1st attempt at testing the newly moved ninjaTools functions in the solveButtonClicked() function, turns out the various makeArmy() functions also needed testing. Looks like the various makeArmy() C-API functions will need to be moved from the C-API to ninjaTools/ninjaArmy to get the tests to more properly work. For issue #639, related to issues #582 and #667 --- src/gui/mainWindow.cpp | 222 +++++++++++++++++++++++++++++++++- src/gui/weatherModelInput.cpp | 2 +- src/ninja/ninjaArmy.cpp | 23 +++- src/ninja/ninjaArmy.h | 4 +- src/ninja/windninja.cpp | 94 +++++++++----- 5 files changed, 308 insertions(+), 37 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index dadc8bc60..779b230a1 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -491,6 +491,9 @@ void MainWindow::solveButtonClicked() // ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), DEMTimeZone.toUtf8().data(), airTemps.data(), airTempUnits.toUtf8().constData(), cloudCovers.data(), cloudCoverUnits.toUtf8().constData(), papszOptions); ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), timeZoneUtc, airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); + //ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, -1, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), timeZoneUtc, airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); // catches error as expected + //ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, 0, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), timeZoneUtc, airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); // catches error as expected + //ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), "fudge", airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); // requires the try/catch form of IF_VALID_INDEX_TRY in ninjaArmy.h, but then catches error as expected if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaMakeDomainAverageArmy: ninjaErr =" << ninjaErr; @@ -536,7 +539,59 @@ void MainWindow::solveButtonClicked() QVector hour = { start.time().hour(), end.time().hour() }; QVector minute = { start.time().minute(), end.time().minute() }; + // runs fine for the single time run, as expected, + // but errors without a proper ninjaCom message for the multi-time run + /*QVector year = {start.date().year(), start.date().year()}; + QVector month = {start.date().month(), start.date().month()}; + QVector day = {start.date().day(), start.date().day()}; + QVector hour = {start.time().hour(), start.time().hour()}; + QVector minute = {start.time().minute(), start.time().minute()};*/ + + // runs fine for the single time run, as expected, + // but errors without a proper ninjaCom message for the multi-time run + /*QVector year = {end.date().year(), end.date().year()}; + QVector month = {end.date().month(), end.date().month()}; + QVector day = {end.date().day(), end.date().day()}; + QVector hour = {end.time().hour(), end.time().hour()}; + QVector minute = {end.time().minute(), end.time().minute()};*/ + + // runs fine for the single time run, as expected, + // but errors without a proper ninjaCom message for the multi-time run + /*QVector year = {start.date().year(), start.date().year()-1}; + QVector month = {start.date().month(), start.date().month()}; + QVector day = {start.date().day(), start.date().day()}; + QVector hour = {start.time().hour(), start.time().hour()}; + QVector minute = {start.time().minute(), start.time().minute()};*/ + + // runs fine for the single time run, as expected, + // but errors without a proper ninjaCom message for the multi-time run, + // which is interesting because the download without extra time difference should also error but does not always error, + // implies the time checking for this or the run from this, runs better + /*QVector year = {start.date().year(), start.date().year()}; + QVector month = {start.date().month(), start.date().month()}; + QVector day = {start.date().day(), start.date().day()}; + QVector hour = {start.time().hour(), start.time().hour()-1}; + QVector minute = {start.time().minute(), start.time().minute()};*/ + + // errors for both the single time run AND the multi-time run, + // but errors without a proper ninjaCom message for both cases + /*QVector year = {end.date().year()+1, end.date().year()}; + QVector month = {end.date().month(), end.date().month()}; + QVector day = {end.date().day(), end.date().day()}; + QVector hour = {end.time().hour(), end.time().hour()}; + QVector minute = {end.time().minute(), end.time().minute()};*/ + + // errors for both the single time run AND the multi-time run, + // but errors without a proper ninjaCom message for both cases + /*QVector year = {end.date().year(), end.date().year()}; + QVector month = {end.date().month(), end.date().month()}; + QVector day = {end.date().day(), end.date().day()}; + QVector hour = {end.time().hour()+1, end.time().hour()}; + QVector minute = {end.time().minute(), end.time().minute()};*/ + int nTimeSteps = ui->weatherStationDataTimestepsSpinBox->value(); + //int nTimeSteps = 1; // runs fine for the single time, throws an error properly for multi-times, well the error implies out of index but maybe not at the proper step ("NinjaSetNumberCPUS", "Run 0: ERROR: Exception caught: invalid index 1". But an error is still at least caught. + //int nTimeSteps = 2; // runs fine for multi-times, but for the single time, an error is getting thrown, but apparently the solver isn't stopping because it is an error on just one single thread???? Quirky behavior that is not good. "ERROR 4: : No such file or directory, Run 1: ERROR: Exception caught: Cannot open input file for reading in ninja::readInputFile()." but then it continues with the run0 info to completion, then it ends hanging because it didn't stop at the error message and it finds it DID have some kind of error at the end. Ugh. QVector outYear(nTimeSteps); QVector outMonth(nTimeSteps); @@ -560,6 +615,12 @@ void MainWindow::solveButtonClicked() timeZoneBytes.constData(), &endYear, &endMonth, &endDay, &endHour, &endMinute ); + //ninjaErr = NinjaGenerateSingleTimeObject( + // ninjaTools, + // startYear, startMonth, startDay, startHour, startMinute, + // "fudge", + // &endYear, &endMonth, &endDay, &endHour, &endMinute + // ); // breaks HARD, a smart pointer failing on assert somewhere along the pipeline, not sure if that occurs here, or later down the pipeline. And it gets past the try/catch error handling stuff, hrm. if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaGenerateSingleTimeObject: ninjaErr =" << ninjaErr; @@ -581,6 +642,22 @@ void MainWindow::solveButtonClicked() outHour.data(), outMinute.data(), nTimeSteps, timeZoneBytes.data() ); + //ninjaErr = NinjaGetTimeList( + // ninjaTools, + // year.data(), month.data(), day.data(), + // hour.data(), minute.data(), + // outYear.data(), outMonth.data(), outDay.data(), + // outHour.data(), outMinute.data(), + // 1, timeZoneBytes.data() + // ); // seems to run this function fine, but then it confuses the makePointArmy(), but where it is left hanging rather than dying properly with an error message + //ninjaErr = NinjaGetTimeList( + // ninjaTools, + // year.data(), month.data(), day.data(), + // hour.data(), minute.data(), + // outYear.data(), outMonth.data(), outDay.data(), + // outHour.data(), outMinute.data(), + // nTimeSteps, "fudge" + // ); // breaks HARD, a smart pointer failing on assert somewhere along the pipeline, not sure if that occurs here, or later down the pipeline. And it gets past the try/catch error handling stuff, hrm. if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaGetTimeList: ninjaErr =" << ninjaErr; @@ -598,6 +675,55 @@ void MainWindow::solveButtonClicked() stationFileNames.size(), DEMPath.toUtf8().data(), true, momentumFlag, papszOptions ); + //ninjaErr = NinjaMakePointArmy( ninjaArmy, + // outYear.data(), outMonth.data(), outDay.data(), + // outHour.data(), outMinute.data(), -1, + // DEMTimeZone.toUtf8().data(), stationFileNames.data(), + // stationFileNames.size(), DEMPath.toUtf8().data(), + // true, momentumFlag, papszOptions + // ); // ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaMakePointArmy( ninjaArmy, + // outYear.data(), outMonth.data(), outDay.data(), + // outHour.data(), outMinute.data(), 0, + // DEMTimeZone.toUtf8().data(), stationFileNames.data(), + // stationFileNames.size(), DEMPath.toUtf8().data(), + // true, momentumFlag, papszOptions + // ); // catches error as expected + //ninjaErr = NinjaMakePointArmy( ninjaArmy, + // outYear.data(), outMonth.data(), outDay.data(), + // outHour.data(), outMinute.data(), nTimeSteps, + // DEMTimeZone.toUtf8().data(), stationFileNames.data(), + // -1, DEMPath.toUtf8().data(), + // true, momentumFlag, papszOptions + // ); // hard core seg faults + //ninjaErr = NinjaMakePointArmy( ninjaArmy, + // outYear.data(), outMonth.data(), outDay.data(), + // outHour.data(), outMinute.data(), nTimeSteps, + // DEMTimeZone.toUtf8().data(), stationFileNames.data(), + // 0, DEMPath.toUtf8().data(), + // true, momentumFlag, papszOptions + // ); // hard core seg faults + //ninjaErr = NinjaMakePointArmy( ninjaArmy, + // outYear.data(), outMonth.data(), outDay.data(), + // outHour.data(), outMinute.data(), nTimeSteps, + // DEMTimeZone.toUtf8().data(), stationFileNames.data(), + // stationFileNames.size(), "fudge", + // true, momentumFlag, papszOptions + // ); // um, it warns that the dem doesn't exist, but then continues on without throwing an error or a ninjaCom, so the solver continues as if everything is normal + //ninjaErr = NinjaMakePointArmy( ninjaArmy, + // outYear.data(), outMonth.data(), outDay.data(), + // outHour.data(), outMinute.data(), nTimeSteps, + // "fudge", stationFileNames.data(), + // stationFileNames.size(), DEMPath.toUtf8().data(), + // true, momentumFlag, papszOptions + // ); // no error or warning messages are thrown, just runs as if the dem timezone is good enough + //ninjaErr = NinjaMakePointArmy( ninjaArmy, + // outYear.data(), outMonth.data(), outDay.data(), + // outHour.data(), outMinute.data(), nTimeSteps, + // DEMTimeZone.toUtf8().data(), stationFileNames.data(), + // stationFileNames.size(), DEMPath.toUtf8().data(), + // true, true, papszOptions + // ); // throws the error, code isn't setup well to catch the error yet if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaMakePointArmy: ninjaErr =" << ninjaErr; @@ -625,6 +751,25 @@ void MainWindow::solveButtonClicked() hour = date.time().hour(); minute = date.time().minute(); + //year = -1; // catches error as expected + //year = 0; // catches error as expected + //year = 1235; // catches error as expected + //year = 2035; // um, apparently this one is an allowable year, it runs like normal without an error thrown, even though it probably shouldn't + + //month = -1; // catches error as expected + //month = 0; // catches error as expected + //month = 14; // catches error as expected + + //day = -1; // catches error as expected + //day = 0; // catches error as expected + //day = 33; // catches error as expected + + //hour = -1; // this one SHOULD error, but runs fine somehow, no errors thrown + //hour = 26; // this one SHOULD error, but runs fine somehow, no errors thrown + + //minute = -1; // this one SHOULD error, but runs fine somehow, no errors thrown + //minute = 78; // this one SHOULD error, but runs fine somehow, no errors thrown + int outYear, outMonth, outDay, outHour, outMinute; ninjaErr = NinjaGenerateSingleTimeObject( @@ -633,6 +778,12 @@ void MainWindow::solveButtonClicked() timeZoneBytes.constData(), &outYear, &outMonth, &outDay, &outHour, &outMinute ); + //ninjaErr = NinjaGenerateSingleTimeObject( + // ninjaTools, + // year, month, day, hour, minute, + // "fudge", + // &outYear, &outMonth, &outDay, &outHour, &outMinute + // ); // breaks HARD, a smart pointer failing on assert somewhere along the pipeline, not sure if that occurs here, or later down the pipeline. And it gets past the try/catch error handling stuff, hrm. if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaGenerateSingleTimeObject: ninjaErr =" << ninjaErr; @@ -658,9 +809,72 @@ void MainWindow::solveButtonClicked() DEMPath.toUtf8().data(), true, momentumFlag, papszOptions ); + //ninjaErr = NinjaMakePointArmy( ninjaArmy, + // yearVec.data(), monthVec.data(), dayVec.data(), + // hourVec.data(), minuteVec.data(), -1, + // DEMTimeZone.toUtf8().data(), + // stationFileNames.data(), + // static_cast(stationFileNames.size()), + // DEMPath.toUtf8().data(), + // true, momentumFlag, papszOptions + //); // ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaMakePointArmy( ninjaArmy, + // yearVec.data(), monthVec.data(), dayVec.data(), + // hourVec.data(), minuteVec.data(), 0, + // DEMTimeZone.toUtf8().data(), + // stationFileNames.data(), + // static_cast(stationFileNames.size()), + // DEMPath.toUtf8().data(), + // true, momentumFlag, papszOptions + //); // catches error as expected + //ninjaErr = NinjaMakePointArmy( ninjaArmy, + // yearVec.data(), monthVec.data(), dayVec.data(), + // hourVec.data(), minuteVec.data(), nTimeSteps, + // DEMTimeZone.toUtf8().data(), + // stationFileNames.data(), + // -1, + // DEMPath.toUtf8().data(), + // true, momentumFlag, papszOptions + //); // hard core seg faults + //ninjaErr = NinjaMakePointArmy( ninjaArmy, + // yearVec.data(), monthVec.data(), dayVec.data(), + // hourVec.data(), minuteVec.data(), nTimeSteps, + // DEMTimeZone.toUtf8().data(), + // stationFileNames.data(), + // 0, + // DEMPath.toUtf8().data(), + // true, momentumFlag, papszOptions + //); // hard core seg faults + //ninjaErr = NinjaMakePointArmy( ninjaArmy, + // yearVec.data(), monthVec.data(), dayVec.data(), + // hourVec.data(), minuteVec.data(), nTimeSteps, + // DEMTimeZone.toUtf8().data(), + // stationFileNames.data(), + // static_cast(stationFileNames.size()), + // "fudge", + // true, momentumFlag, papszOptions + //); // um, it warns that the dem doesn't exist, but then continues on without throwing an error or a ninjaCom, so the solver continues as if everything is normal + //ninjaErr = NinjaMakePointArmy( ninjaArmy, + // yearVec.data(), monthVec.data(), dayVec.data(), + // hourVec.data(), minuteVec.data(), nTimeSteps, + // "fudge", + // stationFileNames.data(), + // static_cast(stationFileNames.size()), + // DEMPath.toUtf8().data(), + // true, momentumFlag, papszOptions + //); // no error or warning messages are thrown, just runs as if the dem timezone is good enough + //ninjaErr = NinjaMakePointArmy( ninjaArmy, + // yearVec.data(), monthVec.data(), dayVec.data(), + // hourVec.data(), minuteVec.data(), nTimeSteps, + // DEMTimeZone.toUtf8().data(), + // stationFileNames.data(), + // static_cast(stationFileNames.size()), + // DEMPath.toUtf8().data(), + // true, true, papszOptions + //); // throws the error, code isn't setup well to catch the error yet if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaMakePointArmy =" << ninjaErr; + qDebug() << "NinjaMakePointArmy ninjaErr =" << ninjaErr; } } } @@ -688,9 +902,13 @@ void MainWindow::solveButtonClicked() } ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), timeZone.c_str(), inputTimeList, timeListSize, ui->momentumSolverCheckBox->isChecked(), papszOptions); + //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), timeZone.c_str(), inputTimeList, -1, ui->momentumSolverCheckBox->isChecked(), papszOptions); // catches error as expected + //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), timeZone.c_str(), inputTimeList, 0, ui->momentumSolverCheckBox->isChecked(), papszOptions); // catches error as expected + //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, "fudge", timeZone.c_str(), inputTimeList, timeListSize, ui->momentumSolverCheckBox->isChecked(), papszOptions); // ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), "fudge", inputTimeList, timeListSize, ui->momentumSolverCheckBox->isChecked(), papszOptions); // ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaMakeWeatherModelArmy =" << ninjaErr; + qDebug() << "NinjaMakeWeatherModelArmy ninjaErr =" << ninjaErr; } } diff --git a/src/gui/weatherModelInput.cpp b/src/gui/weatherModelInput.cpp index 3f552a1b3..3bf3ac9ec 100644 --- a/src/gui/weatherModelInput.cpp +++ b/src/gui/weatherModelInput.cpp @@ -439,7 +439,7 @@ void WeatherModelInput::weatherModelFileTreeViewItemSelectionChanged(const QItem ui->weatherModelTimeTreeView->selectAll(); NinjaErr ninjaErr = NinjaFreeWeatherModelTimeList(timeList, timeListSize); - if(ninjaErr == NINJA_SUCCESS) + if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaFreeWeatherModelTimeList: ninjaErr=" << ninjaErr; } diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 29b9bc2c4..d8955abcf 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -107,6 +107,13 @@ void ninjaArmy::makeDomainAverageArmy( int nSize, bool momentumFlag ) //Com->ninjaCom(ninjaComClass::ninjaFailure, "forcing an error message in ninjaArmy::makeDomainAverageArmy."); //throw std::runtime_error("forcing an error message in ninjaArmy::makeDomainAverageArmy."); Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeDomainAverageArmy."); + + if( nSize < 1 ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid input numNinjas '%d' in ninjaArmy::makeDomainAverageArmy()", nSize); + throw std::runtime_error(CPLSPrintf("Invalid input numNinjas '%d' in ninjaArmy::makeDomainAverageArmy()", nSize)); + } + int i; for( i=0; i < ninjas.size();i ++) delete ninjas[i]; @@ -140,6 +147,13 @@ void ninjaArmy::makePointArmy(std::vector timeList, //Com->ninjaCom(ninjaComClass::ninjaFailure, "forcing an error message in ninjaArmy::makePointArmy."); //throw std::runtime_error("forcing an error message in ninjaArmy::makePointArmy."); Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makePointArmy."); + + if( timeList.size() == 0 ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid 'empty' input timeList in ninjaArmy::makePointArmy()"); + throw std::runtime_error("Invalid 'empty' input timeList in ninjaArmy::makePointArmy()"); + } + vector stationList; boost::posix_time::ptime noTime; //interpolate raw data to actual time steps @@ -154,7 +168,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makePointArmy."); { stationList = pointInitialization::interpolateFromDisk(demFile, timeList, timeZone); } - + ninjas.resize(timeList.size()); for(unsigned int i=0; ininjaCom(ninjaComClass::ninjaFailure, "forcing an error message in ninjaArmy::makeWeatherModelArmy."); //throw std::runtime_error("forcing an error message in ninjaArmy::makeWeatherModelArmy."); Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeWeatherModelArmy."); + + if( times.size() == 0 ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid 'empty' input times in ninjaArmy::makeWeatherModelArmy()"); + throw std::runtime_error("Invalid 'empty' input times in ninjaArmy::makeWeatherModelArmy()"); + } + wxModelInitialization* model; tz = timeZone; diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index a659d18f9..31241906b 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -87,8 +87,8 @@ extern boost::local_time::tz_database globalTimeZoneDB; * 'func' is located inside a try-catch statement block so upon a thrown exception * it is handled and NINJA_E_INVALID is returned. Otherwise, NINJA_SUCCESS is returned. * */ -#ifdef C_API -//#ifndef C_API +//#ifdef C_API +#ifndef C_API #define IF_VALID_INDEX_TRY( i, iterable, func ) \ if( i >= 0 && i < iterable.size() ) \ { \ diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index edadfe192..374143cd1 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -150,17 +150,38 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy { reinterpret_cast( army )->makeDomainAverageArmy( numNinjas, momentumFlag); + NinjaErr retval; for(int i=0; i( army )->getSize(); i++) { - reinterpret_cast( army )->setInputSpeed( i, speedList[i], std::string( speedUnits ) ); + retval = reinterpret_cast( army )->setInputSpeed( i, speedList[i], std::string( speedUnits ) ); + if( retval != NINJA_SUCCESS ) + { + return retval; + } - reinterpret_cast( army )->setInputDirection( i, directionList[i] ); + retval = reinterpret_cast( army )->setInputDirection( i, directionList[i] ); + if( retval != NINJA_SUCCESS ) + { + return retval; + } - reinterpret_cast( army )->setDateTime( i, yearList[i], monthList[i], dayList[i], hourList[i], minuteList[i], 0, timeZone ); + retval = reinterpret_cast( army )->setDateTime( i, yearList[i], monthList[i], dayList[i], hourList[i], minuteList[i], 0, timeZone ); + if( retval != NINJA_SUCCESS ) + { + return retval; + } - reinterpret_cast( army )->setUniAirTemp( i, airTempList[i], std::string( airTempUnits ) ); + retval = reinterpret_cast( army )->setUniAirTemp( i, airTempList[i], std::string( airTempUnits ) ); + if( retval != NINJA_SUCCESS ) + { + return retval; + } - reinterpret_cast( army )->setUniCloudCover( i, cloudCoverList[i], std::string( cloudCoverUnits ) ); + retval = reinterpret_cast( army )->setUniCloudCover( i, cloudCoverList[i], std::string( cloudCoverUnits ) ); + if( retval != NINJA_SUCCESS ) + { + return retval; + } } } catch( ... ) @@ -205,7 +226,6 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakePointArmy return NINJA_E_NULL_PTR; } - wxStation::SetStationFormat(wxStation::newFormat); if(momentumFlag == true) { throw std::runtime_error("The momentum solver is not available for use with Point Initialization runs."); @@ -213,8 +233,11 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakePointArmy try { + wxStation::SetStationFormat(wxStation::newFormat); + std::vector timeList; - for(size_t i=0; i < timeListSize; i++){ + for(size_t i=0; i < timeListSize; i++) + { timeList.push_back(boost::posix_time::ptime(boost::gregorian::date(yearList[i], monthList[i], dayList[i]), boost::posix_time::time_duration(hourList[i],minuteList[i],0,0))); } @@ -225,22 +248,27 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakePointArmy } pointInitialization::storeFileNames(sFiles); - reinterpret_cast( army )->makePointArmy - ( timeList, + reinterpret_cast( army )->makePointArmy( + timeList, std::string(timeZone), sFiles[0], std::string(elevationFile), matchPointsFlag, - momentumFlag); + momentumFlag + ); } catch( armyException & e ) { return NINJA_E_INVALID; } - //catch( ... ) - //{ - // return NINJA_E_INVALID; - //} + catch( exception & e ) + { + return NINJA_E_INVALID; + } + catch( ... ) + { + return NINJA_E_INVALID; + } return NINJA_SUCCESS; } @@ -281,25 +309,25 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakeWeatherModelArmy } #endif - wxModelInitialization *model = wxModelInitializationFactory::makeWxInitialization(std::string(forecastFilename)); - std::vector fullTimeList = model->getTimeList(std::string(timeZone)); - std::vector timeList; - - for(int i = 0; i < fullTimeList.size(); i++) + try { - for(int j = 0; j < size; j++) + wxModelInitialization *model = wxModelInitializationFactory::makeWxInitialization(std::string(forecastFilename)); + std::vector fullTimeList = model->getTimeList(std::string(timeZone)); + std::vector timeList; + + for(int i = 0; i < fullTimeList.size(); i++) { - std::string time1 = fullTimeList[i].to_string(); - std::string time2(inputTimeList[j]); - if(time1 == time2) + for(int j = 0; j < size; j++) { - timeList.push_back(fullTimeList[i]); + std::string time1 = fullTimeList[i].to_string(); + std::string time2(inputTimeList[j]); + if(time1 == time2) + { + timeList.push_back(fullTimeList[i]); + } } } - } - try - { reinterpret_cast( army )->makeWeatherModelArmy ( std::string( forecastFilename ), std::string( timeZone ), @@ -310,10 +338,14 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakeWeatherModelArmy { return NINJA_E_INVALID; } - //catch( ... ) - //{ - // return NINJA_E_INVALID; - //} + catch( exception & e ) + { + return NINJA_E_INVALID; + } + catch( ... ) + { + return NINJA_E_INVALID; + } return NINJA_SUCCESS; } From d9c956d698507ba006b9ad6e351f4432c798b806 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 27 Jan 2026 13:19:09 -0700 Subject: [PATCH 387/435] Adjusted sizing policies of pages and splitters for more dynamic page sizing --- src/gui/mainWindow.cpp | 17 ++- src/gui/mainWindow.h | 1 + src/gui/mainWindow.ui | 303 +++++++++++++++++++++++++++++++++++------ 3 files changed, 273 insertions(+), 48 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index f20882861..4666d6e1a 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -71,7 +71,6 @@ MainWindow::MainWindow(QWidget *parent) weatherModelInput = new WeatherModelInput(ui, this); outputs = new Outputs(ui, this); - ui->inputsStackedWidget->setCurrentIndex(1); ui->treeWidget->topLevelItem(0)->setData(0, Qt::UserRole, 1); ui->treeWidget->topLevelItem(0)->child(0)->setData(0, Qt::UserRole, 1); ui->treeWidget->topLevelItem(0)->child(1)->setData(0, Qt::UserRole, 2); @@ -92,15 +91,16 @@ MainWindow::MainWindow(QWidget *parent) ui->treeWidget->topLevelItem(2)->child(4)->setData(0, Qt::UserRole, 14); ui->treeWidget->topLevelItem(3)->setData(0, Qt::UserRole, 15); + connectSignals(); + ui->treeWidget->topLevelItem(0)->setSelected(true); + ui->inputsStackedWidget->setCurrentIndex(1); // setSelected shows the blank page, have to have this to show proper page int nCPUs = QThread::idealThreadCount(); ui->availableProcessorsLabel->setText("Available Processors: " + QString::number(nCPUs)); ui->numberOfProcessorsSpinBox->setMaximum(nCPUs); ui->numberOfProcessorsSpinBox->setValue(nCPUs); - connectSignals(); - QString version(NINJA_VERSION_STRING); version = "Welcome to WindNinja " + version; writeToConsole(version, Qt::blue); @@ -117,6 +117,7 @@ MainWindow::~MainWindow() void MainWindow::connectSignals() { + connect(ui->inputsStackedWidget, &QStackedWidget::currentChanged, this, &MainWindow::inputsStackedWidgetcurrentChanged); connect(ui->massSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::massSolverCheckBoxClicked); connect(ui->momentumSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::momentumSolverCheckBoxClicked); connect(ui->diurnalCheckBox, &QCheckBox::clicked, this, &MainWindow::diurnalCheckBoxClicked); @@ -139,6 +140,14 @@ void MainWindow::connectSignals() connect(this, &MainWindow::updateProgressValueSignal, this, &MainWindow::updateProgressValue, Qt::QueuedConnection); connect(this, &MainWindow::updateProgressMessageSignal, this, &MainWindow::updateProgressMessage, Qt::QueuedConnection); connect(this, &MainWindow::writeToConsoleSignal, this, &MainWindow::writeToConsole, Qt::QueuedConnection); + +} + +void MainWindow::inputsStackedWidgetcurrentChanged(int index) +{ + QWidget *page = ui->inputsStackedWidget->widget(index); + + ui->inputsStackedWidget->setMaximumHeight(page->maximumHeight()); } void MainWindow::writeToConsole(QString message, QColor color) @@ -303,7 +312,7 @@ void MainWindow::cancelSolve() void MainWindow::treeWidgetItemSelectionChanged() { int column = ui->treeWidget->currentColumn(); - int pageIndex = ui->treeWidget->selectedItems()[0]->data(column, Qt::UserRole).toInt(); // assume 0 since no multi selection + int pageIndex = ui->treeWidget->selectedItems().first()->data(column, Qt::UserRole).toInt(); // assume 0 since no multi selection ui->inputsStackedWidget->setCurrentIndex(pageIndex); } diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index a43347947..1276d284e 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -103,6 +103,7 @@ class MainWindow : public QMainWindow void closeEvent(QCloseEvent *event) override; private slots: + void inputsStackedWidgetcurrentChanged(int index); void massSolverCheckBoxClicked(); void momentumSolverCheckBoxClicked(); void diurnalCheckBoxClicked(); diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index da3fb876e..119ba6619 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -619,7 +619,7 @@
- + 0 0 @@ -633,7 +633,7 @@ 16777215 - 16777215 + 362 @@ -802,7 +802,7 @@ - + 0 0 @@ -832,16 +832,28 @@ QFrame::Shadow::Sunken - 13 + 8 - + 0 0 + + + 0 + 0 + + + + + 16777215 + 99 + + 6 @@ -901,11 +913,17 @@ - + 0 0 + + + 16777215 + 167 + + 5 @@ -956,7 +974,7 @@ - + 0 0 @@ -967,6 +985,12 @@ 0 + + + 16777215 + 389 + + 0 @@ -993,8 +1017,8 @@ 0 0 - 598 - 510 + 730 + 389 @@ -1550,11 +1574,17 @@ li.checked::marker { content: "\2612"; } - + 0 0 + + + 16777215 + 36 + + 0 @@ -1576,6 +1606,18 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 16777215 + 16777215 + + PointingHandCursor @@ -1603,6 +1645,18 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 16777215 + 36 + + 0 @@ -1651,6 +1705,24 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 777 + + 6 @@ -1683,15 +1755,21 @@ li.checked::marker { content: "\2612"; } 0 0 - 598 - 510 + 730 + 498 + + + 0 + 0 + + - + 0 0 @@ -1826,6 +1904,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + Table Units: @@ -1963,6 +2047,9 @@ li.checked::marker { content: "\2612"; } 0 + + QFrame::Shape::StyledPanel + true @@ -1979,11 +2066,20 @@ li.checked::marker { content: "\2612"; } false + true + + false 30 + + Qt::DropAction::IgnoreAction + + + true + false @@ -2114,7 +2210,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -2122,7 +2218,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 16777215 + 777 @@ -2154,8 +2250,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 598 - 510 + 730 + 498 @@ -2626,6 +2722,18 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 16777215 + 777 + + 0 @@ -2652,13 +2760,25 @@ li.checked::marker { content: "\2612"; } 0 0 - 584 - 681 + 730 + 498 - + + + 0 + 0 + + + + + + 0 + 0 + + Weather Model Initialization @@ -2684,7 +2804,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -2745,6 +2865,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + PointingHandCursor @@ -2849,7 +2975,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -2862,7 +2988,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -2892,7 +3018,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -2942,19 +3068,6 @@ li.checked::marker { content: "\2612"; }
- - - - Qt::Orientation::Vertical - - - - 20 - 40 - - - -
@@ -2962,6 +3075,18 @@ li.checked::marker { content: "\2612"; }
+ + + 0 + 0 + + + + + 16777215 + 185 + + 5 @@ -3205,6 +3330,18 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 16777215 + 422 + + 0 @@ -3237,8 +3374,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 598 - 510 + 730 + 422 @@ -3250,7 +3387,7 @@ li.checked::marker { content: "\2612"; } Qt::LayoutDirection::LeftToRight - + 5 @@ -3689,7 +3826,7 @@ li.checked::marker { content: "\2612"; }
- + Qt::Orientation::Vertical @@ -3708,6 +3845,18 @@ li.checked::marker { content: "\2612"; }
+ + + 0 + 0 + + + + + 16777215 + 180 + + 5 @@ -3913,6 +4062,18 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 16777215 + 152 + + 5 @@ -4112,11 +4273,17 @@ li.checked::marker { content: "\2612"; } - + 0 0 + + + 16777215 + 286 + + 0 @@ -4143,8 +4310,8 @@ li.checked::marker { content: "\2612"; } 0 0 - 598 - 408 + 730 + 286 @@ -4547,6 +4714,18 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 16777215 + 105 + + 5 @@ -4607,6 +4786,18 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 16777215 + 138 + + QLayout::SizeConstraint::SetDefaultConstraint @@ -4767,6 +4958,18 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 16777215 + 178 + + 5 @@ -5083,6 +5286,18 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + + + + 16777215 + 253 + + 5 From d064c6e6e1c0c8d1588e98b62b94a5a3aa7271d6 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Tue, 27 Jan 2026 16:46:27 -0700 Subject: [PATCH 388/435] Changed sizing policy back to expanded for pages --- src/gui/mainWindow.cpp | 8 --- src/gui/mainWindow.h | 1 - src/gui/mainWindow.ui | 121 +++++++++++++++++++++++++---------------- 3 files changed, 73 insertions(+), 57 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 4666d6e1a..b387b45a2 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -117,7 +117,6 @@ MainWindow::~MainWindow() void MainWindow::connectSignals() { - connect(ui->inputsStackedWidget, &QStackedWidget::currentChanged, this, &MainWindow::inputsStackedWidgetcurrentChanged); connect(ui->massSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::massSolverCheckBoxClicked); connect(ui->momentumSolverCheckBox, &QCheckBox::clicked, this, &MainWindow::momentumSolverCheckBoxClicked); connect(ui->diurnalCheckBox, &QCheckBox::clicked, this, &MainWindow::diurnalCheckBoxClicked); @@ -143,13 +142,6 @@ void MainWindow::connectSignals() } -void MainWindow::inputsStackedWidgetcurrentChanged(int index) -{ - QWidget *page = ui->inputsStackedWidget->widget(index); - - ui->inputsStackedWidget->setMaximumHeight(page->maximumHeight()); -} - void MainWindow::writeToConsole(QString message, QColor color) { // if( ui->consoleDockWidget->isFloating() && color == Qt::white ) diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index 1276d284e..a43347947 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -103,7 +103,6 @@ class MainWindow : public QMainWindow void closeEvent(QCloseEvent *event) override; private slots: - void inputsStackedWidgetcurrentChanged(int index); void massSolverCheckBoxClicked(); void momentumSolverCheckBoxClicked(); void diurnalCheckBoxClicked(); diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index 119ba6619..13cf7d8e8 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -832,12 +832,12 @@ QFrame::Shadow::Sunken - 8 + 6 - + 0 0 @@ -851,7 +851,7 @@ 16777215 - 99 + 16777215 @@ -913,7 +913,7 @@ - + 0 0 @@ -921,7 +921,7 @@ 16777215 - 167 + 16777215 @@ -974,7 +974,7 @@ - + 0 0 @@ -988,7 +988,7 @@ 16777215 - 389 + 16777215 @@ -1018,7 +1018,7 @@ 0 0 730 - 389 + 556 @@ -1574,7 +1574,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -1582,7 +1582,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 36 + 16777215 @@ -1646,7 +1646,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -1654,7 +1654,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 36 + 16777215 @@ -1676,7 +1676,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -1706,7 +1706,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -1720,7 +1720,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 777 + 16777215 @@ -1756,7 +1756,7 @@ li.checked::marker { content: "\2612"; } 0 0 730 - 498 + 556 @@ -1783,7 +1783,7 @@ li.checked::marker { content: "\2612"; } false - + 5 @@ -2037,7 +2037,7 @@ li.checked::marker { content: "\2612"; } - 1 + 0 0 @@ -2047,6 +2047,12 @@ li.checked::marker { content: "\2612"; } 0 + + + 16777215 + 16777215 + + QFrame::Shape::StyledPanel @@ -2199,6 +2205,19 @@ li.checked::marker { content: "\2612"; } + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + +
@@ -2210,7 +2229,7 @@ li.checked::marker { content: "\2612"; }
- + 0 0 @@ -2218,7 +2237,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 777 + 16777215 @@ -2251,7 +2270,7 @@ li.checked::marker { content: "\2612"; } 0 0 730 - 498 + 556 @@ -2723,7 +2742,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -2731,7 +2750,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 777 + 16777215 @@ -2761,7 +2780,7 @@ li.checked::marker { content: "\2612"; } 0 0 730 - 498 + 556 @@ -3076,7 +3095,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -3084,7 +3103,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 185 + 16777215 @@ -3331,7 +3350,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -3339,7 +3358,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 422 + 16777215 @@ -3375,7 +3394,7 @@ li.checked::marker { content: "\2612"; } 0 0 730 - 422 + 556 @@ -3403,7 +3422,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -3422,7 +3441,7 @@ li.checked::marker { content: "\2612"; } false - + 0 0 @@ -3846,7 +3865,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -3854,7 +3873,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 180 + 16777215 @@ -4063,7 +4082,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -4071,7 +4090,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 152 + 16777215 @@ -4273,7 +4292,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -4281,7 +4300,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 286 + 16777215 @@ -4311,7 +4330,7 @@ li.checked::marker { content: "\2612"; } 0 0 730 - 286 + 556 @@ -4715,7 +4734,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -4723,7 +4742,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 105 + 16777215 @@ -4787,7 +4806,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -4795,7 +4814,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 138 + 16777215 @@ -4816,6 +4835,12 @@ li.checked::marker { content: "\2612"; } + + + 0 + 0 + + Placeholder Text @@ -4959,7 +4984,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -4967,7 +4992,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 178 + 16777215 @@ -5287,7 +5312,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -5295,7 +5320,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 253 + 16777215 @@ -5778,7 +5803,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -5792,7 +5817,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 16777215 + 150 From 25a6a0d91219adc9612591986776695105e92e94 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 27 Jan 2026 17:12:31 -0700 Subject: [PATCH 389/435] continuing 1st attempt at extending the ninjaCom GUI error handling to point initialization, moved the various C-API makeArmy() style functions from the C-API to within ninjaArmy, to better encapsulate where ninjaCom messages can be called. For issues #639 and #582, related to issue #667. This fixed most of the errors that were getting thrown and not caught by the makeArmy() and ninjaTools() functions within solveButtonClicked(), the last few errors seem to be ninja code specific issues, or coder specific not try/catchable referencing outside of an array style errors, rather than ninjaCom messaging problems. There is a new issue of double messaging, I had to comment out some excess ninjaCom messaging duplicates. This breaks the past rules of always putting a ninjaCom message at every return and throw of a ninjaArmy and ninjaTools function, but it should work for now. Seems to be caused by trying to have both try/catch of ninjaArmy/ninjaTools called functions, as well as the C-API-like function itself, hard to do both without adding a second layer of the ninjaCom messages. Maybe can setup a way of pooling together messages when types warning or error are seen, dropping duplicates, will have to think about this. --- src/gui/mainWindow.cpp | 60 ++++++------ src/ninja/ninjaArmy.cpp | 196 +++++++++++++++++++++++++++++++++++++++- src/ninja/ninjaArmy.h | 7 ++ src/ninja/windninja.cpp | 161 +-------------------------------- 4 files changed, 231 insertions(+), 193 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 779b230a1..083dbabce 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -491,9 +491,9 @@ void MainWindow::solveButtonClicked() // ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), DEMTimeZone.toUtf8().data(), airTemps.data(), airTempUnits.toUtf8().constData(), cloudCovers.data(), cloudCoverUnits.toUtf8().constData(), papszOptions); ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), timeZoneUtc, airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); - //ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, -1, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), timeZoneUtc, airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); // catches error as expected - //ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, 0, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), timeZoneUtc, airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); // catches error as expected - //ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), "fudge", airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); // requires the try/catch form of IF_VALID_INDEX_TRY in ninjaArmy.h, but then catches error as expected + //ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, -1, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), timeZoneUtc, airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); // catches error as expected // catches error as expected, well replicates the error twice unless I comment out the extra ninjaCom instance in makeDomainAverageArmy + //ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, 0, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), timeZoneUtc, airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); // catches error as expected, well replicates the error twice unless I comment out the extra ninjaCom instance in makeDomainAverageArmy + //ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), "fudge", airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); // requires the try/catch form of IF_VALID_INDEX_TRY in ninjaArmy.h, but then catches error as expected, well it technically throws two separate error messages, but both are caught properly if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaMakeDomainAverageArmy: ninjaErr =" << ninjaErr; @@ -540,7 +540,7 @@ void MainWindow::solveButtonClicked() QVector minute = { start.time().minute(), end.time().minute() }; // runs fine for the single time run, as expected, - // but errors without a proper ninjaCom message for the multi-time run + // and, errors and is properly caught for the multi-time run /*QVector year = {start.date().year(), start.date().year()}; QVector month = {start.date().month(), start.date().month()}; QVector day = {start.date().day(), start.date().day()}; @@ -548,7 +548,7 @@ void MainWindow::solveButtonClicked() QVector minute = {start.time().minute(), start.time().minute()};*/ // runs fine for the single time run, as expected, - // but errors without a proper ninjaCom message for the multi-time run + // and, errors and is properly caught for the multi-time run /*QVector year = {end.date().year(), end.date().year()}; QVector month = {end.date().month(), end.date().month()}; QVector day = {end.date().day(), end.date().day()}; @@ -556,7 +556,7 @@ void MainWindow::solveButtonClicked() QVector minute = {end.time().minute(), end.time().minute()};*/ // runs fine for the single time run, as expected, - // but errors without a proper ninjaCom message for the multi-time run + // and, errors and is properly caught for the multi-time run /*QVector year = {start.date().year(), start.date().year()-1}; QVector month = {start.date().month(), start.date().month()}; QVector day = {start.date().day(), start.date().day()}; @@ -564,9 +564,9 @@ void MainWindow::solveButtonClicked() QVector minute = {start.time().minute(), start.time().minute()};*/ // runs fine for the single time run, as expected, - // but errors without a proper ninjaCom message for the multi-time run, - // which is interesting because the download without extra time difference should also error but does not always error, - // implies the time checking for this or the run from this, runs better + // and, errors and is properly caught for the multi-time run + // which is interesting because the download without an additional hour time difference should also error but does not always error, + // so this implies the time checking for the run from this, is more strict, and better /*QVector year = {start.date().year(), start.date().year()}; QVector month = {start.date().month(), start.date().month()}; QVector day = {start.date().day(), start.date().day()}; @@ -574,7 +574,7 @@ void MainWindow::solveButtonClicked() QVector minute = {start.time().minute(), start.time().minute()};*/ // errors for both the single time run AND the multi-time run, - // but errors without a proper ninjaCom message for both cases + // and errors are properly caught for both cases /*QVector year = {end.date().year()+1, end.date().year()}; QVector month = {end.date().month(), end.date().month()}; QVector day = {end.date().day(), end.date().day()}; @@ -582,7 +582,7 @@ void MainWindow::solveButtonClicked() QVector minute = {end.time().minute(), end.time().minute()};*/ // errors for both the single time run AND the multi-time run, - // but errors without a proper ninjaCom message for both cases + // and errors are properly caught for both cases /*QVector year = {end.date().year(), end.date().year()}; QVector month = {end.date().month(), end.date().month()}; QVector day = {end.date().day(), end.date().day()}; @@ -590,8 +590,8 @@ void MainWindow::solveButtonClicked() QVector minute = {end.time().minute(), end.time().minute()};*/ int nTimeSteps = ui->weatherStationDataTimestepsSpinBox->value(); - //int nTimeSteps = 1; // runs fine for the single time, throws an error properly for multi-times, well the error implies out of index but maybe not at the proper step ("NinjaSetNumberCPUS", "Run 0: ERROR: Exception caught: invalid index 1". But an error is still at least caught. - //int nTimeSteps = 2; // runs fine for multi-times, but for the single time, an error is getting thrown, but apparently the solver isn't stopping because it is an error on just one single thread???? Quirky behavior that is not good. "ERROR 4: : No such file or directory, Run 1: ERROR: Exception caught: Cannot open input file for reading in ninja::readInputFile()." but then it continues with the run0 info to completion, then it ends hanging because it didn't stop at the error message and it finds it DID have some kind of error at the end. Ugh. + //int nTimeSteps = 1; // runs fine for the single time, properly throws an error for multi-times, well the error implies out of index but maybe not at the proper step ("NinjaSetNumberCPUS", "Run 0: ERROR: Exception caught: invalid index 1". But the error is at least properly caught. + //int nTimeSteps = 2; // runs fine for 2 timestep multi-times, but for 1 timestep multi-times, an error is getting thrown, but apparently the solver isn't stopping because it is an error on just one single thread???? Quirky behavior that is not good. "ERROR 4: : No such file or directory, Run 1: ERROR: Exception caught: Cannot open input file for reading in ninja::readInputFile()." but then it continues with the run0 info to completion, then it ends hanging because it didn't stop at the error message and it finds it DID have some kind of error at the end. Ugh. I do see that it printed red, so it SAW that it was an error message, but I guess it wasn't a THROWN error message or something? So it didn't properly stop the solver?? Not sure what is going on here. QVector outYear(nTimeSteps); QVector outMonth(nTimeSteps); @@ -649,7 +649,7 @@ void MainWindow::solveButtonClicked() // outYear.data(), outMonth.data(), outDay.data(), // outHour.data(), outMinute.data(), // 1, timeZoneBytes.data() - // ); // seems to run this function fine, but then it confuses the makePointArmy(), but where it is left hanging rather than dying properly with an error message + // ); // catches error as expected, though month or date out of range wasn't quite the error I was expecting //ninjaErr = NinjaGetTimeList( // ninjaTools, // year.data(), month.data(), day.data(), @@ -681,14 +681,14 @@ void MainWindow::solveButtonClicked() // DEMTimeZone.toUtf8().data(), stationFileNames.data(), // stationFileNames.size(), DEMPath.toUtf8().data(), // true, momentumFlag, papszOptions - // ); // ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + // ); // catches error as expected, though month or date out of range wasn't quite the error I was expecting //ninjaErr = NinjaMakePointArmy( ninjaArmy, // outYear.data(), outMonth.data(), outDay.data(), // outHour.data(), outMinute.data(), 0, // DEMTimeZone.toUtf8().data(), stationFileNames.data(), // stationFileNames.size(), DEMPath.toUtf8().data(), // true, momentumFlag, papszOptions - // ); // catches error as expected + // ); // catches error as expected, well replicates the error twice unless I comment out the extra ninjaCom instance in makePointArmy //ninjaErr = NinjaMakePointArmy( ninjaArmy, // outYear.data(), outMonth.data(), outDay.data(), // outHour.data(), outMinute.data(), nTimeSteps, @@ -709,7 +709,7 @@ void MainWindow::solveButtonClicked() // DEMTimeZone.toUtf8().data(), stationFileNames.data(), // stationFileNames.size(), "fudge", // true, momentumFlag, papszOptions - // ); // um, it warns that the dem doesn't exist, but then continues on without throwing an error or a ninjaCom, so the solver continues as if everything is normal + // ); // um, it warns that the dem doesn't exist, but then continues on without throwing an error or a ninjaCom, so the solver continues as if everything is normal. The warning is "ERROR 4: fudge: No such file or directory" four times, yet still it continues as if nothing went wrong. //ninjaErr = NinjaMakePointArmy( ninjaArmy, // outYear.data(), outMonth.data(), outDay.data(), // outHour.data(), outMinute.data(), nTimeSteps, @@ -723,7 +723,7 @@ void MainWindow::solveButtonClicked() // DEMTimeZone.toUtf8().data(), stationFileNames.data(), // stationFileNames.size(), DEMPath.toUtf8().data(), // true, true, papszOptions - // ); // throws the error, code isn't setup well to catch the error yet + // ); // catches error as expected if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaMakePointArmy: ninjaErr =" << ninjaErr; @@ -764,11 +764,11 @@ void MainWindow::solveButtonClicked() //day = 0; // catches error as expected //day = 33; // catches error as expected - //hour = -1; // this one SHOULD error, but runs fine somehow, no errors thrown - //hour = 26; // this one SHOULD error, but runs fine somehow, no errors thrown + //hour = -1; // this one SHOULD error, but runs fine somehow, no errors thrown. Probably wraps around or sets it to a value of 0 or something. + //hour = 26; // this one SHOULD error, but runs fine somehow, no errors thrown. Probably wraps around or sets it to a value of 0 or something. - //minute = -1; // this one SHOULD error, but runs fine somehow, no errors thrown - //minute = 78; // this one SHOULD error, but runs fine somehow, no errors thrown + //minute = -1; // this one SHOULD error, but runs fine somehow, no errors thrown. Probably wraps around or sets it to a value of 0 or something. + //minute = 78; // this one SHOULD error, but runs fine somehow, no errors thrown. Probably wraps around or sets it to a value of 0 or something. int outYear, outMonth, outDay, outHour, outMinute; @@ -817,7 +817,7 @@ void MainWindow::solveButtonClicked() // static_cast(stationFileNames.size()), // DEMPath.toUtf8().data(), // true, momentumFlag, papszOptions - //); // ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //); // catches error as expected, though month or date out of range wasn't quite the error I was expecting //ninjaErr = NinjaMakePointArmy( ninjaArmy, // yearVec.data(), monthVec.data(), dayVec.data(), // hourVec.data(), minuteVec.data(), 0, @@ -826,7 +826,7 @@ void MainWindow::solveButtonClicked() // static_cast(stationFileNames.size()), // DEMPath.toUtf8().data(), // true, momentumFlag, papszOptions - //); // catches error as expected + //); // catches error as expected, well replicates the error twice unless I comment out the extra ninjaCom instance in makePointArmy //ninjaErr = NinjaMakePointArmy( ninjaArmy, // yearVec.data(), monthVec.data(), dayVec.data(), // hourVec.data(), minuteVec.data(), nTimeSteps, @@ -853,7 +853,7 @@ void MainWindow::solveButtonClicked() // static_cast(stationFileNames.size()), // "fudge", // true, momentumFlag, papszOptions - //); // um, it warns that the dem doesn't exist, but then continues on without throwing an error or a ninjaCom, so the solver continues as if everything is normal + //); // um, it warns that the dem doesn't exist, but then continues on without throwing an error or a ninjaCom, so the solver continues as if everything is normal. The warning is "ERROR 4: fudge: No such file or directory" four times, yet still it continues as if nothing went wrong. //ninjaErr = NinjaMakePointArmy( ninjaArmy, // yearVec.data(), monthVec.data(), dayVec.data(), // hourVec.data(), minuteVec.data(), nTimeSteps, @@ -871,7 +871,7 @@ void MainWindow::solveButtonClicked() // static_cast(stationFileNames.size()), // DEMPath.toUtf8().data(), // true, true, papszOptions - //); // throws the error, code isn't setup well to catch the error yet + //); // catches error as expected if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaMakePointArmy ninjaErr =" << ninjaErr; @@ -902,10 +902,10 @@ void MainWindow::solveButtonClicked() } ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), timeZone.c_str(), inputTimeList, timeListSize, ui->momentumSolverCheckBox->isChecked(), papszOptions); - //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), timeZone.c_str(), inputTimeList, -1, ui->momentumSolverCheckBox->isChecked(), papszOptions); // catches error as expected - //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), timeZone.c_str(), inputTimeList, 0, ui->momentumSolverCheckBox->isChecked(), papszOptions); // catches error as expected - //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, "fudge", timeZone.c_str(), inputTimeList, timeListSize, ui->momentumSolverCheckBox->isChecked(), papszOptions); // ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. - //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), "fudge", inputTimeList, timeListSize, ui->momentumSolverCheckBox->isChecked(), papszOptions); // ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), timeZone.c_str(), inputTimeList, -1, ui->momentumSolverCheckBox->isChecked(), papszOptions); // catches error as expected, well replicates the error twice unless I comment out the extra ninjaCom instance in makeWeatherArmy + //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), timeZone.c_str(), inputTimeList, 0, ui->momentumSolverCheckBox->isChecked(), papszOptions); // catches error as expected, well replicates the error twice unless I comment out the extra ninjaCom instance in makeWeatherArmy + //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, "fudge", timeZone.c_str(), inputTimeList, timeListSize, ui->momentumSolverCheckBox->isChecked(), papszOptions); // catches error as expected + //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), "fudge", inputTimeList, timeListSize, ui->momentumSolverCheckBox->isChecked(), papszOptions); // catches error as expected if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaMakeWeatherModelArmy ninjaErr =" << ninjaErr; diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index d8955abcf..ff1907f33 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -110,7 +110,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeDomainAverageArm if( nSize < 1 ) { - Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid input numNinjas '%d' in ninjaArmy::makeDomainAverageArmy()", nSize); + //Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid input numNinjas '%d' in ninjaArmy::makeDomainAverageArmy()", nSize); throw std::runtime_error(CPLSPrintf("Invalid input numNinjas '%d' in ninjaArmy::makeDomainAverageArmy()", nSize)); } @@ -150,7 +150,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makePointArmy."); if( timeList.size() == 0 ) { - Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid 'empty' input timeList in ninjaArmy::makePointArmy()"); + //Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid 'empty' input timeList in ninjaArmy::makePointArmy()"); throw std::runtime_error("Invalid 'empty' input timeList in ninjaArmy::makePointArmy()"); } @@ -373,7 +373,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeWeatherModelArmy if( times.size() == 0 ) { - Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid 'empty' input times in ninjaArmy::makeWeatherModelArmy()"); + //Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid 'empty' input times in ninjaArmy::makeWeatherModelArmy()"); throw std::runtime_error("Invalid 'empty' input times in ninjaArmy::makeWeatherModelArmy()"); } @@ -386,8 +386,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeWeatherModelArmy FILE *fcastList = VSIFOpen( forecastFilename.c_str(), "r" ); if(fcastList == NULL){ Com->ninjaCom(ninjaComClass::ninjaFailure, "Forecast list %s cannot be opened.", forecastFilename.c_str()); - throw std::runtime_error(std::string("Forecast list ") + forecastFilename.c_str() + - std::string(" cannot be opened.")); + throw std::runtime_error(std::string("Forecast list ") + forecastFilename.c_str() + std::string(" cannot be opened.")); } while(1){ const char* f = CPLReadLine(fcastList); @@ -1356,6 +1355,193 @@ void ninjaArmy::setAtmFlags() } } +/*----------------------------------------------------------------------------- + * C-API makeArmy function calls + *-----------------------------------------------------------------------------*/ + +int ninjaArmy::NinjaMakeDomainAverageArmy( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** papszOptions ) +{ + try + { + +#ifndef NINJAFOAM + if(momentumFlag == true) + { + throw std::runtime_error("momentumFlag cannot be set to true. WindNinja was not compiled with mass and momentum support."); + } +#endif + + //Get the number of elements in the arrays +/* size_t length1 = sizeof(speedList) / sizeof(speedList[0]); + size_t length2 = sizeof(directionList) / sizeof(directionList[0]); */ +// size_t length1 = sizeof(yearList) / sizeof(yearList[0]); +// size_t length2 = sizeof(monthList) / sizeof(monthList[0]); +// size_t length3 = sizeof(dayList) / sizeof(dayList[0]); +// size_t length4 = sizeof(hourList) / sizeof(hourList[0]); +// size_t length5 = sizeof(minuteList) / sizeof(minuteList[0]); +// size_t length6 = sizeof(airTempList) / sizeof(airTempList[0]); +// size_t length7 = sizeof(cloudCoverList) / sizeof(cloudCoverList[0]); +// +// if(!(length1 == length2 == length3 == length4 == length5 == length6 == length7)) +// { +// throw std::runtime_error("yearList, monthList, dayList, hourList, minuteList, airTempList, and cloudCoverList must be the same length!"); +// + + makeDomainAverageArmy( numNinjas, momentumFlag ); + + int retval = NINJA_E_INVALID; + for(int i=0; ininjaCom(ninjaComClass::ninjaFailure, "ninjaArmy::setInputSpeed() called in ninjaArmy::NinjaMakeDomainAverageArmy() for ninja '%d' failed.", i); + return retval; + } + + retval = setInputDirection( i, directionList[i] ); + if( retval != NINJA_SUCCESS ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "ninjaArmy::setInputDirection() called in ninjaArmy::NinjaMakeDomainAverageArmy() for ninja '%d' failed.", i); + return retval; + } + + retval = setDateTime( i, yearList[i], monthList[i], dayList[i], hourList[i], minuteList[i], 0, timeZone ); + if( retval != NINJA_SUCCESS ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "ninjaArmy::setDateTime() called in ninjaArmy::NinjaMakeDomainAverageArmy() for ninja '%d' failed.", i); + return retval; + } + + retval = setUniAirTemp( i, airTempList[i], std::string( airTempUnits ) ); + if( retval != NINJA_SUCCESS ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "ninjaArmy::setUniAirTemp() called in ninjaArmy::NinjaMakeDomainAverageArmy() for ninja '%d' failed.", i); + return retval; + } + + retval = setUniCloudCover( i, cloudCoverList[i], std::string( cloudCoverUnits ) ); + if( retval != NINJA_SUCCESS ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "ninjaArmy::setUniCloudCover() called in ninjaArmy::NinjaMakeDomainAverageArmy() for ninja '%d' failed.", i); + return retval; + } + } + } + catch( armyException & e ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return NINJA_E_INVALID; + } + catch( exception & e ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return NINJA_E_INVALID; + } + catch( ... ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); + return NINJA_E_INVALID; + } + + return NINJA_SUCCESS; +} + +int ninjaArmy::NinjaMakePointArmy( int * yearList, int * monthList, int * dayList, int * hourList, int * minuteList, int timeListSize, char * timeZone, const char ** stationFileNames, int numStationFiles, char * elevationFile, bool matchPointsFlag, bool momentumFlag, char ** papzOptions ) +{ + try + { + if(momentumFlag == true) + { + throw std::runtime_error("The momentum solver is not available for use with Point Initialization runs."); + } + + wxStation::SetStationFormat(wxStation::newFormat); + + std::vector timeList; + for(size_t i=0; i < timeListSize; i++) + { + timeList.push_back(boost::posix_time::ptime(boost::gregorian::date(yearList[i], monthList[i], dayList[i]), boost::posix_time::time_duration(hourList[i],minuteList[i],0,0))); + } + + std::vector sFiles; + for (int i = 0; i < numStationFiles; i++) + { + sFiles.emplace_back(stationFileNames[i]); + } + pointInitialization::storeFileNames(sFiles); + + makePointArmy( timeList, std::string(timeZone), sFiles[0], std::string(elevationFile), matchPointsFlag, momentumFlag ); + } + catch( armyException & e ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return NINJA_E_INVALID; + } + catch( exception & e ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return NINJA_E_INVALID; + } + catch( ... ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); + return NINJA_E_INVALID; + } + + return NINJA_SUCCESS; +} + +int ninjaArmy::NinjaMakeWeatherModelArmy( const char * forecastFilename, const char * timeZone, const char** inputTimeList, int size, bool momentumFlag, char ** papszOptions ) +{ + try + { + +#ifndef NINJAFOAM + if(momentumFlag == true) + { + throw std::runtime_error("momentumFlag cannot be set to true. WindNinja was not compiled with mass and momentum support."); + } +#endif + + wxModelInitialization *model = wxModelInitializationFactory::makeWxInitialization(std::string(forecastFilename)); + std::vector fullTimeList = model->getTimeList(std::string(timeZone)); + std::vector timeList; + + for(int i = 0; i < fullTimeList.size(); i++) + { + for(int j = 0; j < size; j++) + { + std::string time1 = fullTimeList[i].to_string(); + std::string time2(inputTimeList[j]); + if(time1 == time2) + { + timeList.push_back(fullTimeList[i]); + } + } + } + + makeWeatherModelArmy( std::string( forecastFilename ), std::string( timeZone ), timeList, momentumFlag ); + } + catch( armyException & e ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return NINJA_E_INVALID; + } + catch( exception & e ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + return NINJA_E_INVALID; + } + catch( ... ) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); + return NINJA_E_INVALID; + } + + return NINJA_SUCCESS; +} + /*----------------------------------------------------------------------------- * Ninja Communication Methods *-----------------------------------------------------------------------------*/ diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 31241906b..8ce362abe 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -169,6 +169,13 @@ class ninjaArmy int ninjaInitialize(); + /*----------------------------------------------------------------------------- + * C-API makeArmy function calls + *-----------------------------------------------------------------------------*/ + int NinjaMakeDomainAverageArmy( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** papszOptions=NULL ); + int NinjaMakePointArmy( int * yearList, int * monthList, int * dayList, int * hourList, int * minuteList, int timeListSize, char * timeZone, const char ** stationFileNames, int numStationFiles, char * elevationFile, bool matchPointsFlag, bool momentumFlag, char ** papzOptions=NULL ); + int NinjaMakeWeatherModelArmy( const char * forecastFilename, const char * timeZone, const char** inputTimeList, int size, bool momentumFlag, char ** papzOptions=NULL ); + /** * \brief Return the number of ninjas in the army * diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 374143cd1..b5c0645fe 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -123,73 +123,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy return NINJA_E_NULL_PTR; } -#ifndef NINJAFOAM - if(momentumFlag == true) - { - throw std::runtime_error("momentumFlag cannot be set to true. WindNinja was not compiled with mass and momentum support."); - } -#endif - - //Get the number of elements in the arrays -/* size_t length1 = sizeof(speedList) / sizeof(speedList[0]); - size_t length2 = sizeof(directionList) / sizeof(directionList[0]); */ -// size_t length1 = sizeof(yearList) / sizeof(yearList[0]); -// size_t length2 = sizeof(monthList) / sizeof(monthList[0]); -// size_t length3 = sizeof(dayList) / sizeof(dayList[0]); -// size_t length4 = sizeof(hourList) / sizeof(hourList[0]); -// size_t length5 = sizeof(minuteList) / sizeof(minuteList[0]); -// size_t length6 = sizeof(airTempList) / sizeof(airTempList[0]); -// size_t length7 = sizeof(cloudCoverList) / sizeof(cloudCoverList[0]); -// -// if(!(length1 == length2 == length3 == length4 == length5 == length6 == length7)) -// { -// throw std::runtime_error("yearList, monthList, dayList, hourList, minuteList, airTempList, and cloudCoverList must be the same length!"); -// - - try - { - reinterpret_cast( army )->makeDomainAverageArmy( numNinjas, momentumFlag); - - NinjaErr retval; - for(int i=0; i( army )->getSize(); i++) - { - retval = reinterpret_cast( army )->setInputSpeed( i, speedList[i], std::string( speedUnits ) ); - if( retval != NINJA_SUCCESS ) - { - return retval; - } - - retval = reinterpret_cast( army )->setInputDirection( i, directionList[i] ); - if( retval != NINJA_SUCCESS ) - { - return retval; - } - - retval = reinterpret_cast( army )->setDateTime( i, yearList[i], monthList[i], dayList[i], hourList[i], minuteList[i], 0, timeZone ); - if( retval != NINJA_SUCCESS ) - { - return retval; - } - - retval = reinterpret_cast( army )->setUniAirTemp( i, airTempList[i], std::string( airTempUnits ) ); - if( retval != NINJA_SUCCESS ) - { - return retval; - } - - retval = reinterpret_cast( army )->setUniCloudCover( i, cloudCoverList[i], std::string( cloudCoverUnits ) ); - if( retval != NINJA_SUCCESS ) - { - return retval; - } - } - } - catch( ... ) - { - return NINJA_E_INVALID; - } - - return NINJA_SUCCESS; + return reinterpret_cast( army )->NinjaMakeDomainAverageArmy(numNinjas, momentumFlag, speedList, speedUnits, directionList, yearList, monthList, dayList, hourList, minuteList, timeZone, airTempList, airTempUnits, cloudCoverList, cloudCoverUnits, options); } /** @@ -226,51 +160,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakePointArmy return NINJA_E_NULL_PTR; } - if(momentumFlag == true) - { - throw std::runtime_error("The momentum solver is not available for use with Point Initialization runs."); - } - - try - { - wxStation::SetStationFormat(wxStation::newFormat); - - std::vector timeList; - for(size_t i=0; i < timeListSize; i++) - { - timeList.push_back(boost::posix_time::ptime(boost::gregorian::date(yearList[i], monthList[i], dayList[i]), boost::posix_time::time_duration(hourList[i],minuteList[i],0,0))); - } - - std::vector sFiles; - for (int i = 0; i < numStationFiles; i++) - { - sFiles.emplace_back(stationFileNames[i]); - } - pointInitialization::storeFileNames(sFiles); - - reinterpret_cast( army )->makePointArmy( - timeList, - std::string(timeZone), - sFiles[0], - std::string(elevationFile), - matchPointsFlag, - momentumFlag - ); - } - catch( armyException & e ) - { - return NINJA_E_INVALID; - } - catch( exception & e ) - { - return NINJA_E_INVALID; - } - catch( ... ) - { - return NINJA_E_INVALID; - } - - return NINJA_SUCCESS; + return reinterpret_cast( army )->NinjaMakePointArmy(yearList, monthList, dayList, hourList, minuteList, timeListSize, timeZone, stationFileNames, numStationFiles, elevationFile, matchPointsFlag, momentumFlag, options); } /** @@ -302,52 +192,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaMakeWeatherModelArmy return NINJA_E_NULL_PTR; } -#ifndef NINJAFOAM - if(momentumFlag == true) - { - throw std::runtime_error("momentumFlag cannot be set to true. WindNinja was not compiled with mass and momentum support."); - } -#endif - - try - { - wxModelInitialization *model = wxModelInitializationFactory::makeWxInitialization(std::string(forecastFilename)); - std::vector fullTimeList = model->getTimeList(std::string(timeZone)); - std::vector timeList; - - for(int i = 0; i < fullTimeList.size(); i++) - { - for(int j = 0; j < size; j++) - { - std::string time1 = fullTimeList[i].to_string(); - std::string time2(inputTimeList[j]); - if(time1 == time2) - { - timeList.push_back(fullTimeList[i]); - } - } - } - - reinterpret_cast( army )->makeWeatherModelArmy - ( std::string( forecastFilename ), - std::string( timeZone ), - timeList, - momentumFlag ); - } - catch( armyException & e ) - { - return NINJA_E_INVALID; - } - catch( exception & e ) - { - return NINJA_E_INVALID; - } - catch( ... ) - { - return NINJA_E_INVALID; - } - - return NINJA_SUCCESS; + return reinterpret_cast( army )->NinjaMakeWeatherModelArmy(forecastFilename, timeZone, inputTimeList, size, momentumFlag, options); } /** From c8b580d770709b85c000eda7c3bfcc9172b67d6a Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 27 Jan 2026 18:49:03 -0700 Subject: [PATCH 390/435] finished 1st attempt at extending ninjaCom GUI error handling to pointInit. Added an input size check to the NinjaMakeArmy() style functions, which got rid of a bunch of the seg faults that weren't able to be caught by try/catch statements, I think because of referencing outside of array errors. Also caught an error in the C-API, where using "-1" as input to "unsigned int" that gets converted to "int" experiences "integer overflow", so is seen as "1" within the "unsigned int" function, but is then seen as "-1" by the underlying standard "int" functions. Threw off my range checking till I made this fix. For issues #639 and #582, related to issue #667. --- src/gui/mainWindow.cpp | 24 ++++++++++++------------ src/ninja/ninjaArmy.cpp | 27 +++++++++++++++++++++++---- src/ninja/ninjaArmy.h | 2 +- src/ninja/windninja.cpp | 2 +- src/ninja/windninja.h | 2 +- 5 files changed, 38 insertions(+), 19 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 083dbabce..a9726c3c8 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -491,8 +491,8 @@ void MainWindow::solveButtonClicked() // ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), DEMTimeZone.toUtf8().data(), airTemps.data(), airTempUnits.toUtf8().constData(), cloudCovers.data(), cloudCoverUnits.toUtf8().constData(), papszOptions); ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), timeZoneUtc, airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); - //ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, -1, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), timeZoneUtc, airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); // catches error as expected // catches error as expected, well replicates the error twice unless I comment out the extra ninjaCom instance in makeDomainAverageArmy - //ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, 0, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), timeZoneUtc, airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); // catches error as expected, well replicates the error twice unless I comment out the extra ninjaCom instance in makeDomainAverageArmy + //ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, -1, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), timeZoneUtc, airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); // catches error as expected, now it triggers the NinjaMakeDomainAverageArmy() single messaging error, instead of the double messaging makeDomainAverageArmy() error. + //ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, 0, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), timeZoneUtc, airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); // catches error as expected, now it triggers the NinjaMakeDomainAverageArmy() single messaging error, instead of the double messaging makeDomainAverageArmy() error. //ninjaErr = NinjaMakeDomainAverageArmy(ninjaArmy, numNinjas, momentumFlag, speeds.data(), speedUnits.toUtf8().constData(), directions.data(), years.data(), months.data(), days.data(), hours.data(), minutes.data(), "fudge", airTemps.data(), airTempUnits, cloudCovers.data(), cloudCoverUnits, papszOptions); // requires the try/catch form of IF_VALID_INDEX_TRY in ninjaArmy.h, but then catches error as expected, well it technically throws two separate error messages, but both are caught properly if(ninjaErr != NINJA_SUCCESS) { @@ -681,28 +681,28 @@ void MainWindow::solveButtonClicked() // DEMTimeZone.toUtf8().data(), stationFileNames.data(), // stationFileNames.size(), DEMPath.toUtf8().data(), // true, momentumFlag, papszOptions - // ); // catches error as expected, though month or date out of range wasn't quite the error I was expecting + // ); // catches error as expected, now it triggers the NinjaMakePointArmy() single messaging error, instead of the double messaging makePointArmy() error, and instead of the single unexpected month or date out of range error that was seen for this case. //ninjaErr = NinjaMakePointArmy( ninjaArmy, // outYear.data(), outMonth.data(), outDay.data(), // outHour.data(), outMinute.data(), 0, // DEMTimeZone.toUtf8().data(), stationFileNames.data(), // stationFileNames.size(), DEMPath.toUtf8().data(), // true, momentumFlag, papszOptions - // ); // catches error as expected, well replicates the error twice unless I comment out the extra ninjaCom instance in makePointArmy + // ); // catches error as expected, now it triggers the NinjaMakePointArmy() single messaging error, instead of the double messaging makePointArmy() error. //ninjaErr = NinjaMakePointArmy( ninjaArmy, // outYear.data(), outMonth.data(), outDay.data(), // outHour.data(), outMinute.data(), nTimeSteps, // DEMTimeZone.toUtf8().data(), stationFileNames.data(), // -1, DEMPath.toUtf8().data(), // true, momentumFlag, papszOptions - // ); // hard core seg faults + // ); // catches error as expected, now it triggers the NinjaMakePointArmy() single messaging error, instead of the double messaging makePointArmy() error. //ninjaErr = NinjaMakePointArmy( ninjaArmy, // outYear.data(), outMonth.data(), outDay.data(), // outHour.data(), outMinute.data(), nTimeSteps, // DEMTimeZone.toUtf8().data(), stationFileNames.data(), // 0, DEMPath.toUtf8().data(), // true, momentumFlag, papszOptions - // ); // hard core seg faults + // ); // catches error as expected, now it triggers the NinjaMakePointArmy() single messaging error, instead of the double messaging makePointArmy() error. //ninjaErr = NinjaMakePointArmy( ninjaArmy, // outYear.data(), outMonth.data(), outDay.data(), // outHour.data(), outMinute.data(), nTimeSteps, @@ -817,7 +817,7 @@ void MainWindow::solveButtonClicked() // static_cast(stationFileNames.size()), // DEMPath.toUtf8().data(), // true, momentumFlag, papszOptions - //); // catches error as expected, though month or date out of range wasn't quite the error I was expecting + //); // catches error as expected, now it triggers the NinjaMakePointArmy() single messaging error, instead of the double messaging makePointArmy() error, and instead of the single unexpected month or date out of range error that was seen for this case. //ninjaErr = NinjaMakePointArmy( ninjaArmy, // yearVec.data(), monthVec.data(), dayVec.data(), // hourVec.data(), minuteVec.data(), 0, @@ -826,7 +826,7 @@ void MainWindow::solveButtonClicked() // static_cast(stationFileNames.size()), // DEMPath.toUtf8().data(), // true, momentumFlag, papszOptions - //); // catches error as expected, well replicates the error twice unless I comment out the extra ninjaCom instance in makePointArmy + //); // catches error as expected, now it triggers the NinjaMakePointArmy() single messaging error, instead of the double messaging makePointArmy() error. //ninjaErr = NinjaMakePointArmy( ninjaArmy, // yearVec.data(), monthVec.data(), dayVec.data(), // hourVec.data(), minuteVec.data(), nTimeSteps, @@ -835,7 +835,7 @@ void MainWindow::solveButtonClicked() // -1, // DEMPath.toUtf8().data(), // true, momentumFlag, papszOptions - //); // hard core seg faults + //); // catches error as expected, now it triggers the NinjaMakePointArmy() single messaging error, instead of the double messaging makePointArmy() error. //ninjaErr = NinjaMakePointArmy( ninjaArmy, // yearVec.data(), monthVec.data(), dayVec.data(), // hourVec.data(), minuteVec.data(), nTimeSteps, @@ -844,7 +844,7 @@ void MainWindow::solveButtonClicked() // 0, // DEMPath.toUtf8().data(), // true, momentumFlag, papszOptions - //); // hard core seg faults + //); // catches error as expected, now it triggers the NinjaMakePointArmy() single messaging error, instead of the double messaging makePointArmy() error. //ninjaErr = NinjaMakePointArmy( ninjaArmy, // yearVec.data(), monthVec.data(), dayVec.data(), // hourVec.data(), minuteVec.data(), nTimeSteps, @@ -902,8 +902,8 @@ void MainWindow::solveButtonClicked() } ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), timeZone.c_str(), inputTimeList, timeListSize, ui->momentumSolverCheckBox->isChecked(), papszOptions); - //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), timeZone.c_str(), inputTimeList, -1, ui->momentumSolverCheckBox->isChecked(), papszOptions); // catches error as expected, well replicates the error twice unless I comment out the extra ninjaCom instance in makeWeatherArmy - //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), timeZone.c_str(), inputTimeList, 0, ui->momentumSolverCheckBox->isChecked(), papszOptions); // catches error as expected, well replicates the error twice unless I comment out the extra ninjaCom instance in makeWeatherArmy + //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), timeZone.c_str(), inputTimeList, -1, ui->momentumSolverCheckBox->isChecked(), papszOptions); // catches error as expected, now it triggers the NinjaMakeWeatherModelArmy() single messaging error, instead of the double messaging makeWeatherArmy() error. + //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), timeZone.c_str(), inputTimeList, 0, ui->momentumSolverCheckBox->isChecked(), papszOptions); // catches error as expected, now it triggers the NinjaMakeWeatherModelArmy() single messaging error, instead of the double messaging makeWeatherArmy() error. //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, "fudge", timeZone.c_str(), inputTimeList, timeListSize, ui->momentumSolverCheckBox->isChecked(), papszOptions); // catches error as expected //ninjaErr = NinjaMakeWeatherModelArmy(ninjaArmy, filePath.c_str(), "fudge", inputTimeList, timeListSize, ui->momentumSolverCheckBox->isChecked(), papszOptions); // catches error as expected if(ninjaErr != NINJA_SUCCESS) diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index ff1907f33..92dd4963e 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -110,7 +110,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeDomainAverageArm if( nSize < 1 ) { - //Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid input numNinjas '%d' in ninjaArmy::makeDomainAverageArmy()", nSize); + Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid input numNinjas '%d' in ninjaArmy::makeDomainAverageArmy()", nSize); throw std::runtime_error(CPLSPrintf("Invalid input numNinjas '%d' in ninjaArmy::makeDomainAverageArmy()", nSize)); } @@ -150,7 +150,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makePointArmy."); if( timeList.size() == 0 ) { - //Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid 'empty' input timeList in ninjaArmy::makePointArmy()"); + Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid 'empty' input timeList in ninjaArmy::makePointArmy()"); throw std::runtime_error("Invalid 'empty' input timeList in ninjaArmy::makePointArmy()"); } @@ -373,7 +373,7 @@ Com->ninjaCom(ninjaComClass::ninjaNone, "running ninjaArmy::makeWeatherModelArmy if( times.size() == 0 ) { - //Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid 'empty' input times in ninjaArmy::makeWeatherModelArmy()"); + Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid 'empty' input times in ninjaArmy::makeWeatherModelArmy()"); throw std::runtime_error("Invalid 'empty' input times in ninjaArmy::makeWeatherModelArmy()"); } @@ -1359,7 +1359,7 @@ void ninjaArmy::setAtmFlags() * C-API makeArmy function calls *-----------------------------------------------------------------------------*/ -int ninjaArmy::NinjaMakeDomainAverageArmy( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** papszOptions ) +int ninjaArmy::NinjaMakeDomainAverageArmy( int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** papszOptions ) { try { @@ -1371,6 +1371,11 @@ int ninjaArmy::NinjaMakeDomainAverageArmy( unsigned int numNinjas, bool momentum } #endif + if( numNinjas < 1 ) + { + throw std::runtime_error(CPLSPrintf("Invalid input numNinjas '%d' in ninjaArmy::NinjaMakeDomainAverageArmy()", numNinjas)); + } + //Get the number of elements in the arrays /* size_t length1 = sizeof(speedList) / sizeof(speedList[0]); size_t length2 = sizeof(directionList) / sizeof(directionList[0]); */ @@ -1456,6 +1461,15 @@ int ninjaArmy::NinjaMakePointArmy( int * yearList, int * monthList, int * dayLis throw std::runtime_error("The momentum solver is not available for use with Point Initialization runs."); } + if( timeListSize < 1 ) + { + throw std::runtime_error(CPLSPrintf("Invalid input timeListSize '%d' in ninjaArmy::NinjaMakePointArmy()", timeListSize)); + } + if( numStationFiles < 1 ) + { + throw std::runtime_error(CPLSPrintf("Invalid input numStationFiles '%d' in ninjaArmy::NinjaMakePointArmy()", numStationFiles)); + } + wxStation::SetStationFormat(wxStation::newFormat); std::vector timeList; @@ -1504,6 +1518,11 @@ int ninjaArmy::NinjaMakeWeatherModelArmy( const char * forecastFilename, const c } #endif + if( size < 1 ) + { + throw std::runtime_error(CPLSPrintf("Invalid input size '%d' in ninjaArmy::NinjaMakeWeatherModelArmy()", size)); + } + wxModelInitialization *model = wxModelInitializationFactory::makeWxInitialization(std::string(forecastFilename)); std::vector fullTimeList = model->getTimeList(std::string(timeZone)); std::vector timeList; diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 8ce362abe..6f7a8b66a 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -172,7 +172,7 @@ class ninjaArmy /*----------------------------------------------------------------------------- * C-API makeArmy function calls *-----------------------------------------------------------------------------*/ - int NinjaMakeDomainAverageArmy( unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** papszOptions=NULL ); + int NinjaMakeDomainAverageArmy( int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** papszOptions=NULL ); int NinjaMakePointArmy( int * yearList, int * monthList, int * dayList, int * hourList, int * minuteList, int timeListSize, char * timeZone, const char ** stationFileNames, int numStationFiles, char * elevationFile, bool matchPointsFlag, bool momentumFlag, char ** papzOptions=NULL ); int NinjaMakeWeatherModelArmy( const char * forecastFilename, const char * timeZone, const char** inputTimeList, int size, bool momentumFlag, char ** papzOptions=NULL ); diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index b5c0645fe..7601d41b5 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -115,7 +115,7 @@ WINDNINJADLL_EXPORT NinjaArmyH* NinjaInitializeArmy() * \return NINJA_SUCCESS on success, non-zero otherwise. */ WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy - ( NinjaArmyH * army, unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, + ( NinjaArmyH * army, int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char * airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options ) { if(!army) diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index fd10a0d8b..49c249ea5 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -74,7 +74,7 @@ typedef int NinjaErr; WINDNINJADLL_EXPORT NinjaArmyH* NinjaInitializeArmy(); WINDNINJADLL_EXPORT NinjaErr NinjaMakeDomainAverageArmy - ( NinjaArmyH * ninjaArmy, unsigned int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, + ( NinjaArmyH * ninjaArmy, int numNinjas, bool momentumFlag, const double * speedList, const char * speedUnits, const double * directionList, const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const char * timeZone, const double * airTempList, const char* airTempUnits, const double * cloudCoverList, const char * cloudCoverUnits, char ** options); //TODO: add helper function to generate arrays of years, months, days, hours, and minutes from a station file From 863057e3d6deb037ed7b83978d52a402f3eed338 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 28 Jan 2026 12:52:06 -0700 Subject: [PATCH 391/435] moved the dem fetching functions, from ninjaArmy, to ninjaTools. For issue #667, related to issues #639 and #582 --- src/gui/surfaceInput.cpp | 22 ++++----- src/ninja/ninjaArmy.cpp | 101 -------------------------------------- src/ninja/ninjaArmy.h | 2 - src/ninja/ninjaTools.cpp | 102 +++++++++++++++++++++++++++++++++++++++ src/ninja/ninjaTools.h | 4 ++ src/ninja/windninja.cpp | 15 +++--- src/ninja/windninja.h | 4 +- 7 files changed, 125 insertions(+), 125 deletions(-) diff --git a/src/gui/surfaceInput.cpp b/src/gui/surfaceInput.cpp index 7a6e7f256..430337ca1 100644 --- a/src/gui/surfaceInput.cpp +++ b/src/gui/surfaceInput.cpp @@ -649,31 +649,29 @@ static void comMessageHandler(const char *pszMessage, void *pUser) int SurfaceInput::fetchDEMFile(QVector boundingBox, std::string demFile, double resolution, std::string fetchType) { - NinjaArmyH* ninjaArmy = NULL; + NinjaToolsH* ninjaTools = NULL; char ** papszOptions = NULL; NinjaErr ninjaErr = 0; - ninjaArmy = NinjaInitializeArmy(); + ninjaTools = NinjaMakeTools(); - ninjaErr = NinjaSetArmyComMessageHandler(ninjaArmy, &comMessageHandler, this, papszOptions); + ninjaErr = NinjaSetToolsComMessageHandler(ninjaTools, &comMessageHandler, this, papszOptions); if(ninjaErr != NINJA_SUCCESS) { - qDebug() << "NinjaSetArmyComMessageHandler(): ninjaErr =" << ninjaErr; + qDebug() << "NinjaSetToolsComMessageHandler(): ninjaErr =" << ninjaErr; } - ninjaErr = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); // some errors and warnings are caught, but only as error codes, not as messages. Would need to update how we do the messaging within the various SurfaceFetch calls themselves. CPLError( CE_Warning, ...); and CPLError( CE_Failure, ...); with return of an error code seems hard to try/catch with ninjaCom. - //ninjaErr = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), ".", resolution, strdup(fetchType.c_str()), papszOptions); // error was caught, but message is not properly passed - //ninjaErr = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), resolution, "fudge", papszOptions); // actually catches this error, with a good message - //ninjaErr = NinjaFetchDEMBBox(ninjaArmy, boundingBox.data(), demFile.c_str(), -10.0, strdup(fetchType.c_str()), papszOptions); // error was caught, but not even a message to be passed around with this one + ninjaErr = NinjaFetchDEMBBox(ninjaTools, boundingBox.data(), demFile.c_str(), resolution, strdup(fetchType.c_str()), papszOptions); // some errors and warnings are caught, but only as error codes, not as messages. Would need to update how we do the messaging within the various SurfaceFetch calls themselves. CPLError( CE_Warning, ...); and CPLError( CE_Failure, ...); with return of an error code seems hard to try/catch with ninjaCom. + //ninjaErr = NinjaFetchDEMBBox(ninjaTools, boundingBox.data(), ".", resolution, strdup(fetchType.c_str()), papszOptions); // error was caught, but message is not properly passed + //ninjaErr = NinjaFetchDEMBBox(ninjaTools, boundingBox.data(), demFile.c_str(), resolution, "fudge", papszOptions); // actually catches this error, with a good message + //ninjaErr = NinjaFetchDEMBBox(ninjaTools, boundingBox.data(), demFile.c_str(), -10.0, strdup(fetchType.c_str()), papszOptions); // error was caught, but not even a message to be passed around with this one if (ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaFetchDEMBBox: ninjaErr =" << ninjaErr; return ninjaErr; } - else - { - return NINJA_SUCCESS; - } + + return NINJA_SUCCESS; } void SurfaceInput::computeDEMFile(QString filePath) diff --git a/src/ninja/ninjaArmy.cpp b/src/ninja/ninjaArmy.cpp index 92dd4963e..4067ebf27 100644 --- a/src/ninja/ninjaArmy.cpp +++ b/src/ninja/ninjaArmy.cpp @@ -256,107 +256,6 @@ void ninjaArmy::makeWeatherModelArmy(std::string forecastFilename, std::string t return makeWeatherModelArmy(forecastFilename, timeZone, std::vector(), momentumFlag); } -/** - * @brief Fetches a DEM using a point. - * - * @param adfPoint a x,y point in WGS 84 longitude, latitude - * @param adfBuff length of a buffer in the x and y directions - * @param units Units of buffer. - * @param dfCellSize Cell size of DEM. - * @param pszDstFile Destination file. - * @param papszOptions Options for fetching DEM. - * @param fetchType Type of DEM to fetch. - * - * - */ -int ninjaArmy::fetchDEMPoint(double * adfPoint,double *adfBuff, const char* units, double dfCellSize, const char * pszDstFile, const char* fetchType, char ** papszOptions){ - if (pszDstFile == NULL) - { - Com->ninjaCom(ninjaComClass::ninjaFailure, "Input dstFile '%s' in ninjaArmy::fetchDEMPoint() is invalid.", pszDstFile); - return NINJA_E_INVALID; - } - SURF_FETCH_E retval = SURF_FETCH_E_NONE; - SurfaceFetch * fetcher; - if (strcmp(fetchType, "srtm") == 0){ - fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::SRTM_STR,""); - } - #ifdef HAVE_GMTED - else if (strcmp(fetchType, "gmted") == 0){ - fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::WORLD_GMTED_STR,""); - } - #endif - else if (strcmp(fetchType, "relief") == 0){ - fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::RELIEF_STR,""); - } - else if (strcmp(fetchType, "lcp") == 0){ - fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::LCP_STR,""); - } - if (fetcher == NULL) { - Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid input fetchType '%s' in ninjaArmy::fetchDEMPoint()\nchoices are: 'srtm', 'gmted', 'relief', 'lcp'", fetchType); - delete fetcher; - return NINJA_E_INVALID; - } - lengthUnits::eLengthUnits ninjaUnits = lengthUnits::getUnit(std::string(units)); - int result = fetcher->FetchPoint(adfPoint, adfBuff, ninjaUnits, dfCellSize, pszDstFile, papszOptions); - if (result != 0) - { - //Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); - Com->ninjaCom(ninjaComClass::ninjaFailure, "in ninjaArmy::fetchDEMPoint(), fetching failed!"); - delete fetcher; - return NINJA_E_INVALID; - } - delete fetcher; - return NINJA_SUCCESS; -} -/** - * @brief Fetches a DEM using bounding box. - * - * @param boundsBox Bounding box in the form of north, east, south, west. - * @param fileName Name of DEM file. - * @param resolution Resolution of DEM file. - * @param fetchType Type of DEM file to fetch. - * - */ -int ninjaArmy::fetchDEMBBox(double *boundsBox, const char *fileName, double resolution, const char* fetchType) -{ - SURF_FETCH_E retval = SURF_FETCH_E_NONE; - SurfaceFetch * fetcher; - if (strcmp(fetchType, "srtm") == 0){ - fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::SRTM_STR,""); - } - #ifdef HAVE_GMTED - else if (strcmp(fetchType, "gmted") == 0){ - fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::WORLD_GMTED_STR,""); - } - #endif - else if (strcmp(fetchType, "relief") == 0){ - fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::RELIEF_STR,""); - } - else if (strcmp(fetchType, "lcp") == 0){ - fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::LCP_STR,""); - } - if (fetcher == NULL) { - Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid input fetchType '%s' in ninjaArmy::fetchDEMBBox()\nchoices are: 'srtm', 'gmted', 'relief', 'lcp'", fetchType); - delete fetcher; - return NINJA_E_INVALID; - } - - double northBound = boundsBox[0]; - double eastBound = boundsBox[1]; - double southBound = boundsBox[2]; - double westBound = boundsBox[3]; - int result = fetcher->FetchBoundingBox(boundsBox, resolution, fileName, NULL); - if (result != 0) - { - //Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); - Com->ninjaCom(ninjaComClass::ninjaFailure, "in ninjaArmy::fetchDEMBBox(), fetching failed!"); - delete fetcher; - return NINJA_E_INVALID; - } - delete fetcher; - return NINJA_SUCCESS; -} - /** * @brief Makes an army (array) of ninjas for a weather forecast run. * diff --git a/src/ninja/ninjaArmy.h b/src/ninja/ninjaArmy.h index 6f7a8b66a..74a4bf1b8 100644 --- a/src/ninja/ninjaArmy.h +++ b/src/ninja/ninjaArmy.h @@ -161,8 +161,6 @@ class ninjaArmy void makeWeatherModelArmy(std::string forecastFilename, std::string timeZone, bool momentumFlag); void makeWeatherModelArmy(std::string forecastFilename, std::string timeZone, std::vector timeList, bool momentumFlag); std::vector toBoostLocal(std::vector in, std::string timeZone); - int fetchDEMPoint(double * adfPoint, double *adfBuff, const char* units, double dfCellSize, const char * pszDstFile, const char* fetchType, char ** papszOptions); - int fetchDEMBBox(double *boundsBox, const char *fileName, double resolution, const char* fetchType); void set_writeFarsiteAtmFile(bool flag); bool startRuns(int numProcessors); bool startFirstRun(); diff --git a/src/ninja/ninjaTools.cpp b/src/ninja/ninjaTools.cpp index 1b2741437..794608617 100644 --- a/src/ninja/ninjaTools.cpp +++ b/src/ninja/ninjaTools.cpp @@ -82,6 +82,108 @@ ninjaTools::~ninjaTools() return *this; }*/ +/** + * @brief Fetches a DEM using bounding box. + * + * @param boundsBox Bounding box in the form of north, east, south, west. + * @param fileName Name of DEM file. + * @param resolution Resolution of DEM file. + * @param fetchType Type of DEM file to fetch. + * + */ +int ninjaTools::fetchDEMBBox(double *boundsBox, const char *fileName, double resolution, const char* fetchType, char ** papszOptions) +{ + SURF_FETCH_E retval = SURF_FETCH_E_NONE; + SurfaceFetch * fetcher; + if (strcmp(fetchType, "srtm") == 0){ + fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::SRTM_STR,""); + } + #ifdef HAVE_GMTED + else if (strcmp(fetchType, "gmted") == 0){ + fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::WORLD_GMTED_STR,""); + } + #endif + else if (strcmp(fetchType, "relief") == 0){ + fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::RELIEF_STR,""); + } + else if (strcmp(fetchType, "lcp") == 0){ + fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::LCP_STR,""); + } + if (fetcher == NULL) { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid input fetchType '%s' in ninjaTools::fetchDEMBBox()\nchoices are: 'srtm', 'gmted', 'relief', 'lcp'", fetchType); + delete fetcher; + return NINJA_E_INVALID; + } + + double northBound = boundsBox[0]; + double eastBound = boundsBox[1]; + double southBound = boundsBox[2]; + double westBound = boundsBox[3]; + int result = fetcher->FetchBoundingBox(boundsBox, resolution, fileName, NULL); + if (result != 0) + { + //Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + Com->ninjaCom(ninjaComClass::ninjaFailure, "in ninjaTools::fetchDEMBBox(), fetching failed!"); + delete fetcher; + return NINJA_E_INVALID; + } + delete fetcher; + return NINJA_SUCCESS; +} + +/** + * @brief Fetches a DEM using a point. + * + * @param adfPoint a x,y point in WGS 84 longitude, latitude + * @param adfBuff length of a buffer in the x and y directions + * @param units Units of buffer. + * @param dfCellSize Cell size of DEM. + * @param pszDstFile Destination file. + * @param papszOptions Options for fetching DEM. + * @param fetchType Type of DEM to fetch. + * + */ +int ninjaTools::fetchDEMPoint(double * adfPoint,double *adfBuff, const char* units, double dfCellSize, const char * pszDstFile, const char* fetchType, char ** papszOptions) +{ + if (pszDstFile == NULL) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Input dstFile '%s' in ninjaTools::fetchDEMPoint() is invalid.", pszDstFile); + return NINJA_E_INVALID; + } + SURF_FETCH_E retval = SURF_FETCH_E_NONE; + SurfaceFetch * fetcher; + if (strcmp(fetchType, "srtm") == 0){ + fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::SRTM_STR,""); + } + #ifdef HAVE_GMTED + else if (strcmp(fetchType, "gmted") == 0){ + fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::WORLD_GMTED_STR,""); + } + #endif + else if (strcmp(fetchType, "relief") == 0){ + fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::RELIEF_STR,""); + } + else if (strcmp(fetchType, "lcp") == 0){ + fetcher = FetchFactory::GetSurfaceFetch(FetchFactory::LCP_STR,""); + } + if (fetcher == NULL) { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid input fetchType '%s' in ninjaTools::fetchDEMPoint()\nchoices are: 'srtm', 'gmted', 'relief', 'lcp'", fetchType); + delete fetcher; + return NINJA_E_INVALID; + } + lengthUnits::eLengthUnits ninjaUnits = lengthUnits::getUnit(std::string(units)); + int result = fetcher->FetchPoint(adfPoint, adfBuff, ninjaUnits, dfCellSize, pszDstFile, papszOptions); + if (result != 0) + { + //Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); + Com->ninjaCom(ninjaComClass::ninjaFailure, "in ninjaTools::fetchDEMPoint(), fetching failed!"); + delete fetcher; + return NINJA_E_INVALID; + } + delete fetcher; + return NINJA_SUCCESS; +} + void ninjaTools::fetchWeatherModelData(const char* modelName, const char* demFile, int hours) { try diff --git a/src/ninja/ninjaTools.h b/src/ninja/ninjaTools.h index 3e0344606..c86329b2d 100644 --- a/src/ninja/ninjaTools.h +++ b/src/ninja/ninjaTools.h @@ -1,6 +1,7 @@ #ifndef NINJATOOLS_H #define NINJATOOLS_H +#include "fetch_factory.h" #include "nomads_wx_init.h" #include "wxModelInitializationFactory.h" #include "wxStation.h" @@ -24,6 +25,9 @@ class ninjaTools ninjaComClass *Com; // pointer to the ninjaTools level com handler + int fetchDEMBBox(double *boundsBox, const char *fileName, double resolution, const char* fetchType, char ** papszOptions=NULL ); + int fetchDEMPoint(double * adfPoint, double *adfBuff, const char* units, double dfCellSize, const char * pszDstFile, const char* fetchType, char ** papszOptions=NULL ); + void fetchWeatherModelData(const char* modelName, const char* demFile, int hours); void fetchArchiveWeatherModelData(const char* modelName, const char* demFile, const char* timeZone, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour); std::vector getForecastIdentifiers(); diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 7601d41b5..da88da457 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -405,20 +405,20 @@ WINDNINJADLL_EXPORT NinjaErr NinjaDestroyArmy * \param dfCellSize The resolution of the DEM file in meters. * \param pszDstFile Output file name * \param papszOptions options - * * * \return NINJA_SUCCESS on success, NINJA_E_INVALID otherwise. */ WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMPoint - (NinjaArmyH * army, double * adfPoint, double *adfBuff, const char* units, double dfCellSize, char * pszDstFile, char* fetchType, char ** papszOptions ) + (NinjaToolsH * tools, double * adfPoint, double *adfBuff, const char* units, double dfCellSize, char * pszDstFile, char* fetchType, char ** papszOptions ) { - if(!army) + if(!tools) { return NINJA_E_NULL_PTR; } - return reinterpret_cast( army )->fetchDEMPoint(adfPoint, adfBuff, units, dfCellSize, pszDstFile, fetchType, papszOptions); + return reinterpret_cast( tools )->fetchDEMPoint(adfPoint, adfBuff, units, dfCellSize, pszDstFile, fetchType, papszOptions); } + /** * \brief Fetch DEM file using a bounding box * @@ -431,17 +431,16 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMPoint * * \return NINJA_SUCCESS on success, NINJA_E_INVALID otherwise. */ - WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMBBox - (NinjaArmyH * army, double *boundsBox, const char *fileName, double resolution, char * fetchType, char ** papszOptions) + (NinjaToolsH * tools, double *boundsBox, const char *fileName, double resolution, char * fetchType, char ** papszOptions) { - if(!army) + if(!tools) { return NINJA_E_NULL_PTR; } - return reinterpret_cast( army )->fetchDEMBBox(boundsBox, fileName, resolution, fetchType); + return reinterpret_cast( tools )->fetchDEMBBox(boundsBox, fileName, resolution, fetchType, papszOptions); } /** diff --git a/src/ninja/windninja.h b/src/ninja/windninja.h index 49c249ea5..8cf826bd1 100644 --- a/src/ninja/windninja.h +++ b/src/ninja/windninja.h @@ -116,10 +116,10 @@ typedef int NinjaErr; (NinjaToolsH* tools, const int * yearList, const int * monthList, const int * dayList, const int * hourList, const int * minuteList, const int size, const char * elevationFile, const char* stationList, const char * timeZone, bool fetchLatestFlag, const char * outputPath, bool locationFileFlag, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMPoint - (NinjaArmyH * ninjaArmy, double * point, double * buff, const char * units, double cellSize, char * dstFile, char * fetchType, char ** options ); + (NinjaToolsH * tools, double * point, double * buff, const char * units, double cellSize, char * dstFile, char * fetchType, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMBBox - (NinjaArmyH * ninjaArmy, double * boundsBox, const char * fileName, double resolution, char * fetchType, char ** options ); + (NinjaToolsH * tools, double * boundsBox, const char * fileName, double resolution, char * fetchType, char ** options ); WINDNINJADLL_EXPORT NinjaErr NinjaDestroyArmy ( NinjaArmyH * ninjaArmy, char ** options ); From 630aef9119893d8311af4de0d9574dd775981193 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 28 Jan 2026 13:13:51 -0700 Subject: [PATCH 392/435] changed fetch wxModel ninjaTools functions from type "void" to type "int" (so ninjaErr return values), which allowed more simplification to the C-API calls of the functions. For issues #639 and #582, related to issue #667 --- src/ninja/ninjaTools.cpp | 32 ++++++++++++++++++-------------- src/ninja/ninjaTools.h | 4 ++-- src/ninja/windninja.cpp | 38 ++------------------------------------ 3 files changed, 22 insertions(+), 52 deletions(-) diff --git a/src/ninja/ninjaTools.cpp b/src/ninja/ninjaTools.cpp index 794608617..11a1748d1 100644 --- a/src/ninja/ninjaTools.cpp +++ b/src/ninja/ninjaTools.cpp @@ -184,14 +184,12 @@ int ninjaTools::fetchDEMPoint(double * adfPoint,double *adfBuff, const char* uni return NINJA_SUCCESS; } -void ninjaTools::fetchWeatherModelData(const char* modelName, const char* demFile, int hours) +int ninjaTools::fetchWeatherModelData(const char* modelName, const char* demFile, int hours) { try { wxModelInitialization *model = NULL; - model = wxModelInitializationFactory::makeWxInitializationFromId(std::string(modelName)); - if(!model) { throw std::runtime_error(std::string("Weather model not found: ") + modelName); @@ -200,32 +198,37 @@ void ninjaTools::fetchWeatherModelData(const char* modelName, const char* demFil std::string forecastFileName = model->fetchForecast(demFile, hours); if(forecastFileName == "exception") { - Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: ninjaTools::fetchWeatherModelData() returned an invalid forecastFileName."); - return NINJA_E_INVALID; + throw std::runtime_error("ninjaTools::fetchWeatherModelData() returned an invalid forecastFileName."); } } catch(armyException &e) { Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); - throw; + return NINJA_E_INVALID; } catch( exception& e ) { Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); - throw; + return NINJA_E_INVALID; } catch( ... ) { Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); - throw; + return NINJA_E_INVALID; } + + return NINJA_SUCCESS; } -void ninjaTools::fetchArchiveWeatherModelData(const char* modelName, const char* demFile, const char* timeZone, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour) +int ninjaTools::fetchArchiveWeatherModelData(const char* modelName, const char* demFile, const char* timeZone, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour) { try { wxModelInitialization *model = wxModelInitializationFactory::makeWxInitializationFromId(std::string(modelName)); + if(!model) + { + throw std::runtime_error(std::string("Weather model not found: ") + modelName); + } boost::gregorian::date startDate(startYear, startMonth, startDay); boost::gregorian::date endDate(endYear, endMonth, endDay); @@ -263,25 +266,26 @@ void ninjaTools::fetchArchiveWeatherModelData(const char* modelName, const char* std::string forecastFileName = forecastModel->fetchForecast(demFile, hours); if(forecastFileName == "exception") { - Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: ninjaTools::fetchArchiveWeatherModelData() returned an invalid forecastFileName."); - return NINJA_E_INVALID; + throw std::runtime_error("ninjaTools::fetchArchiveWeatherModelData() returned an invalid forecastFileName."); } } catch(armyException &e) { Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); - throw; + return NINJA_E_INVALID; } catch( exception& e ) { Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: %s", e.what()); - throw; + return NINJA_E_INVALID; } catch( ... ) { Com->ninjaCom(ninjaComClass::ninjaFailure, "Exception caught: Cannot determine exception type."); - throw; + return NINJA_E_INVALID; } + + return NINJA_SUCCESS; } std::vector ninjaTools::getForecastIdentifiers() diff --git a/src/ninja/ninjaTools.h b/src/ninja/ninjaTools.h index c86329b2d..1201ba991 100644 --- a/src/ninja/ninjaTools.h +++ b/src/ninja/ninjaTools.h @@ -28,8 +28,8 @@ class ninjaTools int fetchDEMBBox(double *boundsBox, const char *fileName, double resolution, const char* fetchType, char ** papszOptions=NULL ); int fetchDEMPoint(double * adfPoint, double *adfBuff, const char* units, double dfCellSize, const char * pszDstFile, const char* fetchType, char ** papszOptions=NULL ); - void fetchWeatherModelData(const char* modelName, const char* demFile, int hours); - void fetchArchiveWeatherModelData(const char* modelName, const char* demFile, const char* timeZone, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour); + int fetchWeatherModelData(const char* modelName, const char* demFile, int hours); + int fetchArchiveWeatherModelData(const char* modelName, const char* demFile, const char* timeZone, int startYear, int startMonth, int startDay, int startHour, int endYear, int endMonth, int endDay, int endHour); std::vector getForecastIdentifiers(); std::vector getTimeList(const char* modelName, std::string timeZone); int getStartHour(const char*modelIdentifier); diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index da88da457..07b430a3c 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -227,24 +227,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchWeatherData return NINJA_E_NULL_PTR; } - try - { - reinterpret_cast( tools )->fetchWeatherModelData(modelName, demFile, hours); - } - catch( armyException & e ) - { - return NINJA_E_INVALID; - } - catch( exception & e ) - { - return NINJA_E_INVALID; - } - //catch( ... ) - //{ - // return NINJA_E_INVALID; - //} - - return NINJA_SUCCESS; + return reinterpret_cast( tools )->fetchWeatherModelData(modelName, demFile, hours); } WINDNINJADLL_EXPORT NinjaErr NinjaFetchArchiveWeatherData @@ -255,24 +238,7 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchArchiveWeatherData return NINJA_E_NULL_PTR; } - try - { - reinterpret_cast( tools )->fetchArchiveWeatherModelData(modelName, demFile, timeZone, startYear, startMonth, startDay, startHour, endYear, endMonth, endDay, endHour); - } - catch( armyException & e ) - { - return NINJA_E_INVALID; - } - catch( exception & e ) - { - return NINJA_E_INVALID; - } - //catch( ... ) - //{ - // return NINJA_E_INVALID; - //} - - return NINJA_SUCCESS; + return reinterpret_cast( tools )->fetchArchiveWeatherModelData(modelName, demFile, timeZone, startYear, startMonth, startDay, startHour, endYear, endMonth, endDay, endHour); } WINDNINJADLL_EXPORT const char** NinjaGetAllWeatherModelIdentifiers From 297b793c870d5d5338a4687af80125f512a27e20 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 28 Jan 2026 13:37:11 -0700 Subject: [PATCH 393/435] small bit of cleanup to better get the recently edited ninjaTools functions in the C-API, to follow the recently discovered and improved style for ninjaCom GUI error handling. For issues #639 and #582, related to issue #667 --- src/ninja/ninjaTools.cpp | 6 ++++++ src/ninja/windninja.cpp | 44 ++++++++++++++++++++++++---------------- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/ninja/ninjaTools.cpp b/src/ninja/ninjaTools.cpp index 11a1748d1..99eef431b 100644 --- a/src/ninja/ninjaTools.cpp +++ b/src/ninja/ninjaTools.cpp @@ -508,6 +508,12 @@ int ninjaTools::generateSingleTimeObject( int inputYear, int inputMonth, int inp { try { + if(!outYear || !outMonth || !outDay || !outHour || !outMinute) + { + Com->ninjaCom(ninjaComClass::ninjaFailure, "Invalid 'empty' input outYear, outMonth, outDay, outHour, or outMinute in ninjaTools::generateSingleTimeObject()"); + return NINJA_E_OTHER; + } + boost::posix_time::ptime timeObject = pointInitialization::generateSingleTimeObject(inputYear, inputMonth, inputDay, inputHour, inputMinute, std::string(timeZone)); diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 07b430a3c..0b28466f2 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -244,7 +244,12 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchArchiveWeatherData WINDNINJADLL_EXPORT const char** NinjaGetAllWeatherModelIdentifiers (NinjaToolsH* tools, int* count) { - if(!tools || !count) + if(!tools) + { + return nullptr; + } + + if(!count) { return nullptr; } @@ -325,7 +330,12 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFreeWeatherModelTimeList WINDNINJADLL_EXPORT NinjaErr NinjaGetWeatherModelHours (NinjaToolsH* tools, const char* modelIdentifier, int* startHour, int* endHour) { - if(!tools || !startHour || !endHour) + if(!tools) + { + return NINJA_E_NULL_PTR; + } + + if(!startHour || !endHour) { return NINJA_E_NULL_PTR; } @@ -399,7 +409,6 @@ WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMPoint */ WINDNINJADLL_EXPORT NinjaErr NinjaFetchDEMBBox (NinjaToolsH * tools, double *boundsBox, const char *fileName, double resolution, char * fetchType, char ** papszOptions) - { if(!tools) { @@ -680,15 +689,12 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetArmyMultiComStream WINDNINJADLL_EXPORT NinjaErr NinjaSetToolsComMessageHandler ( NinjaToolsH * tools, ninjaComMessageHandler pMsgHandler, void *pUser, char ** papszOptions ) { - if( NULL != tools ) - { - return reinterpret_cast( tools )->setNinjaComMessageHandler - ( pMsgHandler, pUser ); - } - else + if(!tools) { return NINJA_E_NULL_PTR; } + + return reinterpret_cast( tools )->setNinjaComMessageHandler( pMsgHandler, pUser ); } /** @@ -702,15 +708,12 @@ WINDNINJADLL_EXPORT NinjaErr NinjaSetToolsComMessageHandler WINDNINJADLL_EXPORT NinjaErr NinjaSetToolsMultiComStream ( NinjaToolsH * tools, FILE* stream, char ** papszOptions ) { - if( NULL != tools ) - { - return reinterpret_cast( tools )->setNinjaMultiComStream - ( stream ); - } - else + if(!tools) { - return NULL; + return NINJA_E_NULL_PTR; } + + return reinterpret_cast( tools )->setNinjaMultiComStream( stream ); } /** @@ -2398,9 +2401,9 @@ WINDNINJADLL_EXPORT NinjaErr NinjaGenerateSingleTimeObject( int inputYear, int inputMonth, int inputDay, int inputHour, int inputMinute, const char * timeZone, int * outYear, int * outMonth, int* outDay, int * outHour, int * outMinute) { - if(!outYear || !outMonth || !outDay || !outHour || !outMinute) + if(!tools) { - return NINJA_E_OTHER; + return NINJA_E_NULL_PTR; } return reinterpret_cast( tools )->generateSingleTimeObject(inputYear, inputMonth, inputDay, inputHour, inputMinute, timeZone, outYear, outMonth, outDay, outHour, outMinute); @@ -2422,6 +2425,11 @@ WINDNINJADLL_EXPORT NinjaErr NinjaGenerateSingleTimeObject( WINDNINJADLL_EXPORT NinjaErr NinjaCheckTimeDuration (NinjaToolsH* tools, int* yearList, int* monthList, int * dayList, int * minuteList, int *hourList, int listSize, char ** papszOptions) { + if(!tools) + { + return NINJA_E_NULL_PTR; + } + return reinterpret_cast( tools )->checkTimeDuration( yearList, monthList, dayList, minuteList, hourList, listSize, papszOptions ); } From 5c6eaffd82805d12b71d69067ee1c7f2371c0b47 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 28 Jan 2026 15:02:35 -0700 Subject: [PATCH 394/435] Fixed sizing issue with domain average table and added vertical spacer to PDF output page --- src/gui/mainWindow.ui | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index 13cf7d8e8..e6dfec763 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -832,7 +832,7 @@ QFrame::Shadow::Sunken - 6 + 13 @@ -1017,8 +1017,8 @@ 0 0 - 730 - 556 + 530 + 385 @@ -1765,7 +1765,7 @@ li.checked::marker { content: "\2612"; } 0 - + @@ -2036,7 +2036,7 @@ li.checked::marker { content: "\2612"; } - + 0 0 @@ -2050,7 +2050,7 @@ li.checked::marker { content: "\2612"; } 16777215 - 16777215 + 621 @@ -4333,7 +4333,22 @@ li.checked::marker { content: "\2612"; } 556 - + + + 6 + + + 5 + + + 5 + + + 5 + + + 5 + From 7d8c075c928884bbec7cc090d764bd3a88af9b18 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 28 Jan 2026 16:27:34 -0700 Subject: [PATCH 395/435] Changed google earth legend to defaul to Equal Count --- src/gui/mainWindow.ui | 6 +++--- src/gui/outputs.cpp | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index e6dfec763..0ee4aa647 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -832,7 +832,7 @@ QFrame::Shadow::Sunken - 13 + 10 @@ -3500,12 +3500,12 @@ li.checked::marker { content: "\2612"; } - Uniform Range + Equal Count - Equal Count + Uniform Range diff --git a/src/gui/outputs.cpp b/src/gui/outputs.cpp index 5935fe2dc..a136cc3ed 100644 --- a/src/gui/outputs.cpp +++ b/src/gui/outputs.cpp @@ -29,8 +29,8 @@ Outputs::Outputs(Ui::MainWindow *ui, ui->alternativeColorSchemeComboBox->setItemData(5, "greens"); ui->alternativeColorSchemeComboBox->setItemData(6, "magic_beans"); ui->alternativeColorSchemeComboBox->setItemData(7, "pink_to_green"); - ui->legendComboBox->setItemData(0, "equal_interval"); - ui->legendComboBox->setItemData(1, "equal_color"); + ui->legendComboBox->setItemData(0, "equal_color"); + ui->legendComboBox->setItemData(1, "equal_interval"); connect(ui->googleEarthCheckBox, &QCheckBox::toggled, this, &Outputs::googleEarthCheckBoxToggled); connect(ui->fireBehaviorGroupBox, &QGroupBox::toggled, this, &Outputs::fireBehaviorGroupBoxToggled); From 9869714ad5b413b164eb5d316d92108be944352f Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 29 Jan 2026 11:21:32 -0700 Subject: [PATCH 396/435] linked up GUI clipping to the ninja code --- src/gui/mainWindow.cpp | 10 ++++++++++ src/ninja/windninja.cpp | 10 ++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index c956aac9c..173e125c5 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -1254,6 +1254,16 @@ bool MainWindow::setOutputFlags(NinjaArmyH* ninjaArmy, return false; } + ninjaErr = NinjaSetOutputBufferClipping(ninjaArmy, i, ui->clipOutputSpinBox->value(), papszOptions); + //ninjaErr = NinjaSetOutputBufferClipping(ninjaArmy, i+10, ui->clipOutputSpinBox->value(), papszOptions); // test error handling, looks good + //ninjaErr = NinjaSetOutputBufferClipping(ninjaArmy, i, -1, papszOptions); // test error handling + //ninjaErr = NinjaSetOutputBufferClipping(ninjaArmy, i, 50, papszOptions); // test error handling, message might need improved, but it IS an error, as it should be + if (ninjaErr != NINJA_SUCCESS) + { + qDebug() << "NinjaSetOutputBufferClipping: ninjaErr =" << ninjaErr; + return false; + } + ninjaErr = NinjaSetGoogOutFlag(ninjaArmy, i, ui->googleEarthCheckBox->isChecked(), papszOptions); //ninjaErr = NinjaSetGoogOutFlag(ninjaArmy, i+10, ui->googleEarthCheckBox->isChecked(), papszOptions); // test error handling if (ninjaErr != NINJA_SUCCESS) diff --git a/src/ninja/windninja.cpp b/src/ninja/windninja.cpp index 612d0af8e..5a9beebeb 100644 --- a/src/ninja/windninja.cpp +++ b/src/ninja/windninja.cpp @@ -1629,14 +1629,12 @@ WINDNINJADLL_EXPORT const int NinjaGetOutputGridnRows WINDNINJADLL_EXPORT NinjaErr NinjaSetOutputBufferClipping ( NinjaArmyH * army, const int nIndex, const double percent, char ** papszOptions ) { - if( NULL != army ) - { - return reinterpret_cast( army )->setOutputBufferClipping( nIndex, percent ); - } - else + if(!army) { - return NINJA_E_NULL_PTR; + NINJA_E_NULL_PTR; } + + return reinterpret_cast( army )->setOutputBufferClipping( nIndex, percent ); } /** From ce28ba2beec013f4e6d3054b7f391178210780b0 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 29 Jan 2026 11:38:31 -0700 Subject: [PATCH 397/435] updated the GUI console output to write as black instead of white, for the updated light-mode instead of dark-mode. For issue #604, related to issue #638 --- src/gui/mainWindow.cpp | 2 +- src/gui/mainWindow.h | 4 ++-- src/gui/menuBar.cpp | 36 +++++++++++++++--------------- src/gui/menuBar.h | 2 +- src/gui/pointInitializationInput.h | 2 +- src/gui/surfaceInput.h | 2 +- src/gui/weatherModelInput.h | 2 +- 7 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 173e125c5..f33fc7ac6 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -126,7 +126,7 @@ void MainWindow::connectSignals() connect(ui->outputDirectoryButton, &QPushButton::clicked, this, &MainWindow::outputDirectoryButtonClicked); connect(ui->treeWidget, &QTreeWidget::itemSelectionChanged, this, &MainWindow::treeWidgetItemSelectionChanged); - connect(menuBar, &MenuBar::writeToConsole, this, &MainWindow::writeToConsole); + connect(menuBar, &MenuBar::writeToConsoleSignal, this, &MainWindow::writeToConsole); connect(mapBridge, &MapBridge::boundingBoxReceived, surfaceInput, &SurfaceInput::boundingBoxReceived); connect(surfaceInput, &SurfaceInput::updateTreeView, pointInitializationInput, &PointInitializationInput::updateTreeView); connect(surfaceInput, &SurfaceInput::updateTreeView, weatherModelInput, &WeatherModelInput::updateTreeView); diff --git a/src/gui/mainWindow.h b/src/gui/mainWindow.h index a43347947..a7cd74518 100644 --- a/src/gui/mainWindow.h +++ b/src/gui/mainWindow.h @@ -96,7 +96,7 @@ class MainWindow : public QMainWindow void updateMetholodyState(); void updateProgressValueSignal(int run, int progress); void updateProgressMessageSignal(const QString &msg); - void writeToConsoleSignal(const QString &msg, QColor color = Qt::white); + void writeToConsoleSignal(const QString &msg, QColor color=Qt::black); protected: void showEvent(QShowEvent *event) override; @@ -111,7 +111,7 @@ private slots: void treeWidgetItemDoubleClicked(QTreeWidgetItem *item, int column); void solveButtonClicked(); void outputDirectoryButtonClicked(); - void writeToConsole(QString message, QColor color = Qt::white); + void writeToConsole(QString message, QColor color=Qt::black); void updateProgressValue(int run, int progress); void updateProgressMessage(const QString message); void cancelSolve(); diff --git a/src/gui/menuBar.cpp b/src/gui/menuBar.cpp index 4b6d56de0..35be315f6 100755 --- a/src/gui/menuBar.cpp +++ b/src/gui/menuBar.cpp @@ -79,22 +79,22 @@ MenuBar::MenuBar(Ui::MainWindow* ui, QObject* parent) void MenuBar::newProjectActionTriggered() { - emit writeToConsole("MenuBar: newProject() triggered"); + emit writeToConsoleSignal("MenuBar: newProject() triggered"); } void MenuBar::openProjectActionTriggered() { - emit writeToConsole("MenuBar: openProject() triggered"); + emit writeToConsoleSignal("MenuBar: openProject() triggered"); } void MenuBar::exportSolutionActionTriggered() { - emit writeToConsole("MenuBar: exportSolution() triggered"); + emit writeToConsoleSignal("MenuBar: exportSolution() triggered"); } void MenuBar::closeProjectActionTriggered() { - emit writeToConsole("MenuBar: closeProject() triggered"); + emit writeToConsoleSignal("MenuBar: closeProject() triggered"); } void MenuBar::writeConsoleOutputActionTriggered() @@ -109,13 +109,13 @@ void MenuBar::writeConsoleOutputActionTriggered() if (!fileName.isEmpty()) { QDateTime currentTime = QDateTime::currentDateTime(); - emit writeToConsole("writing console output to " + fileName, Qt::darkGreen); - emit writeToConsole("current time is " + currentTime.toString("MM/dd/yyyy hh:mm:ss t"), Qt::darkGreen); + emit writeToConsoleSignal("writing console output to " + fileName, Qt::darkGreen); + emit writeToConsoleSignal("current time is " + currentTime.toString("MM/dd/yyyy hh:mm:ss t"), Qt::darkGreen); QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { - emit writeToConsole("Cannot open " + fileName + " for writing.", Qt::red); + emit writeToConsoleSignal("Cannot open " + fileName + " for writing.", Qt::red); return; } @@ -135,14 +135,14 @@ void MenuBar::writeBlankStationFileActionTriggered() if(!fileName.isEmpty()) { - emit writeToConsole("writing blank station file to " + fileName, Qt::darkGreen); + emit writeToConsoleSignal("writing blank station file to " + fileName, Qt::darkGreen); char** papszOptions = nullptr; int ninjaErr = NinjaWriteBlankWxStationFile(fileName.toStdString().c_str(), papszOptions); if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaWriteBlankWxStationFile: ninjaErr=" << ninjaErr; - emit writeToConsole("failed to write blank station file!", Qt::red); + emit writeToConsoleSignal("failed to write blank station file!", Qt::red); } } } @@ -161,7 +161,7 @@ void MenuBar::setConfigurationOptionActionTriggered() return; qDebug() << "Setting configuration option" << key << "to" << val; - emit writeToConsole("Setting configuration option " + key + " to " + val); + emit writeToConsoleSignal("Setting configuration option " + key + " to " + val); CPLSetConfigOption( key.toUtf8().constData(), @@ -174,7 +174,7 @@ void MenuBar::displayArcGISProGuideActionTriggered() QString displayFile = dataPath.absoluteFilePath("../share/windninja/doc/displaying_wind_vectors_in_ArcGIS_Pro.pdf"); displayFile = QDir::cleanPath(displayFile); - emit writeToConsole("Opening " + displayFile); + emit writeToConsoleSignal("Opening " + displayFile); if(!QDesktopServices::openUrl(QUrl(displayFile))) { QMessageBox::warning( @@ -190,7 +190,7 @@ void MenuBar::displayTutorial1ActionTriggered() QString displayFile = dataPath.absoluteFilePath("../share/windninja/doc/tutorials/WindNinja_tutorial1.pdf"); displayFile = QDir::cleanPath(displayFile); - emit writeToConsole("Opening " + displayFile); + emit writeToConsoleSignal("Opening " + displayFile); if (!QDesktopServices::openUrl(QUrl::fromLocalFile(displayFile))) { QMessageBox::warning( @@ -207,7 +207,7 @@ void MenuBar::displayTutorial2ActionTriggered() QString displayFile = dataPath.absoluteFilePath("../share/windninja/doc/tutorials/WindNinja_tutorial2.pdf"); displayFile = QDir::cleanPath(displayFile); - emit writeToConsole("Opening " + displayFile); + emit writeToConsoleSignal("Opening " + displayFile); if (!QDesktopServices::openUrl(QUrl::fromLocalFile(displayFile))) { QMessageBox::warning( @@ -224,7 +224,7 @@ void MenuBar::displayTutorial3ActionTriggered() QString displayFile = dataPath.absoluteFilePath("../share/windninja/doc/tutorials/WindNinja_tutorial3.pdf"); displayFile = QDir::cleanPath(displayFile); - emit writeToConsole("Opening " + displayFile); + emit writeToConsoleSignal("Opening " + displayFile); if (!QDesktopServices::openUrl(QUrl::fromLocalFile(displayFile))) { QMessageBox::warning( @@ -241,7 +241,7 @@ void MenuBar::displayTutorial4ActionTriggered() QString displayFile = dataPath.absoluteFilePath("../share/windninja/doc/tutorials/WindNinja_tutorial4.pdf"); displayFile = QDir::cleanPath(displayFile); - emit writeToConsole("Opening " + displayFile); + emit writeToConsoleSignal("Opening " + displayFile); if (!QDesktopServices::openUrl(QUrl::fromLocalFile(displayFile))) { QMessageBox::warning( @@ -258,7 +258,7 @@ void MenuBar::displayDemDownloadInstructionsActionTriggered() QString displayFile = dataPath.absoluteFilePath("../share/windninja/doc/download_elevation_file.pdf"); displayFile = QDir::cleanPath(displayFile); - emit writeToConsole("Opening " + displayFile); + emit writeToConsoleSignal("Opening " + displayFile); if (!QDesktopServices::openUrl(QUrl::fromLocalFile(displayFile))) { QMessageBox::warning( @@ -275,7 +275,7 @@ void MenuBar::displayFetchDemInstructionsActionTriggered() QString displayFile = dataPath.absoluteFilePath("../share/windninja/doc/fetch_dem_instructions.pdf"); displayFile = QDir::cleanPath(displayFile); - emit writeToConsole("Opening " + displayFile); + emit writeToConsoleSignal("Opening " + displayFile); if (!QDesktopServices::openUrl(QUrl::fromLocalFile(displayFile))) { QMessageBox::warning( @@ -292,7 +292,7 @@ void MenuBar::displayCommandLineInterfaceInstructionsActionTriggered() QString displayFile = dataPath.absoluteFilePath("../share/windninja/doc/CLI_instructions.pdf"); displayFile = QDir::cleanPath(displayFile); - emit writeToConsole("Opening " + displayFile); + emit writeToConsoleSignal("Opening " + displayFile); if (!QDesktopServices::openUrl(QUrl::fromLocalFile(displayFile))) { QMessageBox::warning( diff --git a/src/gui/menuBar.h b/src/gui/menuBar.h index c281a4c3a..1a8794a5a 100644 --- a/src/gui/menuBar.h +++ b/src/gui/menuBar.h @@ -51,7 +51,7 @@ class MenuBar : public QObject MenuBar(Ui::MainWindow* ui, QObject* parent = nullptr); signals: - void writeToConsole(QString message, QColor color = Qt::white); + void writeToConsoleSignal(QString message, QColor color=Qt::black); private slots: // functions for Menu actions diff --git a/src/gui/pointInitializationInput.h b/src/gui/pointInitializationInput.h index 3176d496d..d580930aa 100644 --- a/src/gui/pointInitializationInput.h +++ b/src/gui/pointInitializationInput.h @@ -52,7 +52,7 @@ class PointInitializationInput : public QObject signals: void updateState(); void updateProgressMessageSignal(const QString &msg); - void writeToConsoleSignal(const QString &msg, QColor color = Qt::white); + void writeToConsoleSignal(const QString &msg, QColor color=Qt::black); public slots: void updateTreeView(); diff --git a/src/gui/surfaceInput.h b/src/gui/surfaceInput.h index 0d3f31858..389f95e1d 100644 --- a/src/gui/surfaceInput.h +++ b/src/gui/surfaceInput.h @@ -61,7 +61,7 @@ class SurfaceInput : public QObject void updateState(); void updateTreeView(); void updateProgressMessageSignal(const QString &msg); - void writeToConsoleSignal(const QString &msg, QColor color = Qt::white); + void writeToConsoleSignal(const QString &msg, QColor color=Qt::black); public slots: void boundingBoxReceived(double north, double south, double east, double west); diff --git a/src/gui/weatherModelInput.h b/src/gui/weatherModelInput.h index 16686cd8c..33e72bd1f 100644 --- a/src/gui/weatherModelInput.h +++ b/src/gui/weatherModelInput.h @@ -51,7 +51,7 @@ class WeatherModelInput : public QObject signals: void updateState(); void updateProgressMessageSignal(const QString &msg); - void writeToConsoleSignal(const QString &msg, QColor color = Qt::white); + void writeToConsoleSignal(const QString &msg, QColor color=Qt::black); public slots: void updateTreeView(); From ca16ffd41ee25acadabb116fe228f8a0fa3d4402 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 30 Jan 2026 10:54:54 -0700 Subject: [PATCH 398/435] Removed unneccessary style blocks and removed unused dependencies --- data/map.html | 52 ++++----------------------------------------------- 1 file changed, 4 insertions(+), 48 deletions(-) diff --git a/data/map.html b/data/map.html index f09477e80..440f3ba5f 100755 --- a/data/map.html +++ b/data/map.html @@ -35,7 +35,8 @@ Leaflet Map From 54ba32930e41fad59100c75b909bab018011fc56 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 30 Jan 2026 11:58:11 -0700 Subject: [PATCH 399/435] Moved variable and function definitions --- data/map.html | 168 ++++++++++++++++++++++++-------------------------- 1 file changed, 80 insertions(+), 88 deletions(-) diff --git a/data/map.html b/data/map.html index 440f3ba5f..bf707c23c 100755 --- a/data/map.html +++ b/data/map.html @@ -52,49 +52,42 @@ } + + + + - - - - - - - + - - - - - - - - - - - + + + + - +
@@ -64,6 +65,8 @@ + + @@ -81,6 +84,8 @@ + + @@ -90,15 +95,22 @@ // Script variables const apiKey = "pk.eyJ1IjoiYm5vcmRncmVuIiwiYSI6ImNsZmxuMHowZzAzaTczeG80ZXR3a2ZnNHEifQ.kc7P57DJg8tyDMjjP7czuQ"; - const mapBaseLayer = L.tileLayer(`https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=${apiKey}`, { + const topoBaseLayer = L.tileLayer(`https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=${apiKey}`, { tileSize: 512, maxZoom: 18, zoomOffset: -1, id: 'mapbox/streets-v11' }); + const satelliteBaseLayer = L.tileLayer(`https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=${apiKey}`, { + tileSize: 512, + maxZoom: 18, + zoomOffset: -1, + id: 'mapbox/satellite-v9' + }); + const map = new L.Map('map', { - layers: [mapBaseLayer], + layers: [topoBaseLayer], center: new L.LatLng(43.62455, -113.2971), zoom: 8 }); @@ -107,9 +119,39 @@ map.addLayer(mapRectangleLayer); const rectangleDrawer = new L.Draw.Rectangle(map); let activeKmzLayer = null; - const baseMaps = {}; - const overlayMaps = {}; - const layerControl = L.control.layers(baseMaps, overlayMaps); + + const baseTree = { + label: 'Base Maps', + children: [ + { + label: 'Mapbox Streets', + layer: topoBaseLayer + }, + { + label: 'Satellite', + layer: satelliteBaseLayer + } + ] + }; + + const overlayTree = { + label: 'Overlays', + children: [ + { + label: 'Bounding Box', + layer: mapRectangleLayer + } + ] + }; + + const layerControl = L.control.layers.tree( + baseTree, + overlayTree, + { + collapsed: false + } + ); + let layerControlAdded = false; let drawDEMCheck = false; @@ -355,6 +397,8 @@ window.bridge = channel.objects.bridge; }); } + + layerControl.addTo(map); From f8c42d241474f81871d53d6941583a26524c19c7 Mon Sep 17 00:00:00 2001 From: latwood Date: Tue, 3 Feb 2026 15:41:34 -0700 Subject: [PATCH 409/435] fixed numNinjas count for domain average runs, for when using an empty table, and when adding entries to the table but then deleting them to an empty table. Also, a fix to the state checker for similar row counting when an empty table. For issue #687 --- src/gui/domainAverageInput.cpp | 4 ++++ src/gui/mainWindow.cpp | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gui/domainAverageInput.cpp b/src/gui/domainAverageInput.cpp index 056e89711..29007cb85 100644 --- a/src/gui/domainAverageInput.cpp +++ b/src/gui/domainAverageInput.cpp @@ -200,6 +200,10 @@ void DomainAverageInput::domainAverageTableCheckRows() { valid = false; } + if(filledRowsCount == 0) + { + valid = false; + } if(filledRowsCount != existingRowsCount) { valid = false; diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 2570f4074..25327debb 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -475,14 +475,14 @@ void MainWindow::solveButtonClicked() QTableWidgetItem* cloudCoverItem = ui->domainAverageTable->item(row, 4); QTableWidgetItem* airTempItem = ui->domainAverageTable->item(row, 5); - if(speedItem && directionItem) + if(speedItem && directionItem && !speedItem->text().trimmed().isEmpty() && !directionItem->text().trimmed().isEmpty()) { speeds << speedItem->text().toDouble(); directions << directionItem->text().toDouble(); if(ui->diurnalCheckBox->isChecked() || ui->stabilityCheckBox->isChecked()) { - if(timeItem && dateItem && cloudCoverItem && airTempItem) + if(timeItem && dateItem && cloudCoverItem && airTempItem && !timeItem->text().trimmed().isEmpty() && !dateItem->text().trimmed().isEmpty() && !cloudCoverItem->text().trimmed().isEmpty() && !airTempItem->text().trimmed().isEmpty()) { QTime currentTime = QTime::fromString(timeItem->text(), "HH:mm"); QDate currentDate = QDate::fromString(dateItem->text(), "MM/dd/yyyy"); From 8f739d17cc1f0b76ea95f0f0f1ce0d968987ebb5 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 4 Feb 2026 09:36:22 -0700 Subject: [PATCH 410/435] Small formatting changes --- data/map.html | 90 ++++++++++++++++++++++----------------------------- 1 file changed, 38 insertions(+), 52 deletions(-) diff --git a/data/map.html b/data/map.html index 19339d1d2..1882e938f 100755 --- a/data/map.html +++ b/data/map.html @@ -95,7 +95,7 @@ // Script variables const apiKey = "pk.eyJ1IjoiYm5vcmRncmVuIiwiYSI6ImNsZmxuMHowZzAzaTczeG80ZXR3a2ZnNHEifQ.kc7P57DJg8tyDMjjP7czuQ"; - const topoBaseLayer = L.tileLayer(`https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=${apiKey}`, { + const streetBaseLayer = L.tileLayer(`https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=${apiKey}`, { tileSize: 512, maxZoom: 18, zoomOffset: -1, @@ -110,22 +110,21 @@ }); const map = new L.Map('map', { - layers: [topoBaseLayer], + layers: [streetBaseLayer], center: new L.LatLng(43.62455, -113.2971), zoom: 8 }); const mapRectangleLayer = new L.FeatureGroup(); - map.addLayer(mapRectangleLayer); const rectangleDrawer = new L.Draw.Rectangle(map); - let activeKmzLayer = null; + const centerControl = L.control({ position: 'topleft' }); const baseTree = { label: 'Base Maps', children: [ { label: 'Mapbox Streets', - layer: topoBaseLayer + layer: streetBaseLayer }, { label: 'Satellite', @@ -134,6 +133,16 @@ ] }; + const simulationTree = { + label: 'Forecast Simulations', + children: [] + }; + + const demTree= { + label: 'DEM Simulations', + children: [] + }; + const overlayTree = { label: 'Overlays', children: [ @@ -148,22 +157,19 @@ baseTree, overlayTree, { - collapsed: false + collapsed: true } ); - let layerControlAdded = false; let drawDEMCheck = false; let kmzBaseLayers = []; let kmzLegendControls = []; - L.control.scale().addTo(map); - - const centerControl = L.control({ position: 'topleft' }); let centerControlAdded = false; // Script functions + function sendBoundingBox(layer) { const bounds = layer.getBounds(); const bboxData = { @@ -333,23 +339,23 @@ container.appendChild(img); if (timeSeries && legendEntries.length > 1) { - const legendEntry2 = legendEntries[1]; - const blob2 = await legendEntry2.async('blob'); - const url2 = URL.createObjectURL(blob2); - - const img2 = new Image(); - img2.src = url2; - img2.style.position = 'absolute'; - img2.style.top = '10px'; - img2.style.left = '50%'; - img2.style.transform = 'translateX(-50%)'; - img2.style.maxWidth = '90%'; // prevents it from overflowing the map - img2.style.height = 'auto'; - img2.style.zIndex = '600'; - img2.className = 'kmz-time-series-legend'; - - // Append directly to the map container - map.getContainer().appendChild(img2); + const legendEntry2 = legendEntries[1]; + const blob2 = await legendEntry2.async('blob'); + const url2 = URL.createObjectURL(blob2); + + const img2 = new Image(); + img2.src = url2; + img2.style.position = 'absolute'; + img2.style.top = '10px'; + img2.style.left = '50%'; + img2.style.transform = 'translateX(-50%)'; + img2.style.maxWidth = '90%'; // prevents it from overflowing the map + img2.style.height = 'auto'; + img2.style.zIndex = '600'; + img2.className = 'kmz-time-series-legend'; + + // Append directly to the map container + map.getContainer().appendChild(img2); } })(); } @@ -363,42 +369,22 @@ layerControl.addBaseLayer(kmlLegendLayer, layerName); kmzBaseLayers.push(kmlLegendLayer); - if (!layerControlAdded) { - layerControl.addTo(map); - layerControlAdded = true; - } - - if (!activeKmzLayer) { - activeKmzLayer = kmlLegendLayer; - kmlLegendLayer.addTo(map); - } } } - function clearKmzBaseLayers() { - kmzBaseLayers.forEach(layer => { - if (map.hasLayer(layer)) { - map.removeLayer(layer); - } - layerControl.removeLayer(layer); - }); - - kmzLegendControls.forEach(ctrl => { - map.removeControl(ctrl); - }); - - kmzBaseLayers = []; - kmzLegendControls = []; - activeKmzLayer = null; -} + // Main if (window.qt) { new QWebChannel(qt.webChannelTransport, channel => { window.bridge = channel.objects.bridge; }); } + + map.addLayer(mapRectangleLayer); layerControl.addTo(map); + L.control.scale().addTo(map); + From 5e308d4f4c5c4db89da1acd2b4b39eaea5bbff5f Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 4 Feb 2026 11:24:32 -0700 Subject: [PATCH 411/435] Updated load kmz to load 1 file entry and use the new layer control --- data/map.html | 142 +++++++++++++++++++++++++++----------------------- 1 file changed, 77 insertions(+), 65 deletions(-) diff --git a/data/map.html b/data/map.html index 1882e938f..f1de7400e 100755 --- a/data/map.html +++ b/data/map.html @@ -155,11 +155,13 @@ const layerControl = L.control.layers.tree( baseTree, - overlayTree, + [ + overlayTree, + ], { collapsed: true } - ); + ).addTo(map); let drawDEMCheck = false; @@ -286,14 +288,17 @@ }; async function loadKmzFromBase64(kmlData, timeSeries) { - clearKmzBaseLayers(); + // Setup & Cleanup + //clearKmzBaseLayers(); const binary = atob(kmlData); const bytes = new Uint8Array(binary.length); for (let i = 0; i < binary.length; i++) { bytes[i] = binary.charCodeAt(i); } + const zip = await JSZip.loadAsync(bytes.buffer); + // 2. Identify Files const kmlEntries = Object.values(zip.files).filter(entry => entry.name.toLowerCase().endsWith('.kml') ); @@ -302,77 +307,85 @@ ); if (kmlEntries.length === 0) { - alert('No KML files found in this KMZ.'); + console.error('No KML files found in this KMZ.'); return; } - for (const entry of kmlEntries) { - const kmlText = await entry.async('string'); - const parser = new DOMParser(); - const kmlDoc = parser.parseFromString(kmlText, 'text/xml'); - const kmlLayer = new L.KML(kmlDoc); - - const kmlLegendLayer = L.layerGroup([kmlLayer]); - - const layerName = entry.name; - - const legendControl = L.control({ position: 'bottomright' }); - kmzLegendControls.push(legendControl); - - legendControl.onAdd = function () { - const container = L.DomUtil.create('div', 'kmz-legend'); - L.DomEvent.disableClickPropagation(container); - - - if (legendEntries.length > 0) { - (async () => { - const legendEntry = legendEntries[0]; // Grabs only the legend - const blob = await legendEntry.async('blob'); - const url = URL.createObjectURL(blob); - - const img = new Image(); - img.src = url; - img.style.display = 'block'; - img.style.maxWidth = '150px'; - img.style.height = 'auto'; - - container.appendChild(img); - - if (timeSeries && legendEntries.length > 1) { - const legendEntry2 = legendEntries[1]; - const blob2 = await legendEntry2.async('blob'); - const url2 = URL.createObjectURL(blob2); - - const img2 = new Image(); - img2.src = url2; - img2.style.position = 'absolute'; - img2.style.top = '10px'; - img2.style.left = '50%'; - img2.style.transform = 'translateX(-50%)'; - img2.style.maxWidth = '90%'; // prevents it from overflowing the map - img2.style.height = 'auto'; - img2.style.zIndex = '600'; - img2.className = 'kmz-time-series-legend'; - - // Append directly to the map container - map.getContainer().appendChild(img2); -} - })(); - } + // Process kmz file + const entry = kmlEntries[0]; + const kmlText = await entry.async('string'); + const parser = new DOMParser(); + const kmlDoc = parser.parseFromString(kmlText, 'text/xml'); + + // Create leaflet layer + const kmlLayer = new L.KML(kmlDoc); + const kmlLegendLayer = L.layerGroup([kmlLayer]); + const layerName = entry.name; + + // 4. Legend Logic + const legendControl = L.control({ position: 'bottomright' }); + kmzLegendControls.push(legendControl); + + legendControl.onAdd = function () { + const container = L.DomUtil.create('div', 'kmz-legend'); + L.DomEvent.disableClickPropagation(container); + + if (legendEntries.length > 0) { + (async () => { + // Legend Key + const blob = await legendEntries[0].async('blob'); + const url = URL.createObjectURL(blob); + const img = new Image(); + img.src = url; + img.style.cssText = 'display: block; max-width: 150px; height: auto;'; + container.appendChild(img); + + // Legend Time Series + if (timeSeries && legendEntries.length > 1) { + const blob2 = await legendEntries[1].async('blob'); + const url2 = URL.createObjectURL(blob2); + const img2 = new Image(); + img2.src = url2; + img2.style.cssText = ` + position: absolute; top: 10px; left: 50%; + transform: translateX(-50%); max-width: 90%; + height: auto; z-index: 600; + `; + map.getContainer().appendChild(img2); + } + })(); + } + return container; + }; - return container; - }; + // Toggle legend with layer + kmlLegendLayer.on('add', () => legendControl.addTo(map)); + kmlLegendLayer.on('remove', () => legendControl.remove()); - kmlLegendLayer.on('add', () => legendControl.addTo(map)); - kmlLegendLayer.on('remove', () => legendControl.remove()); + const isFirstLayer = simulationTree.children.length === 0; - layerControl.addBaseLayer(kmlLegendLayer, layerName); - kmzBaseLayers.push(kmlLegendLayer); + if (isFirstLayer) { + kmlLegendLayer.addTo(map); + } + + // 5. Update the Tree Control + simulationTree.children.push({ + label: layerName, + layer: kmlLegendLayer + }); + // Save reference for cleanup + kmzBaseLayers.push(kmlLegendLayer); + + if (layerControl && layerControl.setOverlayTree) { + layerControl.setOverlayTree([ + simulationTree, + overlayTree + ]); } } - // Main + // Script Main if (window.qt) { new QWebChannel(qt.webChannelTransport, channel => { @@ -385,7 +398,6 @@ layerControl.addTo(map); L.control.scale().addTo(map); - From e6d9c2cceacf4364b020d7639caac7517e876bce Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 4 Feb 2026 11:57:50 -0700 Subject: [PATCH 412/435] Changed names of trees, added clearing functions for trees, and implemented it in Qt --- data/map.html | 105 +++++++++++++++++++++++++++++++++++++---- src/gui/mainWindow.cpp | 42 ++++++++--------- 2 files changed, 118 insertions(+), 29 deletions(-) diff --git a/data/map.html b/data/map.html index f1de7400e..56ca42cea 100755 --- a/data/map.html +++ b/data/map.html @@ -133,18 +133,18 @@ ] }; - const simulationTree = { - label: 'Forecast Simulations', + const windninjaOutputTree = { + label: 'WindNinja Output', children: [] }; - const demTree= { + const initializationOutputTree= { label: 'DEM Simulations', children: [] }; const overlayTree = { - label: 'Overlays', + label: 'WindNinja Overlays', children: [ { label: 'Bounding Box', @@ -289,7 +289,8 @@ async function loadKmzFromBase64(kmlData, timeSeries) { // Setup & Cleanup - //clearKmzBaseLayers(); + clearWindNinjaOutputTree(); + const binary = atob(kmlData); const bytes = new Uint8Array(binary.length); for (let i = 0; i < binary.length; i++) { @@ -362,14 +363,14 @@ kmlLegendLayer.on('add', () => legendControl.addTo(map)); kmlLegendLayer.on('remove', () => legendControl.remove()); - const isFirstLayer = simulationTree.children.length === 0; + const isFirstLayer = windninjaOutputTree.children.length === 0; if (isFirstLayer) { kmlLegendLayer.addTo(map); } // 5. Update the Tree Control - simulationTree.children.push({ + windninjaOutputTree.children.push({ label: layerName, layer: kmlLegendLayer }); @@ -379,12 +380,100 @@ if (layerControl && layerControl.setOverlayTree) { layerControl.setOverlayTree([ - simulationTree, + windninjaOutputTree, overlayTree ]); } } + async function loadOutputFromBase64(data) { + + clearInitializationOutputTree(); + + // 1. Decode the Base64 data passed in via 'data' + const binary = atob(data); + const bytes = new Uint8Array(binary.length); + for (let i = 0; i < binary.length; i++) { + bytes[i] = binary.charCodeAt(i); + } + + // 2. Load the ZIP and extract entries + const zip = await JSZip.loadAsync(bytes.buffer); + const kmlEntries = Object.values(zip.files).filter(entry => + entry.name.toLowerCase().endsWith('.kml') + ); + + if (kmlEntries.length === 0) { + console.error('No KML files found in this output.'); + return; + } + + // 3. Process the first KML entry + const entry = kmlEntries[0]; + const kmlText = await entry.async('string'); + const parser = new DOMParser(); + const kmlDoc = parser.parseFromString(kmlText, 'text/xml'); + + // 4. Create Leaflet Layer + const kmlLayer = new L.KML(kmlDoc); + const kmlLegendLayer = L.layerGroup([kmlLayer]); + const layerName = entry.name; + + // 5. Logic for "Only First Selected" + // Note: Checking initializationOutputTree.children.length specifically for this branch + const isFirstLayer = initializationOutputTree.children.length === 0; + + if (isFirstLayer) { + kmlLegendLayer.addTo(map); + } + + // 6. Push to the DEM Tree branch + initializationOutputTree.children.push({ + label: layerName, + layer: kmlLegendLayer + }); + + // Save reference for cleanup + kmzBaseLayers.push(kmlLegendLayer); + + // 7. Refresh the UI + if (layerControl && layerControl.setOverlayTree) { + layerControl.setOverlayTree([ + windninjaOutputTree, + initializationOutputTree, + overlayTree + ]); + } + } + + function clearWindNinjaOutputTree() { + windninjaOutputTree.children.forEach(item => { + if (item.layer) { + map.removeLayer(item.layer); + } + }); + + windninjaOutputTree.children = []; + + if (layerControl) { + layerControl.setOverlayTree([overlayTree, windninjaOutputTree, initializationOutputTree]); + } + } + + function clearInitializationOutputTree() { + initializationOutputTree.children.forEach(item => { + if (item.layer) { + map.removeLayer(item.layer); + } + }); + + initializationOutputTree.children = []; + + if (layerControl) { + layerControl.setOverlayTree([overlayTree, windninjaOutputTree, initializationOutputTree]); + } + } + // Script Main if (window.qt) { diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index f33fc7ac6..e6cd49d9b 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -1561,31 +1561,31 @@ void MainWindow::plotKmzOutputs() bool timeSeries = !ui->domainAverageGroupBox->isChecked(); webEngineView->page()->runJavaScript( - "loadKmzFromBase64('" + base64 + "', " + (timeSeries ? "true" : "false") + ");" + "loadKmzFromBase64('"+base64+"', "+(timeSeries ? "true" : "false")+");" ); // if it is a point initialization run, and station kmls were created for the run, // plot the station kmls of the first run // (first run, because station kmls are SHARED across runs) - if(ui->pointInitializationGroupBox->isChecked() && ui->pointInitializationWriteStationKMLCheckBox->isChecked() && i == 0) - { - for(int j = 0; j < numStationKmls; j++) - { - QString outFileStr = QString::fromStdString(stationKmlFilenames[j]); - qDebug() << "station kml outFile =" << outFileStr; - QFile outFile(outFileStr); - - outFile.open(QIODevice::ReadOnly); - QByteArray data = outFile.readAll(); - QString base64 = data.toBase64(); - - webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); - } - } - - // if it is a weather model run, and weather model kmzs were created for the run, - // plot the weather model kmz of the run - if(ui->weatherModelGroupBox->isChecked() && ui->googleEarthCheckBox->isChecked()) + // if(ui->pointInitializationGroupBox->isChecked() && ui->pointInitializationWriteStationKMLCheckBox->isChecked() && i == 0) + // { + // for(int j = 0; j < numStationKmls; j++) + // { + // QString outFileStr = QString::fromStdString(stationKmlFilenames[j]); + // qDebug() << "station kml outFile =" << outFileStr; + // QFile outFile(outFileStr); + + // outFile.open(QIODevice::ReadOnly); + // QByteArray data = outFile.readAll(); + // QString base64 = data.toBase64(); + + // webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + // } + // } + + // // if it is a weather model run, and weather model kmzs were created for the run, + // // plot the weather model kmz of the run + // if(ui->weatherModelGroupBox->isChecked() && ui->googleEarthCheckBox->isChecked()) { QString outFileStr = QString::fromStdString(weatherModelKmzFilenames[i]); qDebug() << "wx model kmz outFile =" << outFileStr; @@ -1595,7 +1595,7 @@ void MainWindow::plotKmzOutputs() QByteArray data = outFile.readAll(); QString base64 = data.toBase64(); - webEngineView->page()->runJavaScript("loadKmzFromBase64('"+base64+"')"); + webEngineView->page()->runJavaScript("loadOutputFromBase64('"+base64+"')"); } } From 2523e8e5280ab936c2d8a6466c1f24870451b29f Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 4 Feb 2026 13:43:00 -0700 Subject: [PATCH 413/435] switched from using the domainAvgTable table item text to the table spin box widgets. Dropped all the fancy state checking for now, no longer need to check each cell for validity or emptiness. For issue #687 --- src/gui/domainAverageInput.cpp | 206 +++++++-------------------------- src/gui/domainAverageInput.h | 5 - src/gui/mainWindow.cpp | 74 +++++------- 3 files changed, 69 insertions(+), 216 deletions(-) diff --git a/src/gui/domainAverageInput.cpp b/src/gui/domainAverageInput.cpp index 29007cb85..a835360f4 100644 --- a/src/gui/domainAverageInput.cpp +++ b/src/gui/domainAverageInput.cpp @@ -39,177 +39,17 @@ DomainAverageInput::DomainAverageInput(Ui::MainWindow* ui, QObject* parent) connect(ui->inputWindHeightComboBox, &QComboBox::currentIndexChanged, this, &DomainAverageInput::windHeightComboBoxCurrentIndexChanged); connect(ui->clearTableButton, &QPushButton::clicked, this, &DomainAverageInput::clearTableButtonClicked); - connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &DomainAverageInput::domainAverageTableCellChanged); + connect(ui->domainAverageTable, &QTableWidget::cellChanged, this, &DomainAverageInput::domainAverageTableCheckRows); connect(ui->diurnalCheckBox, &QCheckBox::clicked, this, &DomainAverageInput::domainAverageTableCheckRows); connect(ui->stabilityCheckBox, &QCheckBox::clicked, this, &DomainAverageInput::domainAverageTableCheckRows); connect(ui->domainAverageGroupBox, &QGroupBox::toggled, this, &DomainAverageInput::domainAverageGroupBoxToggled); + connect(ui->domainAverageGroupBox, &QGroupBox::toggled, this, &DomainAverageInput::domainAverageTableCheckRows); connect(this, &DomainAverageInput::updateState, &AppState::instance(), &AppState::updateDomainAverageInputState); } -void DomainAverageInput::domainAverageTableCellChanged(int row, int column) -{ - QTableWidget* table = ui->domainAverageTable; - QTableWidgetItem* item = table->item(row, column); - if(item) - { - QString value = item->text().trimmed(); - bool valid = false; - QString errorMessage; - - // Allow empty input - if (value.isEmpty()) - { - valid = true; - } - else - { - switch (column) - { - case 0: - { - double dbl = value.toDouble(&valid); - if (!valid || dbl < 0.0) - { - valid = false; - errorMessage = "Must be a positive number"; - } - break; - } - case 1: - { - double dbl = value.toDouble(&valid); - if (!valid || dbl < 0.0 || dbl > 359.9) - { - valid = false; - errorMessage = "Must be a number between 0.0 and 359.9"; - } - break; - } - case 2: - { - QTime t = QTime::fromString(value, "HH:mm"); - valid = t.isValid(); - if (!valid) - { - errorMessage = "Must be a valid 24h time (HH:mm)"; - } - break; - } - case 3: - { - QDate d = QDate::fromString(value, "MM/dd/yyyy"); - valid = d.isValid(); - if (!valid) - { - errorMessage = "Must be a valid date (MM/dd/yyyy)"; - } - break; - } - case 4: - { - double dbl = value.toDouble(&valid); - if (!valid || dbl < 0.0 || dbl > 100.0) - { - valid = false; - errorMessage = "Must be a number between 0.0 and 100.0"; - } - break; - } - case 5: - { - double dbl = value.toDouble(&valid); - if (!valid || dbl < -40.0 || dbl > 200.0) - { - valid = false; - errorMessage = "Must be a number between -40.0 and 200.0"; - } - break; - } - default: - valid = true; - } - } - - QPair cell(row, column); - if (!valid) - { - invalidDAWCells.insert(cell); - item->setBackground(Qt::red); - item->setToolTip(errorMessage); - } - else - { - invalidDAWCells.remove(cell); - item->setBackground(QBrush()); // Reset to default - item->setToolTip(""); - } - } // if(item) - - AppState::instance().isDomainAverageWindInputTableValid = invalidDAWCells.isEmpty(); - - emit updateState(); - - domainAverageTableCheckRows(); -} - void DomainAverageInput::domainAverageTableCheckRows() { - QTableWidget* table = ui->domainAverageTable; - - int numTableCols = 6; // table->columnCount() - if(!ui->diurnalCheckBox->isChecked() && !ui->stabilityCheckBox->isChecked()) - { - numTableCols = 2; - } - - int existingRowsCount = 0; - int filledRowsCount = 0; - int invalidCellsCount = 0; - for(int rowIdx = 0; rowIdx < table->rowCount(); rowIdx++) - { - int numFilledTableCols = 0; - for(int colIdx = 0; colIdx < numTableCols; colIdx++) - { - QTableWidgetItem* tableItem = table->item(rowIdx, colIdx); - if(tableItem && !tableItem->text().trimmed().isEmpty()) - { - numFilledTableCols = numFilledTableCols + 1; - } - } - - if(numFilledTableCols != 0) - { - existingRowsCount = existingRowsCount + 1; - } - if(numFilledTableCols == numTableCols) - { - filledRowsCount = filledRowsCount + 1; - } - - for(const QPair& cell : invalidDAWCells) - { - if(rowIdx == cell.first && cell.second < numTableCols) - { - invalidCellsCount = invalidCellsCount + 1; - } - } - } - - bool valid = true; - if(invalidCellsCount != 0) - { - valid = false; - } - if(filledRowsCount == 0) - { - valid = false; - } - if(filledRowsCount != existingRowsCount) - { - valid = false; - } - - AppState::instance().isDomainAverageWindInputTableValid = valid; + AppState::instance().isDomainAverageWindInputTableValid = true; emit updateState(); } @@ -219,8 +59,28 @@ void DomainAverageInput::clearTableButtonClicked() AppState& state = AppState::instance(); AppState::instance().isDomainAverageWindInputTableValid = false; + for(int rowIdx = 0; rowIdx < ui->domainAverageTable->rowCount(); rowIdx++) + { + QDoubleSpinBox* speedSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 0)); + QDoubleSpinBox* directionSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 1)); + QTimeEdit* timeEdit = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 2)); + QDateEdit* dateEdit = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 3)); + QDoubleSpinBox* cloudCoverSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 4)); + QDoubleSpinBox* airTempSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 5)); + + disconnect(speedSpin, &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + disconnect(directionSpin, &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + disconnect(timeEdit, &QTimeEdit::timeChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + disconnect(dateEdit, &QDateEdit::dateChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + disconnect(cloudCoverSpin, &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + disconnect(airTempSpin, &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + + //tableWidget->setCellWidget(rowIdx, colIdx, nullptr); // Destroys the old widget connections + } + ui->domainAverageTable->clearContents(); - invalidDAWCells.clear(); + + setupDomainAverageTableWidgets(); emit updateState(); } @@ -302,8 +162,26 @@ void DomainAverageInput::setupDomainAverageTableWidgets() airTempSpin->setDecimals(0); airTempSpin->setValue(72.0); table->setCellWidget(row, 5, airTempSpin); + + connect(speedSpin, &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + connect(dirSpin, &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + connect(timeEdit, &QTimeEdit::timeChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + connect(dateEdit, &QDateEdit::dateChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + connect(cloudSpin, &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + connect(airTempSpin, &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); } + //connect(speedSpin, QOverload::of(&QDoubleSpinBox::valueChanged), this, &DomainAverageInput::domainAverageTableCheckRows); + //connect(dirSpin, QOverload::of(&QDoubleSpinBox::valueChanged), this, &DomainAverageInput::domainAverageTableCheckRows); + //connect(timeEdit, &QTimeEdit::timeChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + //connect(dateEdit, &QDateEdit::dateChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + + //for(int rowIdx = 0; rowIdx < rows; rowIdx++) + //{ + // connect(tree->wind->windTable->speed[i], SIGNAL(valueChanged(double)), this, &DomainAverageInput::domainAverageTableCheckRows); + // connect(tree->wind->windTable->dir[i], SIGNAL(valueChanged(int)), this, &DomainAverageInput::domainAverageTableCheckRows); + //} + if(ui->diurnalCheckBox->isChecked() || ui->stabilityCheckBox->isChecked()) { table->showColumn(2); diff --git a/src/gui/domainAverageInput.h b/src/gui/domainAverageInput.h index 6a06d1aef..db42b5562 100644 --- a/src/gui/domainAverageInput.h +++ b/src/gui/domainAverageInput.h @@ -33,9 +33,6 @@ #include "appState.h" #include "ui_mainWindow.h" #include -#include -#include -#include class DomainAverageInput: public QObject { @@ -49,14 +46,12 @@ class DomainAverageInput: public QObject private slots: void setupDomainAverageTableWidgets(); - void domainAverageTableCellChanged(int row, int column); void domainAverageTableCheckRows(); void clearTableButtonClicked(); void domainAverageGroupBoxToggled(); void windHeightComboBoxCurrentIndexChanged(int index); private: - QSet> invalidDAWCells; Ui::MainWindow *ui; }; diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 25327debb..6d4ff8506 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -468,57 +468,37 @@ void MainWindow::solveButtonClicked() int rowCount = ui->domainAverageTable->rowCount(); for (int row = 0; row < rowCount; ++row) { - QTableWidgetItem* speedItem = ui->domainAverageTable->item(row, 0); - QTableWidgetItem* directionItem = ui->domainAverageTable->item(row, 1); - QTableWidgetItem* timeItem = ui->domainAverageTable->item(row, 2); - QTableWidgetItem* dateItem = ui->domainAverageTable->item(row, 3); - QTableWidgetItem* cloudCoverItem = ui->domainAverageTable->item(row, 4); - QTableWidgetItem* airTempItem = ui->domainAverageTable->item(row, 5); - - if(speedItem && directionItem && !speedItem->text().trimmed().isEmpty() && !directionItem->text().trimmed().isEmpty()) + QDoubleSpinBox* speedSpin = qobject_cast(ui->domainAverageTable->cellWidget(row, 0)); + QDoubleSpinBox* directionSpin = qobject_cast(ui->domainAverageTable->cellWidget(row, 1)); + QTimeEdit* timeEdit = qobject_cast(ui->domainAverageTable->cellWidget(row, 2)); + QDateEdit* dateEdit = qobject_cast(ui->domainAverageTable->cellWidget(row, 3)); + QDoubleSpinBox* cloudCoverSpin = qobject_cast(ui->domainAverageTable->cellWidget(row, 4)); + QDoubleSpinBox* airTempSpin = qobject_cast(ui->domainAverageTable->cellWidget(row, 5)); + + if(!speedSpin || !directionSpin || !timeEdit || !dateEdit || !cloudCoverSpin || !airTempSpin) { - speeds << speedItem->text().toDouble(); - directions << directionItem->text().toDouble(); + continue; + } - if(ui->diurnalCheckBox->isChecked() || ui->stabilityCheckBox->isChecked()) - { - if(timeItem && dateItem && cloudCoverItem && airTempItem && !timeItem->text().trimmed().isEmpty() && !dateItem->text().trimmed().isEmpty() && !cloudCoverItem->text().trimmed().isEmpty() && !airTempItem->text().trimmed().isEmpty()) - { - QTime currentTime = QTime::fromString(timeItem->text(), "HH:mm"); - QDate currentDate = QDate::fromString(dateItem->text(), "MM/dd/yyyy"); - // constructs using machine local time, may need to convert from machine local time to UTC time - QDateTime currentDateTime = QDateTime(currentDate, currentTime); - - years << currentDateTime.date().year(); - months << currentDateTime.date().month(); - days << currentDateTime.date().day(); - hours << currentDateTime.time().hour(); - minutes << currentDateTime.time().minute(); - - cloudCovers << cloudCoverItem->text().toDouble(); - airTemps << airTempItem->text().toDouble(); - } else - { - ninjaErr = NINJA_E_INVALID; - qDebug() << "Failed to read diurnal/stability inputs from domainAvgInputTable: ninjaErr =" << ninjaErr; - comMessageHandler("ERROR: Failed to read diurnal/stability inputs from domainAvgInputTable.", this); - progressDialog->setMinimumSize(400, 120); // using comMessageHandler in this way resizes the progressDialog weirdly without this - break; - } - } else // if not stability or diurnal, still need to feed in some kind of values - { - // throw in some generic values - QDateTime currentDateTime = QDateTime::currentDateTimeUtc(); + if(speedSpin->value() != 0.0 || directionSpin->value() != 0.0) + { + speeds << speedSpin->value(); + directions << directionSpin->value(); - years << currentDateTime.date().year(); - months << currentDateTime.date().month(); - days << currentDateTime.date().day(); - hours << currentDateTime.time().hour(); - minutes << currentDateTime.time().minute(); + // always grab the values from the diurnal/stability inputs, + // whether they are the default values, or whatever the user has changed them to be - cloudCovers << 15.0; - airTemps << 72.0; - } + // constructs using machine local time, may need to convert from machine local time to UTC time + QDateTime currentDateTime = QDateTime(dateEdit->date(), timeEdit->time()); + + years << currentDateTime.date().year(); + months << currentDateTime.date().month(); + days << currentDateTime.date().day(); + hours << currentDateTime.time().hour(); + minutes << currentDateTime.time().minute(); + + cloudCovers << cloudCoverSpin->value(); + airTemps << airTempSpin->value(); } } numNinjas = speeds.size(); From 80b8fabb4eb89531e4ca480a2e65440ee7e08e70 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 4 Feb 2026 13:49:22 -0700 Subject: [PATCH 414/435] added domainAvgTable state checking, for what SHOULD be like the old qt4 method, including for allowing 0.0, 0.0 spd, dir diurnal runs. For issue #687 --- src/gui/appState.cpp | 1 + src/gui/appState.h | 1 + src/gui/domainAverageInput.cpp | 76 +++++++++++++++++++++++++++++++++- 3 files changed, 77 insertions(+), 1 deletion(-) diff --git a/src/gui/appState.cpp b/src/gui/appState.cpp index 75a5f85fe..319ffe192 100644 --- a/src/gui/appState.cpp +++ b/src/gui/appState.cpp @@ -37,6 +37,7 @@ AppState& AppState::instance() AppState::AppState() : tickIcon(":/tick.png"), + warnIcon(":/jason_caution.png"), crossIcon(":/cross.png"), bulletIcon(":/bullet_blue.png") {} diff --git a/src/gui/appState.h b/src/gui/appState.h index 188d725f4..27faed473 100644 --- a/src/gui/appState.h +++ b/src/gui/appState.h @@ -95,6 +95,7 @@ public slots: Ui::MainWindow *ui; QIcon tickIcon; + QIcon warnIcon; QIcon crossIcon; QIcon bulletIcon; diff --git a/src/gui/domainAverageInput.cpp b/src/gui/domainAverageInput.cpp index a835360f4..7586ef3e5 100644 --- a/src/gui/domainAverageInput.cpp +++ b/src/gui/domainAverageInput.cpp @@ -49,8 +49,82 @@ DomainAverageInput::DomainAverageInput(Ui::MainWindow* ui, QObject* parent) void DomainAverageInput::domainAverageTableCheckRows() { - AppState::instance().isDomainAverageWindInputTableValid = true; + //bool valid = false; + // count numRuns + int numRuns = 0; + for(int rowIdx = 0; rowIdx < ui->domainAverageTable->rowCount(); rowIdx++) + { + QDoubleSpinBox* speedSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 0)); + QDoubleSpinBox* directionSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 1)); + QTimeEdit* timeEdit = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 2)); + QDateEdit* dateEdit = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 3)); + QDoubleSpinBox* cloudCoverSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 4)); + QDoubleSpinBox* airTempSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 5)); + + if(!speedSpin || !directionSpin || !timeEdit || !dateEdit || !cloudCoverSpin || !airTempSpin) + { + continue; + } + + if(speedSpin->value() != 0.0 || directionSpin->value() != 0.0) + { + numRuns = numRuns + 1; + } + } + + bool valid = true; + if(numRuns == 0 && ui->diurnalCheckBox->isChecked() == false) + { + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, crossIcon); + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "No runs have been added, diurnal is not active"); + qDebug() << "No runs have been added, diurnal is not active"; + valid = false; + } + else if(numRuns == 0 && ui->diurnalCheckBox->isChecked() == true) + { + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, warnIcon); + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "No runs have been added, one run will be done at speed = 0, dir = 0 while using diurnal"); + qDebug() << "No runs have been added, one run will be done at speed = 0, dir = 0 while using diurnal"; + valid = true; + } + else + { + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, QString::number(numRuns)+" runs"); + qDebug() << QString::number(numRuns)+" runs"; + valid = true; + // override if any 0.0 wind speed runs are detected, warn and run if diurnal, stop if not diurnal + for(int runIdx=0; runIdx < numRuns; runIdx++) + { + QDoubleSpinBox* speedSpin = qobject_cast(ui->domainAverageTable->cellWidget(runIdx, 0)); + if(!speedSpin) + { + continue; + } + + if(speedSpin->value() == 0.0) + { + if(ui->diurnalCheckBox->isChecked() == false) + { + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, crossIcon); + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, QString::number(numRuns)+" runs have been added, but detecting at least one 0.0 wind speed run without diurnal being active"); + qDebug() << QString::number(numRuns)+" runs have been added, but detecting at least one 0.0 wind speed run without diurnal being active"; + valid = false; + } + else // if(ui->diurnalCheckBox->isChecked() == true) + { + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, warnIcon); + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, QString::number(numRuns)+" runs have been added, detecting at least one 0.0 wind speed run, diurnal is active so will continue the runs"); + qDebug() << QString::number(numRuns)+" runs have been added, detecting at least one 0.0 wind speed run, diurnal is active so will continue the runs"; + valid = true; + } + break; + } + } + } + AppState::instance().isDomainAverageWindInputTableValid = valid; +qDebug() << "appState =" << valid; emit updateState(); } From e8ef893752b3dd939b83b26f5798318c07356471 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 4 Feb 2026 14:09:00 -0700 Subject: [PATCH 415/435] smal cleanup to domainAvgTable methods, apparently QTableWidget->clearContents() already runs the disconnect() statements. Also, needed to add the checkRows() to clearTable(), not sure if this way or a connect method is better but this works. For issue #687 --- src/gui/domainAverageInput.cpp | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/src/gui/domainAverageInput.cpp b/src/gui/domainAverageInput.cpp index 7586ef3e5..b1d807b32 100644 --- a/src/gui/domainAverageInput.cpp +++ b/src/gui/domainAverageInput.cpp @@ -130,32 +130,14 @@ qDebug() << "appState =" << valid; void DomainAverageInput::clearTableButtonClicked() { - AppState& state = AppState::instance(); AppState::instance().isDomainAverageWindInputTableValid = false; - for(int rowIdx = 0; rowIdx < ui->domainAverageTable->rowCount(); rowIdx++) - { - QDoubleSpinBox* speedSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 0)); - QDoubleSpinBox* directionSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 1)); - QTimeEdit* timeEdit = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 2)); - QDateEdit* dateEdit = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 3)); - QDoubleSpinBox* cloudCoverSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 4)); - QDoubleSpinBox* airTempSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 5)); - - disconnect(speedSpin, &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); - disconnect(directionSpin, &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); - disconnect(timeEdit, &QTimeEdit::timeChanged, this, &DomainAverageInput::domainAverageTableCheckRows); - disconnect(dateEdit, &QDateEdit::dateChanged, this, &DomainAverageInput::domainAverageTableCheckRows); - disconnect(cloudCoverSpin, &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); - disconnect(airTempSpin, &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); - - //tableWidget->setCellWidget(rowIdx, colIdx, nullptr); // Destroys the old widget connections - } - ui->domainAverageTable->clearContents(); setupDomainAverageTableWidgets(); + domainAverageTableCheckRows(); + emit updateState(); } From 1ae0f5b253d95af80023c1b3071a158b070e5c1b Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 4 Feb 2026 14:28:20 -0700 Subject: [PATCH 416/435] more correctly replicating the old qt4 domainAvgTable state checking and numRuns counting methods, it definitely follows the exact method as the old code now. That being said, the method definitely needs refactored to be less confusing. I wrote the old code methods 2 years ago, but apparently I did it too cleverly, because even I am having a rough time reading exactly how it works as it is now. Apparently I was too clever for myself lol. For issue #687 --- src/gui/domainAverageInput.cpp | 5 ++- src/gui/mainWindow.cpp | 73 +++++++++++++++++++++++----------- 2 files changed, 53 insertions(+), 25 deletions(-) diff --git a/src/gui/domainAverageInput.cpp b/src/gui/domainAverageInput.cpp index b1d807b32..aa5672f6a 100644 --- a/src/gui/domainAverageInput.cpp +++ b/src/gui/domainAverageInput.cpp @@ -68,7 +68,8 @@ void DomainAverageInput::domainAverageTableCheckRows() if(speedSpin->value() != 0.0 || directionSpin->value() != 0.0) { - numRuns = numRuns + 1; + //numRuns = numRuns + 1; // numActiveRows + numRuns = rowIdx + 1; // lastActiveRowPlusOne } } @@ -94,7 +95,7 @@ void DomainAverageInput::domainAverageTableCheckRows() qDebug() << QString::number(numRuns)+" runs"; valid = true; // override if any 0.0 wind speed runs are detected, warn and run if diurnal, stop if not diurnal - for(int runIdx=0; runIdx < numRuns; runIdx++) + for(int runIdx = 0; runIdx < numRuns; runIdx++) { QDoubleSpinBox* speedSpin = qobject_cast(ui->domainAverageTable->cellWidget(runIdx, 0)); if(!speedSpin) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 6d4ff8506..f9deb1146 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -465,15 +465,16 @@ void MainWindow::solveButtonClicked() QString DEMTimeZone = ui->timeZoneComboBox->currentText(); - int rowCount = ui->domainAverageTable->rowCount(); - for (int row = 0; row < rowCount; ++row) + // count numRuns + int numRuns = 0; + for(int rowIdx = 0; rowIdx < ui->domainAverageTable->rowCount(); rowIdx++) { - QDoubleSpinBox* speedSpin = qobject_cast(ui->domainAverageTable->cellWidget(row, 0)); - QDoubleSpinBox* directionSpin = qobject_cast(ui->domainAverageTable->cellWidget(row, 1)); - QTimeEdit* timeEdit = qobject_cast(ui->domainAverageTable->cellWidget(row, 2)); - QDateEdit* dateEdit = qobject_cast(ui->domainAverageTable->cellWidget(row, 3)); - QDoubleSpinBox* cloudCoverSpin = qobject_cast(ui->domainAverageTable->cellWidget(row, 4)); - QDoubleSpinBox* airTempSpin = qobject_cast(ui->domainAverageTable->cellWidget(row, 5)); + QDoubleSpinBox* speedSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 0)); + QDoubleSpinBox* directionSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 1)); + QTimeEdit* timeEdit = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 2)); + QDateEdit* dateEdit = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 3)); + QDoubleSpinBox* cloudCoverSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 4)); + QDoubleSpinBox* airTempSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 5)); if(!speedSpin || !directionSpin || !timeEdit || !dateEdit || !cloudCoverSpin || !airTempSpin) { @@ -482,26 +483,52 @@ void MainWindow::solveButtonClicked() if(speedSpin->value() != 0.0 || directionSpin->value() != 0.0) { - speeds << speedSpin->value(); - directions << directionSpin->value(); + //numRuns = numRuns + 1; // numActiveRows + numRuns = rowIdx + 1; // lastActiveRowPlusOne + } + } + // the above count gets off by 1 when no runs are selected. If diurnal is checked, we actually DO want to run that first zero valued run. + if(numRuns == 0 && ui->diurnalCheckBox->isChecked() == true) + { + numRuns = 1; + } + + for(int runIdx = 0; runIdx < numRuns; runIdx++) + { + QDoubleSpinBox* speedSpin = qobject_cast(ui->domainAverageTable->cellWidget(runIdx, 0)); + QDoubleSpinBox* directionSpin = qobject_cast(ui->domainAverageTable->cellWidget(runIdx, 1)); + QTimeEdit* timeEdit = qobject_cast(ui->domainAverageTable->cellWidget(runIdx, 2)); + QDateEdit* dateEdit = qobject_cast(ui->domainAverageTable->cellWidget(runIdx, 3)); + QDoubleSpinBox* cloudCoverSpin = qobject_cast(ui->domainAverageTable->cellWidget(runIdx, 4)); + QDoubleSpinBox* airTempSpin = qobject_cast(ui->domainAverageTable->cellWidget(runIdx, 5)); + + if(!speedSpin || !directionSpin || !timeEdit || !dateEdit || !cloudCoverSpin || !airTempSpin) + { + continue; + } - // always grab the values from the diurnal/stability inputs, - // whether they are the default values, or whatever the user has changed them to be + speeds << speedSpin->value(); + directions << directionSpin->value(); - // constructs using machine local time, may need to convert from machine local time to UTC time - QDateTime currentDateTime = QDateTime(dateEdit->date(), timeEdit->time()); + // always grab the values from the diurnal/stability inputs, + // whether they are the default values, or whatever the user has changed them to be - years << currentDateTime.date().year(); - months << currentDateTime.date().month(); - days << currentDateTime.date().day(); - hours << currentDateTime.time().hour(); - minutes << currentDateTime.time().minute(); + // constructs using machine local time, may need to convert from machine local time to UTC time + QDateTime currentDateTime = QDateTime(dateEdit->date(), timeEdit->time()); - cloudCovers << cloudCoverSpin->value(); - airTemps << airTempSpin->value(); - } + years << currentDateTime.date().year(); + months << currentDateTime.date().month(); + days << currentDateTime.date().day(); + hours << currentDateTime.time().hour(); + minutes << currentDateTime.time().minute(); + + cloudCovers << cloudCoverSpin->value(); + airTemps << airTempSpin->value(); } - numNinjas = speeds.size(); + + numNinjas = speeds.size(); // SHOULD be the same as numRuns + qDebug() << "numRuns = " << numRuns << ", numNinjas = " << numNinjas; + bool momentumFlag = ui->momentumSolverCheckBox->isChecked(); QString speedUnits = ui->tableSpeedUnits->currentText(); QString airTempUnits = ui->tableTempUnits->currentText().remove("°"); From b418d732158ab41e5a43b068132fa7e8e1498f99 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 4 Feb 2026 14:54:40 -0700 Subject: [PATCH 417/435] Readded dependencies and css as needed, adjusted bounding box, and ensured tree properly updates when new dem file is specified --- data/map.html | 111 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 75 insertions(+), 36 deletions(-) diff --git a/data/map.html b/data/map.html index 56ca42cea..8f1623744 100755 --- a/data/map.html +++ b/data/map.html @@ -50,6 +50,39 @@ width: 100%; box-sizing: border-box; } + .leaflet-div-icon { + background: white; + border: 2px solid #0077ff; + border-radius: 50%; + width: 10px !important; + height: 10px !important; + margin-left: -5px !important; + margin-top: -5px !important; + box-shadow: 0 0 1px #000; + } + .leaflet-drag-target { + cursor: move !important; + } + .leaflet-control-center { + background: white; + border: 1px solid #ccc; + border-radius: 4px; + box-shadow: 0 1px 3px rgba(0,0,0,0.3); + } + .leaflet-control-center a { + display: block; + text-align: center; + color: #0077ff; + font-size: 20px; + line-height: 26px; + width: 28px; + height: 28px; + text-decoration: none; + } + .leaflet-control-center a:hover { + background: #0077ff; + color: white; + } @@ -70,6 +103,13 @@ + + + + + + + @@ -139,7 +179,7 @@ }; const initializationOutputTree= { - label: 'DEM Simulations', + label: 'Weather Model Output', children: [] }; @@ -155,23 +195,18 @@ const layerControl = L.control.layers.tree( baseTree, - [ - overlayTree, - ], + [], { collapsed: true } ).addTo(map); - let drawDEMCheck = false; - let kmzBaseLayers = []; + let drawDEMCheck = false; let kmzLegendControls = []; - let centerControlAdded = false; // Script functions - function sendBoundingBox(layer) { const bounds = layer.getBounds(); const bboxData = { @@ -187,7 +222,7 @@ } function drawBoundingBox(north, south, east, west) { - mapRectangleLayer.clearLayers(); + clearRectangleLayer(); const bounds = [[south, west], [north, east]]; const rectangle = L.rectangle(bounds).addTo(mapRectangleLayer); rectangle.editing.enable(); @@ -200,7 +235,7 @@ } function drawDEM(DEMCorners) { - mapRectangleLayer.clearLayers(); + clearRectangleLayer(); const rectangleCorners = [ [DEMCorners[1], DEMCorners[0]], // NE @@ -221,15 +256,28 @@ }, 5000); showCenterControl(); + + if (layerControl && layerControl.setOverlayTree && windninjaOutputTree.children.length > 1) { + layerControl.setOverlayTree([ + windninjaOutputTree, + initializationOutputTree, + overlayTree + ]); + } + else { + layerControl.setOverlayTree([ + overlayTree + ]); + } } function startRectangleDrawing() { - mapRectangleLayer.clearLayers(); + clearRectangleLayer(); rectangleDrawer.enable(); } function stopRectangleDrawing() { - mapRectangleLayer.clearLayers(); + clearRectangleLayer(); if(!drawDEMCheck) { hideCenterControl(); @@ -239,7 +287,7 @@ } map.on('draw:created', ({ layer }) => { - mapRectangleLayer.clearLayers(); + clearRectangleLayer(); mapRectangleLayer.addLayer(layer); layer.editing.enable(); sendBoundingBox(layer); @@ -299,7 +347,6 @@ const zip = await JSZip.loadAsync(bytes.buffer); - // 2. Identify Files const kmlEntries = Object.values(zip.files).filter(entry => entry.name.toLowerCase().endsWith('.kml') ); @@ -312,18 +359,15 @@ return; } - // Process kmz file const entry = kmlEntries[0]; const kmlText = await entry.async('string'); const parser = new DOMParser(); const kmlDoc = parser.parseFromString(kmlText, 'text/xml'); - // Create leaflet layer const kmlLayer = new L.KML(kmlDoc); const kmlLegendLayer = L.layerGroup([kmlLayer]); const layerName = entry.name; - // 4. Legend Logic const legendControl = L.control({ position: 'bottomright' }); kmzLegendControls.push(legendControl); @@ -369,18 +413,15 @@ kmlLegendLayer.addTo(map); } - // 5. Update the Tree Control windninjaOutputTree.children.push({ label: layerName, layer: kmlLegendLayer }); - // Save reference for cleanup - kmzBaseLayers.push(kmlLegendLayer); - if (layerControl && layerControl.setOverlayTree) { layerControl.setOverlayTree([ windninjaOutputTree, + initializationOutputTree, overlayTree ]); } @@ -390,14 +431,12 @@ clearInitializationOutputTree(); - // 1. Decode the Base64 data passed in via 'data' const binary = atob(data); const bytes = new Uint8Array(binary.length); for (let i = 0; i < binary.length; i++) { bytes[i] = binary.charCodeAt(i); } - // 2. Load the ZIP and extract entries const zip = await JSZip.loadAsync(bytes.buffer); const kmlEntries = Object.values(zip.files).filter(entry => entry.name.toLowerCase().endsWith('.kml') @@ -408,35 +447,25 @@ return; } - // 3. Process the first KML entry const entry = kmlEntries[0]; const kmlText = await entry.async('string'); const parser = new DOMParser(); const kmlDoc = parser.parseFromString(kmlText, 'text/xml'); - // 4. Create Leaflet Layer const kmlLayer = new L.KML(kmlDoc); const kmlLegendLayer = L.layerGroup([kmlLayer]); const layerName = entry.name; - // 5. Logic for "Only First Selected" - // Note: Checking initializationOutputTree.children.length specifically for this branch const isFirstLayer = initializationOutputTree.children.length === 0; - if (isFirstLayer) { kmlLegendLayer.addTo(map); } - // 6. Push to the DEM Tree branch initializationOutputTree.children.push({ label: layerName, layer: kmlLegendLayer }); - // Save reference for cleanup - kmzBaseLayers.push(kmlLegendLayer); - - // 7. Refresh the UI if (layerControl && layerControl.setOverlayTree) { layerControl.setOverlayTree([ windninjaOutputTree, @@ -456,7 +485,7 @@ windninjaOutputTree.children = []; if (layerControl) { - layerControl.setOverlayTree([overlayTree, windninjaOutputTree, initializationOutputTree]); + layerControl.setOverlayTree([windninjaOutputTree, initializationOutputTree, overlayTree]); } } @@ -470,12 +499,20 @@ initializationOutputTree.children = []; if (layerControl) { - layerControl.setOverlayTree([overlayTree, windninjaOutputTree, initializationOutputTree]); + layerControl.setOverlayTree([windninjaOutputTree, initializationOutputTree, overlayTree]); } } - // Script Main + function clearRectangleLayer() { + mapRectangleLayer.eachLayer(layer => { + if (layer.editing) { + layer.editing.disable(); + } + }); + mapRectangleLayer.clearLayers(); + } + // Script Main if (window.qt) { new QWebChannel(qt.webChannelTransport, channel => { window.bridge = channel.objects.bridge; @@ -487,6 +524,8 @@ layerControl.addTo(map); L.control.scale().addTo(map); + + From 9dd3408cdcf9057bd911750a583aa86163dfd920 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 4 Feb 2026 15:32:58 -0700 Subject: [PATCH 418/435] swap from using domainAvgTable QWidgets which required casts, to a QVector<> of the specific QWidget types. For issue #687 --- src/gui/domainAverageInput.cpp | 121 +++++++++++++++------------------ src/gui/domainAverageInput.h | 7 ++ src/gui/mainWindow.cpp | 36 ++-------- 3 files changed, 66 insertions(+), 98 deletions(-) diff --git a/src/gui/domainAverageInput.cpp b/src/gui/domainAverageInput.cpp index aa5672f6a..3014645c3 100644 --- a/src/gui/domainAverageInput.cpp +++ b/src/gui/domainAverageInput.cpp @@ -54,19 +54,7 @@ void DomainAverageInput::domainAverageTableCheckRows() int numRuns = 0; for(int rowIdx = 0; rowIdx < ui->domainAverageTable->rowCount(); rowIdx++) { - QDoubleSpinBox* speedSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 0)); - QDoubleSpinBox* directionSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 1)); - QTimeEdit* timeEdit = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 2)); - QDateEdit* dateEdit = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 3)); - QDoubleSpinBox* cloudCoverSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 4)); - QDoubleSpinBox* airTempSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 5)); - - if(!speedSpin || !directionSpin || !timeEdit || !dateEdit || !cloudCoverSpin || !airTempSpin) - { - continue; - } - - if(speedSpin->value() != 0.0 || directionSpin->value() != 0.0) + if(speedSpins[rowIdx]->value() != 0.0 || dirSpins[rowIdx]->value() != 0.0) { //numRuns = numRuns + 1; // numActiveRows numRuns = rowIdx + 1; // lastActiveRowPlusOne @@ -97,13 +85,7 @@ void DomainAverageInput::domainAverageTableCheckRows() // override if any 0.0 wind speed runs are detected, warn and run if diurnal, stop if not diurnal for(int runIdx = 0; runIdx < numRuns; runIdx++) { - QDoubleSpinBox* speedSpin = qobject_cast(ui->domainAverageTable->cellWidget(runIdx, 0)); - if(!speedSpin) - { - continue; - } - - if(speedSpin->value() == 0.0) + if(speedSpins[runIdx]->value() == 0.0) { if(ui->diurnalCheckBox->isChecked() == false) { @@ -133,6 +115,13 @@ void DomainAverageInput::clearTableButtonClicked() { AppState::instance().isDomainAverageWindInputTableValid = false; + speedSpins.clear(); + dirSpins.clear(); + timeEdits.clear(); + dateEdits.clear(); + cloudSpins.clear(); + airTempSpins.clear(); + ui->domainAverageTable->clearContents(); setupDomainAverageTableWidgets(); @@ -188,57 +177,53 @@ void DomainAverageInput::setupDomainAverageTableWidgets() QTableWidget* table = ui->domainAverageTable; int rows = table->rowCount(); - for (int row = 0; row < rows; ++row) - { - QDoubleSpinBox* speedSpin = new QDoubleSpinBox(table); - speedSpin->setRange(0.0, 500.0); - speedSpin->setDecimals(2); - table->setCellWidget(row, 0, speedSpin); + speedSpins.resize(rows); + dirSpins.resize(rows); + timeEdits.resize(rows); + dateEdits.resize(rows); + cloudSpins.resize(rows); + airTempSpins.resize(rows); - QDoubleSpinBox* dirSpin = new QDoubleSpinBox(table); - dirSpin->setRange(0.0, 359.9); - dirSpin->setDecimals(0); - table->setCellWidget(row, 1, dirSpin); - - QTimeEdit* timeEdit = new QTimeEdit(QTime::currentTime(), table); - timeEdit->setDisplayFormat("HH:mm"); - table->setCellWidget(row, 2, timeEdit); - - QDateEdit* dateEdit = new QDateEdit(QDate::currentDate(), table); - dateEdit->setCalendarPopup(true); - dateEdit->setDisplayFormat("MM/dd/yyyy"); - table->setCellWidget(row, 3, dateEdit); - - QDoubleSpinBox* cloudSpin = new QDoubleSpinBox(table); - cloudSpin->setRange(0.0, 100.0); - cloudSpin->setDecimals(0); - table->setCellWidget(row, 4, cloudSpin); - - QDoubleSpinBox* airTempSpin = new QDoubleSpinBox(table); - airTempSpin->setRange(-40.0, 200.0); - airTempSpin->setDecimals(0); - airTempSpin->setValue(72.0); - table->setCellWidget(row, 5, airTempSpin); - - connect(speedSpin, &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); - connect(dirSpin, &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); - connect(timeEdit, &QTimeEdit::timeChanged, this, &DomainAverageInput::domainAverageTableCheckRows); - connect(dateEdit, &QDateEdit::dateChanged, this, &DomainAverageInput::domainAverageTableCheckRows); - connect(cloudSpin, &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); - connect(airTempSpin, &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + for(int row = 0; row < rows; row++) + { + speedSpins[row] = new QDoubleSpinBox(table); + speedSpins[row]->setRange(0.0, 500.0); + speedSpins[row]->setDecimals(2); + table->setCellWidget(row, 0, speedSpins[row]); + + dirSpins[row] = new QDoubleSpinBox(table); + dirSpins[row]->setRange(0.0, 359.9); + dirSpins[row]->setDecimals(0); + table->setCellWidget(row, 1, dirSpins[row]); + + timeEdits[row] = new QTimeEdit(QTime::currentTime(), table); + timeEdits[row]->setDisplayFormat("HH:mm"); + table->setCellWidget(row, 2, timeEdits[row]); + + dateEdits[row] = new QDateEdit(QDate::currentDate(), table); + dateEdits[row]->setCalendarPopup(true); + dateEdits[row]->setDisplayFormat("MM/dd/yyyy"); + table->setCellWidget(row, 3, dateEdits[row]); + + cloudSpins[row] = new QDoubleSpinBox(table); + cloudSpins[row]->setRange(0.0, 100.0); + cloudSpins[row]->setDecimals(0); + table->setCellWidget(row, 4, cloudSpins[row]); + + airTempSpins[row] = new QDoubleSpinBox(table); + airTempSpins[row]->setRange(-40.0, 200.0); + airTempSpins[row]->setDecimals(0); + airTempSpins[row]->setValue(72.0); + table->setCellWidget(row, 5, airTempSpins[row]); + + connect(speedSpins[row], &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + connect(dirSpins[row], &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + connect(timeEdits[row], &QTimeEdit::timeChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + connect(dateEdits[row], &QDateEdit::dateChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + connect(cloudSpins[row], &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); + connect(airTempSpins[row], &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); } - //connect(speedSpin, QOverload::of(&QDoubleSpinBox::valueChanged), this, &DomainAverageInput::domainAverageTableCheckRows); - //connect(dirSpin, QOverload::of(&QDoubleSpinBox::valueChanged), this, &DomainAverageInput::domainAverageTableCheckRows); - //connect(timeEdit, &QTimeEdit::timeChanged, this, &DomainAverageInput::domainAverageTableCheckRows); - //connect(dateEdit, &QDateEdit::dateChanged, this, &DomainAverageInput::domainAverageTableCheckRows); - - //for(int rowIdx = 0; rowIdx < rows; rowIdx++) - //{ - // connect(tree->wind->windTable->speed[i], SIGNAL(valueChanged(double)), this, &DomainAverageInput::domainAverageTableCheckRows); - // connect(tree->wind->windTable->dir[i], SIGNAL(valueChanged(int)), this, &DomainAverageInput::domainAverageTableCheckRows); - //} - if(ui->diurnalCheckBox->isChecked() || ui->stabilityCheckBox->isChecked()) { table->showColumn(2); diff --git a/src/gui/domainAverageInput.h b/src/gui/domainAverageInput.h index db42b5562..6075dc7e8 100644 --- a/src/gui/domainAverageInput.h +++ b/src/gui/domainAverageInput.h @@ -44,6 +44,13 @@ class DomainAverageInput: public QObject public: DomainAverageInput(Ui::MainWindow* ui, QObject* parent = nullptr); + QVector speedSpins; + QVector dirSpins; + QVector timeEdits; + QVector dateEdits; + QVector cloudSpins; + QVector airTempSpins; + private slots: void setupDomainAverageTableWidgets(); void domainAverageTableCheckRows(); diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index f9deb1146..0a72d1dfe 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -469,19 +469,7 @@ void MainWindow::solveButtonClicked() int numRuns = 0; for(int rowIdx = 0; rowIdx < ui->domainAverageTable->rowCount(); rowIdx++) { - QDoubleSpinBox* speedSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 0)); - QDoubleSpinBox* directionSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 1)); - QTimeEdit* timeEdit = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 2)); - QDateEdit* dateEdit = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 3)); - QDoubleSpinBox* cloudCoverSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 4)); - QDoubleSpinBox* airTempSpin = qobject_cast(ui->domainAverageTable->cellWidget(rowIdx, 5)); - - if(!speedSpin || !directionSpin || !timeEdit || !dateEdit || !cloudCoverSpin || !airTempSpin) - { - continue; - } - - if(speedSpin->value() != 0.0 || directionSpin->value() != 0.0) + if(domainAverageInput->speedSpins[rowIdx]->value() != 0.0 || domainAverageInput->dirSpins[rowIdx]->value() != 0.0) { //numRuns = numRuns + 1; // numActiveRows numRuns = rowIdx + 1; // lastActiveRowPlusOne @@ -495,26 +483,14 @@ void MainWindow::solveButtonClicked() for(int runIdx = 0; runIdx < numRuns; runIdx++) { - QDoubleSpinBox* speedSpin = qobject_cast(ui->domainAverageTable->cellWidget(runIdx, 0)); - QDoubleSpinBox* directionSpin = qobject_cast(ui->domainAverageTable->cellWidget(runIdx, 1)); - QTimeEdit* timeEdit = qobject_cast(ui->domainAverageTable->cellWidget(runIdx, 2)); - QDateEdit* dateEdit = qobject_cast(ui->domainAverageTable->cellWidget(runIdx, 3)); - QDoubleSpinBox* cloudCoverSpin = qobject_cast(ui->domainAverageTable->cellWidget(runIdx, 4)); - QDoubleSpinBox* airTempSpin = qobject_cast(ui->domainAverageTable->cellWidget(runIdx, 5)); - - if(!speedSpin || !directionSpin || !timeEdit || !dateEdit || !cloudCoverSpin || !airTempSpin) - { - continue; - } - - speeds << speedSpin->value(); - directions << directionSpin->value(); + speeds << domainAverageInput->speedSpins[runIdx]->value(); + directions << domainAverageInput->dirSpins[runIdx]->value(); // always grab the values from the diurnal/stability inputs, // whether they are the default values, or whatever the user has changed them to be // constructs using machine local time, may need to convert from machine local time to UTC time - QDateTime currentDateTime = QDateTime(dateEdit->date(), timeEdit->time()); + QDateTime currentDateTime = QDateTime(domainAverageInput->dateEdits[runIdx]->date(), domainAverageInput->timeEdits[runIdx]->time()); years << currentDateTime.date().year(); months << currentDateTime.date().month(); @@ -522,8 +498,8 @@ void MainWindow::solveButtonClicked() hours << currentDateTime.time().hour(); minutes << currentDateTime.time().minute(); - cloudCovers << cloudCoverSpin->value(); - airTemps << airTempSpin->value(); + cloudCovers << domainAverageInput->cloudSpins[runIdx]->value(); + airTemps << domainAverageInput->airTempSpins[runIdx]->value(); } numNinjas = speeds.size(); // SHOULD be the same as numRuns From 103d862288599c9f47f5c269544f2cdcaefecdbe Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 4 Feb 2026 16:05:36 -0700 Subject: [PATCH 419/435] Added radio buttons to output layer control --- data/map.html | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/data/map.html b/data/map.html index 8f1623744..ce8520518 100755 --- a/data/map.html +++ b/data/map.html @@ -253,7 +253,7 @@ setTimeout(() => { map.fitBounds(rectangle.getBounds()); - }, 5000); + }, 10); showCenterControl(); @@ -415,7 +415,8 @@ windninjaOutputTree.children.push({ label: layerName, - layer: kmlLegendLayer + layer: kmlLegendLayer, + radioGroup: 'windninjaOutputs' }); if (layerControl && layerControl.setOverlayTree) { @@ -463,7 +464,8 @@ initializationOutputTree.children.push({ label: layerName, - layer: kmlLegendLayer + layer: kmlLegendLayer, + radioGroup: 'initializationOutput' }); if (layerControl && layerControl.setOverlayTree) { From 39260f48f3b6b92324e3640fc24647864878d54f Mon Sep 17 00:00:00 2001 From: masonwillman Date: Wed, 4 Feb 2026 17:06:11 -0700 Subject: [PATCH 420/435] Added a no output radio button to clear selection --- data/map.html | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/data/map.html b/data/map.html index ce8520518..939e860c3 100755 --- a/data/map.html +++ b/data/map.html @@ -175,12 +175,24 @@ const windninjaOutputTree = { label: 'WindNinja Output', - children: [] + children: [ + { + label: 'None', + layer: L.layerGroup([]), // Dummy empty layer + radioGroup: 'windninjaOutputs' + } + ] }; - const initializationOutputTree= { + const initializationOutputTree = { label: 'Weather Model Output', - children: [] + children: [ + { + label: 'None', + layer: L.layerGroup([]), // Dummy empty layer + radioGroup: 'initializationOutput' + } + ] }; const overlayTree = { @@ -407,7 +419,7 @@ kmlLegendLayer.on('add', () => legendControl.addTo(map)); kmlLegendLayer.on('remove', () => legendControl.remove()); - const isFirstLayer = windninjaOutputTree.children.length === 0; + const isFirstLayer = windninjaOutputTree.children.length === 1; if (isFirstLayer) { kmlLegendLayer.addTo(map); @@ -457,7 +469,7 @@ const kmlLegendLayer = L.layerGroup([kmlLayer]); const layerName = entry.name; - const isFirstLayer = initializationOutputTree.children.length === 0; + const isFirstLayer = initializationOutputTree.children.length === 1; if (isFirstLayer) { kmlLegendLayer.addTo(map); } @@ -479,12 +491,18 @@ function clearWindNinjaOutputTree() { windninjaOutputTree.children.forEach(item => { - if (item.layer) { + // Only remove layers that aren't the "None" placeholder + if (item.layer && item.label !== 'None') { map.removeLayer(item.layer); } }); - windninjaOutputTree.children = []; + // Reset to just the None option + windninjaOutputTree.children = [{ + label: 'No Output', + layer: L.layerGroup([]), + radioGroup: 'windninjaOutputs' + }]; if (layerControl) { layerControl.setOverlayTree([windninjaOutputTree, initializationOutputTree, overlayTree]); @@ -493,12 +511,16 @@ function clearInitializationOutputTree() { initializationOutputTree.children.forEach(item => { - if (item.layer) { + if (item.layer && item.label !== 'None') { map.removeLayer(item.layer); } }); - initializationOutputTree.children = []; + initializationOutputTree.children = [{ + label: 'No Output', + layer: L.layerGroup([]), + radioGroup: 'initializationOutput' + }]; if (layerControl) { layerControl.setOverlayTree([windninjaOutputTree, initializationOutputTree, overlayTree]); From cd7ae5ca19e7793800a35a3155545fbf00948a8e Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 4 Feb 2026 18:52:27 -0700 Subject: [PATCH 421/435] move the countRuns() methods into a single shared domainAverageInput function, also an improvement to the organization of the domainAvgTable checkRows() app state checking methods. Should be a lot clearer now. For issue #687 --- src/gui/domainAverageInput.cpp | 95 ++++++++++++++++++++-------------- src/gui/domainAverageInput.h | 2 + src/gui/mainWindow.cpp | 15 ++---- 3 files changed, 61 insertions(+), 51 deletions(-) diff --git a/src/gui/domainAverageInput.cpp b/src/gui/domainAverageInput.cpp index 3014645c3..6b56d064b 100644 --- a/src/gui/domainAverageInput.cpp +++ b/src/gui/domainAverageInput.cpp @@ -47,61 +47,76 @@ DomainAverageInput::DomainAverageInput(Ui::MainWindow* ui, QObject* parent) connect(this, &DomainAverageInput::updateState, &AppState::instance(), &AppState::updateDomainAverageInputState); } -void DomainAverageInput::domainAverageTableCheckRows() +int DomainAverageInput::countNumRuns() { - //bool valid = false; - // count numRuns - int numRuns = 0; + int numActiveRows = 0; for(int rowIdx = 0; rowIdx < ui->domainAverageTable->rowCount(); rowIdx++) { if(speedSpins[rowIdx]->value() != 0.0 || dirSpins[rowIdx]->value() != 0.0) { - //numRuns = numRuns + 1; // numActiveRows - numRuns = rowIdx + 1; // lastActiveRowPlusOne + //numActiveRows = numActiveRows + 1; // this method skips adding up the in between 0.0, 0.0 spd, dir rows + numActiveRows = rowIdx + 1; // last active row, as a 1 to N count, rather than as a 0 to N-1 rowIdx, this method properly grabs the in between 0.0, 0.0 spd, dir rows } } - bool valid = true; - if(numRuns == 0 && ui->diurnalCheckBox->isChecked() == false) + return numActiveRows; +} + +void DomainAverageInput::domainAverageTableCheckRows() +{ + int numRuns = countNumRuns(); + + int numZeroRuns = 0; + for(int runIdx = 0; runIdx < numRuns; runIdx++) { - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, crossIcon); - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "No runs have been added, diurnal is not active"); - qDebug() << "No runs have been added, diurnal is not active"; - valid = false; + if(speedSpins[runIdx]->value() == 0.0) + { + numZeroRuns = numZeroRuns + 1; + } } - else if(numRuns == 0 && ui->diurnalCheckBox->isChecked() == true) + + bool valid = true; + if(numRuns == 0) { - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, warnIcon); - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "No runs have been added, one run will be done at speed = 0, dir = 0 while using diurnal"); - qDebug() << "No runs have been added, one run will be done at speed = 0, dir = 0 while using diurnal"; - valid = true; + if(ui->diurnalCheckBox->isChecked() == false) + { + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, crossIcon); + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "No runs have been added, diurnal is not active"); + qDebug() << "No runs have been added, diurnal is not active"; + valid = false; + } + else // if(ui->diurnalCheckBox->isChecked() == true) + { + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, warnIcon); + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "No runs have been added, one run will be done at speed = 0, dir = 0 while using diurnal"); + qDebug() << "No runs have been added, one run will be done at speed = 0, dir = 0 while using diurnal"; + valid = true; + } } - else + else // if(numRuns != 0) { - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, QString::number(numRuns)+" runs"); - qDebug() << QString::number(numRuns)+" runs"; - valid = true; - // override if any 0.0 wind speed runs are detected, warn and run if diurnal, stop if not diurnal - for(int runIdx = 0; runIdx < numRuns; runIdx++) + if(numZeroRuns == 0) + { + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, QString::number(numRuns)+" runs"); + qDebug() << QString::number(numRuns)+" runs"; + valid = true; + } + else // if(numZeroRuns != 0) { - if(speedSpins[runIdx]->value() == 0.0) + if(ui->diurnalCheckBox->isChecked() == true) + { + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, warnIcon); + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, QString::number(numRuns)+" runs have been added, detecting "+QString::number(numZeroRuns)+" zero wind speed runs, diurnal is active so will continue the runs"); + qDebug() << QString::number(numRuns)+" runs have been added, detecting "+QString::number(numZeroRuns)+" zero wind speed runs, diurnal is active so will continue the runs"; + valid = true; + } + else // if(ui->diurnalCheckBox->isChecked() == false) { - if(ui->diurnalCheckBox->isChecked() == false) - { - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, crossIcon); - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, QString::number(numRuns)+" runs have been added, but detecting at least one 0.0 wind speed run without diurnal being active"); - qDebug() << QString::number(numRuns)+" runs have been added, but detecting at least one 0.0 wind speed run without diurnal being active"; - valid = false; - } - else // if(ui->diurnalCheckBox->isChecked() == true) - { - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, warnIcon); - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, QString::number(numRuns)+" runs have been added, detecting at least one 0.0 wind speed run, diurnal is active so will continue the runs"); - qDebug() << QString::number(numRuns)+" runs have been added, detecting at least one 0.0 wind speed run, diurnal is active so will continue the runs"; - valid = true; - } - break; + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, crossIcon); + //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, QString::number(numRuns)+" runs have been added, but detecting "+QString::number(numZeroRuns)+" zero wind speed runs without diurnal being active"); + qDebug() << QString::number(numRuns)+" runs have been added, but detecting "+QString::number(numZeroRuns)+" zero wind speed runs without diurnal being active"; + valid = false; } } } diff --git a/src/gui/domainAverageInput.h b/src/gui/domainAverageInput.h index 6075dc7e8..4c1f92542 100644 --- a/src/gui/domainAverageInput.h +++ b/src/gui/domainAverageInput.h @@ -44,6 +44,8 @@ class DomainAverageInput: public QObject public: DomainAverageInput(Ui::MainWindow* ui, QObject* parent = nullptr); + int countNumRuns(); + QVector speedSpins; QVector dirSpins; QVector timeEdits; diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 0a72d1dfe..d0990df60 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -465,17 +465,10 @@ void MainWindow::solveButtonClicked() QString DEMTimeZone = ui->timeZoneComboBox->currentText(); - // count numRuns - int numRuns = 0; - for(int rowIdx = 0; rowIdx < ui->domainAverageTable->rowCount(); rowIdx++) - { - if(domainAverageInput->speedSpins[rowIdx]->value() != 0.0 || domainAverageInput->dirSpins[rowIdx]->value() != 0.0) - { - //numRuns = numRuns + 1; // numActiveRows - numRuns = rowIdx + 1; // lastActiveRowPlusOne - } - } - // the above count gets off by 1 when no runs are selected. If diurnal is checked, we actually DO want to run that first zero valued run. + int numRuns = domainAverageInput->countNumRuns(); + + // countNumRuns() returns a 0 when ALL rows are 0.0, 0.0 spd, dir rows, but + // if diurnal is checked, we actually DO want to run that first 0.0, 0.0 spd, dir row as a single run if(numRuns == 0 && ui->diurnalCheckBox->isChecked() == true) { numRuns = 1; From 0016dd1cfcb9fb5830f8bc08e2a20ef4cf81776b Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 4 Feb 2026 18:56:40 -0700 Subject: [PATCH 422/435] more cleanup to domainAvgTable methods. For issue #687 --- src/gui/domainAverageInput.cpp | 5 ++--- src/gui/mainWindow.cpp | 12 ++++-------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/gui/domainAverageInput.cpp b/src/gui/domainAverageInput.cpp index 6b56d064b..2595dc51e 100644 --- a/src/gui/domainAverageInput.cpp +++ b/src/gui/domainAverageInput.cpp @@ -128,7 +128,8 @@ qDebug() << "appState =" << valid; void DomainAverageInput::clearTableButtonClicked() { - AppState::instance().isDomainAverageWindInputTableValid = false; + // AppState::instance().isDomainAverageWindInputTableValid is set + // and updateState() is emitted here, by the call to the domainAverageTableCheckRows() function speedSpins.clear(); dirSpins.clear(); @@ -142,8 +143,6 @@ void DomainAverageInput::clearTableButtonClicked() setupDomainAverageTableWidgets(); domainAverageTableCheckRows(); - - emit updateState(); } void DomainAverageInput::windHeightComboBoxCurrentIndexChanged(int index) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index d0990df60..3111db5de 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -465,16 +465,15 @@ void MainWindow::solveButtonClicked() QString DEMTimeZone = ui->timeZoneComboBox->currentText(); - int numRuns = domainAverageInput->countNumRuns(); + numNinjas = domainAverageInput->countNumRuns(); - // countNumRuns() returns a 0 when ALL rows are 0.0, 0.0 spd, dir rows, but // if diurnal is checked, we actually DO want to run that first 0.0, 0.0 spd, dir row as a single run - if(numRuns == 0 && ui->diurnalCheckBox->isChecked() == true) + if(numNinjas == 0 && ui->diurnalCheckBox->isChecked() == true) { - numRuns = 1; + numNinjas = 1; } - for(int runIdx = 0; runIdx < numRuns; runIdx++) + for(int runIdx = 0; runIdx < numNinjas; runIdx++) { speeds << domainAverageInput->speedSpins[runIdx]->value(); directions << domainAverageInput->dirSpins[runIdx]->value(); @@ -495,9 +494,6 @@ void MainWindow::solveButtonClicked() airTemps << domainAverageInput->airTempSpins[runIdx]->value(); } - numNinjas = speeds.size(); // SHOULD be the same as numRuns - qDebug() << "numRuns = " << numRuns << ", numNinjas = " << numNinjas; - bool momentumFlag = ui->momentumSolverCheckBox->isChecked(); QString speedUnits = ui->tableSpeedUnits->currentText(); QString airTempUnits = ui->tableTempUnits->currentText().remove("°"); From fef5bcfc187fc3c3f2bc170cc16eca23c80bf708 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 4 Feb 2026 20:11:46 -0700 Subject: [PATCH 423/435] now that the domainAvgTable state checking logic and methods are solid, moved the state checking to appState, now the icons and tooltips are getting updated accordingly. For issue #687 --- src/gui/appState.cpp | 50 ++++++++++++++++++++++++++------- src/gui/appState.h | 3 +- src/gui/domainAverageInput.cpp | 51 ++-------------------------------- src/gui/mainWindow.cpp | 3 +- 4 files changed, 47 insertions(+), 60 deletions(-) diff --git a/src/gui/appState.cpp b/src/gui/appState.cpp index 319ffe192..f777cbf78 100644 --- a/src/gui/appState.cpp +++ b/src/gui/appState.cpp @@ -147,17 +147,47 @@ void AppState::updateStabilityInputState() void AppState::updateDomainAverageInputState() { - if (isDomainAverageInitializationToggled && isDomainAverageWindInputTableValid) + if(isDomainAverageInitializationToggled) { - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "Valid"); - isDomainAverageInitializationValid = true; - } - else if (isDomainAverageInitializationToggled && !isDomainAverageWindInputTableValid) - { - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, crossIcon); - ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "Bad wind inputs"); - isDomainAverageInitializationValid = false; + if(DomainAvgTableNumRuns == 0) + { + if(ui->diurnalCheckBox->isChecked() == false) + { + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "No runs have been added, diurnal is not active"); + isDomainAverageInitializationValid = false; + } + else // if(ui->diurnalCheckBox->isChecked() == true) + { + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, warnIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "No runs have been added, one run will be done at speed = 0, dir = 0 while using diurnal"); + isDomainAverageInitializationValid = true; + } + } + else // if(DomainAvgTableNumRuns != 0) + { + if(DomainAvgTableNumZeroRuns == 0) + { + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, QString::number(DomainAvgTableNumRuns)+" runs"); + isDomainAverageInitializationValid = true; + } + else // if(DomainAvgTableNumZeroRuns != 0) + { + if(ui->diurnalCheckBox->isChecked() == true) + { + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, warnIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, QString::number(DomainAvgTableNumRuns)+" runs have been added, detecting "+QString::number(DomainAvgTableNumZeroRuns)+" zero wind speed runs, diurnal is active so will continue the runs"); + isDomainAverageInitializationValid = true; + } + else // if(ui->diurnalCheckBox->isChecked() == false) + { + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, crossIcon); + ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, QString::number(DomainAvgTableNumRuns)+" runs have been added, but detecting "+QString::number(DomainAvgTableNumZeroRuns)+" zero wind speed runs without diurnal being active"); + isDomainAverageInitializationValid = false; + } + } + } } else { diff --git a/src/gui/appState.h b/src/gui/appState.h index 27faed473..a9adf4272 100644 --- a/src/gui/appState.h +++ b/src/gui/appState.h @@ -53,7 +53,8 @@ class AppState : public QObject bool isWindInputValid = false; bool isDomainAverageInitializationToggled = false; - bool isDomainAverageWindInputTableValid = false; + int DomainAvgTableNumRuns = 0; + int DomainAvgTableNumZeroRuns = 0; bool isDomainAverageInitializationValid = false; bool isPointInitializationToggled = false; bool isStationFileSelected = false; diff --git a/src/gui/domainAverageInput.cpp b/src/gui/domainAverageInput.cpp index 2595dc51e..fc7210f40 100644 --- a/src/gui/domainAverageInput.cpp +++ b/src/gui/domainAverageInput.cpp @@ -75,60 +75,15 @@ void DomainAverageInput::domainAverageTableCheckRows() } } - bool valid = true; - if(numRuns == 0) - { - if(ui->diurnalCheckBox->isChecked() == false) - { - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, crossIcon); - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "No runs have been added, diurnal is not active"); - qDebug() << "No runs have been added, diurnal is not active"; - valid = false; - } - else // if(ui->diurnalCheckBox->isChecked() == true) - { - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, warnIcon); - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, "No runs have been added, one run will be done at speed = 0, dir = 0 while using diurnal"); - qDebug() << "No runs have been added, one run will be done at speed = 0, dir = 0 while using diurnal"; - valid = true; - } - } - else // if(numRuns != 0) - { - if(numZeroRuns == 0) - { - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, tickIcon); - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, QString::number(numRuns)+" runs"); - qDebug() << QString::number(numRuns)+" runs"; - valid = true; - } - else // if(numZeroRuns != 0) - { - if(ui->diurnalCheckBox->isChecked() == true) - { - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, warnIcon); - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, QString::number(numRuns)+" runs have been added, detecting "+QString::number(numZeroRuns)+" zero wind speed runs, diurnal is active so will continue the runs"); - qDebug() << QString::number(numRuns)+" runs have been added, detecting "+QString::number(numZeroRuns)+" zero wind speed runs, diurnal is active so will continue the runs"; - valid = true; - } - else // if(ui->diurnalCheckBox->isChecked() == false) - { - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setIcon(0, crossIcon); - //ui->treeWidget->topLevelItem(1)->child(3)->child(0)->setToolTip(0, QString::number(numRuns)+" runs have been added, but detecting "+QString::number(numZeroRuns)+" zero wind speed runs without diurnal being active"); - qDebug() << QString::number(numRuns)+" runs have been added, but detecting "+QString::number(numZeroRuns)+" zero wind speed runs without diurnal being active"; - valid = false; - } - } - } + AppState::instance().DomainAvgTableNumRuns = numRuns; + AppState::instance().DomainAvgTableNumZeroRuns = numZeroRuns; - AppState::instance().isDomainAverageWindInputTableValid = valid; -qDebug() << "appState =" << valid; emit updateState(); } void DomainAverageInput::clearTableButtonClicked() { - // AppState::instance().isDomainAverageWindInputTableValid is set + // AppState::instance().DomainAvgTableNumRuns and AppState::instance().DomainAvgTableNumZeroRuns are set // and updateState() is emitted here, by the call to the domainAverageTableCheckRows() function speedSpins.clear(); diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 3111db5de..37042b95d 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -467,7 +467,8 @@ void MainWindow::solveButtonClicked() numNinjas = domainAverageInput->countNumRuns(); - // if diurnal is checked, we actually DO want to run that first 0.0, 0.0 spd, dir row as a single run + // countNumRuns() returns 0 when ALL rows are 0.0, 0.0 spd, dir rows, + // but if diurnal is checked, we actually DO want to run that first 0.0, 0.0 spd, dir row as a single run if(numNinjas == 0 && ui->diurnalCheckBox->isChecked() == true) { numNinjas = 1; From 48c1e6b9e0ad4757d8858e1a73896c92874b5c21 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 4 Feb 2026 20:37:50 -0700 Subject: [PATCH 424/435] change the domainAvgTable diurnal inputs columns, from showing/hiding, to greying/ungreying. For issue #687 --- src/gui/domainAverageInput.cpp | 24 +++++++++------- src/gui/mainWindow.cpp | 50 +++++++++++++++++++--------------- 2 files changed, 42 insertions(+), 32 deletions(-) diff --git a/src/gui/domainAverageInput.cpp b/src/gui/domainAverageInput.cpp index fc7210f40..202b7d487 100644 --- a/src/gui/domainAverageInput.cpp +++ b/src/gui/domainAverageInput.cpp @@ -195,19 +195,23 @@ void DomainAverageInput::setupDomainAverageTableWidgets() if(ui->diurnalCheckBox->isChecked() || ui->stabilityCheckBox->isChecked()) { - table->showColumn(2); - table->showColumn(3); - table->showColumn(4); - table->showColumn(5); - table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + for(int row = 0; row < rows; row++) + { + timeEdits[row]->setEnabled(true); + dateEdits[row]->setEnabled(true); + cloudSpins[row]->setEnabled(true); + airTempSpins[row]->setEnabled(true); + } } else { - table->hideColumn(2); - table->hideColumn(3); - table->hideColumn(4); - table->hideColumn(5); - table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + for(int row = 0; row < rows; row++) + { + timeEdits[row]->setEnabled(false); + dateEdits[row]->setEnabled(false); + cloudSpins[row]->setEnabled(false); + airTempSpins[row]->setEnabled(false); + } } } diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 37042b95d..cae0e4cdd 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -352,22 +352,25 @@ void MainWindow::diurnalCheckBoxClicked() AppState& state = AppState::instance(); state.isDiurnalInputToggled = ui->diurnalCheckBox->isChecked(); - QTableWidget* table = ui->domainAverageTable; if(ui->diurnalCheckBox->isChecked() || ui->stabilityCheckBox->isChecked()) { - table->showColumn(2); - table->showColumn(3); - table->showColumn(4); - table->showColumn(5); - table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + for(int row = 0; row < ui->domainAverageTable->rowCount(); row++) + { + domainAverageInput->timeEdits[row]->setEnabled(true); + domainAverageInput->dateEdits[row]->setEnabled(true); + domainAverageInput->cloudSpins[row]->setEnabled(true); + domainAverageInput->airTempSpins[row]->setEnabled(true); + } } else { - table->hideColumn(2); - table->hideColumn(3); - table->hideColumn(4); - table->hideColumn(5); - table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + for(int row = 0; row < ui->domainAverageTable->rowCount(); row++) + { + domainAverageInput->timeEdits[row]->setEnabled(false); + domainAverageInput->dateEdits[row]->setEnabled(false); + domainAverageInput->cloudSpins[row]->setEnabled(false); + domainAverageInput->airTempSpins[row]->setEnabled(false); + } } emit updateDirunalState(); @@ -378,22 +381,25 @@ void MainWindow::stabilityCheckBoxClicked() AppState& state = AppState::instance(); state.isStabilityInputToggled = ui->stabilityCheckBox->isChecked(); - QTableWidget* table = ui->domainAverageTable; if(ui->diurnalCheckBox->isChecked() || ui->stabilityCheckBox->isChecked()) { - table->showColumn(2); - table->showColumn(3); - table->showColumn(4); - table->showColumn(5); - table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + for(int row = 0; row < ui->domainAverageTable->rowCount(); row++) + { + domainAverageInput->timeEdits[row]->setEnabled(true); + domainAverageInput->dateEdits[row]->setEnabled(true); + domainAverageInput->cloudSpins[row]->setEnabled(true); + domainAverageInput->airTempSpins[row]->setEnabled(true); + } } else { - table->hideColumn(2); - table->hideColumn(3); - table->hideColumn(4); - table->hideColumn(5); - table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + for(int row = 0; row < ui->domainAverageTable->rowCount(); row++) + { + domainAverageInput->timeEdits[row]->setEnabled(false); + domainAverageInput->dateEdits[row]->setEnabled(false); + domainAverageInput->cloudSpins[row]->setEnabled(false); + domainAverageInput->airTempSpins[row]->setEnabled(false); + } } emit updateStabilityState(); From b4a7f87405af8cd7ca78c26e03eb4c105cadf7f1 Mon Sep 17 00:00:00 2001 From: latwood Date: Wed, 4 Feb 2026 20:42:38 -0700 Subject: [PATCH 425/435] improvement to domainAvgTable diurnal inputs column greying/ungreying. For issue #687 --- src/gui/domainAverageInput.cpp | 24 +++++------------ src/gui/mainWindow.cpp | 48 +++++++++------------------------- 2 files changed, 18 insertions(+), 54 deletions(-) diff --git a/src/gui/domainAverageInput.cpp b/src/gui/domainAverageInput.cpp index 202b7d487..4c9b189fe 100644 --- a/src/gui/domainAverageInput.cpp +++ b/src/gui/domainAverageInput.cpp @@ -193,25 +193,13 @@ void DomainAverageInput::setupDomainAverageTableWidgets() connect(airTempSpins[row], &QDoubleSpinBox::valueChanged, this, &DomainAverageInput::domainAverageTableCheckRows); } - if(ui->diurnalCheckBox->isChecked() || ui->stabilityCheckBox->isChecked()) - { - for(int row = 0; row < rows; row++) - { - timeEdits[row]->setEnabled(true); - dateEdits[row]->setEnabled(true); - cloudSpins[row]->setEnabled(true); - airTempSpins[row]->setEnabled(true); - } - } - else + bool enabled = ui->diurnalCheckBox->isChecked() || ui->stabilityCheckBox->isChecked(); + for(int row = 0; row < rows; row++) { - for(int row = 0; row < rows; row++) - { - timeEdits[row]->setEnabled(false); - dateEdits[row]->setEnabled(false); - cloudSpins[row]->setEnabled(false); - airTempSpins[row]->setEnabled(false); - } + timeEdits[row]->setEnabled(enabled); + dateEdits[row]->setEnabled(enabled); + cloudSpins[row]->setEnabled(enabled); + airTempSpins[row]->setEnabled(enabled); } } diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index cae0e4cdd..b4c6e1f0a 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -352,25 +352,13 @@ void MainWindow::diurnalCheckBoxClicked() AppState& state = AppState::instance(); state.isDiurnalInputToggled = ui->diurnalCheckBox->isChecked(); - if(ui->diurnalCheckBox->isChecked() || ui->stabilityCheckBox->isChecked()) + bool enabled = ui->diurnalCheckBox->isChecked() || ui->stabilityCheckBox->isChecked(); + for(int row = 0; row < ui->domainAverageTable->rowCount(); row++) { - for(int row = 0; row < ui->domainAverageTable->rowCount(); row++) - { - domainAverageInput->timeEdits[row]->setEnabled(true); - domainAverageInput->dateEdits[row]->setEnabled(true); - domainAverageInput->cloudSpins[row]->setEnabled(true); - domainAverageInput->airTempSpins[row]->setEnabled(true); - } - } - else - { - for(int row = 0; row < ui->domainAverageTable->rowCount(); row++) - { - domainAverageInput->timeEdits[row]->setEnabled(false); - domainAverageInput->dateEdits[row]->setEnabled(false); - domainAverageInput->cloudSpins[row]->setEnabled(false); - domainAverageInput->airTempSpins[row]->setEnabled(false); - } + domainAverageInput->timeEdits[row]->setEnabled(enabled); + domainAverageInput->dateEdits[row]->setEnabled(enabled); + domainAverageInput->cloudSpins[row]->setEnabled(enabled); + domainAverageInput->airTempSpins[row]->setEnabled(enabled); } emit updateDirunalState(); @@ -381,25 +369,13 @@ void MainWindow::stabilityCheckBoxClicked() AppState& state = AppState::instance(); state.isStabilityInputToggled = ui->stabilityCheckBox->isChecked(); - if(ui->diurnalCheckBox->isChecked() || ui->stabilityCheckBox->isChecked()) + bool enabled = ui->diurnalCheckBox->isChecked() || ui->stabilityCheckBox->isChecked(); + for(int row = 0; row < ui->domainAverageTable->rowCount(); row++) { - for(int row = 0; row < ui->domainAverageTable->rowCount(); row++) - { - domainAverageInput->timeEdits[row]->setEnabled(true); - domainAverageInput->dateEdits[row]->setEnabled(true); - domainAverageInput->cloudSpins[row]->setEnabled(true); - domainAverageInput->airTempSpins[row]->setEnabled(true); - } - } - else - { - for(int row = 0; row < ui->domainAverageTable->rowCount(); row++) - { - domainAverageInput->timeEdits[row]->setEnabled(false); - domainAverageInput->dateEdits[row]->setEnabled(false); - domainAverageInput->cloudSpins[row]->setEnabled(false); - domainAverageInput->airTempSpins[row]->setEnabled(false); - } + domainAverageInput->timeEdits[row]->setEnabled(enabled); + domainAverageInput->dateEdits[row]->setEnabled(enabled); + domainAverageInput->cloudSpins[row]->setEnabled(enabled); + domainAverageInput->airTempSpins[row]->setEnabled(enabled); } emit updateStabilityState(); From 2f650246abd3b203ac418518e4ba5f1302932660 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Thu, 5 Feb 2026 10:54:35 -0700 Subject: [PATCH 426/435] Uncommented if statement that is needed and fixed map options for kmz output --- data/map.html | 1 - src/gui/mainWindow.cpp | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/data/map.html b/data/map.html index 939e860c3..8f5883291 100755 --- a/data/map.html +++ b/data/map.html @@ -434,7 +434,6 @@ if (layerControl && layerControl.setOverlayTree) { layerControl.setOverlayTree([ windninjaOutputTree, - initializationOutputTree, overlayTree ]); } diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 15b1d69b8..52b520097 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -1574,7 +1574,7 @@ void MainWindow::plotKmzOutputs() // // if it is a weather model run, and weather model kmzs were created for the run, // // plot the weather model kmz of the run - // if(ui->weatherModelGroupBox->isChecked() && ui->googleEarthCheckBox->isChecked()) + if(ui->weatherModelGroupBox->isChecked() && ui->googleEarthCheckBox->isChecked()) { QString outFileStr = QString::fromStdString(weatherModelKmzFilenames[i]); qDebug() << "wx model kmz outFile =" << outFileStr; From a890aed27e3723fe827bee0c5bc38df3c0ce6f5c Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 5 Feb 2026 14:23:04 -0700 Subject: [PATCH 427/435] reverting back google earth scale type default, to "Uniform Ranged", from commit 7d8c075c928884bbec7cc090d764bd3a88af9b18, if there are differences between qt4 and qt6 GUI results, it is something else --- src/gui/mainWindow.ui | 4 ++-- src/gui/outputs.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index 2f53b04bd..520e779f6 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -3500,12 +3500,12 @@ li.checked::marker { content: "\2612"; }
- Equal Count + Uniform Range - Uniform Range + Equal Count
diff --git a/src/gui/outputs.cpp b/src/gui/outputs.cpp index a136cc3ed..5935fe2dc 100644 --- a/src/gui/outputs.cpp +++ b/src/gui/outputs.cpp @@ -29,8 +29,8 @@ Outputs::Outputs(Ui::MainWindow *ui, ui->alternativeColorSchemeComboBox->setItemData(5, "greens"); ui->alternativeColorSchemeComboBox->setItemData(6, "magic_beans"); ui->alternativeColorSchemeComboBox->setItemData(7, "pink_to_green"); - ui->legendComboBox->setItemData(0, "equal_color"); - ui->legendComboBox->setItemData(1, "equal_interval"); + ui->legendComboBox->setItemData(0, "equal_interval"); + ui->legendComboBox->setItemData(1, "equal_color"); connect(ui->googleEarthCheckBox, &QCheckBox::toggled, this, &Outputs::googleEarthCheckBoxToggled); connect(ui->fireBehaviorGroupBox, &QGroupBox::toggled, this, &Outputs::fireBehaviorGroupBoxToggled); From 0543367b2c503a13d9ff7718f061cd25dd1ee00b Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 5 Feb 2026 14:46:47 -0700 Subject: [PATCH 428/435] made GUI actually use the inputWindHeightUnits variable --- src/gui/mainWindow.cpp | 6 +++--- src/gui/outputs.cpp | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 52b520097..abcf71625 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -1139,10 +1139,10 @@ bool MainWindow::prepareArmy(NinjaArmyH *ninjaArmy, int numNinjas, const char* i return false; } - ninjaErr = NinjaSetInputWindHeight(ninjaArmy, i, ui->inputWindHeightSpinBox->value(), "m", papszOptions); - //ninjaErr = NinjaSetInputWindHeight(ninjaArmy, i+10, ui->inputWindHeightSpinBox->value(), "m", papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. + ninjaErr = NinjaSetInputWindHeight(ninjaArmy, i, ui->inputWindHeightSpinBox->value(), ui->inputWindHeightUnitsComboBox->itemData(ui->inputWindHeightUnitsComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); + //ninjaErr = NinjaSetInputWindHeight(ninjaArmy, i+10, ui->inputWindHeightSpinBox->value(), ui->inputWindHeightUnitsComboBox->itemData(ui->inputWindHeightUnitsComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); // test error handling // hrm, ninjaCom isn't triggering for this one, though the error returns, leading to it hanging without a proper message. //ninjaErr = NinjaSetInputWindHeight(ninjaArmy, i, ui->inputWindHeightSpinBox->value(), "fudge", papszOptions); // test error handling - //ninjaErr = NinjaSetInputWindHeight(ninjaArmy, i, -1, "m", papszOptions); // test error handling + //ninjaErr = NinjaSetInputWindHeight(ninjaArmy, i, -1, ui->inputWindHeightUnitsComboBox->itemData(ui->inputWindHeightUnitsComboBox->currentIndex()).toString().toUtf8().constData(), papszOptions); // test error handling if(ninjaErr != NINJA_SUCCESS) { qDebug() << "NinjaSetInputWindHeight: ninjaErr =" << ninjaErr; diff --git a/src/gui/outputs.cpp b/src/gui/outputs.cpp index 5935fe2dc..c35e58a47 100644 --- a/src/gui/outputs.cpp +++ b/src/gui/outputs.cpp @@ -9,6 +9,8 @@ Outputs::Outputs(Ui::MainWindow *ui, ui->outputDirectoryLineEdit->setText(downloadsPath); ui->outputDirectoryButton->setIcon(QIcon(":/folder.png")); + ui->inputWindHeightUnitsComboBox->setItemData(0, "ft"); + ui->inputWindHeightUnitsComboBox->setItemData(1, "m"); ui->outputWindHeightUnitsComboBox->setItemData(0, "ft"); ui->outputWindHeightUnitsComboBox->setItemData(1, "m"); ui->meshResolutionUnitsComboBox->setItemData(0, "m"); From dcb1530d7d92c93954dbb5f44e242936ebf00c55 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 5 Feb 2026 15:16:49 -0700 Subject: [PATCH 429/435] made GUI outputWindHeight combo boxes update correctly, small tweaks to improve inputWindHeight combo boxes while I was at it. --- src/gui/domainAverageInput.cpp | 1 - src/gui/mainWindow.ui | 5 ++++- src/gui/outputs.cpp | 25 +++++++++++++++++++++++++ src/gui/outputs.h | 1 + 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/gui/domainAverageInput.cpp b/src/gui/domainAverageInput.cpp index 4c9b189fe..a55ca24f2 100644 --- a/src/gui/domainAverageInput.cpp +++ b/src/gui/domainAverageInput.cpp @@ -119,7 +119,6 @@ void DomainAverageInput::windHeightComboBoxCurrentIndexChanged(int index) case 2: ui->inputWindHeightSpinBox->setValue(0.00); ui->inputWindHeightSpinBox->setEnabled(true); - ui->inputWindHeightUnitsComboBox->setCurrentIndex(0); ui->inputWindHeightUnitsComboBox->setEnabled(true); break; } diff --git a/src/gui/mainWindow.ui b/src/gui/mainWindow.ui index 520e779f6..ccfc557b7 100755 --- a/src/gui/mainWindow.ui +++ b/src/gui/mainWindow.ui @@ -1851,7 +1851,10 @@ li.checked::marker { content: "\2612"; } PointingHandCursor
- 0.010000000000000 + 0.000000000000000 + + + 10000.000000000000000 20.000000000000000 diff --git a/src/gui/outputs.cpp b/src/gui/outputs.cpp index c35e58a47..4e76caca3 100644 --- a/src/gui/outputs.cpp +++ b/src/gui/outputs.cpp @@ -34,6 +34,7 @@ Outputs::Outputs(Ui::MainWindow *ui, ui->legendComboBox->setItemData(0, "equal_interval"); ui->legendComboBox->setItemData(1, "equal_color"); + connect(ui->outputWindHeightComboBox, &QComboBox::currentIndexChanged, this, &Outputs::windHeightComboBoxCurrentIndexChanged); connect(ui->googleEarthCheckBox, &QCheckBox::toggled, this, &Outputs::googleEarthCheckBoxToggled); connect(ui->fireBehaviorGroupBox, &QGroupBox::toggled, this, &Outputs::fireBehaviorGroupBoxToggled); connect(ui->shapeFilesGroupBox, &QGroupBox::toggled, this, &Outputs::shapeFilesGroupBoxToggled); @@ -53,6 +54,30 @@ Outputs::Outputs(Ui::MainWindow *ui, } +void Outputs::windHeightComboBoxCurrentIndexChanged(int index) +{ + switch(index) + { + case 0: + ui->outputWindHeightSpinBox->setValue(20.00); + ui->outputWindHeightSpinBox->setEnabled(false); + ui->outputWindHeightUnitsComboBox->setCurrentIndex(0); + break; + + case 1: + ui->outputWindHeightSpinBox->setValue(10.00); + ui->outputWindHeightSpinBox->setEnabled(false); + ui->outputWindHeightUnitsComboBox->setCurrentIndex(1); + break; + + case 2: + ui->outputWindHeightSpinBox->setValue(0.00); + ui->outputWindHeightSpinBox->setEnabled(true); + ui->outputWindHeightUnitsComboBox->setEnabled(true); + break; + } +} + void Outputs::googleEarthCheckBoxToggled(bool checked) { AppState& state = AppState::instance(); diff --git a/src/gui/outputs.h b/src/gui/outputs.h index e87624b3a..9e46c95db 100644 --- a/src/gui/outputs.h +++ b/src/gui/outputs.h @@ -21,6 +21,7 @@ class Outputs : public QObject void updateVTKState(); private slots: + void windHeightComboBoxCurrentIndexChanged(int index); void googleEarthCheckBoxToggled(bool checked); void fireBehaviorGroupBoxToggled(bool checked); void shapeFilesGroupBoxToggled(bool checked); From 629b0da23ed94122d2fe3b5d784564e3805d737d Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 5 Feb 2026 15:41:56 -0700 Subject: [PATCH 430/435] trying to improve "cancelSolve()" warning color, looks like the old qt4 GUI "orange" color isn't quite dark enough though. For issue #604, related to issue #638. --- src/gui/mainWindow.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index abcf71625..11d351694 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -254,7 +254,7 @@ static void comMessageHandler(const char *pszMessage, void *pUser) if( clipStr == "Simulation was cancelled by the user." ) { emit self->updateProgressMessageSignal(QString::fromStdString("Simulation cancelled")); - emit self->writeToConsoleSignal(QString::fromStdString("Simulation cancelled by user"), Qt::yellow); + emit self->writeToConsoleSignal(QString::fromStdString("Simulation cancelled by user"), QColor("orange")); } else if( clipStr == "Cannot determine exception type." ) { @@ -279,7 +279,7 @@ static void comMessageHandler(const char *pszMessage, void *pUser) //emit self->updateProgressMessageSignal(QString::fromStdString(clipStr)); //emit self->writeToConsoleSignal(QString::fromStdString(clipStr)); emit self->updateProgressMessageSignal(QString::fromStdString("Solver ended in warning:\n"+clipStr)); - emit self->writeToConsoleSignal(QString::fromStdString("Solver warning: "+clipStr), Qt::yellow); + emit self->writeToConsoleSignal(QString::fromStdString("Solver warning: "+clipStr), QColor("orange")); } else { @@ -292,7 +292,7 @@ void MainWindow::cancelSolve() { progressDialog->setLabelText("Canceling..."); //qDebug() << "Canceling..."; - //writeToConsole( "Canceling...", Qt::yellow); + //writeToConsole( "Canceling...", QColor("orange")); char **papszOptions = nullptr; ninjaErr = NinjaCancel(ninjaArmy, papszOptions); From 544c53c95d198b232b82b19c58352835cc3fd654 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 5 Feb 2026 15:49:00 -0700 Subject: [PATCH 431/435] trying to improve "cancelSolve()" warning color, looks like a factor of 150% darker than "orange" is better, but still not quite a good color. For issue #604, related to issue #638 --- src/gui/mainWindow.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 11d351694..711031218 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -254,7 +254,7 @@ static void comMessageHandler(const char *pszMessage, void *pUser) if( clipStr == "Simulation was cancelled by the user." ) { emit self->updateProgressMessageSignal(QString::fromStdString("Simulation cancelled")); - emit self->writeToConsoleSignal(QString::fromStdString("Simulation cancelled by user"), QColor("orange")); + emit self->writeToConsoleSignal(QString::fromStdString("Simulation cancelled by user"), QColor("orange").darker(150)); } else if( clipStr == "Cannot determine exception type." ) { @@ -279,7 +279,7 @@ static void comMessageHandler(const char *pszMessage, void *pUser) //emit self->updateProgressMessageSignal(QString::fromStdString(clipStr)); //emit self->writeToConsoleSignal(QString::fromStdString(clipStr)); emit self->updateProgressMessageSignal(QString::fromStdString("Solver ended in warning:\n"+clipStr)); - emit self->writeToConsoleSignal(QString::fromStdString("Solver warning: "+clipStr), QColor("orange")); + emit self->writeToConsoleSignal(QString::fromStdString("Solver warning: "+clipStr), QColor("orange").darker(150)); } else { @@ -292,7 +292,7 @@ void MainWindow::cancelSolve() { progressDialog->setLabelText("Canceling..."); //qDebug() << "Canceling..."; - //writeToConsole( "Canceling...", QColor("orange")); + //writeToConsole( "Canceling...", QColor("orange").darker(150); char **papszOptions = nullptr; ninjaErr = NinjaCancel(ninjaArmy, papszOptions); From 8ec885e9fdf931028b2d33cb3fc6e6af00fbe6fa Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 5 Feb 2026 15:55:28 -0700 Subject: [PATCH 432/435] trying to improve "cancelSolve()" writeToConsole() warning color, looks like "dark-orange" is better, the old qt4 gui "orange" was "QColor(255, 165, 0)". Probably gonna leave it as is for now. For issue #604, related to issue #638. --- src/gui/mainWindow.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/mainWindow.cpp b/src/gui/mainWindow.cpp index 711031218..cb1c262dc 100644 --- a/src/gui/mainWindow.cpp +++ b/src/gui/mainWindow.cpp @@ -254,7 +254,7 @@ static void comMessageHandler(const char *pszMessage, void *pUser) if( clipStr == "Simulation was cancelled by the user." ) { emit self->updateProgressMessageSignal(QString::fromStdString("Simulation cancelled")); - emit self->writeToConsoleSignal(QString::fromStdString("Simulation cancelled by user"), QColor("orange").darker(150)); + emit self->writeToConsoleSignal(QString::fromStdString("Simulation cancelled by user"), QColor(255, 140, 0)); } else if( clipStr == "Cannot determine exception type." ) { @@ -279,7 +279,7 @@ static void comMessageHandler(const char *pszMessage, void *pUser) //emit self->updateProgressMessageSignal(QString::fromStdString(clipStr)); //emit self->writeToConsoleSignal(QString::fromStdString(clipStr)); emit self->updateProgressMessageSignal(QString::fromStdString("Solver ended in warning:\n"+clipStr)); - emit self->writeToConsoleSignal(QString::fromStdString("Solver warning: "+clipStr), QColor("orange").darker(150)); + emit self->writeToConsoleSignal(QString::fromStdString("Solver warning: "+clipStr), QColor(255, 140, 0)); } else { @@ -292,7 +292,7 @@ void MainWindow::cancelSolve() { progressDialog->setLabelText("Canceling..."); //qDebug() << "Canceling..."; - //writeToConsole( "Canceling...", QColor("orange").darker(150); + //writeToConsole( "Canceling...", QColor(255, 140, 0)); char **papszOptions = nullptr; ninjaErr = NinjaCancel(ninjaArmy, papszOptions); From d91eecdca44d3dfe1b991a59bbc5be1fdbceeba0 Mon Sep 17 00:00:00 2001 From: latwood Date: Thu, 5 Feb 2026 16:10:42 -0700 Subject: [PATCH 433/435] small improvements to setConfigurationOption() in the GUI, print info a bit better, and make it so you don't have to click into the first text box to edit it. --- src/gui/menuBar.cpp | 4 ++-- src/gui/setConfigurationDialogOption.cpp | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/menuBar.cpp b/src/gui/menuBar.cpp index 35be315f6..76247634a 100755 --- a/src/gui/menuBar.cpp +++ b/src/gui/menuBar.cpp @@ -160,8 +160,8 @@ void MenuBar::setConfigurationOptionActionTriggered() if (key.isEmpty()) return; - qDebug() << "Setting configuration option" << key << "to" << val; - emit writeToConsoleSignal("Setting configuration option " + key + " to " + val); + qDebug() << "Setting configuration option "+key+"="+val; + emit writeToConsoleSignal("Setting configuration option " + key + "=" + val); CPLSetConfigOption( key.toUtf8().constData(), diff --git a/src/gui/setConfigurationDialogOption.cpp b/src/gui/setConfigurationDialogOption.cpp index 5a487ef5b..02a7d41b8 100644 --- a/src/gui/setConfigurationDialogOption.cpp +++ b/src/gui/setConfigurationDialogOption.cpp @@ -5,6 +5,8 @@ setConfigurationOptionDialog::setConfigurationOptionDialog(QWidget *parent) : ui(new Ui::setConfigurationOptionDialog) { ui->setupUi(this); + + ui->keyLineEdit->setFocus(); } setConfigurationOptionDialog::~setConfigurationOptionDialog() From a7a1abb3c234b842e95b2bc91080b20a4d7fd1c8 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 6 Feb 2026 16:14:26 -0700 Subject: [PATCH 434/435] Moving file temporarily to help with merge conflicts with master, for #696 --- src/gui/{ => qt6}/CMakeLists.txt | 0 src/gui/{ => qt6}/appState.cpp | 0 src/gui/{ => qt6}/appState.h | 0 src/gui/{ => qt6}/domainAverageInput.cpp | 0 src/gui/{ => qt6}/domainAverageInput.h | 0 src/gui/{ => qt6}/main.cpp | 0 src/gui/{ => qt6}/mainWindow.cpp | 0 src/gui/{ => qt6}/mainWindow.h | 0 src/gui/{ => qt6}/mainWindow.ui | 0 src/gui/{ => qt6}/mapBridge.cpp | 0 src/gui/{ => qt6}/mapBridge.h | 0 src/gui/{ => qt6}/menuBar.cpp | 0 src/gui/{ => qt6}/menuBar.h | 0 src/gui/{ => qt6}/outputs.cpp | 0 src/gui/{ => qt6}/outputs.h | 0 src/gui/{ => qt6}/pointInitializationInput.cpp | 0 src/gui/{ => qt6}/pointInitializationInput.h | 0 src/gui/{ => qt6}/serverBridge.cpp | 0 src/gui/{ => qt6}/serverBridge.h | 0 src/gui/{ => qt6}/setConfigurationDialogOption.cpp | 0 src/gui/{ => qt6}/setConfigurationDialogOption.h | 0 src/gui/{ => qt6}/setConfigurationDialogOption.ui | 0 src/gui/{ => qt6}/splashScreen.cpp | 0 src/gui/{ => qt6}/splashScreen.h | 0 src/gui/{ => qt6}/surfaceInput.cpp | 0 src/gui/{ => qt6}/surfaceInput.h | 0 src/gui/{ => qt6}/weatherModelInput.cpp | 0 src/gui/{ => qt6}/weatherModelInput.h | 0 28 files changed, 0 insertions(+), 0 deletions(-) rename src/gui/{ => qt6}/CMakeLists.txt (100%) rename src/gui/{ => qt6}/appState.cpp (100%) rename src/gui/{ => qt6}/appState.h (100%) rename src/gui/{ => qt6}/domainAverageInput.cpp (100%) rename src/gui/{ => qt6}/domainAverageInput.h (100%) rename src/gui/{ => qt6}/main.cpp (100%) rename src/gui/{ => qt6}/mainWindow.cpp (100%) rename src/gui/{ => qt6}/mainWindow.h (100%) rename src/gui/{ => qt6}/mainWindow.ui (100%) rename src/gui/{ => qt6}/mapBridge.cpp (100%) rename src/gui/{ => qt6}/mapBridge.h (100%) rename src/gui/{ => qt6}/menuBar.cpp (100%) rename src/gui/{ => qt6}/menuBar.h (100%) rename src/gui/{ => qt6}/outputs.cpp (100%) rename src/gui/{ => qt6}/outputs.h (100%) rename src/gui/{ => qt6}/pointInitializationInput.cpp (100%) rename src/gui/{ => qt6}/pointInitializationInput.h (100%) rename src/gui/{ => qt6}/serverBridge.cpp (100%) rename src/gui/{ => qt6}/serverBridge.h (100%) rename src/gui/{ => qt6}/setConfigurationDialogOption.cpp (100%) rename src/gui/{ => qt6}/setConfigurationDialogOption.h (100%) rename src/gui/{ => qt6}/setConfigurationDialogOption.ui (100%) rename src/gui/{ => qt6}/splashScreen.cpp (100%) rename src/gui/{ => qt6}/splashScreen.h (100%) rename src/gui/{ => qt6}/surfaceInput.cpp (100%) rename src/gui/{ => qt6}/surfaceInput.h (100%) rename src/gui/{ => qt6}/weatherModelInput.cpp (100%) rename src/gui/{ => qt6}/weatherModelInput.h (100%) diff --git a/src/gui/CMakeLists.txt b/src/gui/qt6/CMakeLists.txt similarity index 100% rename from src/gui/CMakeLists.txt rename to src/gui/qt6/CMakeLists.txt diff --git a/src/gui/appState.cpp b/src/gui/qt6/appState.cpp similarity index 100% rename from src/gui/appState.cpp rename to src/gui/qt6/appState.cpp diff --git a/src/gui/appState.h b/src/gui/qt6/appState.h similarity index 100% rename from src/gui/appState.h rename to src/gui/qt6/appState.h diff --git a/src/gui/domainAverageInput.cpp b/src/gui/qt6/domainAverageInput.cpp similarity index 100% rename from src/gui/domainAverageInput.cpp rename to src/gui/qt6/domainAverageInput.cpp diff --git a/src/gui/domainAverageInput.h b/src/gui/qt6/domainAverageInput.h similarity index 100% rename from src/gui/domainAverageInput.h rename to src/gui/qt6/domainAverageInput.h diff --git a/src/gui/main.cpp b/src/gui/qt6/main.cpp similarity index 100% rename from src/gui/main.cpp rename to src/gui/qt6/main.cpp diff --git a/src/gui/mainWindow.cpp b/src/gui/qt6/mainWindow.cpp similarity index 100% rename from src/gui/mainWindow.cpp rename to src/gui/qt6/mainWindow.cpp diff --git a/src/gui/mainWindow.h b/src/gui/qt6/mainWindow.h similarity index 100% rename from src/gui/mainWindow.h rename to src/gui/qt6/mainWindow.h diff --git a/src/gui/mainWindow.ui b/src/gui/qt6/mainWindow.ui similarity index 100% rename from src/gui/mainWindow.ui rename to src/gui/qt6/mainWindow.ui diff --git a/src/gui/mapBridge.cpp b/src/gui/qt6/mapBridge.cpp similarity index 100% rename from src/gui/mapBridge.cpp rename to src/gui/qt6/mapBridge.cpp diff --git a/src/gui/mapBridge.h b/src/gui/qt6/mapBridge.h similarity index 100% rename from src/gui/mapBridge.h rename to src/gui/qt6/mapBridge.h diff --git a/src/gui/menuBar.cpp b/src/gui/qt6/menuBar.cpp similarity index 100% rename from src/gui/menuBar.cpp rename to src/gui/qt6/menuBar.cpp diff --git a/src/gui/menuBar.h b/src/gui/qt6/menuBar.h similarity index 100% rename from src/gui/menuBar.h rename to src/gui/qt6/menuBar.h diff --git a/src/gui/outputs.cpp b/src/gui/qt6/outputs.cpp similarity index 100% rename from src/gui/outputs.cpp rename to src/gui/qt6/outputs.cpp diff --git a/src/gui/outputs.h b/src/gui/qt6/outputs.h similarity index 100% rename from src/gui/outputs.h rename to src/gui/qt6/outputs.h diff --git a/src/gui/pointInitializationInput.cpp b/src/gui/qt6/pointInitializationInput.cpp similarity index 100% rename from src/gui/pointInitializationInput.cpp rename to src/gui/qt6/pointInitializationInput.cpp diff --git a/src/gui/pointInitializationInput.h b/src/gui/qt6/pointInitializationInput.h similarity index 100% rename from src/gui/pointInitializationInput.h rename to src/gui/qt6/pointInitializationInput.h diff --git a/src/gui/serverBridge.cpp b/src/gui/qt6/serverBridge.cpp similarity index 100% rename from src/gui/serverBridge.cpp rename to src/gui/qt6/serverBridge.cpp diff --git a/src/gui/serverBridge.h b/src/gui/qt6/serverBridge.h similarity index 100% rename from src/gui/serverBridge.h rename to src/gui/qt6/serverBridge.h diff --git a/src/gui/setConfigurationDialogOption.cpp b/src/gui/qt6/setConfigurationDialogOption.cpp similarity index 100% rename from src/gui/setConfigurationDialogOption.cpp rename to src/gui/qt6/setConfigurationDialogOption.cpp diff --git a/src/gui/setConfigurationDialogOption.h b/src/gui/qt6/setConfigurationDialogOption.h similarity index 100% rename from src/gui/setConfigurationDialogOption.h rename to src/gui/qt6/setConfigurationDialogOption.h diff --git a/src/gui/setConfigurationDialogOption.ui b/src/gui/qt6/setConfigurationDialogOption.ui similarity index 100% rename from src/gui/setConfigurationDialogOption.ui rename to src/gui/qt6/setConfigurationDialogOption.ui diff --git a/src/gui/splashScreen.cpp b/src/gui/qt6/splashScreen.cpp similarity index 100% rename from src/gui/splashScreen.cpp rename to src/gui/qt6/splashScreen.cpp diff --git a/src/gui/splashScreen.h b/src/gui/qt6/splashScreen.h similarity index 100% rename from src/gui/splashScreen.h rename to src/gui/qt6/splashScreen.h diff --git a/src/gui/surfaceInput.cpp b/src/gui/qt6/surfaceInput.cpp similarity index 100% rename from src/gui/surfaceInput.cpp rename to src/gui/qt6/surfaceInput.cpp diff --git a/src/gui/surfaceInput.h b/src/gui/qt6/surfaceInput.h similarity index 100% rename from src/gui/surfaceInput.h rename to src/gui/qt6/surfaceInput.h diff --git a/src/gui/weatherModelInput.cpp b/src/gui/qt6/weatherModelInput.cpp similarity index 100% rename from src/gui/weatherModelInput.cpp rename to src/gui/qt6/weatherModelInput.cpp diff --git a/src/gui/weatherModelInput.h b/src/gui/qt6/weatherModelInput.h similarity index 100% rename from src/gui/weatherModelInput.h rename to src/gui/qt6/weatherModelInput.h From 382f9e67155221154bb94c35ad6854137eaad5f0 Mon Sep 17 00:00:00 2001 From: masonwillman Date: Fri, 6 Feb 2026 17:11:43 -0700 Subject: [PATCH 435/435] Removed gitignore to deleted weather model files, which removed these tutorial imgs --- .gitignore | 6 ------ .../tutorial_4/imgs/UCAR_NAM_ALASKA_domain.gif | Bin 0 -> 32373 bytes .../tutorial_4/imgs/UCAR_RAP_domain.png | Bin 0 -> 178702 bytes 3 files changed, 6 deletions(-) create mode 100644 doc/tutorials/tutorial_4/imgs/UCAR_NAM_ALASKA_domain.gif create mode 100644 doc/tutorials/tutorial_4/imgs/UCAR_RAP_domain.png diff --git a/.gitignore b/.gitignore index c5f080564..fb04d8090 100644 --- a/.gitignore +++ b/.gitignore @@ -46,12 +46,6 @@ doxy.tag *.user *.user* -# Weather model files -*UCAR* -*NCAR* -*NCEP* -*NOMADS* - # OpenFOAM *.dep diff --git a/doc/tutorials/tutorial_4/imgs/UCAR_NAM_ALASKA_domain.gif b/doc/tutorials/tutorial_4/imgs/UCAR_NAM_ALASKA_domain.gif new file mode 100644 index 0000000000000000000000000000000000000000..35ffd48b01b1c29c7534e696163ea246f22b6371 GIT binary patch literal 32373 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 z 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 literal 0 HcmV?d00001

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 EUn{s@0ssI2 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/local_lim.h.2CFD657F256B117E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/local_lim.h.2CFD657F256B117E.idx deleted file mode 100644 index 459a6cc1b414688fe31f78d0e1f5f6ea67e77ff8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 zcmWIYbaPw5#K7R3;#rZKT9U}Zz`!63#Kk2=nM;5)7^G$9q+03g>z5W6>1XC8=aigQzUl~w@B+{}_}ES!76pr^GfxTfNJ$~@{<#D;(;1T(p6BBQIwjP z5?@@Bn4BG-o0+GZQkj>So0$wWrMNOT3FOYA)U@Iij0_AZeV!s_XZLV1axpn^IB7%t zz`($I+KSCIT~(OV7E*@?icepiL5-5^zI!m^9cm;CjP~XHM92MDrI= zksPNSl2?q_jo@A>O3g_GnOa}ESb29TvD|FNIO7)X6ON#Y#@{<#DQuQ(ziYs%IKzfT((~2X3=6`SuzsD(^ z#Kp+PsK}ux2r-v|;m}OAJB|{o1sQo5g?NR;V8WUgG#;1kXcY&l7UvL$3s?093#_`Z zS_&wv%AqO^Q?0aM!K8~H94IWsAq5xqcsgma*xkuHfWk@~N^oHT%jfpu zMJBg_!YUjp5->wHH5G4Ocm3L3ps*~5EZl*>5Y9;isVOc>F6IU?7;pTvT-wO)qszbm E0Di(?e*gdg diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale.h.F1B51844858762D2.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale.h.F1B51844858762D2.idx deleted file mode 100644 index 4511de7eaacfafb28aadcb46debea67bf74776b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4820 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 KQQ^2t$o~K%K7=6v diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.h.9512D5BF9F8BFC78.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.h.9512D5BF9F8BFC78.idx deleted file mode 100644 index c093551f7967b4e1b0691ba2db94f41ddc940d8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7392 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.tcc.A7CA62888BCB33BF.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.tcc.A7CA62888BCB33BF.idx deleted file mode 100644 index fe2308fb5e54b2673d993bb3a3018881cf98db12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8078 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/main.cpp.EEBB228B1106B2B1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/main.cpp.EEBB228B1106B2B1.idx deleted file mode 100644 index 294cadb51e1cdf306a96e921be6c0eef3c1492d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2154 zcmcIl&2Jk;6dwo2ahkL#4Ij&Afl#n9oxEjw+)`NFv+?iR~ zk+_!=Hw2szH!fU2y;YUq!m$z{KJNS(mEf(NZ3r|`BEf2RcIJKj<~Q@+o9VW;w)$Cw z>RxLSa!b<)p;h>d)grY3o%q2RUQ4ylZEaGmxRt9o5HgxzUq%RTc6#ncyS?4p=r!D} zop!y~+HU72`I_re3o!l2a@Wn}sFcc5%X4d!d_F((t8aH3?#tSkhA}Fwm)MPOZ|! zfR2;fmK}`QD2Pn_k+G(u5%)Uw2B#j^=KsKqi73sFfi`RaY{`0Q{T=t#NDJwcv5=k= z@&ihYX2g#KP_K}FBm$3Yax=7Q?sz7TtYCw1V?fx)mUPt!jMXDW|9a;n))Gy?TGyn;h1Wmz>(%l~1se!9K!1!eVBD za9FvDfS9o!5IgJ@3J7a%RHR{kPw3hylPwT^KH==|=@w9kD#!_&_R3WRYxinUMukH8 zU4$p-80<>1S}YNtF{r&qu{?uql6q%zX-48KgkX|g;lUwcPURI2&4@Dt`!PLAV4II& z_s=Rm&BmU%N&ii$72zClr-Aey%ly={gpjmFHX0!k8BO{^&eCHxObU0ZI~WjFD3Egb zh{1u3#H9lD36x^6#Nl73_KDgf_<>?HNPrN`jP^vpuMu)gv>unLhnYb-8;7UUNl0hk zy%T7i2`oN!)wno7aa`ag+z2x|fZKfAw+-SaMzJ&j0 zKP;{9ef8_5)N*NlZvH~z_U+HX{Xg&3D3moBb6^W0o| tej)qB;<+W~73Z?E=Dg;->g1ibowpq9yzUg7+*40Jy?W{8;)|&_{sLQH$)NxM diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.cpp.11CF4E2CF1316CEA.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.cpp.11CF4E2CF1316CEA.idx deleted file mode 100644 index 2ba8c9d82212347be7a9ce421038890076bd1aef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2664 zcmcIm&rf4T93Kix3$((z0#9*QU3L++4$}fHgrp`c6zql{0ww6h=k&edb>#ghGxO3C z;~uEvySEVSVX){r;NId}hAi z?_@R#i;M4fBQ$RoY7SGh10i$?Ua17X6$2r7FovI^!eS~{o5||gDQt7suVKse5nfm? z>T|2BYsI-@USHf=oi7&FR!3`NIbEj;U`oDXx;{EeUDs1ovC-k$*w|QO-2B=`USBTU zY-mecg{HE;vaB!UZ*DC$eA|VErF?NS^y~8*`MKiShQ6`2ig1CHJ%2mi2N~AD|<#V8(B_*HRCRt!|S9ukEUFlhUMo-}dR`RVNK!=ss z+@Okku1hN@EnJ_W+NmtRs^*i3fmEk z3yoDOfR=^5N&tZH&fA4~_?nzrt|t{YB!JnT$WgmW_hIlcmn?f#45h&EAt@{sHFhD2 z3E>GSEr+XII+aR+$)Seua0&cMP=g&h>mDX0wZOt$OOq-WD=<8Y4X^+cLaW!~~E4is(B>Rxr+ zs8kT~r648lHj1R7hV5JT9V)~~CP_MdEa1>af`)-E1!4hMIN(2L_o?1v__k+II|M>2 zz<9gP_=q?=i+~Z@;WnEk1GKqL1 zk?o80wWGt!#*YtXKKbVNyN?DUoLT5aaK#A^fUeFSW!O*vS zNA&c3_}8ybOn3E{pC0kMSN;slBe7J78~(R-ADaNdy@v)DHn=Xxr9emrpT;v03aBmf zoAJlJ>3`ncxsaVoPfnohV;7ogijz&za7=p^)ax^^$Dd2QG}JkGxvzKN#Yo46Xso@f nyGMIfdqo@8u4=DoW7-?q4GnA8w4^rr!o~he&tFNs+&1zr@ArB2 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.h.F0118C6BEFDCBB46.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.h.F0118C6BEFDCBB46.idx deleted file mode 100644 index c82ce32adb4f13e8a18f1d29d8843d7c383d48ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1186 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mathcalls-helper-functions.h.934C8C52064E404C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mathcalls-helper-functions.h.934C8C52064E404C.idx deleted file mode 100644 index 2987498bee596e955610261687a4cfb1c93a563f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/memory.768AFB22B9D6A62F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/memory.768AFB22B9D6A62F.idx deleted file mode 100644 index 4d4fdb221611fc9e190085bed79ad36cc3d17cbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2576 zcmb7FO>7%Q6n>i~ZJe5>ZR$3^?ZmOu{MAbgw33C2Mb$`=syzaDiua20QBLH3(p?iiHf`?Qdeek3pFxTYfOfJ%!=WWsm2UR zUCHLSeVG=7T3U8(3zraxci@E25I;jgC>lc4Bs^QCRoAPZgj24=h2aQJJX-T8r;f0l zG7%L@EW1>q9vXaT5R!~b%kY@AOyzY{7Md*=46?EOX5Q_7xr5 zaWU}7w20?81Jr7x{>Y(#X{xr_Y9hf31}nQo0}onjRB?1MZ@x-j{^gIZI2@aVWCI$BKtOC~#~yv3 z*4?#u|F5qr_pXn}p$`EysO<{`#CGl29RLQMYiB;X^h&lDCZ-|DhS^vkAcmiysl6Cs z>3a5q+08GHcfmMDV7u8sAS3{91n6fr3qP*06LH8O!0+%Afq+<-*87A6O#PiGcIH2O zy%&zk6lsp|)-ez(_ic94{_L!QR-0d3xwpNC)g@Bsl-434{KUaz}D*9_a97u-2bNH3eA!z zWq$4I?~BQ+^I0vPya*SG{5H!=5!cZZ5T$uLAp6twuV&`c5~6Qtu^U=iElk#* zOQk=VTtxhZJr_omS#<>QvK^{Ml^o4s6I9x{yKg;Uzm;xx#FO=*`e>8sWMiZ;rq1Ap z@BK4R_|4mxYeRz#?Xb$GIw!MX+f+6c15r4C2zbtQ5m?lcks~A;gR7~f*c$@(m!xu42WD0uVxVd{mKR~9I1nmdN5MQB6TQI ak3{M~q&8UvNJZ8Ik=on?Kq9h^MC!k%==CK4 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/memoryfwd.h.935D7DF208FDC906.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/memoryfwd.h.935D7DF208FDC906.idx deleted file mode 100644 index 3eb1d97fef227f0df63e191cbee5318ec6f4261b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 408 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 BaU}o% diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/nested_exception.h.10DC70ED9F08D9D1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/nested_exception.h.10DC70ED9F08D9D1.idx deleted file mode 100644 index 5c768b0a18634e99503459e098720b0b08f4bb40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1940 zcmb7DeM}o=7=Pbu5$IhJN?|ZQc5_f$pe-_>?yj^b zCDDC=P9yxWEXIr=TUe%XbAHTZF*C}Hi66=Q$c!;D?hoDkK$FFEsu10_oaB7P0cy-r>K-v zR6da9Z6vGd@>cq>-rzt!l8us-DoRN|3cx2HjfWM5&xq;>zh)1mRGAmTYM4)uM1;sL zG!Wx=rua~ZWO-5H1tN>%MBrnxl;D#@QHek;1@aE?bjd^=k)=#1?_qZoY1CU_(XmRN zOm&$8afNj71!XwNi-}a6BuG*XYZW;K5)+d&B`GpWqUt|0j7aK;3q`%-C?>{<*X?$v z71=E&qw%yr+|kzVe)_t*y4(>_Ron?_oVZ4A$#rAt{{hQ-dPBW;Ipbn7oplZ;)Bg%t zNP&(kCJs}Qjl7_sV?k1i$YE8I`w+BOj1@Y(rpe>!-UwcAUT$Qh`uuFP!2^6;5(PB1 z(UtDsL?W^kBeZnpbYPH>`59{ar zX26f)YtLRkQsJgWHPdS?rv}eQ<_F z#aLfZ2r>8r`LJi(&;;#E=FUtzupjNQ8%~^TI!M)H_OWgt;eI+1|2X=_3{@Y-=EJxF z41lA<)0Q06uo+anzB~2LogLqEWc4(qnXpaV4PY1wW73x#Qsme)9-RB_ddt_#)cX*29l|?+X8+au-wd@mu4qY^Cbj@g=FgRL z!^c{$QFX)~=>qRprEH?}smAZAI@6Hh!FzI(A@_`7_1FKgKd=TgPwg^7o-&DttLW0h o8Fl<}!8Nw?d^J+!sG?s74(<{9 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/new.8A4066321F7AF016.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/new.8A4066321F7AF016.idx deleted file mode 100644 index edd4de98818397a205a4997539fa0a2723e71a5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6628 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 P!40gy@&#Wv#6SNBd2W%Y diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/new_allocator.h.D9A43F0C582D8F82.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/new_allocator.h.D9A43F0C582D8F82.idx deleted file mode 100644 index 32dbe4d0517534d8304135213c2f7541e2e2ea86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1336 zcmWIYbaOLcWngel@vO*AElFfyU|z+DU8why^YhX&(}7MZ zuFOpW1yxaMT5&rw1H;@B%c+z5EV-Cim^&ERI~e&vk|4msJb@92xFI|ShPbBpSxQZw zMvOennhcr>FkwTV&;R*;&oT!JA7*4b%qRhqcvz{K$+=x2grLFFYBik(a}7g)CZw{Z z!u4xT*qd0dcRikohdEj~+5~1S4|BX`ycLXh)a~Mt3%3K3fO;1)$}eP8gGprXiOgdx z(MSVIEMw$fhLF&#v{zAGshI_oP!~~Ghp88+Q~z{G`Ensp*jm_H1|}?fM%6&bN3@NR zi&>UK7VfsjzR3Z1e4qEQ@-X|d`AWf5^Dqan1t9T47(+x6a$6ZWwlcy^=3(B$$gu~( z&za0}ur+u0ET97xF!C>8guBdbPwTs!H)->kd6=z)tt1iV6^Rx}BY4Ldd5<%KG6Wd- z^RTe@Dzwih82FR={&^}CPn!?4_8cR_IYv2{3ARel4o>;BVg)exw=*(sXB31<@G$RV zWZZ|~f6&rB)%jFoH6sgiwL-N9Oj+E@ii_K`xwoWItBD!6;~BfcvUG? z>B3CoVeVn%>tTfZ{=wYorN?_*&I2v2lc`gIDRY=`PWVZt;A4W8mj8LXF@3t~bD+1q zguURA!lf5xZSH^QGaC=HpO~LE%vc`gK&?P~1TR!O)B(YZ5RcG7@MbcK&tyd6A7PX_ z!l)0EuMuaioyq*~8_-_V^a{+6If)=u#YM@*?jQ!JfP(^Ns}A|o>J|batZXcdOsouS UFbM_*Sjh(zVM2%k%Sjjj0FHtK^8f$< diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/node_handle.h.CDEC5F05C546600C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/node_handle.h.CDEC5F05C546600C.idx deleted file mode 100644 index cea3f4cf51c4f2f7d5d7b56d22650805ee74263a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3882 zcmWIYbaPYUXJBwn@vO*AElFfyU|tyfAH36^C(+EpQ7cg^1>>!>2)v;DViyB53x~ghzY|QDh2sdL z{1HY)1phpv{CNcbUR{XvlS8r0%sd=Di~>E3A~1zK9H$xiPBRK2_`OU#y-Wfyez@Is zwf0sPcD#-{qJK;K?ZY1YijHTf?|zwll9Oa7Z16az#HVwamywG@ocimso}*62HWUzx-(t$EJOaM-U-jbsnqGf`6deNIiAWQ|Qn zP1v?XaOjZe(0pA^rlLtNbx5{vqJwC@{MVJbctbC)>3x<`lcy0Q4~Gtejsh%tf*kI? zcQg>NC(*62Yz2&LNS=Zv#4|x6+qRzF5P;V$7D}659PHU(M=$(%4tkJiL+ z++WEY5A@qQCYE(fVlWBO!`s4xZzQJxb*ONv$iqDCUpU#@BO)pduOt7vz1lPD6k8UF zj?}EQS5aN5nFVx<7N3?P%*vu$j2Y)&&dnjwvo^{Op9gK3h)|;`QK! zS{&^}CPn!=+F|EuDt;}+; zG}EE?NN*wItOX>SxO@3edHXq6NY`jTSzAr|iNQh=qv%6_rE$lZ(sd+iV_x||f7TMQ z4J2yg;4(4U(vh%2`YBND%pQM8j$ z5+Q$xQS=Zp{|2M<4MusGyzDNgmjcZu``CFnJQ+O&VKK?WQOj71#5=;sdW2CFA$y*Y z^*l2FA0y*GMkMvEOpL8eNc3rD7jc4#NYxE5WopzFfefB1_}wUVE&-Z%*D>hz>bgr0Ha<;b^rhX diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/numeric.C9B73B80E066D1B7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/numeric.C9B73B80E066D1B7.idx deleted file mode 100644 index 3e94ad5e6b4c5a87723efb83cb63c6e89fa2c2e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32670 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/numeric_traits.h.71952CE5B96E8B47.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/numeric_traits.h.71952CE5B96E8B47.idx deleted file mode 100644 index 643f5c5188560be2f268625713148f88b0712ba5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 526 zcmWIYbaP{4VqkDi@vO*AElFfyU|`qv!qx*xu77vq_QA2zN9D-$k)qYAfPL?qC`KhG&i*V#5D~}jZ|0G6^NsLl32_B|Jj4F#5&0zevruSJ&O`b-KJWOf~ zY6>u6{{t(k0ygb72kP%*s|qcyBImT5bgzrNKPV1 iRdG>ru`-AO3>_F?YU8VuZvSMog^7`wff**szyJUe>2x*# diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/optional.3D6E41A544334FEE.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/optional.3D6E41A544334FEE.idx deleted file mode 100644 index 13d9fbed7899d0739f63cb40c51b0185df8ad041..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16854 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/poly_hermite.tcc.9FD6029D55EB67A1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/poly_hermite.tcc.9FD6029D55EB67A1.idx deleted file mode 100644 index c48a4f79a143f2e1b1172a3406dbcbcd6232d28b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356 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 Vbq#kmIKqYzhREda2va^7<~RSq6o~); diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/posix2_lim.h.430DA38A1F301F29.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/posix2_lim.h.430DA38A1F301F29.idx deleted file mode 100644 index 52f91b22f88e70ee8a22ad6f4ddbd9b394e4dac7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 574 zcmWIYbaOLfVqkDi@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`V|&t@n$BvIhlE-6}stprTR&kCB^y$`Nf$PM)5hBxq2B4#g(~9ApJ$DX~kO^85m4< zecUGd<(3>H7o!=6nG(co28K@d^>;JBDkuVl9XT9@V8Rc>IJDaOpD6={6*v@RV8U51 zjlbPARW$+%i*bla!GwR;7Oqb%b~6VGOL0g^!-SdVom6(3j1>S!d3Tdn-i_^V(VR?Z~#Yu0L+jAA>~FzuDq8(VLc8#xVzh9 zwAh)MH@pT4D|0Br9XR_<+}-<&Yu^HeT{v7sV1^vv-M@Z`Tly!Ua5zUeJQ{$pmy-xm XQ(Tl>%nf2Nnm<>+rQFkB!oUCk419t( diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/postypes.h.6906AFED0EA1F1B4.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/postypes.h.6906AFED0EA1F1B4.idx deleted file mode 100644 index 1d282e6d3f06cbe63ef2d54897185bf8dfd30c52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3710 zcmai0eQXrR6`yyp*I{pctb_3vgp9GFHo4q!M@d!JI3EraS42^X74jGE-rXKv_wM$x zyN9u*F(h>qqT107)O4~O( z`@EPydpghCnfK;>{(gJj+P7)b&KP68xxQUR(=)0VV@vSQ^&G28!3XhCIln*SSZ1E{ z-h$z}+%e0J>6#_aD(&ECY8pjewq47!?2?;M(Y}AsM1@hx8BUIu3r5y-dCA6$PgE?& zEaFv{SITyYduZsHMKtkDUN#&9voIb0sE7Oh1bXTdHkQjRwDB(*B1&Muixt=78IwO` z=8a0h>&5tUtJh<$Kt$wclxGU2eqB7;}#d=qKr>?#5 z%@61B;RcHyhR~|G2$OUwkxHyfr2M*qO`7LSH|tn9X$dzh#MckcZ&mEx4H(Ipc}w&} zgmU9NQ}KA#55m)*Nu(E!Sw$d@1aPvwL4hf84PCfAZ#%Me#f;zC0k22po2&v3AppH^ zk{vXhAU!w1Zmv(=J0Qj_7;{UTb?N_YGb{pKZ_+2Q;ur-9M3HS@@)2&AO-FJiYgYu{ z1oAVLd>%pTTB9b$U%=9vKwrABoedl2iDr~k!Qq`o!7OD>>>&~t`IxvB?!94q0qj&e zGh}8ln~Yho@$G^56|VqSVC8zpI4FG4SV%6^29z;#sw9kyCq*QMf5j*u&ihRSBU;b9 z@FX*Elvpl}DZw(fU0~U+49nyAx{}Fc#dVTaDO;%I%w%>|`a%3AQ>kRe^4ug|^P!U% z{D0H9(14>f^cx65COKQG&|b@zSmY}VMaJDENURkNT4f-Sl&QX5+g)zz1NGqA{7^TIYg zvK;*!0ObHg13`YC`C#JZYo{l->yZ{T*$3J_s1F30{B8ZEi(6kiHlRnE(BwEM#~~I7 zGTAbE@=eIAgL2UVD@4xr7#+IVN98}F=$x?`tnP2j`?@ZKBe|^XI zqO2W_E5XF+)u`yvIU`_UJNqtE^F-5*3*8~V8d zEmvT5AcP;)_p^EX#a&(3HXhO=%~VY3;iC125PU^ zx1NDD;r=Yto`r^alImxn^(?HRJxOetq%4(nVB+6>-2L`J?9EkRS78M;jhKwxku;_o z#9mZL&Qec^v#5}Sr5hLjero4me^>lrMAPGI<6oc%n*LbLWAj6z&R~X;!sM1HjBX`= z$t}?q6_Tu^prN2E$y0K*=N)(5;mNsUP^F)OhEvc;?InXo)n_a@(tOsCQp{YiKHN*v zUB9mzho!_%4e_k(1C;XhHN?yt z0B=BbxSs}P8q^R&Cjd@Bb-15_h8bv~qQwu^(phK@F*FOQSy&(L=V0j^Vw7I|2%Xd% ztPl6+K|K#K8jyxSQ7=G@kfY&P)XNZ~IcW$B^$NrYCqFycvpW0m2fzKqG+uphDAN6E z_i4mryf(g)@IraxSmisD8b_oGD7{=#)=JiY3g_iyoVpz5zQNx;DLIMpG!6>|WvD6)F$iF+9)kR~Gg(ZX~ zlhBjmMFc^FMYO{Tf*>j)gdpurRA_GtrsSdB#O9qnHO%hp!}ELJdB6GQ*}9sls>3`@ zdlIa9*JgG%vZiSlG9SA;WSN=k-=oE9H6Iy<(PM`UtG&6kCukbYw@WKCrx6GkO;)#U zv~|2S@4wdm2ki`*L9@kbH-j%aI_*r6X1{N1%HAntw%8S!X(DC6ioYzryhmqIm|s|Q zGKHo+{AShv4BU9-^J17h!*uo3@M41QOi-Dlr^z!d{T1@B&;!TcApeHc+vM4n`~mq7 zq<>8QW2xit#3Am#gyJOxoc`6bwLCLX~7bzOLYmd7rnyk zQ+>i4APkUjqlBo`Q>3Oy@H3=lq@E)+Cv}1-L6@BMEE6xwEn6dAlX{EPmaI>bN=m&$ zYDel6QA+kt6Q^arBjO{e!%$&}`Jbd!<}V@JIf4r zmKp9WGu&BbxUqt>z6K1Do*_CnM7K^KiWei4KSBkL9wQ!e i-pmw0uHciS$Nh8sz`N%dmC)={kl|u`Axd@Fi z1Jg=!T5437iqTtzFiLtuV2SpA`=CE61p7@m$1eAtd(P+kJ>Pro?;h^f)QuZ^?Kv(< znOdPME-!*Ew-hd8xj_>H_xVGm(H6(?JZ~}@c#U46H7SdEMPTH5IQfVOzRXyzoo@;i zJM}7!I;;fdn{_*Ea}C8RV+@2!QodYrcdAEr0_07+edlALA*cn}w;)eC{^>p;tND1@ z5eZNmB5i0D6^_UcHcBoIIe{Q1V&?Z5-W)l5a~>gkd1mAyT)n_FvYf%3G`IqClu3RXp{_3@Wb=3>}LDY$B#$iZ@x(YkoiO z-T+vHMP3vSstVR*NgR@)fF-!Zhhl;%>?@clWlw6sOl@@<%sq?nS>#7;v3@zCXA*NR z2o{7bD2NJvaZ}UZy45NWLU0HR8ag(>4Y~~2a1$a;3qkF*!fg|8n$;kdVkJz zYV5EEa5xDU)ARuU8+kWo&g%dxu!5CPoF=M1@lK@&+<|ZhVjsw3S9fVm!Kh8hAvw(7 z7cnBNd|0~^@D{QqfTk0(xiU1P?GThijn)5^#9(h=D_gGCZxDRV#a1h%#J&ghS zu;B~MfV&XxLM$}xOoz4nXHqK&u_Ts-`m9Zz?7#k_9k3M6BM5vuUQzCN=s#Q^d#+@icEKQK~_G_XPdVDL5OVo57`yKg}5++x*evD`%3Ov zdl5lyLN`{bc!hJtY|Ncra0{_;8FgP9YbJgJc_V=3MD9;z4kd! zmTUFh^a?Ofcvgc)bG^>;L!U+gyI>bqN|Ciby~-dS2V92B*sE%}weELMU!4Ffzyc5Y z$OByMhu4moZvhwKBKA6c2T%6drI)@39E^kAsk=3=K>B>Q!ymwV$=+y+;s2p6vJH#| Th0)p8L5(3P>mv7g)N$ND*8lZn diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthread.h.022320E0CE01A46D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthread.h.022320E0CE01A46D.idx deleted file mode 100644 index 4ea4de399725cf020c4c37895e92fe570458072b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44784 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthread_stack_min-dynamic.h.6F432801F0DF58B7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthread_stack_min-dynamic.h.6F432801F0DF58B7.idx deleted file mode 100644 index 15adf074ef41b7b957cb8cefd846ce556830c504..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304 zcmWIYbaT^SWMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`V|&t@n$BvIhlE-6}stprTR&kCB^y$B^gDji7D~LC5g$|@wu6Kx+#@;iMg4{dKo}7 zD|3@T<`t!;70&?D{}ESb29TvD|FNIO7)X6ON#XiN-~O46H`hm3sQ@96N{2F^fDNT*Ik}plv12o zl?v2UT$!5$vb!iXtymlAzLQGRe(U{{m0;vz)aTHbfVhi+!7O3n@hNL_H&gl`|^>F;TMWeXIR;F3^+3BRZ{t<-l~nhO*b;t*1V2?rV% zGp1U6sR0UWa%jrKgwH%UoG92PHWMf;%_R*t`;FxH+OvMWbAiHI99nRfY>r)O{cQb# z%|Ky24n4TLeI2%CKH8+Z1t_e;p`!*fJ7)Vt<=aaI4giHExg_B(+4a8t(ZZgn=Rjd? z4sBJKYPnU_MtlEX{>sS1D9$R*4-*E4SxzE|Q(Tl>EDmBYiZ#y@2wl;2k&%gk2_ygk E035z}s{jB1 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthreadtypes.h.BAA8217B62BB6E86.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthreadtypes.h.BAA8217B62BB6E86.idx deleted file mode 100644 index 31cdc8432eccb71f017430865b57de78afc0e857..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2172 zcma)+Yitx%6vyulLg~ypwDbiHB|}R^OSfBP(^BliMBCbsQdx=C2INT*Lspe)KPCEgp|P7b}W5t3H)GBYr=_HRMi?{?c@Q~Q5E>t zjX17Fm8fYc5!29gM>h@S3DwfoaGWYJ)zIR)vAaQ0cEo57Z$?E21l583Vb`IGlS)uU zw-v*56q-z!Hq{i!lyEKf8`kHm$eN*+Z@;BG)KcPRWbe&Ni`iDqsFJ_5M&o*zTB<|i zsoXvm7q|I-hoJA|t+x2@I^utCaVt%wQ>V|_XD4VxkLnRcW2a5}j0p9a26RW0G~)83 zCJ*&J+|#dwRm;+;Wv5A2DbJDfellH%x7uwwr=8FZex|&7CMVg!EuiQcH5}*-YTm3; z-riUe|6hn_ z8dEK*`EY$E-5_gr&>{GmInTw)0*-k;2V$=ah`ltG18~nQd|$A_gfZtJ)_yjGMZ$tb zIIJAbA$Dpg{Edf@11(p4b)%nFNu-Dnv0kVz<$)9uA`s&7EPZ9>(F?=lr#DH&3qV^{ z+eRK301p7ePtN`@|K@Z+BIN*tgitvTS-?DX`j^L+?|eies{p91tgPXI0q}tg7o%6L zdqxr=iL3;mTj(z4A)DdcbnME$&SRRyE*`N)s43%t0dN~ZhET(5|J;OYN~8jSXjyav z4-9~t3xL8sOFE7p{OpiKN&yH|1vc`)fMpzL?ElJp@WFvMBvK4OV_9Q04-8n!fj{?L z{4RCv>9-|vI{>C&mhixU0uHDj%$@pivUyY@D*)&d`igj9K>DE0KR=$Vct0^Fkum@V zgn^YjFaWMmX!65?*Jr}*`@WZm41g=R6+C1!{Qc3{Z7(0|n-cjfnwK?~iY#OSi$?8N zVQybmAN{N0TGc9#R}6RqYj_6`aM&I(J>-nu6gu(6i*Lo(0^Kk7Z$KI+4>TJ)$~bS3 z*|1SQT0QmJ$mNqwAeR)DtVg+L>xv84f12F_x!1|->QMe|{QAh_tA z`a$mM-(-8}=BrOZ$zHj)7G*RW(9CHlpa1!D zwRpJvC7_4op*vB&yn6n?*V~>u4sxAbcNfZNNJzrmh%(v`WadGX(R?5?=b_wt-7fa5Pq}7ChK)fibF#nq?U})n<62lgdZWnp{I%q^iXbW1l7?BRaQYRg5t|zNRI#F~E)ec+^dCq4AWe?liPiM(C<$SX`uH z39echHI`1R*-Y6LOlt?xm(Ow&4{63ek;!E#7>&h|HkPoojDca54YZB*^xI$~rgL@B z5pMW0>G^%}8SFlKuUa z)j8vk{I|DUUoaaJ*aK{8ushg|^&^& z9Qyeu&AS&)+*2eEUQ~F6zr0X*XyH-vg0$@)g?W%+3j9;B#xVpL>HDSb_|>j?g)K+O zQScvyPaH##`0QfG(_e!NisZ&5Id5)ld7-f2DKjfA^%Xo$H>pi`uZdRIh8Z__^)v=#lRe_nS=I`nFr51e_nlf&*X~(Et8R640N(iwK5dOXe^k)o(VOu ztMGFE-09~#|HXf3V&b(ceDWI%gg**568p`yvrm7|o{u9(cyXG(X{e_`Q?W=|5d>vBbgVdd|BJ^3q%A^C5#AG@ zJhm87&7aO<;0~}m&_o%D5~(V}A?_`u#k2AD(d%|S>%wi6Vb|BI=D*$B`J3(jEF2*> zwWrEc))l$Eq*N!JS3UzRXP|p2ehC^c!Fu{872<6w5~SOZ_Ap=zkJ6FmB#)ys!rS$? z6d^#iqBD*DE37Sg~Bp|gM6WQXUM1rSdb`7RTnDzF?`SaRadEnJ|-+%e&L=9B4 EcYN)q5C8xG diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20functional.h.3B35B426F14AFB98.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20functional.h.3B35B426F14AFB98.idx deleted file mode 100644 index d8d317c59f4a01feb7a445225215f1c65d3e848f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 626 zcmWIYbaTsMVqkDi@vO*AElFfyU|fsS;?DU+srrRR25F^v$t9Wjd5JlC z84MJdl%A8HgknZ%aS`0QWK|<4AksH9)JNFIkeQO2SCUy$$>bUs9BqS6q--1QcP& zFGwv)EXgm@&}0BQ(8>xz!c+tK#g(~9@j$N&9sjn{_INP-ENwDo*h@fm`1=CLucurn|!u`BU|2?kEEZbn8{hN9H8 z;vGPqtizVt?rqVGj696m4B7$^(-GD)GJ&mynFq6$kqc}cO!%nV#UmGP2P6RvQFB!D zfVq9rp=W`!Z;7`8RWoxii^I$|^k4t)`6TCgK-JO=(n2s{m|;NGAP3*!Y{`>xpVwX^ w&Rjc_`QJA*vw=w<5u~%YD7jb##9(AQ!TmR7(T-irOw7y-z;p!z%rFK607Sy9#{d8T diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20iterator.h.C23CF838032BAB9A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20iterator.h.C23CF838032BAB9A.idx deleted file mode 100644 index c91049269177e97bdbdf25d198e648da8e914585..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1074 zcmbtTPe>F|7=N>_IkQeGhLriI*>%+2RrWa=7K3cshPoY;!cZ_7W@q2(81!jC*RDwxy8D6|XDjn(~~qp2;X)tB|uzbrLDA zK5n5jhNO{Z5Oi3J5teWy5|8Jp_U_@?&6+6AUvP1yR?*ru}81U(m@M<&lXuZ@|iWy)49?uED9V*8B7yxj2 z?izk4b=|A;ch^Q4hG#oKM+JE`WYH9uKrZwaw_w%wWp59^2Z8U?b{*qqVH0eoVWMAZ zADrNp#tPhv%i+Gu{C392vq32sr<^<+>In@{>t{g I@Nog~7ie%oiU0rr diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20memory.h.EF3BBE5C99993FC9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20memory.h.EF3BBE5C99993FC9.idx deleted file mode 100644 index 170992bce8ecd91efa744313cf360466acf4fed9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1718 zcmbtUZD?Cn7=DwqwKu)HX}j92UDsV*myadQZ8|L_&63)72}`A&qt!9RaCdW(+RH$OJFR zd(L^!bKd7Y@AKY!U|%NlW(&Y%Vc&xlMARk#*i8Qx!Me{wC+rCg9E&IBDQQ}MNo}GlN5eL$q07 zEzr8@N=*7*ELIMK3*hG$>QklTN1ktSZ}o$;w{35qZ9ouix*5PFH9zy)0pHf8z*{2p zc7rs!Y1D5U5SrXwUIsXI^@~3rIJU-U3pl zE918fv^p>4N57mo`2P337v1hn-Hu0^@J_UY;4ChkocnbCzUMAG{Byp!9%iJXOQT85?X1Zqlw&B|t6|G%vfNkUN zG>*S}ugfJ$hu~1V!wnEwKJxj|o~K5rI~_>Jc`~15E`NOK>-~qRJCcpe@Dd2QmtDV~ z*;8cb(exBYcYgTxi{@WR>=vcqEx{m1i&8F_8{|w}2#?nmfLDcr=#4l?l;%6;Z{>00 zvuCeeeRlFRrR#_OP7cc6{`3bwU3laT>K@xNwv!9UN4M7&@EhULYG3yBTs|}u+`lE{_phy{)6*Hw z$yHzpS1mGWiKngGb diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20type_traits.h.80FD58CC3424A64D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20type_traits.h.80FD58CC3424A64D.idx deleted file mode 100644 index 928adddd10fa921892971525799290bb07f8d51a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1208 zcmb_aOK1~87@pmvn`a-U5sGc9B`vnpW}7OtWSdqE)HFiH7YGXLb~9-g_7Qg{sloQ3 z2vQUTJ?SBcD540JB6{%Rr58Qhivdto?sT#ToS{|E3BNZTRY*=M1t7RJ(wrpgAXsin|OW3-D z5ad*h+0SqYIzGG=hu-175Wk}Z3E5b-#|7kfj|e)}?0ubmR2&QOZOuqX3+bo}DBz)| zh!dKgO%}iVHoj%TCMpIc*{zHoSs~Q$w?kx`Tg~FrV68UqRt3w(7m`UE+4*Cg}xrY zr-RWf3utOLE6Mr;O-*JrxT`BP)v;AaqKhDf+9kZdv-{26F9T(-&mRb~Lq)&&>Jjj& I|7c451@VVbxBvhE diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q23utility.h.02F4E3C4153F6F6E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q23utility.h.02F4E3C4153F6F6E.idx deleted file mode 100644 index a72b394f235e754918baa76ea22ca7663f54cff3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1246 zcmbtTO-$2Z7=G8m+}|hTUqq5I7%~~F+hpKE25dqgQ3rEC2$-gH9W-+mxI?@}94V>s@V!eI4LVmkr!~skKb0CQ184TvTGNLfUGZL>bN+%wS z=W&_Y1%}I{W$c2aAo4+)rl&J0o@VD{g-=hjlEjN5J)~ej9iF4~6vr`vW3-Uw#JL2I z{gI5s)8~BtIYkf!Wx+H3KW!8YB`Hj$SWe2wJ6g@jQeh8%PVgK22Q&dDgWjYi zps%lctJl_VQ&ffau>zo4b1ecKRnOSq8_(q%nFm&|RRZd&>vCxVOhvjfi#lLy)wVWf z`u32b%$2zkRBx^?CH2jt6A(J`_M?Te;`vU4vrH2zz5=Fq^rv5$L=Q7R86LkD$1{}KYAMkR?uTP!%*2_;WFQ%H2urFM$%(lRNu~0`Lze?QJRm diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractbutton.h.CFA25BA0E844A352.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractbutton.h.CFA25BA0E844A352.idx deleted file mode 100644 index ad08a2c606e0939e6576d357e493d6562f4ed660..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5872 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemdelegate.h.8D2FFF50AF7F61B9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemdelegate.h.8D2FFF50AF7F61B9.idx deleted file mode 100644 index 3775e8550eadb51ecd83447b88ba70d93df36f6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3748 zcmbtXe^gWV760ZX1_BTA!j}LF0r@2XQXVY)5K&2lARq(`1>sodLh=Z4fnf4ruw&h7 z>(RC=o9?t{-Rx#tU0df?u^X+&vbpNn&ZcGEkFGk~*-nqlsm!ibaowrA?n@G8XXWsr-~3l;U_2tyjL0cMf%v>UePX$icO+0 zAaB|O!id*D91I-{x+R51@1RKRe)(&?wHE-KF4>}9@ChELD3E)eu2}KE&TaE>?`hf| z@Q%p1je>8;HX^|N4q-$Hh^>CN;Hz`G`UTQ4+&kc%f8bh?XX&uq6VGC^%)is+^9Kd# zW&Qwh`3C@|-YGhXD@O@}$q}6ISp%-|rs~c;|3X6bAd9fq>xi z@#{stvSfKlDerN)HdmJO-a(gd*e$?$oj)M(Tm8LT1eaLSPyR2A4PLiL5QF?yXE+C5 z$Qr~$&cWvf4T@tv!9OH={ezzyOZ-a6Rgcf#>+}I!eK*hr{5~N_f`S-| zvz!Ll$!QL4yk8Y$;swLM)b%?DJ%XDI54j`BS}Q;*#K0KYe$VU!=f?(mE0u(F@2;5M zw0=;fCGl!PvtqN-wWQm$TCb8atw#|W}P_`?OVV2 z`jdUH?zvA(RN!7lY(}EIMBS_DdFRUUJ9*_Cvjpv{bX5klKf1+nZS>DYm8nc7iu2gK z1QcJNySdsnm(tEL=_oEvDqe!(Pp?dBj+}mN1IMJIxIkBsg5q-zP5RCrZt6~97J+k} zw9_arD0X+mZMV)o>*1I*v~Esq&Wnh-9shA1x9-#u1y~zm4axEnecHI%v+mHbk9NuM za_Felodg{&Z z?&p{cbgxa*mWJZ%Yp-9>JhJZy#~4stqpQhB@%azmdrF)*G0icFC~noXQWQU%uD&ze z^}Ro8NgOoLplV0<18FMy@O@nfD(%k^QUp^I`xyj>PE@ z8w(D!r9wmPAAR!H_%DBaRRh|NB@QEUXV(2ne8OMTwF-so32NiFIxbX>VQ`j81VJH7 z^Ahsr?d;3!HF!JR0#uA@O613Kz>)?JrBX&EEM+E6E@6BQr5BT}jlb#_UEDI>pkqthOSoQM8AUO5F`Ziro#eD|IzI zF48`6=Fwf0u>QsYEzWC|35L>xTszxLdp zo^jXqFdCYuPJ}I{=$(C-*NB&Ih_}1mE-oK2;vXp0e8l@_q!xu((<}CBFdBn}C zSQaI2Rc2Lw^wBlTYVL~?w>7yn9Y+9Eu-=}56+EdbRMlL1Y!8ICQ`H$^0uCd1%lsbm z!OK@?dtNyGbU1t%HhR&UwQlv|eE_0Y>r*fhWo<8iIHiA7cw4?jR!DByw zU`ye{U}N#XmC|6t<4Nso_3w{ecn&};21_m`^4}e=*V8xl9|RD|Z`8&o1Bf*K@ObpW zkGGv#({OZw-@Oxi51;wRccxU}ccp$6YKO)E_G0L=xw%Cc5a^^PhZ$2Hv!|fr)u~;l z7cc=s4PHo77IAUP0-dB0i*&+o=(N&cMQzB_Dtja535OE%*~t)c74v{ZfqSL#i%2+r zfr0Ya4d>^x?8Olb&PnqZokD^Fq%?35()iXT-8u8uZvmuEtxLs>v$P?-A<`7FH!-1B zg|;D|QF!{|ZPGMhoLkT!u&5T01nCa$NCO@r_wM_~yS?T+cY!1lrO+Mtm&Ta`o4*e) weS2nS=9B_EFeaWLKrrA6@{(D^7XCiVvDwPbiq|@o`lMu%jG%->m`uoj0qOH$egFUf diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemmodel.h.D4BB35C1B1D9316E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemmodel.h.D4BB35C1B1D9316E.idx deleted file mode 100644 index f36bef6a7daeeddf12d7e11552600c5fe44dbc2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33918 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemview.h.89AAA16972132E25.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemview.h.89AAA16972132E25.idx deleted file mode 100644 index 570243b876ff6dc8b6eb48f13cfd0bde0d23c28f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22458 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 V9OL?Zkdw`7$%HR8Ql|FvzW@n@`+)!e diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractscrollarea.h.E7EE5DCA0672BDB7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractscrollarea.h.E7EE5DCA0672BDB7.idx deleted file mode 100644 index ffb9671488143249b6526bb47096c7fb57147d84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6942 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractslider.h.ED9DE327D105CA98.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractslider.h.ED9DE327D105CA98.idx deleted file mode 100644 index 0b88e0b9c37e3f9df20ac5b7015805316d013256..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5792 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 SxNABW{o7VPE}o0`_j8yVqKKt+m%)d+qh^ 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 Aa{vGU diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qaction.h.DEB42C6F940315D3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qaction.h.DEB42C6F940315D3.idx deleted file mode 100644 index e90152a6dee5c1dc1e475055b77c9d78b60b2d11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10402 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 UT$=IO-uTQkKGTiQ4#wwy0Xikt8UO$Q diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qalgorithms.h.0752FD13E8EF319B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qalgorithms.h.0752FD13E8EF319B.idx deleted file mode 100644 index f4ff83928e29b4aff99bb7ffee08a202b4b7047a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5200 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qanystringview.h.9067A8646C0AC845.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qanystringview.h.9067A8646C0AC845.idx deleted file mode 100644 index 7abede86c066a7e8ba4781e716373684a314a72a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15266 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydata.h.3E149019C53099F4.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydata.h.3E149019C53099F4.idx deleted file mode 100644 index f47cd41fa8fcc5595060f8a9cc574584acaa5557..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6896 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 YQEt1OJbFKTG7?iVdrt9OHdm1T2cZvhlmGw# diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydataops.h.CC375FBAF7851A50.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydataops.h.CC375FBAF7851A50.idx deleted file mode 100644 index 488a03563797ed5f9422d1287ecd8eb86f177071..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22880 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydatapointer.h.1128F9E57EA464F8.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydatapointer.h.1128F9E57EA464F8.idx deleted file mode 100644 index 5971e25479c3e7f8b264b919345995a8236cba93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14110 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qassert.h.BE86327E75D27D1C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qassert.h.BE86327E75D27D1C.idx deleted file mode 100644 index f0415d23cc2ffcdc57f4167e533e255f67ed2cfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1794 zcmbtVU1%It6h6Dzq}k1Fo&1^A)O93nVoJKx-7Q771-DtLw5617(uZQwbux3)9lASr z_s*nQZBwwcP%Le!z66mXmK%= z(>;J0y`QXORp7?Pr;ZNWO<3`yb8L2CD5K%lVFx z<;Y3}%nh8xK+8_x_ZT>YtfD9-R-uYIW!coka&uZPD+OEGmV73;MLD8r#cf*^!_>-C zIz>FsI8|z1(#g_lG&EMJVg_8NHr1T&u1?Oz>P;F)DyqhrwQ4C&X}!w0y;>!cu_`80 z8&>t5_-jlNJjDJdwLP zbMB)TLLnm6peFfb_~%Pf|6=Y=M<^zZwvGm{@Q$!!T(E`XP}Fnk<7tzp&p!7ciP{Ay zIPWHR4BS0DQ@pf27mi6gVmpKZAW|-o8x*9Sx9@-c;P;~i+-V=#CkuGt2ebF>(D#K1 zk>U_vD_|n^Lx008)s_;aMcoW!f_tL&n5tWIU*Y6n*SkZ1@x!=Xq&3nmbPo={^UKxQ z0}SEKWHUCy8=^l5JIxVrYX6m`#nl8;ARzd}kh4D)gu<&$P_ zEtKA>rW$1?Pn1G4Y2Yn5*6r>tvX-EgNHBTKnF~V-& zMcsUBK5+2Or~LV|d(w*tkH^M)h3>CkZMiV~@^|+TPLM>GfIoOP%TJYly5B^k9_R^R zB5j0?4YPDx`bn__@U5ph6N_usb|(mk-oKXv;Rrea5Y!Qm!p){XZymfRUx~DLbauhN D(80n! diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qatomic.h.F284092535A24518.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qatomic.h.F284092535A24518.idx deleted file mode 100644 index 1596b898423cb796e7eaee749d5c0e3728755c54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2256 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbindingstorage.h.73A75A3151EC9C78.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbindingstorage.h.73A75A3151EC9C78.idx deleted file mode 100644 index fde6f1bf04cc3a3a28a2568eb2f9a89704b4e12b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3430 zcmbtWZERCj7(Tsp?e4g1%Qo1@*+#prV}sGIY?N6>GZ+I3Oty8fMHIZWr`?6y4|?w= z3k(%C!4EV-4E`X*V2lz%AcP?P5ThZAhA60@(H|-y5fmedQ85JYoYTJTSo9Y+*~!lP z`Me+JN&AD#mTf3Ts4EiO7ALxFLh$x9zNSE~yZE-kE zG;JWcg(SwCP~-n9n@|UH*2hvLA;*cmOO-WkyxCsAeO_KTzy+;-c|=dz*F>Wl(Yd58 zBMA{*CuuI3pOq-FgsgIjFC$r=u?e7#`%^XBbN7K}`-BA9OC~m4c-ZVE6ET3YWp|It z>WHi>$pmWvL0!psO4fVR$rMTJV<9<8dXq{*NB4JP($zkDlECkuB$&|G37TYDj*-dt z`+T{@QdyT#-WS(s{xx$D3db8fQMW|3s7O^GTfPpT;6)T&L-F;gj>Z{8$Uqp zIc3@Z!DUCIMVL<2O=V3Eet>$9cja%&`0Gs;p+Q6#TX8u*Kz-=Q&Dj;|Pu&)wf~u<; zs}}JC)H@Emeeubk63Z>ZOscMSR?p)HsC({w^VW^-jRQ8J9+3Bny|tirME^ST-uCYX zZ9*M|)-JYVet`PIzR#o2R{XKSELbv?A}pCCj6@@C3Nqk=t!EDvlINaLO{kzG+n7>w zX$=zjg&I6+c_kG$zwv}csGKK9X$TnmZwdK@;Lvn%j~MkXYc%>XVmsc*KV^g4Gb(M%LD`MZrSn+ zdq3G*F3f@iUZb}F62#AU)<30xcG!e$;9qPmuFogfvv=*a6PkG1COE;rU+k{~|4T=X zmhag%>x@k(rR4=&ffjy%`k}j;+jz6(+=R6nbPeX#YR8oGD|SC^zGxH5A$XtIX8~{5 zY%5 zJ0QW18^y8e7XtUpf)x^!m`Wy$H%+42vI2x^I!}(jcxt`DAmR0BJtwr>z~{hJ^ja{wjE>^fuGq3^%|=<1*rai2-L&F(V8R z*N%S`SQ0wCj8@QX?9QQ(aL5?S-GET2FJlw%{qAZ4ziGJAN1M`MYG6N<_y_!A5HaHw zr~vTMAdFN%416Mp86L?75pnah<_0hVPN7DOOA5!){&y=Ix+Gj_t#rZC1Fz7|F;W3v z3Afg?*1`}Z+*#adfk!CeRmH0;FgEBeMaXCe0s!OCdKlAy7?_4);tZ1oF5yP0aVB8N zv5km1%jAsO>)L(L5eWwt1XkrS1--#;z$D@Rrv631DH0wG4E6&@NO-7yXf^Dh`=om8 z`oZ(h(`h)61IP^lof!<6(HNljt~qx1=e=DAskMm2>{CGq*o_v&SuKaR+F0#?H2^ep zXF3Wy98iXc8P7oiD2FzaksOEtJM~>+UE%;M5i^zpBVak&amH>ShCvHOoYi0r>H53< zD*y#>+!PTrZp*KVqt&rG$8Xrz?CXZXf|RCXYzHn7pY9VQx@;>DZEuOg4n7iYGB%aK zqm{6)$X5YzfeUF|#(_`G+IzuX`uMv}0%z*`2Uurjpc zj1fT$jA#-uW5RqoceOibL|4!naKbbs9JB_V5RWdMbCNl-s%uaUND=xM^^)NM diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbitmap.h.9730D82D851365B4.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbitmap.h.9730D82D851365B4.idx deleted file mode 100644 index 03d685ae1e8edd8b16c088039e00123a5039d02e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2796 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 M2NU9020NDj2BnpudH?_b diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbrush.h.3E2C08834AE7F6F3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbrush.h.3E2C08834AE7F6F3.idx deleted file mode 100644 index 5d6e48eacc97055b3bbe2d238b76ae2829913e2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31502 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearray.h.56EB072B89ABD6ED.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearray.h.56EB072B89ABD6ED.idx deleted file mode 100644 index ba16cdfc00600ef1a72b1a126b51627341a1c5f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41932 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 QGLQ@){fG(v@BH`w0q>v-5C8xG diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearrayalgorithms.h.40A38FF36A118743.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearrayalgorithms.h.40A38FF36A118743.idx deleted file mode 100644 index ead046bdbb5f25a0e3f9ec09db9c02d1b2f7385a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8404 zcmb_h4{#ILnSX1`fW%t(KQ;(^BW!F7At7vxENofWNVdshV=&M{h_jYfmaw$4cUO*` z)KE&(01b}Qi$fCH+_eo&+iNem_Mp?bTqn)H>sl9xFXA*2+3Bw38#Z-t5SX{f!^ z;~VIllKCy7$W85u^S3kHbmLXmBbvOu1a@A zBsn7?oDw9N(N-lfjK{CXrevhar$lu~W)i%Rdk(HmMtp`t$b{UeEt-^_jLYTv{~c8Y zHv5K#Cb*$QT#|=mZiI1gW4bh>U$W@An!B>N;qPVtK)-XU`j)gnc5zXjftqB-QliWaCwQg{id2jXBTO_cgylG-X*0u5%Df;cb4E^O zi&$fH#VjA4K@QTUfD+|p7q}$P3{LwOt^jV?;LELd6`p8~YB-fjFpiW4GMbH$q%A8J zq#B5Zg~FT+%F)uGpqfUqgA*k_(w9yS^I{IsHt5f#BdIh*bKYV!k>cceYvYNOFrxg- zUr%Q@a+@2;C7Bo}!A%LLl4A*8<{8B=CdP}rQ%&scJQL=GdRbvfq$4~tJ`8}5Qvlxt z06tgDX^~)yXW}}GWZ>ZvBPlU1$C8pO=3;hBAV0=4x$%;DP|cxgPO@;!?J04T6H{p+ z;vxg`4lzCf`#zs>Zj2@D3=$>aBe`#&aetPkDxN8 zAq1WlGOmY%XdnT8gXBb6yUKEEtJ>v=oC+zO4ZanlM?@|G(_Qfqfsd#Q&@AQDZg@d* zR>XKR2{BWnGz4*!rjo<40zw{o>PocquU9CV?D3K9kL8y?md~(ui@ltfS1l%7kYWqY zpFGvvxOcjsBClyPVZB!G3Uwe$v|nroSNlA#S)a7fWRws#ZB19G12H!i6G1t@_d@$W z{_s=32Zk6h9Ho{XrAjkj#JqMH8B~}q?&a1$SAR=6O>Wi15_XQNn4@ZlxiW7kp|JdD z$B4NqpS1YFf}-D?dTaarv;8y~fM`CHU;a?OowZqP%Zb^xNQ>qpe_HkL2b=yp zSd=#bDmoW+TGatn$Y1}GU~jv)cX8eZA7MRs!)w! zYb-UOU}b@(p!)8afn#;Y4p{R(4hmWNf3icHX-antbe1IlAMq#9E1Y%HIqDAo= zSH5we!*L-@lilc~tHrg2m}|_WJp>k%76iY&w)D{mO%9@j6I96wC64vwS{&be_?~kw zCeHFS8AlnRV2CB=A`1 z=IsM7nie$`ssnm)rm1NB%=hj+LX$9_KSGrpp{j`4VbyG~|K|y6dOLrNCOv3_gK?}Q z=ISLH!+)nf{bcSXU^d0ajN9F;^>+(O~&!M zn>L5UcYfahQT zqvJ>C|LF@a(L{vX)L+!ULLG?N<8EzJZqw|Zv%z(5ZF-d^V;F;ADA=bas<{IgzP0kZ z!d<`G2Mkg4;22eMj9Nj=b){MiR`gpMPd=UgDNWKS!x?aPs~5)G2{HdE(=e+OOp}kFmY?VTpftHp@^t0X!CuKZ}NA%{2on`=*0|GGDAW0SY5bFZ9uOd z?D;>}dsqIbb-C8%t*cpOKqFn=Hy(NAj?Y}uI)lH^U(PB6ZlCtY??}G9^L?7!j3!nU zR28Z|s3wYhREp7rtP1?w^k>iQrzn~|MUhifQN|v<5mRQh{Vtg%r@m9QrVE=dm8Ujc zY!BFUDT~%@Gg7eC!m`$9QF?RxvzAw<_LZ4wHo89AqL&{VUmP#g!^frByYffj6GRrj>O ziM|zmby#gE9*j_)5H!Lxc5CYR?`mAS_wn_t4ZL2m=wYFLVRd1^|P)?iE zK)Gx#0~NFd4OGY$GEm*NZUfb0>oHKgmA9j1_}t~0)n^W`B+c$F-EBu_@yUbWC=VSn z{p44|$}dxI3@is{t>r6GB+XV@D-Be&wc0?{T5Andy|vyzIjjx?<+M5tl*{TeP(f?Z zK!vO!1J!NqHc&m*9s|X%<_&=uAtQxZs}GSw2I??5Y@m)%k5<3{=f zMNSy$8H&sp=~;@*8tFNT%w=iB4^ZL?c)-hr--|6OUcfZaIbDNRTN<*`Y|s;I*IxiO z#NG>2AjhK(jrbo_2gM5rII)736`c{$bnapXhw8cz>mtEnZYymW^FSQAM@h z!r6+(icMLn%35X9dna2}U$rqy*(z;o@OIH`O=Zm*)C|;?n*J~ZeNQm#(d4jnYH z!T#U@Lrk}a_8VgQ@$L~rOmFEqh%to*vbAp~))Wn0k(r}h*d`IuLCzIChY3U|2Z>N2 zTqfjH<(2QBz4_#=(3M1!Sb~Xo{fX)$JulS{!SW2%HA8K~=KNgf;OG78X5*if(@@_(Y`nbOJ6Y>7kb?QnIt5et~ufG@Ba;Sat? za8`wZ8IcGAmsnKrhknDQZt%MCWrRz;wsiwO-!$94uDuyMFwOc~{Q+$7G~40sXh92T zHn2I+i57tG>pGj!cZ8QQ+ zfB)^zbv*(b%g8eQqVZ*CC#%z!zXHpBYx|nfotSl7;M-dQkHPY&X;k_DsQM}Uw z6_AEWh8hNth7^Vc3|8Pd8oct+M{N9k)t9c>Wv~yxSp~b}S<~q0#5*IeUs_7DHexep zpB$UV=F3twq{f_ma%wy^zAR-Yb~D}xxF2r2H%rx#Ix}7enyqu!d9zdlX)t3@Y3Qep z6I2s6ScUF7L9s}GVtM}bL;3Gtf}9xJG`^P*PUSZa3_kpglT%^_|BsT~%A`*jv=95j Y-2+cQes1lS{JtIiq#u_F*^!<84cRZpLI3~& diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearraylist.h.E2B24FE3ED7DD6E0.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearraylist.h.E2B24FE3ED7DD6E0.idx deleted file mode 100644 index 29b423d50add771a052d9ae0b385250abe0715f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2162 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 B*Z%+j diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcalendar.h.FE372A9F8303D252.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcalendar.h.FE372A9F8303D252.idx deleted file mode 100644 index d1403352e749fc8909a6f71b236df745066f8562..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7788 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qchar.h.0D786C17186DA7C6.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qchar.h.0D786C17186DA7C6.idx deleted file mode 100644 index de757e67ddab96828efdde10009679198f0e7dd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43880 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 O-#xSR?x%cxi2ng|#;$_^ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcolor.h.F91F6990224F234F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcolor.h.F91F6990224F234F.idx deleted file mode 100644 index b8278fb0713be40b4f50d3bb6f0ddf6df02ab85b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38242 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 D5OgH8 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompare.h.CCB7FA596FC8E08E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompare.h.CCB7FA596FC8E08E.idx deleted file mode 100644 index 9297c72b497d6d12ee6003898466a18b3b648265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24078 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 aF^Vf}j>()O{YHA_1f?K8mZTi<=l=pd`Z%-z diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompare_impl.h.AC2E30841FC04F9A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompare_impl.h.AC2E30841FC04F9A.idx deleted file mode 100644 index c0861242d98908edb437ba84118fa90cd03a1d64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 zcmbtSO=uHA6rSB~H!;RgW683WngLP#BU^0=l2Wup3I(NB4}zhD$z+mDvp?y~Y>7&} z^`fGphaN-`@gOSHgI4UxtLW8J(St%g){6%(;_QY2FP=KEk2l}@-Z$UdnG4fXQ&0N< zDA%XE9udd@0PK+;7mU8tWD>1%;B^oqlTAc@F3wUx7;-NY7JylCp3y}lNU8L1{@(^k zyNDVj?yX?2Q^2yf88AwCp~J`=bl~VQSPKOVIrW)fH`Cg4aWf_ zaYM{_Fn6MpIQ^Q$)&BNrp~q++SbB|Dl}vDNu{DxOrq z($1(gu6mBotp53Nulz_#WaRwXzh2xHrT_o{ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcomparehelpers.h.99315EB410FD5E10.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcomparehelpers.h.99315EB410FD5E10.idx deleted file mode 100644 index 226d91ed7640dbbbe232016cb2cf53598b127f3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65592 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 AiU0rr diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompilerdetection.h.8C6C229C1FFFC2B5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompilerdetection.h.8C6C229C1FFFC2B5.idx deleted file mode 100644 index c5916f30ec22d8445352792af1f368be148d7156..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4568 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qconstructormacros.h.4C4C4817E1171CFA.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qconstructormacros.h.4C4C4817E1171CFA.idx deleted file mode 100644 index 60df3e9af677d97db5ac50682e8d22c2591c3cd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 276 zcmWIYbaUfjWMFVk@vO*AElFfyU|>`WgATsrref#U-hE z8Hq(jsX00NfhGE8dKP*H`svBZ@n$CanR&@Mr75XEap(M^RQipqnn1QKgb+^v%6_-+Lh=Huj3 zfC(Rc(f+w{O^Gc~n1zEy1}3aMc>&Wz{~ew{VM$I&xFKF=XN9u)R8Im5D{v~v!Bhk7 b&PfDuii?tqxj_s@Pm6Wm*QA<+GcW)Egq}mQ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainerfwd.h.5FE05033C8BD3C55.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainerfwd.h.5FE05033C8BD3C55.idx deleted file mode 100644 index 2e63ddea5189a97c1016adaf68e5d02e80e2c9d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2306 zcmbtUYitx%6uup{v)%4ipxyR%yW8%gWtUw@r~4?@O%Z8HOQi+2Z7P8vjMLffr28l{ zv(k!dLI_bX{4oj`gM~!pp^XuY7(?O@#2AA9;fI=NYYf4}D3b7qA^12m+p|+8#vk0Y zXYcv$ch9-!p6||JUr*1y3PQR^`zAA@%9{uwHSn*fvNXfML>rwgd%|&bYC_EN8PT&r zoGPsJwCsr(&~V}Lf02g64{#z6k~Cyt+?Ae^H@t9ZIJ|Hr@{gs*$pAmOHl5B1L(+31 zNpwxA;#yher}`yDC5dicNCCQ;mt>MipC&X z=hNzDS>(0ABmv73pH05T8wiXm&#>Cj?XKqm`(ArET+?3LgiMqcC@x}V}h__Rg9CeLOMSx0^XgI zMQ#^_Qh6yW%E{fMt*M8Jq(Z2qG?w87Ij1~iC@5-Sh`b_~4lXQVa~mfH9cIQ>R4}0)m&Zpe>>}{XX!!|Y z(_hS;ZyZ);2_ZDXMyho~EIJ(sjZaQoOq8Qr8Culf0FI2S@!*zfU*DA#-h4 ze)Z43H&I0%0fN`=jp)XRFnfF>*&q%dwla%>5MyK2x-rhMe#zkNrx-nA3 zI{R6ZW9!FOrWy$CY>Qp**5B5<_}?mY&2jGIPfNHG)RLktjb0swUGuq%fRmCGdDdKpJXhw zE>zcQgp1mv^{ALdj)N~K9oIKPnelb;Uew9y4Qpo3?0b6%_AY0am#T+!jllq>`(j0B zuQ~Mj5R_3Ls*hp<3=MaoDG}k<&Ky1V!=1ubVEYojod{z_U~96hD3BxP9sX`C7hp|{ z$UZ(jecy86W(HtWg^41J;$$j|qMXNV)VIRdhlx?3uvb$j?nPO`xpX*_gcvd|W`1teS?(9wo~*XU@}5%u65+Gxxf^Wn+yfj|Y?>%aiG6=3a6AdHUzVC^L! zjNJoR(?7zyP7aQSy)`Hk&_$ikjkmGK(f z0$xXaEqZfj3*Tq9UcLtfH@TWTm>j+mX Q11E&IjA^|wZ7`;P1A5p+LI3~& diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainerinfo.h.F5D0CD90AC279455.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainerinfo.h.F5D0CD90AC279455.idx deleted file mode 100644 index cdfc5edb2a4be676f20dfe64a0ac6acd5737d24f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8180 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 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainertools_impl.h.13D5DB46CB94E3B1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainertools_impl.h.13D5DB46CB94E3B1.idx deleted file mode 100644 index aea83a5cd4effc3a1b9ed7541dcdd1364abd9bd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10560 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 Mllii5z1YY90VuCzF#rGn diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreapplication.h.9495311E207C3FA5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreapplication.h.9495311E207C3FA5.idx deleted file mode 100644 index 0ea775a8452c7b95b2cc4dd671472ae638f6fc05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9878 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 Lhbcd!m7o6u@@=?@ diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreapplication_platform.h.025BC7505FB180D1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreapplication_platform.h.025BC7505FB180D1.idx deleted file mode 100644 index 22072b51fd2bdbc612ef25e54af686be65485f2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 496 zcmWIYbaQ*b$iU#7;#rZKT9U}Zz`!63#Kk2=nU+9tFi6YHNww0~*U!k$P1R2KPVakds)FmS2=hnW^bH`ALa6l$ntS^j%qMW?o5ZQCebhD$p>7;>z44Q0Nt< zrWLyaX<3IYwcXpI85wz)oEV%0zyS*+4E@*tdp^l|9#B|;K|u&6>>(!`q`EZuJ|hsiJSlc diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreevent.h.97F97F5E1881122E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreevent.h.97F97F5E1881122E.idx deleted file mode 100644 index afefebd3833c02d6bb131d619bae79940ba97fad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34650 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 EUn{s@0ssI2 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/local_lim.h.2CFD657F256B117E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/local_lim.h.2CFD657F256B117E.idx new file mode 100644 index 0000000000000000000000000000000000000000..459a6cc1b414688fe31f78d0e1f5f6ea67e77ff8 GIT binary patch literal 688 zcmWIYbaPw5#K7R3;#rZKT9U}Zz`!63#Kk2=nM;5)7^G$9q+03g>z5W6>1XC8=aigQzUl~w@B+{}_}ES!76pr^GfxTfNJ$~@{<#D;(;1T(p6BBQIwjP z5?@@Bn4BG-o0+GZQkj>So0$wWrMNOT3FOYA)U@Iij0_AZeV!s_XZLV1axpn^IB7%t zz`($I+KSCIT~(OV7E*@?icepiL5-5^zI!m^9cm;CjP~XHM92MDrI= zksPNSl2?q_jo@A>O3g_GnOa}ESb29TvD|FNIO7)X6ON#Y#@{<#DQuQ(ziYs%IKzfT((~2X3=6`SuzsD(^ z#Kp+PsK}ux2r-v|;m}OAJB|{o1sQo5g?NR;V8WUgG#;1kXcY&l7UvL$3s?093#_`Z zS_&wv%AqO^Q?0aM!K8~H94IWsAq5xqcsgma*xkuHfWk@~N^oHT%jfpu zMJBg_!YUjp5->wHH5G4Ocm3L3ps*~5EZl*>5Y9;isVOc>F6IU?7;pTvT-wO)qszbm E0Di(?e*gdg literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale.h.F1B51844858762D2.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale.h.F1B51844858762D2.idx new file mode 100644 index 0000000000000000000000000000000000000000..4511de7eaacfafb28aadcb46debea67bf74776b3 GIT binary patch literal 4820 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 KQQ^2t$o~K%K7=6v literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.h.9512D5BF9F8BFC78.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.h.9512D5BF9F8BFC78.idx new file mode 100644 index 0000000000000000000000000000000000000000..c093551f7967b4e1b0691ba2db94f41ddc940d8c GIT binary patch literal 7392 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.tcc.A7CA62888BCB33BF.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/locale_classes.tcc.A7CA62888BCB33BF.idx new file mode 100644 index 0000000000000000000000000000000000000000..fe2308fb5e54b2673d993bb3a3018881cf98db12 GIT binary patch literal 8078 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/main.cpp.EEBB228B1106B2B1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/main.cpp.EEBB228B1106B2B1.idx new file mode 100644 index 0000000000000000000000000000000000000000..294cadb51e1cdf306a96e921be6c0eef3c1492d3 GIT binary patch literal 2154 zcmcIl&2Jk;6dwo2ahkL#4Ij&Afl#n9oxEjw+)`NFv+?iR~ zk+_!=Hw2szH!fU2y;YUq!m$z{KJNS(mEf(NZ3r|`BEf2RcIJKj<~Q@+o9VW;w)$Cw z>RxLSa!b<)p;h>d)grY3o%q2RUQ4ylZEaGmxRt9o5HgxzUq%RTc6#ncyS?4p=r!D} zop!y~+HU72`I_re3o!l2a@Wn}sFcc5%X4d!d_F((t8aH3?#tSkhA}Fwm)MPOZ|! zfR2;fmK}`QD2Pn_k+G(u5%)Uw2B#j^=KsKqi73sFfi`RaY{`0Q{T=t#NDJwcv5=k= z@&ihYX2g#KP_K}FBm$3Yax=7Q?sz7TtYCw1V?fx)mUPt!jMXDW|9a;n))Gy?TGyn;h1Wmz>(%l~1se!9K!1!eVBD za9FvDfS9o!5IgJ@3J7a%RHR{kPw3hylPwT^KH==|=@w9kD#!_&_R3WRYxinUMukH8 zU4$p-80<>1S}YNtF{r&qu{?uql6q%zX-48KgkX|g;lUwcPURI2&4@Dt`!PLAV4II& z_s=Rm&BmU%N&ii$72zClr-Aey%ly={gpjmFHX0!k8BO{^&eCHxObU0ZI~WjFD3Egb zh{1u3#H9lD36x^6#Nl73_KDgf_<>?HNPrN`jP^vpuMu)gv>unLhnYb-8;7UUNl0hk zy%T7i2`oN!)wno7aa`ag+z2x|fZKfAw+-SaMzJ&j0 zKP;{9ef8_5)N*NlZvH~z_U+HX{Xg&3D3moBb6^W0o| tej)qB;<+W~73Z?E=Dg;->g1ibowpq9yzUg7+*40Jy?W{8;)|&_{sLQH$)NxM literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.cpp.11CF4E2CF1316CEA.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.cpp.11CF4E2CF1316CEA.idx new file mode 100644 index 0000000000000000000000000000000000000000..2ba8c9d82212347be7a9ce421038890076bd1aef GIT binary patch literal 2664 zcmcIm&rf4T93Kix3$((z0#9*QU3L++4$}fHgrp`c6zql{0ww6h=k&edb>#ghGxO3C z;~uEvySEVSVX){r;NId}hAi z?_@R#i;M4fBQ$RoY7SGh10i$?Ua17X6$2r7FovI^!eS~{o5||gDQt7suVKse5nfm? z>T|2BYsI-@USHf=oi7&FR!3`NIbEj;U`oDXx;{EeUDs1ovC-k$*w|QO-2B=`USBTU zY-mecg{HE;vaB!UZ*DC$eA|VErF?NS^y~8*`MKiShQ6`2ig1CHJ%2mi2N~AD|<#V8(B_*HRCRt!|S9ukEUFlhUMo-}dR`RVNK!=ss z+@Okku1hN@EnJ_W+NmtRs^*i3fmEk z3yoDOfR=^5N&tZH&fA4~_?nzrt|t{YB!JnT$WgmW_hIlcmn?f#45h&EAt@{sHFhD2 z3E>GSEr+XII+aR+$)Seua0&cMP=g&h>mDX0wZOt$OOq-WD=<8Y4X^+cLaW!~~E4is(B>Rxr+ zs8kT~r648lHj1R7hV5JT9V)~~CP_MdEa1>af`)-E1!4hMIN(2L_o?1v__k+II|M>2 zz<9gP_=q?=i+~Z@;WnEk1GKqL1 zk?o80wWGt!#*YtXKKbVNyN?DUoLT5aaK#A^fUeFSW!O*vS zNA&c3_}8ybOn3E{pC0kMSN;slBe7J78~(R-ADaNdy@v)DHn=Xxr9emrpT;v03aBmf zoAJlJ>3`ncxsaVoPfnohV;7ogijz&za7=p^)ax^^$Dd2QG}JkGxvzKN#Yo46Xso@f nyGMIfdqo@8u4=DoW7-?q4GnA8w4^rr!o~he&tFNs+&1zr@ArB2 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.h.F0118C6BEFDCBB46.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mainwindow.h.F0118C6BEFDCBB46.idx new file mode 100644 index 0000000000000000000000000000000000000000..c82ce32adb4f13e8a18f1d29d8843d7c383d48ba GIT binary patch literal 1186 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mathcalls-helper-functions.h.934C8C52064E404C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/mathcalls-helper-functions.h.934C8C52064E404C.idx new file mode 100644 index 0000000000000000000000000000000000000000..2987498bee596e955610261687a4cfb1c93a563f GIT binary patch literal 380 zcmWIYbaN|VWMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`V|&t@n$BvIhlE-6}stprTR&kCB^!=i6t4yi8(pNx*4fC1*t{4X{C9|C7Jno#d;YG z#g(~9AoGe+(~6$}>GU-WeZN9u1lV~Pg&Bkez*YeX9!7BnaU`A$gA5W+fk6R@r^29u z#M5BVK;mgLXv2AnbGDszn13pd189}HumO@)D&o2bo{W-=HiD<1te}J7sVJ!+$!Vx) qAnDUE*04dS)Yi~8gz<_}a}q)9;-chYZV-b};oHP5!AIjb2OS zkjnobN&8u*^0P&eKeJi&(Kw<8LqHen*%UPrGFk*`QJ2lCL6MrASbOQ85`y1*vcqE9cF~w5u2oty~R^ zsqE5B;Z6Aqj#S+STAerbS1mYK>ndpbkHB+1mi=SfzI@e5b zE-ZeIvFThh#ksKfxt0zQxGfkVQ&0khl7VK3z%70r)M^lD$P{om-=LCkFq~${6zp(z zK_$JQk`vj2j}4@t!bI3+6{&Dj#wKWtX%+hz^dh&Gjj4#15I4hJ3Z1x<9o7c`4K zF1y)m4)}fMVsDWr;B=XTgKPyhYr3b{8wjS)@dnI=#bti8c3p}b9*;lW>+tzX7iP=_ zxAw||8*|_bu38Ra)i!}bzIec2UQ&1;72>L;X2^x5f5bBAEz|9GL+`pHdxNKQx-l>lL3rpKEpmuT^gqmN zmDQ7hod_wAf;n`0Nf3;W8dlUT+mgZ{g9yR{5el=5I_&>3`J$Y3N9M3UWJ79nPxy|nYT>r*7mAcE**_g6%c zF-bRft-V#B!(ciQLk}QNJ{lM_C4rn$DmX5kw#8%6;H5P2c@t-1`j15kZ8&KJZTdcyM9t zV8coWgJDFF_kk0x+Ly1Yf63xxFg%h#9-dB%nUNE7b1s8-i6BDIEDryDZT_zxUoU1b zi3p+(UE7LTtUP$EW^_ZAmq8X0WRkp5MFpQss@^qoJ_8#O9;Dtq18xJj6$lx6! z$ScQZap&|H_k{dCNEku{(I~w3yv)kmkIz2odnd?Xd?bM`OpkLJUFTgeFJmy62qH=P zaMF%8POVP-XCs4wL=a_mj1nKth8=YkyQ;jK8N5vdIV_%J^Kw|bs`B`^4Ehs6R1w!o zc<5QWulnM!<{Ad+L=YY@N#2L;&4C8zPSYL+Q-~m@NjC~=6BEyQChlkO1`&h@`gq5@ zSDCsk`@lg4ZxTTci-&mdP1&u_C!adZAfE_g7BudvTTQF)RgSJ_Fo6gn2kPXW1GNP+ zAKpF2U^EfrH2Ewh){eY&f4j@T8cCr0uqC4@y?;{0 zeFm9CkbU4Dd@i@YCOWKsQBiqDgE1*Y2GTr)6ATFwCZ$6-*^n&Zv{UY*eT;_;ZCD;3 zXvhl_LMnGW1G(cR%N=i_-0_iwb|jv<3`sI|sgO|W*je*^^X`5(&!}Z+h?j|DhDy;a zqE?n?GME&mS}@B?F{H>d(q4?I!lbymR7htLR$EKzs)I>WbucL@!fHLFp9rhTlWOXm zkX9nB7Do!Hb3(ePW0M*ptQJoisB=Qfhp?JA>7C9AsT{)UoJiYrFe#eO3F#QZYLz{z zzWS`zw#gI4^5SCRI)pA8kf`aLkdz^;HkJeoVRe=yTL`OFl33|rk|>1L4w5h-tmaK} zq;ovqkm!7qeCXID8am%36$q;xB!SSu zBnt?u9V9V8SnUZ(fR0TMzYeD79$~e3dgKvSJNO{x?gc$ zEJ0mR=a60?r>!5-KdoQV5*<57bxkIrQy4dg65TpRIBCntLPvJ{4_Wm3zs2{mD=$R% z{_klzMnnad=+Zs%jVWwEyXel55$z(P{uT9~KoS2cqHARLh_66i+vNs`|EErzHhF!D z4)#?jOyOf+k|8)_3gzFRy2$V;ghP@V1(am<7U=$Ib!9|h z{#MUU=#zuL%3@l7jZH4CkG>`k!Td;D0pX*p|CT0sRTU}zMN@rH$t$W4$VX3oxc@(D zDv~CrrNGve)W&N%TA}=#te(yB>wnu4>RtN=tB2{6N$#sZATT)v;^F7an|5jZte#VP zKda|t?ORGeElMsAefC5_ev0&O$=;+&oaSG3Nr$~jnRJw&HtFpDKXu}?$?KD^)pJ_f zSEFz9e>QyN3o9N%tym4XY&v3NBm+tC<&akyx)g~EEawO+-CKvX^D8WqrFf$H6f_i< z-hLuns+6FJJ_2lQBjK*qa0=+dlfpEXE0W~+>;s7Gif4i&Q{DT_g^JoEB&>ToYB@#o zl|)@Zf~8?|lW2L#S&>r7IWhTE?vPKO?b{GO#Uc}@61(>8O~SCibwjdFOd`u!W!SNU{ovbyIF z@l`#4#2f1L-xW_6nXKL=1M$h0w2qKcJxJ$l-oL3Flv%Oq+`-ile-=sg<>1V%a`$KX zbM#@sDV)Ok2@=givINO*L!Mf z3PE;n%X{qQH-US-ks&1X{udB+o)1JDTgmWfI3>f1NQPz)nv%i(XNNvmyUR2Iy+l1^ zD~N<8?W0I&Hs=sWaA582--) zl44|+`s0%6R2%fBUUiwtbgRpg-Qp7eOUK$^zn+B+tgMjM#Io_<)VsJ#^X*)FN9QKC z?I0p-(;wv5nGPiRzGR+XS2Bxx zl4<{UM><%aegvYdhip&LAaCx&WJaj7mlmmUz;f64k5Eh?Gq&~3vCFnB-27?cG-=uh zwei{rwS~*vWqjtQfE>FvtPj=jz zs2!^)iAy0-MBq|58xE0%2$V$Ka|*ljNDvMNr<6LGQfpL{K?&KO5(P!M*Cm71C0kNO zuov(Q6{(=XD7_ko>Q*oub4oBZ{QO|3-F`$-dKL)dO962Z`lr!`AG3YOp3V^iPiN@m zLLvV)PY7fvr|`;fF?#? zveSnSmF7bq4A#hpg!T3%QBK%*{ybqgU8ZlxX$;YC8eJ>R|J7@5O5aY?87vdJOtGjI z^zGkYkU32-<;ns~yT>jNgbL+-?_GeSS;V$;ryEgfAc;G6e-M3 z1D{}_><>r{mv&<38-RF$Nu6(p0GYvU2M6wCX5ZVH*;gus$_zYmiCM2w5?{?Y^umuYX{<3d7APqXi{>0|OI|ao~a0qs@0LPXbW;oW{Xxp`2xcw1o ze})H>iF6{b`die#sTqC|HF{kA``V0ed>wJ)4RWu5$hV<)k}Dhq-Oc_8bv_{(lI)!93rM8CqwNbw(zau`{Q*hf5_3}D zfItE!alRb_B44>NKXJl9B6Igg-7erk^#`YB!MO`Qoqz@0l z|Bwnku<-U5u;Cl=_LqHYW9_SG8y&6S_^rrJf@r%dAZ2vN@b1t!>Y`P6NPF$3RfG>0 z365w?h68GkRq32dmyB{?y2KBZ z;7ph58$r%=slFWomd@r-8*4X8O+eqJQuslfQu?5r&hsJK<@Td-QAo+0nozDzW!yWv zO<0I(X+iMGMYT8sgmmayt`7FIekZd+u2v~WE%XFvqOpPP!UBM^V#%_(G>J~PI*GMH zJ5roa=yN*@ zrrO=)T!9R_h<2{RjE-TE?OQvaq3R1#+EhEGa|J2sBHFovlo3%zM_AN`LOT2cO1B7D zfI44cMyJy7FBJcSK>ITqzd)4zi8lZ$1OEVI&))VY(CvBK{=^#qMZiA**^6@f6X^Cz z*Z#ztFe9ujs*U{_s=gp!=N>iHxq{s3LXjY)(_PM2tFG!Egg70DQs|1gwn!pJGaWN< z$Q8;#}HCKE`ij6>(RLMY2WPAJ%%SQVX~L9O2HYln(WZ#Z3{zOby^OKvA| zAK?`UwR=H*K{2RP_zDW+5V5j!MZ_=zt*-r{J|SNu*|o4QAes7(wlBgA7}oed)cycG zUSp;48_>>|eGAxjAzfSd!rHl4kdBDhWby_Qxh#|%AE6%oUX&XGOwf2jQd>F^qhhu@IG`Lb`r4A?7%bc|>V zjpkm3ic3h%bd)0=MpofD|`npeAzs^nD&;&zU_cX z;rzz_#7g3wg4*XdHo@*w`^XP&L39^5)4~r(ho6|v`39MIfhBUj9YUA^Cvo^c)cycG zUSl@+4QS`fzU_cFP$K)&K{_R}2@cjd-a~>d89wawi28!Gw3y*5kWFhAz9J$Bh>Qve zi|mT_g)c#nOU6oScaWBuSS)!bnNm3HBLomP8$P#MF37hV$rX(hEiZ>4vjYm`*tL5^ z8|M>pz#F^#>H^^Q6-rVUiWFvaceV-i9qL{{$rR5n6J3K0zKo`8SB^`84T!?oI}mX# zAS}$;gb*ss=n>hmtZfm0bi8r9;y~0~J3N?&=i*H(mMyD{m#^IFCPk)Uh&koDjVWl$yelp7# z+f$yj%-L4TidQoqI61L20QY!YV7zI>o9T^!dFES2ob{^>-1OV0Kfm{7Spbe>iE$S2 zLE<=Tpy`Utx1vs)wZWSKc^!X*jDJa5P6XgxmN>>T#vpK_>2b4u z`Mg%em1_~WfvdgG^6s+&jkJH5UmAlwPPL~W4qU&+yB&c0xiaw{Bi;iN&zYYaKc#el z*{^pxG-dZd%WM3}Wvpq`%%C@8=40I>Z~SjIz|L51Rqk8HeV_!4H%;So3a4YfIyiFT zz&%%hyfC#3yl8qani-6=cg+yDgk@v$4*Gm*evj8!z!@i6Mxq5hh^;tRHO~D9uj*tP zI}U(%xhm&P<2?3DjMc;K>d{|+93N|GqaPiLp9EV=+4z=9a#jx zRScYG8uL(j9+{yoFe*M}dMj6nlwRWs*LtdHOohs5Wt%^KyEEZAAIZc7g)r;*2OyxCRa~Tg?#$hbuTC<4T;F)es+4sv^kwXv_!*GCrv z$`5)}BI;9s{m$~nc#JU~kQZ-ear>q0ciukRmNfxj5*P8hWn4$?-fWgM=39>L3>~+u z$`2hTr|}wFSmHj**ylT5GN-BV>*DYY0Q{bHXRzfRjKkov`9D|5Uex(>|3^2Uqy?2= z;Aqnr?bkXfcg~IbBAb!kYYgN{zch`Ps65Nfyl!pk=RH)S{=~KbJjWvI8g-$$(Lm9V z&e-p6v1gqw18faf`ka;HoR!x|`gc$0yY@h@goxAWExKfZ43uL}S;k2CIMbb|WI_PZ9D^5fFMdjK|#o284< z#Rv95i<3(eMmz!7FgA&C9wQD+TEGdjwre|c8y{7Sn7=B}Yy8aeXi~H1Dze(kzIp!Y z-fxcqd7RBdGou;gtl>glHyPL9RFSu!M_5_oEh8RPVX2wRZR$c1N3ty+TO5Ex{mXd7 ztmT%m+Pjzfz54w_0G{D8#(IocY;0*{kNuS`<*j4a0XUH*Ubc+OnDr~Ov+;u(_1}6H zzK)NI$ONs(WgKi7gApi)RNwT*^0hr%WQOM9UfE(9TM(#CG45V&-f|8rgL3xTgGk7c?L|fRF?)fpHIAe zZx#SYb6sf0*Q{~Dx2`Pe)@L>#f8ruOG`$aD?V`<-L;GgjAJP9j0B>-uV=N;E^OnOt z&6q*&9nA6sfX5l=jFwn4g**DLPCJ=m?Y6hFdW}I`L^6reY@f>WuzAQ&&9ixp2Mnxl z)c4h~PhJmCj0jwr9n_oiy0nE;X0EA(^{uvw%unlZT%z% zj8x9sS(V78!Nk`;jf~IH0AMFLYp2Td%}lOx|1apk=}z;%1=!D=FD-^nnswZ9|KYtf zYZw1G0f0w^Ja0J6D!-eJ-C1SH$_X{1f5{o-H5N0hm(dGaMwTvM+rszGRV|hiW+@&j z*G%IYPCi=04D8k7Zq-|p0r`NDWQetfsr^y&8MW`N0pu}mnCeD#ABFue{omW37#jdK zmun0Qj+Z#sOQqTS`}qA;LQezm9#@4{p3>GO&a3@&_PxMdUL%fyj!BdwCFHbeUB5H{ zU@Cd!Q2z8o&nflhS54ruD&uJ?y)s!{R03V;fjEj zKaS&lnl*}t)0YE^H`^1tEH6xtEOLfr%s?de9j(dtob%qelPOg`7gH0O6EV}{3j}+OwOkuoYRkcL z^OGMx`ZV7n050P)(o8ke3~=q&jR}ierTw@;ey=f!fm9i(igl0AzFFz>9svA-%jjsV z?C9Br0*eL={{vvd8Ac1gS=Kmi@79-NdaP;tWkIj8i0jhQXbGC5O}d4DT0L+`n_7ju z#zw}`GFIwry4P`kt=xdXgPb)D7ToqxE1sRaw?b0=+5jBN{W95OO!l30Ur*~CH*RrV z0B+~TS>nmO#1m|!y=Z>nszlhV7l9*QwFKZ*mUz}Q&iWbcBl+tl&8spVkb}68WZt)$ z)!k)ShlslQ%2!?nz{Q;RYLBrRx13MSj_$5%(BnHzH-6$N>@`O6Y`W44SZQU_SMS+x zP3XIC-Z}sd<*cb|4w=?wI+J+un_H zd@%m>J#SI3aoNAUr8)UFLz95seLn=?X_n}0FJx8v23Nh+B)U7m?lR1ooaKN{YEWm( zKO++XwwG0rR+Mu1J=ie3OxI`o0XUy)>;%A9+;z@=SY~X_eN?mD*$99=<&4`JZ9&>b zvxKXIU*7uqd{SVG;;`Q3Y^jH3`xO}Yex0IUS1JMWINPd5RZs-kerf6%sfSkT3a~RQ zPgaA@gbo+Dz4b_y{Q#WD<)aB#uBz(a%zbH5{`&wt%fOYUvC<4Q0>)YcT#acNH2STE zyC=O3yJqg;1dow`sdd4;cEz+v@?ik%3bzV+tzkL~95eu$DP?B*tud0Lb|~ z@Gh9f1>ZSsQQX$vyX%!I30r%vHtD}?AMf&anjh-&F#wNpGdi=l?7gtaE|WjHI;oTw z_GIodd$Z}?43*Z7t)fah5r9jk3K-*r2A+^O`v58U{! zJnRCvgu^_>Fq{G8g06IlABHw;cNBn^SRx%+$vS_SzGm=_=9d6Cfy+436EM;fr1!}u z;dM^T&r`jE*BHS-8uM~x)pLErZ;Du-zYh}t0~1Um0o6+y2e0>?ZyS_e2f&BidCuxy zn@A^J`Mc(zmq~!z%9W;xR9hCW{^Gm3n<7V7^csU%v*SFO<2*3$oi;yl+wl+YJ3)StR(|I+h>f&&^q~Wd2G3Zszh`w{l#!^6AG$%OW!_pFQht z6*!t?AWh)%EF-CV?X=zgcmTl3+}N~Uk|r@z;)k_Lm3s`p8M2JdCU=RM)7|7I6fnLB zce!DDV7tNzP)N%gcCMiZ9xl$W|JGhWb zJjN061O;64ESnSn{Bk%U^SspI4+aeuemat)9xxUU-f2{qSI<=Ov)yNTzi$21%UDX8EXSD^V7;b6MAO@!xwtZ!ey*+}x{eV|xJd4@T0lwpQnz-z1(qYrO>I z1RgM#t)R;m7#%#~r9nNp_V!crsurpRio?}$&P5Zz-rlte80nV7s|-DjStS zzqXj~xNDqGmi8#Q{ZWArVL{H>(wg(U*}xqF>5gsq@yVQ#06fmw(*6*q0@@$8+Homl zOt(D%T*X6x_FmI1I2@vL$8_K9INrMdZy&*Y&y91?3OH!NsFKg04*v0IV?e9yA45m8 zNLrLEHiO(sAIfdKcj&}O0M2FLDa$y88+_zZ##eHk^HM*3KGQj+W0Rg#XpyU}k__V|g)_H^$1U z*SXQ0C4Vj{U!)E^8Q{jDqfx1hUp~F_*Tekp18^s2OxA8Ltcj>&7S5=(HUGtK09?Qt z;Y>oZ#)WPc|8AT40ANcwW9N8Ynvr^I=S{D$yhL3vBb+TYwXE?MAq&nM-DU#td#-Vk zWh9~5Mj*AIG2?Q{7OC$8a2#h$CtPwi4fQmSxHzeMJ=p1T)}I@ngK9r9I~a3P|7Jg| z4f*h+h!*9h0_;4?qZX7ah$Y$bE%;yG z1ORShpkwE>DW%Q_>l-|naszO%prU-c1a<+=^KKv}*-sbOr3QwGQ$gi}Fl{iSG z;oP48hf*&}w+0}XbCTyw0CFs)UOf4m)kV{O22Y3>Ry(k^Pj%~l7n-=Kc6NZR=hD&P zjaHAU+qNX0z1jkhqx=gfRkh{&Wzv_}mFjb^F`GpWGL1pLTkuofmu*gNtqZ`jtTE04 zU#e=w`5ki?o7oUxTNp;WBsr9-7XJNizlU7_xQlg~9v)x`>8vF*rtaK<7p?$sAp@Pm zU0IPL<||7ezS=aibcN`KRT zWlaFy;k@Y>SXO&c!Jdsud^;3?>$x_LV#~VZnbPUlw{s@~>_?W@-e?cwU0S5{HGbb! zEowQy7Vt1mFue)B`@%Mv?!;#reiVTJFpv(RHw-JXdes+I_5tum&bq156k1UZ`mtAY{n(=LOMo5a zj2+`T$r=Xl3@GcGU{Atl(@6{)1hPMr)dFO6_yxl2F60mXe-HFe{R1Nwy-h)r*f^GhwRdn zeDy`e$!{;s+7iqxSA`yv%B4f@Nxw}=+q3}yr})Z~hOUXH%GL1Q4FUFwVf40)RK?0O zUiTi+>o@?9^XPM)$jS0eTo%q(z6EvQhM~=#?B(L6 zo{uO#uLA&AbB*b&Q=6TiRs8z+q^$!0Ih^Zq-3+`AFX?EjrSCsGGrjY^2_dj)=Df)$ z%1WQ=ob#)nCQSw4-&`B#)K=DIaQ}AMVkR5`*ff?$&*9}p^V!W7r#BzC4Zx>dLVC<6 zGhVsvhg~f)SgpY{aiwV*N25s7c&VO+@=uSB1KZDoVSI?SCzfZ{A7S3fj??fvg(f4sl$bc+8du<5@;A^f6O_K5%!`_Qy zH;(_UKLG#XLXvLFZaFo#R_Yd$jsfrpXYI@^JI!+L#B#Pl%4=(9J^)xESLLEla@6UL; z`1RTVT*a#B?2)uVF#TGwk$+Zf1-J=Z7dVAjhlYE-S&>PT%s`G5AN8PE`b8@U=y1DpEHXDRwr z-23HsBLH@Vs{s!^$6?>ekrGoW+nPDSYXNwbm4?nmq+Kd8YW7!M?q}!-`(*|W^8^g@ zJy<@s_SmU;`GWvBh1G`ELH0Q!4S|MJrVicndp$rd;7a!j?B!FJCu^f~4!e30V0*dB zPS4G-#_%b|?d=~Q9`V;Dz`?{#yCgbwUt#8VM{|mnbJtGm9p4F#ml)_Qz+~qoHd{0~ zcbc03gPjM-a~=%K1!AhAao)KdgT903p4`;*a*&*&vIj5QzOYJV0KVetjy3~FgI;NK zh3otDw^?eRyMAI5A#+)^%~vzyXzm)^dYeaOQ6;jsE*T_6)8 z7eRIRKYDLdKvMudXMyx`qwJKOeTGioXcdisDT)mUSwnd?F}h!xAMStuJ^&|k)})5g z5Pv@Ox99Eu_Za}6aU0SrA+n6GXQlag(cxGC{>b{UPrb(~Td`m3g+Je(^m!y46>}@n z39ww^zq-@*%J`}0063p3LyH0_@!0A|?;qTrwlnOn8AzsGn|~tuHhFQfSj#S6V-DAb zPJ?9Lu?z1F9b39wSLkYPac3_lwL5ZbVxzqWVgNRR<&k#FDLn085l>$1F4zr@-MEPK zKKC%ImurZl3Qs;aC9WI*Uowzv;ytsqI|Wo*zHs=D8K(m=E<8+nd$u42P{ z5qGmh!Ty5F=&aRbjc10;t~4}bet_NN{-cL&vbB5Hxi{cQWWDZiCdojuiE^R6VRPXM zA+>%0;6TopUb@p}-0xpBycnJU!0TKUTE=P;Q@mTa>+e<%II&`_rCo!3{`2kZ(>)e$ zYXiWm{yHW*FlW8TlNOF%3BW`KI*&KxxH1OZ2tL|)ZBNLU>+Bdi3A1u^%Jg=-BLJJu zHKxZ-+R$IxU|g@YD_cgxp&uiilO7E>DyU1RuU3Zk0)^#_>F7vi9hdIy`BUb12H+SL zxX$vf!v)iIv$?A`#aDhlwf*WS0N&vmleLqL{j@@h*abxr063c^(pZsM|8Y4w{mrIZ z5y-tli#lye3w!Tg>1XXu_J;EZ76}b+|NKFAOSKPQbqH;E7Jx6f+O#y*Ms%fK8@g^? zle!Nqd08Z#x&LfdayRZI3jLtL+%eJI3-EfmIf+IDMtkBml1DGSZ3E0keu*#?fnQEDE@_ z5`a$_NXAy4_0jZE)TppyOPd_JQqv-hs$8Xkm5l z=;SyT<9ezYIMsJP=v=;bxsww+0&t&y8IPMEyHn9OuX@$IY-|PKU6x3eLbiAR z*r#P*Mi!2Nr62>H-H4oFs-MjC<1ekt0_+gOocCsAMH-|EI=VmO2LQXplUCe#4=k**?XqU*bvI_|N$xpA-n50>EbsBts@=)q!UkTsY`?0>D8G zbl$1ZhSke_VN<4DuRH=4t6Ud4w3b_!LOb7!`Mkyu0Ip$y^c+KWi?Lwzt`El+9|`B> z{>?bl>gjI&rg*NLE!ggZQLwmVRiv|CdGxujdbNo+j25Hey)c$Y)3h{WWj;OFX!g|Q z035;+X@ww-POC9lOW$ho9Dw&&bx0MZ87n(4>#25A-WvlGH8+p5^VFL0R@t~aF(32; z++)s}EUjE9e=+XCv!OeO0`L~+Oh;In$i-PMo&EXoW> zoHLo6F;;(fA6EI~-I`-It{4X=pIjB^J^vkMSy#DRtc>oyx@^q}@InQ{XgefTaeicc z%g?g31mJB}Zd!tlwEDQVDemUycW+dg2f&G3LOL|qV^(mpJ~ejEhc#Lx0&p?+GwomG z*-P$^+CAM@+&dATPIJ~Y_iEF5*s}7$djD6GrLITF1NbVqW<|G0&FT*njRa; z0|9Gl-K?GSJ_X=X?i6QzCvDD;rFVF(e6?c1l=u%8*@#mrqNB#iVPHw}8rt#44C@#&b)mQtyHDW3}$zy@ETHIv5?aqC_ zG)ooxu*paOp5-#qk*1vc3jT32Ux&S8r+JOvIB$C21SfKO_7+#Y!Na0=%1#F$OC0D4 z80hgi`(M$qV45+hJ^~=*N2d(*eu12=R;LY2`^%0#0DR0@JFf>%gPPNsUCW;NV!zI7 z%z(oKt}~fBDX+(|pPw)JB@loYIAf}_RK@o?HOm$;H8%j)u;w_=L*=0QboYRH`3ser z37as^m=r>;an`;%S)xdR;92lC8q0GuQR>aG(=lmxr%XK?-V#q<6X~bU{U%?{Qh9h` z01o4Zp_e!1Z1E&+er#N$q5#~_H9l^6k6ZAJ?wZ-mUFsKX_RhM^c}B#+u;;4O53KLA z&|mnv^|0+f51tGAKbGe_wvpEB`n3j?2Y+wOgS9qGb6y3N%~EP!!*#36cLCT^t_D4r z&}_}=&ws3*wdDgq{>eys!BZa6ocg_X+8N8=nhyo!CM3Iwqn@6&&pEfDU5$fwhP7L;b9QB zqO;kS>eZ#_y|$y`R{-oa3v}jN*@~-XWD1MzcXa_6SeE9%G+R@nK+OAvUIs0MEhksx zhUvWlzp2xn7ws>QG~OH13V;h)pi?~A$*b#Et`PnFU;^yr7)C2UX+e&iN#F0-uJVgu zwZuR&hq5LY9%t%1<;`Sz67sDEn^~-t3OUg_C%iq&?rMU&L z6|4-j2a!|2((K*ml$-Y$fWvv7r)S>3nsr?pH}Cz%bpz*gS^^6Ku1b%<9zI9bBOm@~ zg-@Fcuo0YboRuxkcWXHI_>>M2=8phe#Wi*wRP8n2ch@14x}RAPKXE(2VB1I*lh$Zb zWeWECVn^EVuLAH2myeFFWD7<%&%UEl;XeTQJ!ec!EiFi@3SSL0T79$>HdEZxN$N#f znf2SHo2)4D_NM?G;opYx1;!MWADN>PvL(Xw&5c97A{8vd@8dfMtX}}Y7o0WOb?pIE zt|c$O|1R(disafj&A7oV?#_8P&K_D-vTNsM@M}F5=p2`?F$=pZmYyG^dOvj0Sb%M1 z7%gDsW5JG@5B@OJs<0fUWv`u4? zz>8cFddpa@+Ba|8)hlP&`vBa>9ZmZ)IR?)3THpTdgm+fJ;|b0>PI*ef{-aZhm+!`m zo>ux(0AA!;k2AgF@U0zr+^4*~MMBhu>TM*TiSjS9y(1JPw@a6H*m-ezNtQk!QNB zh8GxF73p;a**FQ|A0*5wS$qvVgyj;_lWaL$9xw0me$ioX1MnJWJjV=}gTL#RjdP-9 z?mj6he!LbWa^pA?q|A8wp$ZQce_Lc77%kcAI!mAl)?hy8 zNwK-XzFQ3f*2A+j&eyTo($L+jx$5Kh@0SMHB5rBt!HtB4A1^UH@6(nWU@Bu6?ZLH4 z<U|H|uh~27DB$3|0ug1K&d+`ofEzepT8&7rD>oX{pLXy`-p$a{+&Z*%l}8la zzB&CUWr_v>+{AtDyi%d{bicWe(?7r00dT+Y5NH0>qnESB@7=Wf!e zLbcK}7k@V39{}#+Dw741Z8K@w)H{{W<@yntnpJFy<(+~D|2NGRu8RGdDq;VoDT@F& zn1OWIB1dz>CGS|ZoBs&F$6OWXC`x8Lu=}g7HOl=Au;;!oIhGsuD^jZ0gDzX()QB69 zjJpJmsQhYauKq~?T)<63r$(A~wLF&?n$YwgKqhi8hj>H4*xWF`ax1)OUbQ9}Tjkmc zC;r@o*VWG-q$RH0A$3T*TDt%k%SEKu3*@S}<>9p@?v*$Jz#H6z&ca=8RGw8Tx^d{< zm?W5QIpcYz{r;k64nLZ-bmF%2aR4068Pn{88Pn{us_^W3>nq&`;COBuGTE9Q*8SzL ziPxt#*#>JN-y+J+d#_H>QQt(*1=xIs(UTYnG!LxZ_x_&D+hMlnUUudb*?Ga~jX4`9 z*8tc(t}>Y=sa#bHW-;gViw58`t}>~E%y{zPR}(JmT?#;0X_9H6WwErz*XwDrFXZJQ=`VD|9SfXQWv?ff7TKLYaU8eyT!|FxbM`>dBy*2V$mc^BR zg7^M7XF4c*VTQRA^UOhQnuIji1;7~YK3YJ_Urg5;z2>cF&+Y?o3Ac_j0m;_xoViEX zouN+vHit|2(h7L#dlr;bW5I=~TiWk{Gej<-bDSpSZ8vKjnOXe@fNf%VWHz-Qw_U%s zXK>$^op!=$5F<~R#tB#k1<0SG^)9*MWQFnFcEM>7H#RM`Wg~7avTwo<`BLtNr5aax zi*j&-g`_c%KPF|>Rg-!F@H9(|^#sKFzK)snLC=lb25kV~AqLV*sO!w4?t*vP-Wf&VIY=_|gD`=j9~vzLoht{-E`O+0flE7Y`lT>BI3o0JxMT(lSJz&Hdi$ zT+r6Q#Q;p?GCHM2Sl#Eqv{1d^fLKG~t1T_TWF z;q`;x`Y+G+*q6 z14mDMwG3cexFXJLOtMqvyxV5b^^WO}!+7VGp=0ss@H;O$OU_aL_J}L9UIOqD%NuTa zhgMgUSyY_0b=i<&HX?mXkAWOV$dT;xlrqw%l=;7i|1_JOrOO%fn$hTmdWv9y* z`5*~^|FA@Q`Y4^XwV1e}K+9r(0`O0kNRMdb+0EhJ0}}V-EN~J=DNA(T!I2A*k@r_k z?9l^Zpr$mKojx99b#skP$q)Mt4em1&U}L!J=oy#H_T@*3S6_A74!{!(B*jL3CB?qA zzD0-XC$j$v@91$wXr8cFEHqK{@ow4_Qz8hEcUUCtm*pee`sp9P)w#+_0G?+cP2bWH z$Ma@=|IC%M{%`P-CASTo-D|6*^Em>SOlfc&kR#YckoA;jGDgC0v)QX-rvPvnOLT0VT+WS&?vUY=S%pu-QwVOJzTUn*=P_B2<=Pzkdvk!j z;na>nB< z?>OI=;#>9#KV>bv0>EtybcVgwcjK0hDu1BpigWO~G^+!x9Hi%wKQA}l+UkQc=V457 zm(T`WDtF&)Ij+|EpcMdTGSE5T(Q>YQ^LeIWr@8{}6z5EXz(&$27?GIso!A!V0lAJP z&QpGCrL7wsd$R1Qjy*1bb3xXx%7K+(2Y$!=mMzmyo@(nAArLcNUv>4 ziO**SReVso?(c9e$v~Q)rFhxovB@){T7DDT6@bfF$(;8IWSu{py?oRECQSp_ zMs7uCCm>b!=;fC6(>6Zh`Ay+SFXOya0Ywft3u%lvybq@2Sg0SZHQ*SKCj&`QT=JzLNkP%^6cm z%ctQJDxA&m?O!u)!y=VC+1YLWZAQ3?opg20<;2lT0CtwkN57njgP-%#RF!XGq2?bw zeGI^vT*6aUz$siE%f}!=6_?MhyY?Rdo?wa23lCabcdI$#o&I0!y91_^YjVvDyoSGt zk!Sb^u55^(o8~wG2XRe?cmjs_zFgAf<7-u#r7v_Bw!~aSvN&4a>Be|RPAt3vkXuG#_5hZ4JYfB(mynabXWfyZq_zc-O1bWW|EUw;_T6o7wlW7F?Vv?|}f-0l5?Q`!MC zh6@>Md1HN@o&=v8o~~N{jsX0Lfi&YkFx$Es@wm}|F@MGV3BXa@I&{E`7?<7T8c0pyw4|->b@7&tWJqaF7`|$oECEdyKn z9Oh)bb}D1^#iaoIjT^@~4Ex@S;X{qqYgbkp6>t-93EVbx)+FcW)SU*#eil;pB|Io% zf%FrkB(sKle)=F!k(n_=5&;NDLNuj0=aX`7*?;i6JDF<~`x_pIaK<#GWh{%iHM-__ z*uE|RCvt^pl_L#zuG)XLPaLuxfFrq6=!9NVv9C59%iC(!g@54Cn2Sg%cHeB{s#vGv zjjFBe*yI(wuE}{*_dPeib7zCcqt|v=@MtptXK~)N_|) z7PLUV*%Liajst8S4=gf`ntdwx?GLkhFMb5b<^ByR-{9@qF0|Xm|8Zm)({uyMsD7eQ zGRRR+6%~hK#~?>pD#f8#G00I*eHDj-!}zD6XfVi8Ykn$$3jcx}b+o296z|1Mo8(bp zUKED{ykHu2DyBFT(FHm7135*f5H3hp-L5zkvjuZep;{D&g0x^7H8m;@MP)&bI$lv6 z3d4dN<&r~jDDDb!)V5V|D9{RW)O@5k6j=p1Y7$T!ill-Z`z1C-r_d=#S8qNk4#i4A zj#?5c4#h@6jyls-914bl9DCQI=oI|~>FQaI;!wB~;!u1O?j+z;v_ZT4b#sz{J-JIl^SwM@P@8%tD3ikkwX|k}nx&YacNvsJ zZD<&w-u7jJGOCI|@m;XTR9F|qp@1&f`sy@aaVUZda`X~W$QIf zAjduuR4FJ53)1cPOcb5Mt{`2vSrlglIreO+Qcz$Or0Z==kyQL;QRo!p*grN=vM5#x z((OYqMW^5>NLP=66{mfoG44f^7J(jAEXP5z;s8M{^O&GcZWVzdsi0I{k128ra_sq8 zrJzVDb_(ZML~$rIihl_=<;j!o@xdx@rGx@aFufCC+o%43aL6op2)s5j;j~%sv_`mU zdar6p?wJMeF@hqkV7|ICQfL+AsAp~}8;YfZ9QE8^aVU5Sa@2E4#i3v+$kBV5qN5d}qjQ2Z0*=yM#!JHhdy!knly6yOBYsAm(3LlI4oqv@pzVS;qsCQ{52 zH3UJVMVa+;TTOs{ZSkd zOkqEZRdfm*f^@a!QydBuf*jo%P+$<`*l#tc6ch;r>AEGQ&>zSd!i26pI8)E^Q12A3?fqc`4cma^$F|@FGapCmxC?;?JP~ zBFM2{1W*O1h#^QiLR6#9CEf`A}Lt-Mtl3i^Q@^^ibuD9Q(N z^s!H2J&>cXNGOg6a`Y801@1tOzBHgn9mr7!$f^Vsngcm{2`Cl^a%7KD@C~HvYnVG% zu5R4Dvr~Zp(6L4(8&yB4^z+%uU-Mo`D>x-4rbY>3Y9VcnsvI z=V+?D6b}PAa#uqEFpzGa%PKrYyg<6%S`^{}Irb^HN7X~8M91Ztj&C_(j9u_Q2s zZuKa51af50Q?v-A%e~&+_dhyTxJ9GV`N5jV6*b(-u7F#)9)MdZ1a8$MK~+8=Bsjql zn4s^M0g>eVeufcxj{!ngY9Q!qdm!lBb0Fw#4g_`d#kr^>DJJNK0Fvl491zswEl#43 zc0lM;0uc1o9uU;gD9g~-C4kU3M?lb5nLyB04G8)i1q2_(O7f^DC!DQrcp-^C2cu9Y zlrAUH?I8seK~2)vX`NIA5!6>ZaEKB?Aww{Q-f|Qp1UdS-4Fv^3j=trkC?Lqu&r>Mu z2j;J$eW(&poDWQ+TPq6efgB%|RgpZ9BiG0jxdZ8XV^X9J%wGlQQ2A464osu#Fva3P zj+`kd_y*FYg`;R2n1>3oq4J>c8pu&mH57;9X`n29NKpU{N~b=n(VJwhiKU!2NC~gJP z^%kH&70A)Gi6T=VN1rh$6a{kR-jQNYAYDHlqF@vLvM9I&*0LhTlu&;ZO#)NMmH4{b z9jaHUJ+Zn41ND$u}D{6DZOIiqMaMD6|A}bQPvp639`{Qk8g$9f2JE zgo$EBU=>t|2$hC{Ltq*?xll9+q}#99DLjRLK)Sxvp?D8A#|ZSc8!VVxu4t9z&fRgO+0!k7E7C^kdxuie>{&`U30OSmE0tP5)6e<8Y zaydt_0g$dQO(_@va`eM6^8Sw;c_c&b{;?*?%fHH<{QF~yIi?+;U2({vKXPi;*pD22q>_t%bsy`Zob4+Px!K1Q`ihVI>SG$^ zPG6-VNBWpXUmTFQeOXT~>5-$aBS$|CO_^uZ?Jx1j z`_t5)%5%2;R`LB-S(PiEf;_P@Jh9vZXYyW;CA6K^D`d}Xe_THj@K>`GkRs7cmuTh} zB95Brj%tL{X4%u=j$i#jlI5Os%RO!q@_mm5SFgq@C^@@Fj=okV@Ak;i_Z{TU9yxl` zk^g$+=x4IzupT-31VbL`u>q80dQ~=ZNsnoCvqe7WF^zIPuhNjyc}ydpR*;u@r0csE zax3qfg8axMU4QsRj^mLdPi)CkJks@HL$2YGqp!Be7d&$GQvmY)j&)Qn-&GyS**m7u z2QGPcM~*y$Ab0La*Pj%S|90f)=cwec9XYzGB@gY$ksD=l$&PfnAR-^^NY^KKa=MNj zeHtYv>&Vep=;T!$+eJB3SM5S>)G>{21j%nYa`e6=N9o9sMuM_*}^ z`*D<|ypAhrM5C~r2B}4 z{Ci^xSr78(jdZy_BLCe;*A<-{b|XhWy&(_X$k7KHx#UKU-c#g*8#($B6gk~Sj=o>} zA#D9GHRAS148ls5&r#l;&)~K~jtcU&VvdUPwsKJA0;LqXcX6Y+M4Ki~K($*zI%^X8D!e}%5Xj7JLv{_`d_QYnKnPr?Qg~pmeu@I<3{XuWW zn#E$_eMu%vHFHeWa+zahony)dnP+C5rxD`KZ1HA3AtS-elAvXqU=~a;Wy7pA^R0wv z6P)dOGk86?9%8~~Gs|X8#%8l1{xXsgNoKAjvydR{HiLF+mD_C=+pSgZgqiPzmhD+H z(^*rh)j2cMIgN1M%zoYs7P(w7GhNUS7tKr;HNqt``z0;OH8cA)jd0z}ab0WV8)mi} zS`*$jv)$GR56!F(wN`&==6I>e7;I%3Y{|}!v4UbO+1W8xu^3Bs_HZlbaI2uG+!!mz z82Hti`UCwKXJs1)KT>8wtQ8ci35~Ui#cD#QSlOm%NoH6Ciy zxh%4R7HLTmt!#;!(3MuUl^S84m2I65q3}9O+K4Sy-Ywb__9UxNl2uA%yTi)2Lo3)W ztMD#O#y%^{KCO}WSq1l5QY{Z!Sr1xryd1O&9n^9;Y-K&HAr4!G4r_?xR_5bYZc(t~ zR)OQz+Zv(FajUW*oU(GB(z^1TRp6YK6HN<#N z$?+N@){{ThQ$l1L>nR=UsU!%KJ^3eVh{>MPlQqN)Pth43*@QDa>1TS}178@Gah?)! zo^nFyTu+9%yjlfByeBx`BkgH|Cx3#LZGxvv0<7oMA0%1gDYV2RN5c|N`6cj3ff1`c zSyy|cYOnSbTFpr)kOwY4^b>N5+<_c@&qkp-kfZM=C^QFh^utGr#ep1oq(i|skghKy zDcS~d^ap_yUIRJ$LY?Ai;L=lt(NHZx0W>g;+_O@|45aH%q9{ZLa`c5d#l%34&s$t7 z2nKTWUG@eQ^#VEiX#$10K#tx66xRYd@_7dZvOv0Al2hagr0dUnC{hJ-yI za#UCe#i4)_C`~^wr3ezp(YFc|G6JQkND)dJ#fZQ(`Wsmk6aqQAPEr&IYmKnXQ)n3oSAXP> z9&^-toE*?2M}Mn`JkDdgDo6858o8K9j_p}q(aEPg%92lI$ca4CA9&>Gc7q(h+tQp+(5l4b=^Z(`)g;gE$dRj0a^;S6X#vT1yDy!5 zwPRZ;7wsx&Rz87%Te)(8TRFwRtsDn% zD^&?@!N_$w z(shG9R{2Utj+~y!H#*X#UXwF)q)R0w@8?L@7wqKi980U5oU783dvi>qt83{zElWl$ z9J|pATDiy%&IudYM`>kNq&@7a+G$2Ioo=B zw)R`C{Z^{|+8OV!*4w{oh{smi$J%-IG*7{4+F{yCPui89V9J)9v}1MkH=)TZJ2sJW z#;y{P8+J^ipC*ypb>!&tcGu(kUmpKt$|l@VuJB}D!EddQ19nU!2QE2WN4hjbrz7#m)wsd zM}I|t{EZ_=&TZsi9P?0q#Z@lkQ5;j~=8s&6BS$ws@g~pEh#zUvrZKZRF@{Hu9K_9R2Mga*>TC zQ=YM@WXdNtrqSP3BPZC%k<$Wsy+*n|^^u!voGa9Mvh!bk>_fp>+M3W zs*$5l804E8IdbVp&Zv>Dw+eZm_UDkhY2?VdlYeQX%kvd-D2;Tf5#&J{>H63vm(j@4 zEgSiW#=cUnp;cdzQ)o=1+g0)cjU1`>W}<9BVJ!Xkz;4%=qDnckwLAK z3N<-|bBbKrk%wnYp<4rT>5QBmjwff8KlyM*j()yCPMeXVTO;z)j2wNWl2>Nr=nD^W z!;BocVIaTDNY|eokfUYf=%>NtSs6KUr$VljkuKN!tR+z=y2w|eAv7&-d+4*3~Ijy}f7u`sr#@+YiXlRODy8aZCbbugx| zJq9a0`3gq5auKXJ6%2|fH9470!(R?`(I3>KU*SyzsQl>P;&5#vXoz6C5t@z zVhX8!PY=Usw^q$rT_e}3Sjqub={Zx~&%oDJTpJ$WHUo6Nx$J4J8Pd^H=_ORSC!wFQ(C#KID2AIr@Vy^0kW` zeW6Oub&;bF1M;Se9Q~m;xz9z8ZaB$bE^_q!B{|4Nj{YE#JmMlpU*M7pT;#|@6Y_bB zbh#`bC$~t~Cl2yziyVF5O>S(Fqc2x>DZjPI(f#3&qgv$n7-Hp_7CHK%Ik}?6{#XQ%JKyK46h9w>{+a73un-oSeL34$8Ny%7eVRVjA77kQ-OzNWCDxtw`7Pk{q=n zN3S7yW<`!%n2{@1r0b9T$@eOjSh-wPB_?O9m_{Bhl5U6y!}6Im(Hu;*k4P zl%?x3xl2WkG|=Q9)t62VQIW2{@IW3=k#k9VR7);Tk)yxuOFmAKqo4kfPgAUma%HOO zLQYIEjc)(QYbkQ{O(eM~Mb1ITJE@XJeo2v|k4thyiX~9~M^zf~Jc=CK;i#gMt5KAt zpCXcPQRL{SZsRX6xn942-pA=+M$#uQAn26qCQFhayLx zO2}6za`ZC+@(qd{z5U4>`lZE1`k8sjIi)G7 z`V|&t@n$BvIhlE-6}stprTR&kCB^zBl?AEA`tk9(NyR0JC8_ZxdKnC)>PFTJX9HbS znVX~tbk4$^Gj@K|*XiMAU}j)oVijSP1rrRMV5c%Nu`(2;rWNZUsbu7Wr~oTqU@(<@ vox^+l(Q%+KBL|~2R1~NyClSOhE=n#I2Qh%50s~ARVh&xg(O-Fok&yuaRT)q% literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/memory.768AFB22B9D6A62F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/memory.768AFB22B9D6A62F.idx new file mode 100644 index 0000000000000000000000000000000000000000..4d4fdb221611fc9e190085bed79ad36cc3d17cbe GIT binary patch literal 2576 zcmb7FO>7%Q6n>i~ZJe5>ZR$3^?ZmOu{MAbgw33C2Mb$`=syzaDiua20QBLH3(p?iiHf`?Qdeek3pFxTYfOfJ%!=WWsm2UR zUCHLSeVG=7T3U8(3zraxci@E25I;jgC>lc4Bs^QCRoAPZgj24=h2aQJJX-T8r;f0l zG7%L@EW1>q9vXaT5R!~b%kY@AOyzY{7Md*=46?EOX5Q_7xr5 zaWU}7w20?81Jr7x{>Y(#X{xr_Y9hf31}nQo0}onjRB?1MZ@x-j{^gIZI2@aVWCI$BKtOC~#~yv3 z*4?#u|F5qr_pXn}p$`EysO<{`#CGl29RLQMYiB;X^h&lDCZ-|DhS^vkAcmiysl6Cs z>3a5q+08GHcfmMDV7u8sAS3{91n6fr3qP*06LH8O!0+%Afq+<-*87A6O#PiGcIH2O zy%&zk6lsp|)-ez(_ic94{_L!QR-0d3xwpNC)g@Bsl-434{KUaz}D*9_a97u-2bNH3eA!z zWq$4I?~BQ+^I0vPya*SG{5H!=5!cZZ5T$uLAp6twuV&`c5~6Qtu^U=iElk#* zOQk=VTtxhZJr_omS#<>QvK^{Ml^o4s6I9x{yKg;Uzm;xx#FO=*`e>8sWMiZ;rq1Ap z@BK4R_|4mxYeRz#?Xb$GIw!MX+f+6c15r4C2zbtQ5m?lcks~A;gR7~f*c$@(m!xu42WD0uVxVd{mKR~9I1nmdN5MQB6TQI ak3{M~q&8UvNJZ8Ik=on?Kq9h^MC!k%==CK4 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/memoryfwd.h.935D7DF208FDC906.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/memoryfwd.h.935D7DF208FDC906.idx new file mode 100644 index 0000000000000000000000000000000000000000..3eb1d97fef227f0df63e191cbee5318ec6f4261b GIT binary patch literal 408 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 BaU}o% literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/nested_exception.h.10DC70ED9F08D9D1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/nested_exception.h.10DC70ED9F08D9D1.idx new file mode 100644 index 0000000000000000000000000000000000000000..5c768b0a18634e99503459e098720b0b08f4bb40 GIT binary patch literal 1940 zcmb7DeM}o=7=Pbu5$IhJN?|ZQc5_f$pe-_>?yj^b zCDDC=P9yxWEXIr=TUe%XbAHTZF*C}Hi66=Q$c!;D?hoDkK$FFEsu10_oaB7P0cy-r>K-v zR6da9Z6vGd@>cq>-rzt!l8us-DoRN|3cx2HjfWM5&xq;>zh)1mRGAmTYM4)uM1;sL zG!Wx=rua~ZWO-5H1tN>%MBrnxl;D#@QHek;1@aE?bjd^=k)=#1?_qZoY1CU_(XmRN zOm&$8afNj71!XwNi-}a6BuG*XYZW;K5)+d&B`GpWqUt|0j7aK;3q`%-C?>{<*X?$v z71=E&qw%yr+|kzVe)_t*y4(>_Ron?_oVZ4A$#rAt{{hQ-dPBW;Ipbn7oplZ;)Bg%t zNP&(kCJs}Qjl7_sV?k1i$YE8I`w+BOj1@Y(rpe>!-UwcAUT$Qh`uuFP!2^6;5(PB1 z(UtDsL?W^kBeZnpbYPH>`59{ar zX26f)YtLRkQsJgWHPdS?rv}eQ<_F z#aLfZ2r>8r`LJi(&;;#E=FUtzupjNQ8%~^TI!M)H_OWgt;eI+1|2X=_3{@Y-=EJxF z41lA<)0Q06uo+anzB~2LogLqEWc4(qnXpaV4PY1wW73x#Qsme)9-RB_ddt_#)cX*29l|?+X8+au-wd@mu4qY^Cbj@g=FgRL z!^c{$QFX)~=>qRprEH?}smAZAI@6Hh!FzI(A@_`7_1FKgKd=TgPwg^7o-&DttLW0h o8Fl<}!8Nw?d^J+!sG?s74(<{9 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/new.8A4066321F7AF016.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/new.8A4066321F7AF016.idx new file mode 100644 index 0000000000000000000000000000000000000000..edd4de98818397a205a4997539fa0a2723e71a5c GIT binary patch literal 6628 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 P!40gy@&#Wv#6SNBd2W%Y literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/new_allocator.h.D9A43F0C582D8F82.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/new_allocator.h.D9A43F0C582D8F82.idx new file mode 100644 index 0000000000000000000000000000000000000000..32dbe4d0517534d8304135213c2f7541e2e2ea86 GIT binary patch literal 1336 zcmWIYbaOLcWngel@vO*AElFfyU|z+DU8why^YhX&(}7MZ zuFOpW1yxaMT5&rw1H;@B%c+z5EV-Cim^&ERI~e&vk|4msJb@92xFI|ShPbBpSxQZw zMvOennhcr>FkwTV&;R*;&oT!JA7*4b%qRhqcvz{K$+=x2grLFFYBik(a}7g)CZw{Z z!u4xT*qd0dcRikohdEj~+5~1S4|BX`ycLXh)a~Mt3%3K3fO;1)$}eP8gGprXiOgdx z(MSVIEMw$fhLF&#v{zAGshI_oP!~~Ghp88+Q~z{G`Ensp*jm_H1|}?fM%6&bN3@NR zi&>UK7VfsjzR3Z1e4qEQ@-X|d`AWf5^Dqan1t9T47(+x6a$6ZWwlcy^=3(B$$gu~( z&za0}ur+u0ET97xF!C>8guBdbPwTs!H)->kd6=z)tt1iV6^Rx}BY4Ldd5<%KG6Wd- z^RTe@Dzwih82FR={&^}CPn!?4_8cR_IYv2{3ARel4o>;BVg)exw=*(sXB31<@G$RV zWZZ|~f6&rB)%jFoH6sgiwL-N9Oj+E@ii_K`xwoWItBD!6;~BfcvUG? z>B3CoVeVn%>tTfZ{=wYorN?_*&I2v2lc`gIDRY=`PWVZt;A4W8mj8LXF@3t~bD+1q zguURA!lf5xZSH^QGaC=HpO~LE%vc`gK&?P~1TR!O)B(YZ5RcG7@MbcK&tyd6A7PX_ z!l)0EuMuaioyq*~8_-_V^a{+6If)=u#YM@*?jQ!JfP(^Ns}A|o>J|batZXcdOsouS UFbM_*Sjh(zVM2%k%Sjjj0FHtK^8f$< literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/node_handle.h.CDEC5F05C546600C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/node_handle.h.CDEC5F05C546600C.idx new file mode 100644 index 0000000000000000000000000000000000000000..cea3f4cf51c4f2f7d5d7b56d22650805ee74263a GIT binary patch literal 3882 zcmWIYbaPYUXJBwn@vO*AElFfyU|tyfAH36^C(+EpQ7cg^1>>!>2)v;DViyB53x~ghzY|QDh2sdL z{1HY)1phpv{CNcbUR{XvlS8r0%sd=Di~>E3A~1zK9H$xiPBRK2_`OU#y-Wfyez@Is zwf0sPcD#-{qJK;K?ZY1YijHTf?|zwll9Oa7Z16az#HVwamywG@ocimso}*62HWUzx-(t$EJOaM-U-jbsnqGf`6deNIiAWQ|Qn zP1v?XaOjZe(0pA^rlLtNbx5{vqJwC@{MVJbctbC)>3x<`lcy0Q4~Gtejsh%tf*kI? zcQg>NC(*62Yz2&LNS=Zv#4|x6+qRzF5P;V$7D}659PHU(M=$(%4tkJiL+ z++WEY5A@qQCYE(fVlWBO!`s4xZzQJxb*ONv$iqDCUpU#@BO)pduOt7vz1lPD6k8UF zj?}EQS5aN5nFVx<7N3?P%*vu$j2Y)&&dnjwvo^{Op9gK3h)|;`QK! zS{&^}CPn!=+F|EuDt;}+; zG}EE?NN*wItOX>SxO@3edHXq6NY`jTSzAr|iNQh=qv%6_rE$lZ(sd+iV_x||f7TMQ z4J2yg;4(4U(vh%2`YBND%pQM8j$ z5+Q$xQS=Zp{|2M<4MusGyzDNgmjcZu``CFnJQ+O&VKK?WQOj71#5=;sdW2CFA$y*Y z^*l2FA0y*GMkMvEOpL8eNc3rD7jc4#NYxE5WopzFfefB1_}wUVE&-Z%*D>hz>bgr0Ha<;b^rhX literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/numeric.C9B73B80E066D1B7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/numeric.C9B73B80E066D1B7.idx new file mode 100644 index 0000000000000000000000000000000000000000..3e94ad5e6b4c5a87723efb83cb63c6e89fa2c2e1 GIT binary patch literal 32670 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/numeric_traits.h.71952CE5B96E8B47.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/numeric_traits.h.71952CE5B96E8B47.idx new file mode 100644 index 0000000000000000000000000000000000000000..643f5c5188560be2f268625713148f88b0712ba5 GIT binary patch literal 526 zcmWIYbaP{4VqkDi@vO*AElFfyU|`qv!qx*xu77vq_QA2zN9D-$k)qYAfPL?qC`KhG&i*V#5D~}jZ|0G6^NsLl32_B|Jj4F#5&0zevruSJ&O`b-KJWOf~ zY6>u6{{t(k0ygb72kP%*s|qcyBImT5bgzrNKPV1 iRdG>ru`-AO3>_F?YU8VuZvSMog^7`wff**szyJUe>2x*# literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/optional.3D6E41A544334FEE.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/optional.3D6E41A544334FEE.idx new file mode 100644 index 0000000000000000000000000000000000000000..13d9fbed7899d0739f63cb40c51b0185df8ad041 GIT binary patch literal 16854 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/poly_hermite.tcc.9FD6029D55EB67A1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/poly_hermite.tcc.9FD6029D55EB67A1.idx new file mode 100644 index 0000000000000000000000000000000000000000..c48a4f79a143f2e1b1172a3406dbcbcd6232d28b GIT binary patch literal 356 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 Vbq#kmIKqYzhREda2va^7<~RSq6o~); literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/posix2_lim.h.430DA38A1F301F29.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/posix2_lim.h.430DA38A1F301F29.idx new file mode 100644 index 0000000000000000000000000000000000000000..52f91b22f88e70ee8a22ad6f4ddbd9b394e4dac7 GIT binary patch literal 574 zcmWIYbaOLfVqkDi@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`V|&t@n$BvIhlE-6}stprTR&kCB^y$`Nf$PM)5hBxq2B4#g(~9ApJ$DX~kO^85m4< zecUGd<(3>H7o!=6nG(co28K@d^>;JBDkuVl9XT9@V8Rc>IJDaOpD6={6*v@RV8U51 zjlbPARW$+%i*bla!GwR;7Oqb%b~6VGOL0g^!-SdVom6(3j1>S!d3Tdn-i_^V(VR?Z~#Yu0L+jAA>~FzuDq8(VLc8#xVzh9 zwAh)MH@pT4D|0Br9XR_<+}-<&Yu^HeT{v7sV1^vv-M@Z`Tly!Ua5zUeJQ{$pmy-xm XQ(Tl>%nf2Nnm<>+rQFkB!oUCk419t( literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/postypes.h.6906AFED0EA1F1B4.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/postypes.h.6906AFED0EA1F1B4.idx new file mode 100644 index 0000000000000000000000000000000000000000..1d282e6d3f06cbe63ef2d54897185bf8dfd30c52 GIT binary patch literal 3710 zcmai0eQXrR6`yyp*I{pctb_3vgp9GFHo4q!M@d!JI3EraS42^X74jGE-rXKv_wM$x zyN9u*F(h>qqT107)O4~O( z`@EPydpghCnfK;>{(gJj+P7)b&KP68xxQUR(=)0VV@vSQ^&G28!3XhCIln*SSZ1E{ z-h$z}+%e0J>6#_aD(&ECY8pjewq47!?2?;M(Y}AsM1@hx8BUIu3r5y-dCA6$PgE?& zEaFv{SITyYduZsHMKtkDUN#&9voIb0sE7Oh1bXTdHkQjRwDB(*B1&Muixt=78IwO` z=8a0h>&5tUtJh<$Kt$wclxGU2eqB7;}#d=qKr>?#5 z%@61B;RcHyhR~|G2$OUwkxHyfr2M*qO`7LSH|tn9X$dzh#MckcZ&mEx4H(Ipc}w&} zgmU9NQ}KA#55m)*Nu(E!Sw$d@1aPvwL4hf84PCfAZ#%Me#f;zC0k22po2&v3AppH^ zk{vXhAU!w1Zmv(=J0Qj_7;{UTb?N_YGb{pKZ_+2Q;ur-9M3HS@@)2&AO-FJiYgYu{ z1oAVLd>%pTTB9b$U%=9vKwrABoedl2iDr~k!Qq`o!7OD>>>&~t`IxvB?!94q0qj&e zGh}8ln~Yho@$G^56|VqSVC8zpI4FG4SV%6^29z;#sw9kyCq*QMf5j*u&ihRSBU;b9 z@FX*Elvpl}DZw(fU0~U+49nyAx{}Fc#dVTaDO;%I%w%>|`a%3AQ>kRe^4ug|^P!U% z{D0H9(14>f^cx65COKQG&|b@zSmY}VMaJDENURkNT4f-Sl&QX5+g)zz1NGqA{7^TIYg zvK;*!0ObHg13`YC`C#JZYo{l->yZ{T*$3J_s1F30{B8ZEi(6kiHlRnE(BwEM#~~I7 zGTAbE@=eIAgL2UVD@4xr7#+IVN98}F=$x?`tnP2j`?@ZKBe|^XI zqO2W_E5XF+)u`yvIU`_UJNqtE^F-5*3*8~V8d zEmvT5AcP;)_p^EX#a&(3HXhO=%~VY3;iC125PU^ zx1NDD;r=Yto`r^alImxn^(?HRJxOetq%4(nVB+6>-2L`J?9EkRS78M;jhKwxku;_o z#9mZL&Qec^v#5}Sr5hLjero4me^>lrMAPGI<6oc%n*LbLWAj6z&R~X;!sM1HjBX`= z$t}?q6_Tu^prN2E$y0K*=N)(5;mNsUP^F)OhEvc;?InXo)n_a@(tOsCQp{YiKHN*v zUB9mzho!_%4e_k(1C;XhHN?yt z0B=BbxSs}P8q^R&Cjd@Bb-15_h8bv~qQwu^(phK@F*FOQSy&(L=V0j^Vw7I|2%Xd% ztPl6+K|K#K8jyxSQ7=G@kfY&P)XNZ~IcW$B^$NrYCqFycvpW0m2fzKqG+uphDAN6E z_i4mryf(g)@IraxSmisD8b_oGD7{=#)=JiY3g_iyoVpz5zQNx;DLIMpG!6>|WvD6)F$iF+9)kR~Gg(ZX~ zlhBjmMFc^FMYO{Tf*>j)gdpurRA_GtrsSdB#O9qnHO%hp!}ELJdB6GQ*}9sls>3`@ zdlIa9*JgG%vZiSlG9SA;WSN=k-=oE9H6Iy<(PM`UtG&6kCukbYw@WKCrx6GkO;)#U zv~|2S@4wdm2ki`*L9@kbH-j%aI_*r6X1{N1%HAntw%8S!X(DC6ioYzryhmqIm|s|Q zGKHo+{AShv4BU9-^J17h!*uo3@M41QOi-Dlr^z!d{T1@B&;!TcApeHc+vM4n`~mq7 zq<>8QW2xit#3Am#gyJOxoc`6bwLCLX~7bzOLYmd7rnyk zQ+>i4APkUjqlBo`Q>3Oy@H3=lq@E)+Cv}1-L6@BMEE6xwEn6dAlX{EPmaI>bN=m&$ zYDel6QA+kt6Q^arBjO{e!%$&}`Jbd!<}V@JIf4r zmKp9WGu&BbxUqt>z6K1Do*_CnM7K^KiWei4KSBkL9wQ!e i-pmw0uHciS$Nh8sz`N%dmC)={kl|u`Axd@Fi z1Jg=!T5437iqTtzFiLtuV2SpA`=CE61p7@m$1eAtd(P+kJ>Pro?;h^f)QuZ^?Kv(< znOdPME-!*Ew-hd8xj_>H_xVGm(H6(?JZ~}@c#U46H7SdEMPTH5IQfVOzRXyzoo@;i zJM}7!I;;fdn{_*Ea}C8RV+@2!QodYrcdAEr0_07+edlALA*cn}w;)eC{^>p;tND1@ z5eZNmB5i0D6^_UcHcBoIIe{Q1V&?Z5-W)l5a~>gkd1mAyT)n_FvYf%3G`IqClu3RXp{_3@Wb=3>}LDY$B#$iZ@x(YkoiO z-T+vHMP3vSstVR*NgR@)fF-!Zhhl;%>?@clWlw6sOl@@<%sq?nS>#7;v3@zCXA*NR z2o{7bD2NJvaZ}UZy45NWLU0HR8ag(>4Y~~2a1$a;3qkF*!fg|8n$;kdVkJz zYV5EEa5xDU)ARuU8+kWo&g%dxu!5CPoF=M1@lK@&+<|ZhVjsw3S9fVm!Kh8hAvw(7 z7cnBNd|0~^@D{QqfTk0(xiU1P?GThijn)5^#9(h=D_gGCZxDRV#a1h%#J&ghS zu;B~MfV&XxLM$}xOoz4nXHqK&u_Ts-`m9Zz?7#k_9k3M6BM5vuUQzCN=s#Q^d#+@icEKQK~_G_XPdVDL5OVo57`yKg}5++x*evD`%3Ov zdl5lyLN`{bc!hJtY|Ncra0{_;8FgP9YbJgJc_V=3MD9;z4kd! zmTUFh^a?Ofcvgc)bG^>;L!U+gyI>bqN|Ciby~-dS2V92B*sE%}weELMU!4Ffzyc5Y z$OByMhu4moZvhwKBKA6c2T%6drI)@39E^kAsk=3=K>B>Q!ymwV$=+y+;s2p6vJH#| Th0)p8L5(3P>mv7g)N$ND*8lZn literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthread.h.022320E0CE01A46D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthread.h.022320E0CE01A46D.idx new file mode 100644 index 0000000000000000000000000000000000000000..4ea4de399725cf020c4c37895e92fe570458072b GIT binary patch literal 44784 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthread_stack_min-dynamic.h.6F432801F0DF58B7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthread_stack_min-dynamic.h.6F432801F0DF58B7.idx new file mode 100644 index 0000000000000000000000000000000000000000..15adf074ef41b7b957cb8cefd846ce556830c504 GIT binary patch literal 304 zcmWIYbaT^SWMFVk@vO*AElFfyU|>`lZE1`k8sjIi)G7 z`V|&t@n$BvIhlE-6}stprTR&kCB^y$B^gDji7D~LC5g$|@wu6Kx+#@;iMg4{dKo}7 zD|3@T<`t!;70&?D{}ESb29TvD|FNIO7)X6ON#XiN-~O46H`hm3sQ@96N{2F^fDNT*Ik}plv12o zl?v2UT$!5$vb!iXtymlAzLQGRe(U{{m0;vz)aTHbfVhi+!7O3n@hNL_H&gl`|^>F;TMWeXIR;F3^+3BRZ{t<-l~nhO*b;t*1V2?rV% zGp1U6sR0UWa%jrKgwH%UoG92PHWMf;%_R*t`;FxH+OvMWbAiHI99nRfY>r)O{cQb# z%|Ky24n4TLeI2%CKH8+Z1t_e;p`!*fJ7)Vt<=aaI4giHExg_B(+4a8t(ZZgn=Rjd? z4sBJKYPnU_MtlEX{>sS1D9$R*4-*E4SxzE|Q(Tl>EDmBYiZ#y@2wl;2k&%gk2_ygk E035z}s{jB1 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthreadtypes.h.BAA8217B62BB6E86.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/pthreadtypes.h.BAA8217B62BB6E86.idx new file mode 100644 index 0000000000000000000000000000000000000000..31cdc8432eccb71f017430865b57de78afc0e857 GIT binary patch literal 2172 zcma)+Yitx%6vyulLg~ypwDbiHB|}R^OSfBP(^BliMBCbsQdx=C2INT*Lspe)KPCEgp|P7b}W5t3H)GBYr=_HRMi?{?c@Q~Q5E>t zjX17Fm8fYc5!29gM>h@S3DwfoaGWYJ)zIR)vAaQ0cEo57Z$?E21l583Vb`IGlS)uU zw-v*56q-z!Hq{i!lyEKf8`kHm$eN*+Z@;BG)KcPRWbe&Ni`iDqsFJ_5M&o*zTB<|i zsoXvm7q|I-hoJA|t+x2@I^utCaVt%wQ>V|_XD4VxkLnRcW2a5}j0p9a26RW0G~)83 zCJ*&J+|#dwRm;+;Wv5A2DbJDfellH%x7uwwr=8FZex|&7CMVg!EuiQcH5}*-YTm3; z-riUe|6hn_ z8dEK*`EY$E-5_gr&>{GmInTw)0*-k;2V$=ah`ltG18~nQd|$A_gfZtJ)_yjGMZ$tb zIIJAbA$Dpg{Edf@11(p4b)%nFNu-Dnv0kVz<$)9uA`s&7EPZ9>(F?=lr#DH&3qV^{ z+eRK301p7ePtN`@|K@Z+BIN*tgitvTS-?DX`j^L+?|eies{p91tgPXI0q}tg7o%6L zdqxr=iL3;mTj(z4A)DdcbnME$&SRRyE*`N)s43%t0dN~ZhET(5|J;OYN~8jSXjyav z4-9~t3xL8sOFE7p{OpiKN&yH|1vc`)fMpzL?ElJp@WFvMBvK4OV_9Q04-8n!fj{?L z{4RCv>9-|vI{>C&mhixU0uHDj%$@pivUyY@D*)&d`igj9K>DE0KR=$Vct0^Fkum@V zgn^YjFaWMmX!65?*Jr}*`@WZm41g=R6+C1!{Qc3{Z7(0|n-cjfnwK?~iY#OSi$?8N zVQybmAN{N0TGc9#R}6RqYj_6`aM&I(J>-nu6gu(6i*Lo(0^Kk7Z$KI+4>TJ)$~bS3 z*|1SQT0QmJ$mNqwAeR)DtVg+L>xv84f12F_x!1|->QMe|{QAh_tA z`a$mM-(-8}=BrOZ$zHj)7G*RW(9CHlpa1!D zwRpJvC7_4op*vB&yn6n?*V~>u4sxAbcNfZNNJzrmh%(v`WadGX(R?5?=b_wt-7fa5Pq}7ChK)fibF#nq?U})n<62lgdZWnp{I%q^iXbW1l7?BRaQYRg5t|zNRI#F~E)ec+^dCq4AWe?liPiM(C<$SX`uH z39echHI`1R*-Y6LOlt?xm(Ow&4{63ek;!E#7>&h|HkPoojDca54YZB*^xI$~rgL@B z5pMW0>G^%}8SFlKuUa z)j8vk{I|DUUoaaJ*aK{8ushg|^&^& z9Qyeu&AS&)+*2eEUQ~F6zr0X*XyH-vg0$@)g?W%+3j9;B#xVpL>HDSb_|>j?g)K+O zQScvyPaH##`0QfG(_e!NisZ&5Id5)ld7-f2DKjfA^%Xo$H>pi`uZdRIh8Z__^)v=#lRe_nS=I`nFr51e_nlf&*X~(Et8R640N(iwK5dOXe^k)o(VOu ztMGFE-09~#|HXf3V&b(ceDWI%gg**568p`yvrm7|o{u9(cyXG(X{e_`Q?W=|5d>vBbgVdd|BJ^3q%A^C5#AG@ zJhm87&7aO<;0~}m&_o%D5~(V}A?_`u#k2AD(d%|S>%wi6Vb|BI=D*$B`J3(jEF2*> zwWrEc))l$Eq*N!JS3UzRXP|p2ehC^c!Fu{872<6w5~SOZ_Ap=zkJ6FmB#)ys!rS$? z6d^#iqBD*DE37Sg~Bp|gM6WQXUM1rSdb`7RTnDzF?`SaRadEnJ|-+%e&L=9B4 EcYN)q5C8xG literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20functional.h.3B35B426F14AFB98.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20functional.h.3B35B426F14AFB98.idx new file mode 100644 index 0000000000000000000000000000000000000000..d8d317c59f4a01feb7a445225215f1c65d3e848f GIT binary patch literal 626 zcmWIYbaTsMVqkDi@vO*AElFfyU|fsS;?DU+srrRR25F^v$t9Wjd5JlC z84MJdl%A8HgknZ%aS`0QWK|<4AksH9)JNFIkeQO2SCUy$$>bUs9BqS6q--1QcP& zFGwv)EXgm@&}0BQ(8>xz!c+tK#g(~9@j$N&9sjn{_INP-ENwDo*h@fm`1=CLucurn|!u`BU|2?kEEZbn8{hN9H8 z;vGPqtizVt?rqVGj696m4B7$^(-GD)GJ&mynFq6$kqc}cO!%nV#UmGP2P6RvQFB!D zfVq9rp=W`!Z;7`8RWoxii^I$|^k4t)`6TCgK-JO=(n2s{m|;NGAP3*!Y{`>xpVwX^ w&Rjc_`QJA*vw=w<5u~%YD7jb##9(AQ!TmR7(T-irOw7y-z;p!z%rFK607Sy9#{d8T literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20iterator.h.C23CF838032BAB9A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20iterator.h.C23CF838032BAB9A.idx new file mode 100644 index 0000000000000000000000000000000000000000..c91049269177e97bdbdf25d198e648da8e914585 GIT binary patch literal 1074 zcmbtTPe>F|7=N>_IkQeGhLriI*>%+2RrWa=7K3cshPoY;!cZ_7W@q2(81!jC*RDwxy8D6|XDjn(~~qp2;X)tB|uzbrLDA zK5n5jhNO{Z5Oi3J5teWy5|8Jp_U_@?&6+6AUvP1yR?*ru}81U(m@M<&lXuZ@|iWy)49?uED9V*8B7yxj2 z?izk4b=|A;ch^Q4hG#oKM+JE`WYH9uKrZwaw_w%wWp59^2Z8U?b{*qqVH0eoVWMAZ zADrNp#tPhv%i+Gu{C392vq32sr<^<+>In@{>t{g I@Nog~7ie%oiU0rr literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20memory.h.EF3BBE5C99993FC9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20memory.h.EF3BBE5C99993FC9.idx new file mode 100644 index 0000000000000000000000000000000000000000..170992bce8ecd91efa744313cf360466acf4fed9 GIT binary patch literal 1718 zcmbtUZD?Cn7=DwqwKu)HX}j92UDsV*myadQZ8|L_&63)72}`A&qt!9RaCdW(+RH$OJFR zd(L^!bKd7Y@AKY!U|%NlW(&Y%Vc&xlMARk#*i8Qx!Me{wC+rCg9E&IBDQQ}MNo}GlN5eL$q07 zEzr8@N=*7*ELIMK3*hG$>QklTN1ktSZ}o$;w{35qZ9ouix*5PFH9zy)0pHf8z*{2p zc7rs!Y1D5U5SrXwUIsXI^@~3rIJU-U3pl zE918fv^p>4N57mo`2P337v1hn-Hu0^@J_UY;4ChkocnbCzUMAG{Byp!9%iJXOQT85?X1Zqlw&B|t6|G%vfNkUN zG>*S}ugfJ$hu~1V!wnEwKJxj|o~K5rI~_>Jc`~15E`NOK>-~qRJCcpe@Dd2QmtDV~ z*;8cb(exBYcYgTxi{@WR>=vcqEx{m1i&8F_8{|w}2#?nmfLDcr=#4l?l;%6;Z{>00 zvuCeeeRlFRrR#_OP7cc6{`3bwU3laT>K@xNwv!9UN4M7&@EhULYG3yBTs|}u+`lE{_phy{)6*Hw z$yHzpS1mGWiKngGb literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20type_traits.h.80FD58CC3424A64D.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q20type_traits.h.80FD58CC3424A64D.idx new file mode 100644 index 0000000000000000000000000000000000000000..928adddd10fa921892971525799290bb07f8d51a GIT binary patch literal 1208 zcmb_aOK1~87@pmvn`a-U5sGc9B`vnpW}7OtWSdqE)HFiH7YGXLb~9-g_7Qg{sloQ3 z2vQUTJ?SBcD540JB6{%Rr58Qhivdto?sT#ToS{|E3BNZTRY*=M1t7RJ(wrpgAXsin|OW3-D z5ad*h+0SqYIzGG=hu-175Wk}Z3E5b-#|7kfj|e)}?0ubmR2&QOZOuqX3+bo}DBz)| zh!dKgO%}iVHoj%TCMpIc*{zHoSs~Q$w?kx`Tg~FrV68UqRt3w(7m`UE+4*Cg}xrY zr-RWf3utOLE6Mr;O-*JrxT`BP)v;AaqKhDf+9kZdv-{26F9T(-&mRb~Lq)&&>Jjj& I|7c451@VVbxBvhE literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q23utility.h.02F4E3C4153F6F6E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/q23utility.h.02F4E3C4153F6F6E.idx new file mode 100644 index 0000000000000000000000000000000000000000..a72b394f235e754918baa76ea22ca7663f54cff3 GIT binary patch literal 1246 zcmbtTO-$2Z7=G8m+}|hTUqq5I7%~~F+hpKE25dqgQ3rEC2$-gH9W-+mxI?@}94V>s@V!eI4LVmkr!~skKb0CQ184TvTGNLfUGZL>bN+%wS z=W&_Y1%}I{W$c2aAo4+)rl&J0o@VD{g-=hjlEjN5J)~ej9iF4~6vr`vW3-Uw#JL2I z{gI5s)8~BtIYkf!Wx+H3KW!8YB`Hj$SWe2wJ6g@jQeh8%PVgK22Q&dDgWjYi zps%lctJl_VQ&ffau>zo4b1ecKRnOSq8_(q%nFm&|RRZd&>vCxVOhvjfi#lLy)wVWf z`u32b%$2zkRBx^?CH2jt6A(J`_M?Te;`vU4vrH2zz5=Fq^rv5$L=Q7R86LkD$1{}KYAMkR?uTP!%*2_;WFQ%H2urFM$%(lRNu~0`Lze?QJRm literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractbutton.h.CFA25BA0E844A352.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractbutton.h.CFA25BA0E844A352.idx new file mode 100644 index 0000000000000000000000000000000000000000..ad08a2c606e0939e6576d357e493d6562f4ed660 GIT binary patch literal 5872 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemdelegate.h.8D2FFF50AF7F61B9.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemdelegate.h.8D2FFF50AF7F61B9.idx new file mode 100644 index 0000000000000000000000000000000000000000..3775e8550eadb51ecd83447b88ba70d93df36f6c GIT binary patch literal 3748 zcmbtXe^gWV760ZX1_BTA!j}LF0r@2XQXVY)5K&2lARq(`1>sodLh=Z4fnf4ruw&h7 z>(RC=o9?t{-Rx#tU0df?u^X+&vbpNn&ZcGEkFGk~*-nqlsm!ibaowrA?n@G8XXWsr-~3l;U_2tyjL0cMf%v>UePX$icO+0 zAaB|O!id*D91I-{x+R51@1RKRe)(&?wHE-KF4>}9@ChELD3E)eu2}KE&TaE>?`hf| z@Q%p1je>8;HX^|N4q-$Hh^>CN;Hz`G`UTQ4+&kc%f8bh?XX&uq6VGC^%)is+^9Kd# zW&Qwh`3C@|-YGhXD@O@}$q}6ISp%-|rs~c;|3X6bAd9fq>xi z@#{stvSfKlDerN)HdmJO-a(gd*e$?$oj)M(Tm8LT1eaLSPyR2A4PLiL5QF?yXE+C5 z$Qr~$&cWvf4T@tv!9OH={ezzyOZ-a6Rgcf#>+}I!eK*hr{5~N_f`S-| zvz!Ll$!QL4yk8Y$;swLM)b%?DJ%XDI54j`BS}Q;*#K0KYe$VU!=f?(mE0u(F@2;5M zw0=;fCGl!PvtqN-wWQm$TCb8atw#|W}P_`?OVV2 z`jdUH?zvA(RN!7lY(}EIMBS_DdFRUUJ9*_Cvjpv{bX5klKf1+nZS>DYm8nc7iu2gK z1QcJNySdsnm(tEL=_oEvDqe!(Pp?dBj+}mN1IMJIxIkBsg5q-zP5RCrZt6~97J+k} zw9_arD0X+mZMV)o>*1I*v~Esq&Wnh-9shA1x9-#u1y~zm4axEnecHI%v+mHbk9NuM za_Felodg{&Z z?&p{cbgxa*mWJZ%Yp-9>JhJZy#~4stqpQhB@%azmdrF)*G0icFC~noXQWQU%uD&ze z^}Ro8NgOoLplV0<18FMy@O@nfD(%k^QUp^I`xyj>PE@ z8w(D!r9wmPAAR!H_%DBaRRh|NB@QEUXV(2ne8OMTwF-so32NiFIxbX>VQ`j81VJH7 z^Ahsr?d;3!HF!JR0#uA@O613Kz>)?JrBX&EEM+E6E@6BQr5BT}jlb#_UEDI>pkqthOSoQM8AUO5F`Ziro#eD|IzI zF48`6=Fwf0u>QsYEzWC|35L>xTszxLdp zo^jXqFdCYuPJ}I{=$(C-*NB&Ih_}1mE-oK2;vXp0e8l@_q!xu((<}CBFdBn}C zSQaI2Rc2Lw^wBlTYVL~?w>7yn9Y+9Eu-=}56+EdbRMlL1Y!8ICQ`H$^0uCd1%lsbm z!OK@?dtNyGbU1t%HhR&UwQlv|eE_0Y>r*fhWo<8iIHiA7cw4?jR!DByw zU`ye{U}N#XmC|6t<4Nso_3w{ecn&};21_m`^4}e=*V8xl9|RD|Z`8&o1Bf*K@ObpW zkGGv#({OZw-@Oxi51;wRccxU}ccp$6YKO)E_G0L=xw%Cc5a^^PhZ$2Hv!|fr)u~;l z7cc=s4PHo77IAUP0-dB0i*&+o=(N&cMQzB_Dtja535OE%*~t)c74v{ZfqSL#i%2+r zfr0Ya4d>^x?8Olb&PnqZokD^Fq%?35()iXT-8u8uZvmuEtxLs>v$P?-A<`7FH!-1B zg|;D|QF!{|ZPGMhoLkT!u&5T01nCa$NCO@r_wM_~yS?T+cY!1lrO+Mtm&Ta`o4*e) weS2nS=9B_EFeaWLKrrA6@{(D^7XCiVvDwPbiq|@o`lMu%jG%->m`uoj0qOH$egFUf literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemmodel.h.D4BB35C1B1D9316E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemmodel.h.D4BB35C1B1D9316E.idx new file mode 100644 index 0000000000000000000000000000000000000000..f36bef6a7daeeddf12d7e11552600c5fe44dbc2d GIT binary patch literal 33918 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemview.h.89AAA16972132E25.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractitemview.h.89AAA16972132E25.idx new file mode 100644 index 0000000000000000000000000000000000000000..570243b876ff6dc8b6eb48f13cfd0bde0d23c28f GIT binary patch literal 22458 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 V9OL?Zkdw`7$%HR8Ql|FvzW@n@`+)!e literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractscrollarea.h.E7EE5DCA0672BDB7.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractscrollarea.h.E7EE5DCA0672BDB7.idx new file mode 100644 index 0000000000000000000000000000000000000000..ffb9671488143249b6526bb47096c7fb57147d84 GIT binary patch literal 6942 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractslider.h.ED9DE327D105CA98.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qabstractslider.h.ED9DE327D105CA98.idx new file mode 100644 index 0000000000000000000000000000000000000000..0b88e0b9c37e3f9df20ac5b7015805316d013256 GIT binary patch literal 5792 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 SxNABW{o7VPE}o0`_j8yVqKKt+m%)d+qh^ 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 Aa{vGU literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qaction.h.DEB42C6F940315D3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qaction.h.DEB42C6F940315D3.idx new file mode 100644 index 0000000000000000000000000000000000000000..e90152a6dee5c1dc1e475055b77c9d78b60b2d11 GIT binary patch literal 10402 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 UT$=IO-uTQkKGTiQ4#wwy0Xikt8UO$Q literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qalgorithms.h.0752FD13E8EF319B.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qalgorithms.h.0752FD13E8EF319B.idx new file mode 100644 index 0000000000000000000000000000000000000000..f4ff83928e29b4aff99bb7ffee08a202b4b7047a GIT binary patch literal 5200 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qanystringview.h.9067A8646C0AC845.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qanystringview.h.9067A8646C0AC845.idx new file mode 100644 index 0000000000000000000000000000000000000000..7abede86c066a7e8ba4781e716373684a314a72a GIT binary patch literal 15266 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydata.h.3E149019C53099F4.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydata.h.3E149019C53099F4.idx new file mode 100644 index 0000000000000000000000000000000000000000..f47cd41fa8fcc5595060f8a9cc574584acaa5557 GIT binary patch literal 6896 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 YQEt1OJbFKTG7?iVdrt9OHdm1T2cZvhlmGw# literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydataops.h.CC375FBAF7851A50.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydataops.h.CC375FBAF7851A50.idx new file mode 100644 index 0000000000000000000000000000000000000000..488a03563797ed5f9422d1287ecd8eb86f177071 GIT binary patch literal 22880 zcmeHv33yaRwtwHMTeoi~H{o`=J4q*Gfh>e9B!LUEi6Hy9fw(e!G67nMh9o9Ifl-Gb z0s&D-aA3k7%^(4Spa}-WVNqN_7C}IEWf7u?EP{h9@7%6Fsf+X8^ZWnjec!xqo_^S; ze_f}mYdck^&iUQk-@i|vM;^7=dXDHncC@b~N4D8)F8IH=q$u|>JG?Rf>zeq-?9RjU za*B)NA9${tt?L8n@g?I5efc?~eeuO5BRY46x5M&$LvtVR+G5}XP|`pD@q(@obnDzX zx437)=)yeT*!bk+_+J*?@5?I~o>O9e6;#a{|NFXs`ThUbsslYpkN3ZU-wJ%t&30!_ zvCq~En&N*MP>`En;w!TC&oA~BnQsR6C@RVsXO`brSZqN7#ja-4GYWHxU_3xQBP%1T zTR;o+2l?`R!%GUF7HIG2f_#5n{(AcQ@_j|Q!^H>p6g+JXhWKDW!3Y6L1{CE!om1lL z+}SozyytDR{LZfw|0j*L%;rBmk?HYI7vzq>>HHsR%m3fR|F=!KbuNC<&R<_;<=IB$78mB_42Ocin?6Maqnp431vVe-3}!hr(FP3y6ZF6K z$t@}_;cxpt&gI=X@X6!3dA`n>nVF*sM*A{z#uS(M@<-(q75Vb=G6$Aqc4*VFO;+Z} z;lqb^Ffw!Vhv$tM;e*e678Ln1p8~aG(X>=ErnsnSB!(xoy%YXrW@l&S24=r$B>oG%(Z10IMdN-=E8q9b zuc?%bffL|Ym0-ONEh);$Eh+vr)iEWxdATM3dCSamD}N*m!pNe6X9CML*T0Y3xVSIh zXM>Zh#5TI%X`lZkpq0-Ju-KMAs9;PHEX$@1eWux=qXTh8<@dEKtuCI#DK z-8SQ}5`S1p3<#Ub&)~=3JNUQSEA><-cZA!FtJHCoHVX(;d97EciMg*n8>$dTq|JDh z1;5H%0f8z9U8xVR>b@*YAt6qi@s(o#N(m1Ln}bR4QY57G$=*+ljUZ}-uGd8l2jnF49P^IA1AI48>7#*h&%}I^@ zihaKl84#$l$QwHF>dcNwp`;hoQpv(9SyVuv%J->PmYsI%$uM{@zCV-TpP|!SpvuLs z^`Vp7HKv7<-$9Q`>7AwY{(wN06Hhh_$$0!+8cbxE&Dg5MZ-t5E0##mk;m9}buBB#x zipyr~QJU{j;sXLzI-EHAkbd*o44q^`TeixMt#W8UpvtJRm%8@;uvZ(M^n(|~KSz_!^>^op&xj>bVFWihC;+u3^u+0uN#K*-a_+PNNWz5pQHkUZcuC!NH5Y{q%Tab9U25UAqY zU-W&!73p?`gu=p}N9^-RL_mmzy?RfhGC!_+|4?$Le*!y}(ylOproeh0+xAh%osI+j zb&>%MUM@S9%X&bdO0y-`556_=5U8{TmGiRWyc`w~sB+)QbH_s`F1<@9NzkVbjt(yW z3l{(Bho7Imn4Nt$x8-u#Q7$(#xImRfv+NP?f01%eDCq%Bok*i6(zt*?m5_(qov!TL z?jEQG%>5j5oMX)b0#$m~?fmA#ga%N_gm%^u?z8qDXKQ-)W5G z_~dLXu9@O_%FU%7Vs8Y!8 z8`A&X;)f&1z0jL7s+LhlK%h#)>x=8Q55D?ns4XGdTn3(NQdB^o%9fuC{-E9W>5x!c z8^222HK`@2m;zP4JnuXHT#wx0p(GL7GLMDLW3UYT0#zOwq~!HkpPb8wZ69;&gJI(W zRW9B!>~CRLcjUsNhE7jsano5sK%mO5_~x#Wr>aJS<-n3WsRW%=JOP0!KhN6VYTCUm z@^umi>trc$EG6E6K$XV*8PAno+yE-AVSa`>hPwPOSX_H`Y^zN_oiEf$PbePf80hl9 zU~#yf{{8&zZOlnYd8Q&WC4xQ=rPe{89Pt^Vg;*LyLGa+>;O=_TXO7{!U6(S^wUYN zjO*nt4<>e)n-faV378u$P~{Jg^{uU)F`$AE{1)Qa0t3$ls_5Tc+0^Uq;j>}-pg%9M zpqIe3xImRb@zT+LQ?@Js(}EShkf{rqBOp*E=J&>)uJ)ouu$*Crmyoz6Bq1PBrDe;X zv!_hhU8R$jpmJ4qT!kHp3sf0#G>hG_XZ>ri7(rzZaqNNSa)BzFwl6=Ho>x{KN>ZRL zb6D&g)-oVa<;DjWJ{*_wTD4BHpqA6J(hL^Ci_HEa*f1Aj zhOQoXaLXUxx^p=+7^YwfaZDl20s`x)YZLBdjZdtEtqW8VJ16$@zhLqB{Iv^qc^`Qb z_5mm^lN@Dm?r?!B^ibE7q(r4oCoNzS7uy|+?ac!MRZ5?EY5&xn+v~s)f-Wy*5ldNI zK%mOoe;*&yX41vFP?7-a{ssxYLG*w?m8ZTN`0_oW53PlD3vHPvIp#@vK%h#m*gjY5 zS4O<6lT`SjWh{6ZI6_>Y%EH$>-6%XdU_JB*RO(nr9jI`DD(ijU=O4L#<$dnA&7cu8 z;8@`TReH?`PicJq!e($Apt)bukgsWYK%mO{v8~2j`s=VyLP>AGC8w3rwqVJoK$VJ@ z&JMV@{Rdn5xGZ4m0;U^Wpi1*e-iY=EbGGpb81ES0%rIZDc-j}=zV(+c&VCk3(x5kU zS@2v~23(*@a-FaA=QW3S1d~26Kc|$SQ{bO)fhu1gKUCAJx@@OTx`E2ecE`(hS3saj zui(cUjz(APf_6Y}Hqwxd;HYweDt}D)`tM^huYGPhLN?p5aKtT$NN)ueMZ=@$@KPffejwr59$?FG*o?D>7g@xI~;2vi|sr`>$AOWVDnbl2t+?xSF=@I%*0>~+#IAW)@YVfdZj-PidHoM2E(iX+AAf5GBo*H>*i-2C%% zuuDRRPZ7r{;tU8>$tfP$_Kmk*x~P*@P{SzuD5w7gi`zZFD)!Y6cS3O{jK@;Nu@rj3 z1*+H#ZDHlSPS-<88~=C&Po$wR9;QH*BH!c1%X*4iloS-WJK@bBru*B^O|SpGBx%Mv zyKS9a=Z=oeHf#EfssVqTO`%{S37<%!@J52SEvSlLwa~vDwdlh)=SPOix@Np3MZYD* zq3LSIF_LzSWa2id8Ea_L8rmAKLGaTwZXHb!csEVjO4pa~afD^dO`U(F`dOw>K(*JX8^=^LKA_qMR(wTKuP9Ap zUKnyJ)-}E}iC2@aAJUEZCQBEVu zX(V2_WSCd@*B<9lHg;3^*B<9hhIvXqOEYjDWTQ+@D3cR$MajkzIbn&Mh<5~XlU!uZ?0 z)%GYnD=*&nOx?xSYZX~Dz9S*u5jXA_LIh2Nr07;|CR>BIa1g zoC5RH8&7o2_?BtkGB*ySX1t(iFDPytNYfy+*AzDnoc&yQY~T40>adrTl9*D`6892} zxzM0Mq(yzsHfOCjxu*u3w)2bJ9fNE}|JvBt6j{SG;D_ zO0l(48(i@iu7SOZ$7*n>jN3m5+COfv8>Zr+u!kbisnv|Z(SutEbc%$XB9UU68cB2` zX@U3;eZO4$Q@`ik(1=}1#4aUX*!ck^{D2aNxMy|W(!#Tg-TwZEloAj2A7e$(J{~B- zPz#z66!7p67PN`8Eqt%l+KAt_2!EL1-))P)g#q)Fbi4(@F(|1G zk}i(Tb&|TyirS?0mHY^)whQRJ>K1Oy zKC11r;%}(_4UH6TO{uJw%DQlCCd=An*)4FTtX9gpaB~*P+9KI4@FrQ?B)f&1vt3rV z%Q|`kvav%}cUbXGS>0*HyJU5j6*tOiqpV|mK{mdX)o-o%qO4w&b>T)`lGRIAd`(ub z$vOr?WaGN5Ubo_1OxwlW=pM_)5vCqtI(i4Pahz$#g|{FZSD1Q*>F6!U#xP1BtZrdeA zy=29g74@4FlHiQvX(Y_o zpb|{$v4n*$VKKr+SF_O7%!4+n84Zfoptx`|!RM z&Df}@8tvy~x^>xC5FymW^>u8GT@jtRj7}ci3Kzd@6y9FgO`vxq=Q~mu{+MjMNnCFdx9~$Zknjy8Lim+CNcavCA^gN+ zB>WhO5PsozB;h-fDEz!xG;$X8;zELO3yrFv(E`^{Zw-yYVK&22-Zi)4tTi-Sly9Zp ztuzXU-3(WGci)P$cGGN8{+aCjOb){%1pE+|x`L&lY0Jh+mb8*33tY>RYgsFSmnqI= zN*J2HY%H+HF0h7+-moXUVNb;M27bIfVVS^a`7nt**^JY!!7@la$2#J=z^pU)0X*f5 zCy-_=W{Hbg8?iYpVGk~0Lj|s4;B#~nxRzo+xkGI62bAmsN;kyliNl!jY(B1>XFF_m zjh);h*C89FQevr;geSU*(@LdufoG8ZGsy37_m_95EYrY#{t$GD+Uje zd5^FdfsZopQ7gX0QZBJ{v=z;`#Clv}y#>C)yjNI^z&|nXPgY#1q*N;DIJufpsr0B+ zdJDWkac@u}@v?zr2rydCgg}2nGiKY>*>)H97<9c99bou9&Uz5PcS=b-rKDhDu*0!HQL|_)9t|+qG-ft!A#fFq zuYyB4K*WQio`x-_;R3Iuo|V)q@LM$OEo*r__0(I-H`C5u&Dci6w$X5bw^Pq{ z>J@ko4clWa-$yqRZdzEUh z(l{{!l~k{!2?EcjiSy}g0xzSjmeI~)1Zrq@4ecfHY8tniwiWnO+UirprcuEYbqoAzEwBA zDeq|(xNNSbNJ$f`D=5I_LSxd5>ony$ZE{mg+~Yd!jYk^fCuMJ`93${V**npS=g28@ zVs!CD+S6*2}#SV~7=Y0nRYPhU1+G z3OKI}3y@a^*KkfM!@)Fjy6Fp87P5`Z;GtH{bR2yRZZGjGSRy);FtjXsC5sby6?3m* zk%%#R3@zZ)G;G1)^038|_fJ?B>M%S}o;2L)G$Yy>-4ZuQ&1ezXqBTaqG$YZIn2aPe z%}5SPjux8piE}<_iPb|8ltfmM*65Z%KZvKABqOB=rjV%Di5EFL8e~$PlW0rf8ob0J zUt+CsyM!rY>Kx|9fiuU+xq!74<8)GqJgKxs$8G+Eshux}99#C=)%Ra`^~IwN&N|L^ z6#l_sMLVoC$EQT_egdnM6CZI|MP}@N`Q7@tD`2OnV)0ch5$#~ehY!EBVAKV(;9DvB zTd5_UuedxRGG`Jbu_Ddr)uLA>`W+BSmr~25jv{h7g*2Z+Qn4NQIkboKC$Sp)h9^gb zBwb(gPjf-g>4sn6EKKw$kgNd(oV|fN1ClP`KFS%F!bhA;waL^eOlKO6oOY{M9X5+b z2p_S6x+_FL=FSc4S{8Yy)c>C+fZ<6AL(d7TIP2}#+U87Co4o^z?UHocC8-N8wigCI zFnn>;&keurGXKI|29G+hc+MV1i_wg=EMhH-Ll&`SY-SOgSsaowG-Er9*v{fG4));# z`~LFslkMLF<31_Ho|KYtnl%-_Oz}aDoZF1XAO5GD126j;H~e->__w?z#62?W z%IULdOC{_}f$@S43xpHgae*MS-C>3nOg=jnXvUwZ_Gju6$3hKl zRYTi|(7Wq~_OQU~S=f3Oi~F8t ze9Xc=X0c+U-N{0CvMAhWAtlZ{yI2dvUk<*kaJT0J){7H-^2R!fy1~i2~e}SEc zs;O2%onjMspX%>Zk1*<^R6j~RIC^l>QRj~$qA8D!N;@|sV;`i~pGo+`Aef^qA<-D!fuKLrrnBg#ToHs+ zohOudjIkcs^Y`IfPj5d6lYB$+-jG`3BqI?MmIZ(A2RFpGUvF7mG;GXa_{Mn!{`Eya z41){c8Sy=5HMs<;hm`=6n0(bbs&5wt45B>_eHY#>hx>(rHMm*b; zd^71X5i_JDygWjvMv7S>rQx#QMjyF1_U(_3|F%f~g^Lu~(Xfcjr@wFseYLIZQjqP! z8CXI!_VzXQo_IfhK4bbzZQlE^5ejZSnihnN8(Hsd{{3%`_rIm%U0Kt2bL^2ZkjDCj zAAz(MSU~*wKs?n4jo3fu$jyD{z*V0~vS*SWc$YH+?b+`uJ@9lsyF2UUJI5dU;Ze=c z*B2hW$=4Ui;vUtb`TuP>0v*B8j->kDM^^#wBd`U07J zeSu8AzCb2lUm%mOFA(SJ3(WcY0&~8;z?`oyFz4$F%=!8PbH2X7oUbo1=j#j1`T7EL zzP`YmuP-p?>kG{J`T}#lzQCNXFEHop3(WcY0&~8;z?`oyFz4$F%=!8PbH2X7oUbo1 z=j#j1`T7ELzP`YmuP-p?>kG{J`T}#lzQCNXFEHop3(WcY0&~8;z?`oyFz4$F%=!8P zbH2X7oUbo1=j#j1`T7ELzP`YmuP-p?>kG{J`T}#lzQCNXFEHop3(WcY0&~8;z?`oy zFz4$F%=!8PbH2X7oUbo1=j#j1`T7ELzP`YmuP-p?>kG{J`T}#lzQCNXFEHop3(WcY z0&~8;z?`oyFz4$F%=!8PbH2X7oUe}s2d>d5z>+ zBgLQ>hcrOg|M_Fxc*lxquGhlk@T#M;^I+hi0Tir6iyS1Q`)`uNaXL zxjX#sIDv+EhQuPB0-WBqqq^Yu0qQvl{(K#O3|=$F>*Ku`sQ{EdzP&(Yl3pfxg+p8> z#gs|O0?(72^Q?@%ddX8S#Uc|G2)2@ZPzu3lfMy())Wecf;F-idlf;OFb}5NkN)nKh zr2!|yy@kYxd-hGD-Xu=sC&4X}s-@J4>>CXpA#lB7eeB^C+VT~eCN9UbsWzK>1YS(t zi)oCwEH9?;+@~c%Rzt%WwbuJUkRtTd|=V~i%pw0#>UQeCtt#~7KZ=^BeGQN>! zZloOr-b}+b(`bP|rOrKYn00|<#MvX%Vpfl`tH!}A|79+w`8(HQ?)=}VX zEMgmr$1s%!G)#RT^CCmX#OeE3dx6g}{T%ZO65=@)bB-koJXLW{6%12g87ZEnN-SMEz<0@qMa4UH70w}yJw+=|oJ z&`eRjm3p=UH$U)~Q8XZpdv@Q7(|5zu3r*#xspqtn%YT-7&fbbs&cf3VGx(pDfxo4g zm-8STH5jV0AxRA%^k^!<`+^M*4rF53u%zh&Jfm#IMZ=30#LnoNpmyy$bnJ9{*V{UGv9%NBUB%nm#oOD&+y4MAt1oW= literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydatapointer.h.1128F9E57EA464F8.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qarraydatapointer.h.1128F9E57EA464F8.idx new file mode 100644 index 0000000000000000000000000000000000000000..5971e25479c3e7f8b264b919345995a8236cba93 GIT binary patch literal 14110 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qassert.h.BE86327E75D27D1C.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qassert.h.BE86327E75D27D1C.idx new file mode 100644 index 0000000000000000000000000000000000000000..f0415d23cc2ffcdc57f4167e533e255f67ed2cfe GIT binary patch literal 1794 zcmbtVU1%It6h6Dzq}k1Fo&1^A)O93nVoJKx-7Q771-DtLw5617(uZQwbux3)9lASr z_s*nQZBwwcP%Le!z66mXmK%= z(>;J0y`QXORp7?Pr;ZNWO<3`yb8L2CD5K%lVFx z<;Y3}%nh8xK+8_x_ZT>YtfD9-R-uYIW!coka&uZPD+OEGmV73;MLD8r#cf*^!_>-C zIz>FsI8|z1(#g_lG&EMJVg_8NHr1T&u1?Oz>P;F)DyqhrwQ4C&X}!w0y;>!cu_`80 z8&>t5_-jlNJjDJdwLP zbMB)TLLnm6peFfb_~%Pf|6=Y=M<^zZwvGm{@Q$!!T(E`XP}Fnk<7tzp&p!7ciP{Ay zIPWHR4BS0DQ@pf27mi6gVmpKZAW|-o8x*9Sx9@-c;P;~i+-V=#CkuGt2ebF>(D#K1 zk>U_vD_|n^Lx008)s_;aMcoW!f_tL&n5tWIU*Y6n*SkZ1@x!=Xq&3nmbPo={^UKxQ z0}SEKWHUCy8=^l5JIxVrYX6m`#nl8;ARzd}kh4D)gu<&$P_ zEtKA>rW$1?Pn1G4Y2Yn5*6r>tvX-EgNHBTKnF~V-& zMcsUBK5+2Or~LV|d(w*tkH^M)h3>CkZMiV~@^|+TPLM>GfIoOP%TJYly5B^k9_R^R zB5j0?4YPDx`bn__@U5ph6N_usb|(mk-oKXv;Rrea5Y!Qm!p){XZymfRUx~DLbauhN D(80n! literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qatomic.h.F284092535A24518.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qatomic.h.F284092535A24518.idx new file mode 100644 index 0000000000000000000000000000000000000000..1596b898423cb796e7eaee749d5c0e3728755c54 GIT binary patch literal 2256 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbindingstorage.h.73A75A3151EC9C78.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbindingstorage.h.73A75A3151EC9C78.idx new file mode 100644 index 0000000000000000000000000000000000000000..fde6f1bf04cc3a3a28a2568eb2f9a89704b4e12b GIT binary patch literal 3430 zcmbtWZERCj7(Tsp?e4g1%Qo1@*+#prV}sGIY?N6>GZ+I3Oty8fMHIZWr`?6y4|?w= z3k(%C!4EV-4E`X*V2lz%AcP?P5ThZAhA60@(H|-y5fmedQ85JYoYTJTSo9Y+*~!lP z`Me+JN&AD#mTf3Ts4EiO7ALxFLh$x9zNSE~yZE-kE zG;JWcg(SwCP~-n9n@|UH*2hvLA;*cmOO-WkyxCsAeO_KTzy+;-c|=dz*F>Wl(Yd58 zBMA{*CuuI3pOq-FgsgIjFC$r=u?e7#`%^XBbN7K}`-BA9OC~m4c-ZVE6ET3YWp|It z>WHi>$pmWvL0!psO4fVR$rMTJV<9<8dXq{*NB4JP($zkDlECkuB$&|G37TYDj*-dt z`+T{@QdyT#-WS(s{xx$D3db8fQMW|3s7O^GTfPpT;6)T&L-F;gj>Z{8$Uqp zIc3@Z!DUCIMVL<2O=V3Eet>$9cja%&`0Gs;p+Q6#TX8u*Kz-=Q&Dj;|Pu&)wf~u<; zs}}JC)H@Emeeubk63Z>ZOscMSR?p)HsC({w^VW^-jRQ8J9+3Bny|tirME^ST-uCYX zZ9*M|)-JYVet`PIzR#o2R{XKSELbv?A}pCCj6@@C3Nqk=t!EDvlINaLO{kzG+n7>w zX$=zjg&I6+c_kG$zwv}csGKK9X$TnmZwdK@;Lvn%j~MkXYc%>XVmsc*KV^g4Gb(M%LD`MZrSn+ zdq3G*F3f@iUZb}F62#AU)<30xcG!e$;9qPmuFogfvv=*a6PkG1COE;rU+k{~|4T=X zmhag%>x@k(rR4=&ffjy%`k}j;+jz6(+=R6nbPeX#YR8oGD|SC^zGxH5A$XtIX8~{5 zY%5 zJ0QW18^y8e7XtUpf)x^!m`Wy$H%+42vI2x^I!}(jcxt`DAmR0BJtwr>z~{hJ^ja{wjE>^fuGq3^%|=<1*rai2-L&F(V8R z*N%S`SQ0wCj8@QX?9QQ(aL5?S-GET2FJlw%{qAZ4ziGJAN1M`MYG6N<_y_!A5HaHw zr~vTMAdFN%416Mp86L?75pnah<_0hVPN7DOOA5!){&y=Ix+Gj_t#rZC1Fz7|F;W3v z3Afg?*1`}Z+*#adfk!CeRmH0;FgEBeMaXCe0s!OCdKlAy7?_4);tZ1oF5yP0aVB8N zv5km1%jAsO>)L(L5eWwt1XkrS1--#;z$D@Rrv631DH0wG4E6&@NO-7yXf^Dh`=om8 z`oZ(h(`h)61IP^lof!<6(HNljt~qx1=e=DAskMm2>{CGq*o_v&SuKaR+F0#?H2^ep zXF3Wy98iXc8P7oiD2FzaksOEtJM~>+UE%;M5i^zpBVak&amH>ShCvHOoYi0r>H53< zD*y#>+!PTrZp*KVqt&rG$8Xrz?CXZXf|RCXYzHn7pY9VQx@;>DZEuOg4n7iYGB%aK zqm{6)$X5YzfeUF|#(_`G+IzuX`uMv}0%z*`2Uurjpc zj1fT$jA#-uW5RqoceOibL|4!naKbbs9JB_V5RWdMbCNl-s%uaUND=xM^^)NM literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbitmap.h.9730D82D851365B4.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbitmap.h.9730D82D851365B4.idx new file mode 100644 index 0000000000000000000000000000000000000000..03d685ae1e8edd8b16c088039e00123a5039d02e GIT binary patch literal 2796 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 M2NU9020NDj2BnpudH?_b literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbrush.h.3E2C08834AE7F6F3.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbrush.h.3E2C08834AE7F6F3.idx new file mode 100644 index 0000000000000000000000000000000000000000..5d6e48eacc97055b3bbe2d238b76ae2829913e2d GIT binary patch literal 31502 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearray.h.56EB072B89ABD6ED.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearray.h.56EB072B89ABD6ED.idx new file mode 100644 index 0000000000000000000000000000000000000000..ba16cdfc00600ef1a72b1a126b51627341a1c5f7 GIT binary patch literal 41932 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 QGLQ@){fG(v@BH`w0q>v-5C8xG literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearrayalgorithms.h.40A38FF36A118743.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearrayalgorithms.h.40A38FF36A118743.idx new file mode 100644 index 0000000000000000000000000000000000000000..ead046bdbb5f25a0e3f9ec09db9c02d1b2f7385a GIT binary patch literal 8404 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 Y-2+cQes1lS{JtIiq#u_F*^!<84cRZpLI3~& literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearraylist.h.E2B24FE3ED7DD6E0.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qbytearraylist.h.E2B24FE3ED7DD6E0.idx new file mode 100644 index 0000000000000000000000000000000000000000..29b423d50add771a052d9ae0b385250abe0715f9 GIT binary patch literal 2162 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 B*Z%+j literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcalendar.h.FE372A9F8303D252.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcalendar.h.FE372A9F8303D252.idx new file mode 100644 index 0000000000000000000000000000000000000000..d1403352e749fc8909a6f71b236df745066f8562 GIT binary patch literal 7788 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qchar.h.0D786C17186DA7C6.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qchar.h.0D786C17186DA7C6.idx new file mode 100644 index 0000000000000000000000000000000000000000..de757e67ddab96828efdde10009679198f0e7dd3 GIT binary patch literal 43880 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 O-#xSR?x%cxi2ng|#;$_^ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcolor.h.F91F6990224F234F.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcolor.h.F91F6990224F234F.idx new file mode 100644 index 0000000000000000000000000000000000000000..b8278fb0713be40b4f50d3bb6f0ddf6df02ab85b GIT binary patch literal 38242 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 D5OgH8 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompare.h.CCB7FA596FC8E08E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompare.h.CCB7FA596FC8E08E.idx new file mode 100644 index 0000000000000000000000000000000000000000..9297c72b497d6d12ee6003898466a18b3b648265 GIT binary patch literal 24078 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 aF^Vf}j>()O{YHA_1f?K8mZTi<=l=pd`Z%-z literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompare_impl.h.AC2E30841FC04F9A.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompare_impl.h.AC2E30841FC04F9A.idx new file mode 100644 index 0000000000000000000000000000000000000000..c0861242d98908edb437ba84118fa90cd03a1d64 GIT binary patch literal 940 zcmbtSO=uHA6rSB~H!;RgW683WngLP#BU^0=l2Wup3I(NB4}zhD$z+mDvp?y~Y>7&} z^`fGphaN-`@gOSHgI4UxtLW8J(St%g){6%(;_QY2FP=KEk2l}@-Z$UdnG4fXQ&0N< zDA%XE9udd@0PK+;7mU8tWD>1%;B^oqlTAc@F3wUx7;-NY7JylCp3y}lNU8L1{@(^k zyNDVj?yX?2Q^2yf88AwCp~J`=bl~VQSPKOVIrW)fH`Cg4aWf_ zaYM{_Fn6MpIQ^Q$)&BNrp~q++SbB|Dl}vDNu{DxOrq z($1(gu6mBotp53Nulz_#WaRwXzh2xHrT_o{ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcomparehelpers.h.99315EB410FD5E10.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcomparehelpers.h.99315EB410FD5E10.idx new file mode 100644 index 0000000000000000000000000000000000000000..226d91ed7640dbbbe232016cb2cf53598b127f3d GIT binary patch literal 65592 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 AiU0rr literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompilerdetection.h.8C6C229C1FFFC2B5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcompilerdetection.h.8C6C229C1FFFC2B5.idx new file mode 100644 index 0000000000000000000000000000000000000000..c5916f30ec22d8445352792af1f368be148d7156 GIT binary patch literal 4568 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qconstructormacros.h.4C4C4817E1171CFA.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qconstructormacros.h.4C4C4817E1171CFA.idx new file mode 100644 index 0000000000000000000000000000000000000000..60df3e9af677d97db5ac50682e8d22c2591c3cd5 GIT binary patch literal 276 zcmWIYbaUfjWMFVk@vO*AElFfyU|>`WgATsrref#U-hE z8Hq(jsX00NfhGE8dKP*H`svBZ@n$CanR&@Mr75XEap(M^RQipqnn1QKgb+^v%6_-+Lh=Huj3 zfC(Rc(f+w{O^Gc~n1zEy1}3aMc>&Wz{~ew{VM$I&xFKF=XN9u)R8Im5D{v~v!Bhk7 b&PfDuii?tqxj_s@Pm6Wm*QA<+GcW)Egq}mQ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainerfwd.h.5FE05033C8BD3C55.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainerfwd.h.5FE05033C8BD3C55.idx new file mode 100644 index 0000000000000000000000000000000000000000..2e63ddea5189a97c1016adaf68e5d02e80e2c9d1 GIT binary patch literal 2306 zcmbtUYitx%6uup{v)%4ipxyR%yW8%gWtUw@r~4?@O%Z8HOQi+2Z7P8vjMLffr28l{ zv(k!dLI_bX{4oj`gM~!pp^XuY7(?O@#2AA9;fI=NYYf4}D3b7qA^12m+p|+8#vk0Y zXYcv$ch9-!p6||JUr*1y3PQR^`zAA@%9{uwHSn*fvNXfML>rwgd%|&bYC_EN8PT&r zoGPsJwCsr(&~V}Lf02g64{#z6k~Cyt+?Ae^H@t9ZIJ|Hr@{gs*$pAmOHl5B1L(+31 zNpwxA;#yher}`yDC5dicNCCQ;mt>MipC&X z=hNzDS>(0ABmv73pH05T8wiXm&#>Cj?XKqm`(ArET+?3LgiMqcC@x}V}h__Rg9CeLOMSx0^XgI zMQ#^_Qh6yW%E{fMt*M8Jq(Z2qG?w87Ij1~iC@5-Sh`b_~4lXQVa~mfH9cIQ>R4}0)m&Zpe>>}{XX!!|Y z(_hS;ZyZ);2_ZDXMyho~EIJ(sjZaQoOq8Qr8Culf0FI2S@!*zfU*DA#-h4 ze)Z43H&I0%0fN`=jp)XRFnfF>*&q%dwla%>5MyK2x-rhMe#zkNrx-nA3 zI{R6ZW9!FOrWy$CY>Qp**5B5<_}?mY&2jGIPfNHG)RLktjb0swUGuq%fRmCGdDdKpJXhw zE>zcQgp1mv^{ALdj)N~K9oIKPnelb;Uew9y4Qpo3?0b6%_AY0am#T+!jllq>`(j0B zuQ~Mj5R_3Ls*hp<3=MaoDG}k<&Ky1V!=1ubVEYojod{z_U~96hD3BxP9sX`C7hp|{ z$UZ(jecy86W(HtWg^41J;$$j|qMXNV)VIRdhlx?3uvb$j?nPO`xpX*_gcvd|W`1teS?(9wo~*XU@}5%u65+Gxxf^Wn+yfj|Y?>%aiG6=3a6AdHUzVC^L! zjNJoR(?7zyP7aQSy)`Hk&_$ikjkmGK(f z0$xXaEqZfj3*Tq9UcLtfH@TWTm>j+mX Q11E&IjA^|wZ7`;P1A5p+LI3~& literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainerinfo.h.F5D0CD90AC279455.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainerinfo.h.F5D0CD90AC279455.idx new file mode 100644 index 0000000000000000000000000000000000000000..cdfc5edb2a4be676f20dfe64a0ac6acd5737d24f GIT binary patch literal 8180 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 literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainertools_impl.h.13D5DB46CB94E3B1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcontainertools_impl.h.13D5DB46CB94E3B1.idx new file mode 100644 index 0000000000000000000000000000000000000000..aea83a5cd4effc3a1b9ed7541dcdd1364abd9bd8 GIT binary patch literal 10560 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 Mllii5z1YY90VuCzF#rGn literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreapplication.h.9495311E207C3FA5.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreapplication.h.9495311E207C3FA5.idx new file mode 100644 index 0000000000000000000000000000000000000000..0ea775a8452c7b95b2cc4dd671472ae638f6fc05 GIT binary patch literal 9878 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 Lhbcd!m7o6u@@=?@ literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreapplication_platform.h.025BC7505FB180D1.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreapplication_platform.h.025BC7505FB180D1.idx new file mode 100644 index 0000000000000000000000000000000000000000..22072b51fd2bdbc612ef25e54af686be65485f2c GIT binary patch literal 496 zcmWIYbaQ*b$iU#7;#rZKT9U}Zz`!63#Kk2=nU+9tFi6YHNww0~*U!k$P1R2KPVakds)FmS2=hnW^bH`ALa6l$ntS^j%qMW?o5ZQCebhD$p>7;>z44Q0Nt< zrWLyaX<3IYwcXpI85wz)oEV%0zyS*+4E@*tdp^l|9#B|;K|u&6>>(!`q`EZuJ|hsiJSlc literal 0 HcmV?d00001 diff --git a/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreevent.h.97F97F5E1881122E.idx b/src/gui/qt6/build/Desktop_Qt_6_8_0-Debug/.qtc_clangd/.cache/clangd/index/qcoreevent.h.97F97F5E1881122E.idx new file mode 100644 index 0000000000000000000000000000000000000000..afefebd3833c02d6bb131d619bae79940ba97fad GIT binary patch literal 34650 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