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
@@ -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