#include <wx/wxprec.h>
#include <wx/wx.h>
#include "../include/wxdragon.h"
#include <wx/dataview.h>
#include "wxd_utils.h"
class WxdBasicDataViewVirtualListModel : public wxDataViewVirtualListModel {
public:
WxdBasicDataViewVirtualListModel(unsigned int initial_size)
: wxDataViewVirtualListModel(initial_size)
{
WXD_LOG_TRACEF("WxdBasicDataViewVirtualListModel created with pointer %p", this);
}
~WxdBasicDataViewVirtualListModel()
{
WXD_LOG_TRACEF("WxdBasicDataViewVirtualListModel destroyed with pointer %p", this);
}
virtual void
GetValueByRow(wxVariant& variant, unsigned int row, unsigned int col) const override
{
variant = wxVariant(wxString::Format(wxT("Item (%d, %d)"), row, col));
}
virtual bool
SetValueByRow(const wxVariant& variant, unsigned int row, unsigned int col) override
{
return false;
}
};
extern "C" {
wxd_DataViewModel_t*
wxd_DataViewVirtualListModel_Create(uint64_t initial_size)
{
WxdBasicDataViewVirtualListModel* model =
new WxdBasicDataViewVirtualListModel(static_cast<unsigned int>(initial_size));
return reinterpret_cast<wxd_DataViewModel_t*>(model);
}
void
wxd_DataViewVirtualListModel_RowPrepended(wxd_DataViewModel_t* model)
{
wxDataViewVirtualListModel* vmodel = reinterpret_cast<wxDataViewVirtualListModel*>(model);
if (vmodel) {
vmodel->RowPrepended();
}
}
void
wxd_DataViewVirtualListModel_RowInserted(wxd_DataViewModel_t* model, uint64_t before)
{
wxDataViewVirtualListModel* vmodel = reinterpret_cast<wxDataViewVirtualListModel*>(model);
if (vmodel) {
vmodel->RowInserted(static_cast<unsigned int>(before));
}
}
void
wxd_DataViewVirtualListModel_RowAppended(wxd_DataViewModel_t* model)
{
wxDataViewVirtualListModel* vmodel = reinterpret_cast<wxDataViewVirtualListModel*>(model);
if (vmodel) {
vmodel->RowAppended();
}
}
void
wxd_DataViewVirtualListModel_RowDeleted(wxd_DataViewModel_t* model, uint64_t row)
{
wxDataViewVirtualListModel* vmodel = reinterpret_cast<wxDataViewVirtualListModel*>(model);
if (vmodel) {
vmodel->RowDeleted(static_cast<unsigned int>(row));
}
}
void
wxd_DataViewVirtualListModel_RowsDeleted(wxd_DataViewModel_t* model, int32_t* rows, int32_t count)
{
wxDataViewVirtualListModel* vmodel = reinterpret_cast<wxDataViewVirtualListModel*>(model);
if (vmodel && rows && count > 0) {
wxArrayInt rowsArray;
for (int32_t i = 0; i < count; i++) {
rowsArray.Add(rows[i]);
}
vmodel->RowsDeleted(rowsArray);
}
}
void
wxd_DataViewVirtualListModel_RowChanged(wxd_DataViewModel_t* model, uint64_t row)
{
wxDataViewVirtualListModel* vmodel = reinterpret_cast<wxDataViewVirtualListModel*>(model);
if (vmodel) {
vmodel->RowChanged(static_cast<unsigned int>(row));
}
}
void
wxd_DataViewVirtualListModel_RowValueChanged(wxd_DataViewModel_t* model, uint64_t row, uint64_t col)
{
wxDataViewVirtualListModel* vmodel = reinterpret_cast<wxDataViewVirtualListModel*>(model);
if (vmodel) {
vmodel->RowValueChanged(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
}
}
void
wxd_DataViewVirtualListModel_Reset(wxd_DataViewModel_t* model, uint64_t new_size)
{
wxDataViewVirtualListModel* vmodel = reinterpret_cast<wxDataViewVirtualListModel*>(model);
if (vmodel) {
vmodel->Reset(static_cast<unsigned int>(new_size));
}
}
void*
wxd_DataViewVirtualListModel_GetItem(wxd_DataViewModel_t* model, uint64_t row)
{
wxDataViewVirtualListModel* vmodel = reinterpret_cast<wxDataViewVirtualListModel*>(model);
if (vmodel) {
wxDataViewItem item = vmodel->GetItem(static_cast<unsigned int>(row));
return item.GetID();
}
return nullptr;
}
uint64_t
wxd_DataViewVirtualListModel_GetRow(wxd_DataViewModel_t* model, void* item)
{
wxDataViewVirtualListModel* vmodel = reinterpret_cast<wxDataViewVirtualListModel*>(model);
if (vmodel && item) {
wxDataViewItem dataViewItem(item);
unsigned int row = vmodel->GetRow(dataViewItem);
return static_cast<uint64_t>(row);
}
return static_cast<uint64_t>(-1); }
typedef struct {
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);
} VirtualListModelCallbacks;
}