示例#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);
				}
			}
		}
	}
}
示例#2
0
static void
debug_tree_add_children (DebugTree *tree, GtkTreeIter* parent, const GList *children)
{
	GList *child;
	
	child = g_list_first ((GList *)children);
	
	if (child == NULL)
	{
		/* Clear all children if they exist */
		debug_tree_remove_children (tree, parent, NULL);
	}
	else
	{
		GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree->view));
		GtkTreeIter iter;
		gboolean valid_iter;
		
		valid_iter = gtk_tree_model_iter_children (model, &iter, parent); 
		
		for (; child != NULL; child = g_list_next (child))
		{
			IAnjutaDebuggerVariableObject *var = (IAnjutaDebuggerVariableObject *)child->data;
			DmaVariableData *data;
			
			if (!valid_iter)
			{
				/* Add new tree node */
				gtk_tree_store_append(GTK_TREE_STORE(model), &iter, parent);
				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, FALSE,
					   DTREE_ENTRY_COLUMN, NULL,-1);
				data = NULL;
			}
			else
			{
				/* Update tree node */
				if (var->type != NULL)
					gtk_tree_store_set(GTK_TREE_STORE(model), &iter, TYPE_COLUMN, var->type, -1);
				if (var->value != NULL)
					gtk_tree_store_set(GTK_TREE_STORE(model), &iter, VALUE_COLUMN, var->value, -1);
				if (var->expression != NULL)
					gtk_tree_store_set(GTK_TREE_STORE(model), &iter, VARIABLE_COLUMN, var->expression, -1);
				gtk_tree_model_get(model, &iter, DTREE_ENTRY_COLUMN, &data, -1);	
			}
				
			if (data == NULL)
			{
				/* Create new data */
				data = dma_variable_data_new(var->name, FALSE);
				gtk_tree_store_set(GTK_TREE_STORE(model), &iter, DTREE_ENTRY_COLUMN, data, -1);				
			}
			else
			{
				data->changed = TRUE;
			}
		
			if (var->children == 0)
			{
				/* Clear all children if they exist */
				debug_tree_remove_children (tree, &iter, NULL);
			}
			else
			{
				/* Add dummy children */
				debug_tree_add_dummy (tree, &iter);
			}
			
			valid_iter = gtk_tree_model_iter_next (model, &iter); 
		}
		if (valid_iter)
		{
			/* Remove trailing children */
			debug_tree_remove_children (tree, parent, &iter);
		}
	}	
}
示例#3
0
static void
debug_tree_add_children (GtkTreeModel *model, DmaDebuggerQueue *debugger, GtkTreeIter* parent, guint from, const GList *children)
{
	GList *child;
	GtkTreeIter iter;
	gboolean valid;

	valid = gtk_tree_model_iter_nth_child (model, &iter, parent, from);

	/* Add new children */
	for (child = g_list_first ((GList *)children); child != NULL; child = g_list_next (child))
	{
		IAnjutaDebuggerVariableObject *var = (IAnjutaDebuggerVariableObject *)child->data;
		DmaVariableData *data;
		
		if (!valid)
		{
			/* Add new tree node */
			gtk_tree_store_append(GTK_TREE_STORE(model), &iter, parent);

			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, FALSE,
				DTREE_ENTRY_COLUMN, NULL,-1);
			data = NULL;
		}
		else
		{
			/* Update tree node */
			if (var->type != NULL)
				gtk_tree_store_set(GTK_TREE_STORE(model), &iter, TYPE_COLUMN, var->type, -1);
			if (var->value != NULL)
				gtk_tree_store_set(GTK_TREE_STORE(model), &iter, VALUE_COLUMN, var->value, -1);
			if (var->expression != NULL)
				gtk_tree_store_set(GTK_TREE_STORE(model), &iter, VARIABLE_COLUMN, var->expression, -1);
			gtk_tree_model_get(model, &iter, DTREE_ENTRY_COLUMN, &data, -1);

			if (var->name == NULL)
			{
				/* Dummy node representing additional children */
				if (data != NULL)
				{
					dma_variable_data_free (data);
					gtk_tree_store_set(GTK_TREE_STORE (model), &iter, DTREE_ENTRY_COLUMN, NULL, -1);
					data = NULL;
				}
			}
		}

		if ((var->name != NULL) && (data == NULL))
		{
			/* Create new data */
			data = dma_variable_data_new(var->name, TRUE);
			gtk_tree_store_set(GTK_TREE_STORE(model), &iter, DTREE_ENTRY_COLUMN, data, -1);
		}

		/* Clear all children if they exist */
		debug_tree_remove_children (model, debugger, &iter, NULL);
		if ((var->children != 0) || var->has_more || (var->name == NULL))
		{
			/* Add dummy children */
			debug_tree_model_add_dummy_children (model, &iter);
		}

		valid = gtk_tree_model_iter_next (model, &iter); 
	}
	
	/* Clear remaining old children */
	if (valid) debug_tree_remove_children (model, debugger, parent, &iter);
}