wxdragon-sys 0.4.1

Raw FFI bindings to libwxdragon (which statically links wxWidgets).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
#ifndef WXD_TYPES_H
#define WXD_TYPES_H

#ifdef __cplusplus
// Include essential wxWidgets headers for type definitions
#include <wx/defs.h>      // For wxEventType, wxWindowID, etc.
#include <wx/event.h>     // For wxEvent, wxCommandEvent, wxMouseEvent, wxKeyEvent etc.
#include <wx/gdicmn.h>    // For wxPoint, wxSize, wxRect
#include <wx/colour.h>    // For wxColour
#include <wx/datetime.h>  // For wxDateTime
#include <wx/variant.h>   // For wxVariant
#include <wx/bmpbndl.h>   // For wxBitmapBundle
#include <wx/rearrangectrl.h> // For wxRearrangeList
// For DataView related types
#include <wx/dataview.h>  // For wxDataViewItem, wxDataViewModel, etc.
#endif

// Use standard C types
#include <stdbool.h> 
#include <stdint.h> // For integer types if needed
#include <stddef.h> // For size_t

// --- Basic Types --- 
typedef int wxd_Id;

typedef struct {
    int x, y;
} wxd_Point;

typedef struct {
    int width, height;
} wxd_Size;

typedef struct wxd_Rect {
    int x;
    int y;
    int width;
    int height;
} wxd_Rect;

typedef struct {
    unsigned char r;
    unsigned char g;
    unsigned char b;
    unsigned char a;
} wxd_Colour_t;

// DateTime type for DataView
typedef struct {
    short day;
    unsigned short month;
    int year;
    short hour;
    short minute;
    short second;
} wxd_DateTime_t;

// Variant type codes for DataView
#define WXD_VARIANT_TYPE_INVALID 0
#define WXD_VARIANT_TYPE_BOOL 1
#define WXD_VARIANT_TYPE_INT32 2
#define WXD_VARIANT_TYPE_INT64 3
#define WXD_VARIANT_TYPE_DOUBLE 4
#define WXD_VARIANT_TYPE_STRING 5
#define WXD_VARIANT_TYPE_BITMAP 6
#define WXD_VARIANT_TYPE_DATETIME 7
#define WXD_VARIANT_TYPE_VOID_PTR 8
#define WXD_VARIANT_TYPE_BITMAP_RUST_BORROWED 9 // New type for bitmaps borrowed from Rust

// C-compatible variant type for DataView
typedef struct wxd_Variant_t {
    int32_t type;
    union {
        bool bool_val;
        int32_t int32_val;
        int64_t int64_val;
        double double_val;
        char* string_val;
        struct wxd_Bitmap_t* bitmap_val;
        wxd_DateTime_t datetime_val;
    } data;
} wxd_Variant_t;

/// @brief Event types represented by stable integer values in C.
typedef enum {
    WXD_EVENT_TYPE_NULL = 0,
    WXD_EVENT_TYPE_COMMAND_BUTTON_CLICKED = 1,
    WXD_EVENT_TYPE_CLOSE_WINDOW = 2,
    WXD_EVENT_TYPE_CHECKBOX = 3,
    WXD_EVENT_TYPE_TEXT = 4,
    WXD_EVENT_TYPE_TEXT_ENTER = 5,
    WXD_EVENT_TYPE_SIZE = 6,
    WXD_EVENT_TYPE_MENU = 7,
    WXD_EVENT_TYPE_LEFT_DOWN = 8,
    WXD_EVENT_TYPE_LEFT_UP = 9,
    WXD_EVENT_TYPE_RIGHT_DOWN = 131,
    WXD_EVENT_TYPE_RIGHT_UP = 132,
    WXD_EVENT_TYPE_MIDDLE_DOWN = 133,
    WXD_EVENT_TYPE_MIDDLE_UP = 134,
    WXD_EVENT_TYPE_MOTION = 10,
    WXD_EVENT_TYPE_MOUSEWHEEL = 11,
    WXD_EVENT_TYPE_KEY_DOWN = 12,
    WXD_EVENT_TYPE_KEY_UP = 13,
    WXD_EVENT_TYPE_CHAR = 14,
    WXD_EVENT_TYPE_COMMAND_RADIOBUTTON_SELECTED = 15,
    WXD_EVENT_TYPE_COMMAND_RADIOBOX_SELECTED = 16,
    WXD_EVENT_TYPE_COMMAND_LISTBOX_SELECTED = 17,
    WXD_EVENT_TYPE_COMMAND_CHOICE_SELECTED = 18,
    WXD_EVENT_TYPE_COMMAND_COMBOBOX_SELECTED = 19,
    WXD_EVENT_TYPE_COMMAND_CHECKLISTBOX_SELECTED = 20,
    WXD_EVENT_TYPE_COMMAND_TOGGLEBUTTON_CLICKED = 21,
    WXD_EVENT_TYPE_TREE_BEGIN_LABEL_EDIT = 22,
    WXD_EVENT_TYPE_TREE_END_LABEL_EDIT = 23,
    WXD_EVENT_TYPE_TREE_SEL_CHANGED = 24,
    WXD_EVENT_TYPE_TREE_ITEM_ACTIVATED = 25,
    WXD_EVENT_TYPE_SLIDER = 26,
    WXD_EVENT_TYPE_SPINCTRL = 27,
    WXD_EVENT_TYPE_SPIN_UP = 28,
    WXD_EVENT_TYPE_SPIN_DOWN = 29,
    WXD_EVENT_TYPE_SPIN = 30,
    WXD_EVENT_TYPE_NOTEBOOK_PAGE_CHANGED = 31,
    WXD_EVENT_TYPE_SPLITTER_SASH_POS_CHANGED = 32,
    WXD_EVENT_TYPE_SPLITTER_SASH_POS_CHANGING = 33,
    WXD_EVENT_TYPE_SPLITTER_DOUBLECLICKED = 34,
    WXD_EVENT_TYPE_SPLITTER_UNSPLIT = 35,
    WXD_EVENT_TYPE_LIST_ITEM_SELECTED = 36,
    WXD_EVENT_TYPE_LIST_ITEM_ACTIVATED = 37,
    WXD_EVENT_TYPE_LIST_COL_CLICK = 38,
    WXD_EVENT_TYPE_LIST_BEGIN_LABEL_EDIT = 39,
    WXD_EVENT_TYPE_LIST_END_LABEL_EDIT = 40,
    WXD_EVENT_TYPE_COLOURPICKER_CHANGED = 41,
    WXD_EVENT_TYPE_DATE_CHANGED = 42,
    WXD_EVENT_TYPE_TREEBOOK_PAGE_CHANGED = 43,
    WXD_EVENT_TYPE_TREEBOOK_PAGE_CHANGING = 44,
    WXD_EVENT_TYPE_TREEBOOK_NODE_EXPANDED = 45,
    WXD_EVENT_TYPE_TREEBOOK_NODE_COLLAPSED = 46,
    WXD_EVENT_TYPE_COMMAND_SEARCHCTRL_SEARCH_BTN = 47,
    WXD_EVENT_TYPE_COMMAND_SEARCHCTRL_CANCEL_BTN = 48,
    WXD_EVENT_TYPE_COMMAND_HYPERLINK = 49,
    WXD_EVENT_TYPE_SPINCTRLDOUBLE = 50,
    WXD_EVENT_TYPE_CALENDAR_SEL_CHANGED = 51,
    WXD_EVENT_TYPE_CALENDAR_DOUBLECLICKED = 120,
    WXD_EVENT_TYPE_CALENDAR_MONTH_CHANGED = 121,
    WXD_EVENT_TYPE_CALENDAR_YEAR_CHANGED = 122,
    WXD_EVENT_TYPE_CALENDAR_WEEKDAY_CLICKED = 123,
    WXD_EVENT_TYPE_SCROLL_TOP = 52,
    WXD_EVENT_TYPE_SCROLL_BOTTOM = 53,
    WXD_EVENT_TYPE_SCROLL_LINEUP = 54,
    WXD_EVENT_TYPE_SCROLL_LINEDOWN = 55,
    WXD_EVENT_TYPE_SCROLL_PAGEUP = 56,
    WXD_EVENT_TYPE_SCROLL_PAGEDOWN = 57,
    WXD_EVENT_TYPE_SCROLL_THUMBTRACK = 58,
    WXD_EVENT_TYPE_SCROLL_THUMBRELEASE = 59,
    WXD_EVENT_TYPE_SCROLL_CHANGED = 60,
    WXD_EVENT_TYPE_FILEPICKER_CHANGED = 61,
    WXD_EVENT_TYPE_DIRPICKER_CHANGED = 62,
    WXD_EVENT_TYPE_FONTPICKER_CHANGED = 63,
    WXD_EVENT_TYPE_NOTIFICATION_MESSAGE_CLICK = 64,
    WXD_EVENT_TYPE_NOTIFICATION_MESSAGE_DISMISSED = 65,
    WXD_EVENT_TYPE_NOTIFICATION_MESSAGE_ACTION = 66,
    WXD_EVENT_TYPE_IDLE = 67,
    // Drag and drop events
    WXD_EVENT_TYPE_BEGIN_DRAG = 68,
    WXD_EVENT_TYPE_DROP_FILES = 69,
    WXD_EVENT_TYPE_DROP_TEXT = 70,
    WXD_EVENT_TYPE_END_DRAG = 71,
    WXD_EVENT_TYPE_PAINT = 72,
    WXD_EVENT_TYPE_TIME_CHANGED = 73,
    WXD_EVENT_TYPE_DESTROY = 74,
    // ADDED: Additional ListCtrl event types
    WXD_EVENT_TYPE_LIST_BEGIN_DRAG = 75,
    WXD_EVENT_TYPE_LIST_BEGIN_RDRAG = 76,
    WXD_EVENT_TYPE_LIST_DELETE_ITEM = 77,
    WXD_EVENT_TYPE_LIST_DELETE_ALL_ITEMS = 78,
    WXD_EVENT_TYPE_LIST_ITEM_DESELECTED = 79,
    WXD_EVENT_TYPE_LIST_ITEM_FOCUSED = 80,
    WXD_EVENT_TYPE_LIST_ITEM_MIDDLE_CLICK = 81,
    WXD_EVENT_TYPE_LIST_ITEM_RIGHT_CLICK = 82,
    WXD_EVENT_TYPE_LIST_KEY_DOWN = 83,
    WXD_EVENT_TYPE_LIST_INSERT_ITEM = 84,
    WXD_EVENT_TYPE_LIST_COL_RIGHT_CLICK = 85,
    WXD_EVENT_TYPE_LIST_COL_BEGIN_DRAG = 86,
    WXD_EVENT_TYPE_MEDIA_LOADED = 87,
    WXD_EVENT_TYPE_MEDIA_STOP = 88,
    WXD_EVENT_TYPE_MEDIA_FINISHED = 89,
    WXD_EVENT_TYPE_MEDIA_STATECHANGED = 90,
    WXD_EVENT_TYPE_MEDIA_PLAY = 91,
    WXD_EVENT_TYPE_MEDIA_PAUSE = 92,
    // DataView Events
    WXD_EVENT_TYPE_DATAVIEW_SELECTION_CHANGED = 93,
    WXD_EVENT_TYPE_DATAVIEW_ITEM_ACTIVATED = 94,
    WXD_EVENT_TYPE_DATAVIEW_ITEM_EDITING_STARTED = 95,
    WXD_EVENT_TYPE_DATAVIEW_ITEM_EDITING_DONE = 96,
    WXD_EVENT_TYPE_DATAVIEW_ITEM_COLLAPSING = 97,
    WXD_EVENT_TYPE_DATAVIEW_ITEM_COLLAPSED = 98,
    WXD_EVENT_TYPE_DATAVIEW_ITEM_EXPANDING = 99,
    WXD_EVENT_TYPE_DATAVIEW_ITEM_EXPANDED = 100,
    WXD_EVENT_TYPE_DATAVIEW_COLUMN_HEADER_CLICK = 101,
    WXD_EVENT_TYPE_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK = 102,
    WXD_EVENT_TYPE_DATAVIEW_COLUMN_SORTED = 103,
    WXD_EVENT_TYPE_DATAVIEW_COLUMN_REORDERED = 104,

    // New TreeCtrl Event Types
    WXD_EVENT_TYPE_TREE_SEL_CHANGING = 105,      // wxEVT_TREE_SEL_CHANGING
    WXD_EVENT_TYPE_TREE_ITEM_COLLAPSING = 106,   // wxEVT_TREE_ITEM_COLLAPSING
    WXD_EVENT_TYPE_TREE_ITEM_COLLAPSED = 107,    // wxEVT_TREE_ITEM_COLLAPSED
    WXD_EVENT_TYPE_TREE_ITEM_EXPANDING = 108,    // wxEVT_TREE_ITEM_EXPANDING
    WXD_EVENT_TYPE_TREE_ITEM_EXPANDED = 109,     // wxEVT_TREE_ITEM_EXPANDED
    WXD_EVENT_TYPE_TREE_ITEM_RIGHT_CLICK = 110,  // wxEVT_TREE_ITEM_RIGHT_CLICK
    WXD_EVENT_TYPE_TREE_ITEM_MIDDLE_CLICK = 111, // wxEVT_TREE_ITEM_MIDDLE_CLICK
    WXD_EVENT_TYPE_TREE_KEY_DOWN = 112,          // wxEVT_TREE_KEY_DOWN
    WXD_EVENT_TYPE_TREE_DELETE_ITEM = 113,       // wxEVT_TREE_DELETE_ITEM
    WXD_EVENT_TYPE_TREE_ITEM_MENU = 114,         // wxEVT_TREE_ITEM_MENU
    WXD_EVENT_TYPE_TREE_BEGIN_DRAG = 115,        // wxEVT_TREE_BEGIN_DRAG
    WXD_EVENT_TYPE_TREE_BEGIN_RDRAG = 116,       // wxEVT_TREE_BEGIN_RDRAG
    WXD_EVENT_TYPE_TREE_END_DRAG = 117,          // wxEVT_TREE_END_DRAG
    WXD_EVENT_TYPE_TREE_STATE_IMAGE_CLICK = 118, // wxEVT_TREE_STATE_IMAGE_CLICK
    WXD_EVENT_TYPE_COMMAND_LISTBOX_DOUBLECLICKED = 119, // wxEVT_LISTBOX_DCLICK

    // ADDED: Additional event types missing from enum
    WXD_EVENT_TYPE_TOOL = 123, // ToolBar Tool clicked event (wxEVT_TOOL)
    WXD_EVENT_TYPE_TOOL_ENTER = 124, // ToolBar Enter event
    WXD_EVENT_TYPE_TREE_ITEM_GETTOOLTIP = 125, // TreeCtrl tooltip event
    WXD_EVENT_TYPE_ANY = 126, // Generic event type
    
    // ADDED: Window event types
    WXD_EVENT_TYPE_MOVE = 127, // Window move event
    WXD_EVENT_TYPE_ERASE = 128, // Window erase background event
    WXD_EVENT_TYPE_SET_FOCUS = 129, // Window set focus event
    WXD_EVENT_TYPE_KILL_FOCUS = 130, // Window kill focus event

    // AUI Manager event types
    WXD_EVENT_TYPE_AUI_PANE_BUTTON = 135, // wxEVT_AUI_PANE_BUTTON
    WXD_EVENT_TYPE_AUI_PANE_CLOSE = 136, // wxEVT_AUI_PANE_CLOSE
    WXD_EVENT_TYPE_AUI_PANE_MAXIMIZE = 137, // wxEVT_AUI_PANE_MAXIMIZE
    WXD_EVENT_TYPE_AUI_PANE_RESTORE = 138, // wxEVT_AUI_PANE_RESTORE
    WXD_EVENT_TYPE_AUI_PANE_ACTIVATED = 139, // wxEVT_AUI_PANE_ACTIVATED
    WXD_EVENT_TYPE_AUI_RENDER = 140, // wxEVT_AUI_RENDER

    // ADDED: RearrangeList event
    WXD_EVENT_TYPE_COMMAND_REARRANGE_LIST = 141, // Event for RearrangeList when items are rearranged

    WXD_EVENT_TYPE_TIMER = 200, // Added wxTimer event

    WXD_EVENT_TYPE_MAX // Keep this last for count if needed, or remove if not used for iteration
} WXDEventTypeCEnum;

typedef int64_t wxd_Style_t;
typedef int wxd_Direction_t;
typedef int wxd_Orientation_t;
typedef int wxd_SizerFlags_t;

// --- Opaque Struct Typedefs --- 
typedef struct wxd_App_t wxd_App_t;
typedef struct wxd_Window_t wxd_Window_t;
typedef struct wxd_Event_t wxd_Event_t;
typedef struct wxd_EvtHandler_t wxd_EvtHandler_t;
typedef struct wxd_Control_t wxd_Control_t;
typedef struct wxd_Frame_t wxd_Frame_t;
typedef struct wxd_Button_t wxd_Button_t;
typedef struct wxd_Sizer_t wxd_Sizer_t;
typedef struct wxd_StaticText_t wxd_StaticText_t;
typedef struct wxd_TextCtrl_t wxd_TextCtrl_t;
typedef struct wxd_CheckBox_t wxd_CheckBox_t;
typedef struct wxd_Panel_t wxd_Panel_t;
typedef struct wxd_RadioButton_t wxd_RadioButton_t;
typedef struct wxd_ListBox_t wxd_ListBox_t;
typedef struct wxd_Choice_t wxd_Choice_t;
typedef struct wxd_ComboBox_t wxd_ComboBox_t;
typedef struct wxd_CheckListBox_t wxd_CheckListBox_t;
typedef struct wxd_ToggleButton_t wxd_ToggleButton_t;
typedef struct wxd_RadioBox_t wxd_RadioBox_t;
typedef struct wxd_BitmapComboBox_t wxd_BitmapComboBox_t;
typedef struct wxd_TreeCtrl_t wxd_TreeCtrl_t;
typedef struct wxd_TreeItemData_t wxd_TreeItemData_t;
typedef struct wxd_StaticBox_t wxd_StaticBox_t;
typedef struct wxd_Gauge_t wxd_Gauge_t;
typedef struct wxd_Slider_t wxd_Slider_t;
typedef struct wxd_SpinCtrl_t wxd_SpinCtrl_t;
typedef struct wxd_SpinButton_t wxd_SpinButton_t;
typedef struct wxd_Notebook_t wxd_Notebook_t;
typedef struct wxd_SplitterWindow_t wxd_SplitterWindow_t;
typedef struct wxd_Bitmap_t wxd_Bitmap_t;
typedef struct wxd_BitmapButton_t wxd_BitmapButton_t;
typedef struct wxd_ScrolledWindow_t wxd_ScrolledWindow_t;
typedef struct wxd_StatusBar_t wxd_StatusBar_t;
typedef struct wxd_ToolBar_t wxd_ToolBar_t;
typedef struct wxd_MenuBar_t wxd_MenuBar_t;
typedef struct wxd_Menu_t wxd_Menu_t;
typedef struct wxd_MenuItem_t wxd_MenuItem_t;
typedef struct wxd_ListCtrl_t wxd_ListCtrl_t;
typedef struct wxd_ColourPickerCtrl_t wxd_ColourPickerCtrl_t;
typedef struct wxd_DatePickerCtrl_t wxd_DatePickerCtrl_t;
typedef struct wxd_TimePickerCtrl_t wxd_TimePickerCtrl_t;
typedef struct wxd_Treebook wxd_Treebook_t;
typedef struct wxd_SearchCtrl wxd_SearchCtrl_t;
typedef struct wxd_HyperlinkCtrl wxd_HyperlinkCtrl_t;
typedef struct wxd_ActivityIndicator wxd_ActivityIndicator_t;
typedef struct wxd_SpinCtrlDouble wxd_SpinCtrlDouble_t;
typedef struct wxd_CalendarCtrl_t wxd_CalendarCtrl_t;
typedef struct wxd_FlexGridSizer_t wxd_FlexGridSizer_t;
typedef struct wxd_StaticBoxSizer_t wxd_StaticBoxSizer_t;
typedef struct wxd_StaticBitmap_t wxd_StaticBitmap_t;
typedef struct wxd_StaticLine_t wxd_StaticLine_t;
typedef struct wxd_ScrollBar_t wxd_ScrollBar_t;
typedef struct wxd_CommandLinkButton_t wxd_CommandLinkButton_t;
typedef struct wxd_Dialog wxd_Dialog_t;
typedef struct wxd_MessageDialog wxd_MessageDialog_t;
typedef struct wxd_ArrayString { void* internal_data; } wxd_ArrayString_t;
typedef struct wxd_FileDialog wxd_FileDialog_t;
typedef struct wxd_ColourData wxd_ColourData_t;
typedef struct wxd_ColourDialog wxd_ColourDialog_t;
typedef struct wxd_FontData wxd_FontData_t;
typedef struct wxd_Font_t wxd_Font_t;
typedef struct wxd_FontDialog wxd_FontDialog_t;
typedef struct wxd_TextEntryDialog wxd_TextEntryDialog_t;
typedef struct wxd_ProgressDialog wxd_ProgressDialog_t;
typedef struct wxd_SingleChoiceDialog wxd_SingleChoiceDialog_t;
typedef struct wxd_MultiChoiceDialog wxd_MultiChoiceDialog_t;
typedef struct wxd_DirDialog wxd_DirDialog_t;
typedef struct wxd_AnimationCtrl wxd_AnimationCtrl_t;
typedef struct wxd_FilePickerCtrl_t wxd_FilePickerCtrl_t;
typedef struct wxd_DirPickerCtrl_t wxd_DirPickerCtrl_t;
typedef struct wxd_FontPickerCtrl_t wxd_FontPickerCtrl_t;
typedef struct wxd_NotificationMessage_t wxd_NotificationMessage_t;
typedef struct wxd_FileCtrl_t wxd_FileCtrl_t;
typedef struct wxd_MediaCtrl_t wxd_MediaCtrl_t;
typedef struct wxd_RearrangeList_t wxd_RearrangeList_t;
typedef struct wxd_EditableListBox_t wxd_EditableListBox_t;
typedef struct wxd_Clipboard_t wxd_Clipboard_t;

// XRC-related opaque types
typedef struct wxd_XmlResource_t wxd_XmlResource_t;

typedef struct wxd_AuiMDIParentFrame_t wxd_AuiMDIParentFrame_t;
typedef struct wxd_AuiMDIChildFrame_t wxd_AuiMDIChildFrame_t;
typedef struct wxd_AuiManager_t wxd_AuiManager_t;
typedef struct wxd_AuiManagerEvent_t wxd_AuiManagerEvent_t;
typedef struct wxd_AuiNotebook_t wxd_AuiNotebook_t;
typedef struct wxd_AuiNotebookEvent_t wxd_AuiNotebookEvent_t;
typedef struct wxd_AuiPaneInfo_t wxd_AuiPaneInfo_t;

// wxAuiToolBar
typedef struct wxd_AuiToolBar_t wxd_AuiToolBar_t;

// Drag and drop related typedefs (opaque pointers)
typedef struct wxd_DataObject_t wxd_DataObject_t;
typedef struct wxd_TextDataObject_t wxd_TextDataObject_t;
typedef struct wxd_FileDataObject_t wxd_FileDataObject_t;
typedef struct wxd_BitmapDataObject_t wxd_BitmapDataObject_t;
typedef struct wxd_DropSource_t wxd_DropSource_t;
typedef struct wxd_DropTarget_t wxd_DropTarget_t;
typedef struct wxd_TextDropTarget_t wxd_TextDropTarget_t;
typedef struct wxd_FileDropTarget_t wxd_FileDropTarget_t;

// DC related typedefs (opaque pointers)
typedef struct wxd_DC_t wxd_DC_t;
typedef struct wxd_WindowDC_t wxd_WindowDC_t;
typedef struct wxd_ClientDC_t wxd_ClientDC_t;
typedef struct wxd_PaintDC_t wxd_PaintDC_t;
typedef struct wxd_MemoryDC_t wxd_MemoryDC_t;
typedef struct wxd_ScreenDC_t wxd_ScreenDC_t;

// wxBitmap (placeholder for future use)
typedef struct wxd_Bitmap_t wxd_Bitmap_t;

// wxItemKind C Enum (for wxAuiToolBar, wxMenu, etc.)
typedef enum {
    WXD_ITEM_NORMAL = 0,     // wxITEM_NORMAL
    WXD_ITEM_CHECK = 1,      // wxITEM_CHECK
    WXD_ITEM_RADIO = 2,      // wxITEM_RADIO
    WXD_ITEM_SEPARATOR = 3,  // wxITEM_SEPARATOR
    // wxITEM_DROPDOWN (specific to wxToolBar and wxRibbonBar, might add later if needed)
    // wxITEM_MAX is not typically used directly as a kind
} WXDItemKindCEnum;

// --- Function Pointer Typedefs --- 
typedef bool (*wxd_OnInitCallback)(void* userData);
typedef void (*wxd_ClosureCallback)(wxd_Event_t* event, void* closure_ptr);

// wxDragResult C Enum (for drag and drop operations)
typedef enum {
    WXD_DRAG_NONE = 0,      // wxDragNone - No drag operation
    WXD_DRAG_COPY = 1,      // wxDragCopy - Copy the data
    WXD_DRAG_MOVE = 2,      // wxDragMove - Move the data
    WXD_DRAG_LINK = 3,      // wxDragLink - Link to the data
    WXD_DRAG_CANCEL = 4,    // wxDragCancel - Cancel the drag
    WXD_DRAG_ERROR = 5      // wxDragError - Error in drag operation
} wxd_DragResult;

// Define a long integer type for positions, lengths, etc.
typedef long long wxd_Long_t;

// ListCtrl constants
#define WXD_LIST_MASK_STATE         0x0001
#define WXD_LIST_MASK_TEXT          0x0002
#define WXD_LIST_MASK_IMAGE         0x0004
#define WXD_LIST_MASK_DATA          0x0008
#define WXD_LIST_MASK_WIDTH         0x0010
#define WXD_LIST_MASK_FORMAT        0x0020

// DataView item type
typedef struct {
    void* id;  // Internally, wxDataViewItem wraps a void* as an id
} wxd_DataViewItemWithID_t;

// DataView types
typedef void wxd_DataViewModel_t;
//typedef void wxd_DataViewItem_t;  // Already defined above as a struct
typedef void wxd_DataViewColumn_t;

// DataViewCell mode enum (for cell renderers)
typedef enum {
    WXD_DATAVIEW_CELL_INERT,
    WXD_DATAVIEW_CELL_ACTIVATABLE, 
    WXD_DATAVIEW_CELL_EDITABLE
} wxd_DataViewCellModeCEnum;

// Image related opaque types
typedef void wxd_Image_t;          // Added if not present
typedef void wxd_ImageList_t;      // Added
typedef struct wxd_Icon_t wxd_Icon_t; // Assuming this pattern from Bitmap_t

// DataView opaque types
// ... existing code ...

// For wxd_TreeItemId_t, wxTreeItemId internally holds a void* m_pItem.
// We will pass this void* directly as an opaque pointer type for Rust.
// struct wxd_TreeItemId_s; // Remove old forward declaration
// typedef struct wxd_TreeItemId_s wxd_TreeItemId_t; // Remove old typedef
typedef struct wxd_TreeItemId_Opaque_ForBindgen wxd_TreeItemId_t; // Define as opaque struct for bindgen

// Define wxd_DropResult enum (ensure this is defined if used)
// ... existing code ...

// --- Opaque and FFI Struct Definitions ---
// Moved from wxd_event_api.h to ensure it's defined before use in event.cpp
#ifdef __cplusplus
struct wxd_Event_t { wxEvent* event; };
#else
typedef struct wxd_Event_t wxd_Event_t;
#endif

typedef struct wxd_App_t wxd_App_t;
typedef struct wxd_Window_t wxd_Window_t;
// typedef struct wxd_Event_t wxd_Event_t; // Now defined above
typedef struct wxd_EvtHandler_t wxd_EvtHandler_t;
typedef struct wxd_Control_t wxd_Control_t;
// ... existing code ...

typedef struct wxd_BitmapBundle_t wxd_BitmapBundle_t;

/// Opaque pointer to wxFont
typedef struct wxd_Font_t wxd_Font_t;

/// Opaque pointer to wxWindow
typedef struct wxd_Window_t wxd_Window_t;

/// Opaque pointer to wxTimer
typedef struct wxd_Timer_t wxd_Timer_t;

/// Window ID type (must match wxWidgets window ID type)
typedef int wxd_Id;

#endif // WXD_TYPES_H