setting up units in an assignement
Xavier Ordoquy <[email protected]> 17 Dec 2002 23:29:22 +0100
| Newsgroups | gmane.comp.gnome.apps.mr-project.devel |
|---|---|
| Organization | Gnome |
| Message-ID | <1040164162.8615.4.camel@debian> |
Hi You'll find in the attached files the patches against cvs head for being able to use the units. Richard, tell me what you think it needs more work. Regards. -- Xavier Ordoquy <[email protected]> Chef de projet Sesam-Vitale, Meditrans Membre de la Gnome Foundation
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.5
diff -u -r1.5 mrp-old-xml.c
--- file-modules/xml/mrp-old-xml.c 16 Dec 2002 23:20:35 -0000 1.5
+++ file-modules/xml/mrp-old-xml.c 17 Dec 2002 21:33:47 -0000
@@ -408,7 +408,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;
@@ -420,6 +420,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));
@@ -437,6 +438,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.7
diff -u -r1.7 mrproject-0.6.dtd
--- file-modules/xml/mrproject-0.6.dtd 16 Dec 2002 23:20:35 -0000 1.7
+++ file-modules/xml/mrproject-0.6.dtd 17 Dec 2002 21:33:47 -0000
@@ -86,7 +86,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*)>
@@ -122,5 +123,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.67
diff -u -r1.67 mrp-parser.c
--- storage-modules/mrproject-1/mrp-parser.c 16 Dec 2002 23:20:37 -0000 1.67
+++ storage-modules/mrproject-1/mrp-parser.c 17 Dec 2002 21:33:48 -0000
@@ -444,7 +444,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;
@@ -456,7 +456,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,
@@ -473,6 +474,7 @@
assignment = g_object_new (MRP_TYPE_ASSIGNMENT,
"task", task,
"resource", resource,
+ "units", assigned_units,
NULL);
parser->assignments = g_list_prepend (parser->assignments, assignment);
@@ -1290,6 +1292,7 @@
MrpResource *resource;
NodeEntry *resource_entry;
NodeEntry *task_entry;
+ gint assigned_units;
g_return_if_fail (MRP_IS_ASSIGNMENT (assignment));
@@ -1301,6 +1304,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);
@@ -1308,6 +1312,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
mrp.diff
(text/plain, 6.2 KB)
? log
? mrp.diff
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 17 Dec 2002 21:35:03 -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,12 @@
}
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);
+ if ((assignment = mrp_task_get_assignment (model->priv->task, resource))) {
+ 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 17 Dec 2002 21:35:05 -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,39 @@
}
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 = MRP_RESOURCE (((GList *)iter.user_data)->data);
+
+
+ assignment = mrp_task_get_assignment (data->task, resource);
+
+ if (assignment) {
+ g_object_set(G_OBJECT(assignment),"units",atoi(new_text),NULL);
+ }
+}
+
+static void
task_dialog_pred_cell_edited (GtkCellRendererText *cell,
gchar *path_str,
gchar *new_text,
@@ -1080,6 +1117,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 17 Dec 2002 21:35:06 -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,12 +598,15 @@
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;
PangoRectangle rect;
gint spacing, x;
+ gchar value[256];
priv = row->priv;
@@ -614,10 +618,11 @@
spacing = rect.width / PANGO_SCALE;
x = 0;
- resources = mrp_task_get_assigned_resources (priv->task);
+ assignments = mrp_task_get_assignments (priv->task);
- for (l = resources; l; l = l->next) {
- resource = MRP_RESOURCE (l->data);
+ for (l = assignments; l; l = l->next) {
+ assignment = MRP_ASSIGNMENT(l->data);
+ resource = mrp_assignment_get_resource(assignment);
g_object_get (resource, "name", &name, NULL);
@@ -631,21 +636,22 @@
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);
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);
g_free (text);
g_free (name);
text = tmp_str;
}
- if (resources) {
- g_list_free (resources);
+ if (assignments) {
+ g_list_free (assignments);
}
if (text == NULL) {