gnutrition-commits
[Top][All Lists]
Advanced

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

[GNUtrition-commits] /srv/bzr/gnutrition/development r24: recipe_win.py:


From: Thomas Sinclair
Subject: [GNUtrition-commits] /srv/bzr/gnutrition/development r24: recipe_win.py: Added is_dirty() which checks for changes
Date: Tue, 24 Jul 2012 22:47:59 -0400
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 24
committer: Thomas Sinclair <address@hidden>
branch nick: development
timestamp: Tue 2012-07-24 22:47:59 -0400
message:
  recipe_win.py: Added is_dirty() which checks for changes
  to UI window (changes to recipe). Now if nothing has changed the user does not
  see a dialog asking about saving recipe.
  Fixed bug in on_clear_released() which was missing affirmative user response
  about saving (changed gtk.RESPONSE_OK to gtk.RESPONSE_YES).
  Added check for changes when 'Quit' is selected from menu using is_dirty().
  Users shold not lose work now.
modified:
  src/recipe_win.py
=== modified file 'src/recipe_win.py'
--- a/src/recipe_win.py 2012-06-26 19:06:03 +0000
+++ b/src/recipe_win.py 2012-07-25 02:47:59 +0000
@@ -33,8 +33,10 @@
         self.db = database.Database()
         self.num_ingr = 0
         self.parent = parent
-
         self.store = store.Store()
+        # Dirty flag. Set True if user edits a recipe. If not set do not ask
+        # 'Do you wish to save' the recipe.
+        self.dirty = False
         self.ui.category_combo.set_rows(self.store.cat_desc_tuple)
 
     def connect_signals(self):
@@ -105,6 +107,8 @@
             self.food_edit_dlg.show(ingr, gnutr_consts.RECIPE)
 
     def on_exit_activate(self, w, d=None):
+        if self.is_dirty:
+            self.ask_save("Save your work?")
         gtk.main_quit()
     
     def on_about_activate(self, w, d=None):
@@ -125,6 +129,7 @@
         else:
             self.ui.treemodel.remove(iter)
             self.num_ingr = self.num_ingr - 1
+            self.dirty = True
 
     def on_nutr_released(self, w, d=None):
         if self.num_ingr == 0:
@@ -152,6 +157,7 @@
         self.ui.treemodel.set_value(iter, 0, ingr.amount)
         self.ui.treemodel.set_value(iter, 1, ingr.msre_desc)
         self.ui.treemodel.set_value(iter, 3, ingr)
+        self.dirty = True
 
     def on_goal_released(self, w, d=None):
         if not hasattr(self, 'nutr_goal_dlg'):
@@ -159,22 +165,26 @@
             self.nutr_goal_dlg = nutr_goal_dlg.NutrGoalDlg()
         self.nutr_goal_dlg.show()
 
+    def ask_save(self, mesg):
+            dlg = gnutr.Dialog('question', mesg, self.parent)
+            reply = dlg.run()
+            if reply == gtk.RESPONSE_YES:
+                dlg.destroy()
+                self.on_save_released(None)
+            else:
+                print 'Not saving changes.'
+                dlg.destroy()
+
     def on_clear_released(self, w, d=None):
-        if self.num_ingr != 0:
-            dlg = gnutr.Dialog('question', 
-"""You are about to clear the recipe. 
-Do you wish to save it first?""", self.parent)
-            reply = dlg.run()
-            if reply == gtk.RESPONSE_OK:
-                dlg.destroy()
-                self.on_save_released(None)
-            else:
-                dlg.destroy()
+        if self.num_ingr != 0 and self.is_dirty():
+            self.ask_save("""You are about to clear the recipe. 
+Do you wish to save it first?""")
         self.ui.recipe_entry.set_text('')
         self.ui.num_serv_entry.set_text('')
         self.ui.treemodel.clear()
         self.num_ingr = 0
         self.ui.text_buffer.set_text('')
+        self.dirty = False
 
     def check_recipe_exists(self, recipe_name):
         self.db.query("""SELECT recipe_no FROM recipe WHERE
@@ -195,6 +205,7 @@
 
         self.db.query("""INSERT INTO preparation VALUES
             ('%d', '0.0', "%s")"""  % (recipe_no, recipe.prep_desc))
+        self.dirty = False
 
     def delete_recipe(self, recipe_name):
         self.db.query("""SELECT recipe_no FROM recipe
@@ -233,9 +244,52 @@
         recipe.ingr_list = self.get_ingredient_list()
         return recipe
 
+    def is_dirty(self):
+        if self.dirty:
+            print 'Dirty flag is set.'
+            return True
+        showing = self.get_recipe()
+        if not self.check_recipe_exists(showing.desc):
+            print 'Recipe name has changed.'
+            return True
+
+        self.db.query("""SELECT recipe_no, no_serv, category_no FROM recipe
+            WHERE recipe_name = '%s'""" % (showing.desc))
+        (recipe_no, no_serv, category_no) = self.db.get_row_result()
+        print 'recipe_no:', recipe_no
+        print 'no_serv:', no_serv
+        print 'category_no:', category_no
+        if int(no_serv) != int(showing.num_serv):
+            print 'Number of servings has changed.'
+            print 'recipe', no_serv, 'showing', showing.num_serv
+            return True
+
+        if category_no != showing.cat_num:
+            print 'Category has changed.'
+            return True
+
+        self.db.query("""SELECT prep_desc FROM preparation
+                        WHERE recipe_no = '{0:d}'""".format(recipe_no))
+        prep_desc = self.db.get_single_result()
+
+        start = self.ui.text_buffer.get_start_iter();
+        end = self.ui.text_buffer.get_end_iter();
+        curr_prep_desc = self.ui.text_buffer.get_text(start, end, True)
+        if prep_desc != curr_prep_desc:
+            print 'Recipe Instructions have changed.'
+            return True
+        # Create ingredient list to compare
+        # self.db.query("""SELECT amount, Msre_No, NDB_No FROM ingredient
+        #                 WHERE recipe_no = '{0:s}'""".format(recipe_no))
+        # result  = self.db.get_result()
+        # for (amount, msre_no, food_no) in result:
+        #     pass
+        return False
+
     def on_save_released(self, w, d=None):
         recipe = self.get_recipe()
         if not recipe:
+            print 'No recipe to save.'
             return
         recipe.num = self.check_recipe_exists(recipe.desc)
         if recipe.num:
@@ -246,10 +300,12 @@
             if reply == gtk.RESPONSE_YES:
                 dlg.destroy()
                 self.delete_recipe(recipe.desc)
+                print 'Saving changes to recipe.'
                 self.save_recipe(recipe)
             else:
                 dlg.destroy()
         else:
+            print 'Saving new recipe.'
             self.save_recipe(recipe)
 
     def add_ingredient(self, ingr):
@@ -281,6 +337,7 @@
             self.ui.treemodel.set_value(iter3, 3, ingr)
             self.ui.treemodel.remove(iter1)
         self.num_ingr = self.num_ingr + 1
+        self.dirty = True
 
     def update(self, recipe):
         self.num_ingr = 0
@@ -302,6 +359,7 @@
 
     def get_ingredient_list(self):
         ingr_list = []
+        # HERE: This was misbehaving.
         #ret = True
         #iter = self.ui.treemodel.get_iter_root()
         #while ret:


reply via email to

[Prev in Thread] Current Thread [Next in Thread]