setting up units in an assignement the return

Xavier Ordoquy <[email protected]> 30 Dec 2002 23:10:06 +0100
Newsgroups gmane.comp.gnome.apps.mr-project.devel
Organization Gnome
Message-ID <1041286206.427.4.camel@debian>
Hi,

I'll hope this time it'll be ok. It still needs somewhere a dialog box
for input error which is left as an exercice ;))

This should close #302

Regards.

-- 
Xavier Ordoquy <[email protected]>
Gnome
mrp.diff (text/plain, 6.5 KB)
? mrp.diff
? docs/mrproject.uml
Index: src/dialogs/task-dialog/mg-assignment-model.c
===================================================================
RCS file: /cvs/gnome/mrproject/src/dialogs/task-dialog/mg-assignment-model.c,v
retrieving revision 1.8
diff -u -r1.8 mg-assignment-model.c
--- src/dialogs/task-dialog/mg-assignment-model.c	8 Jul 2002 21:22:11 -0000	1.8
+++ src/dialogs/task-dialog/mg-assignment-model.c	30 Dec 2002 22:03:30 -0000
@@ -23,6 +23,8 @@
 #include <config.h>
 #include <gtk/gtktreemodel.h>
 #include <libgnome/gnome-i18n.h>
+#include <mrproject/mrp-assignment.h>
+#include <mrproject/mrp-resource.h>
 #include "mg-assignment-model.h"
 
 struct _MgAssignmentModelPriv {
@@ -159,6 +161,8 @@
                 return G_TYPE_FLOAT;
 	case RESOURCE_ASSIGNMENT_COL_ASSIGNED:
 		return G_TYPE_BOOLEAN;
+	case RESOURCE_ASSIGNMENT_COL_ASSIGNED_UNITS:
+		return G_TYPE_INT;
         default:
 		return G_TYPE_INVALID;
         }
@@ -171,6 +175,7 @@
                GValue       *value)
 {	
 	MgAssignmentModel *model;
+	MrpAssignment     *assignment;
 	MrpResource       *resource;
         gchar             *str;
         gint               units;
@@ -216,9 +221,13 @@
 		}
 		break;
 	case RESOURCE_ASSIGNMENT_COL_ASSIGNED_UNITS:
-		/* FIXME: Set correct value here */
 		g_value_init (value, G_TYPE_INT);
-		g_value_set_int (value, 100);
+		assignment = mrp_task_get_assignment (model->priv->task, resource);
+		if (assignment) {
+			g_value_set_int (value, mrp_assignment_get_units (assignment));
+		} else {
+			g_value_set_int (value, 0);
+		}
 		break;
         default:
                 g_warning ("Bad column %d requested", column);
Index: src/dialogs/task-dialog/mg-task-dialog.c
===================================================================
RCS file: /cvs/gnome/mrproject/src/dialogs/task-dialog/mg-task-dialog.c,v
retrieving revision 1.45
diff -u -r1.45 mg-task-dialog.c
--- src/dialogs/task-dialog/mg-task-dialog.c	15 Dec 2002 00:03:29 -0000	1.45
+++ src/dialogs/task-dialog/mg-task-dialog.c	30 Dec 2002 22:03:31 -0000
@@ -87,6 +87,10 @@
 						     DialogData          *data);
 static void  task_dialog_setup_resource_list        (DialogData          *data); 
 static void  task_dialog_connect_to_task            (DialogData          *data);
+static void  task_dialog_resource_units_cell_edited (GtkCellRendererText *cell, 
+						     gchar               *path_str,
+						     gchar               *new_text, 
+						     DialogData          *data);
 static void  task_dialog_pred_cell_edited           (GtkCellRendererText  *cell,
 						     gchar                *path_str,
 						     gchar                *new_text,
@@ -670,6 +674,47 @@
 }
 
 static void  
+task_dialog_resource_units_cell_edited (GtkCellRendererText *cell, 
+					gchar               *path_str,
+					gchar               *new_text, 
+					DialogData          *data)
+{
+	GtkTreeView  *tree;
+	GtkTreeModel *model;
+	GtkTreePath  *path;
+	GtkTreeIter   iter;
+	MrpResource  *resource;
+	MrpAssignment *assignment;
+
+	tree = GTK_TREE_VIEW (data->resource_list);
+	
+	model = gtk_tree_view_get_model (tree);
+
+	path = gtk_tree_path_new_from_string (path_str);
+	
+	gtk_tree_model_get_iter (model, &iter, path);
+
+	gtk_tree_path_free (path);
+
+	resource = ((GList *)iter.user_data)->data;
+
+		
+	assignment = mrp_task_get_assignment (data->task, resource);
+
+	if (assignment) {
+		glong units;
+		gchar *end;
+
+		units = strtol( new_text, &end, 10);
+		if ( end != NULL ) {
+			g_object_set( assignment, "units", units, NULL);
+		} else {
+			g_message("ERROR here !");
+		}
+	}
+}
+
+static void  
 task_dialog_pred_cell_edited (GtkCellRendererText *cell, 
 			      gchar               *path_str,
 			      gchar               *new_text, 
@@ -1080,6 +1125,23 @@
 							NULL);
 
 	gtk_tree_view_column_set_resizable (col, TRUE);
+	gtk_tree_view_append_column (tree, col);
+
+	/* Assigned rate */
+	cell = gtk_cell_renderer_text_new ();
+	g_object_set (cell, "editable", TRUE, NULL);
+
+	g_signal_connect (cell,
+			  "edited",
+			  G_CALLBACK (task_dialog_resource_units_cell_edited),
+			  data);
+	
+	col = gtk_tree_view_column_new_with_attributes (_("Rate"),
+							cell,
+							"text", RESOURCE_ASSIGNMENT_COL_ASSIGNED_UNITS,
+							NULL);
+	gtk_tree_view_column_set_resizable (col, TRUE);
+	gtk_tree_view_column_set_min_width (col, 50);
 	gtk_tree_view_append_column (tree, col);
 
 	model = GTK_TREE_MODEL (mg_assignment_model_new (data->task));
Index: src/views/gantt/mg-gantt-row.c
===================================================================
RCS file: /cvs/gnome/mrproject/src/views/gantt/mg-gantt-row.c,v
retrieving revision 1.73
diff -u -r1.73 mg-gantt-row.c
--- src/views/gantt/mg-gantt-row.c	17 Dec 2002 09:37:04 -0000	1.73
+++ src/views/gantt/mg-gantt-row.c	30 Dec 2002 22:03:33 -0000
@@ -23,6 +23,7 @@
 #include <config.h>
 #include <math.h>
 #include <string.h>
+#include <stdio.h>
 #include <mrproject/mrp-project.h>
 #include <mrproject/mrp-resource.h>
 #include <mrproject/mrp-task.h>
@@ -597,7 +598,9 @@
 gantt_row_update_resources (MgGanttRow *row)
 {
 	MgGanttRowPriv *priv;
-	GList          *resources, *l;
+	GList          *l;
+	GList          *assignments;
+	MrpAssignment  *assignment;
 	MrpResource    *resource;
 	gchar          *name, *tmp_str;
 	gchar          *text = NULL;
@@ -614,10 +617,11 @@
 	spacing = rect.width / PANGO_SCALE;
 	
 	x = 0;
-	resources = mrp_task_get_assigned_resources (priv->task);
-		
-	for (l = resources; l; l = l->next) {
-		resource = MRP_RESOURCE (l->data);
+	assignments = mrp_task_get_assignments (priv->task);
+	
+	for (l = assignments; l; l = l->next) {
+		assignment = l->data;
+		resource = mrp_assignment_get_resource (assignment);
 		
 		g_object_get (resource, "name", &name, NULL);
 
@@ -631,21 +635,24 @@
 		x += spacing;
 			
 		if (text == NULL) { /* First resource */
-			text = g_strdup (name);
+			/*sprintf(value,"(%i)",mrp_assignment_get_units(assignment));*/
+			/*text = g_strconcat (name, value, NULL);*/
+			text = g_strdup_printf ("%s(%i)", name, mrp_assignment_get_units (assignment));
 			g_free (name);
 
 			continue;
 		}
-		
-		tmp_str = g_strconcat (text, ", ", name, NULL);
+		/*sprintf(value,"(%i)",mrp_assignment_get_units(assignment));*/
+		/*tmp_str = g_strconcat (text, ", ", name, value, NULL);*/
+		tmp_str = g_strdup_printf ("%s, %s(%i)", text, name, mrp_assignment_get_units (assignment));
 		
 		g_free (text);
 		g_free (name);
 		text = tmp_str;
 	}
 
-	if (resources) {
-		g_list_free (resources);
+	if (assignments) {
+		g_list_free (assignments);
 	}
 	
 	if (text == NULL) {
libmrp.diff (text/plain, 3.8 KB)
? libmrp.diff
? stamp-h1
Index: file-modules/xml/mrp-old-xml.c
===================================================================
RCS file: /cvs/gnome/libmrproject/file-modules/xml/mrp-old-xml.c,v
retrieving revision 1.9
diff -u -r1.9 mrp-old-xml.c
--- file-modules/xml/mrp-old-xml.c	19 Dec 2002 16:31:15 -0000	1.9
+++ file-modules/xml/mrp-old-xml.c	30 Dec 2002 22:02:05 -0000
@@ -416,7 +416,7 @@
 static void
 old_xml_read_assignment (MrpParser *parser, xmlNodePtr tree)
 {
-	gint   task_id, resource_id;
+	gint   task_id, resource_id, assigned_units;
 	MrpAssignment *assignment;
 	MrpTask       *task;
 	MrpResource   *resource;
@@ -428,6 +428,7 @@
 
 	task_id = old_xml_get_int (tree, "task-id");
 	resource_id = old_xml_get_int (tree, "resource-id");
+	assigned_units = old_xml_get_int_with_default (tree, "units", 100);
 	
 	task = g_hash_table_lookup (parser->task_hash, 
 				    GINT_TO_POINTER (task_id));
@@ -445,6 +446,7 @@
 	assignment = g_object_new (MRP_TYPE_ASSIGNMENT,
 				   "task", task,
 				   "resource", resource,
+				   "units", assigned_units,
 				   NULL);
 
 	parser->assignments = g_list_prepend (parser->assignments, assignment);
Index: file-modules/xml/mrproject-0.6.dtd
===================================================================
RCS file: /cvs/gnome/libmrproject/file-modules/xml/mrproject-0.6.dtd,v
retrieving revision 1.8
diff -u -r1.8 mrproject-0.6.dtd
--- file-modules/xml/mrproject-0.6.dtd	19 Dec 2002 16:31:15 -0000	1.8
+++ file-modules/xml/mrproject-0.6.dtd	30 Dec 2002 22:02:05 -0000
@@ -88,7 +88,8 @@
 
 <!ELEMENT allocation EMPTY>
 <!ATTLIST allocation task-id          CDATA #REQUIRED
-                     resource-id      CDATA #REQUIRED>
+                     resource-id      CDATA #REQUIRED
+                     units            CDATA #IMPLIED>
 
 <!ELEMENT calendars (day-types,calendar*)>
 
@@ -125,5 +126,4 @@
 <!ATTLIST day date                    CDATA #REQUIRED
               type                    CDATA #REQUIRED
               id                      CDATA #IMPLIED>
-
 
Index: storage-modules/mrproject-1/mrp-parser.c
===================================================================
RCS file: /cvs/gnome/libmrproject/storage-modules/mrproject-1/mrp-parser.c,v
retrieving revision 1.70
diff -u -r1.70 mrp-parser.c
--- storage-modules/mrproject-1/mrp-parser.c	19 Dec 2002 16:31:16 -0000	1.70
+++ storage-modules/mrproject-1/mrp-parser.c	30 Dec 2002 22:02:07 -0000
@@ -448,7 +448,7 @@
 static void
 mpp_read_assignment (MrpParser *parser, xmlNodePtr tree)
 {
-	gint   task_id, resource_id;
+	gint   task_id, resource_id, assigned_units;
 	MrpAssignment *assignment;
 	MrpTask       *task;
 	MrpResource   *resource;
@@ -460,7 +460,8 @@
 
 	task_id = mpp_xml_get_int (tree, "task-id");
 	resource_id = mpp_xml_get_int (tree, "resource-id");
-	
+	assigned_units = mpp_xml_get_int_with_default (tree, "units", 100);
+
 	task = g_hash_table_lookup (parser->task_hash, 
 				    GINT_TO_POINTER (task_id));
 	resource = g_hash_table_lookup (parser->resource_hash,
@@ -477,6 +478,7 @@
 	assignment = g_object_new (MRP_TYPE_ASSIGNMENT,
 				   "task", task,
 				   "resource", resource,
+				   "units", assigned_units,
 				   NULL);
 
 	parser->assignments = g_list_prepend (parser->assignments, assignment);
@@ -1318,6 +1320,7 @@
 	MrpResource *resource;
 	NodeEntry   *resource_entry;
 	NodeEntry   *task_entry;
+	gint         assigned_units;
 
 	g_return_if_fail (MRP_IS_ASSIGNMENT (assignment));
 
@@ -1329,6 +1332,7 @@
 	g_object_get (G_OBJECT (assignment),
 		      "task", &task,
 		      "resource", &resource,
+		      "units", &assigned_units,
 		      NULL);
 
 	task_entry = g_hash_table_lookup (parser->task_hash, task);
@@ -1336,6 +1340,7 @@
 
 	mpp_xml_set_int (node, "task-id", task_entry->id);
 	mpp_xml_set_int (node, "resource-id", resource_entry->id);
+	mpp_xml_set_int (node, "units", assigned_units);
 }
 
 static void