[anjuta] pm: Reorganize link between GbfTreeData and AnjutaProjectNode
- From: Sebastien Granjoux <sgranjoux src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [anjuta] pm: Reorganize link between GbfTreeData and AnjutaProjectNode
- Date: Wed, 13 Jan 2010 20:03:11 +0000 (UTC)
commit 4fa366974cde3c1d7fb239e5a8128c2200ce4a1e
Author: Sébastien Granjoux <seb sfo free fr>
Date: Wed Jan 13 19:55:35 2010 +0100
pm: Reorganize link between GbfTreeData and AnjutaProjectNode
plugins/project-manager/gbf-project-model.c | 24 ++--
plugins/project-manager/gbf-project-model.h | 5 +-
plugins/project-manager/gbf-project-util.c | 28 ++---
plugins/project-manager/gbf-project-util.h | 8 +-
plugins/project-manager/gbf-project-view.c | 6 +-
plugins/project-manager/gbf-project-view.h | 12 +-
plugins/project-manager/gbf-tree-data.c | 125 +++++++++++++++++++++++
plugins/project-manager/gbf-tree-data.h | 24 +++--
plugins/project-manager/plugin.c | 145 +++++++++++++++-----------
9 files changed, 262 insertions(+), 115 deletions(-)
---
diff --git a/plugins/project-manager/gbf-project-model.c b/plugins/project-manager/gbf-project-model.c
index 474c3b8..7723311 100644
--- a/plugins/project-manager/gbf-project-model.c
+++ b/plugins/project-manager/gbf-project-model.c
@@ -292,7 +292,7 @@ gbf_project_model_remove (GbfProjectModel *model, GtkTreeIter *iter)
valid = gbf_project_model_remove (model, &child);
}
- gtk_tree_model_get (model, iter,
+ gtk_tree_model_get (GTK_TREE_MODEL (model), iter,
GBF_PROJECT_MODEL_COLUMN_DATA, &data,
-1);
valid = gtk_tree_store_remove (GTK_TREE_STORE (model), iter);
@@ -306,7 +306,6 @@ static void
gbf_project_model_clear (GbfProjectModel *model)
{
GtkTreeIter child;
- GbfTreeData *data;
gboolean valid;
valid = gtk_tree_model_iter_children (GTK_TREE_MODEL (model), &child, NULL);
@@ -712,9 +711,9 @@ unload_project (GbfProjectModel *model)
}
static gboolean
-recursive_find_id (GtkTreeModel *model,
- GtkTreeIter *iter,
- GbfTreeData *data)
+recursive_find_tree_data (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ GbfTreeData *data)
{
GtkTreeIter tmp;
gboolean retval = FALSE;
@@ -727,13 +726,14 @@ recursive_find_id (GtkTreeModel *model,
gtk_tree_model_get (model, &tmp,
GBF_PROJECT_MODEL_COLUMN_DATA, &tmp_data, -1);
- if (tmp_data == data) {
+ if (gbf_tree_data_equal (tmp_data, data))
+ {
*iter = tmp;
retval = TRUE;
}
if (gtk_tree_model_iter_children (model, &child, &tmp)) {
- if (recursive_find_id (model, &child, data)) {
+ if (recursive_find_tree_data (model, &child, data)) {
*iter = child;
retval = TRUE;
}
@@ -745,9 +745,9 @@ recursive_find_id (GtkTreeModel *model,
}
gboolean
-gbf_project_model_find_id (GbfProjectModel *model,
- GtkTreeIter *iter,
- GbfTreeData *data)
+gbf_project_model_find_tree_data (GbfProjectModel *model,
+ GtkTreeIter *iter,
+ GbfTreeData *data)
{
GtkTreePath *root;
GtkTreeIter tmp_iter;
@@ -758,7 +758,7 @@ gbf_project_model_find_id (GbfProjectModel *model,
return FALSE;
if (gtk_tree_model_get_iter (GTK_TREE_MODEL (model), &tmp_iter, root)) {
- if (recursive_find_id (GTK_TREE_MODEL (model), &tmp_iter, data)) {
+ if (recursive_find_tree_data (GTK_TREE_MODEL (model), &tmp_iter, data)) {
retval = TRUE;
*iter = tmp_iter;
}
@@ -871,7 +871,7 @@ recursive_find_source (GtkTreeModel *model,
return NULL;
}
-GbfTreeData*
+static GbfTreeData*
gbf_project_model_find_uri (GbfProjectModel *model,
const gchar *uri,
GbfTreeNodeType type)
diff --git a/plugins/project-manager/gbf-project-model.h b/plugins/project-manager/gbf-project-model.h
index aa73dda..77a5017 100644
--- a/plugins/project-manager/gbf-project-model.h
+++ b/plugins/project-manager/gbf-project-model.h
@@ -61,12 +61,9 @@ void gbf_project_model_set_project (GbfProjectModel *model,
IAnjutaProject *gbf_project_model_get_project (GbfProjectModel *model);
GtkTreePath *gbf_project_model_get_project_root (GbfProjectModel *model);
-gboolean gbf_project_model_find_id (GbfProjectModel *model,
+gboolean gbf_project_model_find_tree_data (GbfProjectModel *model,
GtkTreeIter *iter,
GbfTreeData *data);
-GbfTreeData *gbf_project_model_find_uri (GbfProjectModel *model,
- const gchar *uri,
- GbfTreeNodeType type);
AnjutaProjectNode *gbf_project_model_get_node (GbfProjectModel *model,
GtkTreeIter *iter);
diff --git a/plugins/project-manager/gbf-project-util.c b/plugins/project-manager/gbf-project-util.c
index 88d37ea..4c7ac62 100644
--- a/plugins/project-manager/gbf-project-util.c
+++ b/plugins/project-manager/gbf-project-util.c
@@ -77,11 +77,10 @@ groups_filter_fn (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
static void
setup_groups_treeview (GbfProjectModel *model,
GtkWidget *view,
- GbfTreeData *select_group)
+ GtkTreeIter *select_group)
{
GtkTreeModel *filter;
GtkTreePath *path;
- GtkTreeIter iter;
g_return_if_fail (model != NULL);
g_return_if_fail (view != NULL && GBF_IS_PROJECT_VIEW (view));
@@ -93,11 +92,11 @@ setup_groups_treeview (GbfProjectModel *model,
g_object_unref (filter);
/* select default group */
- if (select_group && gbf_project_model_find_id (model, &iter, select_group)) {
+ if (select_group) {
GtkTreeIter iter_filter;
gtk_tree_model_filter_convert_child_iter_to_iter (
- GTK_TREE_MODEL_FILTER (filter), &iter_filter, &iter);
+ GTK_TREE_MODEL_FILTER (filter), &iter_filter, select_group);
path = gtk_tree_model_get_path (filter, &iter_filter);
gtk_tree_view_expand_to_path (GTK_TREE_VIEW (view), path);
} else {
@@ -164,7 +163,7 @@ entry_changed_cb (GtkEditable *editable, gpointer user_data)
AnjutaProjectGroup*
gbf_project_util_new_group (GbfProjectModel *model,
GtkWindow *parent,
- GbfTreeData *default_group,
+ GtkTreeIter *default_group,
const gchar *default_group_name_to_add)
{
GtkBuilder *gui;
@@ -304,7 +303,7 @@ build_types_store (IAnjutaProject *project)
AnjutaProjectTarget*
gbf_project_util_new_target (GbfProjectModel *model,
GtkWindow *parent,
- GbfTreeData *default_group,
+ GtkTreeIter *default_group,
const gchar *default_target_name_to_add)
{
GtkBuilder *gui;
@@ -451,10 +450,10 @@ targets_filter_fn (GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
static void
setup_targets_treeview (GbfProjectModel *model,
GtkWidget *view,
- GbfTreeData *select_target)
+ GtkTreeIter *select_target)
{
GtkTreeModel *filter;
- GtkTreeIter iter, iter_filter;
+ GtkTreeIter iter_filter;
GtkTreePath *path = NULL;
g_return_if_fail (model != NULL);
@@ -468,12 +467,9 @@ setup_targets_treeview (GbfProjectModel *model,
/* select default target */
if (select_target) {
- if (gbf_project_model_find_id (model, &iter, select_target))
- {
- gtk_tree_model_filter_convert_child_iter_to_iter (
- GTK_TREE_MODEL_FILTER (filter), &iter_filter, &iter);
- path = gtk_tree_model_get_path (filter, &iter_filter);
- }
+ gtk_tree_model_filter_convert_child_iter_to_iter (
+ GTK_TREE_MODEL_FILTER (filter), &iter_filter, select_target);
+ path = gtk_tree_model_get_path (filter, &iter_filter);
}
if (path)
{
@@ -573,7 +569,7 @@ on_row_changed(GtkTreeModel* model, GtkTreePath* path, GtkTreeIter* iter, gpoint
AnjutaProjectSource*
gbf_project_util_add_source (GbfProjectModel *model,
GtkWindow *parent,
- GbfTreeData *default_target,
+ GtkTreeIter *default_target,
const gchar *default_uri)
{
GList* new_sources;
@@ -603,7 +599,7 @@ gbf_project_util_add_source (GbfProjectModel *model,
GList*
gbf_project_util_add_source_multi (GbfProjectModel *model,
GtkWindow *parent,
- GbfTreeData *default_target,
+ GtkTreeIter *default_target,
GList *uris_to_add)
{
GtkBuilder *gui;
diff --git a/plugins/project-manager/gbf-project-util.h b/plugins/project-manager/gbf-project-util.h
index 26024d5..d1250f7 100644
--- a/plugins/project-manager/gbf-project-util.h
+++ b/plugins/project-manager/gbf-project-util.h
@@ -32,22 +32,22 @@ G_BEGIN_DECLS
AnjutaProjectGroup* gbf_project_util_new_group (GbfProjectModel *model,
GtkWindow *parent,
- GbfTreeData *default_group,
+ GtkTreeIter *default_group,
const gchar *default_group_name_to_add);
AnjutaProjectTarget* gbf_project_util_new_target (GbfProjectModel *model,
GtkWindow *parent,
- GbfTreeData *default_group,
+ GtkTreeIter *default_group,
const gchar *default_target_name_to_add);
AnjutaProjectSource* gbf_project_util_add_source (GbfProjectModel *model,
GtkWindow *parent,
- GbfTreeData *default_target,
+ GtkTreeIter *default_target,
const gchar *default_uri_to_add);
GList* gbf_project_util_add_source_multi (GbfProjectModel *model,
GtkWindow *parent,
- GbfTreeData *default_target,
+ GtkTreeIter *default_target,
GList *uris_to_add);
GList * gbf_project_util_all_child (AnjutaProjectNode *parent,
diff --git a/plugins/project-manager/gbf-project-view.c b/plugins/project-manager/gbf-project-view.c
index 130f1d4..971436c 100644
--- a/plugins/project-manager/gbf-project-view.c
+++ b/plugins/project-manager/gbf-project-view.c
@@ -406,7 +406,7 @@ gbf_project_view_find_selected (GbfProjectView *view, AnjutaProjectNodeType type
}
GbfTreeData *
-gbf_project_view_get_selected (GbfProjectView *view)
+gbf_project_view_get_selected (GbfProjectView *view, GtkTreeIter* selected)
{
GtkTreeSelection *selection;
GtkTreeModel *model;
@@ -424,8 +424,9 @@ gbf_project_view_get_selected (GbfProjectView *view)
GtkTreeIter child_iter;
gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model), &child_iter, &iter);
- iter = child_iter;
+ iter = child_iter;
}
+ if (selected) *selected = iter;
gtk_tree_model_get (GTK_TREE_MODEL (model), &iter,
@@ -435,4 +436,3 @@ gbf_project_view_get_selected (GbfProjectView *view)
return data;
}
-
diff --git a/plugins/project-manager/gbf-project-view.h b/plugins/project-manager/gbf-project-view.h
index 8909624..f93034e 100644
--- a/plugins/project-manager/gbf-project-view.h
+++ b/plugins/project-manager/gbf-project-view.h
@@ -58,13 +58,13 @@ struct _GbfProjectViewClass {
AnjutaProjectGroup *group);
};
-GType gbf_project_view_get_type (void);
-GtkWidget *gbf_project_view_new (void);
-
-AnjutaProjectNode *gbf_project_view_find_selected (GbfProjectView *view,
- AnjutaProjectNodeType type);
-GbfTreeData *gbf_project_view_get_selected (GbfProjectView *view);
+GType gbf_project_view_get_type (void);
+GtkWidget *gbf_project_view_new (void);
+AnjutaProjectNode *gbf_project_view_find_selected (GbfProjectView *view,
+ AnjutaProjectNodeType type);
+GbfTreeData *gbf_project_view_get_selected (GbfProjectView *view,
+ GtkTreeIter *selected);
G_END_DECLS
diff --git a/plugins/project-manager/gbf-tree-data.c b/plugins/project-manager/gbf-tree-data.c
index 36465fe..70218d0 100644
--- a/plugins/project-manager/gbf-tree-data.c
+++ b/plugins/project-manager/gbf-tree-data.c
@@ -26,6 +26,8 @@
#include <gio/gio.h>
#include "gbf-tree-data.h"
+#include <string.h>
+
/**
* The GbfTreeData object store all data needed by each element of the project
* tree view. It has the same role than AnjutaProjectNode in the project
@@ -109,6 +111,129 @@ gbf_tree_data_get_uri (GbfTreeData *data)
return NULL;
}
+gboolean
+gbf_tree_data_equal (GbfTreeData *data_a, GbfTreeData *data_b)
+{
+ gboolean equal;
+
+ equal = data_a == data_b;
+ if ((data_a != NULL) && (data_b != NULL))
+ {
+ equal = data_a->type == data_b->type;
+ if (equal)
+ {
+ if ((data_a->group != NULL) && (data_b->group != NULL))
+ {
+ equal = g_file_equal (data_a->group, data_b->group);
+ }
+
+ if (equal)
+ {
+ if ((data_a->target != NULL) && (data_b->target != NULL))
+ {
+ equal = strcmp (data_a->target, data_b->target) == 0;
+ }
+
+ if (equal)
+ {
+ if ((data_a->source != NULL) && (data_b->source != NULL))
+ {
+ equal = g_file_equal (data_a->source, data_b->source);
+ }
+ }
+ }
+ }
+ else
+ {
+ if (data_b->type == GBF_TREE_NODE_UNKNOWN)
+ {
+ GbfTreeNodeType type = data_a->type;
+
+ data_a->type = data_b->type;
+ data_b->type = type;
+ }
+
+ equal = data_a->type == GBF_TREE_NODE_UNKNOWN;
+ if (equal)
+ {
+ if (data_b->source != NULL)
+ {
+ equal = g_file_equal (data_a->group, data_b->source);
+ }
+ else if (data_b->target != NULL)
+ {
+ gchar *name;
+
+ name = g_file_get_basename (data_a->group);
+ equal = strcmp (name, data_b->target) == 0;
+ g_free (name);
+ }
+ else if (data_b->group != NULL)
+ {
+ equal = g_file_equal (data_a->group, data_b->group);
+ }
+ }
+ }
+ }
+
+ return equal;
+}
+
+GbfTreeData *
+gbf_tree_data_new_for_uri (const gchar *uri, GbfTreeNodeType type)
+{
+ GbfTreeData *data = g_slice_new0 (GbfTreeData);
+ GFileInfo *ginfo;
+ GFile *file;
+
+ data->type = type;
+
+ file = g_file_new_for_uri (uri);
+
+ switch (type)
+ {
+ case GBF_TREE_NODE_UNKNOWN:
+ case GBF_TREE_NODE_SHORTCUT:
+ case GBF_TREE_NODE_GROUP:
+ data->group = file;
+ break;
+ case GBF_TREE_NODE_TARGET:
+ data->group = g_file_get_parent (file);
+ data->target = g_file_get_basename (file);
+ g_object_unref (file);
+ file = NULL;
+ data->name = g_strdup (data->target);
+ break;
+ case GBF_TREE_NODE_SOURCE:
+ data->source = file;
+ break;
+ case GBF_TREE_NODE_STRING:
+ data->name = g_file_get_parse_name (file);
+ g_object_unref (file);
+ file = NULL;
+ break;
+ }
+
+ if (file != NULL)
+ {
+ ginfo = g_file_query_info (file,
+ G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME,
+ G_FILE_QUERY_INFO_NONE,
+ NULL, NULL);
+ if (ginfo)
+ {
+ data->name = g_strdup (g_file_info_get_display_name (ginfo));
+ g_object_unref(ginfo);
+ }
+ else
+ {
+ data->name = g_file_get_basename (data->group);
+ }
+ }
+
+ return data;
+}
+
GbfTreeData *
gbf_tree_data_new_string (const gchar *string)
{
diff --git a/plugins/project-manager/gbf-tree-data.h b/plugins/project-manager/gbf-tree-data.h
index 07d9b2c..b9a7d87 100644
--- a/plugins/project-manager/gbf-tree-data.h
+++ b/plugins/project-manager/gbf-tree-data.h
@@ -32,6 +32,7 @@ G_BEGIN_DECLS
typedef struct _GbfTreeData GbfTreeData;
typedef enum {
+ GBF_TREE_NODE_UNKNOWN,
GBF_TREE_NODE_STRING,
GBF_TREE_NODE_GROUP,
GBF_TREE_NODE_TARGET,
@@ -51,17 +52,22 @@ struct _GbfTreeData
GtkWidget *properties_dialog;
};
-AnjutaProjectNode *gbf_tree_data_get_node (GbfTreeData *data,
- IAnjutaProject *project);
+AnjutaProjectNode *gbf_tree_data_get_node (GbfTreeData *data,
+ IAnjutaProject *project);
-gchar *gbf_tree_data_get_uri (GbfTreeData *data);
+gchar *gbf_tree_data_get_uri (GbfTreeData *data);
-GbfTreeData *gbf_tree_data_new_string (const gchar *string);
-GbfTreeData *gbf_tree_data_new_shortcut (GbfTreeData *src);
-GbfTreeData *gbf_tree_data_new_group (AnjutaProjectGroup *group);
-GbfTreeData *gbf_tree_data_new_target (AnjutaProjectTarget *target);
-GbfTreeData *gbf_tree_data_new_source (AnjutaProjectSource *source);
-void gbf_tree_data_free (GbfTreeData *data);
+gboolean gbf_tree_data_equal (GbfTreeData *data_a,
+ GbfTreeData *data_b);
+
+GbfTreeData *gbf_tree_data_new_for_uri (const gchar *uri,
+ GbfTreeNodeType type);
+GbfTreeData *gbf_tree_data_new_string (const gchar *string);
+GbfTreeData *gbf_tree_data_new_shortcut (GbfTreeData *src);
+GbfTreeData *gbf_tree_data_new_group (AnjutaProjectGroup *group);
+GbfTreeData *gbf_tree_data_new_target (AnjutaProjectTarget *target);
+GbfTreeData *gbf_tree_data_new_source (AnjutaProjectSource *source);
+void gbf_tree_data_free (GbfTreeData *data);
G_END_DECLS
diff --git a/plugins/project-manager/plugin.c b/plugins/project-manager/plugin.c
index 99c1ee1..9575679 100644
--- a/plugins/project-manager/plugin.c
+++ b/plugins/project-manager/plugin.c
@@ -155,7 +155,7 @@ static void
on_session_save (AnjutaShell *shell, AnjutaSessionPhase phase,
AnjutaSession *session, ProjectManagerPlugin *plugin)
{
- GList *files;
+ GList *list;
if (phase != ANJUTA_SESSION_PHASE_NORMAL)
return;
@@ -167,15 +167,16 @@ on_session_save (AnjutaShell *shell, AnjutaSessionPhase phase,
*/
if (plugin->project_uri && !plugin->session_by_me)
{
- files = anjuta_session_get_string_list (session,
+ list = anjuta_session_get_string_list (session,
"File Loader",
"Files");
- files = g_list_append (files, g_strdup (plugin->project_uri));
+ list = g_list_append (list, g_strdup (plugin->project_uri));
anjuta_session_set_string_list (session, "File Loader",
- "Files", files);
- g_list_foreach (files, (GFunc)g_free, NULL);
- g_list_free (files);
+ "Files", list);
+ g_list_foreach (list, (GFunc)g_free, NULL);
+ g_list_free (list);
}
+
}
static void
@@ -570,7 +571,7 @@ on_popup_properties (GtkAction *action, ProjectManagerPlugin *plugin)
{
GbfTreeData *data;
- data = gbf_project_view_get_selected (GBF_PROJECT_VIEW (plugin->view));
+ data = gbf_project_view_get_selected (GBF_PROJECT_VIEW (plugin->view), NULL);
if (data)
{
project_manager_show_node_properties_dialog (plugin, data);
@@ -580,30 +581,30 @@ on_popup_properties (GtkAction *action, ProjectManagerPlugin *plugin)
static void
on_popup_add_group (GtkAction *action, ProjectManagerPlugin *plugin)
{
- GbfTreeData *selected_group;
+ GtkTreeIter selected_group;
AnjutaProjectGroup *new_group;
update_operation_begin (plugin);
- selected_group = gbf_project_view_get_selected (GBF_PROJECT_VIEW (plugin->view));
+ gbf_project_view_get_selected (GBF_PROJECT_VIEW (plugin->view), &selected_group);
new_group = gbf_project_util_new_group (plugin->model,
get_plugin_parent_window (plugin),
- selected_group, NULL);
+ &selected_group, NULL);
update_operation_end (plugin, TRUE);
}
static void
on_popup_add_target (GtkAction *action, ProjectManagerPlugin *plugin)
{
- GbfTreeData *selected_group;
+ GtkTreeIter selected_group;
AnjutaProjectTarget *new_target;
update_operation_begin (plugin);
- selected_group = gbf_project_view_get_selected (GBF_PROJECT_VIEW (plugin->view));
+ gbf_project_view_get_selected (GBF_PROJECT_VIEW (plugin->view), &selected_group);
new_target = gbf_project_util_new_target (plugin->model,
get_plugin_parent_window (plugin),
- selected_group, NULL);
+ &selected_group, NULL);
update_operation_end (plugin, TRUE);
}
@@ -611,15 +612,15 @@ on_popup_add_target (GtkAction *action, ProjectManagerPlugin *plugin)
static void
on_popup_add_source (GtkAction *action, ProjectManagerPlugin *plugin)
{
- GbfTreeData *selected_target;
+ GtkTreeIter selected_target;
AnjutaProjectSource *new_source;
update_operation_begin (plugin);
- selected_target = gbf_project_view_get_selected (GBF_PROJECT_VIEW (plugin->view));
+ gbf_project_view_get_selected (GBF_PROJECT_VIEW (plugin->view), &selected_target);
new_source = gbf_project_util_add_source (plugin->model,
get_plugin_parent_window (plugin),
- selected_target, NULL);
+ &selected_target, NULL);
update_operation_end (plugin, TRUE);
}
@@ -1038,6 +1039,9 @@ on_treeview_event (GtkWidget *widget,
return FALSE;
}
+/*
+ *---------------------------------------------------------------------------*/
+
static void
register_stock_icons (AnjutaPlugin *plugin)
{
@@ -1185,7 +1189,6 @@ project_manager_load_gbf (ProjectManagerPlugin *pm_plugin)
backend_desc = (AnjutaPluginDescription *)desc->data;
anjuta_plugin_description_get_string (backend_desc, "Anjuta Plugin", "Location", &location);
plugin = (IAnjutaProjectBackend *)anjuta_plugin_manager_get_plugin_by_id (plugin_manager, location);
- g_message ("search plugin %s", location);
g_free (location);
backend_val = ianjuta_project_backend_probe (plugin, dirfile, NULL);
@@ -1851,29 +1854,46 @@ get_node_from_file (AnjutaProjectNode *parent, GFile *file)
return NULL;
}
-static GbfTreeData*
-get_tree_data_from_uri (ProjectManagerPlugin *plugin, const gchar *uri, GbfTreeNodeType type)
+static AnjutaProjectNode*
+get_project_node_from_uri (ProjectManagerPlugin *plugin, const gchar *uri, AnjutaProjectNodeType type)
{
- return gbf_project_model_find_uri (plugin->model, uri, type);
+ GbfTreeData *data;
+ AnjutaProjectNode *node;
+
+ switch (type)
+ {
+ case ANJUTA_PROJECT_GROUP:
+ data = gbf_tree_data_new_for_uri (uri, GBF_TREE_NODE_GROUP);
+ break;
+ case ANJUTA_PROJECT_TARGET:
+ data = gbf_tree_data_new_for_uri (uri, GBF_TREE_NODE_TARGET);
+ break;
+ case ANJUTA_PROJECT_SOURCE:
+ data = gbf_tree_data_new_for_uri (uri, GBF_TREE_NODE_SOURCE);
+ break;
+ case ANJUTA_PROJECT_UNKNOWN:
+ default:
+ data = gbf_tree_data_new_for_uri (uri, GBF_TREE_NODE_UNKNOWN);
+ break;
+ }
+
+ node = gbf_tree_data_get_node (data, plugin->project);
+ gbf_tree_data_free (data);
+
+ return node;
}
-static AnjutaProjectTarget*
-get_target_from_uri (ProjectManagerPlugin *plugin, const gchar *uri)
+static GtkTreeIter*
+get_tree_iter_from_uri (ProjectManagerPlugin *plugin, GtkTreeIter* iter, const gchar *uri, GbfTreeNodeType type)
{
GbfTreeData *data;
- AnjutaProjectNode *node = NULL;
+ gboolean found;
- data = get_tree_data_from_uri (plugin, uri, GBF_TREE_NODE_TARGET);
- if (data) node = gbf_tree_data_get_node (data, plugin->project);
+ data = gbf_tree_data_new_for_uri (uri, type);
+ found = gbf_project_model_find_tree_data (plugin->model, iter, data);
+ gbf_tree_data_free (data);
- if (anjuta_project_node_get_type (node) == ANJUTA_PROJECT_TARGET)
- {
- return (AnjutaProjectTarget *)node;
- }
- else
- {
- return NULL;
- }
+ return found ? iter : NULL;
}
static AnjutaProjectNodeType
@@ -1881,7 +1901,6 @@ iproject_manager_get_element_type (IAnjutaProjectManager *project_manager,
const gchar *element_uri,
GError **err)
{
- GbfTreeData *data;
AnjutaProjectNode *node = NULL;
ProjectManagerPlugin *plugin;
@@ -1890,8 +1909,7 @@ iproject_manager_get_element_type (IAnjutaProjectManager *project_manager,
plugin = ANJUTA_PLUGIN_PROJECT_MANAGER (G_OBJECT (project_manager));
- data = get_tree_data_from_uri (plugin, element_uri, 0);
- if (data) node = gbf_tree_data_get_node (data, plugin->project);
+ node = get_project_node_from_uri (plugin, element_uri, ANJUTA_PROJECT_UNKNOWN);
return node == NULL ? ANJUTA_PROJECT_UNKNOWN : anjuta_project_node_get_type (node);
}
@@ -1929,7 +1947,7 @@ iproject_manager_get_target_type (IAnjutaProjectManager *project_manager,
g_return_val_if_fail (uri_is_inside_project (plugin, target_uri),
ANJUTA_TARGET_UNKNOWN);
- target = get_target_from_uri (plugin, target_uri);
+ target = get_project_node_from_uri (plugin, target_uri, ANJUTA_PROJECT_TARGET);
if (target != NULL)
{
@@ -2111,7 +2129,7 @@ iproject_manager_get_selected_id (IAnjutaProjectManager *project_manager,
return uri;
}
}
-
+
if (node)
{
uri = get_element_uri_from_id (plugin, node, IANJUTA_PROJECT_MANAGER_PROJECT_ROOT_URI);
@@ -2136,11 +2154,12 @@ iproject_manager_get_capabilities (IAnjutaProjectManager *project_manager,
static gchar*
iproject_manager_add_source (IAnjutaProjectManager *project_manager,
const gchar *source_uri_to_add,
- const gchar *default_location_uri,
+ const gchar *default_target_uri,
GError **err)
{
ProjectManagerPlugin *plugin;
- GbfTreeData *location_data = NULL;
+ GtkTreeIter target_iter;
+ GtkTreeIter *iter = NULL;
AnjutaProjectSource *source_id;
gchar* source_uri;
@@ -2150,14 +2169,13 @@ iproject_manager_add_source (IAnjutaProjectManager *project_manager,
g_return_val_if_fail (IANJUTA_IS_PROJECT (plugin->project), FALSE);
update_operation_begin (plugin);
- if (default_location_uri != NULL)
+ if (default_target_uri != NULL)
{
- location_data = get_tree_data_from_uri (plugin, default_location_uri, GBF_TREE_NODE_TARGET);
- if (location_data == NULL) get_tree_data_from_uri (plugin, default_location_uri, GBF_TREE_NODE_GROUP);
+ iter = get_tree_iter_from_uri (plugin, &target_iter, default_target_uri, GBF_TREE_NODE_TARGET);
}
source_id = gbf_project_util_add_source (plugin->model,
- get_plugin_parent_window (plugin),
- location_data,
+ get_plugin_parent_window (plugin),
+ iter,
source_uri_to_add);
update_operation_end (plugin, TRUE);
@@ -2175,7 +2193,6 @@ iproject_manager_add_source_quiet (IAnjutaProjectManager *project_manager,
ProjectManagerPlugin *plugin;
AnjutaProjectSource *source_id;
GFile *source_file;
- GbfTreeData *data;
AnjutaProjectTarget *target = NULL;
g_return_val_if_fail (ANJUTA_IS_PLUGIN (project_manager), FALSE);
@@ -2183,9 +2200,7 @@ iproject_manager_add_source_quiet (IAnjutaProjectManager *project_manager,
plugin = ANJUTA_PLUGIN_PROJECT_MANAGER (G_OBJECT (project_manager));
g_return_val_if_fail (IANJUTA_IS_PROJECT (plugin->project), FALSE);
- data = get_tree_data_from_uri (plugin, location_uri, GBF_TREE_NODE_TARGET);
- if (data == NULL) get_tree_data_from_uri (plugin, location_uri, GBF_TREE_NODE_GROUP);
- if (data != NULL) target = gbf_tree_data_get_node (data, plugin->project);
+ target = get_project_node_from_uri (plugin, location_uri, ANJUTA_PROJECT_TARGET);
source_file = g_file_new_for_uri (source_uri_to_add);
update_operation_begin (plugin);
source_id = ianjuta_project_add_source (plugin->project,
@@ -2201,11 +2216,12 @@ iproject_manager_add_source_quiet (IAnjutaProjectManager *project_manager,
static GList*
iproject_manager_add_source_multi (IAnjutaProjectManager *project_manager,
GList *source_add_uris,
- const gchar *default_location_uri,
+ const gchar *default_target_uri,
GError **err)
{
ProjectManagerPlugin *plugin;
- GbfTreeData *location_data = NULL;
+ GtkTreeIter target_iter;
+ GtkTreeIter *iter = NULL;
GList* source_ids;
GList* source_uris = NULL;
@@ -2215,15 +2231,14 @@ iproject_manager_add_source_multi (IAnjutaProjectManager *project_manager,
g_return_val_if_fail (IANJUTA_IS_PROJECT (plugin->project), FALSE);
update_operation_begin (plugin);
- if (default_location_uri != NULL)
+ if (default_target_uri != NULL)
{
- location_data = get_tree_data_from_uri (plugin, default_location_uri, GBF_TREE_NODE_TARGET);
- if (location_data == NULL) get_tree_data_from_uri (plugin, default_location_uri, GBF_TREE_NODE_GROUP);
+ iter = get_tree_iter_from_uri (plugin, &target_iter, default_target_uri, GBF_TREE_NODE_TARGET);
}
source_ids = gbf_project_util_add_source_multi (plugin->model,
get_plugin_parent_window (plugin),
- location_data,
+ iter,
source_add_uris);
update_operation_end (plugin, TRUE);
@@ -2246,9 +2261,10 @@ iproject_manager_add_target (IAnjutaProjectManager *project_manager,
GError **err)
{
ProjectManagerPlugin *plugin;
+ GtkTreeIter group_iter;
+ GtkTreeIter *iter = NULL;
gchar *target_uri = NULL;
AnjutaProjectTarget *target_id;
- GbfTreeData *default_group_data;
g_return_val_if_fail (ANJUTA_IS_PLUGIN (project_manager), FALSE);
@@ -2256,12 +2272,15 @@ iproject_manager_add_target (IAnjutaProjectManager *project_manager,
g_return_val_if_fail (IANJUTA_IS_PROJECT (plugin->project), FALSE);
- default_group_data = get_tree_data_from_uri (plugin, default_group_uri, GBF_TREE_NODE_GROUP);
+ if (default_group_uri != NULL)
+ {
+ iter = get_tree_iter_from_uri (plugin, &group_iter, default_group_uri, GBF_TREE_NODE_GROUP);
+ }
update_operation_begin (plugin);
target_id = gbf_project_util_new_target (plugin->model,
get_plugin_parent_window (plugin),
- default_group_data,
+ iter,
target_name_to_add);
update_operation_end (plugin, TRUE);
target_uri = get_element_uri_from_id (plugin, target_id, IANJUTA_BUILDER_ROOT_URI);
@@ -2276,21 +2295,25 @@ iproject_manager_add_group (IAnjutaProjectManager *project_manager,
GError **err)
{
ProjectManagerPlugin *plugin;
+ GtkTreeIter group_iter;
+ GtkTreeIter *iter = NULL;
gchar *group_uri = NULL;
AnjutaProjectGroup *group_id;
- GbfTreeData *default_group_data;
g_return_val_if_fail (ANJUTA_IS_PLUGIN (project_manager), FALSE);
plugin = ANJUTA_PLUGIN_PROJECT_MANAGER (G_OBJECT (project_manager));
g_return_val_if_fail (IANJUTA_IS_PROJECT (plugin->project), FALSE);
- default_group_data = get_tree_data_from_uri (plugin, default_group_uri, GBF_TREE_NODE_GROUP);
+ if (default_group_uri != NULL)
+ {
+ iter = get_tree_iter_from_uri (plugin, &group_iter, default_group_uri, GBF_TREE_NODE_GROUP);
+ }
update_operation_begin (plugin);
group_id = gbf_project_util_new_group (plugin->model,
get_plugin_parent_window (plugin),
- default_group_data,
+ iter,
group_name_to_add);
update_operation_end (plugin, TRUE);
group_uri = get_element_uri_from_id (plugin, group_id, IANJUTA_PROJECT_MANAGER_PROJECT_ROOT_URI);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]