Merge pull request #471 from dpaulat/feature/macos-updates

macOS Cleanup
This commit is contained in:
Dan Paulat 2025-07-01 23:29:45 -04:00 committed by GitHub
commit 327129999e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
50 changed files with 339 additions and 286 deletions

View file

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

View file

@ -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"
}
}
],

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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);
}
}

View file

@ -39,7 +39,7 @@
<x>0</x>
<y>0</y>
<width>1024</width>
<height>22</height>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
@ -155,8 +155,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>205</width>
<height>701</height>
<width>191</width>
<height>703</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
@ -174,12 +174,6 @@
</property>
<item>
<widget class="QFrame" name="radarInfoFrame">
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout" columnstretch="0,0,0,0,0">
<item row="3" column="2" colspan="3">
<widget class="QLabel" name="vcpValueLabel">

View file

@ -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<int>(size.value()));
#if !defined(__APPLE__)
font.setPointSizeF(size.value());
#else
const units::font_size::pixels<double> pixelSize {size};
font.setPixelSize(static_cast<int>(pixelSize.value()));
#endif
fontCategoryQFontMap_.insert_or_assign(fontCategory, font);
}

View file

@ -679,33 +679,40 @@ void RadarProductManager::EnableRefresh(common::RadarProductGroup group,
}
else
{
std::shared_ptr<ProviderManager> providerManager =
const std::shared_ptr<ProviderManager> 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);
}
}
}

View file

@ -24,13 +24,19 @@ AboutDialog::AboutDialog(QWidget* parent) :
p {std::make_unique<AboutDialogImpl>()},
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 =

View file

@ -16,12 +16,6 @@
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QFrame" name="frame_2">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>0</number>
@ -44,7 +38,7 @@
<pixmap resource="../../../../scwx-qt.qrc">:/res/icons/scwx-256.png</pixmap>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
@ -54,7 +48,7 @@
<string>Supercell Wx</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
@ -64,7 +58,7 @@
<string>Version X.Y.Z</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
@ -74,7 +68,7 @@
<string>Git Revision 0000000000</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
@ -84,7 +78,7 @@
<string>Copyright © 2021-YYYY Dan Paulat</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
@ -94,10 +88,10 @@
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Ok</set>
<set>QDialogButtonBox::StandardButton::Ok</set>
</property>
</widget>
</item>

View file

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

View file

@ -17,18 +17,12 @@
<item>
<widget class="QTextBrowser" name="alertText">
<property name="lineWrapMode">
<enum>QTextEdit::NoWrap</enum>
<enum>QTextEdit::LineWrapMode::NoWrap</enum>
</property>
</widget>
</item>
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>
@ -108,7 +102,7 @@
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -121,10 +115,10 @@
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
<set>QDialogButtonBox::StandardButton::Close</set>
</property>
</widget>
</item>

View file

@ -30,12 +30,6 @@
</item>
<item>
<widget class="QFrame" name="frame_2">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>0</number>
@ -62,7 +56,7 @@
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -85,7 +79,7 @@
<normaloff>:/res/icons/font-awesome-6/sliders-solid.svg</normaloff>:/res/icons/font-awesome-6/sliders-solid.svg</iconset>
</property>
<property name="popupMode">
<enum>QToolButton::InstantPopup</enum>
<enum>QToolButton::ToolButtonPopupMode::InstantPopup</enum>
</property>
</widget>
</item>

View file

@ -10,12 +10,6 @@
<height>276</height>
</rect>
</property>
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<property name="leftMargin">
<number>0</number>
@ -78,12 +72,6 @@
</item>
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>
@ -119,12 +107,6 @@
</item>
<item>
<widget class="QFrame" name="frame_3">
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
@ -218,12 +200,6 @@
</item>
<item>
<widget class="QFrame" name="frame_2">
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>1</number>

View file

@ -29,12 +29,6 @@
</item>
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>
@ -54,10 +48,10 @@
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
</property>
</widget>
</item>

View file

@ -16,12 +16,6 @@
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QFrame" name="bottomFrame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>
@ -54,10 +48,10 @@
</sizepolicy>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
<set>QDialogButtonBox::StandardButton::Close</set>
</property>
</widget>
</item>

View file

@ -16,12 +16,6 @@
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>
@ -41,16 +35,16 @@
<bool>true</bool>
</property>
<property name="dragDropMode">
<enum>QAbstractItemView::InternalMove</enum>
<enum>QAbstractItemView::DragDropMode::InternalMove</enum>
</property>
<property name="defaultDropAction">
<enum>Qt::MoveAction</enum>
<enum>Qt::DropAction::MoveAction</enum>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
<enum>QAbstractItemView::SelectionMode::ExtendedSelection</enum>
</property>
<property name="indentation">
<number>0</number>
@ -59,12 +53,6 @@
</item>
<item>
<widget class="QFrame" name="frame_2">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>0</number>
@ -81,7 +69,7 @@
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -138,7 +126,7 @@
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -156,12 +144,6 @@
</item>
<item>
<widget class="QFrame" name="frame_3">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>0</number>
@ -188,7 +170,7 @@
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -207,10 +189,10 @@
</sizepolicy>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Close|QDialogButtonBox::Reset</set>
<set>QDialogButtonBox::StandardButton::Close|QDialogButtonBox::StandardButton::Reset</set>
</property>
</widget>
</item>

View file

@ -16,12 +16,6 @@
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QFrame" name="contentsFrame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>0</number>
@ -41,10 +35,10 @@
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
<set>QDialogButtonBox::StandardButton::Close</set>
</property>
</widget>
</item>

View file

@ -29,12 +29,6 @@
</item>
<item>
<widget class="QFrame" name="buttonFrame">
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>0</number>

View file

@ -16,12 +16,6 @@
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>
@ -58,7 +52,7 @@
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -71,10 +65,10 @@
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
</property>
</widget>
</item>

View file

@ -16,12 +16,6 @@
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QFrame" name="contentsFrame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>0</number>
@ -41,10 +35,10 @@
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
<set>QDialogButtonBox::StandardButton::Close</set>
</property>
</widget>
</item>

View file

@ -29,12 +29,6 @@
</item>
<item>
<widget class="QFrame" name="buttonFrame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>0</number>
@ -61,7 +55,7 @@
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>

View file

@ -17,7 +17,7 @@
<item>
<widget class="QTreeView" name="radarSiteView">
<property name="editTriggers">
<set>QAbstractItemView::CurrentChanged|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked</set>
<set>QAbstractItemView::EditTrigger::CurrentChanged|QAbstractItemView::EditTrigger::DoubleClicked|QAbstractItemView::EditTrigger::EditKeyPressed|QAbstractItemView::EditTrigger::SelectedClicked</set>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
@ -32,12 +32,6 @@
</item>
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>
@ -64,10 +58,10 @@
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
</property>
</widget>
</item>

View file

@ -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<double> fontSize {font.pointSizeF()};
const units::font_size::pixels<double> fontPixels {fontSize};
font.setPixelSize(static_cast<int>(fontPixels.value()));
#endif
self_->ui->fontPreviewLabel->setFont(font);
if (selectedFontCategory_ != types::FontCategory::Unknown)

View file

@ -16,12 +16,6 @@
<layout class="QGridLayout" name="gridLayout_11">
<item row="0" column="0">
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>
@ -136,8 +130,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>511</width>
<height>873</height>
<width>513</width>
<height>845</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
@ -810,8 +804,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>503</width>
<height>380</height>
<width>505</width>
<height>384</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_3">
@ -1197,12 +1191,6 @@
<layout class="QGridLayout" name="gridLayout_8" columnstretch="2,3">
<item row="0" column="0">
<widget class="QFrame" name="frame_5">
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_9">
<property name="leftMargin">
<number>0</number>
@ -1231,12 +1219,6 @@
</item>
<item row="0" column="1">
<widget class="QFrame" name="frame_6">
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_6">
<property name="leftMargin">
<number>0</number>
@ -1376,12 +1358,6 @@
</item>
<item>
<widget class="QFrame" name="frame_3">
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_7">
<property name="leftMargin">
<number>0</number>

View file

@ -42,13 +42,19 @@ public:
UpdateDialog::UpdateDialog(QWidget* parent) :
QDialog(parent), p {std::make_unique<Impl>(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);

View file

@ -16,12 +16,6 @@
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QFrame" name="topFrame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>
@ -56,12 +50,6 @@
</item>
<item>
<widget class="QFrame" name="textFrame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>0</number>
@ -113,12 +101,6 @@
</item>
<item>
<widget class="QFrame" name="bottomFrame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>0</number>
@ -149,7 +131,7 @@
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -162,10 +144,10 @@
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Ok</set>
<set>QDialogButtonBox::StandardButton::Ok</set>
</property>
</widget>
</item>

View file

@ -29,12 +29,6 @@
</item>
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>

View file

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

View file

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

View file

@ -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}")"

View file

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

View file

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

View file

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