diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6e63e8d7..0f6c17dc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -109,7 +109,7 @@ jobs: appimage_arch: '' artifact_suffix: macos-x64 - name: macos_clang18_arm64 - os: macos-15 + os: macos-14 build_type: Release env_cc: clang env_cxx: clang++ diff --git a/CMakePresets.json b/CMakePresets.json index 056a32b9..9fec9614 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -54,9 +54,7 @@ "inherits": "windows-x64-base", "hidden": true, "cacheVariables": { - "CMAKE_PREFIX_PATH": "C:/Qt/6.8.3/msvc2022_64", - "CONAN_HOST_PROFILE": "scwx-windows_msvc2022_x64", - "CONAN_BUILD_PROFILE": "scwx-windows_msvc2022_x64" + "CMAKE_PREFIX_PATH": "C:/Qt/6.8.3/msvc2022_64" } }, { @@ -65,9 +63,7 @@ "hidden": true, "generator": "Ninja", "cacheVariables": { - "CMAKE_PREFIX_PATH": "C:/Qt/6.8.3/msvc2022_64", - "CONAN_HOST_PROFILE": "scwx-windows_msvc2022_x64", - "CONAN_BUILD_PROFILE": "scwx-windows_msvc2022_x64" + "CMAKE_PREFIX_PATH": "C:/Qt/6.8.3/msvc2022_64" } }, { @@ -75,9 +71,7 @@ "inherits": "linux-base", "hidden": true, "cacheVariables": { - "CMAKE_PREFIX_PATH": "/opt/Qt/6.8.3/gcc_64", - "CONAN_HOST_PROFILE": "scwx-linux_gcc-11", - "CONAN_BUILD_PROFILE": "scwx-linux_gcc-11" + "CMAKE_PREFIX_PATH": "/opt/Qt/6.8.3/gcc_64" }, "environment": { "CC": "gcc-11", @@ -93,7 +87,9 @@ "strategy": "external" }, "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug" + "CMAKE_BUILD_TYPE": "Debug", + "CONAN_HOST_PROFILE": "scwx-windows_msvc2022_x64-debug", + "CONAN_BUILD_PROFILE": "scwx-windows_msvc2022_x64-debug" } }, { @@ -105,7 +101,9 @@ "strategy": "external" }, "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release" + "CMAKE_BUILD_TYPE": "Release", + "CONAN_HOST_PROFILE": "scwx-windows_msvc2022_x64", + "CONAN_BUILD_PROFILE": "scwx-windows_msvc2022_x64" } }, { @@ -113,7 +111,9 @@ "inherits": "windows-msvc2022-x64-ninja-base", "displayName": "Windows MSVC 2022 x64 Ninja Debug", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug" + "CMAKE_BUILD_TYPE": "Debug", + "CONAN_HOST_PROFILE": "scwx-windows_msvc2022_x64-debug", + "CONAN_BUILD_PROFILE": "scwx-windows_msvc2022_x64-debug" } }, { @@ -121,7 +121,9 @@ "inherits": "windows-msvc2022-x64-ninja-base", "displayName": "Windows MSVC 2022 x64 Ninja Release", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release" + "CMAKE_BUILD_TYPE": "Release", + "CONAN_HOST_PROFILE": "scwx-windows_msvc2022_x64", + "CONAN_BUILD_PROFILE": "scwx-windows_msvc2022_x64" } }, { @@ -130,7 +132,9 @@ "displayName": "Linux GCC Debug", "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug", - "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/${presetName}/Debug/supercell-wx" + "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/${presetName}/Debug/supercell-wx", + "CONAN_HOST_PROFILE": "scwx-linux_gcc-11-debug", + "CONAN_BUILD_PROFILE": "scwx-linux_gcc-11-debug" } }, { @@ -139,7 +143,9 @@ "displayName": "Linux GCC Release", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release", - "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/${presetName}/Release/supercell-wx" + "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/${presetName}/Release/supercell-wx", + "CONAN_HOST_PROFILE": "scwx-linux_gcc-11", + "CONAN_BUILD_PROFILE": "scwx-linux_gcc-11" } }, { @@ -149,6 +155,8 @@ "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug", "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/${presetName}/Debug/supercell-wx", + "CONAN_HOST_PROFILE": "scwx-linux_gcc-11-debug", + "CONAN_BUILD_PROFILE": "scwx-linux_gcc-11-debug", "SCWX_ADDRESS_SANITIZER": { "type": "BOOL", "value": "ON" @@ -162,6 +170,8 @@ "cacheVariables": { "CMAKE_BUILD_TYPE": "Release", "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/${presetName}/Release/supercell-wx", + "CONAN_HOST_PROFILE": "scwx-linux_gcc-11", + "CONAN_BUILD_PROFILE": "scwx-linux_gcc-11", "SCWX_ADDRESS_SANITIZER": { "type": "BOOL", "value": "ON" @@ -202,9 +212,9 @@ "displayName": "CI Linux GCC ARM64", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release", + "CMAKE_PREFIX_PATH": "/opt/Qt/6.8.3/gcc_arm64", "CONAN_HOST_PROFILE": "scwx-linux_gcc-11_armv8", - "CONAN_BUILD_PROFILE": "scwx-linux_gcc-11_armv8", - "CMAKE_PREFIX_PATH": "/opt/Qt/6.8.3/gcc_arm64" + "CONAN_BUILD_PROFILE": "scwx-linux_gcc-11_armv8" }, "environment": { "CC": "gcc-11", @@ -233,10 +243,6 @@ "name": "macos-clang18-x64-base", "inherits": "macos-clang18-base", "hidden": true, - "cacheVariables": { - "CONAN_HOST_PROFILE": "scwx-macos_clang-18", - "CONAN_BUILD_PROFILE": "scwx-macos_clang-18" - }, "environment": { "CC": "/usr/local/opt/llvm@18/bin/clang", "CXX": "/usr/local/opt/llvm@18/bin/clang++", @@ -249,10 +255,6 @@ "name": "macos-clang18-arm64-base", "inherits": "macos-clang18-base", "hidden": true, - "cacheVariables": { - "CONAN_HOST_PROFILE": "scwx-macos_clang-18_armv8", - "CONAN_BUILD_PROFILE": "scwx-macos_clang-18_armv8" - }, "environment": { "CC": "/opt/homebrew/opt/llvm@18/bin/clang", "CXX": "/opt/homebrew/opt/llvm@18/bin/clang++", @@ -266,7 +268,9 @@ "inherits": "macos-clang18-x64-base", "displayName": "macOS Clang 18 x64 Debug", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug" + "CMAKE_BUILD_TYPE": "Debug", + "CONAN_HOST_PROFILE": "scwx-macos_clang-18-debug", + "CONAN_BUILD_PROFILE": "scwx-macos_clang-18-debug" } }, { @@ -274,7 +278,9 @@ "inherits": "macos-clang18-x64-base", "displayName": "macOS Clang 18 x64 Release", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release" + "CMAKE_BUILD_TYPE": "Release", + "CONAN_HOST_PROFILE": "scwx-macos_clang-18", + "CONAN_BUILD_PROFILE": "scwx-macos_clang-18" } }, { @@ -282,7 +288,9 @@ "inherits": "macos-clang18-arm64-base", "displayName": "macOS Clang 18 Arm64 Debug", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug" + "CMAKE_BUILD_TYPE": "Debug", + "CONAN_HOST_PROFILE": "scwx-macos_clang-18_armv8-debug", + "CONAN_BUILD_PROFILE": "scwx-macos_clang-18_armv8-debug" } }, { @@ -290,7 +298,9 @@ "inherits": "macos-clang18-arm64-base", "displayName": "macOS Clang 18 Arm64 Release", "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release" + "CMAKE_BUILD_TYPE": "Release", + "CONAN_HOST_PROFILE": "scwx-macos_clang-18_armv8", + "CONAN_BUILD_PROFILE": "scwx-macos_clang-18_armv8" } } ], diff --git a/README.md b/README.md index d5995d2f..81b0e698 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,9 @@ Supercell Wx supports the following 64-bit operating systems: - Ubuntu 22.04+ - NixOS 25.05+ - Most distributions supporting the GCC Standard C++ Library 11+ -- macOS 12 (Monterey) or later +- macOS + - 13.6+ for Intel-based Macs + - 14.0+ for Apple silicon-based Macs ## Linux Dependencies diff --git a/scwx-qt/gl/map_color.vert b/scwx-qt/gl/map_color.vert index 6ae98e92..609d1c34 100644 --- a/scwx-qt/gl/map_color.vert +++ b/scwx-qt/gl/map_color.vert @@ -26,6 +26,9 @@ void main() // Always set displayed to true vsOut.displayed = 1; + // Initialize texCoord to default value + vsOut.texCoord = vec3(0.0f, 0.0f, 0.0f); + // Pass the threshold and time range to the geometry shader vsOut.threshold = aThreshold; vsOut.timeRange = aTimeRange; diff --git a/scwx-qt/scwx-qt.cmake b/scwx-qt/scwx-qt.cmake index 4bffdc2e..c1dba7f2 100644 --- a/scwx-qt/scwx-qt.cmake +++ b/scwx-qt/scwx-qt.cmake @@ -577,7 +577,8 @@ else() -v ${SCWX_VERSION} -c ${VERSIONS_CACHE} -i ${VERSIONS_INPUT} - -o ${VERSIONS_HEADER}) + -o ${VERSIONS_HEADER} + -b ${SCWX_BUILD_NUM}) endif() add_custom_target(scwx-qt_generate_versions ALL diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.cpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.cpp index b321e149..c86007f9 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.cpp @@ -162,7 +162,10 @@ void PlacefileIcons::set_thresholded(bool thresholded) void PlacefileIcons::Initialize() { gl::OpenGLFunctions& gl = p->context_->gl(); + +#if !defined(__APPLE__) auto& gl30 = p->context_->gl30(); +#endif p->shaderProgram_ = p->context_->GetShaderProgram( {{GL_VERTEX_SHADER, ":/gl/geo_texture2d.vert"}, @@ -253,7 +256,11 @@ void PlacefileIcons::Initialize() gl.glEnableVertexAttribArray(6); // aDisplayed +#if !defined(__APPLE__) gl30.glVertexAttribI1i(7, 1); +#else + glVertexAttribI1i(7, 1); +#endif p->dirty_ = true; } diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_images.cpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_images.cpp index aafaef8d..d7dddf68 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_images.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_images.cpp @@ -140,7 +140,10 @@ void PlacefileImages::set_thresholded(bool thresholded) void PlacefileImages::Initialize() { gl::OpenGLFunctions& gl = p->context_->gl(); + +#if !defined(__APPLE__) auto& gl30 = p->context_->gl30(); +#endif p->shaderProgram_ = p->context_->GetShaderProgram( {{GL_VERTEX_SHADER, ":/gl/geo_texture2d.vert"}, @@ -222,7 +225,11 @@ void PlacefileImages::Initialize() gl.glEnableVertexAttribArray(6); // aDisplayed +#if !defined(__APPLE__) gl30.glVertexAttribI1i(7, 1); +#else + glVertexAttribI1i(7, 1); +#endif p->dirty_ = true; } diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.cpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.cpp index 6ec2750a..d9c49085 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.cpp @@ -128,7 +128,10 @@ void PlacefileLines::set_thresholded(bool thresholded) void PlacefileLines::Initialize() { gl::OpenGLFunctions& gl = p->context_->gl(); + +#if !defined(__APPLE__) auto& gl30 = p->context_->gl30(); +#endif p->shaderProgram_ = p->context_->GetShaderProgram( {{GL_VERTEX_SHADER, ":/gl/geo_texture2d.vert"}, @@ -207,7 +210,11 @@ void PlacefileLines::Initialize() gl.glEnableVertexAttribArray(6); // aDisplayed +#if !defined(__APPLE__) gl30.glVertexAttribI1i(7, 1); +#else + glVertexAttribI1i(7, 1); +#endif p->dirty_ = true; } diff --git a/scwx-qt/source/scwx/qt/gl/gl_context.cpp b/scwx-qt/source/scwx/qt/gl/gl_context.cpp index 9fd6bd85..b2cbbde3 100644 --- a/scwx-qt/source/scwx/qt/gl/gl_context.cpp +++ b/scwx-qt/source/scwx/qt/gl/gl_context.cpp @@ -56,10 +56,12 @@ gl::OpenGLFunctions& GlContext::gl() return *p->gl_; } +#if !defined(__APPLE__) QOpenGLFunctions_3_0& GlContext::gl30() { return *p->gl30_; } +#endif std::uint64_t GlContext::texture_buffer_count() const { diff --git a/scwx-qt/source/scwx/qt/gl/gl_context.hpp b/scwx-qt/source/scwx/qt/gl/gl_context.hpp index b4a6a866..b506fca1 100644 --- a/scwx-qt/source/scwx/qt/gl/gl_context.hpp +++ b/scwx-qt/source/scwx/qt/gl/gl_context.hpp @@ -25,7 +25,10 @@ public: GlContext& operator=(GlContext&&) noexcept; gl::OpenGLFunctions& gl(); + +#if !defined(__APPLE__) QOpenGLFunctions_3_0& gl30(); +#endif std::uint64_t texture_buffer_count() const; diff --git a/scwx-qt/source/scwx/qt/gl/shader_program.cpp b/scwx-qt/source/scwx/qt/gl/shader_program.cpp index 4da07a32..b4855ca9 100644 --- a/scwx-qt/source/scwx/qt/gl/shader_program.cpp +++ b/scwx-qt/source/scwx/qt/gl/shader_program.cpp @@ -138,7 +138,7 @@ bool ShaderProgram::Load( } else if (logLength > 0) { - logger_->error("Shader compiled with warnings: {}", infoLog); + logger_->warn("Shader compiled with warnings: {}", infoLog); } } @@ -160,7 +160,7 @@ bool ShaderProgram::Load( } else if (logLength > 0) { - logger_->error("Shader program linked with warnings: {}", infoLog); + logger_->warn("Shader program linked with warnings: {}", infoLog); } } diff --git a/scwx-qt/source/scwx/qt/main/main_window.ui b/scwx-qt/source/scwx/qt/main/main_window.ui index 94346c68..e760bab2 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.ui +++ b/scwx-qt/source/scwx/qt/main/main_window.ui @@ -39,7 +39,7 @@ 0 0 1024 - 22 + 21 @@ -155,8 +155,8 @@ 0 0 - 205 - 701 + 191 + 703 @@ -174,12 +174,6 @@ - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - diff --git a/scwx-qt/source/scwx/qt/manager/font_manager.cpp b/scwx-qt/source/scwx/qt/manager/font_manager.cpp index d92d3bd7..28c7b515 100644 --- a/scwx-qt/source/scwx/qt/manager/font_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/font_manager.cpp @@ -139,22 +139,22 @@ void FontManager::Impl::ConnectSignals() }); } - QObject::connect( - &SettingsManager::Instance(), - &SettingsManager::SettingsSaved, - self_, - [this]() - { - std::scoped_lock lock {dirtyFontsMutex_, fontCategoryMutex_}; + QObject::connect(&SettingsManager::Instance(), + &SettingsManager::SettingsSaved, + self_, + [this]() + { + const std::scoped_lock lock {dirtyFontsMutex_, + fontCategoryMutex_}; - for (auto fontCategory : dirtyFonts_) - { - UpdateImGuiFont(fontCategory); - UpdateQFont(fontCategory); - } + for (auto fontCategory : dirtyFonts_) + { + UpdateImGuiFont(fontCategory); + UpdateQFont(fontCategory); + } - dirtyFonts_.clear(); - }); + dirtyFonts_.clear(); + }); } void FontManager::InitializeFonts() @@ -191,7 +191,13 @@ void FontManager::Impl::UpdateQFont(types::FontCategory fontCategory) QFont font = QFontDatabase::font(QString::fromStdString(family), QString::fromStdString(styles), static_cast(size.value())); + +#if !defined(__APPLE__) font.setPointSizeF(size.value()); +#else + const units::font_size::pixels pixelSize {size}; + font.setPixelSize(static_cast(pixelSize.value())); +#endif fontCategoryQFontMap_.insert_or_assign(fontCategory, font); } diff --git a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp index d2bc15d0..13787496 100644 --- a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp @@ -679,33 +679,40 @@ void RadarProductManager::EnableRefresh(common::RadarProductGroup group, } else { - std::shared_ptr providerManager = + const std::shared_ptr providerManager = p->GetLevel3ProviderManager(product); // Only enable refresh on available products - boost::asio::post( - p->threadPool_, - [=, this]() - { - try + if (enabled) + { + boost::asio::post( + p->threadPool_, + [providerManager, product, uuid, enabled, this]() { - providerManager->provider_->RequestAvailableProducts(); - auto availableProducts = - providerManager->provider_->GetAvailableProducts(); - - if (std::find(std::execution::par, - availableProducts.cbegin(), - availableProducts.cend(), - product) != availableProducts.cend()) + try { - p->EnableRefresh(uuid, {providerManager}, enabled); + providerManager->provider_->RequestAvailableProducts(); + const auto availableProducts = + providerManager->provider_->GetAvailableProducts(); + + if (std::find(std::execution::par, + availableProducts.cbegin(), + availableProducts.cend(), + product) != availableProducts.cend()) + { + p->EnableRefresh(uuid, {providerManager}, enabled); + } } - } - catch (const std::exception& ex) - { - logger_->error(ex.what()); - } - }); + catch (const std::exception& ex) + { + logger_->error(ex.what()); + } + }); + } + else + { + p->EnableRefresh(uuid, {providerManager}, enabled); + } } } diff --git a/scwx-qt/source/scwx/qt/ui/about_dialog.cpp b/scwx-qt/source/scwx/qt/ui/about_dialog.cpp index bc24d056..9ae6ce18 100644 --- a/scwx-qt/source/scwx/qt/ui/about_dialog.cpp +++ b/scwx-qt/source/scwx/qt/ui/about_dialog.cpp @@ -24,13 +24,19 @@ AboutDialog::AboutDialog(QWidget* parent) : p {std::make_unique()}, ui(new Ui::AboutDialog) { +#if !defined(__APPLE__) + static constexpr int titleFontSize = 14; +#else + static constexpr int titleFontSize = 18; +#endif + ui->setupUi(this); - int titleFontId = + const int titleFontId = manager::FontManager::Instance().GetFontId(types::Font::din1451alt_g); - QString titleFontFamily = + const QString titleFontFamily = QFontDatabase::applicationFontFamilies(titleFontId).at(0); - QFont titleFont(titleFontFamily, 14); + const QFont titleFont(titleFontFamily, titleFontSize); ui->titleLabel->setFont(titleFont); QString repositoryUrl = diff --git a/scwx-qt/source/scwx/qt/ui/about_dialog.ui b/scwx-qt/source/scwx/qt/ui/about_dialog.ui index 64e8ed46..f8ef5270 100644 --- a/scwx-qt/source/scwx/qt/ui/about_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/about_dialog.ui @@ -16,12 +16,6 @@ - - QFrame::StyledPanel - - - QFrame::Raised - 0 @@ -44,7 +38,7 @@ :/res/icons/scwx-256.png - Qt::AlignCenter + Qt::AlignmentFlag::AlignCenter @@ -54,7 +48,7 @@ Supercell Wx - Qt::AlignCenter + Qt::AlignmentFlag::AlignCenter @@ -64,7 +58,7 @@ Version X.Y.Z - Qt::AlignCenter + Qt::AlignmentFlag::AlignCenter @@ -74,7 +68,7 @@ Git Revision 0000000000 - Qt::AlignCenter + Qt::AlignmentFlag::AlignCenter @@ -84,7 +78,7 @@ Copyright © 2021-YYYY Dan Paulat - Qt::AlignCenter + Qt::AlignmentFlag::AlignCenter @@ -94,10 +88,10 @@ - Qt::Horizontal + Qt::Orientation::Horizontal - QDialogButtonBox::Ok + QDialogButtonBox::StandardButton::Ok diff --git a/scwx-qt/source/scwx/qt/ui/alert_dialog.cpp b/scwx-qt/source/scwx/qt/ui/alert_dialog.cpp index 76aa284a..3d9d1af5 100644 --- a/scwx-qt/source/scwx/qt/ui/alert_dialog.cpp +++ b/scwx-qt/source/scwx/qt/ui/alert_dialog.cpp @@ -54,7 +54,13 @@ AlertDialog::AlertDialog(QWidget* parent) : // Set monospace font for alert view QFont monospaceFont("?"); - monospaceFont.setStyleHint(QFont::TypeWriter); + monospaceFont.setStyleHint(QFont::StyleHint::TypeWriter); + + if (!monospaceFont.fixedPitch()) + { + monospaceFont.setStyleHint(QFont::StyleHint::Monospace); + } + ui->alertText->setFont(monospaceFont); // Add Go button to button box diff --git a/scwx-qt/source/scwx/qt/ui/alert_dialog.ui b/scwx-qt/source/scwx/qt/ui/alert_dialog.ui index 55686925..f180dc71 100644 --- a/scwx-qt/source/scwx/qt/ui/alert_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/alert_dialog.ui @@ -17,18 +17,12 @@ - QTextEdit::NoWrap + QTextEdit::LineWrapMode::NoWrap - - QFrame::StyledPanel - - - QFrame::Raised - 0 @@ -108,7 +102,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -121,10 +115,10 @@ - Qt::Horizontal + Qt::Orientation::Horizontal - QDialogButtonBox::Close + QDialogButtonBox::StandardButton::Close diff --git a/scwx-qt/source/scwx/qt/ui/alert_dock_widget.ui b/scwx-qt/source/scwx/qt/ui/alert_dock_widget.ui index 96328278..317fc566 100644 --- a/scwx-qt/source/scwx/qt/ui/alert_dock_widget.ui +++ b/scwx-qt/source/scwx/qt/ui/alert_dock_widget.ui @@ -30,12 +30,6 @@ - - QFrame::StyledPanel - - - QFrame::Raised - 0 @@ -62,7 +56,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -85,7 +79,7 @@ :/res/icons/font-awesome-6/sliders-solid.svg:/res/icons/font-awesome-6/sliders-solid.svg - QToolButton::InstantPopup + QToolButton::ToolButtonPopupMode::InstantPopup diff --git a/scwx-qt/source/scwx/qt/ui/animation_dock_widget.ui b/scwx-qt/source/scwx/qt/ui/animation_dock_widget.ui index 67203ffc..dbbed2a7 100644 --- a/scwx-qt/source/scwx/qt/ui/animation_dock_widget.ui +++ b/scwx-qt/source/scwx/qt/ui/animation_dock_widget.ui @@ -10,12 +10,6 @@ 276 - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - 0 @@ -78,12 +72,6 @@ - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - 0 @@ -119,12 +107,6 @@ - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - 0 @@ -218,12 +200,6 @@ - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - 1 diff --git a/scwx-qt/source/scwx/qt/ui/county_dialog.ui b/scwx-qt/source/scwx/qt/ui/county_dialog.ui index 71741c86..6a9a0257 100644 --- a/scwx-qt/source/scwx/qt/ui/county_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/county_dialog.ui @@ -29,12 +29,6 @@ - - QFrame::StyledPanel - - - QFrame::Raised - 0 @@ -54,10 +48,10 @@ - Qt::Horizontal + Qt::Orientation::Horizontal - QDialogButtonBox::Cancel|QDialogButtonBox::Ok + QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok diff --git a/scwx-qt/source/scwx/qt/ui/imgui_debug_dialog.ui b/scwx-qt/source/scwx/qt/ui/imgui_debug_dialog.ui index 5752a7c1..6b371769 100644 --- a/scwx-qt/source/scwx/qt/ui/imgui_debug_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/imgui_debug_dialog.ui @@ -16,12 +16,6 @@ - - QFrame::StyledPanel - - - QFrame::Raised - 0 @@ -54,10 +48,10 @@ - Qt::Horizontal + Qt::Orientation::Horizontal - QDialogButtonBox::Close + QDialogButtonBox::StandardButton::Close diff --git a/scwx-qt/source/scwx/qt/ui/layer_dialog.ui b/scwx-qt/source/scwx/qt/ui/layer_dialog.ui index f9b2a076..45f8413e 100644 --- a/scwx-qt/source/scwx/qt/ui/layer_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/layer_dialog.ui @@ -16,12 +16,6 @@ - - QFrame::StyledPanel - - - QFrame::Raised - 0 @@ -41,16 +35,16 @@ true - QAbstractItemView::InternalMove + QAbstractItemView::DragDropMode::InternalMove - Qt::MoveAction + Qt::DropAction::MoveAction true - QAbstractItemView::ExtendedSelection + QAbstractItemView::SelectionMode::ExtendedSelection 0 @@ -59,12 +53,6 @@ - - QFrame::StyledPanel - - - QFrame::Raised - 0 @@ -81,7 +69,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -138,7 +126,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -156,12 +144,6 @@ - - QFrame::StyledPanel - - - QFrame::Raised - 0 @@ -188,7 +170,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -207,10 +189,10 @@ - Qt::Horizontal + Qt::Orientation::Horizontal - QDialogButtonBox::Close|QDialogButtonBox::Reset + QDialogButtonBox::StandardButton::Close|QDialogButtonBox::StandardButton::Reset diff --git a/scwx-qt/source/scwx/qt/ui/marker_dialog.ui b/scwx-qt/source/scwx/qt/ui/marker_dialog.ui index 6256b756..86e8fad3 100644 --- a/scwx-qt/source/scwx/qt/ui/marker_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/marker_dialog.ui @@ -16,12 +16,6 @@ - - QFrame::StyledPanel - - - QFrame::Raised - 0 @@ -41,10 +35,10 @@ - Qt::Horizontal + Qt::Orientation::Horizontal - QDialogButtonBox::Close + QDialogButtonBox::StandardButton::Close diff --git a/scwx-qt/source/scwx/qt/ui/marker_settings_widget.ui b/scwx-qt/source/scwx/qt/ui/marker_settings_widget.ui index 12315d24..3804f318 100644 --- a/scwx-qt/source/scwx/qt/ui/marker_settings_widget.ui +++ b/scwx-qt/source/scwx/qt/ui/marker_settings_widget.ui @@ -29,12 +29,6 @@ - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - 0 diff --git a/scwx-qt/source/scwx/qt/ui/open_url_dialog.ui b/scwx-qt/source/scwx/qt/ui/open_url_dialog.ui index a796d20d..117d62c1 100644 --- a/scwx-qt/source/scwx/qt/ui/open_url_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/open_url_dialog.ui @@ -16,12 +16,6 @@ - - QFrame::StyledPanel - - - QFrame::Raised - 0 @@ -58,7 +52,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -71,10 +65,10 @@ - Qt::Horizontal + Qt::Orientation::Horizontal - QDialogButtonBox::Cancel|QDialogButtonBox::Ok + QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok diff --git a/scwx-qt/source/scwx/qt/ui/placefile_dialog.ui b/scwx-qt/source/scwx/qt/ui/placefile_dialog.ui index 8ff045a6..aa3659bf 100644 --- a/scwx-qt/source/scwx/qt/ui/placefile_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/placefile_dialog.ui @@ -16,12 +16,6 @@ - - QFrame::StyledPanel - - - QFrame::Raised - 0 @@ -41,10 +35,10 @@ - Qt::Horizontal + Qt::Orientation::Horizontal - QDialogButtonBox::Close + QDialogButtonBox::StandardButton::Close diff --git a/scwx-qt/source/scwx/qt/ui/placefile_settings_widget.ui b/scwx-qt/source/scwx/qt/ui/placefile_settings_widget.ui index b95ab784..6355fdc0 100644 --- a/scwx-qt/source/scwx/qt/ui/placefile_settings_widget.ui +++ b/scwx-qt/source/scwx/qt/ui/placefile_settings_widget.ui @@ -29,12 +29,6 @@ - - QFrame::StyledPanel - - - QFrame::Raised - 0 @@ -61,7 +55,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal diff --git a/scwx-qt/source/scwx/qt/ui/radar_site_dialog.ui b/scwx-qt/source/scwx/qt/ui/radar_site_dialog.ui index 74eae33b..bfaf7a5c 100644 --- a/scwx-qt/source/scwx/qt/ui/radar_site_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/radar_site_dialog.ui @@ -17,7 +17,7 @@ - QAbstractItemView::CurrentChanged|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked + QAbstractItemView::EditTrigger::CurrentChanged|QAbstractItemView::EditTrigger::DoubleClicked|QAbstractItemView::EditTrigger::EditKeyPressed|QAbstractItemView::EditTrigger::SelectedClicked true @@ -32,12 +32,6 @@ - - QFrame::StyledPanel - - - QFrame::Raised - 0 @@ -64,10 +58,10 @@ - Qt::Horizontal + Qt::Orientation::Horizontal - QDialogButtonBox::Cancel|QDialogButtonBox::Ok + QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok diff --git a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp index 4f63743f..81e3a96d 100644 --- a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp +++ b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp @@ -1496,6 +1496,12 @@ void SettingsDialogImpl::UpdateFontDisplayData() self_->ui->fontStyleLabel->setText(font.styleName()); self_->ui->fontSizeLabel->setText(QString::number(font.pointSizeF())); +#if defined(__APPLE__) + const units::font_size::points fontSize {font.pointSizeF()}; + const units::font_size::pixels fontPixels {fontSize}; + font.setPixelSize(static_cast(fontPixels.value())); +#endif + self_->ui->fontPreviewLabel->setFont(font); if (selectedFontCategory_ != types::FontCategory::Unknown) diff --git a/scwx-qt/source/scwx/qt/ui/settings_dialog.ui b/scwx-qt/source/scwx/qt/ui/settings_dialog.ui index d67ef84c..aa12d3b8 100644 --- a/scwx-qt/source/scwx/qt/ui/settings_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/settings_dialog.ui @@ -16,12 +16,6 @@ - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - 0 @@ -136,8 +130,8 @@ 0 0 - 511 - 873 + 513 + 845 @@ -810,8 +804,8 @@ 0 0 - 503 - 380 + 505 + 384 @@ -1197,12 +1191,6 @@ - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - 0 @@ -1231,12 +1219,6 @@ - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - 0 @@ -1376,12 +1358,6 @@ - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - 0 diff --git a/scwx-qt/source/scwx/qt/ui/update_dialog.cpp b/scwx-qt/source/scwx/qt/ui/update_dialog.cpp index 0ca61a18..6473a30b 100644 --- a/scwx-qt/source/scwx/qt/ui/update_dialog.cpp +++ b/scwx-qt/source/scwx/qt/ui/update_dialog.cpp @@ -42,13 +42,19 @@ public: UpdateDialog::UpdateDialog(QWidget* parent) : QDialog(parent), p {std::make_unique(this)}, ui(new Ui::UpdateDialog) { +#if !defined(__APPLE__) + static constexpr int titleFontSize = 12; +#else + static constexpr int titleFontSize = 16; +#endif + ui->setupUi(this); - int titleFontId = + const int titleFontId = manager::FontManager::Instance().GetFontId(types::Font::din1451alt_g); - QString titleFontFamily = + const QString titleFontFamily = QFontDatabase::applicationFontFamilies(titleFontId).at(0); - QFont titleFont(titleFontFamily, 12); + const QFont titleFont(titleFontFamily, titleFontSize); ui->bannerLabel->setFont(titleFont); ui->releaseNotesText->setOpenExternalLinks(true); diff --git a/scwx-qt/source/scwx/qt/ui/update_dialog.ui b/scwx-qt/source/scwx/qt/ui/update_dialog.ui index 5aa8e054..84540fe9 100644 --- a/scwx-qt/source/scwx/qt/ui/update_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/update_dialog.ui @@ -16,12 +16,6 @@ - - QFrame::StyledPanel - - - QFrame::Raised - 0 @@ -56,12 +50,6 @@ - - QFrame::StyledPanel - - - QFrame::Raised - 0 @@ -113,12 +101,6 @@ - - QFrame::StyledPanel - - - QFrame::Raised - 0 @@ -149,7 +131,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -162,10 +144,10 @@ - Qt::Horizontal + Qt::Orientation::Horizontal - QDialogButtonBox::Ok + QDialogButtonBox::StandardButton::Ok diff --git a/scwx-qt/source/scwx/qt/ui/wfo_dialog.ui b/scwx-qt/source/scwx/qt/ui/wfo_dialog.ui index 26623489..cfb59664 100644 --- a/scwx-qt/source/scwx/qt/ui/wfo_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/wfo_dialog.ui @@ -29,12 +29,6 @@ - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - 0 diff --git a/tools/configure-environment.bat b/tools/configure-environment.bat index d386ecc0..bf9118a4 100644 --- a/tools/configure-environment.bat +++ b/tools/configure-environment.bat @@ -33,8 +33,24 @@ pip install --upgrade -r "%script_dir%\..\requirements.txt" :: Install Conan profiles @for /L %%i in (0,1,!last_profile!) do @( + :: Install the base profile set "profile_name=!conan_profile[%%i]!" - conan config install "%script_dir%\conan\profiles\!profile_name!" -tf profiles + set "profile_path=%script_dir%\conan\profiles\!profile_name!" + conan config install "!profile_path!" -tf profiles + + :: Create debug profile in temp directory + set "debug_profile_name=!profile_name!-debug" + set "debug_profile_path=%TEMP%\!debug_profile_name!" + copy "!profile_path!" "!debug_profile_path!" >nul + + :: Replace build_type=Release with build_type=Debug + powershell -Command "(Get-Content '!debug_profile_path!') -replace 'build_type=Release', 'build_type=Debug' | Set-Content '!debug_profile_path!'" + + :: Install the debug profile + conan config install "!debug_profile_path!" -tf profiles + + :: Remove temporary debug profile + del "!debug_profile_path!" ) :: Deactivate Python Virtual Environment diff --git a/tools/configure-environment.sh b/tools/configure-environment.sh index 1dfc714c..f88ef504 100755 --- a/tools/configure-environment.sh +++ b/tools/configure-environment.sh @@ -71,7 +71,25 @@ fi # Install Conan profiles for profile_name in "${conan_profiles[@]}"; do + # Install original profile conan config install "${script_dir}/conan/profiles/${profile_name}" -tf profiles + + # Create debug profile in temp directory + debug_profile="/tmp/${profile_name}-debug" + cp "${script_dir}/conan/profiles/${profile_name}" "${debug_profile}" + + # Replace build_type=Release with build_type=Debug + if [[ "$(uname)" == "Darwin" ]]; then + sed -i '' 's/build_type=Release/build_type=Debug/g' "${debug_profile}" + else + sed -i 's/build_type=Release/build_type=Debug/g' "${debug_profile}" + fi + + # Install the debug profile + conan config install "${debug_profile}" -tf profiles + + # Remove temporary debug profile + rm "${debug_profile}" done # Deactivate Python Virtual Environment diff --git a/tools/setup-debug.sh b/tools/setup-linux-ninja-debug.sh similarity index 100% rename from tools/setup-debug.sh rename to tools/setup-linux-ninja-debug.sh diff --git a/tools/setup-multi.sh b/tools/setup-linux-ninja-multi.sh similarity index 83% rename from tools/setup-multi.sh rename to tools/setup-linux-ninja-multi.sh index 05a6cad5..85bb9a97 100755 --- a/tools/setup-multi.sh +++ b/tools/setup-linux-ninja-multi.sh @@ -1,11 +1,12 @@ #!/bin/bash script_dir="$(dirname "$(readlink -f "$0")")" -export build_dir="$(readlink -f "${1:-${script_dir}/../build-debug}")" +export build_dir="$(readlink -f "${1:-${script_dir}/../build-multi}")" export conan_profile=${2:-scwx-linux_gcc-11} export generator="Ninja Multi-Config" export qt_base=/opt/Qt export qt_arch=gcc_64 +export address_sanitizer=${4:-disabled} # Assign user-specified Python Virtual Environment [ "${3:-}" = "none" ] && unset venv_path || export venv_path="$(readlink -f "${3:-${script_dir}/../.venv}")" diff --git a/tools/setup-release.sh b/tools/setup-linux-ninja-release.sh similarity index 100% rename from tools/setup-release.sh rename to tools/setup-linux-ninja-release.sh diff --git a/tools/setup-macos-debug.sh b/tools/setup-macos-ninja-debug.sh similarity index 100% rename from tools/setup-macos-debug.sh rename to tools/setup-macos-ninja-debug.sh diff --git a/tools/setup-macos-release.sh b/tools/setup-macos-ninja-release.sh similarity index 100% rename from tools/setup-macos-release.sh rename to tools/setup-macos-ninja-release.sh diff --git a/tools/setup-macos-xcode-debug.sh b/tools/setup-macos-xcode-debug.sh new file mode 100755 index 00000000..ced08867 --- /dev/null +++ b/tools/setup-macos-xcode-debug.sh @@ -0,0 +1,34 @@ +#!/bin/bash +script_source="${BASH_SOURCE[0]:-$0}" +script_dir="$(cd "$(dirname "${script_source}")" && pwd)" + +export build_dir="$(python3 -c 'import os,sys;print(os.path.realpath(sys.argv[1]))' "${1:-${script_dir}/../build-xcode-debug}")" +export build_type=Debug +export conan_profile=${2:-scwx-macos_clang-18_armv8} +export generator=Xcode +export qt_base="/Users/${USER}/Qt" +export qt_arch=macos +export address_sanitizer=${4:-disabled} + +# Set explicit compiler paths +export CC=$(brew --prefix llvm@18)/bin/clang +export CXX=$(brew --prefix llvm@18)/bin/clang++ +export PATH="$(brew --prefix llvm@18)/bin:$PATH" + +export LDFLAGS="-L$(brew --prefix llvm@18)/lib -L$(brew --prefix llvm@18)/lib/c++" +export CPPFLAGS="-I$(brew --prefix llvm@18)/include" + +# Assign user-specified Python Virtual Environment +if [ "${3:-}" = "none" ]; then + unset venv_path +else + # macOS does not have 'readlink -f', use python for realpath + export venv_path="$(python3 -c 'import os,sys;print(os.path.realpath(sys.argv[1]))' "${3:-${script_dir}/../.venv}")" +fi + +# FIXME: aws-sdk-cpp fails to configure using Xcode +echo "Xcode is not supported" +read -p "Press Enter to continue..." + +# Perform common setup +# "${script_dir}/lib/setup-common.sh" diff --git a/tools/setup-macos-xcode-multi.sh b/tools/setup-macos-xcode-multi.sh new file mode 100755 index 00000000..f706b072 --- /dev/null +++ b/tools/setup-macos-xcode-multi.sh @@ -0,0 +1,33 @@ +#!/bin/bash +script_source="${BASH_SOURCE[0]:-$0}" +script_dir="$(cd "$(dirname "${script_source}")" && pwd)" + +export build_dir="$(python3 -c 'import os,sys;print(os.path.realpath(sys.argv[1]))' "${1:-${script_dir}/../build-xcode}")" +export conan_profile=${2:-scwx-macos_clang-18_armv8} +export generator=Xcode +export qt_base=/opt/Qt +export qt_arch=gcc_64 +export address_sanitizer=${4:-disabled} + +# Set explicit compiler paths +export CC=$(brew --prefix llvm@18)/bin/clang +export CXX=$(brew --prefix llvm@18)/bin/clang++ +export PATH="$(brew --prefix llvm@18)/bin:$PATH" + +export LDFLAGS="-L$(brew --prefix llvm@18)/lib -L$(brew --prefix llvm@18)/lib/c++" +export CPPFLAGS="-I$(brew --prefix llvm@18)/include" + +# Assign user-specified Python Virtual Environment +if [ "${3:-}" = "none" ]; then + unset venv_path +else + # macOS does not have 'readlink -f', use python for realpath + export venv_path="$(python3 -c 'import os,sys;print(os.path.realpath(sys.argv[1]))' "${3:-${script_dir}/../.venv}")" +fi + +# FIXME: aws-sdk-cpp fails to configure using Xcode +echo "Xcode is not supported" +read -p "Press Enter to continue..." + +# Perform common setup +# "${script_dir}/lib/setup-common.sh" diff --git a/tools/setup-macos-xcode-release.sh b/tools/setup-macos-xcode-release.sh new file mode 100755 index 00000000..ab788c7e --- /dev/null +++ b/tools/setup-macos-xcode-release.sh @@ -0,0 +1,34 @@ +#!/bin/bash +script_source="${BASH_SOURCE[0]:-$0}" +script_dir="$(cd "$(dirname "${script_source}")" && pwd)" + +export build_dir="$(python3 -c 'import os,sys;print(os.path.realpath(sys.argv[1]))' "${1:-${script_dir}/../build-xcode-release}")" +export build_type=Release +export conan_profile=${2:-scwx-macos_clang-18_armv8} +export generator=Xcode +export qt_base="/Users/${USER}/Qt" +export qt_arch=macos +export address_sanitizer=${4:-disabled} + +# Set explicit compiler paths +export CC=$(brew --prefix llvm@18)/bin/clang +export CXX=$(brew --prefix llvm@18)/bin/clang++ +export PATH="$(brew --prefix llvm@18)/bin:$PATH" + +export LDFLAGS="-L$(brew --prefix llvm@18)/lib -L$(brew --prefix llvm@18)/lib/c++" +export CPPFLAGS="-I$(brew --prefix llvm@18)/include" + +# Assign user-specified Python Virtual Environment +if [ "${3:-}" = "none" ]; then + unset venv_path +else + # macOS does not have 'readlink -f', use python for realpath + export venv_path="$(python3 -c 'import os,sys;print(os.path.realpath(sys.argv[1]))' "${3:-${script_dir}/../.venv}")" +fi + +# FIXME: aws-sdk-cpp fails to configure using Xcode +echo "Xcode is not supported" +read -p "Press Enter to continue..." + +# Perform common setup +# "${script_dir}/lib/setup-common.sh" diff --git a/tools/setup-debug-msvc2022.bat b/tools/setup-windows-msvc2022-debug.bat similarity index 100% rename from tools/setup-debug-msvc2022.bat rename to tools/setup-windows-msvc2022-debug.bat diff --git a/tools/setup-multi-msvc2022.bat b/tools/setup-windows-msvc2022-multi.bat similarity index 100% rename from tools/setup-multi-msvc2022.bat rename to tools/setup-windows-msvc2022-multi.bat diff --git a/tools/setup-release-msvc2022.bat b/tools/setup-windows-msvc2022-release.bat similarity index 100% rename from tools/setup-release-msvc2022.bat rename to tools/setup-windows-msvc2022-release.bat diff --git a/tools/setup-debug-ninja.bat b/tools/setup-windows-ninja-debug.bat similarity index 100% rename from tools/setup-debug-ninja.bat rename to tools/setup-windows-ninja-debug.bat diff --git a/tools/setup-multi-ninja.bat b/tools/setup-windows-ninja-multi.bat similarity index 100% rename from tools/setup-multi-ninja.bat rename to tools/setup-windows-ninja-multi.bat diff --git a/tools/setup-release-ninja.bat b/tools/setup-windows-ninja-release.bat similarity index 100% rename from tools/setup-release-ninja.bat rename to tools/setup-windows-ninja-release.bat