static void delete_objects_revert(struct DeleteObjectsChange *change, Diagram *dia) { GList *list; DEBUG_PRINTF(("delete_objects_revert()\n")); change->applied = 0; layer_set_object_list(change->layer, g_list_copy(change->original_objects)); object_add_updates_list(change->obj_list, dia); list = change->obj_list; while (list) { DiaObject *obj = (DiaObject *) list->data; if (obj->parent) /* Restore child references */ obj->parent->children = g_list_append(obj->parent->children, obj); /* Emit a signal per object reverted */ data_emit(layer_get_parent_diagram(change->layer),change->layer,obj,"object_add"); list = g_list_next(list); } diagram_tree_add_objects(diagram_tree(), dia, change->obj_list); }
static void reorder_objects_revert(struct ReorderObjectsChange *change, Diagram *dia) { DEBUG_PRINTF(("reorder_objects_revert()\n")); layer_set_object_list(change->layer, g_list_copy(change->original_objects)); object_add_updates_list(change->changed_list, dia); }
static void move_object_to_layer_revert(MoveObjectToLayerChange *change, Diagram *dia) { if (change->moving_up) { move_object_layer_relative(dia, change->objects, -1); } else { diagram_unselect_objects(dia, change->objects); move_object_layer_relative(dia, change->objects, 1); /* overwriting the 'unsorted' list of objects to the order it had before */ layer_set_object_list(change->orig_layer, g_list_copy(change->orig_list)); object_add_updates_list(change->orig_list, dia); } }
void diagram_place_down_selected(Diagram *dia) { GList *sorted_list; GList *orig_list; GList *tmp, *stmp; GList *new_list = NULL; if (g_list_length (dia->data->selected) == 0) return; orig_list = g_list_copy(dia->data->active_layer->objects); sorted_list = diagram_get_sorted_selected(dia); object_add_updates_list(orig_list, dia); /* Sanity check */ g_assert(g_list_length (dia->data->selected) == g_list_length(sorted_list)); new_list = g_list_copy(orig_list); stmp = sorted_list; for (tmp = new_list; tmp != NULL; tmp = g_list_next(tmp)) { if (stmp == NULL) break; if (tmp->next == NULL) break; if (tmp->data == stmp->data) { /* This just takes care of any starting matches */ stmp = g_list_next(stmp); } else if (tmp->next->data == stmp->data) { /* This flips the non-selected element forwards, ala bubblesort */ void *swap = tmp->data; tmp->data = tmp->next->data; tmp->next->data = swap; stmp = g_list_next(stmp); } } layer_set_object_list(dia->data->active_layer, new_list); undo_reorder_objects(dia, g_list_copy(sorted_list), orig_list); diagram_modified(dia); diagram_flush(dia); undo_set_transactionpoint(dia->undo); }
static void group_objects_revert(struct GroupObjectsChange *change, Diagram *dia) { DEBUG_PRINTF(("group_objects_revert()\n")); change->applied = 0; diagram_unselect_object(dia, change->group); object_add_updates(change->group, dia); layer_set_object_list(change->layer, g_list_copy(change->orig_list)); object_add_updates_list(change->obj_list, dia); properties_hide_if_shown(dia, change->group); diagram_tree_add_objects(diagram_tree(), dia, change->obj_list); diagram_tree_remove_object(diagram_tree(), change->group); }
void diagram_place_up_selected(Diagram *dia) { GList *sorted_list; GList *orig_list; GList *tmp, *stmp; GList *new_list = NULL; if (g_list_length (dia->data->selected) == 0) return; orig_list = g_list_copy(dia->data->active_layer->objects); sorted_list = diagram_get_sorted_selected(dia); object_add_updates_list(orig_list, dia); new_list = g_list_copy(orig_list); stmp = g_list_last(sorted_list); for (tmp = g_list_last(new_list); tmp != NULL; tmp = g_list_previous(tmp)) { if (stmp == NULL) break; if (tmp->prev == NULL) break; if (tmp->data == stmp->data) { stmp = g_list_previous(stmp); } else if (tmp->prev->data == stmp->data) { void *swap = tmp->data; tmp->data = tmp->prev->data; tmp->prev->data = swap; stmp = g_list_previous(stmp); } } layer_set_object_list(dia->data->active_layer, new_list); undo_reorder_objects(dia, g_list_copy(sorted_list), orig_list); diagram_modified(dia); diagram_flush(dia); undo_set_transactionpoint(dia->undo); }