#ifndef WXD_DATAVIEW_H
#define WXD_DATAVIEW_H
#include "../wxd_types.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct wxd_DataViewCtrl_tag wxd_DataViewCtrl_t;
typedef struct wxd_DataViewRenderer_tag wxd_DataViewRenderer_t;
typedef enum {
WXD_ALIGN_LEFT = 0,
WXD_ALIGN_RIGHT,
WXD_ALIGN_CENTER,
} wxd_AlignmentCEnum;
WXD_EXPORTED wxd_Window_t* wxd_DataViewCtrl_Create(wxd_Window_t* parent, int64_t id,
const wxd_Point* pos, const wxd_Size* size,
int64_t style);
WXD_EXPORTED wxd_Window_t* wxd_DataViewListCtrl_Create(wxd_Window_t* parent, int64_t id,
const wxd_Point* pos, const wxd_Size* size,
int64_t style);
WXD_EXPORTED wxd_Window_t* wxd_DataViewTreeCtrl_Create(wxd_Window_t* parent, int64_t id,
const wxd_Point* pos, const wxd_Size* size,
int64_t style);
WXD_EXPORTED wxd_DataViewColumn_t* wxd_DataViewColumn_Create(
const char* title,
wxd_DataViewRenderer_t* renderer,
int model_column, int width,
int align, int flags );
WXD_EXPORTED bool wxd_DataViewCtrl_AppendColumn(wxd_Window_t* self, wxd_DataViewColumn_t* column);
WXD_EXPORTED bool wxd_DataViewCtrl_PrependColumn(wxd_Window_t* self, wxd_DataViewColumn_t* column);
WXD_EXPORTED bool wxd_DataViewCtrl_InsertColumn(wxd_Window_t* self, int64_t pos, wxd_DataViewColumn_t* column);
WXD_EXPORTED int wxd_DataViewCtrl_GetColumnCount(wxd_Window_t* self);
WXD_EXPORTED wxd_DataViewColumn_t* wxd_DataViewCtrl_GetColumn(wxd_Window_t* self, uint32_t pos);
WXD_EXPORTED int wxd_DataViewCtrl_GetColumnPosition(wxd_Window_t* self, wxd_DataViewColumn_t* column);
WXD_EXPORTED bool wxd_DataViewCtrl_ClearColumns(wxd_Window_t* self);
WXD_EXPORTED void wxd_DataViewCtrl_Select(wxd_Window_t* self, const wxd_DataViewItem_t* item);
WXD_EXPORTED void wxd_DataViewCtrl_Unselect(wxd_Window_t* self, const wxd_DataViewItem_t* item);
WXD_EXPORTED void wxd_DataViewCtrl_SelectAll(wxd_Window_t* self);
WXD_EXPORTED bool wxd_DataViewCtrl_IsSelected(wxd_Window_t* self, const wxd_DataViewItem_t* item);
WXD_EXPORTED uint32_t wxd_DataViewCtrl_GetSelectedItemsCount(wxd_Window_t* self);
WXD_EXPORTED const wxd_DataViewItem_t* wxd_DataViewCtrl_GetSelection(wxd_Window_t* self);
WXD_EXPORTED void wxd_DataViewCtrl_GetSelections(wxd_Window_t* self, const wxd_DataViewItem_t* * items, uint32_t max_count);
WXD_EXPORTED void wxd_DataViewCtrl_SetSelections(wxd_Window_t* self, const wxd_DataViewItem_t* const* items, uint32_t count);
WXD_EXPORTED const wxd_DataViewItem_t* wxd_DataViewCtrl_GetCurrentItem(wxd_Window_t* self);
WXD_EXPORTED void wxd_DataViewCtrl_SetCurrentItem(wxd_Window_t* self, const wxd_DataViewItem_t* item);
WXD_EXPORTED int wxd_DataViewCtrl_GetIndent(wxd_Window_t* self);
WXD_EXPORTED void wxd_DataViewCtrl_SetIndent(wxd_Window_t* self, int indent);
WXD_EXPORTED wxd_DataViewColumn_t* wxd_DataViewCtrl_GetExpanderColumn(wxd_Window_t* self);
WXD_EXPORTED void wxd_DataViewCtrl_SetExpanderColumn(wxd_Window_t* self, wxd_DataViewColumn_t* column);
WXD_EXPORTED bool wxd_DataViewCtrl_SetRowHeight(wxd_Window_t* self, int height);
WXD_EXPORTED bool wxd_DataViewCtrl_SetAlternateRowColour(wxd_Window_t* self, const wxd_Colour_t* colour);
WXD_EXPORTED const wxd_DataViewItem_t* wxd_DataViewCtrl_GetNthChild(wxd_Window_t* self, const wxd_DataViewItem_t* parent, unsigned int pos);
WXD_EXPORTED void wxd_DataViewCtrl_Expand(wxd_Window_t* self, const wxd_DataViewItem_t* item);
WXD_EXPORTED void wxd_DataViewCtrl_EnsureVisible(wxd_Window_t* self, const wxd_DataViewItem_t* item);
WXD_EXPORTED wxd_DataViewRenderer_t* wxd_DataViewTextRenderer_Create(const char* varianttype,
int64_t mode,
int64_t align);
WXD_EXPORTED wxd_DataViewRenderer_t* wxd_DataViewIconTextRenderer_Create(const char* varianttype,
int64_t mode,
int64_t align);
WXD_EXPORTED wxd_DataViewRenderer_t* wxd_DataViewToggleRenderer_Create(const char* varianttype,
int64_t mode,
int64_t align);
WXD_EXPORTED wxd_DataViewRenderer_t* wxd_DataViewProgressRenderer_Create(const char* varianttype,
int64_t mode,
int64_t align);
WXD_EXPORTED wxd_DataViewRenderer_t* wxd_DataViewBitmapRenderer_Create(const char* varianttype,
int64_t mode,
int64_t align);
WXD_EXPORTED wxd_DataViewRenderer_t* wxd_DataViewDateRenderer_Create(const char* varianttype,
int64_t mode,
int64_t align);
WXD_EXPORTED wxd_DataViewRenderer_t* wxd_DataViewSpinRenderer_Create(const char* varianttype,
int64_t mode,
int64_t align,
int32_t min,
int32_t max,
int32_t inc);
WXD_EXPORTED wxd_DataViewRenderer_t* wxd_DataViewChoiceRenderer_Create(const char* varianttype,
const char* choices,
int64_t mode,
int64_t align);
WXD_EXPORTED wxd_DataViewRenderer_t* wxd_DataViewCheckIconTextRenderer_Create(const char* varianttype, int64_t mode, int64_t align);
typedef uint64_t (*wxd_DataViewModel_GetColumnCountCallback)(void* user_data);
typedef uint64_t (*wxd_DataViewModel_GetRowCountCallback)(void* user_data);
typedef void (*wxd_DataViewModel_GetValueCallback)(void* user_data,
uint64_t row,
uint64_t col,
wxd_Variant_t* variant);
typedef bool (*wxd_DataViewModel_SetValueCallback)(void* user_data,
uint64_t row,
uint64_t col,
const wxd_Variant_t* variant);
WXD_EXPORTED wxd_DataViewModel_t* wxd_DataViewModel_Create(
wxd_DataViewModel_GetColumnCountCallback get_column_count,
wxd_DataViewModel_GetRowCountCallback get_row_count,
wxd_DataViewModel_GetValueCallback get_value,
wxd_DataViewModel_SetValueCallback set_value,
void* user_data);
WXD_EXPORTED bool wxd_DataViewCtrl_AssociateModel(wxd_Window_t* self, wxd_DataViewModel_t* model);
WXD_EXPORTED wxd_DataViewModel_t* wxd_DataViewListModel_Create();
WXD_EXPORTED bool wxd_DataViewListModel_AppendColumn(wxd_DataViewModel_t* self, const char* name);
WXD_EXPORTED bool wxd_DataViewListModel_AppendRow(wxd_DataViewModel_t* self);
WXD_EXPORTED bool wxd_DataViewListModel_SetValue(wxd_DataViewModel_t* self,
uint64_t row,
uint64_t col,
const wxd_Variant_t* variant);
WXD_EXPORTED bool wxd_DataViewCtrl_SelectRow(wxd_Window_t* self, int64_t row);
WXD_EXPORTED int64_t wxd_DataViewCtrl_GetSelectedRow(wxd_Window_t* self);
WXD_EXPORTED void wxd_DataViewCtrl_UnselectAll(wxd_Window_t* self);
WXD_EXPORTED void wxd_Variant_Free(wxd_Variant_t* variant);
WXD_EXPORTED wxd_DataViewModel_t* wxd_DataViewVirtualListModel_Create(uint64_t initial_size);
WXD_EXPORTED void wxd_DataViewVirtualListModel_RowPrepended(wxd_DataViewModel_t* model);
WXD_EXPORTED void wxd_DataViewVirtualListModel_RowInserted(wxd_DataViewModel_t* model, uint64_t before);
WXD_EXPORTED void wxd_DataViewVirtualListModel_RowAppended(wxd_DataViewModel_t* model);
WXD_EXPORTED void wxd_DataViewVirtualListModel_RowDeleted(wxd_DataViewModel_t* model, uint64_t row);
WXD_EXPORTED void wxd_DataViewVirtualListModel_RowsDeleted(wxd_DataViewModel_t* model, int32_t* rows, int32_t count);
WXD_EXPORTED void wxd_DataViewVirtualListModel_RowChanged(wxd_DataViewModel_t* model, uint64_t row);
WXD_EXPORTED void wxd_DataViewVirtualListModel_RowValueChanged(wxd_DataViewModel_t* model, uint64_t row, uint64_t col);
WXD_EXPORTED void wxd_DataViewVirtualListModel_Reset(wxd_DataViewModel_t* model, uint64_t new_size);
WXD_EXPORTED void* wxd_DataViewVirtualListModel_GetItem(wxd_DataViewModel_t* model, uint64_t row);
WXD_EXPORTED uint64_t wxd_DataViewVirtualListModel_GetRow(wxd_DataViewModel_t* model, void* item);
typedef struct {
bool has_text_colour;
unsigned char text_colour_red;
unsigned char text_colour_green;
unsigned char text_colour_blue;
unsigned char text_colour_alpha;
bool has_bg_colour;
unsigned char bg_colour_red;
unsigned char bg_colour_green;
unsigned char bg_colour_blue;
unsigned char bg_colour_alpha;
bool bold;
bool italic;
} wxd_DataViewItemAttr_t;
WXD_EXPORTED wxd_DataViewModel_t* wxd_DataViewVirtualListModel_CreateWithCallbacks(
uint64_t initial_size,
void* userdata,
void (*get_value_callback)(void* userdata, uint64_t row, uint64_t col, wxd_Variant_t* variant),
bool (*set_value_callback)(void* userdata, const wxd_Variant_t* variant, uint64_t row, uint64_t col),
bool (*get_attr_callback)(void* userdata, uint64_t row, uint64_t col, wxd_DataViewItemAttr_t* attr),
bool (*is_enabled_callback)(void* userdata, uint64_t row, uint64_t col)
);
WXD_EXPORTED void wxd_DataViewVirtualListModel_ReleaseCallbacks(wxd_DataViewModel_t* model);
typedef void* (*wxd_dataview_tree_model_get_parent_fn)(void* userdata, void* item);
typedef bool (*wxd_dataview_tree_model_is_container_fn)(void* userdata, void* item);
typedef void (*wxd_dataview_tree_model_get_children_fn)(void* userdata, void* item, void*** out_items, int* out_count);
typedef void (*wxd_dataview_tree_model_free_children_fn)(void** items, int count);
typedef void (*wxd_dataview_tree_model_get_value_fn)(void* userdata, void* item, unsigned int col, wxd_Variant_t* out_variant);
typedef bool (*wxd_dataview_tree_model_set_value_fn)(void* userdata, void* item, unsigned int col, const wxd_Variant_t* variant);
typedef bool (*wxd_dataview_tree_model_is_enabled_fn)(void* userdata, void* item, unsigned int col);
typedef int (*wxd_dataview_tree_model_compare_fn)(void* userdata, void* item1, void* item2, unsigned int col, bool ascending);
typedef void (*wxd_dataview_tree_model_userdata_free_fn)(void* userdata);
typedef struct wxd_DataViewTreeModel_Callbacks {
void* userdata;
wxd_dataview_tree_model_userdata_free_fn userdata_free;
wxd_dataview_tree_model_get_parent_fn get_parent;
wxd_dataview_tree_model_is_container_fn is_container;
wxd_dataview_tree_model_get_children_fn get_children;
wxd_dataview_tree_model_free_children_fn free_children;
wxd_dataview_tree_model_get_value_fn get_value;
wxd_dataview_tree_model_set_value_fn set_value;
wxd_dataview_tree_model_is_enabled_fn is_enabled;
wxd_dataview_tree_model_compare_fn compare;
} wxd_DataViewTreeModel_Callbacks;
WXD_EXPORTED wxd_DataViewModel_t* wxd_DataViewTreeModel_CreateWithCallbacks(const wxd_DataViewTreeModel_Callbacks* callbacks);
WXD_EXPORTED void wxd_DataViewTreeModel_Release(wxd_DataViewModel_t* model);
WXD_EXPORTED void drop_rust_virtual_list_model_callbacks(void* ptr);
WXD_EXPORTED wxd_DataViewColumn_t* wxd_DataViewCtrl_CreateTextColumn(wxd_Window_t* ctrl, const char* label,
uint32_t model_column, wxd_DataViewCellModeCEnum mode,
int width, wxd_AlignmentCEnum align, int flags);
WXD_EXPORTED void wxd_DataViewColumn_SetTitle(wxd_DataViewColumn_t* self, const char* title);
WXD_EXPORTED void wxd_DataViewColumn_SetResizeable(wxd_DataViewColumn_t* self, bool resizeable);
WXD_EXPORTED bool wxd_DataViewColumn_IsResizeable(wxd_DataViewColumn_t* self);
WXD_EXPORTED void wxd_DataViewColumn_SetSortable(wxd_DataViewColumn_t* self, bool sortable);
WXD_EXPORTED bool wxd_DataViewColumn_IsSortable(wxd_DataViewColumn_t* self);
typedef struct {
int width;
int height;
} wxd_Size_t;
typedef struct {
int x;
int y;
int width;
int height;
} wxd_Rect_t;
typedef wxd_Size_t (*wxd_CustomRenderer_GetSizeCallback)(void* user_data);
typedef bool (*wxd_CustomRenderer_RenderCallback)(void* user_data, wxd_Rect_t cell, void* dc, int state);
typedef bool (*wxd_CustomRenderer_SetValueCallback)(void* user_data, const wxd_Variant_t* value);
typedef void (*wxd_CustomRenderer_GetValueCallback)(void* user_data, wxd_Variant_t* value);
typedef bool (*wxd_CustomRenderer_HasEditorCtrlCallback)(void* user_data);
typedef void* (*wxd_CustomRenderer_CreateEditorCtrlCallback)(void* user_data, void* parent, wxd_Rect_t label_rect, const wxd_Variant_t* value);
typedef bool (*wxd_CustomRenderer_GetValueFromEditorCtrlCallback)(void* user_data, void* editor, wxd_Variant_t* value);
typedef bool (*wxd_CustomRenderer_ActivateCellCallback)(void* user_data, wxd_Rect_t cell, void* model, void* item, unsigned int col, void* mouse_event);
WXD_EXPORTED wxd_DataViewRenderer_t* wxd_DataViewCustomRenderer_Create(
const char* varianttype,
int64_t mode,
int64_t align,
void* user_data,
wxd_CustomRenderer_GetSizeCallback get_size_callback,
wxd_CustomRenderer_RenderCallback render_callback,
wxd_CustomRenderer_SetValueCallback set_value_callback,
wxd_CustomRenderer_GetValueCallback get_value_callback,
wxd_CustomRenderer_HasEditorCtrlCallback has_editor_callback,
wxd_CustomRenderer_CreateEditorCtrlCallback create_editor_callback,
wxd_CustomRenderer_GetValueFromEditorCtrlCallback get_value_from_editor_callback,
wxd_CustomRenderer_ActivateCellCallback activate_cell_callback
);
WXD_EXPORTED void wxd_DataViewCustomRenderer_ReleaseCallbacksByKey(int32_t renderer_id);
WXD_EXPORTED void wxd_DataViewCustomRenderer_ReleaseAllCallbacksForDataView(int32_t dataview_id);
WXD_EXPORTED void wxd_DataViewCustomRenderer_ReleaseCallbacks(wxd_DataViewRenderer_t* renderer);
WXD_EXPORTED void drop_rust_custom_renderer_callbacks(void* ptr);
#ifdef __cplusplus
}
#endif
#endif