[frogr] New function frogr_main_view_model_notify_changes_in_pictures(), to be called from dialogs modifying



commit 5dd8765c13b91d7e17283ab0237614684b3ada24
Author: Mario Sanchez Prada <msanchez gnome org>
Date:   Thu Nov 8 16:20:40 2012 +0100

    New function frogr_main_view_model_notify_changes_in_pictures(), to be
    called from dialogs modifying data from pictures in the model.
    
    A 'FrogrMainViewModel::model-changed' signal will be emited.

 src/frogr-add-to-group-dialog.c   |   16 +++++++++++++---
 src/frogr-add-to-set-dialog.c     |   16 +++++++++++++---
 src/frogr-create-new-set-dialog.c |    2 +-
 src/frogr-details-dialog.c        |   12 +++++++-----
 src/frogr-main-view-model.c       |    7 +++++++
 src/frogr-main-view-model.h       |    3 +++
 6 files changed, 44 insertions(+), 12 deletions(-)
---
diff --git a/src/frogr-add-to-group-dialog.c b/src/frogr-add-to-group-dialog.c
index 6638dfc..320b081 100644
--- a/src/frogr-add-to-group-dialog.c
+++ b/src/frogr-add-to-group-dialog.c
@@ -20,7 +20,9 @@
 
 #include "frogr-add-to-group-dialog.h"
 
+#include "frogr-controller.h"
 #include "frogr-group.h"
+#include "frogr-main-view-model.h"
 #include "frogr-picture.h"
 
 #include <config.h>
@@ -397,10 +399,18 @@ _update_pictures (FrogrAddToGroupDialog *self)
   priv = FROGR_ADD_TO_GROUP_DIALOG_GET_PRIVATE (self);
 
   selected_groups = _get_selected_groups (self);
-  for (item = priv->pictures; item; item = g_slist_next (item))
+  if (selected_groups)
     {
-      picture = FROGR_PICTURE (item->data);
-      frogr_picture_set_groups (picture, selected_groups);
+      FrogrMainViewModel *model = NULL;
+
+      for (item = priv->pictures; item; item = g_slist_next (item))
+        {
+          picture = FROGR_PICTURE (item->data);
+          frogr_picture_set_groups (picture, selected_groups);
+        }
+
+      model = frogr_controller_get_main_view_model (frogr_controller_get_instance ());
+      frogr_main_view_model_notify_changes_in_pictures (model);
     }
 }
 
diff --git a/src/frogr-add-to-set-dialog.c b/src/frogr-add-to-set-dialog.c
index 08b4072..31b4cd6 100644
--- a/src/frogr-add-to-set-dialog.c
+++ b/src/frogr-add-to-set-dialog.c
@@ -20,6 +20,8 @@
 
 #include "frogr-add-to-set-dialog.h"
 
+#include "frogr-controller.h"
+#include "frogr-main-view-model.h"
 #include "frogr-photoset.h"
 #include "frogr-picture.h"
 
@@ -398,10 +400,18 @@ _update_pictures (FrogrAddToSetDialog *self)
   priv = FROGR_ADD_TO_SET_DIALOG_GET_PRIVATE (self);
 
   selected_sets = _get_selected_photosets (self);
-  for (item = priv->pictures; item; item = g_slist_next (item))
+  if (selected_sets)
     {
-      picture = FROGR_PICTURE (item->data);
-      frogr_picture_set_photosets (picture, selected_sets);
+      FrogrMainViewModel *model = NULL;
+
+      for (item = priv->pictures; item; item = g_slist_next (item))
+        {
+          picture = FROGR_PICTURE (item->data);
+          frogr_picture_set_photosets (picture, selected_sets);
+        }
+
+      model = frogr_controller_get_main_view_model (frogr_controller_get_instance ());
+      frogr_main_view_model_notify_changes_in_pictures (model);
     }
 }
 
diff --git a/src/frogr-create-new-set-dialog.c b/src/frogr-create-new-set-dialog.c
index 6c8f673..9e85ca9 100644
--- a/src/frogr-create-new-set-dialog.c
+++ b/src/frogr-create-new-set-dialog.c
@@ -23,7 +23,6 @@
 #include "frogr-photoset.h"
 #include "frogr-controller.h"
 #include "frogr-main-view-model.h"
-#include "frogr-main-view.h"
 #include "frogr-picture.h"
 #include "frogr-util.h"
 
@@ -198,6 +197,7 @@ _update_model (FrogrCreateNewSetDialog *self,
         }
     }
 
+  frogr_main_view_model_notify_changes_in_pictures (mainview_model);
 }
 
 static void
diff --git a/src/frogr-details-dialog.c b/src/frogr-details-dialog.c
index e27a331..9f10249 100644
--- a/src/frogr-details-dialog.c
+++ b/src/frogr-details-dialog.c
@@ -949,10 +949,13 @@ _save_data (FrogrDetailsDialog *self)
   /* validate dialog */
   if (_validate_dialog_data (self))
     {
+      FrogrMainViewModel *model = NULL;
       FrogrPicture *picture;
       GSList *item;
       guint n_pictures;
 
+      model = frogr_controller_get_main_view_model (frogr_controller_get_instance ());
+
       /* Iterate over the rest of elements */
       n_pictures = g_slist_length (priv->pictures);
       for (item = priv->pictures; item; item = g_slist_next (item))
@@ -998,11 +1001,10 @@ _save_data (FrogrDetailsDialog *self)
 
       /* Add tags to the model */
       if (!g_str_equal (tags, ""))
-        {
-          FrogrMainViewModel *model = NULL;
-          model = frogr_controller_get_main_view_model (frogr_controller_get_instance ());
-          frogr_main_view_model_add_local_tags_from_string (model, tags);
-        }
+        frogr_main_view_model_add_local_tags_from_string (model, tags);
+
+      /* Notify the model that pictures details have probably changed */
+      frogr_main_view_model_notify_changes_in_pictures (model);
     }
   else
     {
diff --git a/src/frogr-main-view-model.c b/src/frogr-main-view-model.c
index 47ec610..8731018 100644
--- a/src/frogr-main-view-model.c
+++ b/src/frogr-main-view-model.c
@@ -420,6 +420,13 @@ frogr_main_view_model_reorder_pictures (FrogrMainViewModel *self,
 }
 
 void
+frogr_main_view_model_notify_changes_in_pictures (FrogrMainViewModel *self)
+{
+  /* Just emit the signal so the main view gets notified too */
+  g_signal_emit (self, signals[MODEL_CHANGED], 0);
+}
+
+void
 frogr_main_view_model_set_remote_photosets (FrogrMainViewModel *self,
                                             GSList *remote_sets)
 {
diff --git a/src/frogr-main-view-model.h b/src/frogr-main-view-model.h
index 1f57899..49ad60f 100644
--- a/src/frogr-main-view-model.h
+++ b/src/frogr-main-view-model.h
@@ -70,6 +70,9 @@ GSList *frogr_main_view_model_get_pictures (FrogrMainViewModel *self);
 void frogr_main_view_model_reorder_pictures (FrogrMainViewModel *self,
                                              const gchar *property_name,
                                              gboolean reversed);
+
+void frogr_main_view_model_notify_changes_in_pictures (FrogrMainViewModel *self);
+
 /* Photosets */
 
 void frogr_main_view_model_set_remote_photosets (FrogrMainViewModel *self,



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