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