Skip to content

CppExt Backend Overview

The CppExt folder contains all C++-based backend singletons and utility classes used by Uniquenium. These classes are registered into the QML type system via QML_SINGLETON and can be accessed directly in QML by their type name without instantiation.

Architecture

┌─────────────────────────────────────────────────────┐
│                  Uniquenium App                      │
│  main.qml  ───  Creates UniDeskComManager instance   │
└────────────┬────────────────────────────────────────┘
             │ passes comManager property

┌─────────────────────────────────────────────────────┐
│  UniDesk Controls / Components (QML)                │
│  ├─ UniDeskWindow / UniDeskButton / UDCText ...    │
│  └─ Accesses services via comManager                │
└────────────┬────────────────────────────────────────┘
             │ import UniDesk 1.0

┌─────────────────────────────────────────────────────┐
│  CppExt C++ Singleton Layer                          │
│  ├─ UniDeskGlobals      Global theme state          │
│  ├─ UniDeskSettings     User settings persistence   │
│  ├─ UniDeskTools        General utility functions   │
│  ├─ UniDeskExpr         Expression engine          │
│  ├─ UniDeskSystemInfo   System information         │
│  ├─ UniDeskPluginMgr    Plugin loading/management   │
│  ├─ UniDeskTempleteMgr  Template import/export      │
│  ├─ UniDeskComponentsData Component data persistence│
│  └─ ...                                             │
└─────────────────────────────────────────────────────┘

Access

All CppExt singletons are registered via QML_SINGLETON + QML_NAMED_ELEMENT. After import UniDesk 1.0, they can be accessed directly:

qml
import UniDesk 1.0

// Read system theme
console.log("Theme:", UniDeskGlobals.isLight ? "Light" : "Dark")

// Get CPU usage
var stats = UniDeskSystemInfo.getSystemStats()
console.log("CPU:", stats.cpu.usagePercent, "%")

// Evaluate expression
var text = UniDeskExpr.convertStr("Current CPU: %{cpu}%")

Relationship with UniDeskComManager

CppExt singletons are responsible for low-level data and native features, while UniDeskComManager (a QML control) is responsible for organizing components and pages at a higher level:

  • UniDeskComManager calls methods on UniDeskComponentsData for persistence when creating/saving/loading components
  • Template import/export is handled by UniDeskTempleteMgr, which signals UniDeskComManager to rebuild components
  • After plugins are loaded by UniDeskPluginMgr, the newly registered types are merged into UniDeskComManager.type_list

Documentation Index

ClassCategoryDescription
UniDeskGlobalsGlobal StateTheme mode, app quit signal, i18n
UniDeskSettingsGlobal StateUser settings read/write
UniDeskToolsUtilitiesColors, system commands, fonts, wallpapers, UUID, auto-start
UniDeskExprExpression Engine%{value} evaluation, API response parsing
UniDeskSystemInfoSystem InfoCPU, memory, network, battery real-time data
UniDeskPluginMgrPlugin ManagerDLL plugin load, unload, type registration
UniDeskTempleteMgrTemplate SystemTemplate save, load, list refresh, media handling
UniDeskComponentsDataData PersistencePage/component JSON read/write
UniDeskPluginInterfacePlugin InterfaceAbstract base class for C++ plugins

Released under the CC BY-SA 4.0 open documentation license.