C++ Desktop Implementation
Target: $ARGUMENTS
Implement C++ desktop GUI code following framework conventions, C++17 standards, and CMake best practices. No over-engineering.
Workflow
- Detect framework:
wxWidgetsin CMakeLists.txt orwx/includes -> wxWidgetsgtkin pkg-config or CMakeLists.txt -> GTK3Qtin CMakeLists.txt or.profile -> Qt- None detected -> ask user which framework
- Study existing patterns in
src/andinclude/structure - Implement minimal solution matching stated functionality
- Build and validate with CMake
- Report — list created files, build status
C++ Standards
- C++17 minimum — use
std::optional,std::variant, structured bindings - RAII — acquire resources in constructors, release in destructors
- Smart pointers —
std::unique_ptrby default,std::shared_ptronly when shared ownership required - Const-correctness —
conston methods, parameters, and locals where possible - No raw
new/delete— use smart pointers or container types
Framework Patterns
wxWidgets
- Use
wxBEGIN_EVENT_TABLE/wxEND_EVENT_TABLEorBind()for events - Derive frames from
wxFrame, dialogs fromwxDialog - Use sizers (
wxBoxSizer,wxGridSizer) for layout, never absolute positioning - Parent windows own children (no manual delete)
GTK3
- Use
g_signal_connectfor signal/slot wiring - Follow GObject conventions for custom widgets
- Use
GtkBuilderwith.uifiles for complex layouts - Proper
g_object_unref/g_freefor C API resources
Qt
- Use signals/slots with
Q_OBJECTmacro and MOC - Derive from
QWidget,QMainWindow,QDialogas appropriate - Use layouts (
QVBoxLayout,QHBoxLayout,QGridLayout) - Parent-child ownership model — parent deletes children
CMake Best Practices
Target-based — use
target_link_libraries,target_include_directoriesNo global state — avoid
include_directories(),link_libraries()Modern find —
find_package()with imported targetsMinimum version —
cmake_minimum_required(VERSION 3.16)Platform conditionals:
if(WIN32) # Windows-specific elseif(APPLE) # macOS-specific else() # Linux/Unix endif()
Platform Compilation
Use preprocessor guards for platform-specific code:
#ifdef _WIN32
// Windows
#elif __APPLE__
// macOS
#else
// Linux/Unix
#endif
Quality Checks
Before completing any task:
cmake --build build/ && ctest --test-dir build/ --output-on-failure
Rules
- Follow existing code style (indentation, naming) in the project
- Create header declarations alongside implementations
- Use forward declarations to minimize include dependencies
- Prefer
#pragma onceover include guards - Keep GUI logic separate from business logic