#include <wx/wxprec.h>
#include <wx/wx.h>
#include "../include/wxdragon.h"
#include "wxd_utils.h"
#include <wx/bmpcbox.h>
#include <wx/bitmap.h>
#include <wx/arrstr.h>
extern "C" {
WXD_EXPORTED wxd_BitmapComboBox_t*
wxd_BitmapComboBox_Create(wxd_Window_t* parent, wxd_Id id, const char* value, wxd_Point pos,
wxd_Size size, wxd_Style_t style)
{
wxWindow* parentWin = (wxWindow*)parent;
if (!parentWin)
return nullptr;
wxString wxValue = wxString::FromUTF8(value ? value : "");
wxBitmapComboBox* combo = new wxBitmapComboBox(parentWin, id, wxValue,
wxd_cpp_utils::to_wx(pos),
wxd_cpp_utils::to_wx(size),
wxArrayString(), style);
return (wxd_BitmapComboBox_t*)combo;
}
WXD_EXPORTED void
wxd_BitmapComboBox_Append(wxd_BitmapComboBox_t* self, const char* item,
const wxd_Bitmap_t* bitmap )
{
wxBitmapComboBox* cb = (wxBitmapComboBox*)self;
if (!cb)
return;
wxString wxItem = wxString::FromUTF8(item ? item : "");
const wxBitmap* wxBmp = reinterpret_cast<const wxBitmap*>(bitmap);
if (wxBmp && wxBmp->IsOk()) {
cb->Append(wxItem, *wxBmp);
}
else {
cb->Append(wxItem);
}
}
WXD_EXPORTED void
wxd_BitmapComboBox_Insert(wxd_BitmapComboBox_t* self, const char* item, const wxd_Bitmap_t* bitmap, unsigned int pos)
{
wxBitmapComboBox* cb = (wxBitmapComboBox*)self;
if (cb && item) {
if (bitmap) {
cb->Insert(wxString::FromUTF8(item), *(const wxBitmap*)bitmap, pos);
} else {
cb->Insert(wxString::FromUTF8(item), wxNullBitmap, pos);
}
}
}
WXD_EXPORTED void
wxd_BitmapComboBox_Clear(wxd_BitmapComboBox_t* self)
{
wxBitmapComboBox* cb = (wxBitmapComboBox*)self;
if (cb) {
cb->Clear();
}
}
WXD_EXPORTED int
wxd_BitmapComboBox_GetSelection(wxd_BitmapComboBox_t* self)
{
wxBitmapComboBox* cb = (wxBitmapComboBox*)self;
if (!cb)
return wxNOT_FOUND;
return cb->GetSelection();
}
WXD_EXPORTED void
wxd_BitmapComboBox_SetSelection(wxd_BitmapComboBox_t* self, int index)
{
wxBitmapComboBox* cb = (wxBitmapComboBox*)self;
if (cb) {
cb->SetSelection(index);
}
}
WXD_EXPORTED int
wxd_BitmapComboBox_GetString(wxd_BitmapComboBox_t* self, int index, char* buffer, size_t buffer_len)
{
if (!self)
return -1;
wxBitmapComboBox* cb = (wxBitmapComboBox*)self;
if (index < 0 || (unsigned int)index >= cb->GetCount())
return -1;
wxString item = cb->GetString((unsigned int)index);
return (int)wxd_cpp_utils::copy_wxstring_to_buffer(item, buffer, buffer_len);
}
WXD_EXPORTED unsigned int
wxd_BitmapComboBox_GetCount(wxd_BitmapComboBox_t* self)
{
wxBitmapComboBox* cb = (wxBitmapComboBox*)self;
if (!cb)
return 0;
return cb->GetCount();
}
WXD_EXPORTED void
wxd_BitmapComboBox_SetValue(wxd_BitmapComboBox_t* self, const char* value)
{
wxBitmapComboBox* cb = (wxBitmapComboBox*)self;
if (cb) {
cb->SetValue(wxString::FromUTF8(value ? value : ""));
}
}
WXD_EXPORTED int
wxd_BitmapComboBox_GetValue(wxd_BitmapComboBox_t* self, char* buffer, size_t buffer_len)
{
if (!self)
return -1;
wxBitmapComboBox* cb = (wxBitmapComboBox*)self;
wxString value = cb->GetValue();
return (int)wxd_cpp_utils::copy_wxstring_to_buffer(value, buffer, buffer_len);
}
WXD_EXPORTED wxd_Bitmap_t*
wxd_BitmapComboBox_GetItemBitmap(wxd_BitmapComboBox_t* self, unsigned int n)
{
wxBitmapComboBox* cb = (wxBitmapComboBox*)self;
if (!cb || n >= cb->GetCount())
return nullptr;
wxBitmap bmp = cb->GetItemBitmap(n);
if (!bmp.IsOk())
return nullptr;
return (wxd_Bitmap_t*)new (std::nothrow) wxBitmap(bmp);
}
WXD_EXPORTED void
wxd_BitmapComboBox_SetItemBitmap(wxd_BitmapComboBox_t* self, unsigned int n,
const wxd_Bitmap_t* bitmap)
{
wxBitmapComboBox* cb = (wxBitmapComboBox*)self;
if (!cb || n >= cb->GetCount())
return;
const wxBitmap* wxBmp = reinterpret_cast<const wxBitmap*>(bitmap);
cb->SetItemBitmap(n, (wxBmp && wxBmp->IsOk()) ? *wxBmp : wxNullBitmap);
}
}