dia r4211 - in trunk: . app data samples
- From: hans svn gnome org
- To: svn-commits-list gnome org
- Subject: dia r4211 - in trunk: . app data samples
- Date: Tue, 20 Jan 2009 23:21:59 +0000 (UTC)
Author: hans
Date: Tue Jan 20 23:21:59 2009
New Revision: 4211
URL: http://svn.gnome.org/viewvc/dia?rev=4211&view=rev
Log:
2009-01-20 Hans Breuer <hans breuer org>
* app/undo.[ch] app/commands.[ch] app/menus.c app/diagram.c
data/*-ui. : implement "Objects/Move to layer above/below"
(maintaining connections between layers). Fixes bug #59105.
* samples/undo-check.dia a diagram to play with the above
Added:
trunk/samples/undo-check.dia (contents, props changed)
Modified:
trunk/ChangeLog
trunk/app/commands.c
trunk/app/commands.h
trunk/app/diagram.c
trunk/app/menus.c
trunk/app/menus.h
trunk/app/undo.c
trunk/app/undo.h
trunk/data/display-ui.xml
trunk/data/integrated-ui.xml
trunk/data/popup-ui.xml
Modified: trunk/app/commands.c
==============================================================================
--- trunk/app/commands.c (original)
+++ trunk/app/commands.c Tue Jan 20 23:21:59 2009
@@ -419,20 +419,20 @@
ddisplay_do_update_menu_sensitivity(ddisp);
}
-static void
-move_objects_up_layer(GtkAction *action)
+void
+objects_move_up_layer(GtkAction *action)
{
DDisplay *ddisp = ddisplay_active();
GList *selected_list;
+ Change *change;
if (!ddisp || textedit_mode(ddisp)) return;
selected_list = diagram_get_sorted_selected(ddisp->diagram);
-#ifdef MOVE_OBJECTS_LAYER
change = undo_move_object_other_layer(ddisp->diagram, selected_list, TRUE);
(change->apply)(change, ddisp->diagram);
-#endif
+
diagram_modified(ddisp->diagram);
undo_set_transactionpoint(ddisp->diagram->undo);
@@ -441,22 +441,21 @@
ddisplay_do_update_menu_sensitivity(ddisp);
}
-static void
-move_objects_down_layer(GtkAction *action)
+ void
+objects_move_down_layer(GtkAction *action)
{
DDisplay *ddisp = ddisplay_active();
GList *selected_list;
+ Change *change;
if (!ddisp || textedit_mode(ddisp)) return;
selected_list = diagram_get_sorted_selected(ddisp->diagram);
/* Must check if move is legal here */
-#ifdef MOVE_OBJECTS_LAYER
change = undo_move_object_other_layer(ddisp->diagram, selected_list, FALSE);
(change->apply)(change, ddisp->diagram);
-#endif
diagram_modified(ddisp->diagram);
undo_set_transactionpoint(ddisp->diagram->undo);
Modified: trunk/app/commands.h
==============================================================================
--- trunk/app/commands.h (original)
+++ trunk/app/commands.h Tue Jan 20 23:21:59 2009
@@ -72,6 +72,9 @@
void objects_place_under_callback (GtkAction *action);
void objects_place_up_callback (GtkAction *action);
void objects_place_down_callback (GtkAction *action);
+void objects_move_up_layer (GtkAction *action);
+void objects_move_down_layer (GtkAction *action);
+
void objects_parent_callback (GtkAction *action);
void objects_unparent_callback (GtkAction *action);
void objects_unparent_children_callback (GtkAction *action);
Modified: trunk/app/diagram.c
==============================================================================
--- trunk/app/diagram.c (original)
+++ trunk/app/diagram.c Tue Jan 20 23:21:59 2009
@@ -534,6 +534,11 @@
gtk_action_set_sensitive (items->bring_forwards,
!textedit_active && selected_count > 0);
+ gtk_action_set_sensitive (items->objects_layer_above,
+ !textedit_active && selected_count > 0);
+ gtk_action_set_sensitive (items->objects_layer_below,
+ !textedit_active && selected_count > 0);
+
gtk_action_set_sensitive (items->parent,
!textedit_active && diagram_selected_can_parent (dia));
gtk_action_set_sensitive (items->unparent,
Modified: trunk/app/menus.c
==============================================================================
--- trunk/app/menus.c (original)
+++ trunk/app/menus.c Tue Jan 20 23:21:59 2009
@@ -135,7 +135,7 @@
{ "Diagram", NULL, N_("_Diagram"), NULL, NULL, NULL },
{ "DiagramProperties", GTK_STOCK_PROPERTIES, NULL, "<shift><alt>Return", NULL, G_CALLBACK (view_diagram_properties_callback) },
- { "DiagramLayers", NULL, N_("_Layers..."), NULL, NULL, G_CALLBACK (dialogs_layers_callback) },
+ { "DiagramLayers", NULL, N_("_Layers..."), "<control>L", NULL, G_CALLBACK (dialogs_layers_callback) },
{ "View", NULL, N_("_View"), NULL, NULL, NULL },
{ "ViewZoomin", GTK_STOCK_ZOOM_IN, NULL, "<control>plus", NULL, G_CALLBACK (view_zoom_in_callback) },
@@ -168,6 +168,9 @@
{ "ObjectsSendbackwards", GTK_STOCK_GO_DOWN, N_("Send Backwards"), NULL, NULL, G_CALLBACK (objects_place_down_callback) },
{ "ObjectsBringforwards", GTK_STOCK_GO_UP, N_("Bring Forwards"), NULL, NULL, G_CALLBACK (objects_place_up_callback) },
+ { "ObjectsLayerAbove", NULL, N_("Move to layer above"), NULL, NULL, G_CALLBACK (objects_move_up_layer) },
+ { "ObjectsLayerBelow", NULL, N_("Move to layer below"), NULL, NULL, G_CALLBACK (objects_move_down_layer) },
+
{ "ObjectsGroup", DIA_STOCK_GROUP, N_("_Group"), "<control>G", NULL, G_CALLBACK (objects_group_callback) },
/* deliberately not using Ctrl+U for Ungroup */
{ "ObjectsUngroup", DIA_STOCK_UNGROUP, N_("_Ungroup"), "<control><shift>G", NULL, G_CALLBACK (objects_ungroup_callback) },
@@ -1202,6 +1205,9 @@
items->bring_to_front = gtk_action_group_get_action (actions, "ObjectsBringtofront");
items->send_backwards = gtk_action_group_get_action (actions, "ObjectsSendbackwards");
items->bring_forwards = gtk_action_group_get_action (actions, "ObjectsBringforwards");
+
+ items->objects_layer_above = gtk_action_group_get_action (actions, "ObjectsLayerAbove");
+ items->objects_layer_below = gtk_action_group_get_action (actions, "ObjectsLayerBelow");
items->group = gtk_action_group_get_action (actions, "ObjectsGroup");
items->ungroup = gtk_action_group_get_action (actions, "ObjectsUngroup");
Modified: trunk/app/menus.h
==============================================================================
--- trunk/app/menus.h (original)
+++ trunk/app/menus.h Tue Jan 20 23:21:59 2009
@@ -48,6 +48,9 @@
GtkAction *send_backwards;
GtkAction *bring_forwards;
+ GtkAction *objects_layer_above;
+ GtkAction *objects_layer_below;
+
GtkAction *group;
GtkAction *ungroup;
Modified: trunk/app/undo.c
==============================================================================
--- trunk/app/undo.c (original)
+++ trunk/app/undo.c Tue Jan 20 23:21:59 2009
@@ -1208,74 +1208,95 @@
}
/* ********* MOVE TO OTHER LAYER */
-#ifdef MOVE_OTHER_LAYER
-struct MoveObjectToLayerChange {
+typedef struct _MoveObjectToLayerChange {
Change change;
/** The objects we are moving */
GList *objects;
/** All objects in the original layer */
- GList *original_list;
+ GList *orig_list;
+ /** The active layer when started */
+ Layer *orig_layer;
gboolean moving_up;
-};
+} MoveObjectToLayerChange;
+/*!
+ * BEWARE: we need to notify the DiagramTree somehow - maybe
+ * better make it listen to object-add signal?
+ */
static void
move_object_layer_relative(Diagram *dia, GList *objects, gint dist)
{
-
+ /* from the active layer to above or below */
+ Layer *active, *target;
+ guint pos;
+
+ g_return_if_fail(dia->data->active_layer);
+
+ active = dia->data->active_layer;
+ for (pos = 0; pos < dia->data->layers->len; ++pos)
+ if (active == g_ptr_array_index(dia->data->layers, pos))
+ break;
+
+ pos = (pos + dia->data->layers->len + dist) % dia->data->layers->len;
+ target = g_ptr_array_index(dia->data->layers, pos);
+ object_add_updates_list(objects, dia);
+ layer_remove_objects(active, objects);
+ diagram_tree_add_objects(diagram_tree(), dia, objects);
+ layer_add_objects(target, g_list_copy(objects));
+ data_set_active_layer(dia->data, target);
+ diagram_tree_add_objects(diagram_tree(), dia, objects);
}
static void
-move_object_to_layer_apply(Change *change, Diagram *dia)
+move_object_to_layer_apply(MoveObjectToLayerChange *change, Diagram *dia)
{
- struct MoveObjectToLayerChange *movechange
- = (struct MoveObjectToLayerChange*)change;
- if (movechange->moving_up) {
- move_object_layer_relative(dia, movechange->objects, 1);
+ if (change->moving_up) {
+ move_object_layer_relative(dia, change->objects, 1);
} else {
- move_object_layer_relative(dia, movechange->objects, -1);
+ move_object_layer_relative(dia, change->objects, -1);
}
}
static void
-move_object_to_layer_revert(Change *change, Diagram *dia)
+move_object_to_layer_revert(MoveObjectToLayerChange *change, Diagram *dia)
{
- struct MoveObjectToLayerChange *movechange
- = (struct MoveObjectToLayerChange*)change;
- diagram_set_objects(dia, movechange->original_list);
- if (movechange->moving_up) {
- move_object_layer_relative(dia, movechange->objects, -1);
+ if (change->moving_up) {
+ move_object_layer_relative(dia, change->objects, -1);
} else {
- move_object_layer_relative(dia, movechange->objects, 1);
+ 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);
}
}
static void
-move_object_to_layer_free(Change *change)
+move_object_to_layer_free(MoveObjectToLayerChange *change)
{
- struct MoveObjectToLayerChange *movechange
- = (struct MoveObjectToLayerChange*)change;
- g_list_free(movechange->objects);
- g_list_free(movechange->original_list);
+ g_list_free(change->objects);
+ g_list_free(change->orig_list);
+ change->objects = NULL;
+ change->orig_list = NULL;
}
Change *
-undo_move_object_other_layer(Diagram *diagram, GList *selected_list,
- GList *original_list, gboolean moving_up)
+undo_move_object_other_layer(Diagram *dia, GList *selected_list,
+ gboolean moving_up)
{
- struct MoveObjectToLayerChange *movetolayerchange
- = g_new0(struct MoveObjectToLayerChange, 1);
+ MoveObjectToLayerChange *movetolayerchange
+ = g_new0(MoveObjectToLayerChange, 1);
Change *change = (Change*)movetolayerchange;
- change->apply = move_object_to_layer_apply;
- change->revert = move_object_to_layer_revert;
- change->free = move_object_to_layer_free;
-
- movetolayerchange->objects = selected_list;
- movetolayerchange->original_list = original_list;
+ change->apply = (UndoApplyFunc) move_object_to_layer_apply;
+ change->revert = (UndoRevertFunc) move_object_to_layer_revert;
+ change->free = (UndoFreeFunc) move_object_to_layer_free;
+
+ movetolayerchange->orig_layer = dia->data->active_layer;
+ movetolayerchange->orig_list = g_list_copy(dia->data->active_layer->objects);
+ movetolayerchange->objects = g_list_copy(selected_list);
movetolayerchange->moving_up = moving_up;
DEBUG_PRINTF(("UNDO: Push new obj_layer_change at %d\n", depth(dia->undo)));
undo_push_change(dia->undo, change);
return change;
-
}
-#endif
Modified: trunk/app/undo.h
==============================================================================
--- trunk/app/undo.h (original)
+++ trunk/app/undo.h Tue Jan 20 23:21:59 2009
@@ -68,8 +68,7 @@
Change *undo_connect(Diagram *dia, DiaObject *obj, Handle *handle,
ConnectionPoint *connectionpoint);
Change *undo_unconnect(Diagram *dia, DiaObject *obj, Handle *handle);
-Change *
-undo_delete_objects_children(Diagram *dia, GList *obj_list);
+Change *undo_delete_objects_children(Diagram *dia, GList *obj_list);
Change *undo_delete_objects(Diagram *dia, GList *obj_list); /* Reads current obj list */
Change *undo_insert_objects(Diagram *dia, GList *obj_list,
int applied);
@@ -84,7 +83,7 @@
Change *undo_parenting(Diagram *dia, DiaObject *parentobj, DiaObject *childobj,
gboolean parent);
Change *undo_move_object_other_layer(Diagram *diagram, GList *selected_list,
- GList *original_list, gboolean moving_up);
+ gboolean moving_up);
#endif /* UNDO_H */
Modified: trunk/data/display-ui.xml
==============================================================================
--- trunk/data/display-ui.xml (original)
+++ trunk/data/display-ui.xml Tue Jan 20 23:21:59 2009
@@ -77,6 +77,8 @@
<menuitem name="ObjectsBringtofront" action="ObjectsBringtofront" />
<menuitem name="ObjectsSendbackwards" action="ObjectsSendbackwards" />
<menuitem name="ObjectsBringforwards" action="ObjectsBringforwards" />
+ <menuitem name="ObjectsLayerAbove" action="ObjectsLayerAbove" />
+ <menuitem name="ObjectsLayerBelow" action="ObjectsLayerBelow" />
<separator name="ObjectsSep1" />
<menuitem name="ObjectsGroup" action="ObjectsGroup" />
<menuitem name="ObjectsUngroup" action="ObjectsUngroup" />
Modified: trunk/data/integrated-ui.xml
==============================================================================
--- trunk/data/integrated-ui.xml (original)
+++ trunk/data/integrated-ui.xml Tue Jan 20 23:21:59 2009
@@ -91,6 +91,8 @@
<menuitem name="ObjectsBringtofront" action="ObjectsBringtofront" />
<menuitem name="ObjectsSendbackwards" action="ObjectsSendbackwards" />
<menuitem name="ObjectsBringforwards" action="ObjectsBringforwards" />
+ <menuitem name="ObjectsLayerAbove" action="ObjectsLayerAbove" />
+ <menuitem name="ObjectsLayerBelow" action="ObjectsLayerBelow" />
<separator name="ObjectsSep1" />
<menuitem name="ObjectsGroup" action="ObjectsGroup" />
<menuitem name="ObjectsUngroup" action="ObjectsUngroup" />
Modified: trunk/data/popup-ui.xml
==============================================================================
--- trunk/data/popup-ui.xml (original)
+++ trunk/data/popup-ui.xml Tue Jan 20 23:21:59 2009
@@ -76,6 +76,8 @@
<menuitem name="ObjectsBringtofront" action="ObjectsBringtofront" />
<menuitem name="ObjectsSendbackwards" action="ObjectsSendbackwards" />
<menuitem name="ObjectsBringforwards" action="ObjectsBringforwards" />
+ <menuitem name="ObjectsLayerAbove" action="ObjectsLayerAbove" />
+ <menuitem name="ObjectsLayerBelow" action="ObjectsLayerBelow" />
<separator name="ObjectsSep1" />
<menuitem name="ObjectsGroup" action="ObjectsGroup" />
<menuitem name="ObjectsUngroup" action="ObjectsUngroup" />
Added: trunk/samples/undo-check.dia
==============================================================================
Binary file. No diff available.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]