#ifndef UTILITIES_H #define UTILITIES_H #include #include #include #define Q_PROPERTY_AUTO(TYPE, M) \ Q_PROPERTY(TYPE M MEMBER m_##M NOTIFY M##Changed) \ public: \ Q_SIGNAL void M##Changed(); \ void M(const TYPE &in_##M) { \ m_##M = in_##M; \ Q_EMIT M##Changed(); \ } \ TYPE M() { \ return m_##M; \ } \ \ private: \ TYPE m_##M; #define Q_PROPERTY_READONLY_AUTO(TYPE, M) \ Q_PROPERTY(TYPE M READ M NOTIFY M##Changed FINAL) \ public: \ Q_SIGNAL void M##Changed(); \ void M(const TYPE &in_##M) { \ m_##M = in_##M; \ Q_EMIT M##Changed(); \ } \ TYPE M() { \ return m_##M; \ } \ \ private: \ TYPE m_##M; #define Q_PROPERTY_AUTO_P(TYPE, M) \ Q_PROPERTY(TYPE M MEMBER m_##M NOTIFY M##Changed) \ public: \ Q_SIGNAL void M##Changed(); \ void M(TYPE in_##M) { \ m_##M = in_##M; \ Q_EMIT M##Changed(); \ } \ TYPE M() { \ return m_##M; \ } \ \ private: \ TYPE m_##M; namespace WindowType { Q_NAMESPACE enum LaunchMode { Standard = 0x0000, SingleTask = 0x0001, SingleInstance = 0x0002, }; Q_ENUM_NS(LaunchMode) QML_ELEMENT } // namespace WindowType namespace ThemeType { Q_NAMESPACE enum DarkMode { System = 0x0000, Light = 0x0001, Dark = 0x0002, }; Q_ENUM_NS(DarkMode) QML_ELEMENT } // namespace ThemeType namespace ContentDialogType { Q_NAMESPACE enum ButtonFlag { NeutralButton = 0x0001, NegativeButton = 0x0002, PositiveButton = 0x0004, }; Q_ENUM_NS(ButtonFlag) QML_ELEMENT } // namespace ContentDialogType class Utilities : public QObject { Q_OBJECT QML_ELEMENT QML_SINGLETON public: static Utilities *instance(); static Utilities *create(QQmlEngine *, QJSEngine *); Q_INVOKABLE int windowBuildNumber(); Q_INVOKABLE bool isWindows11OrGreater(); Q_INVOKABLE bool isWin(); Q_INVOKABLE bool isMacos(); Q_INVOKABLE QRect desktopAvailableGeometry(QQuickWindow *window); Q_INVOKABLE QUrl getUrlByFilePath(const QString &path); Q_INVOKABLE bool isSoftware(); Q_INVOKABLE void deleteLater(QObject *p); Q_INVOKABLE QColor withOpacity(const QColor &, qreal alpha); Q_INVOKABLE QString getWallpaperFilePath(); protected: Utilities(QObject *parent = nullptr); }; #endif // UTILITIES_H