static GString* language_support_generate_c_signature (const gchar* separator, const gchar* widget, GSignalQuery query, gboolean swapped, const gchar* handler) { GList* names = NULL; GString* str = g_string_new ("\n"); const gchar* widget_param = language_support_get_signal_parameter (widget, &names); int i; g_string_append (str, g_type_name (query.return_type)); if (!swapped) g_string_append_printf (str, "%s%s (%s *%s", separator, handler, widget, widget_param); else g_string_append_printf (str, "%s%s (gpointer user_data, %s *%s", separator, handler, widget, widget_param); for (i = 0; i < query.n_params; i++) { const gchar* type_name = g_type_name (query.param_types[i]); if (!type_name) continue; const gchar* param_name = language_support_get_signal_parameter (type_name, &names); if (query.param_types[i] <= G_TYPE_DOUBLE) { g_string_append_printf (str, ", %s %s", type_name, param_name); } else { g_string_append_printf (str, ", %s *%s", type_name, param_name); } } if (!swapped) g_string_append (str, ", gpointer user_data)"); else g_string_append (str, ")"); anjuta_util_glist_strings_free (names); return str; }
static void on_glade_drop (IAnjutaEditor* editor, IAnjutaIterable* iterator, const gchar* signal_data, PythonPlugin* lang_plugin) { GSignalQuery query; GType type; guint id; const gchar* widget; const gchar* signal; const gchar* handler; const gchar* user_data; gboolean swapped; GList* names = NULL; GString* str = g_string_new (NULL); int i; IAnjutaIterable* start, * end; GStrv data = g_strsplit(signal_data, ":", 5); widget = data[0]; signal = data[1]; handler = data[2]; user_data = data[3]; swapped = g_str_equal (data[4], "1"); type = g_type_from_name (widget); id = g_signal_lookup (signal, type); g_signal_query (id, &query); g_string_append_printf (str, "\ndef %s (self", handler); for (i = 0; i < query.n_params; i++) { const gchar* type_name = g_type_name (query.param_types[i]); const gchar* param_name = language_support_get_signal_parameter (type_name, &names); g_string_append_printf (str, ", %s", param_name); } g_string_append (str, "):\n"); ianjuta_editor_insert (editor, iterator, str->str, -1, NULL); /* Indent code correctly */ start = iterator; end = ianjuta_iterable_clone (iterator, NULL); ianjuta_iterable_set_position (end, ianjuta_iterable_get_position (iterator, NULL) + g_utf8_strlen (str->str, -1), NULL); ianjuta_indenter_indent (IANJUTA_INDENTER (lang_plugin), start, end, NULL); g_object_unref (end); g_string_free (str, TRUE); anjuta_util_glist_strings_free (names); g_strfreev (data); }