Example #1
0
static gboolean
amp_package_node_load (AmpNode *node, AmpNode *parent, AmpProject *project, GError **error)
{
	GList* deps;
	GList* dep;
	GList* include_dirs = NULL;

	deps = anjuta_pkg_config_list_dependencies (anjuta_project_node_get_name (ANJUTA_PROJECT_NODE (node)),
	                                            error);
	for (dep = deps; dep != NULL; dep = g_list_next (dep))
	{
		/* Create a package node for the depedencies */
		AnjutaProjectNode *pkg;

		pkg = ANJUTA_PROJECT_NODE (amp_package_node_new (dep->data));
		anjuta_project_node_append (ANJUTA_PROJECT_NODE (node), pkg);
	}
	anjuta_util_glist_strings_free (deps);

	if (*error != NULL)
	{
		g_warning ("Error getting dependencies: %s", (*error)->message);
		g_error_free (*error);
		*error = NULL;
	}

	if ((include_dirs = anjuta_pkg_config_get_directories (anjuta_project_node_get_name (ANJUTA_PROJECT_NODE (node)),
	                                                       TRUE, error)))
	{
		GList* include_dir;

		for (include_dir = include_dirs; include_dir != NULL; include_dir = g_list_next (include_dir))
		{
			GList* children = NULL;
			GList* file = NULL;
			GFile* dir = g_file_new_for_path (include_dir->data);

			anjuta_util_list_all_dir_children (&children, dir);
			for (file = g_list_first (children); file != NULL; file = g_list_next (file))
			{
				/* Create a source for files */
				AnjutaProjectNode *source;

				source = amp_node_new_valid (ANJUTA_PROJECT_NODE (parent), ANJUTA_PROJECT_SOURCE, (GFile *)file->data, NULL, NULL);
				anjuta_project_node_append (ANJUTA_PROJECT_NODE (node), source);
				g_object_unref ((GObject *)file->data);
			}
			g_list_free (children);
			g_object_unref (dir);
		}
	}
	anjuta_util_glist_strings_free (include_dirs);

	return TRUE;
}
Example #2
0
static void
on_ok_action_activated (GtkAction *action, GitRemoveFilesPane *self)
{
	Git *plugin;
	AnjutaFileList *remove_file_list;
	GtkToggleAction *force_action;
	GList *paths;
	GitRemoveCommand *remove_command;

	plugin = ANJUTA_PLUGIN_GIT (anjuta_dock_pane_get_plugin (ANJUTA_DOCK_PANE (self)));
	remove_file_list = ANJUTA_FILE_LIST (gtk_builder_get_object (self->priv->builder,
	                                                  			 "remove_file_list"));
	force_action = GTK_TOGGLE_ACTION (gtk_builder_get_object (self->priv->builder,
	                                                          "force_action"));
	paths = anjuta_file_list_get_paths (remove_file_list);
	remove_command = git_remove_command_new_list (plugin->project_root_directory,
	                                              paths,
	                                              gtk_toggle_action_get_active (force_action));

	anjuta_util_glist_strings_free (paths);

	g_signal_connect (G_OBJECT (remove_command), "command-finished",
	                  G_CALLBACK (git_pane_report_errors),
	                  plugin);


	g_signal_connect (G_OBJECT (remove_command), "command-finished",
	                  G_CALLBACK (g_object_unref),
	                  NULL);

	anjuta_command_start (ANJUTA_COMMAND (remove_command));

	git_pane_remove_from_dock (GIT_PANE (self));
}
Example #3
0
static void
cpp_packages_activate_libc (CppPackages* packages)
{
	IAnjutaSymbolManager* sm =
		anjuta_shell_get_interface (anjuta_plugin_get_shell (ANJUTA_PLUGIN(packages->plugin)),
		                            IAnjutaSymbolManager, NULL);

	if (!ianjuta_symbol_manager_activate_package (sm, LIBC, LIBC_VERSION, NULL))
	{
		/* Create file list*/
		GList* files = NULL;
		const gchar** file;
		for (file = libc_files; *file != NULL; file++)
		{
			gchar* real_file = g_build_filename (LIBC_LOCATION, *file, NULL);
			if (g_file_test (real_file, G_FILE_TEST_EXISTS))
				files = g_list_append (files, real_file);
			else
				g_free (real_file);
		}

		/* Add package */
		ianjuta_symbol_manager_add_package (sm,
		                                    LIBC,
		                                    LIBC_VERSION,
		                                    files,
		                                    NULL);
		anjuta_util_glist_strings_free (files);
	}
}
Example #4
0
static void
on_ok_button_clicked (GtkButton *button, GitCheckoutPane *self)
{
	Git *plugin;
	GtkToggleButton *force_check;
	GList *paths;
	GitCheckoutFilesCommand *checkout_command;

	plugin = ANJUTA_PLUGIN_GIT (anjuta_dock_pane_get_plugin (ANJUTA_DOCK_PANE (self)));
	force_check = GTK_TOGGLE_BUTTON (gtk_builder_get_object (self->priv->builder,
	                                                         "force_check"));

	paths = git_status_pane_get_selected_not_updated_items (GIT_STATUS_PANE (plugin->status_pane),
	                                                        ANJUTA_VCS_STATUS_ALL);
	checkout_command = git_checkout_files_command_new (plugin->project_root_directory,
	                                                   paths,
	                                                   gtk_toggle_button_get_active (force_check));

	anjuta_util_glist_strings_free (paths);

	g_signal_connect (G_OBJECT (checkout_command), "command-finished",
	                  G_CALLBACK (git_pane_report_errors),
	                  plugin);

	g_signal_connect (G_OBJECT (checkout_command), "command-finished",
	                  G_CALLBACK (g_object_unref),
	                  NULL);

	anjuta_command_start (ANJUTA_COMMAND (checkout_command));

	git_pane_remove_from_dock (GIT_PANE (self));
	                            
}
void
subversion_ivcs_add (IAnjutaVcs *obj, GList *files, AnjutaAsyncNotify *notify,
					 GError **err)
{
	GList *path_list;
	SvnAddCommand *add_command;
	
	path_list = anjuta_util_convert_gfile_list_to_path_list (files);
	add_command = svn_add_command_new_list (path_list, FALSE, TRUE);
	
	anjuta_util_glist_strings_free (path_list);
	
	g_signal_connect (G_OBJECT (add_command), "command-finished", 
					  G_CALLBACK (g_object_unref), 
					  NULL);
	
	if (notify)
	{
		g_signal_connect_swapped (G_OBJECT (add_command), "command-finished",
								  G_CALLBACK (anjuta_async_notify_notify_finished),
								  notify);
	}
	
	anjuta_command_start (ANJUTA_COMMAND (add_command));
	
}
Example #6
0
void
git_ivcs_add (IAnjutaVcs *obj, GList *files, AnjutaAsyncNotify *notify,
			  GError **err)
{
	gchar *project_root_directory;
	GList *path_list;
	GitAddCommand *add_command;
	
	project_root_directory = ANJUTA_PLUGIN_GIT (obj)->project_root_directory;
	
	if (project_root_directory)
	{
		path_list = anjuta_util_convert_gfile_list_to_relative_path_list (files,
		                                                                  project_root_directory);
		add_command = git_add_command_new_list (project_root_directory,
		                                        path_list, FALSE);
		
		anjuta_util_glist_strings_free (path_list);
		
		g_signal_connect (G_OBJECT (add_command), "command-finished", 
		                  G_CALLBACK (g_object_unref), 
		                  NULL);
		
		if (notify)
		{
			g_signal_connect_swapped (G_OBJECT (add_command), "command-finished",
			                          G_CALLBACK (anjuta_async_notify_notify_finished),
			                          notify);
		}
		
		anjuta_command_start (ANJUTA_COMMAND (add_command));
	}
	
}
Example #7
0
void
on_unstage_button_clicked (GtkAction *action, Git *plugin)
{
	GList *paths;
	GitResetFilesCommand *reset_command;

	paths = git_status_pane_get_checked_commit_items (GIT_STATUS_PANE (plugin->status_pane),
	                                                  ANJUTA_VCS_STATUS_ALL);

	if (paths)
	{
		reset_command = git_reset_files_command_new (plugin->project_root_directory,
		                                             GIT_RESET_FILES_HEAD,
		                                             paths);

		anjuta_util_glist_strings_free (paths);

		g_signal_connect (G_OBJECT (reset_command), "command-finished",
		                  G_CALLBACK (git_pane_report_errors),
		                  plugin);


		g_signal_connect (G_OBJECT (reset_command), "command-finished",
		                  G_CALLBACK (g_object_unref),
		                  NULL);

		anjuta_command_start (ANJUTA_COMMAND (reset_command));
	}
	else
		anjuta_util_dialog_error (NULL, _("No staged files selected."));
}
Example #8
0
void
on_git_status_unstage_activated (GtkAction *action, Git *plugin)
{
	gchar *path;
	GList *paths;
	GitResetFilesCommand *reset_command;

	path = git_status_pane_get_selected_commit_path (GIT_STATUS_PANE (plugin->status_pane));

	if (path)
	{
		paths = g_list_append (NULL, path);

		reset_command = git_reset_files_command_new (plugin->project_root_directory,
		                                             GIT_RESET_FILES_HEAD,
		                                             paths);

		g_signal_connect (G_OBJECT (reset_command), "command-finished",
		                  G_CALLBACK (git_pane_report_errors),
		                  plugin);

		g_signal_connect (G_OBJECT (reset_command), "command-finished",
		                  G_CALLBACK (g_object_unref),
		                  NULL);

		anjuta_util_glist_strings_free (paths);

		anjuta_command_start (ANJUTA_COMMAND (reset_command));
	}
}
static void
git_branch_delete_command_finalize (GObject *object)
{
	GitBranchDeleteCommand *self;
	
	self = GIT_BRANCH_DELETE_COMMAND (object);
	
	anjuta_util_glist_strings_free (self->priv->branches);
	g_free (self->priv);

	G_OBJECT_CLASS (git_branch_delete_command_parent_class)->finalize (object);
}
static void
git_apply_mailbox_command_finalize (GObject *object)
{
    GitApplyMailboxCommand *self;

    self = GIT_APPLY_MAILBOX_COMMAND (object);

    anjuta_util_glist_strings_free (self->priv->mailbox_paths);
    g_free (self->priv);

    G_OBJECT_CLASS (git_apply_mailbox_command_parent_class)->finalize (object);
}
Example #11
0
static void
git_add_command_finalize (GObject *object)
{
	GitAddCommand *self;
	
	self = GIT_ADD_COMMAND (object);
	
	anjuta_util_glist_strings_free (self->priv->paths);
	g_free (self->priv);

	G_OBJECT_CLASS (git_add_command_parent_class)->finalize (object);
}
Example #12
0
static void
git_reset_files_command_finalize (GObject *object)
{
	GitResetFilesCommand *self;
	
	self = GIT_RESET_FILES_COMMAND (object);
	
	anjuta_util_glist_strings_free (self->priv->paths);
	g_free (self->priv->revision);
	g_free (self->priv);

	G_OBJECT_CLASS (git_reset_files_command_parent_class)->finalize (object);
}
Example #13
0
static GList*
cpp_packages_activate_package (IAnjutaSymbolManager* sm, const gchar* pkg,
                               GList** packages_to_add)
{
	gchar* name = g_strdup (pkg);
	gchar* version;
	gchar* c;

	/* Clean package name */
	for (c = name; *c != '\0'; c++)
	{
		if (g_ascii_isspace (*c))
		{
			*c = '\0';
			break;
		}
	}

	version = anjuta_pkg_config_get_version (name);
	if (!version)
	{
		g_free (name);
		return *packages_to_add;
	}
	
	/* Only query each package once */
	if (g_list_find_custom (*packages_to_add,
	                        name, (GCompareFunc) pkg_data_compare))
		return *packages_to_add;
	if (!ianjuta_symbol_manager_activate_package (sm, name, version, NULL))
	{
		GList* deps = anjuta_pkg_config_list_dependencies (name, NULL);
		GList* dep;
		PackageData* data = g_new0 (PackageData, 1);
		for (dep = deps; dep != NULL; dep = g_list_next (dep))
		{
			cpp_packages_activate_package (sm, dep->data, packages_to_add);
		}
		anjuta_util_glist_strings_free (deps);
		data->pkg = g_strdup (name);
		data->version = g_strdup (version);
		*packages_to_add = g_list_prepend (*packages_to_add,
		                                   data);
	}
	g_free (name);
	return *packages_to_add;
}
Example #14
0
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;
}
Example #15
0
static void
on_install_button_clicked (GtkWidget *button, NPWDruid *druid)
{
	GList *missing_programs, *missing_packages;
	GList *missing_files = NULL;
	GList *node;


	missing_programs = npw_header_check_required_programs (druid->header);
	missing_packages = npw_header_check_required_packages (druid->header);

	anjuta_util_glist_strings_prefix (missing_programs, "/usr/bin/");

	/* Search for "pkgconfig(pkg_name)" */
	g_list_foreach (missing_packages, (GFunc) strip_package_version_info,
					NULL);
	missing_files = g_list_concat (missing_files, missing_programs);

	for (node = missing_packages; node != NULL; node = g_list_next (missing_packages))
	{
		gchar* pk_pkg_config_string = g_strdup_printf ("pkgconfig(%s)", (gchar*) node->data);
		missing_files = g_list_append (missing_files, pk_pkg_config_string);
	}
	g_list_free (missing_packages);

	if (missing_files)
	{
		gchar * missing_names = NULL;

		missing_names = anjuta_util_glist_strings_join (missing_files, ", ");
		anjuta_util_install_files (missing_names);

		if (missing_names)
			g_free (missing_names);
		anjuta_util_glist_strings_free (missing_files);
	}
}
static void
on_ok_action_activated (GtkAction *action, GitDeleteBranchesPane *self)
{
	Git *plugin;
	GtkToggleButton *require_merged_check;
	GList *selected_local_branches;
	GList *selected_remote_branches;
	GitBranchDeleteCommand *local_delete_command;
	GitBranchDeleteCommand *remote_delete_command;
	AnjutaCommandQueue *queue;

	plugin = ANJUTA_PLUGIN_GIT (anjuta_dock_pane_get_plugin (ANJUTA_DOCK_PANE (self)));
	require_merged_check = GTK_TOGGLE_BUTTON (gtk_builder_get_object (self->priv->builder,
	                                                                  "require_merged_check"));
	selected_local_branches = git_branches_pane_get_selected_local_branches (GIT_BRANCHES_PANE (plugin->branches_pane));
	selected_remote_branches = git_branches_pane_get_selected_remote_branches (GIT_BRANCHES_PANE (plugin->branches_pane));

	/* The user might not have selected anything */
	if (git_branches_pane_count_selected_items (GIT_BRANCHES_PANE (plugin->branches_pane)) > 0)
	{
		queue = anjuta_command_queue_new (ANJUTA_COMMAND_QUEUE_EXECUTE_MANUAL);
		
		if (selected_local_branches)
		{
			local_delete_command = git_branch_delete_command_new (plugin->project_root_directory,
			                                                      selected_local_branches,
			                                                      FALSE,
			                                                      gtk_toggle_button_get_active (require_merged_check));

			anjuta_util_glist_strings_free (selected_local_branches);

			g_signal_connect (G_OBJECT (local_delete_command), 
			                  "command-finished",
			                  G_CALLBACK (git_pane_report_errors),
			                  plugin);
			

			g_signal_connect (G_OBJECT (local_delete_command), 
			                  "command-finished",
			                  G_CALLBACK (g_object_unref),
			                  NULL);

			anjuta_command_queue_push (queue, 
			                           ANJUTA_COMMAND (local_delete_command));
		}

		if (selected_remote_branches)
		{
			remote_delete_command = git_branch_delete_command_new (plugin->project_root_directory,
			                                                       selected_remote_branches,
			                                                       TRUE,
			                                                       gtk_toggle_button_get_active (require_merged_check));

			anjuta_util_glist_strings_free (selected_remote_branches);

			g_signal_connect (G_OBJECT (remote_delete_command), 
			                  "command-finished",
			                  G_CALLBACK (git_pane_report_errors),
			                  plugin);


			g_signal_connect (G_OBJECT (remote_delete_command), "command-finished",
			                  G_CALLBACK (g_object_unref),
			                  NULL);
			
			anjuta_command_queue_push (queue, 
			                           ANJUTA_COMMAND (remote_delete_command));
		}

		/* Run the commands */
		g_signal_connect (G_OBJECT (queue), "finished",
		                  G_CALLBACK (g_object_unref),
		                  NULL);

		anjuta_command_queue_start (queue);
	}


	git_pane_remove_from_dock (GIT_PANE (self));
	                            
}
Example #17
0
static void
on_status_view_drag_data_received (GtkWidget *widget,
                            	   GdkDragContext *context, gint x, gint y,
                                   GtkSelectionData *data, guint target_type,
                                   guint time, GitStatusPane *self)
{
	Git *plugin;
	gboolean success;
	gchar **uri_list;
	int i;
	GFile *file;
	gchar *path;
	GList *paths;
	GitAddCommand *add_command;

	plugin = ANJUTA_PLUGIN_GIT (anjuta_dock_pane_get_plugin (ANJUTA_DOCK_PANE (self)));
	success = FALSE;
	path = NULL;
	paths = NULL;

	if ((data != NULL) && 
	    (gtk_selection_data_get_length (data) >= 0))
	{
		if (target_type == 0)
		{
			uri_list = gtk_selection_data_get_uris (data);

			for (i = 0; uri_list[i]; i++)
			{
				file = g_file_new_for_uri (uri_list[i]);
				path = g_file_get_path (file);

				if (path && !g_file_test (path, G_FILE_TEST_IS_DIR))
				{
					paths = g_list_append (paths, 
					                       g_strdup (path +
					                                 strlen (plugin->project_root_directory) + 1));
				}

				g_free (path);
				g_object_unref (file);
			}


			add_command = git_add_command_new_list (plugin->project_root_directory,
			                                        paths, FALSE);

			g_signal_connect (G_OBJECT (add_command), "command-finished",
			                  G_CALLBACK (g_object_unref),
			                  NULL);

			anjuta_command_start (ANJUTA_COMMAND (add_command));
			success = TRUE;

			anjuta_util_glist_strings_free (paths);
			g_strfreev (uri_list);
		}
	}

	/* Do not delete source data */
	gtk_drag_finish (context, success, FALSE, time);
}
Example #18
0
static void
on_ok_action_activated (GtkAction *action, GitPushPane *self)
{
    Git *plugin;
    GtkTreeModel *push_branch_model;
    GtkTreeModel *push_tag_model;
    GtkToggleButton *push_all_tags_check;
    GtkToggleButton *push_all_check;
    GtkToggleAction *force_action;
    GList *selected_items;
    gboolean push_all_tags;
    gboolean push_all;
    gchar *repository;
    GitPushCommand *push_command;

    plugin = ANJUTA_PLUGIN_GIT (anjuta_dock_pane_get_plugin (ANJUTA_DOCK_PANE (self)));
    push_branch_model = GTK_TREE_MODEL (gtk_builder_get_object (self->priv->builder,
                                        "push_branch_model"));
    push_tag_model = GTK_TREE_MODEL (gtk_builder_get_object (self->priv->builder,
                                     "push_tag_model"));
    push_all_tags_check = GTK_TOGGLE_BUTTON (gtk_builder_get_object (self->priv->builder,
                          "push_all_tags_check"));
    push_all_check = GTK_TOGGLE_BUTTON (gtk_builder_get_object (self->priv->builder,
                                        "push_all_check"));
    force_action = GTK_TOGGLE_ACTION (gtk_builder_get_object (self->priv->builder,
                                      "force_action"));
    selected_items = NULL;
    push_all_tags = gtk_toggle_button_get_active (push_all_tags_check);
    push_all = gtk_toggle_button_get_active (push_all_check);

    /* Check that the user has given a valid repository. In this case we only
     * care about checking if the selector widget is in URL mode, because even
     * if a remote isn't selected, it will default to origin, so we should
     * always get something when the selector is in Remote mode. */
    repository = git_repository_selector_get_repository (GIT_REPOSITORY_SELECTOR (self->priv->repository_selector));

    if (!git_pane_check_input (GTK_WIDGET (ANJUTA_PLUGIN (plugin)->shell),
                               self->priv->repository_selector, repository,
                               _("Please enter a URL.")))
    {
        g_free (repository);
        return;
    }

    if (!push_all)
    {
        /* Get selected branches */
        gtk_tree_model_foreach (push_branch_model,
                                (GtkTreeModelForeachFunc) get_selected_items,
                                &selected_items);
    }

    /* Don't bother getting selected tags if Push all tags is checked or if
     * Push all branches and tags is checked */
    if (!push_all && !push_all_tags)
    {
        /* Get selected tags */
        gtk_tree_model_foreach (push_tag_model,
                                (GtkTreeModelForeachFunc) get_selected_items,
                                &selected_items);
    }

    push_command = git_push_command_new (plugin->project_root_directory,
                                         repository, selected_items,
                                         push_all, push_all_tags,
                                         gtk_toggle_action_get_active (force_action));

    g_free (repository);
    anjuta_util_glist_strings_free (selected_items);

    git_pane_create_message_view (plugin);

    g_signal_connect (G_OBJECT (push_command), "data-arrived",
                      G_CALLBACK (git_pane_on_command_info_arrived),
                      plugin);

    g_signal_connect (G_OBJECT (push_command), "command-finished",
                      G_CALLBACK (git_pane_report_errors),
                      plugin);

    g_signal_connect (G_OBJECT (push_command), "command-finished",
                      G_CALLBACK (git_plugin_status_changed_emit),
                      plugin);

    g_signal_connect (G_OBJECT (push_command), "command-finished",
                      G_CALLBACK (g_object_unref),
                      NULL);

    anjuta_command_start (ANJUTA_COMMAND (push_command));

    git_pane_remove_from_dock (GIT_PANE (self));
}
Example #19
0
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);
}
Example #20
0
static gboolean
check_and_warn_missing (NPWDruid *druid)
{
	GList *missing_programs, *missing_packages;
	GString *missing_message = NULL;

	missing_programs = npw_header_check_required_programs (druid->header);
	missing_packages = npw_header_check_required_packages (druid->header);

	if (missing_programs || missing_packages)
	{
		missing_message = g_string_new (NULL);
	}

	if (missing_programs)
	{
		gchar *missing_progs;
		missing_progs = anjuta_util_glist_strings_join (missing_programs,
														", ");
		g_string_append_printf (missing_message,
								_("\nMissing programs: %s."), missing_progs);
		g_free (missing_progs);
		anjuta_util_glist_strings_free (missing_programs);
	}

	if (missing_packages)
	{
		gchar *missing_pkgs;
		missing_pkgs = anjuta_util_glist_strings_join (missing_packages,
													   ", ");
		g_string_append_printf (missing_message,
								_("\nMissing packages: %s."), missing_pkgs);
		g_free (missing_pkgs);
		anjuta_util_glist_strings_free (missing_packages);
	}

	if (missing_message)
	{
		GtkWidget *hbox, *install_button;
		g_string_prepend (missing_message, _(
		 "Some important programs or development packages required to build "
		 "this project are missing. Please make sure they are "
		 "installed properly before generating the project.\n"));

		hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
		gtk_widget_show (hbox);

#ifdef ENABLE_PACKAGEKIT
		install_button =
			gtk_button_new_with_label (_("Install missing packages"));
		gtk_box_pack_end (GTK_BOX (hbox), install_button, FALSE, FALSE, 10);
		g_signal_connect (install_button, "clicked",
						  G_CALLBACK (on_install_button_clicked), druid);
		gtk_widget_show (install_button);
#endif

		npw_druid_fill_error_page (druid, hbox,
								   GTK_MESSAGE_WARNING,
								   /* Translators: Application Manager is the program used to install
								    * new application like apt on Ubuntu, yum on Fedora, zypper on
								    * OpenSuSE and emerge on Gentoo */
								  _("The missing programs are usually part of some distribution "
									"packages and can be searched for in your Application Manager. "
									"Similarly, the development packages are contained in special "
									"packages that your distribution provides to allow development "
									"of projects based on them. They usually end with a \"-dev\" or "
									"\"-devel\" suffix in package names and can be found by searching "
									"in your Application Manager."),
									"<b>%s</b>\n\n%s",
									_("Missing components"),
									missing_message->str);
		g_string_free (missing_message, TRUE);
	}

	return !missing_message;
}