static gboolean activate_plugin (AnjutaPlugin *plugin) { static IAnjutaSymbolField query_fields[] = { IANJUTA_SYMBOL_FIELD_ID, IANJUTA_SYMBOL_FIELD_NAME, IANJUTA_SYMBOL_FIELD_KIND, IANJUTA_SYMBOL_FIELD_TYPE }; EditorPlugin* editor = ANJUTA_PLUGIN_EDITOR (plugin); IAnjutaSymbolManager *manager; IAnjutaSymbolQuery *query_project; IAnjutaSymbolQuery *query_system; AnjutaUI *ui; manager = anjuta_shell_get_interface (plugin->shell, IAnjutaSymbolManager, NULL); /* query project */ query_project = ianjuta_symbol_manager_create_query (manager, IANJUTA_SYMBOL_QUERY_SEARCH_ALL, IANJUTA_SYMBOL_QUERY_DB_PROJECT, NULL); ianjuta_symbol_query_set_fields (query_project, G_N_ELEMENTS (query_fields), query_fields, NULL); ianjuta_symbol_query_set_file_scope (query_project, IANJUTA_SYMBOL_QUERY_SEARCH_FS_IGNORE, NULL); ianjuta_symbol_query_set_mode (query_project, IANJUTA_SYMBOL_QUERY_MODE_QUEUED, NULL); ianjuta_symbol_query_set_filters (query_project, IANJUTA_SYMBOL_TYPE_CLASS | IANJUTA_SYMBOL_TYPE_ENUM | IANJUTA_SYMBOL_TYPE_STRUCT | IANJUTA_SYMBOL_TYPE_TYPEDEF | IANJUTA_SYMBOL_TYPE_UNION, TRUE, NULL); g_signal_connect (query_project, "async-result", G_CALLBACK (project_symbol_found), plugin->shell); /* query system */ query_system = ianjuta_symbol_manager_create_query (manager, IANJUTA_SYMBOL_QUERY_SEARCH_ALL, IANJUTA_SYMBOL_QUERY_DB_SYSTEM, NULL); ianjuta_symbol_query_set_fields (query_system, G_N_ELEMENTS (query_fields), query_fields, NULL); ianjuta_symbol_query_set_file_scope (query_system, IANJUTA_SYMBOL_QUERY_SEARCH_FS_IGNORE, NULL); ianjuta_symbol_query_set_mode (query_system, IANJUTA_SYMBOL_QUERY_MODE_QUEUED, NULL); ianjuta_symbol_query_set_filters (query_system, IANJUTA_SYMBOL_TYPE_CLASS | IANJUTA_SYMBOL_TYPE_ENUM | IANJUTA_SYMBOL_TYPE_STRUCT | IANJUTA_SYMBOL_TYPE_TYPEDEF | IANJUTA_SYMBOL_TYPE_UNION, TRUE, NULL); g_signal_connect (query_system, "async-result", G_CALLBACK (system_symbol_found), plugin->shell); /* Get notified when scan end, to update type list */ g_signal_connect (G_OBJECT (manager), "prj_scan_end", G_CALLBACK (on_project_symbol_scanned), query_project); g_signal_connect (G_OBJECT (manager), "sys_scan_end", G_CALLBACK (on_system_symbol_scanned), query_system); /* Initialize type list */ on_project_symbol_scanned (manager, 0, query_project); on_system_symbol_scanned (manager, 0, query_system); /* Keep queries to be able to unref them when needed */ editor->query_project = query_project; editor->query_system = query_system; /* Add menu entries */ ui = anjuta_shell_get_ui (plugin->shell, NULL); editor->group = anjuta_ui_add_toggle_action_group_entries (ui, "ActionGroupEditorView", _("Editor view settings"), actions_view, G_N_ELEMENTS (actions_view), GETTEXT_PACKAGE, TRUE, editor); ui_states_init (editor, ui); editor->uiid = anjuta_ui_merge (ui, UI_FILE); return TRUE; }
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; }
void cls_inherit_init (AnjutaClassInheritance *plugin) { GtkWidget *s_window; IAnjutaSymbolManager *sym_manager; static IAnjutaSymbolField query_fields_simple[] = { IANJUTA_SYMBOL_FIELD_ID, IANJUTA_SYMBOL_FIELD_NAME, }; static IAnjutaSymbolField query_fields[] = { IANJUTA_SYMBOL_FIELD_ID, IANJUTA_SYMBOL_FIELD_NAME, IANJUTA_SYMBOL_FIELD_RETURNTYPE, IANJUTA_SYMBOL_FIELD_SIGNATURE, IANJUTA_SYMBOL_FIELD_FILE_POS, IANJUTA_SYMBOL_FIELD_FILE_PATH, IANJUTA_SYMBOL_FIELD_ACCESS, IANJUTA_SYMBOL_FIELD_KIND, IANJUTA_SYMBOL_FIELD_TYPE, IANJUTA_SYMBOL_FIELD_TYPE_NAME }; /* Initialize graph layout engine */ cls_inherit_graph_init (plugin, _(DEFAULT_GRAPH_NAME)); s_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (s_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); plugin->canvas = foo_canvas_new (); foo_canvas_set_scroll_region (FOO_CANVAS (plugin->canvas), -CANVAS_MIN_SIZE/2, -CANVAS_MIN_SIZE/2, CANVAS_MIN_SIZE/2, CANVAS_MIN_SIZE/2); gtk_container_add (GTK_CONTAINER (s_window), plugin->canvas); /* Initialize styles */ gtk_widget_ensure_style (plugin->canvas); on_style_set (plugin->canvas, NULL, plugin); g_signal_connect (G_OBJECT (plugin->canvas), "event", G_CALLBACK (on_canvas_event), plugin); g_signal_connect (G_OBJECT (plugin->canvas), "style_set", G_CALLBACK (on_style_set), plugin); plugin->widget = gtk_vbox_new (FALSE, 2); /* --packing-- */ /* vbox */ gtk_box_pack_start (GTK_BOX (plugin->widget), s_window, TRUE, TRUE, TRUE); gtk_widget_show_all (plugin->widget); /* create new GList */ plugin->nodes = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)cls_node_free); /* menu create */ plugin->menu = gtk_menu_new (); GtkWidget *menu_item = gtk_menu_item_new_with_label (_("Update")); g_signal_connect (menu_item, "activate", (GCallback)on_update_menu_item_selected, plugin); /* set the user data on update selection */ gtk_menu_shell_append (GTK_MENU_SHELL (plugin->menu), menu_item); gtk_widget_show_all (plugin->menu); plugin->update = menu_item; g_object_ref (plugin->menu); g_object_ref (plugin->update); /* Create symbol queries */ sym_manager = anjuta_shell_get_interface (ANJUTA_PLUGIN (plugin)->shell, IAnjutaSymbolManager, NULL); plugin->query_project = ianjuta_symbol_manager_create_query (sym_manager, IANJUTA_SYMBOL_QUERY_SEARCH_ALL, IANJUTA_SYMBOL_QUERY_DB_PROJECT, NULL); g_signal_connect (plugin->query_project, "async-result", G_CALLBACK (on_cls_inherit_update), plugin); ianjuta_symbol_query_set_mode (plugin->query_project, IANJUTA_SYMBOL_QUERY_MODE_QUEUED, NULL); ianjuta_symbol_query_set_fields (plugin->query_project, sizeof (query_fields_simple)/sizeof (IAnjutaSymbolField), query_fields_simple, NULL); ianjuta_symbol_query_set_filters (plugin->query_project, IANJUTA_SYMBOL_TYPE_CLASS, TRUE, NULL); ianjuta_symbol_query_set_file_scope (plugin->query_project, IANJUTA_SYMBOL_QUERY_SEARCH_FS_PUBLIC, NULL); plugin->query_id = ianjuta_symbol_manager_create_query (sym_manager, IANJUTA_SYMBOL_QUERY_SEARCH_ID, IANJUTA_SYMBOL_QUERY_DB_PROJECT, NULL); ianjuta_symbol_query_set_fields (plugin->query_id, sizeof (query_fields_simple)/sizeof (IAnjutaSymbolField), query_fields_simple, NULL); plugin->query_members = ianjuta_symbol_manager_create_query (sym_manager, IANJUTA_SYMBOL_QUERY_SEARCH_MEMBERS, IANJUTA_SYMBOL_QUERY_DB_PROJECT, NULL); ianjuta_symbol_query_set_fields (plugin->query_members, sizeof (query_fields)/sizeof (IAnjutaSymbolField), query_fields, NULL); plugin->query_parents = ianjuta_symbol_manager_create_query (sym_manager, IANJUTA_SYMBOL_QUERY_SEARCH_CLASS_PARENTS, IANJUTA_SYMBOL_QUERY_DB_PROJECT, NULL); ianjuta_symbol_query_set_fields (plugin->query_parents, sizeof (query_fields_simple)/sizeof (IAnjutaSymbolField), query_fields_simple, NULL); }