static gboolean _dtm_iter_next (GtkTreeModel *tree_model, GtkTreeIter *iter) { int i; if (NODE_OBJECT(iter)) { if (!NODE_LAYER(iter)) return FALSE; i = layer_object_get_index (NODE_LAYER(iter), NODE_OBJECT(iter)); ++i; NODE_OBJECT(iter) = layer_object_get_nth(NODE_LAYER(iter), i); return NODE_OBJECT(iter) != NULL; } else if (NODE_LAYER(iter)) { if (!NODE_DIAGRAM(iter)) return FALSE; i = data_layer_get_index (NODE_DIAGRAM(iter), NODE_LAYER(iter)); ++i; NODE_LAYER(iter) = data_layer_get_nth(NODE_DIAGRAM(iter), i); return NODE_LAYER(iter) != NULL; } else if (NODE_DIAGRAM(iter)) { GList *list = dia_open_diagrams(); i = g_list_index (list, NODE_DIAGRAM(iter)); ++i; list = g_list_nth (list, i); NODE_DIAGRAM(iter) = list ? list->data : NULL; return NODE_DIAGRAM(iter) != NULL; } else { /* empy iter? */ GList *list = dia_open_diagrams(); NODE_DIAGRAM(iter) = list ? list->data : NULL; return NODE_DIAGRAM(iter) != NULL; } return FALSE; }
static void edit_layer_add_ok_callback (GtkWidget *w, gpointer client_data) { EditLayerDialog *dialog = (EditLayerDialog *) client_data; Diagram *dia = ddisplay_active_diagram(); Layer *layer; int pos = data_layer_get_index (dia->data, dia->data->active_layer) + 1; layer = new_layer(g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->name_entry))), dia->data); data_add_layer_at(dia->data, layer, pos); data_set_active_layer(dia->data, layer); diagram_add_update_all(dia); diagram_flush(dia); undo_layer(dia, layer, TYPE_ADD_LAYER, pos); undo_set_transactionpoint(dia->undo); /* ugly way of updating the layer widget */ if (layer_dialog && layer_dialog->diagram == dia) { layer_dialog_set_diagram(dia); } gtk_widget_destroy (dialog->dialog); g_free (dialog); }
static GtkTreePath * _dtm_get_path (GtkTreeModel *tree_model, GtkTreeIter *iter) { GtkTreePath *result; int index = 0; if (!NODE_DIAGRAM(iter) && !NODE_LAYER(iter) && !NODE_OBJECT(iter)) { /* the root path */ return gtk_tree_path_new_first (); } result = gtk_tree_path_new (); if (NODE_DIAGRAM(iter)) { GList *list = dia_open_diagrams(); gtk_tree_path_append_index (result, g_list_index (list, NODE_DIAGRAM(iter))); } if (NODE_LAYER(iter)) { g_return_val_if_fail (NODE_DIAGRAM(iter) == layer_get_parent_diagram (NODE_LAYER(iter)), NULL); index = data_layer_get_index (NODE_DIAGRAM(iter), NODE_LAYER(iter)); if (index >= 0) gtk_tree_path_append_index (result, index); } if (index >= 0 && NODE_OBJECT(iter)) { g_return_val_if_fail (NODE_LAYER(iter) == dia_object_get_parent_layer (NODE_OBJECT(iter)), NULL); index = layer_object_get_index (NODE_LAYER(iter), NODE_OBJECT(iter)); if (index >= 0) gtk_tree_path_append_index (result, index); } if (index < 0) { gtk_tree_path_free (result); return NULL; } return result; }