Hi guys! I am trying to help richard finish the undo systema and here goes the first patch. With it you can undo a resource insert. I will continue with undo for resource properties and also for resource groups. Richard, you have done a great undo platform in planner. It is very easy to work with it. Cheers -- Alvaro
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/planner/ChangeLog,v
retrieving revision 1.37
diff -u -r1.37 ChangeLog
--- ChangeLog 23 Jan 2004 00:48:18 -0000 1.37
+++ ChangeLog 24 Jan 2004 22:19:25 -0000
@@ -1,3 +1,7 @@
+2004-01-25 Alvaro del Castillo <acs barrapunto com>
+
+ * src/planner-resource-view.c: Added undo for resource insertion.
+
2004-01-23 Xavier Ordoquy <xordoquy wanadoo fr>
* data/images/resources_usage.png:
Index: src/planner-resource-view.c
===================================================================
RCS file: /cvs/gnome/planner/src/planner-resource-view.c,v
retrieving revision 1.3
diff -u -r1.3 planner-resource-view.c
--- src/planner-resource-view.c 16 Dec 2003 22:07:08 -0000 1.3
+++ src/planner-resource-view.c 24 Jan 2004 22:19:31 -0000
@@ -252,6 +252,30 @@
{ N_("/_Edit resource..."), NULL, GIF_CB (resource_view_popup_edit_resource_cb), POPUP_EDIT, "<Item>", NULL },
};
+/*
+ * Commands
+ */
+
+typedef struct {
+ PlannerCmd base;
+
+ MrpProject *project;
+ gchar *name;
+ MrpResource *resource; /* The inserted resource */
+} ResourceCmdInsert;
+
+typedef struct {
+ PlannerCmd base;
+
+ MrpProject *project;
+
+ GtkTreePath *path;
+
+ gchar *property;
+ GValue *value;
+ GValue *old_value;
+} ResourceCmdEditProperty;
+
G_MODULE_EXPORT void
activate (PlannerView *view)
@@ -700,32 +724,80 @@
}
static void
+resource_cmd_insert_do (PlannerCmd *cmd_base)
+{
+ ResourceCmdInsert *cmd;
+ MrpResource *resource;
+
+ cmd = (ResourceCmdInsert*) cmd_base;
+
+ resource = g_object_new (MRP_TYPE_RESOURCE, NULL);
+
+ mrp_project_add_resource (cmd->project, resource);
+
+ cmd->resource = resource;
+}
+
+static void
+resource_cmd_insert_undo (PlannerCmd *cmd_base)
+{
+ ResourceCmdInsert *cmd;
+
+ cmd = (ResourceCmdInsert*) cmd_base;
+
+ mrp_project_remove_resource (cmd->project,
+ cmd->resource);
+
+ cmd->resource = NULL;
+}
+
+
+
+static PlannerCmd *
+resource_cmd_insert (PlannerView *view)
+{
+ PlannerCmd *cmd_base;
+ ResourceCmdInsert *cmd;
+
+ cmd = g_new0 (ResourceCmdInsert, 1);
+
+ cmd_base = (PlannerCmd*) cmd;
+
+ cmd_base->label = g_strdup (_("Insert resource"));
+ cmd_base->do_func = resource_cmd_insert_do;
+ cmd_base->undo_func = resource_cmd_insert_undo;
+ cmd_base->free_func = NULL; /* FIXME */
+
+ cmd->project = planner_window_get_project (view->main_window);
+
+ planner_cmd_manager_insert_and_do (planner_window_get_cmd_manager (view->main_window),
+ cmd_base);
+
+ return cmd_base;
+}
+
+static void
resource_view_insert_resource_cb (BonoboUIComponent *component,
gpointer data,
const char *cname)
{
- PlannerView *view;
- PlannerViewPriv *priv;
- MrpResource *resource;
- MrpProject *project;
- GtkTreeModel *model;
- FindResourceData *find_data;
- GtkTreePath *path;
+ PlannerView *view;
+ PlannerViewPriv *priv;
+ GtkTreeModel *model;
+ FindResourceData *find_data;
+ GtkTreePath *path;
+ ResourceCmdInsert *cmd;
view = PLANNER_VIEW (data);
priv = view->priv;
- resource = g_object_new (MRP_TYPE_RESOURCE, NULL);
-
- project = planner_window_get_project (view->main_window);
-
- mrp_project_add_resource (project, resource);
+ cmd = (ResourceCmdInsert*) resource_cmd_insert (view);
if (!GTK_WIDGET_HAS_FOCUS (priv->tree_view)) {
gtk_widget_grab_focus (GTK_WIDGET (priv->tree_view));
}
- find_data = resource_view_find_resource (view, resource);
+ find_data = resource_view_find_resource (view, cmd->resource);
if (find_data) {
model = gtk_tree_view_get_model (priv->tree_view);
path = gtk_tree_model_get_path (model, find_data->found_iter);
@@ -748,7 +820,7 @@
{
PlannerView *view;
PlannerViewPriv *priv;
- MrpProject *project;
+ MrpProject *project;
view = PLANNER_VIEW (data);
priv = view->priv;
@@ -779,8 +851,8 @@
{
PlannerView *view;
PlannerViewPriv *priv;
- MrpProject *project;
- GList *list, *node;
+ MrpProject *project;
+ GList *list, *node;
g_return_if_fail (PLANNER_IS_VIEW (data));
@@ -806,9 +878,9 @@
{
PlannerView *view;
PlannerViewPriv *priv;
- MrpResource *resource;
- GtkWidget *dialog;
- GList *list;
+ MrpResource *resource;
+ GtkWidget *dialog;
+ GList *list;
view = PLANNER_VIEW (data);
priv = view->priv;
@@ -831,7 +903,7 @@
{
PlannerView *view;
PlannerViewPriv *priv;
- GtkTreeSelection *selection;
+ GtkTreeSelection *selection;
view = PLANNER_VIEW (data);
priv = view->priv;
@@ -908,9 +980,9 @@
GdkEventButton *event,
PlannerView *view)
{
- GtkTreePath *path;
- PlannerViewPriv *priv;
- GtkItemFactory *factory;
+ GtkTreePath *path;
+ PlannerViewPriv *priv;
+ GtkItemFactory *factory;
priv = view->priv;
factory = priv->popup_factory;
@@ -1475,7 +1547,7 @@
MrpProperty *property,
PlannerView *view)
{
- PlannerViewPriv *priv;
+ PlannerViewPriv *priv;
MrpPropertyType type;
GtkTreeViewColumn *col;
GtkCellRenderer *cell;
@@ -1535,9 +1607,9 @@
static void
resource_view_property_removed (MrpProject *project,
MrpProperty *property,
- PlannerView *view)
+ PlannerView *view)
{
- PlannerViewPriv *priv;
+ PlannerViewPriv *priv;
GtkTreeViewColumn *col;
priv = view->priv;
@@ -1755,7 +1827,7 @@
static GList *
resource_view_selection_get_list (PlannerView *view)
{
- PlannerViewPriv *priv;
+ PlannerViewPriv *priv;
GtkTreeSelection *selection;
GList *ret_list;
Attachment:
signature.asc
Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada digitalmente