// This file was generated by qtwaylandscanner
// source file is kde-output-management-v2.xml

#ifndef QT_WAYLAND_KDE_OUTPUT_MANAGEMENT_V2
#define QT_WAYLAND_KDE_OUTPUT_MANAGEMENT_V2

#include "wayland-kde-output-management-v2-client-protocol.h"
#include <QByteArray>
#include <QString>

struct wl_registry;

QT_BEGIN_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_GCC("-Wmissing-field-initializers")
QT_WARNING_DISABLE_CLANG("-Wmissing-field-initializers")

namespace QtWayland {
    class  kde_output_management_v2
    {
    public:
        kde_output_management_v2(struct ::wl_registry *registry, uint32_t id, int version);
        kde_output_management_v2(struct ::kde_output_management_v2 *object);
        kde_output_management_v2();

        virtual ~kde_output_management_v2();

        void init(struct ::wl_registry *registry, uint32_t id, int version);
        void init(struct ::kde_output_management_v2 *object);

        struct ::kde_output_management_v2 *object() { return m_kde_output_management_v2; }
        const struct ::kde_output_management_v2 *object() const { return m_kde_output_management_v2; }
        static kde_output_management_v2 *fromObject(struct ::kde_output_management_v2 *object);

        bool isInitialized() const;

        uint32_t version() const;
        static const struct ::wl_interface *interface();

        struct ::kde_output_configuration_v2 *create_configuration();
        struct ::kde_mode_list_v2 *create_mode_list();

    private:
        struct ::kde_output_management_v2 *m_kde_output_management_v2;
    };

    class  kde_output_configuration_v2
    {
    public:
        kde_output_configuration_v2(struct ::wl_registry *registry, uint32_t id, int version);
        kde_output_configuration_v2(struct ::kde_output_configuration_v2 *object);
        kde_output_configuration_v2();

        virtual ~kde_output_configuration_v2();

        void init(struct ::wl_registry *registry, uint32_t id, int version);
        void init(struct ::kde_output_configuration_v2 *object);

        struct ::kde_output_configuration_v2 *object() { return m_kde_output_configuration_v2; }
        const struct ::kde_output_configuration_v2 *object() const { return m_kde_output_configuration_v2; }
        static kde_output_configuration_v2 *fromObject(struct ::kde_output_configuration_v2 *object);

        bool isInitialized() const;

        uint32_t version() const;
        static const struct ::wl_interface *interface();

        enum error {
            error_already_applied = 0, // the config is already applied
        };

        enum vrr_policy {
            vrr_policy_never = 0,
            vrr_policy_always = 1,
            vrr_policy_automatic = 2,
        };

        enum rgb_range {
            rgb_range_automatic = 0,
            rgb_range_full = 1,
            rgb_range_limited = 2,
        };

        enum auto_rotate_policy {
            auto_rotate_policy_never = 0,
            auto_rotate_policy_in_tablet_mode = 1,
            auto_rotate_policy_always = 2,
        };

        enum color_profile_source {
            color_profile_source_sRGB = 0,
            color_profile_source_ICC = 1,
            color_profile_source_EDID = 2,
        };

        enum color_power_tradeoff {
            color_power_tradeoff_efficiency = 0, // prefer efficiency and performance
            color_power_tradeoff_accuracy = 1, // prefer accuracy
        };

        enum edr_policy {
            edr_policy_never = 0,
            edr_policy_always = 1,
        };

        void enable(struct ::kde_output_device_v2 *outputdevice, int32_t enable);
        void mode(struct ::kde_output_device_v2 *outputdevice, struct ::kde_output_device_mode_v2 *mode);
        void transform(struct ::kde_output_device_v2 *outputdevice, int32_t transform);
        void position(struct ::kde_output_device_v2 *outputdevice, int32_t x, int32_t y);
        void scale(struct ::kde_output_device_v2 *outputdevice, wl_fixed_t scale);
        void apply();
        void destroy();
        void overscan(struct ::kde_output_device_v2 *outputdevice, uint32_t overscan);
        void set_vrr_policy(struct ::kde_output_device_v2 *outputdevice, uint32_t policy);
        void set_rgb_range(struct ::kde_output_device_v2 *outputdevice, uint32_t rgb_range);
        void set_primary_output(struct ::kde_output_device_v2 *output);
        void set_priority(struct ::kde_output_device_v2 *outputdevice, uint32_t priority);
        void set_high_dynamic_range(struct ::kde_output_device_v2 *outputdevice, uint32_t enable_hdr);
        void set_sdr_brightness(struct ::kde_output_device_v2 *outputdevice, uint32_t sdr_brightness);
        void set_wide_color_gamut(struct ::kde_output_device_v2 *outputdevice, uint32_t enable_wcg);
        void set_auto_rotate_policy(struct ::kde_output_device_v2 *outputdevice, uint32_t policy);
        void set_icc_profile_path(struct ::kde_output_device_v2 *outputdevice, const QString &profile_path);
        void set_brightness_overrides(struct ::kde_output_device_v2 *outputdevice, int32_t max_peak_brightness, int32_t max_frame_average_brightness, int32_t min_brightness);
        void set_sdr_gamut_wideness(struct ::kde_output_device_v2 *outputdevice, uint32_t gamut_wideness);
        void set_color_profile_source(struct ::kde_output_device_v2 *outputdevice, uint32_t color_profile_source);
        void set_brightness(struct ::kde_output_device_v2 *outputdevice, uint32_t brightness);
        void set_color_power_tradeoff(struct ::kde_output_device_v2 *outputdevice, uint32_t preference);
        void set_dimming(struct ::kde_output_device_v2 *outputdevice, uint32_t multiplier);
        void set_replication_source(struct ::kde_output_device_v2 *outputdevice, const QString &source);
        void set_ddc_ci_allowed(struct ::kde_output_device_v2 *outputdevice, uint32_t allowed);
        void set_max_bits_per_color(struct ::kde_output_device_v2 *outputdevice, uint32_t max_bpc);
        void set_edr_policy(struct ::kde_output_device_v2 *outputdevice, uint32_t policy);
        void set_sharpness(struct ::kde_output_device_v2 *outputdevice, uint32_t sharpness);
        void set_custom_modes(struct ::kde_output_device_v2 *outputdevice, struct ::kde_mode_list_v2 *modes);
        void set_auto_brightness(struct ::kde_output_device_v2 *outputdevice, uint32_t enabled);
        void set_hdr_icc_profile_path(struct ::kde_output_device_v2 *outputdevice, const QString &profile_path);
        void set_hdr_color_profile_source(struct ::kde_output_device_v2 *outputdevice, uint32_t color_profile_source);
        void set_abm_level(struct ::kde_output_device_v2 *outputdevice, uint32_t level);

    protected:
        virtual void kde_output_configuration_v2_applied();
        virtual void kde_output_configuration_v2_failed();
        virtual void kde_output_configuration_v2_failure_reason(const QString &reason);

    private:
        void init_listener();
        static const struct kde_output_configuration_v2_listener m_kde_output_configuration_v2_listener;
        static void handle_applied(
            void *data,
            struct ::kde_output_configuration_v2 *object);
        static void handle_failed(
            void *data,
            struct ::kde_output_configuration_v2 *object);
        static void handle_failure_reason(
            void *data,
            struct ::kde_output_configuration_v2 *object,
            const char *reason);
        struct ::kde_output_configuration_v2 *m_kde_output_configuration_v2;
    };

    class  kde_mode_list_v2
    {
    public:
        kde_mode_list_v2(struct ::wl_registry *registry, uint32_t id, int version);
        kde_mode_list_v2(struct ::kde_mode_list_v2 *object);
        kde_mode_list_v2();

        virtual ~kde_mode_list_v2();

        void init(struct ::wl_registry *registry, uint32_t id, int version);
        void init(struct ::kde_mode_list_v2 *object);

        struct ::kde_mode_list_v2 *object() { return m_kde_mode_list_v2; }
        const struct ::kde_mode_list_v2 *object() const { return m_kde_mode_list_v2; }
        static kde_mode_list_v2 *fromObject(struct ::kde_mode_list_v2 *object);

        bool isInitialized() const;

        uint32_t version() const;
        static const struct ::wl_interface *interface();

        enum error {
            error_missing_parameters = 0, // a required parameter wasn't set
        };

        void destroy();
        void add_mode();
        void set_resolution(uint32_t width, uint32_t height);
        void set_refresh_rate(uint32_t rate);
        void set_reduced_blanking(uint32_t reduced);

    private:
        struct ::kde_mode_list_v2 *m_kde_mode_list_v2;
    };
}

QT_WARNING_POP
QT_END_NAMESPACE

#endif
