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
|
// Programmed by Jedidiah Barber
// Released into the public domain
#include <FL/Fl_Sys_Menu_Bar.H>
#include <FL/Fl_Menu_Item.H>
#include "c_fl_sys_menu_bar.h"
// Exports from Ada
extern "C" void widget_draw_hook(void * ud);
extern "C" int widget_handle_hook(void * ud, int e);
extern "C" void menu_item_callback_hook(void * cobj, void * ud);
// Attaching all relevant hooks and friends
class My_Sys_Menu_Bar : public Fl_Sys_Menu_Bar {
public:
using Fl_Sys_Menu_Bar::Fl_Sys_Menu_Bar;
friend void fl_sys_menu_bar_draw(SYSMENUBAR m);
friend int fl_sys_menu_bar_handle(SYSMENUBAR m, int e);
void draw();
int handle(int e);
};
void My_Sys_Menu_Bar::draw() {
widget_draw_hook(this->user_data());
}
int My_Sys_Menu_Bar::handle(int e) {
return widget_handle_hook(this->user_data(), e);
}
// Flattened C API
SYSMENUBAR new_fl_sys_menu_bar(int x, int y, int w, int h, char* label) {
My_Sys_Menu_Bar *m = new My_Sys_Menu_Bar(x, y, w, h, label);
return m;
}
void free_fl_sys_menu_bar(SYSMENUBAR m) {
delete static_cast<My_Sys_Menu_Bar*>(m);
}
int fl_sys_menu_bar_add(SYSMENUBAR m, const char * t) {
return static_cast<Fl_Sys_Menu_Bar*>(m)->add(t);
}
int fl_sys_menu_bar_add2(SYSMENUBAR m, const char * t, int s, void * u, int f) {
return static_cast<Fl_Sys_Menu_Bar*>(m)->add(t, s,
u==0?0:reinterpret_cast<Fl_Callback_p>(&menu_item_callback_hook), u, f);
}
int fl_sys_menu_bar_add3(SYSMENUBAR m, const char * t, const char * s, void * u, int f) {
return static_cast<Fl_Sys_Menu_Bar*>(m)->add(t, s,
u==0?0:reinterpret_cast<Fl_Callback_p>(&menu_item_callback_hook), u, f);
}
int fl_sys_menu_bar_insert(SYSMENUBAR m, int p, const char * t, int s, void * u, int f) {
return static_cast<Fl_Sys_Menu_Bar*>(m)->insert(p, t, s,
u==0?0:reinterpret_cast<Fl_Callback_p>(&menu_item_callback_hook), u, f);
}
int fl_sys_menu_bar_insert2(SYSMENUBAR m, int p, const char * t, const char * s, void * u, int f) {
return static_cast<Fl_Sys_Menu_Bar*>(m)->insert(p, t, s,
u==0?0:reinterpret_cast<Fl_Callback_p>(&menu_item_callback_hook), u, f);
}
void fl_sys_menu_bar_set_menu(SYSMENUBAR m, void * d) {
static_cast<Fl_Sys_Menu_Bar*>(m)->menu(static_cast<Fl_Menu_*>(d)->menu());
}
void fl_sys_menu_bar_remove(SYSMENUBAR m, int p) {
static_cast<Fl_Sys_Menu_Bar*>(m)->remove(p);
}
void fl_sys_menu_bar_clear(SYSMENUBAR m) {
static_cast<Fl_Sys_Menu_Bar*>(m)->clear();
}
int fl_sys_menu_bar_clear_submenu(SYSMENUBAR m, int i) {
return static_cast<Fl_Sys_Menu_Bar*>(m)->clear_submenu(i);
}
const void * fl_sys_menu_bar_get_item(SYSMENUBAR m, int i) {
return &(static_cast<Fl_Sys_Menu_Bar*>(m)->menu()[i]);
}
void fl_sys_menu_bar_setonly(SYSMENUBAR m, void * mi) {
static_cast<Fl_Sys_Menu_Bar*>(m)->setonly(static_cast<Fl_Menu_Item*>(mi));
}
void fl_sys_menu_bar_replace(SYSMENUBAR m, int i, const char * t) {
static_cast<Fl_Sys_Menu_Bar*>(m)->replace(i, t);
}
void fl_sys_menu_bar_shortcut(SYSMENUBAR m, int i, int s) {
static_cast<Fl_Sys_Menu_Bar*>(m)->shortcut(i, s);
}
int fl_sys_menu_bar_get_mode(SYSMENUBAR m, int i) {
return static_cast<Fl_Sys_Menu_Bar*>(m)->mode(i);
}
void fl_sys_menu_bar_set_mode(SYSMENUBAR m, int i, int f) {
static_cast<Fl_Sys_Menu_Bar*>(m)->mode(i, f);
}
void fl_sys_menu_bar_global(SYSMENUBAR m) {
static_cast<Fl_Sys_Menu_Bar*>(m)->global();
}
void fl_sys_menu_bar_update(SYSMENUBAR m) {
#if FLTK_ABI_VERSION >= 10304
static_cast<Fl_Sys_Menu_Bar*>(m)->update();
#else
(void)(m);
#endif
}
void fl_sys_menu_bar_draw(SYSMENUBAR m) {
static_cast<My_Sys_Menu_Bar*>(m)->Fl_Sys_Menu_Bar::draw();
}
int fl_sys_menu_bar_handle(SYSMENUBAR m, int e) {
return static_cast<My_Sys_Menu_Bar*>(m)->Fl_Sys_Menu_Bar::handle(e);
}
|