Preparing for release A few fixes before code freeze
[dasher.git] / Src / Gtk2 / GtkDasherControl.cpp
blob4356b86b8747eb7c73a7259b7b142ae2e8e9b0d9
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
17 enum {
18 DASHER_CHANGED,
19 DASHER_START,
20 DASHER_STOP,
21 DASHER_EDIT_INSERT,
22 DASHER_EDIT_DELETE,
23 DASHER_EDIT_CONVERT,
24 DASHER_EDIT_PROTECT,
25 DASHER_CONTROL,
26 DASHER_CONTEXT_REQUEST,
27 DASHER_REQUEST_SETTINGS,
28 DASHER_LOCK_INFO,
29 DASHER_MESSAGE,
30 DASHER_COMMAND,
31 SIGNAL_NUM
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? */
43 static void
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;
97 static void
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);
107 static void
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);
123 GtkWidget *
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);
132 void
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);
138 void
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);
144 void
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);
150 bool
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);
156 long
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);
162 void
163 gtk_dasher_control_reset_parameter(GtkDasherControl *pControl, int iParameter) {
164 GtkDasherControlPrivate *pPrivate = GTK_DASHER_CONTROL_GET_PRIVATE(pControl);
165 pPrivate->pControl->ResetParameter(iParameter);
168 const char *
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();
174 GArray *
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);
180 void
181 gtk_dasher_control_train(GtkDasherControl *pControl, const gchar *szFilename) {
182 GtkDasherControlPrivate *pPrivate = GTK_DASHER_CONTROL_GET_PRIVATE(pControl);
183 pPrivate->pControl->Train(szFilename);
186 void
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);
192 void
193 gtk_dasher_control_set_buffer(GtkDasherControl *pControl, int iOffset) {
194 GtkDasherControlPrivate *pPrivate = GTK_DASHER_CONTROL_GET_PRIVATE(pControl);
195 pPrivate->pControl->SetBuffer(iOffset);
198 void
199 gtk_dasher_control_unset_buffer(GtkDasherControl *pControl) {
200 GtkDasherControlPrivate *pPrivate = GTK_DASHER_CONTROL_GET_PRIVATE(pControl);
201 pPrivate->pControl->UnsetBuffer();
204 void
205 gtk_dasher_control_set_offset(GtkDasherControl *pControl, int iOffset) {
206 GtkDasherControlPrivate *pPrivate = GTK_DASHER_CONTROL_GET_PRIVATE(pControl);
207 pPrivate->pControl->SetOffset(iOffset);
210 void
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);
216 void
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);
222 void
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);
228 void
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);
234 void
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);
240 void
241 gtk_dasher_user_log_new_trial(GtkDasherControl * pControl) {
242 GtkDasherControlPrivate *pPrivate = GTK_DASHER_CONTROL_GET_PRIVATE(pControl);
243 pPrivate->pControl->UserLogNewTrial();
246 void
247 gtk_dasher_control_set_focus(GtkDasherControl * pControl){
248 GtkDasherControlPrivate *pPrivate = GTK_DASHER_CONTROL_GET_PRIVATE(pControl);
249 pPrivate->pControl->SetFocus();
252 // gboolean
253 // gtk_dasher_control_default_key_press_handler(GtkDasherControl *pDasherControl, GdkEventKey *pEvent, gpointer data){
254 // static_cast<CDasherControl *>(data)->KeyPressEvent(pEvent);
255 // return FALSE;
256 // }
258 // gboolean
259 // gtk_dasher_control_default_key_release_handler(GtkDasherControl *pDasherControl, GdkEventKey *pEvent, gpointer data) {
260 // static_cast<CDasherControl *>(data)->KeyReleaseEvent(pEvent);
261 // return FALSE;
262 // }
264 gboolean
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);
270 void
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);
276 void
277 gtk_dasher_control_force_pause(GtkDasherControl *pControl) {
278 GtkDasherControlPrivate *pPrivate = GTK_DASHER_CONTROL_GET_PRIVATE(pControl);
279 pPrivate->pControl->PauseAt(0,0);
282 double
283 gtk_dasher_control_get_framerate(GtkDasherControl *pControl) {
284 GtkDasherControlPrivate *pPrivate = GTK_DASHER_CONTROL_GET_PRIVATE(pControl);
285 return pPrivate->pControl->GetFramerate();
288 void
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);