#pragma once
#include <stdbool.h>
#include <stdint.h>
#include "../rute_base.h"
#ifdef __cplusplus
extern "C" {
#endif
#include "desktop_widget_ffi.h"
#include "font_ffi.h"
#include "icon_ffi.h"
#include "palette_ffi.h"
#include "style_ffi.h"
#include "widget_ffi.h"
struct RUApplicationFuncs;
struct RUApplication;
typedef struct RUApplicationFuncs {
void (*destroy)(struct RUBase* self);
struct RUStyle (*style)(struct RUBase* self_c);
void (*set_style)(struct RUBase* self_c, struct RUBase* arg0);
struct RUStyle (*set_style_2)(struct RUBase* self_c, const char* arg0);
int (*color_spec)(struct RUBase* self_c);
void (*set_color_spec)(struct RUBase* self_c, int arg0);
struct RUPalette (*palette)(struct RUBase* self_c, struct RUBase* arg0);
struct RUFont (*font)(struct RUBase* self_c);
struct RUFont (*font_2)(struct RUBase* self_c, struct RUBase* arg0);
void (*set_window_icon)(struct RUBase* self_c, struct RUBase* icon);
struct RUIcon (*window_icon)(struct RUBase* self_c);
struct RUDesktopWidget (*desktop)(struct RUBase* self_c);
struct RUWidget (*active_popup_widget)(struct RUBase* self_c);
struct RUWidget (*active_modal_widget)(struct RUBase* self_c);
struct RUWidget (*focus_widget)(struct RUBase* self_c);
struct RUWidget (*active_window)(struct RUBase* self_c);
void (*set_active_window)(struct RUBase* self_c, struct RUBase* act);
struct RUWidget (*widget_at)(struct RUBase* self_c, struct RUBase* p);
struct RUWidget (*widget_at_2)(struct RUBase* self_c, int x, int y);
struct RUWidget (*top_level_at)(struct RUBase* self_c, struct RUBase* p);
struct RUWidget (*top_level_at_2)(struct RUBase* self_c, int x, int y);
void (*beep)(struct RUBase* self_c);
void (*alert)(struct RUBase* self_c, struct RUBase* widget, int duration);
void (*set_cursor_flash_time)(struct RUBase* self_c, int arg0);
int (*cursor_flash_time)(struct RUBase* self_c);
void (*set_double_click_interval)(struct RUBase* self_c, int arg0);
int (*double_click_interval)(struct RUBase* self_c);
void (*set_keyboard_input_interval)(struct RUBase* self_c, int arg0);
int (*keyboard_input_interval)(struct RUBase* self_c);
void (*set_wheel_scroll_lines)(struct RUBase* self_c, int arg0);
int (*wheel_scroll_lines)(struct RUBase* self_c);
void (*set_start_drag_time)(struct RUBase* self_c, int ms);
int (*start_drag_time)(struct RUBase* self_c);
void (*set_start_drag_distance)(struct RUBase* self_c, int l);
int (*start_drag_distance)(struct RUBase* self_c);
bool (*is_effect_enabled)(struct RUBase* self_c, uint32_t arg0);
void (*set_effect_enabled)(struct RUBase* self_c, uint32_t arg0,
bool enable);
int (*exec)(struct RUBase* self_c);
const char* (*style_sheet)(struct RUBase* self_c);
void (*set_style_sheet)(struct RUBase* self_c, const char* sheet);
void (*set_auto_sip_enabled)(struct RUBase* self_c, bool enabled);
bool (*auto_sip_enabled)(struct RUBase* self_c);
void (*close_all_windows)(struct RUBase* self_c);
void (*about_qt)(struct RUBase* self_c);
void (*set_about_to_quit_event)(void* object, void* user_data,
void* wrapped_func,
void (*event)(void*, void* self_c));
} RUApplicationFuncs;
typedef struct RUApplicationAllFuncs {
struct RUObjectFuncs* object_funcs;
struct RUCoreApplicationFuncs* core_application_funcs;
struct RUGuiApplicationFuncs* gui_application_funcs;
struct RUApplicationFuncs* application_funcs;
} RUApplicationAllFuncs;
typedef struct RUApplication {
RUBase* qt_data;
RUBase* host_data;
struct RUApplicationAllFuncs* all_funcs;
} RUApplication;
extern RUApplicationFuncs s_application_funcs;
extern RUApplicationAllFuncs s_application_all_funcs;
#ifdef __cplusplus
}
#endif