/** * parser_cxx_assist_install: * @assist: ParserCxxAssist object * @ieditor: Editor to install support for * @iparser: Parser to install support for * * Returns: Registers provider for editor */ static void parser_cxx_assist_install (ParserCxxAssist *assist, IAnjutaEditor *ieditor) { g_return_if_fail (assist->priv->iassist == NULL); if (IANJUTA_IS_EDITOR_ASSIST (ieditor)) { assist->priv->iassist = IANJUTA_EDITOR_ASSIST (ieditor); ianjuta_editor_assist_add (IANJUTA_EDITOR_ASSIST (ieditor), IANJUTA_PROVIDER(assist), NULL); g_signal_connect (ieditor, "cancelled", G_CALLBACK (parser_cxx_assist_cancelled), assist); } else assist->priv->iassist = NULL; if (IANJUTA_IS_EDITOR_TIP (ieditor)) assist->priv->itip = IANJUTA_EDITOR_TIP (ieditor); else assist->priv->itip = NULL; if (IANJUTA_IS_FILE (assist->priv->iassist)) { GFile *file = ianjuta_file_get_file ( IANJUTA_FILE (assist->priv->iassist), NULL); if (file != NULL) { assist->priv->editor_filename = g_file_get_path (file); g_object_unref (file); } } }
static void on_added_current_document (AnjutaPlugin *plugin, const gchar *name, const GValue *value, gpointer data) { GObject *cur_editor = NULL; SnippetsManagerPlugin *snippets_manager_plugin = NULL; /* Assertions */ g_return_if_fail (ANJUTA_IS_PLUGIN_SNIPPETS_MANAGER (plugin)); snippets_manager_plugin = ANJUTA_PLUGIN_SNIPPETS_MANAGER (plugin); /* Get the current document and test if it's an IAnjutaEditor */ cur_editor = g_value_get_object (value); if (IANJUTA_IS_EDITOR (cur_editor)) snippets_interaction_set_editor (snippets_manager_plugin->snippets_interaction, IANJUTA_EDITOR (cur_editor)); else snippets_interaction_set_editor (snippets_manager_plugin->snippets_interaction, NULL); /* Refilter the snippets shown in the browser */ snippets_browser_refilter_snippets_view (snippets_manager_plugin->snippets_browser); /* Load the provider if needed */ if (IANJUTA_IS_EDITOR_ASSIST (cur_editor)) snippets_provider_load (snippets_manager_plugin->snippets_provider, IANJUTA_EDITOR_ASSIST (cur_editor)); }
ParserCxxAssist * parser_cxx_assist_new (IAnjutaEditor *ieditor, IAnjutaSymbolManager *isymbol_manager, GSettings* settings) { ParserCxxAssist *assist; static IAnjutaSymbolField calltip_fields[] = { IANJUTA_SYMBOL_FIELD_ID, IANJUTA_SYMBOL_FIELD_NAME, IANJUTA_SYMBOL_FIELD_RETURNTYPE, IANJUTA_SYMBOL_FIELD_SIGNATURE }; static IAnjutaSymbolField ac_fields[] = { IANJUTA_SYMBOL_FIELD_ID, IANJUTA_SYMBOL_FIELD_NAME, IANJUTA_SYMBOL_FIELD_KIND, IANJUTA_SYMBOL_FIELD_TYPE, IANJUTA_SYMBOL_FIELD_ACCESS, IANJUTA_SYMBOL_FIELD_SIGNATURE }; if (!IANJUTA_IS_EDITOR_ASSIST (ieditor) && !IANJUTA_IS_EDITOR_TIP (ieditor)) { /* No assistance is available with the current editor */ return NULL; } assist = g_object_new (TYPE_PARSER_CXX_ASSIST, NULL); assist->priv->settings = settings; /* Create call tip queries */ /* Calltip in file */ assist->priv->calltip_query_file = ianjuta_symbol_manager_create_query (isymbol_manager, IANJUTA_SYMBOL_QUERY_SEARCH_FILE, IANJUTA_SYMBOL_QUERY_DB_PROJECT, NULL); ianjuta_symbol_query_set_fields (assist->priv->calltip_query_file, G_N_ELEMENTS (calltip_fields), calltip_fields, NULL); ianjuta_symbol_query_set_filters (assist->priv->calltip_query_file, IANJUTA_SYMBOL_TYPE_PROTOTYPE | IANJUTA_SYMBOL_TYPE_FUNCTION | IANJUTA_SYMBOL_TYPE_METHOD | IANJUTA_SYMBOL_TYPE_MACRO_WITH_ARG, TRUE, NULL); ianjuta_symbol_query_set_file_scope (assist->priv->calltip_query_file, IANJUTA_SYMBOL_QUERY_SEARCH_FS_PRIVATE, NULL); ianjuta_symbol_query_set_mode (assist->priv->calltip_query_file, IANJUTA_SYMBOL_QUERY_MODE_ASYNC, NULL); g_signal_connect_object (assist->priv->calltip_query_file, "async-result", G_CALLBACK (on_calltip_search_complete), assist, 0); /* Calltip in project */ assist->priv->calltip_query_project = ianjuta_symbol_manager_create_query (isymbol_manager, IANJUTA_SYMBOL_QUERY_SEARCH, IANJUTA_SYMBOL_QUERY_DB_PROJECT, NULL); ianjuta_symbol_query_set_fields (assist->priv->calltip_query_project, G_N_ELEMENTS (calltip_fields), calltip_fields, NULL); ianjuta_symbol_query_set_filters (assist->priv->calltip_query_project, IANJUTA_SYMBOL_TYPE_PROTOTYPE | IANJUTA_SYMBOL_TYPE_METHOD | IANJUTA_SYMBOL_TYPE_MACRO_WITH_ARG, TRUE, NULL); ianjuta_symbol_query_set_file_scope (assist->priv->calltip_query_project, IANJUTA_SYMBOL_QUERY_SEARCH_FS_PUBLIC, NULL); ianjuta_symbol_query_set_mode (assist->priv->calltip_query_project, IANJUTA_SYMBOL_QUERY_MODE_ASYNC, NULL); g_signal_connect_object (assist->priv->calltip_query_project, "async-result", G_CALLBACK (on_calltip_search_complete), assist, 0); /* Calltip in system */ assist->priv->calltip_query_system = ianjuta_symbol_manager_create_query (isymbol_manager, IANJUTA_SYMBOL_QUERY_SEARCH, IANJUTA_SYMBOL_QUERY_DB_SYSTEM, NULL); ianjuta_symbol_query_set_fields (assist->priv->calltip_query_system, G_N_ELEMENTS (calltip_fields), calltip_fields, NULL); ianjuta_symbol_query_set_filters (assist->priv->calltip_query_system, IANJUTA_SYMBOL_TYPE_PROTOTYPE | IANJUTA_SYMBOL_TYPE_METHOD | IANJUTA_SYMBOL_TYPE_MACRO_WITH_ARG, TRUE, NULL); ianjuta_symbol_query_set_file_scope (assist->priv->calltip_query_system, IANJUTA_SYMBOL_QUERY_SEARCH_FS_PUBLIC, NULL); ianjuta_symbol_query_set_mode (assist->priv->calltip_query_system, IANJUTA_SYMBOL_QUERY_MODE_ASYNC, NULL); g_signal_connect_object (assist->priv->calltip_query_system, "async-result", G_CALLBACK (on_calltip_search_complete), assist, 0); /* Create autocomplete queries */ /* AC in file */ assist->priv->ac_query_file = ianjuta_symbol_manager_create_query (isymbol_manager, IANJUTA_SYMBOL_QUERY_SEARCH_FILE, IANJUTA_SYMBOL_QUERY_DB_PROJECT, NULL); ianjuta_symbol_query_set_group_by (assist->priv->ac_query_file, IANJUTA_SYMBOL_FIELD_NAME, NULL); ianjuta_symbol_query_set_fields (assist->priv->ac_query_file, G_N_ELEMENTS (ac_fields), ac_fields, NULL); ianjuta_symbol_query_set_file_scope (assist->priv->ac_query_file, IANJUTA_SYMBOL_QUERY_SEARCH_FS_PRIVATE, NULL); ianjuta_symbol_query_set_mode (assist->priv->ac_query_file, IANJUTA_SYMBOL_QUERY_MODE_ASYNC, NULL); g_signal_connect_object (assist->priv->ac_query_file, "async-result", G_CALLBACK (on_symbol_search_complete), assist, 0); /* AC in project */ assist->priv->ac_query_project = ianjuta_symbol_manager_create_query (isymbol_manager, IANJUTA_SYMBOL_QUERY_SEARCH, IANJUTA_SYMBOL_QUERY_DB_PROJECT, NULL); ianjuta_symbol_query_set_group_by (assist->priv->ac_query_project, IANJUTA_SYMBOL_FIELD_NAME, NULL); ianjuta_symbol_query_set_fields (assist->priv->ac_query_project, G_N_ELEMENTS (ac_fields), ac_fields, NULL); ianjuta_symbol_query_set_file_scope (assist->priv->ac_query_project, IANJUTA_SYMBOL_QUERY_SEARCH_FS_PUBLIC, NULL); ianjuta_symbol_query_set_mode (assist->priv->ac_query_project, IANJUTA_SYMBOL_QUERY_MODE_ASYNC, NULL); g_signal_connect_object (assist->priv->ac_query_project, "async-result", G_CALLBACK (on_symbol_search_complete), assist, 0); /* AC in system */ assist->priv->ac_query_system = ianjuta_symbol_manager_create_query (isymbol_manager, IANJUTA_SYMBOL_QUERY_SEARCH, IANJUTA_SYMBOL_QUERY_DB_SYSTEM, NULL); ianjuta_symbol_query_set_group_by (assist->priv->ac_query_system, IANJUTA_SYMBOL_FIELD_NAME, NULL); ianjuta_symbol_query_set_fields (assist->priv->ac_query_system, G_N_ELEMENTS (ac_fields), ac_fields, NULL); ianjuta_symbol_query_set_file_scope (assist->priv->ac_query_system, IANJUTA_SYMBOL_QUERY_SEARCH_FS_PUBLIC, NULL); ianjuta_symbol_query_set_mode (assist->priv->ac_query_system, IANJUTA_SYMBOL_QUERY_MODE_ASYNC, NULL); g_signal_connect_object (assist->priv->ac_query_system, "async-result", G_CALLBACK (on_symbol_search_complete), assist, 0); /* Members autocompletion */ assist->priv->query_members = ianjuta_symbol_manager_create_query (isymbol_manager, IANJUTA_SYMBOL_QUERY_SEARCH_MEMBERS, IANJUTA_SYMBOL_QUERY_DB_PROJECT, NULL); ianjuta_symbol_query_set_fields (assist->priv->query_members, G_N_ELEMENTS (ac_fields), ac_fields, NULL); /* Create sync queries */ /* Sync query in file */ assist->priv->sync_query_file = ianjuta_symbol_manager_create_query (isymbol_manager, IANJUTA_SYMBOL_QUERY_SEARCH_FILE, IANJUTA_SYMBOL_QUERY_DB_PROJECT, NULL); ianjuta_symbol_query_set_fields (assist->priv->sync_query_file, G_N_ELEMENTS (calltip_fields), calltip_fields, NULL); ianjuta_symbol_query_set_filters (assist->priv->sync_query_file, IANJUTA_SYMBOL_TYPE_PROTOTYPE | IANJUTA_SYMBOL_TYPE_FUNCTION | IANJUTA_SYMBOL_TYPE_METHOD | IANJUTA_SYMBOL_TYPE_MACRO_WITH_ARG, TRUE, NULL); ianjuta_symbol_query_set_file_scope (assist->priv->sync_query_file, IANJUTA_SYMBOL_QUERY_SEARCH_FS_PRIVATE, NULL); /* Sync query in project */ assist->priv->sync_query_project = ianjuta_symbol_manager_create_query (isymbol_manager, IANJUTA_SYMBOL_QUERY_SEARCH, IANJUTA_SYMBOL_QUERY_DB_PROJECT, NULL); ianjuta_symbol_query_set_fields (assist->priv->sync_query_project, G_N_ELEMENTS (calltip_fields), calltip_fields, NULL); ianjuta_symbol_query_set_filters (assist->priv->sync_query_project, IANJUTA_SYMBOL_TYPE_PROTOTYPE | IANJUTA_SYMBOL_TYPE_METHOD | IANJUTA_SYMBOL_TYPE_MACRO_WITH_ARG, TRUE, NULL); ianjuta_symbol_query_set_file_scope (assist->priv->sync_query_project, IANJUTA_SYMBOL_QUERY_SEARCH_FS_PUBLIC, NULL); /* Sync query in system */ assist->priv->sync_query_system = ianjuta_symbol_manager_create_query (isymbol_manager, IANJUTA_SYMBOL_QUERY_SEARCH, IANJUTA_SYMBOL_QUERY_DB_SYSTEM, NULL); ianjuta_symbol_query_set_fields (assist->priv->sync_query_system, G_N_ELEMENTS (calltip_fields), calltip_fields, NULL); ianjuta_symbol_query_set_filters (assist->priv->sync_query_system, IANJUTA_SYMBOL_TYPE_PROTOTYPE | IANJUTA_SYMBOL_TYPE_METHOD | IANJUTA_SYMBOL_TYPE_MACRO_WITH_ARG, TRUE, NULL); ianjuta_symbol_query_set_file_scope (assist->priv->sync_query_system, IANJUTA_SYMBOL_QUERY_SEARCH_FS_PUBLIC, NULL); /* Install support */ parser_cxx_assist_install (assist, ieditor); assist->priv->lang_prov = g_object_new (ANJUTA_TYPE_LANGUAGE_PROVIDER, NULL); anjuta_language_provider_install (assist->priv->lang_prov, ieditor, settings); engine_parser_init (isymbol_manager); return assist; }
static void install_support (PythonPlugin *lang_plugin) { IAnjutaLanguage* lang_manager = anjuta_shell_get_interface (ANJUTA_PLUGIN (lang_plugin)->shell, IAnjutaLanguage, NULL); IAnjutaSymbolManager* sym_manager = anjuta_shell_get_interface (ANJUTA_PLUGIN (lang_plugin)->shell, IAnjutaSymbolManager, NULL); IAnjutaDocumentManager* docman = anjuta_shell_get_interface (ANJUTA_PLUGIN (lang_plugin)->shell, IAnjutaDocumentManager, NULL); if (!lang_manager || !sym_manager || !docman) return; if (lang_plugin->support_installed) return; lang_plugin->current_language = ianjuta_language_get_name_from_editor (lang_manager, IANJUTA_EDITOR_LANGUAGE (lang_plugin->current_editor), NULL); if (lang_plugin->current_language && (g_str_equal (lang_plugin->current_language, "Python"))) { g_signal_connect (lang_plugin->current_editor, "char-added", G_CALLBACK (on_editor_char_inserted_python), lang_plugin); } else { return; } python_indent_init (lang_plugin); /* Disable editor intern auto-indent */ ianjuta_editor_set_auto_indent (IANJUTA_EDITOR(lang_plugin->current_editor), FALSE, NULL); if (IANJUTA_IS_EDITOR_ASSIST (lang_plugin->current_editor) ) { AnjutaPlugin *plugin; AnjutaUI *ui; IAnjutaEditorAssist* iassist; const gchar *project_root; gchar *editor_filename; check_support (lang_plugin); plugin = ANJUTA_PLUGIN (lang_plugin); ui = anjuta_shell_get_ui (plugin->shell, NULL); iassist = IANJUTA_EDITOR_ASSIST (lang_plugin->current_editor); g_assert (lang_plugin->assist == NULL); project_root = ANJUTA_PLUGIN_PYTHON(plugin)->project_root_directory; editor_filename = ANJUTA_PLUGIN_PYTHON(plugin)->current_editor_filename; lang_plugin->assist = python_assist_new (iassist, sym_manager, docman, lang_plugin->settings, editor_filename, project_root); } if (IANJUTA_IS_EDITOR_GLADE_SIGNAL (lang_plugin->current_editor)) { g_signal_connect (lang_plugin->current_editor, "drop-possible", G_CALLBACK (gtk_true), NULL); g_signal_connect (lang_plugin->current_editor, "drop", G_CALLBACK (on_glade_drop), lang_plugin); } lang_plugin->support_installed = TRUE; }