[Planner Dev] Patch to implement the unique identifiers and first example of use



Hi guys!

Richard and me was talking this afternoon about how we are going to
implement the system to give a unique id to every object in planner so
we can use it in the undo/redo system.

In the patch is the first approach to it. After reviewing it and commit,
we will have done a great step in order to finish the undo/redo system.

Cheers and good night

-- Alvaro
Index: libplanner/mrp-application.c
===================================================================
RCS file: /cvs/gnome/planner/libplanner/mrp-application.c,v
retrieving revision 1.1.1.1
diff -u -b -B -p -r1.1.1.1 mrp-application.c
--- libplanner/mrp-application.c	1 Dec 2003 17:36:21 -0000	1.1.1.1
+++ libplanner/mrp-application.c	28 Jan 2004 19:59:05 -0000
@@ -42,6 +42,7 @@ static void application_init_gettext    
 static void application_init_file_modules (MrpApplication         *app);
 
 static GObjectClass *parent_class;
+static gulong        last_used_id = 0;
 
 GType
 mrp_application_get_type (void)
@@ -190,3 +191,15 @@ mrp_application_new (void)
 	return g_object_new (MRP_TYPE_APPLICATION, NULL);
 }
 
+/**
+ * mrp_application_get_unique_id:
+ * 
+ * Returns a unique identifier in the #MrpApplication namespace.
+ * 
+ * Return value: the unique id
+ **/
+gulong 
+mrp_application_get_unique_id (void)
+{
+	return ++last_used_id;
+}
Index: libplanner/mrp-application.h
===================================================================
RCS file: /cvs/gnome/planner/libplanner/mrp-application.h,v
retrieving revision 1.1.1.1
diff -u -b -B -p -r1.1.1.1 mrp-application.h
--- libplanner/mrp-application.h	1 Dec 2003 17:36:21 -0000	1.1.1.1
+++ libplanner/mrp-application.h	28 Jan 2004 19:59:05 -0000
@@ -53,5 +53,6 @@ struct _MrpApplicationClass {
 GType            mrp_application_get_type      (void) G_GNUC_CONST;
 
 MrpApplication * mrp_application_new           (void);
+gulong           mrp_application_get_unique_id (void);
 
 #endif /* __MRP_APPLICATION_H__ */
Index: libplanner/mrp-object.c
===================================================================
RCS file: /cvs/gnome/planner/libplanner/mrp-object.c,v
retrieving revision 1.2
diff -u -b -B -p -r1.2 mrp-object.c
--- libplanner/mrp-object.c	14 Dec 2003 11:57:07 -0000	1.2
+++ libplanner/mrp-object.c	28 Jan 2004 19:59:07 -0000
@@ -27,6 +27,7 @@
 
 #include "mrp-marshal.h"
 #include "mrp-project.h"
+#include "mrp-application.h"
 #include "mrp-private.h"
 #include "mrp-object.h"
 
@@ -149,6 +150,8 @@ object_init (MrpObject *object)
         priv = g_new0 (MrpObjectPriv, 1);
         object->priv = priv;
 
+	priv->id = mrp_application_get_unique_id ();
+
         priv->property_hash = g_hash_table_new (NULL, NULL);
 }
 
Index: libplanner/mrp-project.c
===================================================================
RCS file: /cvs/gnome/planner/libplanner/mrp-project.c,v
retrieving revision 1.3
diff -u -b -B -p -r1.3 mrp-project.c
--- libplanner/mrp-project.c	14 Dec 2003 11:57:07 -0000	1.3
+++ libplanner/mrp-project.c	28 Jan 2004 19:59:11 -0000
@@ -72,8 +72,6 @@ struct _MrpProjectPriv {
 	/* Project phases */
 	GList            *phases;
 	gchar            *phase;
-
-	guint             last_used_id;
 };
 
 /* Properties */
@@ -2215,15 +2213,3 @@ project_set_calendar (MrpProject  *proje
 
 	mrp_task_manager_recalc (priv->task_manager, TRUE);
 }
-
-guint
-imrp_task_get_unique_id (MrpProject *project)
-{
-	MrpProjectPriv *priv;
-	
-	g_return_val_if_fail (MRP_IS_PROJECT (project), 0);
-
-	priv = project->priv;
-	
-	return ++priv->last_used_id;
-}
Index: src/planner-resource-view.c
===================================================================
RCS file: /cvs/gnome/planner/src/planner-resource-view.c,v
retrieving revision 1.8
diff -u -b -B -p -r1.8 planner-resource-view.c
--- src/planner-resource-view.c	28 Jan 2004 16:55:24 -0000	1.8
+++ src/planner-resource-view.c	28 Jan 2004 19:59:15 -0000
@@ -270,9 +270,12 @@ typedef struct {
 	PlannerCmd   base;
 
 	MrpProject  *project;
+	guint        project_id;
 	const gchar *name;
 	MrpResource *resource;
+	guint        resource_id;
 	MrpGroup    *group;
+	guint        group_id;
 } ResourceCmdRemove;
 
 typedef struct {
@@ -868,9 +871,14 @@ static void
 resource_cmd_remove_do (PlannerCmd *cmd_base)
 {
 	ResourceCmdRemove *cmd;
+	guint              resource_removed_id;
 
 	cmd = (ResourceCmdRemove*) cmd_base;
 
+	resource_removed_id = mrp_object_get_id (MRP_OBJECT(cmd->resource));
+
+	cmd->resource_id = resource_removed_id;
+
 	mrp_project_remove_resource (cmd->project, cmd->resource);
 
 	cmd->resource = NULL;
@@ -888,6 +896,8 @@ resource_cmd_remove_undo (PlannerCmd *cm
 
 	mrp_object_set (resource, "name", cmd->name, NULL);
 
+	mrp_object_set_id (MRP_OBJECT (resource), cmd->resource_id);
+
 	mrp_project_add_resource (cmd->project, resource);
 
 	cmd->resource = resource;

Attachment: signature.asc
Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada digitalmente



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]