1 #include "../Common/Common.h"
3 #include <gtk/gtkmarshal.h>
5 #include "GtkDasherControl.h"
6 #include "DasherControl.h"
7 #include "custom_marshal.h"
9 struct _GtkDasherControlPrivate
{
10 CDasherControl
*pControl
;
13 typedef struct _GtkDasherControlPrivate GtkDasherControlPrivate
;
15 // Signals that this control can emit
26 DASHER_CONTEXT_REQUEST
,
27 DASHER_REQUEST_SETTINGS
,
34 #define GTK_DASHER_CONTROL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), TYPE_GTK_DASHER_CONTROL, GtkDasherControlPrivate));
36 /* TODO: is it still sensible to derive from VBox, given that its just a cnavas now*/
37 G_DEFINE_TYPE(GtkDasherControl
, gtk_dasher_control
, GTK_TYPE_VBOX
);
39 static void gtk_dasher_control_finalize(GObject
* pObject
);
41 static guint gtk_dasher_control_signals
[SIGNAL_NUM
]; /* TODO: initilaise this? */
44 gtk_dasher_control_class_init(GtkDasherControlClass
*pClass
) {
45 g_type_class_add_private(pClass
, sizeof(GtkDasherControlPrivate
));
47 GObjectClass
*pObjectClass
= (GObjectClass
*) pClass
;
48 pObjectClass
->finalize
= gtk_dasher_control_finalize
;
50 gtk_dasher_control_signals
[DASHER_CHANGED
] = g_signal_new("dasher_changed", G_TYPE_FROM_CLASS(pClass
), static_cast < GSignalFlags
> (G_SIGNAL_RUN_FIRST
| G_SIGNAL_ACTION
), G_STRUCT_OFFSET(GtkDasherControlClass
, dasher_changed
), NULL
, NULL
, g_cclosure_marshal_VOID__INT
, G_TYPE_NONE
, 1, G_TYPE_INT
);
52 gtk_dasher_control_signals
[DASHER_START
] = g_signal_new("dasher_start", G_TYPE_FROM_CLASS(pClass
), static_cast < GSignalFlags
> (G_SIGNAL_RUN_FIRST
| G_SIGNAL_ACTION
), G_STRUCT_OFFSET(GtkDasherControlClass
, dasher_start
), NULL
, NULL
, g_cclosure_marshal_VOID__VOID
, G_TYPE_NONE
, 0);
54 gtk_dasher_control_signals
[DASHER_STOP
] = g_signal_new("dasher_stop", G_TYPE_FROM_CLASS(pClass
), static_cast < GSignalFlags
> (G_SIGNAL_RUN_FIRST
| G_SIGNAL_ACTION
), G_STRUCT_OFFSET(GtkDasherControlClass
, dasher_stop
), NULL
, NULL
, g_cclosure_marshal_VOID__VOID
, G_TYPE_NONE
, 0);
56 gtk_dasher_control_signals
[DASHER_EDIT_INSERT
] = g_signal_new("dasher_edit_insert", G_TYPE_FROM_CLASS(pClass
), static_cast < GSignalFlags
> (G_SIGNAL_RUN_FIRST
| G_SIGNAL_ACTION
), G_STRUCT_OFFSET(GtkDasherControlClass
, dasher_edit_insert
), NULL
, NULL
, g_cclosure_marshal_VOID__STRING
, G_TYPE_NONE
, 1, G_TYPE_STRING
);
58 gtk_dasher_control_signals
[DASHER_EDIT_DELETE
] = g_signal_new("dasher_edit_delete", G_TYPE_FROM_CLASS(pClass
), static_cast < GSignalFlags
> (G_SIGNAL_RUN_FIRST
| G_SIGNAL_ACTION
), G_STRUCT_OFFSET(GtkDasherControlClass
, dasher_edit_delete
), NULL
, NULL
, g_cclosure_marshal_VOID__STRING
, G_TYPE_NONE
, 1, G_TYPE_STRING
);
60 gtk_dasher_control_signals
[DASHER_EDIT_CONVERT
] = g_signal_new("dasher_edit_convert", G_TYPE_FROM_CLASS(pClass
), static_cast < GSignalFlags
> (G_SIGNAL_RUN_FIRST
| G_SIGNAL_ACTION
), G_STRUCT_OFFSET(GtkDasherControlClass
, dasher_edit_convert
), NULL
, NULL
, g_cclosure_marshal_VOID__VOID
, G_TYPE_NONE
, 0);
62 gtk_dasher_control_signals
[DASHER_EDIT_PROTECT
] = g_signal_new("dasher_edit_protect", G_TYPE_FROM_CLASS(pClass
), static_cast < GSignalFlags
> (G_SIGNAL_RUN_FIRST
| G_SIGNAL_ACTION
), G_STRUCT_OFFSET(GtkDasherControlClass
, dasher_edit_protect
), NULL
, NULL
, g_cclosure_marshal_VOID__VOID
, G_TYPE_NONE
, 0);
64 gtk_dasher_control_signals
[DASHER_CONTROL
] = g_signal_new("dasher_control", G_TYPE_FROM_CLASS(pClass
), static_cast < GSignalFlags
> (G_SIGNAL_RUN_FIRST
| G_SIGNAL_ACTION
), G_STRUCT_OFFSET(GtkDasherControlClass
, dasher_control
), NULL
, NULL
, g_cclosure_marshal_VOID__INT
, G_TYPE_NONE
, 1, G_TYPE_INT
);
66 gtk_dasher_control_signals
[DASHER_CHANGED
] = g_signal_new("dasher_context_request", G_TYPE_FROM_CLASS(pClass
), static_cast < GSignalFlags
> (G_SIGNAL_RUN_FIRST
| G_SIGNAL_ACTION
), G_STRUCT_OFFSET(GtkDasherControlClass
, dasher_context_request
), NULL
, NULL
, g_cclosure_user_marshal_VOID__INT_INT
, G_TYPE_NONE
, 2, G_TYPE_INT
, G_TYPE_INT
);
68 // gtk_dasher_control_signals[DASHER_CONTROL] = g_signal_new("key_press_event", G_TYPE_FROM_CLASS(pClass), static_cast < GSignalFlags > (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION), G_STRUCT_OFFSET(GtkDasherControlClass, key_press_event), NULL, NULL, gtk_marshal_BOOLEAN__POINTER, G_TYPE_BOOLEAN, 1, GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
70 // gtk_dasher_control_signals[DASHER_CONTROL] = g_signal_new("key_release_event", G_TYPE_FROM_CLASS(pClass), static_cast < GSignalFlags > (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION), G_STRUCT_OFFSET(GtkDasherControlClass, key_release_event), NULL, NULL, gtk_marshal_BOOLEAN__POINTER, G_TYPE_BOOLEAN, 1, GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE);
72 gtk_dasher_control_signals
[DASHER_REQUEST_SETTINGS
] = g_signal_new("dasher_request_settings", G_TYPE_FROM_CLASS(pClass
), static_cast < GSignalFlags
> (G_SIGNAL_RUN_FIRST
| G_SIGNAL_ACTION
), G_STRUCT_OFFSET(GtkDasherControlClass
, dasher_request_settings
), NULL
, NULL
, g_cclosure_marshal_VOID__VOID
, G_TYPE_NONE
, 0);
74 gtk_dasher_control_signals
[DASHER_LOCK_INFO
] = g_signal_new("dasher_lock_info", G_TYPE_FROM_CLASS(pClass
), static_cast < GSignalFlags
> (G_SIGNAL_RUN_FIRST
| G_SIGNAL_ACTION
), G_STRUCT_OFFSET(GtkDasherControlClass
, dasher_lock
), NULL
, NULL
, g_cclosure_marshal_VOID__POINTER
, G_TYPE_NONE
, 1, G_TYPE_POINTER
);
76 gtk_dasher_control_signals
[DASHER_MESSAGE
] = g_signal_new("dasher_message", G_TYPE_FROM_CLASS(pClass
), static_cast < GSignalFlags
> (G_SIGNAL_RUN_FIRST
| G_SIGNAL_ACTION
), G_STRUCT_OFFSET(GtkDasherControlClass
, dasher_message
), NULL
, NULL
, g_cclosure_marshal_VOID__POINTER
, G_TYPE_NONE
, 1, G_TYPE_POINTER
);
78 gtk_dasher_control_signals
[DASHER_COMMAND
] = g_signal_new("dasher_command", G_TYPE_FROM_CLASS(pClass
), static_cast < GSignalFlags
> (G_SIGNAL_RUN_FIRST
| G_SIGNAL_ACTION
), G_STRUCT_OFFSET(GtkDasherControlClass
, dasher_command
), NULL
, NULL
, g_cclosure_marshal_VOID__STRING
, G_TYPE_NONE
, 1, G_TYPE_STRING
);
80 pClass
->dasher_changed
= NULL
;
81 pClass
->dasher_start
= NULL
;
82 pClass
->dasher_stop
= NULL
;
83 pClass
->dasher_edit_insert
= NULL
;
84 pClass
->dasher_edit_delete
= NULL
;
85 pClass
->dasher_edit_convert
= NULL
;
86 pClass
->dasher_edit_protect
= NULL
;
87 pClass
->dasher_control
= NULL
;
88 pClass
->dasher_context_request
= NULL
;
89 pClass
->dasher_request_settings
= NULL
;
90 pClass
->dasher_lock
= NULL
;
91 pClass
->dasher_message
= NULL
;
92 pClass
->dasher_command
= NULL
;
93 // pClass->key_press_event = gtk_dasher_control_default_key_press_handler;
94 // pClass->key_release_event = gtk_dasher_control_default_key_release_handler;
98 gtk_dasher_control_init(GtkDasherControl
*pDasherControl
) {
99 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pDasherControl
);
101 pPrivate
->pControl
= new CDasherControl(&(pDasherControl
->box
), pDasherControl
);
103 // g_signal_connect(G_OBJECT(pDasherControl), "key-press-event", G_CALLBACK(gtk_dasher_control_default_key_press_handler), pPrivate->pControl);
104 // g_signal_connect(G_OBJECT(pDasherControl), "key-release-event", G_CALLBACK(gtk_dasher_control_default_key_release_handler), pPrivate->pControl);
108 gtk_dasher_control_finalize(GObject
*pObject
) {
109 GtkDasherControl
*pDasherControl
= GTK_DASHER_CONTROL(pObject
);
111 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pDasherControl
);
114 /* TODO: Check that this actually gets called correctly */
116 /* TODO: Should just call constructor - this should just be a lightweight wrapper class */
117 pPrivate
->pControl
->StartShutdown();
119 delete pPrivate
->pControl
;
120 // g_free(pDasherControl->private_data);
124 gtk_dasher_control_new() {
125 GtkDasherControl
*pDasherControl
;
127 pDasherControl
= GTK_DASHER_CONTROL(g_object_new(gtk_dasher_control_get_type(), NULL
));
129 return GTK_WIDGET(pDasherControl
);
133 gtk_dasher_control_set_parameter_bool(GtkDasherControl
*pControl
, int iParameter
, bool bValue
) {
134 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
135 pPrivate
->pControl
->SetBoolParameter(iParameter
, bValue
);
139 gtk_dasher_control_set_parameter_long(GtkDasherControl
*pControl
, int iParameter
, long lValue
) {
140 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
141 pPrivate
->pControl
->SetLongParameter(iParameter
, lValue
);
145 gtk_dasher_control_set_parameter_string(GtkDasherControl
*pControl
, int iParameter
, const char *szValue
) {
146 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
147 pPrivate
->pControl
->SetStringParameter(iParameter
, szValue
);
151 gtk_dasher_control_get_parameter_bool(GtkDasherControl
*pControl
, int iParameter
) {
152 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
153 return pPrivate
->pControl
->GetBoolParameter(iParameter
);
157 gtk_dasher_control_get_parameter_long(GtkDasherControl
*pControl
, int iParameter
) {
158 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
159 return pPrivate
->pControl
->GetLongParameter(iParameter
);
163 gtk_dasher_control_reset_parameter(GtkDasherControl
*pControl
, int iParameter
) {
164 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
165 pPrivate
->pControl
->ResetParameter(iParameter
);
169 gtk_dasher_control_get_parameter_string(GtkDasherControl
*pControl
, int iParameter
) {
170 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
171 return pPrivate
->pControl
->GetStringParameter(iParameter
).c_str();
175 gtk_dasher_control_get_allowed_values(GtkDasherControl
*pControl
, int iParameter
) {
176 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
177 return pPrivate
->pControl
->GetAllowedValues(iParameter
);
181 gtk_dasher_control_train(GtkDasherControl
*pControl
, const gchar
*szFilename
) {
182 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
183 pPrivate
->pControl
->Train(szFilename
);
187 gtk_dasher_control_set_context(GtkDasherControl
*pControl
, const gchar
*szContext
) {
188 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
189 pPrivate
->pControl
->SetContext(szContext
);
193 gtk_dasher_control_set_buffer(GtkDasherControl
*pControl
, int iOffset
) {
194 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
195 pPrivate
->pControl
->SetBuffer(iOffset
);
199 gtk_dasher_control_unset_buffer(GtkDasherControl
*pControl
) {
200 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
201 pPrivate
->pControl
->UnsetBuffer();
205 gtk_dasher_control_set_offset(GtkDasherControl
*pControl
, int iOffset
) {
206 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
207 pPrivate
->pControl
->SetOffset(iOffset
);
211 gtk_dasher_control_register_node(GtkDasherControl
*pControl
, int iID
, const gchar
*szLabel
, int iColour
) {
212 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
213 pPrivate
->pControl
->RegisterNode(iID
, szLabel
, iColour
);
217 gtk_dasher_control_connect_node(GtkDasherControl
*pControl
, int iChild
, int iParent
, int iAfter
) {
218 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
219 pPrivate
->pControl
->ConnectNode(iChild
, iParent
, iAfter
);
223 gtk_dasher_control_disconnect_node(GtkDasherControl
*pControl
, int iChild
, int iParent
) {
224 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
225 pPrivate
->pControl
->DisconnectNode(iChild
, iParent
);
229 gtk_dasher_control_external_key_down(GtkDasherControl
*pControl
, int iKeyVal
) {
230 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
231 pPrivate
->pControl
->ExternalKeyDown(iKeyVal
);
235 gtk_dasher_control_external_key_up(GtkDasherControl
*pControl
, int iKeyVal
) {
236 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
237 pPrivate
->pControl
->ExternalKeyUp(iKeyVal
);
241 gtk_dasher_user_log_new_trial(GtkDasherControl
* pControl
) {
242 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
243 pPrivate
->pControl
->UserLogNewTrial();
247 gtk_dasher_control_set_focus(GtkDasherControl
* pControl
){
248 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
249 pPrivate
->pControl
->SetFocus();
253 // gtk_dasher_control_default_key_press_handler(GtkDasherControl *pDasherControl, GdkEventKey *pEvent, gpointer data){
254 // static_cast<CDasherControl *>(data)->KeyPressEvent(pEvent);
259 // gtk_dasher_control_default_key_release_handler(GtkDasherControl *pDasherControl, GdkEventKey *pEvent, gpointer data) {
260 // static_cast<CDasherControl *>(data)->KeyReleaseEvent(pEvent);
265 gtk_dasher_control_get_module_settings(GtkDasherControl
* pControl
, const gchar
*szModule
, SModuleSettings
**pSettings
, gint
*iCount
) {
266 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
267 return pPrivate
->pControl
->GetModuleSettings(szModule
, pSettings
, iCount
);
271 gtk_dasher_control_add_game_mode_string(GtkDasherControl
*pControl
, const gchar
*szString
) {
272 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
273 pPrivate
->pControl
->AddGameModeString(szString
);
277 gtk_dasher_control_force_pause(GtkDasherControl
*pControl
) {
278 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
279 pPrivate
->pControl
->PauseAt(0,0);
283 gtk_dasher_control_get_framerate(GtkDasherControl
*pControl
) {
284 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
285 return pPrivate
->pControl
->GetFramerate();
289 gtk_dasher_control_add_action_button(GtkDasherControl
*pControl
, const gchar
*szCommand
) {
290 GtkDasherControlPrivate
*pPrivate
= GTK_DASHER_CONTROL_GET_PRIVATE(pControl
);
291 pPrivate
->pControl
->AddActionButton(szCommand
);