[recipes/unit_convert: 2/4] Added human_readability function to e.g. display 1 cup rather than 16 tablespoons



commit 2eecd4c54ed8db21d844f9cadea34f94b9251bcc
Author: Paxana Amanda Xander <veganbikepunk gmail com>
Date:   Mon Aug 28 14:28:46 2017 -0700

    Added human_readability function to e.g. display 1 cup rather than 16 tablespoons

 src/gr-convert-units.c      |  107 +++++++++++++++++++++++++++++++++++++++++++
 src/gr-convert-units.h      |    2 +
 src/gr-ingredients-viewer.c |    2 +
 3 files changed, 111 insertions(+), 0 deletions(-)
---
diff --git a/src/gr-convert-units.c b/src/gr-convert-units.c
index b6cee9a..6173850 100644
--- a/src/gr-convert-units.c
+++ b/src/gr-convert-units.c
@@ -322,4 +322,111 @@ gr_convert_weight (double *amount, GrUnit *unit, GrPreferredUnit user_weight_uni
          }
             *amount = amount1;
             *unit = unit1;
+}
+
+void 
+gr_convert_human_readable (double *amount, GrUnit *unit)
+{
+    double amount1 = *amount;        
+    GrUnit unit1 = *unit;
+        
+    gboolean unit_changed = TRUE;
+
+    while(unit_changed) {
+        switch (unit1) {
+                case GR_UNIT_GRAM: 
+                    if (amount1 >= 1000) {
+                        amount1 = (amount1 / 1000);
+                        unit1 = GR_UNIT_KILOGRAM;
+                    }
+                break;
+
+                case GR_UNIT_KILOGRAM:
+                    if (amount1 < 1) {
+                        amount1 = (amount1 * 1000);
+                        unit1 = GR_UNIT_GRAM;
+                    }
+                break;
+
+                case GR_UNIT_POUND:
+                    if (amount1 < 1) {
+                        amount1 = (amount1 * 16);
+                        unit1 = GR_UNIT_OUNCE;
+                    }
+                break;
+
+                case GR_UNIT_OUNCE:
+                    if (amount1 >= 16) {
+                        amount1 = (amount1 / 16);
+                        unit1 = GR_UNIT_POUND;  
+                    }
+                break;
+
+                case GR_UNIT_TEASPOON:
+                    if (amount1 >= 3) {
+                        amount1 = (amount1 / 3);
+                        unit1 = GR_UNIT_TABLESPOON; 
+                    }
+                break;
+
+                case GR_UNIT_TABLESPOON:
+                    if (amount1 >= 16) {
+                        amount1 = (amount1 / 16);
+                        unit1 = GR_UNIT_CUP;
+                    }
+                        
+                    else if ((amount1 < 1) && (amount1 > 0)) {
+                        amount1 = (amount1 * 3);
+                        unit1 = GR_UNIT_TEASPOON;
+                    }     
+                break;
+                
+                case GR_UNIT_CUP:
+                    if (amount1 >= 4) {
+                        amount1 = (amount1 / 4);
+                        unit1 = GR_UNIT_QUART;
+                    }
+                        
+                    else if (amount1 < 1) {
+                        amount1 = amount1 / 16;
+                        unit1 = GR_UNIT_TABLESPOON;
+                    }
+                break;
+
+                case GR_UNIT_MILLILITER:
+                    if (amount1 >= 1000) {
+                        amount1 = amount1 / 1000;
+                        unit1 = GR_UNIT_LITER;
+                    }
+                break;
+
+                case GR_UNIT_DECILITER:
+                    if (amount1 < 1) {
+                        amount1 = amount1 * 100;
+                        unit1 = GR_UNIT_MILLILITER;
+                    }
+                    else if (amount1 >= 10) {
+                        amount1 = amount1 / 10;
+                        unit1 = GR_UNIT_LITER;
+                    }
+                break;
+
+                case GR_UNIT_LITER: 
+                    if (amount1 < 1) {
+                        amount1 = amount1 * 1000;
+                        unit1 = GR_UNIT_MILLILITER;
+                    }
+                break;
+
+                default:
+                ;
+    }
+
+                if (*unit == unit1) {
+                unit_changed = FALSE; 
+                }
+                
+                *amount = amount1;
+                *unit = unit1;
+    }
 }
\ No newline at end of file
diff --git a/src/gr-convert-units.h b/src/gr-convert-units.h
index fd31408..f817063 100644
--- a/src/gr-convert-units.h
+++ b/src/gr-convert-units.h
@@ -46,5 +46,7 @@ GrPreferredUnit     gr_convert_get_weight_unit          (void);
 void                gr_convert_temp                     (int *num, int *unit, int user_unit); 
 void                gr_convert_volume                   (double *amount, GrUnit *unit, GrPreferredUnit 
user_volume_unit); 
 void                gr_convert_weight                   (double *amount, GrUnit *unit, GrPreferredUnit 
user_weight_unit);
+void                gr_convert_human_readable           (double *amount, GrUnit *unit);
+
 
 G_END_DECLS
\ No newline at end of file
diff --git a/src/gr-ingredients-viewer.c b/src/gr-ingredients-viewer.c
index 84de874..cec050d 100644
--- a/src/gr-ingredients-viewer.c
+++ b/src/gr-ingredients-viewer.c
@@ -342,6 +342,8 @@ gr_ingredients_viewer_set_ingredients (GrIngredientsViewer *viewer,
                         }
                 }
 
+                gr_convert_human_readable(&amount, &unit);
+
                 char *a_final = gr_number_format(amount);
                 const char *u_final = gr_unit_get_name(unit);
         


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