Implemented new C++ logic

This commit is contained in:
Martino Ferrari
2026-06-12 15:25:13 +02:00
parent 617b5bd712
commit f25bd7f08e
220 changed files with 39185 additions and 850 deletions
+124
View File
@@ -0,0 +1,124 @@
cmake_minimum_required(VERSION 3.16)
project(StreamHubClient CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# ── Find system packages ──────────────────────────────────────────────────────
find_package(OpenGL REQUIRED)
# SDL2: try cmake config first, fall back to pkg-config
find_package(SDL2 QUIET CONFIG)
if(NOT SDL2_FOUND)
find_package(PkgConfig REQUIRED)
pkg_check_modules(SDL2 REQUIRED sdl2)
add_library(SDL2::SDL2 INTERFACE IMPORTED)
target_include_directories(SDL2::SDL2 INTERFACE ${SDL2_INCLUDE_DIRS})
target_link_libraries(SDL2::SDL2 INTERFACE ${SDL2_LIBRARIES})
target_compile_options(SDL2::SDL2 INTERFACE ${SDL2_CFLAGS_OTHER})
endif()
# ── Fetch Dear ImGui ──────────────────────────────────────────────────────────
include(FetchContent)
FetchContent_Declare(
imgui
GIT_REPOSITORY https://github.com/ocornut/imgui.git
GIT_TAG v1.91.8
GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(imgui)
# ── Fetch ImPlot ──────────────────────────────────────────────────────────────
FetchContent_Declare(
implot
GIT_REPOSITORY https://github.com/epezent/implot.git
GIT_TAG v0.17
GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(implot)
# ── Build ImGui + ImPlot as a static library ──────────────────────────────────
add_library(imgui_lib STATIC
${imgui_SOURCE_DIR}/imgui.cpp
${imgui_SOURCE_DIR}/imgui_draw.cpp
${imgui_SOURCE_DIR}/imgui_tables.cpp
${imgui_SOURCE_DIR}/imgui_widgets.cpp
${imgui_SOURCE_DIR}/backends/imgui_impl_sdl2.cpp
${imgui_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp
${implot_SOURCE_DIR}/implot.cpp
${implot_SOURCE_DIR}/implot_items.cpp
)
target_include_directories(imgui_lib PUBLIC
${imgui_SOURCE_DIR}
${imgui_SOURCE_DIR}/backends
${implot_SOURCE_DIR}
)
target_link_libraries(imgui_lib PUBLIC SDL2::SDL2 OpenGL::GL)
target_compile_options(imgui_lib PRIVATE -w) # suppress warnings from vendored code
# ── Bundled resources (fonts, desktop entry, icon) ───────────────────────────
# Fonts (UI font + Font Awesome 6 Free Solid + glyph-macro header) are vendored
# in resources/fonts — no network access or system fonts required.
set(RESOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/resources)
set(FONT_DIR ${RESOURCE_DIR}/fonts)
if(EXISTS ${FONT_DIR}/fa-solid-900.ttf AND EXISTS ${FONT_DIR}/IconsFontAwesome6.h)
set(HAVE_FONT_AWESOME TRUE)
message(STATUS "Font Awesome icons enabled (${FONT_DIR})")
else()
set(HAVE_FONT_AWESOME FALSE)
message(WARNING "Bundled Font Awesome missing — using ASCII icon fallbacks")
endif()
# Mirror resources next to the built executable so dev runs find them
file(COPY ${RESOURCE_DIR}/fonts DESTINATION ${CMAKE_BINARY_DIR}/resources)
# ── Application sources ───────────────────────────────────────────────────────
set(APP_SOURCES
main.cpp
App.cpp
WSClient.cpp
Protocol.cpp
SourcePanel.cpp
PlotPanel.cpp
TriggerPanel.cpp
StatsPanel.cpp
)
add_executable(StreamHubClient ${APP_SOURCES})
target_include_directories(StreamHubClient PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
# Reuse WSFrame.h, SHA1.h, Base64.h from StreamHub without copying
${CMAKE_CURRENT_SOURCE_DIR}/../../Source/Applications/StreamHub
)
target_link_libraries(StreamHubClient PRIVATE
imgui_lib
SDL2::SDL2
OpenGL::GL
pthread
)
# Source-tree resource dir baked in as last-resort runtime fallback
target_compile_definitions(StreamHubClient PRIVATE
APP_RESOURCE_DIR="${RESOURCE_DIR}"
)
if(HAVE_FONT_AWESOME)
target_include_directories(StreamHubClient PRIVATE ${FONT_DIR})
target_compile_definitions(StreamHubClient PRIVATE HAVE_FONT_AWESOME)
endif()
target_compile_options(StreamHubClient PRIVATE
-Wall -Wextra -Wno-unused-parameter
)
# ── Install ───────────────────────────────────────────────────────────────────
install(TARGETS StreamHubClient DESTINATION bin)
install(DIRECTORY ${RESOURCE_DIR}/fonts DESTINATION share/streamhub-client)
install(FILES ${RESOURCE_DIR}/streamhub-client.desktop
DESTINATION share/applications)
install(FILES ${RESOURCE_DIR}/icons/streamhub-client.svg
DESTINATION share/icons/hicolor/scalable/apps)