#ifndef REP_TREELAND_WINDOWTREE_REPLICA_H
#define REP_TREELAND_WINDOWTREE_REPLICA_H

// This is an autogenerated file.
// Do not edit this file, any changes made will be lost the next time it is generated.

#include <QtCore/qobject.h>
#include <QtCore/qdatastream.h>
#include <QtCore/qvariant.h>
#include <QtCore/qmap.h>
#include <QtCore/qmetatype.h>

#include <QtRemoteObjects/qremoteobjectnode.h>
#include <QtRemoteObjects/qremoteobjectpendingcall.h>
#include <QtRemoteObjects/qremoteobjectreplica.h>

#include <QtCore/QVariant>

#include <QtCore/QRectF>

#include <QtCore/QPointF>

using namespace Qt::Literals::StringLiterals;

class WindowInfo
{
    Q_GADGET

    Q_PROPERTY(QString appId READ appId WRITE setAppId)
    Q_PROPERTY(QString title READ title WRITE setTitle)
    Q_PROPERTY(QString output READ output WRITE setOutput)
    Q_PROPERTY(QString container READ container WRITE setContainer)
    Q_PROPERTY(int workspace READ workspace WRITE setWorkspace)
    Q_PROPERTY(int layer READ layer WRITE setLayer)
    Q_PROPERTY(int z READ z WRITE setZ)
    Q_PROPERTY(int type READ type WRITE setType)
    Q_PROPERTY(int state READ state WRITE setState)
    Q_PROPERTY(bool visible READ visible WRITE setVisible)
    Q_PROPERTY(bool active READ active WRITE setActive)
    Q_PROPERTY(QRectF geometry READ geometry WRITE setGeometry)
    Q_PROPERTY(QRectF titlebarGeometry READ titlebarGeometry WRITE setTitlebarGeometry)
    Q_PROPERTY(QRectF boundingRect READ boundingRect WRITE setBoundingRect)
    Q_PROPERTY(QRectF iconGeometry READ iconGeometry WRITE setIconGeometry)
    Q_PROPERTY(QPointF position READ position WRITE setPosition)
public:
    WindowInfo() : m_appId(), m_title(), m_output(), m_container(), m_workspace(), m_layer(), m_z(), m_type(), m_state(), m_visible(), m_active(), m_geometry(), m_titlebarGeometry(), m_boundingRect(), m_iconGeometry(), m_position() {}
    explicit WindowInfo(QString appId, QString title, QString output, QString container, int workspace, int layer, int z, int type, int state, bool visible, bool active, QRectF geometry, QRectF titlebarGeometry, QRectF boundingRect, QRectF iconGeometry, QPointF position) : m_appId(appId), m_title(title), m_output(output), m_container(container), m_workspace(workspace), m_layer(layer), m_z(z), m_type(type), m_state(state), m_visible(visible), m_active(active), m_geometry(geometry), m_titlebarGeometry(titlebarGeometry), m_boundingRect(boundingRect), m_iconGeometry(iconGeometry), m_position(position) {}
    QString appId() const { return m_appId; }
    void setAppId(QString appId) { if (appId != m_appId) { m_appId = appId; } }
    QString title() const { return m_title; }
    void setTitle(QString title) { if (title != m_title) { m_title = title; } }
    QString output() const { return m_output; }
    void setOutput(QString output) { if (output != m_output) { m_output = output; } }
    QString container() const { return m_container; }
    void setContainer(QString container) { if (container != m_container) { m_container = container; } }
    int workspace() const { return m_workspace; }
    void setWorkspace(int workspace) { if (workspace != m_workspace) { m_workspace = workspace; } }
    int layer() const { return m_layer; }
    void setLayer(int layer) { if (layer != m_layer) { m_layer = layer; } }
    int z() const { return m_z; }
    void setZ(int z) { if (z != m_z) { m_z = z; } }
    int type() const { return m_type; }
    void setType(int type) { if (type != m_type) { m_type = type; } }
    int state() const { return m_state; }
    void setState(int state) { if (state != m_state) { m_state = state; } }
    bool visible() const { return m_visible; }
    void setVisible(bool visible) { if (visible != m_visible) { m_visible = visible; } }
    bool active() const { return m_active; }
    void setActive(bool active) { if (active != m_active) { m_active = active; } }
    QRectF geometry() const { return m_geometry; }
    void setGeometry(QRectF geometry) { if (geometry != m_geometry) { m_geometry = geometry; } }
    QRectF titlebarGeometry() const { return m_titlebarGeometry; }
    void setTitlebarGeometry(QRectF titlebarGeometry) { if (titlebarGeometry != m_titlebarGeometry) { m_titlebarGeometry = titlebarGeometry; } }
    QRectF boundingRect() const { return m_boundingRect; }
    void setBoundingRect(QRectF boundingRect) { if (boundingRect != m_boundingRect) { m_boundingRect = boundingRect; } }
    QRectF iconGeometry() const { return m_iconGeometry; }
    void setIconGeometry(QRectF iconGeometry) { if (iconGeometry != m_iconGeometry) { m_iconGeometry = iconGeometry; } }
    QPointF position() const { return m_position; }
    void setPosition(QPointF position) { if (position != m_position) { m_position = position; } }
private:
    QString m_appId;
    QString m_title;
    QString m_output;
    QString m_container;
    int m_workspace;
    int m_layer;
    int m_z;
    int m_type;
    int m_state;
    bool m_visible;
    bool m_active;
    QRectF m_geometry;
    QRectF m_titlebarGeometry;
    QRectF m_boundingRect;
    QRectF m_iconGeometry;
    QPointF m_position;
};

inline bool operator==(const WindowInfo &left, const WindowInfo &right) Q_DECL_NOTHROW {
    return left.appId() == right.appId() && left.title() == right.title() && left.output() == right.output() && left.container() == right.container() && left.workspace() == right.workspace() && left.layer() == right.layer() && left.z() == right.z() && left.type() == right.type() && left.state() == right.state() && left.visible() == right.visible() && left.active() == right.active() && left.geometry() == right.geometry() && left.titlebarGeometry() == right.titlebarGeometry() && left.boundingRect() == right.boundingRect() && left.iconGeometry() == right.iconGeometry() && left.position() == right.position();
}
inline bool operator!=(const WindowInfo &left, const WindowInfo &right) Q_DECL_NOTHROW {
    return !(left == right);
}

inline QDebug operator<<(QDebug dbg, const WindowInfo &obj) {
    dbg.nospace() << "WindowInfo("  << "appId: " << obj.appId() << ", " << "title: " << obj.title() << ", " << "output: " << obj.output() << ", " << "container: " << obj.container() << ", " << "workspace: " << obj.workspace() << ", " << "layer: " << obj.layer() << ", " << "z: " << obj.z() << ", " << "type: " << obj.type() << ", " << "state: " << obj.state() << ", " << "visible: " << obj.visible() << ", " << "active: " << obj.active() << ", " << "geometry: " << obj.geometry() << ", " << "titlebarGeometry: " << obj.titlebarGeometry() << ", " << "boundingRect: " << obj.boundingRect() << ", " << "iconGeometry: " << obj.iconGeometry() << ", " << "position: " << obj.position() << ")";
    return dbg.maybeSpace();
}

inline QDataStream &operator<<(QDataStream &ds, const WindowInfo &obj) {
    QtRemoteObjects::copyStoredProperties(&obj, ds);
    return ds;
}

inline QDataStream &operator>>(QDataStream &ds, WindowInfo &obj) {
    QtRemoteObjects::copyStoredProperties(ds, &obj);
    return ds;
}

class WorkspaceInfo
{
    Q_GADGET

    Q_PROPERTY(int id READ id WRITE setId)
    Q_PROPERTY(bool isActive READ isActive WRITE setIsActive)
    Q_PROPERTY(QList<WindowInfo> windows READ windows WRITE setWindows)
public:
    WorkspaceInfo() : m_id(), m_isActive(), m_windows() {}
    explicit WorkspaceInfo(int id, bool isActive, QList<WindowInfo> windows) : m_id(id), m_isActive(isActive), m_windows(windows) {}
    int id() const { return m_id; }
    void setId(int id) { if (id != m_id) { m_id = id; } }
    bool isActive() const { return m_isActive; }
    void setIsActive(bool isActive) { if (isActive != m_isActive) { m_isActive = isActive; } }
    QList<WindowInfo> windows() const { return m_windows; }
    void setWindows(QList<WindowInfo> windows) { if (windows != m_windows) { m_windows = windows; } }
private:
    int m_id;
    bool m_isActive;
    QList<WindowInfo> m_windows;
};

inline bool operator==(const WorkspaceInfo &left, const WorkspaceInfo &right) Q_DECL_NOTHROW {
    return left.id() == right.id() && left.isActive() == right.isActive() && left.windows() == right.windows();
}
inline bool operator!=(const WorkspaceInfo &left, const WorkspaceInfo &right) Q_DECL_NOTHROW {
    return !(left == right);
}

inline QDebug operator<<(QDebug dbg, const WorkspaceInfo &obj) {
    dbg.nospace() << "WorkspaceInfo("  << "id: " << obj.id() << ", " << "isActive: " << obj.isActive() << ", " << "windows: " << obj.windows() << ")";
    return dbg.maybeSpace();
}

inline QDataStream &operator<<(QDataStream &ds, const WorkspaceInfo &obj) {
    QtRemoteObjects::copyStoredProperties(&obj, ds);
    return ds;
}

inline QDataStream &operator>>(QDataStream &ds, WorkspaceInfo &obj) {
    QtRemoteObjects::copyStoredProperties(ds, &obj);
    return ds;
}

class LayerInfo
{
    Q_GADGET

    Q_PROPERTY(QString name READ name WRITE setName)
    Q_PROPERTY(int layer READ layer WRITE setLayer)
    Q_PROPERTY(QList<WindowInfo> windows READ windows WRITE setWindows)
    Q_PROPERTY(QList<WorkspaceInfo> workspaces READ workspaces WRITE setWorkspaces)
public:
    LayerInfo() : m_name(), m_layer(), m_windows(), m_workspaces() {}
    explicit LayerInfo(QString name, int layer, QList<WindowInfo> windows, QList<WorkspaceInfo> workspaces) : m_name(name), m_layer(layer), m_windows(windows), m_workspaces(workspaces) {}
    QString name() const { return m_name; }
    void setName(QString name) { if (name != m_name) { m_name = name; } }
    int layer() const { return m_layer; }
    void setLayer(int layer) { if (layer != m_layer) { m_layer = layer; } }
    QList<WindowInfo> windows() const { return m_windows; }
    void setWindows(QList<WindowInfo> windows) { if (windows != m_windows) { m_windows = windows; } }
    QList<WorkspaceInfo> workspaces() const { return m_workspaces; }
    void setWorkspaces(QList<WorkspaceInfo> workspaces) { if (workspaces != m_workspaces) { m_workspaces = workspaces; } }
private:
    QString m_name;
    int m_layer;
    QList<WindowInfo> m_windows;
    QList<WorkspaceInfo> m_workspaces;
};

inline bool operator==(const LayerInfo &left, const LayerInfo &right) Q_DECL_NOTHROW {
    return left.name() == right.name() && left.layer() == right.layer() && left.windows() == right.windows() && left.workspaces() == right.workspaces();
}
inline bool operator!=(const LayerInfo &left, const LayerInfo &right) Q_DECL_NOTHROW {
    return !(left == right);
}

inline QDebug operator<<(QDebug dbg, const LayerInfo &obj) {
    dbg.nospace() << "LayerInfo("  << "name: " << obj.name() << ", " << "layer: " << obj.layer() << ", " << "windows: " << obj.windows() << ", " << "workspaces: " << obj.workspaces() << ")";
    return dbg.maybeSpace();
}

inline QDataStream &operator<<(QDataStream &ds, const LayerInfo &obj) {
    QtRemoteObjects::copyStoredProperties(&obj, ds);
    return ds;
}

inline QDataStream &operator>>(QDataStream &ds, LayerInfo &obj) {
    QtRemoteObjects::copyStoredProperties(ds, &obj);
    return ds;
}

class TreelandInfo
{
    Q_GADGET

    Q_PROPERTY(QString currentMode READ currentMode WRITE setCurrentMode)
    Q_PROPERTY(QList<LayerInfo> layers READ layers WRITE setLayers)
public:
    TreelandInfo() : m_currentMode(), m_layers() {}
    explicit TreelandInfo(QString currentMode, QList<LayerInfo> layers) : m_currentMode(currentMode), m_layers(layers) {}
    QString currentMode() const { return m_currentMode; }
    void setCurrentMode(QString currentMode) { if (currentMode != m_currentMode) { m_currentMode = currentMode; } }
    QList<LayerInfo> layers() const { return m_layers; }
    void setLayers(QList<LayerInfo> layers) { if (layers != m_layers) { m_layers = layers; } }
private:
    QString m_currentMode;
    QList<LayerInfo> m_layers;
};

inline bool operator==(const TreelandInfo &left, const TreelandInfo &right) Q_DECL_NOTHROW {
    return left.currentMode() == right.currentMode() && left.layers() == right.layers();
}
inline bool operator!=(const TreelandInfo &left, const TreelandInfo &right) Q_DECL_NOTHROW {
    return !(left == right);
}

inline QDebug operator<<(QDebug dbg, const TreelandInfo &obj) {
    dbg.nospace() << "TreelandInfo("  << "currentMode: " << obj.currentMode() << ", " << "layers: " << obj.layers() << ")";
    return dbg.maybeSpace();
}

inline QDataStream &operator<<(QDataStream &ds, const TreelandInfo &obj) {
    QtRemoteObjects::copyStoredProperties(&obj, ds);
    return ds;
}

inline QDataStream &operator>>(QDataStream &ds, TreelandInfo &obj) {
    QtRemoteObjects::copyStoredProperties(ds, &obj);
    return ds;
}

class WindowTreeRemoteReplica : public QRemoteObjectReplica
{
    Q_OBJECT
    Q_CLASSINFO(QCLASSINFO_REMOTEOBJECT_TYPE, "WindowTreeRemote")
    Q_CLASSINFO(QCLASSINFO_REMOTEOBJECT_SIGNATURE, "779a43c3d9929da0bf2286419fc5cbfd5307e03d")
    Q_PROPERTY(QPointF cursorPosition READ cursorPosition NOTIFY cursorPositionChanged)

public:
    WindowTreeRemoteReplica() : QRemoteObjectReplica() { initialize(); }
    static void registerMetatypes()
    {
        static bool initialized = false;
        if (initialized)
            return;
        initialized = true;
        qRegisterMetaType<WindowInfo>();
        qRegisterMetaType<WorkspaceInfo>();
        qRegisterMetaType<TreelandInfo>();
        qRegisterMetaType<QList<LayerInfo>>();
        qRegisterMetaType<QList<WorkspaceInfo>>();
        qRegisterMetaType<QList<WindowInfo>>();
        qRegisterMetaType<LayerInfo>();
        qRegisterMetaType<TreelandInfo>();
        qRegisterMetaType<QRemoteObjectPendingCall>();
        qRegisterMetaType<QRemoteObjectPendingReply<TreelandInfo>>();
        if (!QMetaType::hasRegisteredConverterFunction<QRemoteObjectPendingReply<TreelandInfo>, QRemoteObjectPendingCall>())
            QMetaType::registerConverter<QRemoteObjectPendingReply<TreelandInfo>, QRemoteObjectPendingCall>();

    }

private:
    WindowTreeRemoteReplica(QRemoteObjectNode *node, const QString &name = QString())
        : QRemoteObjectReplica(ConstructWithNode)
    {
        initializeNode(node, name);
    }

    void initialize() override
    {
        WindowTreeRemoteReplica::registerMetatypes();
        QVariantList properties;
        properties.reserve(1);
        properties << QVariant::fromValue(QPointF());
        setProperties(std::move(properties));
    }

public:
    ~WindowTreeRemoteReplica() override = default;

    QPointF cursorPosition() const
    {
        const QVariant variant = propAsVariant(0);
        if (!variant.canConvert<QPointF>()) {
            qWarning() << "QtRO cannot convert the property cursorPosition to type QPointF";
        }
        return variant.value<QPointF >();
    }


Q_SIGNALS:
    void cursorPositionChanged(QPointF cursorPosition);

public Q_SLOTS:
    QRemoteObjectPendingReply<TreelandInfo> getTreelandInfo()
    {
        static int __repc_index = WindowTreeRemoteReplica::staticMetaObject.indexOfSlot("getTreelandInfo()");
        QVariantList __repc_args;
        return QRemoteObjectPendingReply<TreelandInfo>(sendWithReply(QMetaObject::InvokeMetaMethod, __repc_index, __repc_args));
    }

private:
    friend class QT_PREPEND_NAMESPACE(QRemoteObjectNode);
};


#endif // REP_TREELAND_WINDOWTREE_REPLICA_H
