Example #1
0
void
debug_tree_add_watch (DebugTree *tree, const IAnjutaDebuggerVariableObject* var, gboolean auto_update)
{
	GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree->view));
	GtkTreeIter iter;
	DmaVariableData *data;

	/* Allocate data */
	data = dma_variable_data_new(var->name, auto_update);
	
	/* Add node in tree */
	gtk_tree_store_append(GTK_TREE_STORE(model), &iter, NULL);
	gtk_tree_store_set(GTK_TREE_STORE(model), &iter,
					   TYPE_COLUMN, var->type == NULL ? UNKNOWN_TYPE : var->type,
					   VALUE_COLUMN, var->value == NULL ? UNKNOWN_VALUE : var->value,
					   VARIABLE_COLUMN, var->expression,
					   ROOT_COLUMN, TRUE,
					   DTREE_ENTRY_COLUMN, data, -1);

	if (tree->debugger != NULL)
	{
		if ((var->value == NULL) || (var->children == -1))
		{
			if (var->name == NULL)
			{
				/* Need to create variable before to get value */
				DmaVariablePacket *pack;
		
				pack = dma_variable_packet_new(model, &iter, tree->debugger, data, 0);
				dma_queue_create_variable (
						tree->debugger,
						var->expression,
						(IAnjutaDebuggerCallback)gdb_var_create,
						pack);
			}
			else
			{
				DEBUG_PRINT("%s", "You shouldn't read this, debug_tree_add_watch");
				if (var->value == NULL)
				{
					/* Get value */
					DmaVariablePacket *pack =
					
					pack = dma_variable_packet_new(model, &iter, tree->debugger, data, 0);
					dma_queue_evaluate_variable (
							tree->debugger,
							var->name,
							(IAnjutaDebuggerCallback)gdb_var_evaluate_expression,
							pack);
				}
			}
		}
	}
}
Example #2
0
static void
on_debug_tree_value_changed (GtkCellRendererText *cell,
						  gchar *path_string,
                          gchar *text,
                          gpointer user_data)
{
	DebugTree *tree = (DebugTree *)user_data;
	GtkTreeIter iter;
	GtkTreeModel * model;
	
    model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree->view));

	if (gtk_tree_model_get_iter_from_string (model, &iter, path_string))
	{
		DmaVariableData *item;
		DmaVariablePacket *tran;

		gtk_tree_model_get (model, &iter, DTREE_ENTRY_COLUMN, &item, -1);
		if ((item != NULL) && (item->name != NULL) && (tree->debugger != NULL))
		{
			/* Variable is valid */
			dma_queue_assign_variable (tree->debugger, item->name, text);
			tran = dma_variable_packet_new(model, &iter, tree, item);
			dma_queue_evaluate_variable (
					tree->debugger,
					item->name,
					(IAnjutaDebuggerCallback) gdb_var_evaluate_expression,
					tran);
		}
	}
}
Example #3
0
static void
on_treeview_row_expanded       (GtkTreeView     *treeview,
                                 GtkTreeIter     *iter,
                                 GtkTreePath     *path,
                                 gpointer         user_data)
{
	DebugTree *tree = (DebugTree *)user_data;
	GtkTreeModel *const model = gtk_tree_view_get_model (treeview);
	DmaVariableData *data;
									 
	gtk_tree_model_get (model, iter, DTREE_ENTRY_COLUMN, &data, -1);

	if ((data != NULL) && (data->name != NULL) && (tree->debugger != NULL))
	{
		DmaVariablePacket *pack;
					
		pack = dma_variable_packet_new(model, iter, tree, data);
		dma_queue_list_children (
						tree->debugger,
						data->name,
						(IAnjutaDebuggerCallback)gdb_var_list_children,
						pack);
	}
								 
	return;
}
Example #4
0
static void
gdb_var_create (IAnjutaDebuggerVariableObject *variable, gpointer user_data, GError *err)
{
	DmaVariablePacket *pack = (DmaVariablePacket *) user_data;
	GtkTreeIter iter;
	
	g_return_if_fail (pack != NULL);

	if (err != NULL)
	{
		/* Command failed */
		dma_variable_packet_free (pack);
		
		return;
	}
	if ((pack->data == NULL)
		|| !dma_variable_packet_get_iter (pack, &iter))
	{
		/* Item has been deleted, but not removed from debugger as it was not
		 * created at this time, so remove it now */
		if ((pack->tree->debugger) && (variable->name))
		{
			dma_queue_delete_variable (pack->tree->debugger, variable->name);
		}
		dma_variable_packet_free (pack);
		
		return;
	}

	DmaVariableData *data = pack->data;
	
	if ((variable->name != NULL) && (data->name == NULL))
	{
		data->name = strdup (variable->name);
	}
    data->changed = TRUE;
	
	gtk_tree_store_set(GTK_TREE_STORE(pack->model), &iter,
					   TYPE_COLUMN, variable->type,
					   VALUE_COLUMN, variable->value, -1);
	

	if (variable->children == -1)
	{
		/* Find the number of children */
		DmaVariablePacket *pack_child =
                  dma_variable_packet_new(pack->model, &iter, pack->tree, data);

		dma_queue_list_children (
				pack_child->tree->debugger,
				variable->name,
				(IAnjutaDebuggerCallback)gdb_var_list_children,
				pack_child);
	}
	else if (variable->children > 0)
	{
		debug_tree_add_dummy (pack->tree, &iter);
	}
	else
	{
		debug_tree_remove_children (pack->tree, &iter, NULL);
	}
	
	
	/* Request value and/or children if they are missing
	 * reusing same packet if possible */
	if (variable->value == NULL)
	{
		dma_queue_evaluate_variable (
				pack->tree->debugger,
				variable->name,
				(IAnjutaDebuggerCallback)gdb_var_evaluate_expression,
				pack);
	}
	else
	{
		dma_variable_packet_free (pack);
	}
}
Example #5
0
static void
on_treeview_row_expanded       (GtkTreeView     *treeview,
                                 GtkTreeIter     *iter,
                                 GtkTreePath     *path,
                                 gpointer         user_data)
{
	DebugTree *tree = (DebugTree *)user_data;

	if (tree->debugger != NULL)
	{
		GtkTreeModel *const model = gtk_tree_view_get_model (treeview);
		DmaVariableData *data;

		gtk_tree_model_get (model, iter, DTREE_ENTRY_COLUMN, &data, -1);

		if ((data != NULL) && (data->name != NULL))
		{
			/* Expand variable node */
			GtkTreeIter child;
			
			if (gtk_tree_model_iter_children (model, &child, iter))
			{
				DmaVariableData *child_data;
				
				gtk_tree_model_get (model, &child, DTREE_ENTRY_COLUMN, &child_data, -1);
				if ((child_data == NULL) || (child_data->name == NULL))
				{
					/* Dummy children, get the real children */
					DmaVariablePacket *pack;

					pack = dma_variable_packet_new(model, iter, tree->debugger, data, 0);
					dma_queue_list_children (
								tree->debugger,
								data->name,
								0, 
								(IAnjutaDebuggerCallback)gdb_var_list_children,
								pack);
				}
			}
		}
		else
		{
			/* Dummy node representing additional children */
			GtkTreeIter parent;

			if (gtk_tree_model_iter_parent (model, &parent, iter))
			{
				gtk_tree_model_get (model, &parent, DTREE_ENTRY_COLUMN, &data, -1);
				if ((data != NULL) && (data->name != NULL))
				{
					DmaVariablePacket *pack;
					guint from;
					gint pos;

					pos = my_gtk_tree_model_child_position (model, iter);
					from = pos < 0 ? 0 : pos;

					pack = dma_variable_packet_new(model, &parent, tree->debugger, data, from);
					dma_queue_list_children (
									tree->debugger,
									data->name,
									from,
									(IAnjutaDebuggerCallback)gdb_var_list_children,
									pack);
				}
			}
		}
	}
 
	return;
}