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); } } } } }
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); } } }
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); }